NetPlay/Movies: Avoid performing CRC32 checks when looking for a rom that matches

This commit is contained in:
Souryo 2016-02-08 23:34:48 -05:00
parent 3bc956067d
commit 1647f0c8c0
3 changed files with 27 additions and 24 deletions

View file

@ -98,24 +98,25 @@ bool Console::LoadROM(string filename, uint32_t crc32Hash)
//Current game matches, no need to do anything
return true;
}
}
//Try to find the game in the same folder as the current game's folder
string match = RomLoader::FindMatchingRomInFolder(currentFolder, filename, crc32Hash);
for(string folder : FolderUtilities::GetKnowGameFolders()) {
string match = RomLoader::FindMatchingRomInFolder(folder, filename, crc32Hash, true);
if(!match.empty()) {
Console::LoadROM(match);
return true;
}
}
//Perform slow CRC32 search for ROM
for(string folder : FolderUtilities::GetKnowGameFolders()) {
if(folder != currentFolder) {
string match = RomLoader::FindMatchingRomInFolder(folder, filename, crc32Hash);
if(!match.empty()) {
Console::LoadROM(match);
return true;
}
string match = RomLoader::FindMatchingRomInFolder(folder, filename, crc32Hash, false);
if(!match.empty()) {
Console::LoadROM(match);
return true;
}
}
return false;
}

View file

@ -26,5 +26,5 @@ class RomLoader
bool LoadFile(string filename, istream *filestream = nullptr, string ipsFilename = "");
RomData GetRomData();
static uint32_t GetCRC32(string filename);
static string FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash);
static string FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash, bool useFastSearch);
};

View file

@ -135,7 +135,7 @@ uint32_t RomLoader::GetCRC32(string filename)
return crc;
}
string RomLoader::FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash)
string RomLoader::FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash, bool useFastSearch)
{
std::transform(romFilename.begin(), romFilename.end(), romFilename.begin(), ::tolower);
vector<string> validExtensions = { { "*.nes", "*.zip", "*.fds" } };
@ -147,22 +147,24 @@ string RomLoader::FindMatchingRomInFolder(string folder, string romFilename, uin
}
}
for(string romFile : romFiles) {
//Quick search by filename
string originalFilename = romFile;
std::transform(romFile.begin(), romFile.end(), romFile.begin(), ::tolower);
if(FolderUtilities::GetFilename(romFile, true).compare(romFilename) == 0) {
if(RomLoader::GetCRC32(romFile) == crc32Hash) {
return originalFilename;
if(useFastSearch) {
for(string romFile : romFiles) {
//Quick search by filename
string originalFilename = romFile;
std::transform(romFile.begin(), romFile.end(), romFile.begin(), ::tolower);
if(FolderUtilities::GetFilename(romFile, true).compare(romFilename) == 0) {
if(RomLoader::GetCRC32(romFile) == crc32Hash) {
return originalFilename;
}
}
}
}
for(string romFile : romFiles) {
//Slower search by CRC value
if(RomLoader::GetCRC32(romFile) == crc32Hash) {
//Matching ROM found
return romFile;
} else {
for(string romFile : romFiles) {
//Slower search by CRC value
if(RomLoader::GetCRC32(romFile) == crc32Hash) {
//Matching ROM found
return romFile;
}
}
}