fix movie write and add comments

This commit is contained in:
HookedBehemoth 2020-02-19 02:00:24 +01:00 committed by HookedBehemoth
parent 8a8cd49af2
commit d4105fb0ab
3 changed files with 124 additions and 24 deletions

View File

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

View File

@ -149,7 +149,7 @@ Result capscGetAlbumMovieStreamSize(u64 stream, u64 *size);
/**
* @brief Reads data from an AlbumMovieReadStream.
* @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+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
@ -180,7 +180,7 @@ Result capscGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size);
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] Output data buffer.
* @param[out] buffer Output data buffer.
* @param[in] size Data buffer size.
* @param[out] actual_size Actual read size.
*/
@ -203,18 +203,125 @@ Result capscReadFileAttributeFromAlbumMovieReadStream(u64 stream, CapsScreenShot
* @param[in] entry \ref CapsAlbumFileId
*/
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);
/**
* @brief Closes a finished AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
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);
/**
* @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 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);
/**
* @brief End AlbumMovieWriteStream data section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
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);
/**
* @brief End AlbumMovieWriteStream meta section.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
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);
/**
* @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);
/**
* @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);
/**
* @brief Gets the BrokenReason for an AlbumMovieWriteStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
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);
/**
* @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);

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))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
if (!serviceIsActive(&g_capscControl))
@ -197,7 +197,7 @@ Result capscOpenAlbumMovieReadStream(u64 *stream, const CapsAlbumFileId *file_id
}
Result capscCloseAlbumMovieStream(u64 stream) {
return _capscControlCmdInU8NoOut(2002, stream);
return _capscControlCmdInU64NoOut(2002, stream);
}
Result capscGetAlbumMovieStreamSize(u64 stream, u64 *size) {
@ -213,7 +213,7 @@ Result capscReadMovieDataFromAlbumMovieReadStream(u64 stream, u64 offset, void*
}
Result capscGetAlbumMovieReadStreamBrokenReason(u64 stream) {
return _capscControlCmdInU8NoOut(2005, stream);
return _capscControlCmdInU64NoOut(2005, stream);
}
Result capscGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size) {
@ -252,45 +252,43 @@ Result capscOpenAlbumMovieWriteStream(u64 *stream, const CapsAlbumFileId *file_i
}
Result capscFinishAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2402, stream);
return _capscControlCmdInU64NoOut(2402, stream);
}
Result capscCommitAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2403, stream);
return _capscControlCmdInU64NoOut(2403, stream);
}
Result capscDiscardAlbumMovieWriteStream(u64 stream) {
return _capscControlCmdInU8NoOut(2404, stream);
return _capscControlCmdInU64NoOut(2404, 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))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
if (!serviceIsActive(&g_capscControl))
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
return serviceDispatchInOut(&g_capscControl, 2406, stream, *out);
return serviceDispatchInOut(&g_capscControl, 2406, stream, *entry);
}
Result capscStartAlbumMovieWriteStreamDataSection(u64 stream) {
return _capscControlCmdInU8NoOut(2411, stream);
return _capscControlCmdInU64NoOut(2411, stream);
}
Result capscEndAlbumMovieWriteStreamDataSection(u64 stream) {
return _capscControlCmdInU8NoOut(2412, stream);
return _capscControlCmdInU64NoOut(2412, stream);
}
Result capscStartAlbumMovieWriteStreamMetaSection(u64 stream) {
return _capscControlCmdInU8NoOut(2413, stream);
return _capscControlCmdInU64NoOut(2413, 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) {
@ -321,7 +319,7 @@ Result capscWriteMetaToAlbumMovieWriteStream(u64 stream, u64 offset, void* buffe
}
Result capscGetAlbumMovieWriteStreamBrokenReason(u64 stream) {
return _capscControlCmdInU8NoOut(2431, stream);
return _capscControlCmdInU64NoOut(2431, stream);
}
Result capscGetAlbumMovieWriteStreamDataSize(u64 stream, u64 *size) {