Properly set track type when loading a CHD disc image.

This commit is contained in:
Jean-Philip Desjardins 2022-06-07 12:00:07 -04:00
parent 818bf57c0b
commit 33275bbc38
3 changed files with 7 additions and 7 deletions

View file

@ -109,19 +109,19 @@ static DiskUtils::OpticalMediaPtr CreateOpticalMediaFromChd(const fs::path& imag
//Some notes about CHD support: //Some notes about CHD support:
//- We don't support multi track CDs //- We don't support multi track CDs
auto imageStream = std::make_shared<CChdImageStream>(CreateImageStream(imagePath)); auto imageStream = std::make_shared<CChdImageStream>(CreateImageStream(imagePath));
auto blockProvider = [&imageStream]() -> COpticalMedia::BlockProviderPtr { auto trackInfo = [&imageStream]() -> std::pair<COpticalMedia::BlockProviderPtr, COpticalMedia::TRACK_DATA_TYPE> {
switch(imageStream->GetTrack0Type()) switch(imageStream->GetTrack0Type())
{ {
default: default:
assert(false); assert(false);
[[fallthrough]]; [[fallthrough]];
case CChdImageStream::TRACK_TYPE_MODE1: case CChdImageStream::TRACK_TYPE_MODE1:
return std::make_shared<ISO9660::CBlockProviderCustom<0x990, 0>>(imageStream); return std::make_pair(std::make_shared<ISO9660::CBlockProviderCustom<0x990, 0>>(imageStream), COpticalMedia::TRACK_DATA_TYPE_MODE1_2048);
case CChdImageStream::TRACK_TYPE_MODE2_RAW: case CChdImageStream::TRACK_TYPE_MODE2_RAW:
return std::make_shared<ISO9660::CBlockProviderCustom<0x990, 0x18>>(imageStream); return std::make_pair(std::make_shared<ISO9660::CBlockProviderCustom<0x990, 0x18>>(imageStream), COpticalMedia::TRACK_DATA_TYPE_MODE2_2352);
} }
}(); }();
return COpticalMedia::CreateCustomSingleTrack(blockProvider); return COpticalMedia::CreateCustomSingleTrack(std::move(trackInfo.first), trackInfo.second);
} }
const DiskUtils::ExtensionList& DiskUtils::GetSupportedExtensions() const DiskUtils::ExtensionList& DiskUtils::GetSupportedExtensions()

View file

@ -54,11 +54,11 @@ std::unique_ptr<COpticalMedia> COpticalMedia::CreateDvd(StreamPtr& stream, bool
return result; return result;
} }
std::unique_ptr<COpticalMedia> COpticalMedia::CreateCustomSingleTrack(BlockProviderPtr blockProvider) std::unique_ptr<COpticalMedia> COpticalMedia::CreateCustomSingleTrack(BlockProviderPtr blockProvider, TRACK_DATA_TYPE trackDataType)
{ {
auto result = std::make_unique<COpticalMedia>(); auto result = std::make_unique<COpticalMedia>();
result->m_fileSystem = std::make_unique<CISO9660>(blockProvider); result->m_fileSystem = std::make_unique<CISO9660>(blockProvider);
result->m_track0DataType = TRACK_DATA_TYPE_MODE1_2048; result->m_track0DataType = trackDataType;
result->m_track0BlockProvider = blockProvider; result->m_track0BlockProvider = blockProvider;
return result; return result;
} }

View file

@ -31,7 +31,7 @@ public:
static std::unique_ptr<COpticalMedia> CreateAuto(StreamPtr&, uint32 = 0); static std::unique_ptr<COpticalMedia> CreateAuto(StreamPtr&, uint32 = 0);
static std::unique_ptr<COpticalMedia> CreateDvd(StreamPtr&, bool = false, uint32 = 0); static std::unique_ptr<COpticalMedia> CreateDvd(StreamPtr&, bool = false, uint32 = 0);
static std::unique_ptr<COpticalMedia> CreateCustomSingleTrack(BlockProviderPtr); static std::unique_ptr<COpticalMedia> CreateCustomSingleTrack(BlockProviderPtr, TRACK_DATA_TYPE);
//TODO: Get Track Count //TODO: Get Track Count
TRACK_DATA_TYPE GetTrackDataType(uint32) const; TRACK_DATA_TYPE GetTrackDataType(uint32) const;