dolphin-emulator/Source/Core/DiscIO/DiscScrubber.h
JosJuice 04c7892b93 DiscIO: Add GameCube disc scrubbing support
The code was actually already rather well adapted for this.
We more or less just have to skip ParseDisc and run
ParsePartitionData directly. This required the PartitionHeader
struct to be removed (which wasn't that useful anyway).
2020-04-24 15:10:36 +02:00

55 lines
1.3 KiB
C++

// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
// DiscScrubber removes the pseudorandom padding data from discs
// Note: the technique is inspired by Wiiscrubber, but much simpler - intentionally :)
#pragma once
#include <array>
#include <string>
#include <vector>
#include "Common/CommonTypes.h"
namespace File
{
class IOFile;
}
namespace DiscIO
{
class FileInfo;
class Volume;
struct Partition;
class DiscScrubber final
{
public:
DiscScrubber();
~DiscScrubber();
bool SetupScrub(const Volume* disc);
// Returns true if the specified 32 KiB block only contains unused data
bool CanBlockBeScrubbed(u64 offset) const;
private:
void MarkAsUsed(u64 offset, u64 size);
void MarkAsUsedE(u64 partition_data_offset, u64 offset, u64 size);
u64 ToClusterOffset(u64 offset) const;
bool ReadFromVolume(u64 offset, u32& buffer, const Partition& partition);
bool ReadFromVolume(u64 offset, u64& buffer, const Partition& partition);
bool ParseDisc();
bool ParsePartitionData(const Partition& partition);
void ParseFileSystemData(u64 partition_data_offset, const FileInfo& directory);
const Volume* m_disc;
std::vector<u8> m_free_table;
u64 m_file_size = 0;
bool m_is_scrubbing = false;
};
} // namespace DiscIO