From 80375c62e8e797fa171278948d2270bf257460ac Mon Sep 17 00:00:00 2001 From: Wildhaus Date: Sun, 11 Nov 2018 14:55:11 -0500 Subject: [PATCH] Add support for STFS Metadata V2 --- .../vfs/devices/stfs_container_device.cc | 19 ++++++++++++++----- src/xenia/vfs/devices/stfs_container_device.h | 8 ++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/xenia/vfs/devices/stfs_container_device.cc b/src/xenia/vfs/devices/stfs_container_device.cc index 24adea646..ea8d1dde7 100644 --- a/src/xenia/vfs/devices/stfs_container_device.cc +++ b/src/xenia/vfs/devices/stfs_container_device.cc @@ -572,11 +572,6 @@ bool StfsHeader::Read(const uint8_t* p) { header_size = xe::load_and_swap(p + 0x340); content_type = (StfsContentType)xe::load_and_swap(p + 0x344); metadata_version = xe::load_and_swap(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(p + 0x34C); media_id = xe::load_and_swap(p + 0x354); version = xe::load_and_swap(p + 0x358); @@ -617,6 +612,20 @@ bool StfsHeader::Read(const uint8_t* p) { title_thumbnail_image_size = xe::load_and_swap(p + 0x1716); std::memcpy(thumbnail_image, p + 0x171A, 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(p + 0x3D1); + episode_number = xe::load_and_swap(p + 0x3D5); + + for (size_t n = 0; n < 0x300 / 2; n++) { + additonal_display_names[n] = + xe::load_and_swap(p + 0x541A + n * 2); + additional_display_descriptions[n] = + xe::load_and_swap(p + 0x941A + n * 2); + } + return true; } diff --git a/src/xenia/vfs/devices/stfs_container_device.h b/src/xenia/vfs/devices/stfs_container_device.h index 994099878..c34632ce1 100644 --- a/src/xenia/vfs/devices/stfs_container_device.h +++ b/src/xenia/vfs/devices/stfs_container_device.h @@ -144,6 +144,14 @@ class StfsHeader { uint32_t title_thumbnail_image_size; uint8_t 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 {