fix movie write and add comments

This commit is contained in:
HookedBehemoth 2020-02-19 02:00:24 +01:00
parent 60e25ab49a
commit 72be2f3bec
3 changed files with 124 additions and 24 deletions

View File

@ -200,11 +200,6 @@ typedef struct {
u64 unk_x8; ///< Unknown u64 unk_x8; ///< Unknown
} CapsAlbumCache; } CapsAlbumCache;
/// AlbumCommitOutput
typedef struct {
u64 unk[4]; ///< Unknown. Official sw sets this to 0.
} CapsAlbumCommitOutput;
/// Gets the ShimLibraryVersion. /// Gets the ShimLibraryVersion.
u64 capsGetShimLibraryVersion(void); u64 capsGetShimLibraryVersion(void);

View File

@ -149,7 +149,7 @@ Result capscGetAlbumMovieStreamSize(u64 stream, u64 *size);
/** /**
* @brief Reads data from an AlbumMovieReadStream. * @brief Reads data from an AlbumMovieReadStream.
* @note offset(+size) must not be negative. offset and size must be aligned to 0x40000-bytes. * @note offset(+size) must not be negative. offset and size must be aligned to 0x40000-bytes.
* @note When offset(+size) goes beyond the size from \ref capsaGetAlbumMovieStreamSize, the regions of the buffer which goes beyond that are cleared to 0, and actual_size is still set to the input size. * @note When offset(+size) goes beyond the size from \ref capscGetAlbumMovieStreamSize, the regions of the buffer which goes beyond that are cleared to 0, and actual_size is still set to the input size.
* @note Only available on [4.0.0+]. * @note Only available on [4.0.0+].
* @param[in] stream Stream handle. * @param[in] stream Stream handle.
* @param[in] offset Offset. * @param[in] offset Offset.
@ -180,7 +180,7 @@ Result capscGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size);
* @note Only available on [4.0.0+]. * @note Only available on [4.0.0+].
* @param[in] stream Stream handle. * @param[in] stream Stream handle.
* @param[in] offset Offset. * @param[in] offset Offset.
* @param[out] Output data buffer. * @param[out] buffer Output data buffer.
* @param[in] size Data buffer size. * @param[in] size Data buffer size.
* @param[out] actual_size Actual read size. * @param[out] actual_size Actual read size.
*/ */
@ -203,18 +203,125 @@ Result capscReadFileAttributeFromAlbumMovieReadStream(u64 stream, CapsScreenShot
* @param[in] entry \ref CapsAlbumFileId * @param[in] entry \ref CapsAlbumFileId
*/ */
Result capscOpenAlbumMovieWriteStream(u64 *stream, const CapsAlbumFileId *file_id); Result capscOpenAlbumMovieWriteStream(u64 *stream, const CapsAlbumFileId *file_id);
/**
* @brief Finish write to AlbumMovieWriteStream.
* @note Writes copies file from save to destination storage and deletes the temporary file.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscFinishAlbumMovieWriteStream(u64 stream); Result capscFinishAlbumMovieWriteStream(u64 stream);
/**
* @brief Closes a finished AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscCommitAlbumMovieWriteStream(u64 stream); Result capscCommitAlbumMovieWriteStream(u64 stream);
/**
* @brief Closes an AlbumMovieWriteStream in any state.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscDiscardAlbumMovieWriteStream(u64 stream); Result capscDiscardAlbumMovieWriteStream(u64 stream);
/**
* @brief Closes an AlbumMovieWriteStream in any state without deleting the temporary file.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscDiscardAlbumMovieWriteStreamNoDelete(u64 stream); Result capscDiscardAlbumMovieWriteStreamNoDelete(u64 stream);
Result capscCommitAlbumMovieWriteStreamEx(u64 stream, CapsAlbumCommitOutput *out);
/**
* @brief Closes a finished AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] entry \ref CapsAlbumEntry
*/
Result capscCommitAlbumMovieWriteStreamEx(u64 stream, CapsAlbumEntry *entry);
/**
* @brief Start AlbumMovieWriteStream data section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscStartAlbumMovieWriteStreamDataSection(u64 stream); Result capscStartAlbumMovieWriteStreamDataSection(u64 stream);
/**
* @brief End AlbumMovieWriteStream data section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscEndAlbumMovieWriteStreamDataSection(u64 stream); Result capscEndAlbumMovieWriteStreamDataSection(u64 stream);
/**
* @brief Start AlbumMovieWriteStream meta section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscStartAlbumMovieWriteStreamMetaSection(u64 stream); Result capscStartAlbumMovieWriteStreamMetaSection(u64 stream);
/**
* @brief End AlbumMovieWriteStream meta section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscEndAlbumMovieWriteStreamMetaSection(u64 stream); Result capscEndAlbumMovieWriteStreamMetaSection(u64 stream);
/**
* @brief Reads data from an AlbumMovieWriteStream.
* @note offset(+size) must not be negative. offset and size must be aligned to 0x40000-bytes.
* @note When offset(+size) goes beyond the size from \ref capscGetAlbumMovieStreamSize, the regions of the buffer which goes beyond that are cleared to 0, and actual_size is still set to the input size.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] buffer Output data buffer.
* @param[in] size Data buffer size.
* @param[out] actual_size Actual read size.
*/
Result capscReadDataFromAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size, u64 *actual_size); Result capscReadDataFromAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size, u64 *actual_size);
/**
* @brief Write data to an AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] buffer Input data buffer.
* @param[in] size Data buffer size.
*/
Result capscWriteDataToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size); Result capscWriteDataToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size);
/**
* @brief Write meta data to an AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] buffer Input data buffer.
* @param[in] size Data buffer size.
*/
Result capscWriteMetaToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size); Result capscWriteMetaToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size);
/**
* @brief Gets the BrokenReason for an AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capscGetAlbumMovieWriteStreamBrokenReason(u64 stream); Result capscGetAlbumMovieWriteStreamBrokenReason(u64 stream);
/**
* @brief Gets the data size of an AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] size Size of the data section.
*/
Result capscGetAlbumMovieWriteStreamDataSize(u64 stream, u64 *size); Result capscGetAlbumMovieWriteStreamDataSize(u64 stream, u64 *size);
/**
* @brief Sets the data size of an AlbumMovieWriteStream.
* @note Must not be bigger than 2GiB.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] size Size of the data section.
*/
Result capscSetAlbumMovieWriteStreamDataSize(u64 stream, u64 size); Result capscSetAlbumMovieWriteStreamDataSize(u64 stream, u64 size);

View File

@ -179,7 +179,7 @@ static Result _capscControlReadDataFromAlbumMovieStream(u32 cmd_id, u64 stream,
); );
} }
static Result _capscControlCmdInU8NoOut(u32 cmd_id, u8 inval) { static Result _capscControlCmdInU64NoOut(u32 cmd_id, u64 inval) {
if (hosversionBefore(4,0,0)) if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
if (!serviceIsActive(&g_capscControl)) if (!serviceIsActive(&g_capscControl))
@ -197,7 +197,7 @@ Result capscOpenAlbumMovieReadStream(u64 *stream, const CapsAlbumFileId *file_id
} }
Result capscCloseAlbumMovieStream(u64 stream) { Result capscCloseAlbumMovieStream(u64 stream) {
return _capscControlCmdInU8NoOut(2002, stream); return _capscControlCmdInU64NoOut(2002, stream);
} }
Result capscGetAlbumMovieStreamSize(u64 stream, u64 *size) { Result capscGetAlbumMovieStreamSize(u64 stream, u64 *size) {
@ -213,7 +213,7 @@ Result capscReadMovieDataFromAlbumMovieReadStream(u64 stream, u64 offset, void*
} }
Result capscGetAlbumMovieReadStreamBrokenReason(u64 stream) { Result capscGetAlbumMovieReadStreamBrokenReason(u64 stream) {
return _capscControlCmdInU8NoOut(2005, stream); return _capscControlCmdInU64NoOut(2005, stream);
} }
Result capscGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size) { Result capscGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size) {
@ -252,45 +252,43 @@ Result capscOpenAlbumMovieWriteStream(u64 *stream, const CapsAlbumFileId *file_i
} }
Result capscFinishAlbumMovieWriteStream(u64 stream) { Result capscFinishAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2402, stream); return _capscControlCmdInU64NoOut(2402, stream);
} }
Result capscCommitAlbumMovieWriteStream(u64 stream) { Result capscCommitAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2403, stream); return _capscControlCmdInU64NoOut(2403, stream);
} }
Result capscDiscardAlbumMovieWriteStream(u64 stream) { Result capscDiscardAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2404, stream); return _capscControlCmdInU64NoOut(2404, stream);
} }
Result capscDiscardAlbumMovieWriteStreamNoDelete(u64 stream) { Result capscDiscardAlbumMovieWriteStreamNoDelete(u64 stream) {
return _capscControlCmdInU8NoOut(2405, stream); return _capscControlCmdInU64NoOut(2405, stream);
} }
Result capscCommitAlbumMovieWriteStreamEx(u64 stream, CapsAlbumCommitOutput *out) { Result capscCommitAlbumMovieWriteStreamEx(u64 stream, CapsAlbumEntry *entry) {
if (hosversionBefore(4,0,0)) if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
if (!serviceIsActive(&g_capscControl)) if (!serviceIsActive(&g_capscControl))
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
return serviceDispatchInOut(&g_capscControl, 2406, stream, *entry);
return serviceDispatchInOut(&g_capscControl, 2406, stream, *out);
} }
Result capscStartAlbumMovieWriteStreamDataSection(u64 stream) { Result capscStartAlbumMovieWriteStreamDataSection(u64 stream) {
return _capscControlCmdInU8NoOut(2411, stream); return _capscControlCmdInU64NoOut(2411, stream);
} }
Result capscEndAlbumMovieWriteStreamDataSection(u64 stream) { Result capscEndAlbumMovieWriteStreamDataSection(u64 stream) {
return _capscControlCmdInU8NoOut(2412, stream); return _capscControlCmdInU64NoOut(2412, stream);
} }
Result capscStartAlbumMovieWriteStreamMetaSection(u64 stream) { Result capscStartAlbumMovieWriteStreamMetaSection(u64 stream) {
return _capscControlCmdInU8NoOut(2413, stream); return _capscControlCmdInU64NoOut(2413, stream);
} }
Result capscEndAlbumMovieWriteStreamMetaSection(u64 stream) { Result capscEndAlbumMovieWriteStreamMetaSection(u64 stream) {
return _capscControlCmdInU8NoOut(2414, stream); return _capscControlCmdInU64NoOut(2414, stream);
} }
Result capscReadDataFromAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size, u64 *actual_size) { Result capscReadDataFromAlbumMovieWriteStream(u64 stream, u64 offset, void* buffer, u64 size, u64 *actual_size) {
@ -321,7 +319,7 @@ Result capscWriteMetaToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffe
} }
Result capscGetAlbumMovieWriteStreamBrokenReason(u64 stream) { Result capscGetAlbumMovieWriteStreamBrokenReason(u64 stream) {
return _capscControlCmdInU8NoOut(2431, stream); return _capscControlCmdInU64NoOut(2431, stream);
} }
Result capscGetAlbumMovieWriteStreamDataSize(u64 stream, u64 *size) { Result capscGetAlbumMovieWriteStreamDataSize(u64 stream, u64 *size) {