From a0cd753060fb8b2701c4e1733cc56da4523f852c Mon Sep 17 00:00:00 2001 From: JosJuice Date: Thu, 3 Dec 2015 17:29:59 +0100 Subject: Don't read from volume when reloading Wii banners Should make loading cached Wii games that lack banners slightly faster. --- Source/Core/DiscIO/Volume.h | 4 +++- Source/Core/DiscIO/VolumeCommon.cpp | 5 +---- Source/Core/DiscIO/VolumeDirectory.cpp | 17 +++++++++++++++-- Source/Core/DiscIO/VolumeDirectory.h | 1 + Source/Core/DiscIO/VolumeWad.cpp | 12 ++++++++++++ Source/Core/DiscIO/VolumeWad.h | 1 + Source/Core/DiscIO/VolumeWiiCrypted.cpp | 12 ++++++++++++ Source/Core/DiscIO/VolumeWiiCrypted.h | 1 + 8 files changed, 46 insertions(+), 7 deletions(-) (limited to 'Source/Core/DiscIO') diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h index e9dd63f682..2e55ac5963 100644 --- a/Source/Core/DiscIO/Volume.h +++ b/Source/Core/DiscIO/Volume.h @@ -90,7 +90,7 @@ public: virtual std::map GetNames(bool prefer_long) const = 0; virtual std::map GetDescriptions() const { return std::map(); } virtual std::string GetCompany() const { return std::string(); } - virtual std::vector GetBanner(int* width, int* height) const; + virtual std::vector GetBanner(int* width, int* height) const = 0; virtual u64 GetFSTSize() const = 0; virtual std::string GetApploaderDate() const = 0; // 0 is the first disc, 1 is the second disc @@ -108,6 +108,8 @@ public: // Size on disc (compressed size) virtual u64 GetRawSize() const = 0; + static std::vector GetWiiBanner(int* width, int* height, u64 title_id); + protected: template std::string DecodeString(const char(&data)[N]) const diff --git a/Source/Core/DiscIO/VolumeCommon.cpp b/Source/Core/DiscIO/VolumeCommon.cpp index a6fa2dc41d..17fbbc4d11 100644 --- a/Source/Core/DiscIO/VolumeCommon.cpp +++ b/Source/Core/DiscIO/VolumeCommon.cpp @@ -24,14 +24,11 @@ static const unsigned int WII_BANNER_HEIGHT = 64; static const unsigned int WII_BANNER_SIZE = WII_BANNER_WIDTH * WII_BANNER_HEIGHT * 2; static const unsigned int WII_BANNER_OFFSET = 0xA0; -std::vector IVolume::GetBanner(int* width, int* height) const +std::vector IVolume::GetWiiBanner(int* width, int* height, u64 title_id) { *width = 0; *height = 0; - u64 title_id = 0; - GetTitleID(&title_id); - std::string file_name = StringFromFormat("%s/title/%08x/%08x/data/banner.bin", File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title_id >> 32), (u32)title_id); if (!File::Exists(file_name)) diff --git a/Source/Core/DiscIO/VolumeDirectory.cpp b/Source/Core/DiscIO/VolumeDirectory.cpp index 672a322c5c..69018fc1cd 100644 --- a/Source/Core/DiscIO/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/VolumeDirectory.cpp @@ -183,7 +183,8 @@ IVolume::ECountry CVolumeDirectory::GetCountry() const std::string CVolumeDirectory::GetMakerID() const { - return "VOID"; + // Not implemented + return "00"; } std::string CVolumeDirectory::GetInternalName() const @@ -204,6 +205,14 @@ std::map CVolumeDirectory::GetNames(bool prefer return names; } +std::vector CVolumeDirectory::GetBanner(int* width, int* height) const +{ + // Not implemented + *width = 0; + *height = 0; + return std::vector(); +} + void CVolumeDirectory::SetName(const std::string& name) { size_t length = name.length(); @@ -216,11 +225,13 @@ void CVolumeDirectory::SetName(const std::string& name) u64 CVolumeDirectory::GetFSTSize() const { + // Not implemented return 0; } std::string CVolumeDirectory::GetApploaderDate() const { + // Not implemented return "VOID"; } @@ -239,12 +250,14 @@ BlobType CVolumeDirectory::GetBlobType() const u64 CVolumeDirectory::GetSize() const { + // Not implemented return 0; } u64 CVolumeDirectory::GetRawSize() const { - return GetSize(); + // Not implemented + return 0; } std::string CVolumeDirectory::ExtractDirectoryName(const std::string& _rDirectory) diff --git a/Source/Core/DiscIO/VolumeDirectory.h b/Source/Core/DiscIO/VolumeDirectory.h index 8d8f664a07..28baea670c 100644 --- a/Source/Core/DiscIO/VolumeDirectory.h +++ b/Source/Core/DiscIO/VolumeDirectory.h @@ -43,6 +43,7 @@ public: u16 GetRevision() const override { return 0; } std::string GetInternalName() const override; std::map GetNames(bool prefer_long) const override; + std::vector GetBanner(int* width, int* height) const override; void SetName(const std::string&); u64 GetFSTSize() const override; diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp index 7a998b17d0..db6dc440a5 100644 --- a/Source/Core/DiscIO/VolumeWad.cpp +++ b/Source/Core/DiscIO/VolumeWad.cpp @@ -127,6 +127,18 @@ std::map CVolumeWAD::GetNames(bool prefer_long) return ReadWiiNames(name_data); } +std::vector CVolumeWAD::GetBanner(int* width, int* height) const +{ + *width = 0; + *height = 0; + + u64 title_id; + if (!GetTitleID(&title_id)) + return std::vector(); + + return GetWiiBanner(width, height, title_id); +} + BlobType CVolumeWAD::GetBlobType() const { return m_pReader ? m_pReader->GetBlobType() : BlobType::PLAIN; diff --git a/Source/Core/DiscIO/VolumeWad.h b/Source/Core/DiscIO/VolumeWad.h index 7af4eeca7b..ee0379fe5c 100644 --- a/Source/Core/DiscIO/VolumeWad.h +++ b/Source/Core/DiscIO/VolumeWad.h @@ -32,6 +32,7 @@ public: u16 GetRevision() const override; std::string GetInternalName() const override { return ""; } std::map GetNames(bool prefer_long) const override; + std::vector GetBanner(int* width, int* height) const override; u64 GetFSTSize() const override { return 0; } std::string GetApploaderDate() const override { return ""; } diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/VolumeWiiCrypted.cpp index 6483f971ce..4f226c62e4 100644 --- a/Source/Core/DiscIO/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/VolumeWiiCrypted.cpp @@ -212,6 +212,18 @@ std::map CVolumeWiiCrypted::GetNames(bool prefe return ReadWiiNames(opening_bnr); } +std::vector CVolumeWiiCrypted::GetBanner(int* width, int* height) const +{ + *width = 0; + *height = 0; + + u64 title_id; + if (!GetTitleID(&title_id)) + return std::vector(); + + return GetWiiBanner(width, height, title_id); +} + u64 CVolumeWiiCrypted::GetFSTSize() const { if (m_pReader == nullptr) diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.h b/Source/Core/DiscIO/VolumeWiiCrypted.h index c88138faf6..482deffa37 100644 --- a/Source/Core/DiscIO/VolumeWiiCrypted.h +++ b/Source/Core/DiscIO/VolumeWiiCrypted.h @@ -32,6 +32,7 @@ public: u16 GetRevision() const override; std::string GetInternalName() const override; std::map GetNames(bool prefer_long) const override; + std::vector GetBanner(int* width, int* height) const override; u64 GetFSTSize() const override; std::string GetApploaderDate() const override; u8 GetDiscNumber() const override; -- cgit v1.2.3