libnx/nx/include/switch/services/capsa.h
2020-02-19 23:32:01 +01:00

415 lines
18 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file capsa.h
* @brief Album Accessor (caps:a) service IPC wrapper.
* @author Behemoth
* @copyright libnx Authors
*/
#pragma once
#include "../types.h"
#include "../sf/service.h"
#include "../services/caps.h"
/// Initialize caps:a.
Result capsaInitialize(void);
/// Exit caps:a.
void capsaExit(void);
/// Gets the Service for caps:a.
Service* capsaGetServiceSession(void);
/// Gets the Service for IAlbumAccessorSession, only initialized after \ref capsaOpenAlbumMovieStream was used (unaffected by using \ref capsaCloseAlbumMovieStream).
Service* capsaGetServiceSession_Accessor(void);
/**
* @brief Gets the amount of files at a AlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
* @param[out] count Amount of files.
*/
Result capsaGetAlbumFileCount(CapsAlbumStorage storage, u64 *count);
/**
* @brief Gets a listing of \ref CapsAlbumEntry, where the AlbumFile's storage matches the input one.
* @param[in] storage \ref CapsAlbumStorage
* @param[out] out Total output entries.
* @param[out] entries Output array of \ref CapsAlbumEntry.
* @param[in] count Reserved entry count.
*/
Result capsaGetAlbumFileList(CapsAlbumStorage storage, u64 *out, CapsAlbumEntry *entries, u64 count);
/**
* @brief Loads a file into the specified buffer.
* @param[in] file_id \ref CapsAlbumFileId
* @param[out] out_size Size of the AlbumFile.
* @param[out] filebuf File output buffer.
* @param[in] filebuf_size Size of the filebuf.
*/
Result capsaLoadAlbumFile(const CapsAlbumFileId *file_id, u64 *out_size, void* filebuf, u64 filebuf_size);
/**
* @brief Deletes an AlbumFile corresponding to the specified \ref CapsAlbumFileId.
* @param[in] file_id \ref CapsAlbumFileId
*/
Result capsaDeleteAlbumFile(const CapsAlbumFileId *file_id);
/**
* @brief Copies an AlbumFile to the specified \ref CapsAlbumStorage.
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] dst_storage \ref CapsAlbumStorage
*/
Result capsaStorageCopyAlbumFile(const CapsAlbumFileId *file_id, CapsAlbumStorage dst_storage);
/**
* @brief Gets the mount status of the specified \ref CapsAlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
* @param[out] is_mounted Boolean over whether the storage is mounted or not.
*/
Result capsaIsAlbumMounted(CapsAlbumStorage storage, bool *is_mounted);
/**
* @brief Returns the AlbumUsage for a specified \ref CapsAlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
* @param[out] out \ref CapsAlbumUsage2
*/
Result capsaGetAlbumUsage(CapsAlbumStorage storage, CapsAlbumUsage2 *out);
/**
* @brief Gets the size for the specified AlbumFile.
* @param[in] file_id \ref CapsAlbumFileId
* @param[out] size Size of the file.
*/
Result capsaGetAlbumFileSize(const CapsAlbumFileId *file_id, u64 *size);
/**
* @brief Load the Thumbnail for the specified AlbumFile.
* @note Will always be 320x180.
* @param[in] file_id \ref CapsAlbumFileId
* @param[out] out_size Size of the Thumbnail.
* @param[out] image JPEG image output buffer.
* @param[in] image_size Image buffer size.
*/
Result capsaLoadAlbumFileThumbnail(const CapsAlbumFileId *file_id, u64 *out_size, void* image, u64 image_size);
/**
* @brief Load the ScreenShotImage for the specified AlbumFile.
* @note Only available on [2.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[in] file_id \ref CapsAlbumFileId
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 1280x720.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotImage(u64 *width, u64 *height, const CapsAlbumFileId *file_id, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load the ScreenShotThumbnailImage for the specified AlbumFile.
* @note Only available on [2.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[in] file_id \ref CapsAlbumFileId
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 320x180.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotThumbnailImage(u64 *width, u64 *height, const CapsAlbumFileId *file_id, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load an \ref CapsAlbumEntry from a \ref CapsApplicationAlbumEntry and an ApplicationId.
* @note Only available on [2.0.0+].
* @param[out] entry \ref CapsAlbumEntry
* @param[in] application_entry \ref CapsApplicationAlbumEntry
* @param[in] application_id ApplicationId
*/
Result capsaGetAlbumEntryFromApplicationAlbumEntry(CapsAlbumEntry *entry, const CapsApplicationAlbumEntry *application_entry, u64 application_id);
/**
* @brief Load the ScreenShotImage for the specified AlbumFile.
* @note Only available on [3.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 1280x720.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotImageEx(u64 *width, u64 *height, const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load the ScreenShotThumbnailImage for the specified AlbumFile.
* @note Only available on [3.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 320x180.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotThumbnailImageEx(u64 *width, u64 *height, const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load the ScreenShotImage for the specified AlbumFile.
* @note Only available on [3.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[out] attr \ref CapsScreenShotAttribute
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 1280x720.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotImageEx0(u64 *width, u64 *height, CapsScreenShotAttribute *attr, const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Returns the AlbumUsage for a specified \ref CapsAlbumStorage.
* @note Only available on [4.0.0+].
* @param[in] storage \ref CapsAlbumStorage
* @param[out] out \ref CapsAlbumUsage3
*/
Result capsaGetAlbumUsage3(CapsAlbumStorage storage, CapsAlbumUsage3 *out);
/**
* @brief Returns the result for a AlbumStorage mount.
* @note Only available on [4.0.0+].
* @param[in] storage \ref CapsAlbumStorage
*/
Result capsaGetAlbumMountResult(CapsAlbumStorage storage);
/**
* @brief Returns the AlbumUsage for a specified \ref CapsAlbumStorage.
* @note Only available on [4.0.0+].
* @param[in] storage \ref CapsAlbumStorage
* @param[in] flags \ref CapsAlbumFileContentsFlag
* @param[out] out \ref CapsAlbumUsage16
*/
Result capsaGetAlbumUsage16(CapsAlbumStorage storage, u8 flags, CapsAlbumUsage16 *out);
/**
* @brief Returns the start and end of the Applet Id range.
* @note Only available on [6.0.0+].
* @param[out] success Returns bool over whether the call was handled or not.
* @param[out] min Mimimum applet id. Always 0x0100000000001000
* @param[out] max Maximum applet id. Always 0x0100000000001FFF
*/
Result capsaGetMinMaxAppletId(bool* success, u64* min, u64* max);
/**
* @brief Gets the amount of files of the specified type at a AlbumStorage.
* @note Only available on [5.0.0+].
* @param[in] storage \ref CapsAlbumStorage
* @param[in] flags \ref CapsAlbumFileContentsFlag
* @param[out] count Amount of files.
*/
Result capsaGetAlbumFileCountEx0(CapsAlbumStorage storage, u8 flags, u64 *count);
/**
* @brief Gets a listing of \ref CapsAlbumEntry, where the AlbumFile's storage and type matches the input one.
* @note Only available on [5.0.0+].
* @param[in] storage \ref CapsAlbumStorage
* @param[in] flags \ref CapsAlbumFileContentsFlag
* @param[out] out Total output entries.
* @param[out] entries Output array of \ref CapsAlbumEntry.
* @param[in] count Reserved entry count.
*/
Result capsaGetAlbumFileListEx0(CapsAlbumStorage storage, u8 flags, u64 *out, CapsAlbumEntry *entries, u64 count);
/**
* @brief Returns the image from the last shown ScreenShot Overlay.
* @param[out] file_id \ref CapsAlbumFileId
* @param[out] out_size Size of the thumbnail image. Always 0x5100.
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 96×54.
*/
Result capsaGetLastOverlayScreenShotThumbnail(CapsAlbumFileId *file_id, u64 *out_size, void* image, u64 image_size);
/**
* @brief Returns the image from the last shown Movie Overlay.
* @note Only available on [4.0.0+].
* @param[out] file_id \ref CapsAlbumFileId
* @param[out] out_size Size of the thumbnail image. Always 0x5100.
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 96×54.
*/
Result capsaGetLastOverlayMovieThumbnail(CapsAlbumFileId *file_id, u64 *out_size, void* image, u64 image_size);
/**
* @brief Gets the currently set autosaving storage.
* @note Wrapper around setsysGetPrimaryAlbumStorage but defaults to NAND if SD isn't available.
* @param[out] storage \ref CapsAlbumStorage
*/
Result capsaGetAutoSavingStorage(CapsAlbumStorage *storage);
/**
* @brief Gets required size to copy all files from one Storage to another.
* @param[in] dst_storage \ref CapsAlbumStorage
* @param[in] src_storage \ref CapsAlbumStorage
* @param[out] out Required storage space size.
*/
Result capsaGetRequiredStorageSpaceSizeToCopyAll(CapsAlbumStorage dst_storage, CapsAlbumStorage src_storage, u64 *out);
/**
* @brief Load the ScreenShotThumbnailImage for the specified AlbumFile.
* @note Only available on [3.0.0+].
* @param[out] width Output image width. Optional, can be NULL.
* @param[out] height Output image height. Optional, can be NULL.
* @param[out] attr \ref CapsScreenShotAttribute
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 320x180.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsLoadAlbumScreenShotThumbnailImageEx0(u64 *width, u64 *height, CapsScreenShotAttribute *attr, const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load the ScreenShotImage for the specified AlbumFile.
* @note Only available on [4.0.0+].
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] out \ref CapsLoadAlbumScreenShotImageOutput
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 1280x720.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotImageEx1(const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, CapsLoadAlbumScreenShotImageOutput *out, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Load the ScreenShotThumbnailImage for the specified AlbumFile.
* @note Only available on [4.0.0+].
* @param[in] file_id \ref CapsAlbumFileId
* @param[in] opts \ref CapsScreenShotDecodeOption
* @param[out] out \ref CapsLoadAlbumScreenShotImageOutput
* @param[out] image RGBA8 image output buffer.
* @param[in] image_size Image buffer size, should be at least large enough for RGBA8 320x180.
* @param[out] workbuf Work buffer, cleared to 0 by the cmd before it returns.
* @param[in] workbuf_size Work buffer size, must be at least the size of the JPEG within the AlbumFile.
*/
Result capsaLoadAlbumScreenShotThumbnailImageEx1(const CapsAlbumFileId *file_id, const CapsScreenShotDecodeOption *opts, CapsLoadAlbumScreenShotImageOutput *out, void* image, u64 image_size, void* workbuf, u64 workbuf_size);
/**
* @brief Unmounts the specified AlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
*/
Result capsaForceAlbumUnmounted(CapsAlbumStorage storage);
/**
* @brief Resets mount status for the specified AlbumStorage.
* @note Mounts the Storage if available.
* @param[in] storage \ref CapsAlbumStorage
*/
Result capsaResetAlbumMountStatus(CapsAlbumStorage storage);
/**
* @brief Refreshs Album Cache for the specified AlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
*/
Result capsaRefreshAlbumCache(CapsAlbumStorage storage);
/**
* @brief Gets the AlbumCache of the specified AlbumStorage.
* @note Stubbed on [4.0.0+].
* @note use \ref capsaGetAlbumCacheEx instead.
* @param[in] storage \ref CapsAlbumStorage
* @param[out] cache \ref CapsAlbumCache
*/
Result capsaGetAlbumCache(CapsAlbumStorage storage, CapsAlbumCache *cache);
/**
* @brief Gets the AlbumCache for the specified type of the specified AlbumStorage.
* @param[in] storage \ref CapsAlbumStorage
* @param[in] contents \ref CapsAlbumFileContents
* @param[out] cache \ref CapsAlbumCache
*/
Result capsaGetAlbumCacheEx(CapsAlbumStorage storage, CapsAlbumFileContents contents, CapsAlbumCache *cache);
/**
* @brief Load an \ref CapsAlbumEntry from a \ref CapsApplicationAlbumEntry and an AppletResourceUserId.
* @note Only available on [2.0.0+].
* @param[out] entry \ref CapsAlbumEntry
* @param[in] application_entry \ref CapsApplicationAlbumEntry
*/
Result capsaGetAlbumEntryFromApplicationAlbumEntryAruid(CapsAlbumEntry *entry, const CapsApplicationAlbumEntry *application_entry);
/**
* @brief Opens an AlbumMovieStream.
* @note This opens IAlbumAccessorSession if not previously opened, it's closed during \ref capsaExit.
* @note Up to 4 streams can be open at the same time. Multiple streams can be open at the same time for the same \ref CapsAlbumFileId.
* @note Only available on [4.0.0+].
* @param[out] stream Stream handle.
* @param[in] entry \ref CapsAlbumFileId
*/
Result capsaOpenAlbumMovieStream(u64 *stream, const CapsAlbumFileId *file_id);
/**
* @brief Closes an AlbumMovieStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capsaCloseAlbumMovieStream(u64 stream);
/**
* @brief Gets the data size of an AlbumMovieStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] size Size of the actual MP4, without the JPEG at the end.
*/
Result capsaGetAlbumMovieStreamSize(u64 stream, u64 *size);
/**
* @brief Reads data from an AlbumMovieStream.
* @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 Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] Output data buffer.
* @param[in] size Data buffer size.
* @param[out] actual_size Actual read size.
*/
Result capsaReadMovieDataFromAlbumMovieReadStream(u64 stream, s64 offset, void* buffer, size_t size, u64 *actual_size);
/**
* @brief Gets the BrokenReason for an AlbumMovieStream.
* @note Official sw doesn't use this.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
*/
Result capsaGetAlbumMovieReadStreamBrokenReason(u64 stream);
/**
* @brief Gets the data size of an Image taken from an AlbumMovieStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] size Expected size of an Image.
*/
Result capsaGetAlbumMovieReadStreamImageDataSize(u64 stream, u64 *size);
/**
* @brief Reads data of an Image taken from an AlbumMovieStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[in] offset Offset.
* @param[out] Output data buffer.
* @param[in] size Data buffer size.
* @param[out] actual_size Actual read size.
*/
Result capsaReadImageDataFromAlbumMovieReadStream(u64 stream, s64 offset, void* buffer, size_t size, u64 *actual_size);
/**
* @brief Gets the file attribute of an AlbumMovieStream.
* @note Only available on [4.0.0+].
* @param[in] stream Stream handle.
* @param[out] attr \ref CapsScreenShotAttribute
*/
Result capsaReadFileAttributeFromAlbumMovieReadStream(u64 stream, CapsScreenShotAttribute *attr);