| 1742 | } |
| 1743 | |
| 1744 | error_code cellRecSetInfo(s32 setInfo, u64 value) |
| 1745 | { |
| 1746 | cellRec.todo("cellRecSetInfo(setInfo=0x%x, value=0x%x)", setInfo, value); |
| 1747 | |
| 1748 | auto& rec = g_fxo->get<rec_info>(); |
| 1749 | |
| 1750 | if (rec.state != rec_state::stopped) |
| 1751 | { |
| 1752 | return CELL_REC_ERROR_INVALID_STATE; |
| 1753 | } |
| 1754 | |
| 1755 | switch (setInfo) |
| 1756 | { |
| 1757 | case CELL_REC_SETINFO_MOVIE_START_TIME_MSEC: |
| 1758 | { |
| 1759 | // TODO: check if this is actually identical to scene metadata |
| 1760 | rec.param.scene_metadata.start_time = value; |
| 1761 | cellRec.notice("cellRecSetInfo: changed movie start time to %d", value); |
| 1762 | break; |
| 1763 | } |
| 1764 | case CELL_REC_SETINFO_MOVIE_END_TIME_MSEC: |
| 1765 | { |
| 1766 | // TODO: check if this is actually identical to scene metadata |
| 1767 | rec.param.scene_metadata.end_time = value; |
| 1768 | cellRec.notice("cellRecSetInfo: changed movie end time to %d", value); |
| 1769 | break; |
| 1770 | } |
| 1771 | case CELL_REC_SETINFO_MOVIE_META: |
| 1772 | { |
| 1773 | if (!value) |
| 1774 | { |
| 1775 | return CELL_REC_ERROR_INVALID_VALUE; |
| 1776 | } |
| 1777 | |
| 1778 | vm::ptr<CellRecMovieMetadata> movie_metadata = vm::cast(value); |
| 1779 | |
| 1780 | if (!movie_metadata || !movie_metadata->gameTitle || !movie_metadata->movieTitle || |
| 1781 | strnlen(movie_metadata->gameTitle.get_ptr(), CELL_REC_MOVIE_META_GAME_TITLE_LEN) >= CELL_REC_MOVIE_META_GAME_TITLE_LEN || |
| 1782 | strnlen(movie_metadata->movieTitle.get_ptr(), CELL_REC_MOVIE_META_MOVIE_TITLE_LEN) >= CELL_REC_MOVIE_META_MOVIE_TITLE_LEN) |
| 1783 | { |
| 1784 | return CELL_REC_ERROR_INVALID_VALUE; |
| 1785 | } |
| 1786 | |
| 1787 | if ((movie_metadata->description && strnlen(movie_metadata->description.get_ptr(), CELL_REC_MOVIE_META_DESCRIPTION_LEN) >= CELL_REC_MOVIE_META_DESCRIPTION_LEN) || |
| 1788 | (movie_metadata->userdata && strnlen(movie_metadata->userdata.get_ptr(), CELL_REC_MOVIE_META_USERDATA_LEN) >= CELL_REC_MOVIE_META_USERDATA_LEN)) |
| 1789 | { |
| 1790 | return CELL_REC_ERROR_INVALID_VALUE; |
| 1791 | } |
| 1792 | |
| 1793 | rec.param.movie_metadata = {}; |
| 1794 | rec.param.movie_metadata.game_title = std::string{movie_metadata->gameTitle.get_ptr()}; |
| 1795 | rec.param.movie_metadata.movie_title = std::string{movie_metadata->movieTitle.get_ptr()}; |
| 1796 | |
| 1797 | if (movie_metadata->description) |
| 1798 | { |
| 1799 | rec.param.movie_metadata.description = std::string{movie_metadata->description.get_ptr()}; |
| 1800 | } |
| 1801 | |