#pragma once #include "cd_image.h" #include "types.h" #include #include #include class CDSubChannelReplacement { public: enum : u32 { SUBCHANNEL_Q_SIZE = 12, }; using ReplacementData = std::array; CDSubChannelReplacement(); ~CDSubChannelReplacement(); u32 GetReplacementSectorCount() const { return static_cast(m_replacement_subq.size()); } bool LoadSBI(const char* path); /// Returns the replacement subchannel data for the specified position (in BCD). bool GetReplacementSubChannelQ(u8 minute_bcd, u8 second_bcd, u8 frame_bcd, ReplacementData& subq_data) const; /// Returns the replacement subchannel data for the specified sector. bool GetReplacementSubChannelQ(u32 lba, ReplacementData& subq_data) const; private: using ReplacementMap = std::unordered_map; ReplacementMap m_replacement_subq; };