Changes

Jump to navigation Jump to search
15,769 bytes added ,  21:04, 14 September 2019
Line 30: Line 30:  
| 11 || [2.0.0+] GetAlbumEntryFromApplicationAlbumEntry
 
| 11 || [2.0.0+] GetAlbumEntryFromApplicationAlbumEntry
 
|-
 
|-
| 12 || [3.0.0+]
+
| 12 || [3.0.0+] LoadAlbumScreenShotImageEx
 
|-
 
|-
| 13 || [3.0.0+]
+
| 13 || [3.0.0+] LoadAlbumScreenShotThumbnailImageEx
 
|-
 
|-
| 14 || [3.0.0+]
+
| 14 || [3.0.0+] LoadAlbumScreenShotImageEx0
 
|-
 
|-
| 15 || [4.0.0+]
+
| 15 || [4.0.0+] GetAlbumUsage3
 
|-
 
|-
| 16 || [4.0.0+]
+
| 16 || [4.0.0+] GetAlbumMountResult
 
|-
 
|-
| 17 || [4.0.0+]
+
| 17 || [4.0.0+] GetAlbumUsage16
 
|-
 
|-
 
| 18 || [6.0.0+]
 
| 18 || [6.0.0+]
 +
|-
 +
| 100 || [5.0.0+] GetAlbumFileCountEx0
 +
|-
 +
| 101 || [5.0.0+] GetAlbumFileListEx0
 
|-
 
|-
 
| 202 || [1.0.0-2.3.0] SaveEditedScreenShot
 
| 202 || [1.0.0-2.3.0] SaveEditedScreenShot
 
|-
 
|-
| 301 || GetLastThumbnail
+
| 301 || GetLastOverlayScreenShotThumbnail
 
|-
 
|-
| 302 || [4.0.0+]
+
| 302 || [4.0.0+] GetLastOverlayMovieThumbnail
 
|-
 
|-
 
| 401 || GetAutoSavingStorage
 
| 401 || GetAutoSavingStorage
Line 54: Line 58:  
| 501 || GetRequiredStorageSpaceSizeToCopyAll
 
| 501 || GetRequiredStorageSpaceSizeToCopyAll
 
|-
 
|-
| 1001 || [3.0.0+]
+
| 1001 || [3.0.0+] LoadAlbumScreenShotThumbnailImageEx0
 
|-
 
|-
| 1002 || [3.0.0+]
+
| 1002 || [3.0.0+] LoadAlbumScreenShotImageEx1
 
|-
 
|-
| 1003 || [4.0.0+]
+
| 1003 || [4.0.0+] LoadAlbumScreenShotThumbnailImageEx1
 
|-
 
|-
 
| 8001 || ForceAlbumUnmounted
 
| 8001 || ForceAlbumUnmounted
Line 68: Line 72:  
| 8012 || GetAlbumCache
 
| 8012 || GetAlbumCache
 
|-
 
|-
| 8013 || [4.0.0+]
+
| 8013 || [4.0.0+] GetAlbumCacheEx
 
|-
 
|-
| 8021 || GetAlbumEntryFromApplicationAlbumEntryAruid
+
| 8021 || [2.0.0+] GetAlbumEntryFromApplicationAlbumEntryAruid
 
|-
 
|-
 
| 10011 || SetInternalErrorConversionEnabled
 
| 10011 || SetInternalErrorConversionEnabled
 
|-
 
|-
| 50000 || [6.0.0+]
+
| 50000 || [6.0.0+] LoadMakerNoteInfoForDebug
 
|-
 
|-
| 60002 || [4.0.0+]
+
| 60002 || [4.0.0+] OpenAccessorSession
 
|}
 
|}
   Line 92: Line 96:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 2001 ||  
+
| 2001 || OpenAlbumMovieReadStream
 
|-
 
|-
| 2002 ||  
+
| 2002 || CloseAlbumMovieReadStream
 
|-
 
|-
| 2003 ||  
+
| 2003 || GetAlbumMovieReadStreamMovieDataSize
 
|-
 
|-
| 2004 ||  
+
| 2004 || ReadMovieDataFromAlbumMovieReadStream
 
|-
 
|-
| 2005 ||  
+
| 2005 || GetAlbumMovieReadStreamBrokenReason
 
|-
 
|-
| 2006 ||  
+
| 2006 || GetAlbumMovieReadStreamImageDataSize
 
|-
 
|-
| 2007 ||  
+
| 2007 || ReadImageDataFromAlbumMovieReadStream
 
|-
 
|-
| 2008 ||  
+
| 2008 || ReadFileAttributeFromAlbumMovieReadStream
 
|}
 
|}
    
= caps:c =
 
= caps:c =
This is "nn::capsrv::sf::IAlbumControlService".
+
This is "nn::capsrv::sf::IAlbumControlService", previously "nn::capsrv::sf::ICaptureControllerService" with [1.0.0].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 116: Line 120:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 33 || [7.0.0+] || Takes a total of 0x10-bytes of input, no output.
+
| [1.0.0] 1 || CaptureRawImage ||  
 
|-
 
|-
| 2001 || ||  
+
| [1.0.0] 2 || CaptureRawImageWithTimeout ||  
 
|-
 
|-
| 2002 || ||  
+
| 33 || [7.0.0+] ||  
 
|-
 
|-
| 2011 || ||  
+
| [1.0.0] 1001 || RequestTakingScreenShot ||  
 
|-
 
|-
| 2012 || ||  
+
| [1.0.0] 1002 || RequestTakingScreenShotWithTimeout ||  
 
|-
 
|-
| 2013 || ||  
+
| [1.0.0] 1011 || NotifyTakingScreenShotRefused ||  
 
|-
 
|-
| 2014 || ||  
+
| 2001 || NotifyAlbumStorageIsAvailable ||  
 
|-
 
|-
| 2101 || || Takes an input u8 and u64, returns a 0x18-byte struct.
+
| 2002 || NotifyAlbumStorageIsUnavailable ||  
 
|-
 
|-
| 2102 || ||  
+
| 2011 || [2.0.0+] RegisterAppletResourceUserId ||  
 
|-
 
|-
| [?-3.0.2] 2201 || ||  
+
| 2012 || [2.0.0+] UnregisterAppletResourceUserId ||  
 
|-
 
|-
| 2202 || [4.0.0+] ||  
+
| 2013 || [2.0.0+] GetApplicationIdFromAruid ||  
 
|-
 
|-
| 2301 || ||  
+
| 2014 || [2.0.0+] CheckApplicationIdRegistered ||  
 
|-
 
|-
| 2302 || [4.0.0+] ||  
+
| 2101 || [2.0.0+] GenerateCurrentAlbumFileId || Takes an input u8 and u64, returns a 0x18-byte struct.
 
|-
 
|-
| 60001 || [4.0.0+] || Takes a total of 8-bytes of input and a PID, returns an [[#IAlbumControlSession]].
+
| 2102 || [2.0.0+] GenerateApplicationAlbumEnrty ||
 +
|-
 +
| [2.0.0-3.0.2] 2201 || SaveAlbumScreenShotFile ||
 +
|-
 +
| 2202 || [4.0.0+] SaveAlbumScreenShotFileEx ||
 +
|-
 +
| 2301 || [2.0.0+] SetOverlayScreenShotThumbnailData ||
 +
|-
 +
| 2302 || [4.0.0+] SetOverlayMovieThumbnailData ||
 +
|-
 +
| 60001 || [4.0.0+] OpenControlSession || Takes a total of 8-bytes of input and a PID, returns an [[#IAlbumControlSession]].
 
|}
 
|}
 +
 +
=== Cmd33 ===
 +
Takes an input u64 [[#ShimLibraryVersion]], an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and a PID, no output.
 +
 +
This is used by [[Applet_Manager_services|caps:su]] SetShimLibraryVersion.
    
== IAlbumControlSession ==
 
== IAlbumControlSession ==
Line 154: Line 173:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 2001 || ||  
+
| 2001 || OpenAlbumMovieReadStream ||  
 
|-
 
|-
| 2002 || ||  
+
| 2002 || CloseAlbumMovieReadStream ||  
 
|-
 
|-
| 2003 || ||  
+
| 2003 || GetAlbumMovieReadStreamMovieDataSize ||  
 
|-
 
|-
| 2004 || ||  
+
| 2004 || ReadMovieDataFromAlbumMovieReadStream ||  
 
|-
 
|-
| 2005 || ||  
+
| 2005 || GetAlbumMovieReadStreamBrokenReason ||  
 
|-
 
|-
| 2006 || ||  
+
| 2006 || GetAlbumMovieReadStreamImageDataSize ||  
 
|-
 
|-
| 2007 || ||  
+
| 2007 || ReadImageDataFromAlbumMovieReadStream ||  
 
|-
 
|-
| 2008 || ||  
+
| 2008 || ReadFileAttributeFromAlbumMovieReadStream ||  
 
|-
 
|-
| 2401 || ||  
+
| 2401 || OpenAlbumMovieWriteStream ||  
 
|-
 
|-
| 2402 || ||  
+
| 2402 || FinishAlbumMovieWriteStream ||  
 
|-
 
|-
| 2403 || ||  
+
| 2403 || CommitAlbumMovieWriteStream ||  
 
|-
 
|-
| 2404 || ||  
+
| 2404 || DiscardAlbumMovieWriteStream ||  
 
|-
 
|-
| 2405 || ||  
+
| 2405 || DiscardAlbumMovieWriteStreamNoDelete ||  
 
|-
 
|-
 
| 2406 || [7.0.0+] ||  
 
| 2406 || [7.0.0+] ||  
 
|-
 
|-
| 2411 || ||  
+
| 2411 || StartAlbumMovieWriteStreamDataSection ||  
 
|-
 
|-
| 2412 || ||  
+
| 2412 || EndAlbumMovieWriteStreamDataSection ||  
 
|-
 
|-
| 2413 || ||  
+
| 2413 || StartAlbumMovieWriteStreamMetaSection ||  
 
|-
 
|-
| 2414 || ||  
+
| 2414 || EndAlbumMovieWriteStreamMetaSection ||  
 
|-
 
|-
| 2421 || ||  
+
| 2421 || ReadDataFromAlbumMovieWriteStream ||  
 
|-
 
|-
| 2422 || ||  
+
| 2422 || WriteDataToAlbumMovieWriteStream ||  
 
|-
 
|-
| 2424 || ||  
+
| 2424 || WriteMetaToAlbumMovieWriteStream ||  
 
|-
 
|-
| 2431 || ||  
+
| 2431 || GetAlbumMovieWriteStreamBrokenReason ||  
 
|-
 
|-
| 2433 || ||  
+
| 2433 || GetAlbumMovieWriteStreamDataSize ||  
 
|-
 
|-
| 2434 || ||  
+
| 2434 || SetAlbumMovieWriteStreamDataSize ||  
 
|}
 
|}
    
= caps:u =
 
= caps:u =
 
This is "nn::capsrv::sf::IAlbumApplicationService".
 
This is "nn::capsrv::sf::IAlbumApplicationService".
 +
 +
This was added with [5.0.0+].
 +
 +
Official sw via the <code>nn::album</code> wrappers uses start_DateTime = YYYY-MM-DD 1970-01-01 with the rest set to all-zero, end_DateTime is the same except year = 3000. With [[#GetAlbumFileList0AafeAruidDeprecated]], start_PosixTime = UTC 1999-12-31 00:00 (0x386BF200), and end_PosixTime = UTC 2100-01-01 00:00 (0xF4865700).
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 212: Line 235:  
| 32 || [7.0.0+] [[#SetShimLibraryVersion]]
 
| 32 || [7.0.0+] [[#SetShimLibraryVersion]]
 
|-
 
|-
| 102 || GetAlbumFileList0AafeAruidDeprecated
+
| 102 || [[#GetAlbumFileList0AafeAruidDeprecated]]
 
|-
 
|-
| 103 || DeleteAlbumFileByAruid
+
| 103 || [[#DeleteAlbumFileByAruid]]
 
|-
 
|-
| 104 || GetAlbumFileSizeByAruid
+
| 104 || [[#GetAlbumFileSizeByAruid]]
 
|-
 
|-
| 105 || DeleteAlbumFileByAruidForDebug
+
| 105 || [[#DeleteAlbumFileByAruidForDebug]]
 
|-
 
|-
| 110 || LoadAlbumScreenShotImageByAruid
+
| 110 || [[#LoadAlbumScreenShotImageByAruid]]
 
|-
 
|-
| 120 || LoadAlbumScreenShotThumbnailImageByAruid
+
| 120 || [[#LoadAlbumScreenShotThumbnailImageByAruid]]
 
|-
 
|-
| 130 || PrecheckToCreateContentsByAruid
+
| 130 || [[#PrecheckToCreateContentsByAruid]]
 
|-
 
|-
| 140 || [6.0.0+] GetAlbumFileList1AafeAruidDeprecated
+
| 140 || [6.0.0+] [[#GetAlbumFileList1AafeAruidDeprecated]]
 
|-
 
|-
| 141 || [6.0.0+] GetAlbumFileList2AafeUidAruidDeprecated
+
| 141 || [6.0.0+] [[#GetAlbumFileList2AafeUidAruidDeprecated]]
 
|-
 
|-
| 142 || [7.0.0+] GetAlbumFileList3AaeAruid
+
| 142 || [7.0.0+] [[#GetAlbumFileList3AaeAruid]]
 
|-
 
|-
| 143 || [7.0.0+] GetAlbumFileList4AaeUidAruid
+
| 143 || [7.0.0+] [[#GetAlbumFileList4AaeUidAruid]]
 
|-
 
|-
| 60002 || OpenAccessorSessionForApplication
+
| 60002 || [[#OpenAccessorSessionForApplication]]
 
|}
 
|}
    
== SetShimLibraryVersion ==
 
== SetShimLibraryVersion ==
Takes a total of 0x10-bytes of input and a PID, no output.
+
Takes an input u64 [[#ShimLibraryVersion]], an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and a PID, no output.
 +
 
 +
== GetAlbumFileList0AafeAruidDeprecated ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationAlbumFileEntry]], a PID, an u8 [[#ContentType]], two s64s, and an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u64 for total output entries.
 +
 
 +
The two s64s are the start/end PosixTime.
 +
 
 +
== DeleteAlbumFileByAruid ==
 +
Takes a PID, an input u8 [[#ContentType]], an [[#ApplicationAlbumFileEntry]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and no output.
 +
 
 +
The [[#ContentType]] must match 3.
 +
 
 +
== GetAlbumFileSizeByAruid ==
 +
Takes a PID, an input [[#ApplicationAlbumFileEntry]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and returns an output u64.
 +
 
 +
This gets the filesize for the entire specified Album file.
 +
 
 +
== DeleteAlbumFileByAruidForDebug ==
 +
Takes a PID, an [[#ApplicationAlbumFileEntry]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and no output.
 +
 
 +
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned.
 +
 
 +
== LoadAlbumScreenShotImageByAruid ==
 +
Takes a PID, a type-0x16 output buffer containing a [[#LoadAlbumScreenShotImageOutputForApplication]], a type-0x46 output buffer, a type-0x6 output buffer, an [[#ApplicationAlbumFileEntry]], a [[#ScreenShotDecodeOption]], and no output.
 +
 
 +
The type-0x46 buffer contains the RGBA8 image data. The type-0x6 buffer is a work buffer used for reading the entire AlbumFile, the buffer size must be at least the AlbumFile filesize (cleared before the cmd returns).
 +
 
 +
== LoadAlbumScreenShotThumbnailImageByAruid ==
 +
Takes a PID, a type-0x16 output buffer containing a [[#LoadAlbumScreenShotImageOutputForApplication]], a type-0x46 output buffer,  a type-0x6 output buffer, an [[#ApplicationAlbumFileEntry]], a [[#ScreenShotDecodeOption]], and no output.
 +
 
 +
The type-0x46 buffer contains the RGBA8 image data. The type-0x6 buffer is a work buffer used for reading the entire AlbumFile, the buffer size must be at least the AlbumFile filesize (cleared before the cmd returns).
 +
 
 +
== PrecheckToCreateContentsByAruid ==
 +
Takes a PID, an input u8 [[#ContentType]], an u64, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and no output.
 +
 
 +
== GetAlbumFileList1AafeAruidDeprecated ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationAlbumFileEntry]], a PID, an u8 [[#ContentType]], two [[#AlbumFileDateTime]], and an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u64 for total output entries.
 +
 
 +
The first [[#AlbumFileDateTime]] is the start_DateTime, the second [[#AlbumFileDateTime]] is the end_DateTime. In the IPC rawdata, these use 2-byte alignment.
 +
 
 +
== GetAlbumFileList2AafeUidAruidDeprecated ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationAlbumFileEntry]], a PID, an u8 [[#ContentType]], two [[#AlbumFileDateTime]], an u128 userID, and an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u64 for total output entries.
 +
 
 +
The first [[#AlbumFileDateTime]] is the start_DateTime, the second [[#AlbumFileDateTime]] is the end_DateTime. In the IPC rawdata, these use 2-byte alignment.
 +
 
 +
== GetAlbumFileList3AaeAruid ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationAlbumEntry]], a PID, an u8 [[#ContentType]], two [[#AlbumFileDateTime]], and an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u64 for total output entries.
 +
 
 +
The first [[#AlbumFileDateTime]] is the start_DateTime, the second [[#AlbumFileDateTime]] is the end_DateTime. In the IPC rawdata, these use 2-byte alignment.
 +
 
 +
== GetAlbumFileList4AaeUidAruid ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationAlbumEntry]], a PID, an u8 [[#ContentType]], two [[#AlbumFileDateTime]], an u128 userID, and an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u64 for total output entries.
 +
 
 +
The first [[#AlbumFileDateTime]] is the start_DateTime, the second [[#AlbumFileDateTime]] is the end_DateTime. In the IPC rawdata, these use 2-byte alignment.
 +
 
 +
== OpenAccessorSessionForApplication ==
 +
Takes a PID, an input [[#ApplicationAlbumFileEntry]], an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and returns an output [[#IAlbumAccessorApplicationSession]].
    
== IAlbumAccessorApplicationSession ==
 
== IAlbumAccessorApplicationSession ==
 
This is "nn::capsrv::sf::IAlbumAccessorApplicationSession".
 
This is "nn::capsrv::sf::IAlbumAccessorApplicationSession".
 +
 +
This was added with [5.0.0+].
 +
 +
This is opened prior to using [[#OpenAlbumMovieReadStream]], when it previously wasn't opened. Official sw only closes this session when closing caps:u, not when using [[#CloseAlbumMovieReadStream]].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 247: Line 330:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 2001 || OpenAlbumMovieReadStream
+
| 2001 || [[#OpenAlbumMovieReadStream]]
 +
|-
 +
| 2002 || [[#CloseAlbumMovieReadStream]]
 +
|-
 +
| 2003 || [[#GetAlbumMovieReadStreamMovieDataSize]]
 +
|-
 +
| 2004 || [[#ReadMovieDataFromAlbumMovieReadStream]]
 +
|-
 +
| 2005 || [[#GetAlbumMovieReadStreamBrokenReason]]
 +
|}
 +
 
 +
=== OpenAlbumMovieReadStream ===
 +
Takes a PID, an input [[#ApplicationAlbumFileEntry]], an u64 [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], and returns an output u64 [[#AlbumMovieReadStreamHandle]].
 +
 
 +
Up to 4 streams can be open at the same time. Multiple streams can be open at the same time for the same [[#ApplicationAlbumFileEntry]].
 +
 
 +
=== CloseAlbumMovieReadStream ===
 +
Takes an input u64 [[#AlbumMovieReadStreamHandle]], no output.
 +
 
 +
=== GetAlbumMovieReadStreamMovieDataSize ===
 +
Takes an input u64 [[#AlbumMovieReadStreamHandle]], returns an output u64.
 +
 
 +
This gets the size of the actual MP4, without the JPEG at the end.
 +
 
 +
=== ReadMovieDataFromAlbumMovieReadStream ===
 +
Takes a type-0x6 output buffer, an input u64 [[#AlbumMovieReadStreamHandle]], an input s64 offset, and returns an output u64 actual_size.
 +
 
 +
offset(+size) must not be negative. offset and size must be aligned to 0x40000-bytes. When offset(+size) goes beyond the size from [[#GetAlbumMovieReadStreamMovieDataSize]], the regions of the buffer which goes beyond that are cleared to 0, and actual_size is still set to the input size.
 +
 
 +
=== GetAlbumMovieReadStreamBrokenReason ===
 +
Takes an input u64 [[#AlbumMovieReadStreamHandle]], no output.
 +
 
 +
Unused by official sw.
 +
 
 +
= ShimLibraryVersion =
 +
This is a version field. Official sw uses func <code>nn::capsrv::GetShimLibraryVersion()</code> to load this from a global var, which is then used with various commands (the input for those cmds must match value 1).
 +
 
 +
[7.0.0-9.0.0] This is value 1.
 +
 
 +
Controls which struct version to use for [[#ApplicationAlbumEntry]] / [[#AlbumFileEntry]]. However, the struct size for the newer version is used regardless on [7.0.0+] for the actual cmds.
 +
 
 +
= Enums =
 +
 
 +
=== AlbumImageOrientation ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Unknown.
 +
|-
 +
| 1 || Unknown.
 +
|-
 +
| 2 || Unknown.
 +
|-
 +
| 3 || Unknown.
 +
|}
 +
 
 +
This is "nn::album::ImageOrientation".
 +
 
 +
=== AlbumReportOption ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Don't display the screenshot-taken Overlay-applet notification.
 +
|-
 +
| 1 || Display the screenshot-taken Overlay notification.
 +
|}
 +
 
 +
This is "nn::album::AlbumReportOption".
 +
 
 +
=== ContentType ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Screenshot. Album screenshots.
 +
|-
 +
| 1 || Movie. Album videos.
 +
|-
 +
| 3 || ExtraMovie. Videos recorded by the current Application title via [[GRC_services#IMovieMaker|GRC MovieMaker]].
 +
|}
 +
 
 +
= AlbumFileDateTime =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x2 || Year
 +
|-
 +
| 0x2 || 0x1 || Month
 +
|-
 +
| 0x3 || 0x1 || Day
 +
|-
 +
| 0x4 || 0x1 || Hour
 +
|-
 +
| 0x5 || 0x1 || Minute
 +
|-
 +
| 0x6 || 0x1 || Second
 +
|-
 +
| 0x7 || 0x1 || Unique ID for when there's multiple Album files with the same timestamp.
 +
|}
 +
 
 +
This is "nn::capsrv::AlbumFileDateTime". This is a 0x8-byte struct.
 +
 
 +
This corresponds to each field in the Album entry filename, prior to the "-": <code>YYYYMMDDHHMMSSII</code>.
 +
 
 +
= AlbumEntry =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || Unknown
 +
|-
 +
| 0x8 || 0x8 || titleID
 +
|-
 +
| 0x10 || 0x8 || [[#AlbumFileDateTime]]
 +
|-
 +
| 0x18 || 0x1 || Unknown
 +
|-
 +
| 0x19 || 0x1 || Unknown
 +
|-
 +
| 0x1A || 0x6 || Padding?
 +
|}
 +
 
 +
This is "nn::capsrv::AlbumEntry". This is a 0x20-byte struct.
 +
 
 +
= AlbumFileEntry =
 +
This is "nn::album::AlbumFileEntry". This is identical to [[#ApplicationAlbumEntry]]. On older versions where official sw used to use cmds which use [[#ApplicationAlbumFileEntry]], this struct matches [[#ApplicationAlbumFileEntry]].
 +
 
 +
= ApplicationAlbumEntry =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || Unknown.
 +
|-
 +
| 0x8 || 0x8 || Unknown.
 +
|-
 +
| 0x10 || 0x8 || [[#AlbumFileDateTime]]
 +
|-
 +
| 0x18 || 0x8 || Unknown.
 +
|}
 +
 
 +
This is "nn::capsrv::ApplicationAlbumEntry". This is a 0x20-byte struct. On older versions where [[#ShimLibraryVersion]] is 0, this has a different format.
 +
 
 +
With the output from [[Applet_Manager_services#caps:su|caps:su]] sdk-nso only uses this for the [[Internet_Browser|Share-applet]] (when the output is used at all), with everything else it's used as an [[#AlbumFileEntry]]. In those cases with the <code>nn::album</code> wrapper funcs, it's "converted" by just copying the struct (arrays are "converted" by just returning a ptr to the input array).
 +
 
 +
= ApplicationAlbumFileEntry =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x20 || [[#ApplicationAlbumEntry]]
 +
|-
 +
| 0x20 || 0x8 || [[#AlbumFileDateTime]]
 +
|-
 +
| 0x28 || 0x8 || Unknown.
 +
|}
 +
 
 +
This is "nn::capsrv::ApplicationAlbumFileEntry". This is a 0x30-byte struct.
 +
 
 +
On newer versions where official sw uses [[#ApplicationAlbumEntry]], [[#ApplicationAlbumEntry]] is converted to ApplicationAlbumFileEntry when using cmds which need it with:
 +
* First 0x20-bytes are the same.
 +
* u64 ApplicationAlbumFileEntry+0x20 = [[#ApplicationAlbumEntry]]+0x10.
 +
* Last 8-bytes = 0.
 +
 
 +
= ScreenShotAttribute =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Always set to 0 by official sw.
 +
|-
 +
| 0x4 || 0x4 || [[#AlbumImageOrientation]]
 +
|-
 +
| 0x8 || 0x4 || Always set to 0 by official sw.
 +
|-
 +
| 0xC || 0x4 || Always set to 1 by official sw.
 +
|-
 +
| 0x10 || 0x30 || Always set to 0 by official sw.
 +
|}
 +
 
 +
This is "nn::capsrv::detail::ScreenShotAttributeEx0" / "nn::capsrv::ScreenShotAttribute". This is a 0x40-byte struct.
 +
 
 +
= ApplicationData =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x400 || UserData
 +
|-
 +
| 0x400 || 0x4 || UserData size.
 +
|}
 +
 
 +
This is "nn::capsrv::ApplicationData". This is a 0x404-byte struct.
 +
 
 +
= UserIdList =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x80 || u128 userIDs
 +
|-
 +
| 0x80 || 0x1 || Total userIDs.
 +
|-
 +
| 0x81 || 0x7 || Padding.
 +
|}
 +
 
 +
This is "nn::capsrv::UserIdList". This is a 0x88-byte struct.
 +
 
 +
= LoadAlbumScreenShotImageOutputForApplication =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || s64 Width. Official sw copies this to a s32 output field.
 +
|-
 +
| 0x8 || 0x8 || s64 Height. Official sw copies this to a s32 output field.
 +
|-
 +
| 0x10 || 0x40 || [[#ScreenShotAttributeForApplication]]
 +
|-
 +
| 0x50 || 0x404 || [[#ApplicationData]]
 +
|-
 +
| 0x454 || 0xAC || Unused
 +
|}
 +
 
 +
This is "nn::capsrv::sf::LoadAlbumScreenShotImageOutputForApplication". This is a 0x500-byte struct.
 +
 
 +
= ScreenShotDecodeOption =
 +
This is "nn::capsrv::ScreenShotDecodeOption". This is a 0x20-byte struct.
 +
 
 +
Official sw sets this to all-zero with the input for [[#LoadAlbumScreenShotImageByAruid]]/[[#LoadAlbumScreenShotThumbnailImageByAruid]].
 +
 
 +
= ScreenShotAttributeForApplication =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Unknown.
 +
|-
 +
| 0x4 || 0x1 || Unknown.
 +
|-
 +
| 0x5 || 0x1 || Unknown.
 +
|-
 +
| 0x6 || 0x1 || Unknown.
 +
|-
 +
| 0x7 || 0x1 || Padding.
 +
|-
 +
| 0x8 || 0x4 || Unknown.
 +
|-
 +
| 0xC || 0x4 || Unknown.
 +
|-
 +
| 0x10 || 0x4 || Unknown.
 +
|-
 +
| 0x14 || 0x4 || Unknown.
 +
|-
 +
| 0x18 || 0x4 || Unknown.
 +
|-
 +
| 0x1C || 0x4 || Unknown.
 +
|-
 +
| 0x20 || 0x2 || Unknown.
 +
|-
 +
| 0x22 || 0x2 || Unknown.
 +
|-
 +
| 0x24 || 0x2 || Unknown.
 +
|-
 +
| 0x26 || 0x2 || Unknown.
 
|-
 
|-
| 2002 || CloseAlbumMovieReadStream
+
| 0x28 || 0x18 || Always zero.
 +
|}
 +
 
 +
This is "nn::capsrv::ScreenShotAttributeForApplication". This is a 0x40-byte struct.
 +
 
 +
Official sw only uses this in <code>nn::album</code> funcs which convert this to [[#AlbumFileAttribute]], with the output from [[#LoadAlbumScreenShotImageByAruid]]/[[#LoadAlbumScreenShotThumbnailImageByAruid]] (only the first u32 is used).
 +
 
 +
= AlbumFileAttribute =
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 2003 || GetAlbumMovieReadStreamMovieDataSize
+
! Offset || Size || Description
 
|-
 
|-
| 2004 || ReadMovieDataFromAlbumMovieReadStream
+
| 0x0 || 0x8 || The <code>nn::album</code> funcs referenced by [[#ScreenShotAttributeForApplication]] set this to: <code>ScreenShotAttributeForApplication.first_u32 == 2</code>.
 
|-
 
|-
| 2005 || GetAlbumMovieReadStreamBrokenReason
+
| 0x8 || 0x8 || Set to zero by official sw.
 
|}
 
|}
 +
 +
This is "nn::album::AlbumFileAttribute". This is a 0x10-byte struct. See also [[#ScreenShotAttributeForApplication]].
 +
 +
= AlbumMovieReadStreamHandle =
 +
This is "nn::capsrv::AlbumMovieReadStreamHandle" / "nn::album::MovieStreamHandle".
 +
 +
This is an u64 stream handle.
    
= Notes =
 
= Notes =

Navigation menu