Capture services: Difference between revisions
mNo edit summary |
|||
(5 intermediate revisions by one other user not shown) | |||
Line 82: | Line 82: | ||
| 60002 || [4.0.0+] OpenAccessorSession | | 60002 || [4.0.0+] OpenAccessorSession | ||
|} | |} | ||
Cmd18: Takes a type-70 buffer and returns a bool. If the buffer is sufficient it writes two application ID's to the buffer (0x100000000001000 and 0x100000000001fff) and returns true. This is used by photoViewer to group all screenshots of applets. | |||
Cmd1002: Takes a total of 0x38-bytes of input, two type-0x5 input buffers, and returns 0x20-bytes of output. [4.0.0+] No longer returns output, and now takes the following buffers instead: type-0x16, type-0x46, and type-0x6. | Cmd1002: Takes a total of 0x38-bytes of input, two type-0x5 input buffers, and returns 0x20-bytes of output. [4.0.0+] No longer returns output, and now takes the following buffers instead: type-0x16, type-0x46, and type-0x6. | ||
Line 414: | Line 416: | ||
|- | |- | ||
| 3 || ExtraMovie. Videos recorded by the current Application title via [[GRC_services#IMovieMaker|GRC MovieMaker]]. | | 3 || ExtraMovie. Videos recorded by the current Application title via [[GRC_services#IMovieMaker|GRC MovieMaker]]. | ||
|} | |||
=== AlbumStorage === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Nand. ImageDirectory on the USER partition. | |||
|- | |||
| 1 || Sd. ImageDirectory on the Sd card | |||
|} | |} | ||
Line 445: | Line 458: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || Size of the entry. | ||
|- | |- | ||
| 0x8 || 0x8 || | | 0x8 || 0x8 || ApplicationId | ||
|- | |- | ||
| 0x10 || 0x8 || [[#AlbumFileDateTime]] | | 0x10 || 0x8 || [[#AlbumFileDateTime]] | ||
|- | |- | ||
| 0x18 || 0x1 || | | 0x18 || 0x1 || [[#AlbumStorage]] | ||
|- | |- | ||
| 0x19 || 0x1 || | | 0x19 || 0x1 || [[#ContentType]] | ||
|- | |- | ||
| 0x1A || 0x6 || Padding | | 0x1A || 0x6 || Padding. | ||
|} | |} | ||
Line 468: | Line 481: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || Size of the entry. | ||
|- | |- | ||
| 0x8 || 0x8 || | | 0x8 || 0x8 || AES256 with hardcoded key over AlbumEntry. | ||
|- | |- | ||
| 0x10 || 0x8 || [[#AlbumFileDateTime]] | | 0x10 || 0x8 || [[#AlbumFileDateTime]] | ||
|- | |- | ||
| 0x18 || | | 0x18 || 0x1 || [[#AlbumStorage]] | ||
|- | |||
| 0x19 || 0x1 || [[#ContentType]] | |||
|- | |||
| 0x1a || 0x5 || Padding. | |||
|- | |||
| 0x1f || 0x1 || Unknown. Set to 1 by official software. | |||
|} | |} | ||
This is "nn::capsrv::ApplicationAlbumEntry". This is a 0x20-byte struct. On older versions where [[#ShimLibraryVersion]] is 0, this | This is "nn::capsrv::ApplicationAlbumEntry". This is a 0x20-byte struct. On older versions where [[#ShimLibraryVersion]] is 0, this was a plain AES256 with a random key generated at application launch. | ||
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). | 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). | ||
Line 635: | Line 654: | ||
== Videos == | == Videos == | ||
[[4.0.0]] includes video playback etc support in Album via mp4. These include a JPEG thumbnail, which is used for video "validation". The EXIF is also much larger: the MakerNote is 0x498-bytes, with encrypted data starting at offset +0x8. This encryption uses AES-CTR with hardcoded key/ctr. MAC calculation works the same way as the [[3.0.0]]+ JPEG MAC calculation, except with a different movie_kek_source/movie_key_source. | [[4.0.0]] includes video playback etc support in Album via mp4. These include a JPEG thumbnail, which is used for video "validation". The EXIF is also much larger: the MakerNote is 0x498-bytes, with encrypted data starting at offset +0x8. This encryption uses AES-CTR with hardcoded key/ctr. MAC calculation works the same way as the [[3.0.0]]+ JPEG MAC calculation, except with a different movie_kek_source/movie_key_source. | ||
Each 0x40000-byte chunk in the Movie data stream is validated with a SHA256 hash table, where hash_index=offset>>18. Whether an error is thrown on mismatch is controlled by [[System_Settings|system-setting]] "capsrv!enable_album_movie_filehash_verification". | |||
Note: the Album process itself uses libstagefright for video playback. | Note: the Album process itself uses libstagefright for video playback. | ||
[[Category:Services]] | [[Category:Services]] |