summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinWX/ISOFile.cpp
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2015-12-15 18:48:49 +0100
committerMarkus Wick <degasus@users.noreply.github.com>2015-12-15 18:48:49 +0100
commitc310b3f0e6881d6933d9514ec03b53a9c89e3c54 (patch)
tree2bd0b05d5f0276a029dbba1960580de27be76630 /Source/Core/DolphinWX/ISOFile.cpp
parent2990df3f593c973addec1293e3a692d27a6e5d23 (diff)
parenta0cd753060fb8b2701c4e1733cc56da4523f852c (diff)
Merge pull request #3309 from JosJuice/reload-banner-without-volume
Don't read from volume when reloading Wii banners
Diffstat (limited to 'Source/Core/DolphinWX/ISOFile.cpp')
-rw-r--r--Source/Core/DolphinWX/ISOFile.cpp34
1 files changed, 16 insertions, 18 deletions
diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp
index 3bdb41afec..dc53e55756 100644
--- a/Source/Core/DolphinWX/ISOFile.cpp
+++ b/Source/Core/DolphinWX/ISOFile.cpp
@@ -34,7 +34,7 @@
#include "DolphinWX/ISOFile.h"
#include "DolphinWX/WxUtils.h"
-static const u32 CACHE_REVISION = 0x126; // Last changed in PR 3097
+static const u32 CACHE_REVISION = 0x127; // Last changed in PR 3309
#define DVD_BANNER_WIDTH 96
#define DVD_BANNER_HEIGHT 32
@@ -63,6 +63,7 @@ static std::string GetLanguageString(DiscIO::IVolume::ELanguage language, std::m
GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_map<std::string, std::string>& custom_titles)
: m_FileName(_rFileName)
+ , m_title_id(0)
, m_emu_state(0)
, m_FileSize(0)
, m_Country(DiscIO::IVolume::COUNTRY_UNKNOWN)
@@ -82,13 +83,10 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
// if a banner has become available after the cache was made.
if (m_pImage.empty())
{
- std::unique_ptr<DiscIO::IVolume> volume(DiscIO::CreateVolumeFromFilename(_rFileName));
- if (volume != nullptr)
- {
- ReadVolumeBanner(*volume);
- if (!m_pImage.empty())
- SaveToCache();
- }
+ std::vector<u32> buffer = DiscIO::IVolume::GetWiiBanner(&m_ImageWidth, &m_ImageHeight, m_title_id);
+ ReadVolumeBanner(buffer, m_ImageWidth, m_ImageHeight);
+ if (!m_pImage.empty())
+ SaveToCache();
}
}
else
@@ -109,10 +107,12 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
m_VolumeSize = volume->GetSize();
m_UniqueID = volume->GetUniqueID();
+ volume->GetTitleID(&m_title_id);
m_disc_number = volume->GetDiscNumber();
m_Revision = volume->GetRevision();
- ReadVolumeBanner(*volume);
+ std::vector<u32> buffer = volume->GetBanner(&m_ImageWidth, &m_ImageHeight);
+ ReadVolumeBanner(buffer, m_ImageWidth, m_ImageHeight);
m_Valid = true;
SaveToCache();
@@ -202,6 +202,7 @@ void GameListItem::DoState(PointerWrap &p)
p.Do(m_descriptions);
p.Do(m_company);
p.Do(m_UniqueID);
+ p.Do(m_title_id);
p.Do(m_FileSize);
p.Do(m_VolumeSize);
p.Do(m_Country);
@@ -243,17 +244,14 @@ std::string GameListItem::CreateCacheFilename() const
}
// Outputs to m_pImage
-void GameListItem::ReadVolumeBanner(const DiscIO::IVolume& volume)
+void GameListItem::ReadVolumeBanner(const std::vector<u32>& buffer, int width, int height)
{
- std::vector<u32> Buffer = volume.GetBanner(&m_ImageWidth, &m_ImageHeight);
- u32* pData = Buffer.data();
- m_pImage.resize(m_ImageWidth * m_ImageHeight * 3);
-
- for (int i = 0; i < m_ImageWidth * m_ImageHeight; i++)
+ m_pImage.resize(width * height * 3);
+ for (int i = 0; i < width * height; i++)
{
- m_pImage[i * 3 + 0] = (pData[i] & 0xFF0000) >> 16;
- m_pImage[i * 3 + 1] = (pData[i] & 0x00FF00) >> 8;
- m_pImage[i * 3 + 2] = (pData[i] & 0x0000FF) >> 0;
+ m_pImage[i * 3 + 0] = (buffer[i] & 0xFF0000) >> 16;
+ m_pImage[i * 3 + 1] = (buffer[i] & 0x00FF00) >> 8;
+ m_pImage[i * 3 + 2] = (buffer[i] & 0x0000FF) >> 0;
}
}