Add support for STFS Metadata V2

This commit is contained in:
Wildhaus 2018-11-11 14:55:11 -05:00
parent 19fb21da7d
commit 80375c62e8
2 changed files with 22 additions and 5 deletions

View File

@ -572,11 +572,6 @@ bool StfsHeader::Read(const uint8_t* p) {
header_size = xe::load_and_swap<uint32_t>(p + 0x340); header_size = xe::load_and_swap<uint32_t>(p + 0x340);
content_type = (StfsContentType)xe::load_and_swap<uint32_t>(p + 0x344); content_type = (StfsContentType)xe::load_and_swap<uint32_t>(p + 0x344);
metadata_version = xe::load_and_swap<uint32_t>(p + 0x348); metadata_version = xe::load_and_swap<uint32_t>(p + 0x348);
if (metadata_version > 1) {
// This is a variant of thumbnail data/etc.
// Can just ignore it for now (until we parse thumbnails).
XELOGW("STFSContainer doesn't support version %d yet", metadata_version);
}
content_size = xe::load_and_swap<uint32_t>(p + 0x34C); content_size = xe::load_and_swap<uint32_t>(p + 0x34C);
media_id = xe::load_and_swap<uint32_t>(p + 0x354); media_id = xe::load_and_swap<uint32_t>(p + 0x354);
version = xe::load_and_swap<uint32_t>(p + 0x358); version = xe::load_and_swap<uint32_t>(p + 0x358);
@ -617,6 +612,20 @@ bool StfsHeader::Read(const uint8_t* p) {
title_thumbnail_image_size = xe::load_and_swap<uint32_t>(p + 0x1716); title_thumbnail_image_size = xe::load_and_swap<uint32_t>(p + 0x1716);
std::memcpy(thumbnail_image, p + 0x171A, 0x4000); std::memcpy(thumbnail_image, p + 0x171A, 0x4000);
std::memcpy(title_thumbnail_image, p + 0x571A, 0x4000); std::memcpy(title_thumbnail_image, p + 0x571A, 0x4000);
// Metadata v2 Fields
std::memcpy(series_id, p + 0x3B1, 0x10);
std::memcpy(season_id, p + 0x3C1, 0x10);
season_number = xe::load_and_swap<uint16_t>(p + 0x3D1);
episode_number = xe::load_and_swap<uint16_t>(p + 0x3D5);
for (size_t n = 0; n < 0x300 / 2; n++) {
additonal_display_names[n] =
xe::load_and_swap<uint16_t>(p + 0x541A + n * 2);
additional_display_descriptions[n] =
xe::load_and_swap<uint16_t>(p + 0x941A + n * 2);
}
return true; return true;
} }

View File

@ -144,6 +144,14 @@ class StfsHeader {
uint32_t title_thumbnail_image_size; uint32_t title_thumbnail_image_size;
uint8_t thumbnail_image[0x4000]; uint8_t thumbnail_image[0x4000];
uint8_t title_thumbnail_image[0x4000]; uint8_t title_thumbnail_image[0x4000];
// Metadata v2 Fields
uint8_t series_id[0x10];
uint8_t season_id[0x10];
int16_t season_number;
int16_t episode_number;
wchar_t additonal_display_names[0x300 / 2];
wchar_t additional_display_descriptions[0x300 / 2];
}; };
class StfsContainerDevice : public Device { class StfsContainerDevice : public Device {