NetPlay/Movies: Avoid performing CRC32 checks when looking for a rom that matches
This commit is contained in:
parent
3bc956067d
commit
1647f0c8c0
3 changed files with 27 additions and 24 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue