Play-/Source/OpticalMedia.h

60 lines
1.4 KiB
C
Raw Permalink Normal View History

#pragma once
#include "Stream.h"
#include "ISO9660/ISO9660.h"
namespace ISO9660
{
class CBlockProvider;
}
class COpticalMedia
{
public:
typedef std::shared_ptr<ISO9660::CBlockProvider> BlockProviderPtr;
COpticalMedia() = default;
enum CREATE_FLAGS
{
CREATE_AUTO_DISABLE_DL_DETECT = 0x01,
};
enum TRACK_DATA_TYPE
{
TRACK_DATA_TYPE_AUDIO,
TRACK_DATA_TYPE_MODE1_2048,
TRACK_DATA_TYPE_MODE2_2352,
};
typedef std::shared_ptr<Framework::CStream> StreamPtr;
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> CreateCustomSingleTrack(BlockProviderPtr, TRACK_DATA_TYPE);
//TODO: Get Track Count
2018-04-30 21:01:23 +01:00
TRACK_DATA_TYPE GetTrackDataType(uint32) const;
ISO9660::CBlockProvider* GetTrackBlockProvider(uint32) const;
2018-04-30 21:01:23 +01:00
CISO9660* GetFileSystem();
2018-10-08 00:04:04 -04:00
CISO9660* GetFileSystemL1();
2018-04-30 21:01:23 +01:00
bool GetDvdIsDualLayer() const;
uint32 GetDvdSecondLayerStart() const;
private:
typedef std::unique_ptr<CISO9660> Iso9660Ptr;
2018-04-30 21:01:23 +01:00
void CheckDualLayerDvd(const StreamPtr&);
2018-10-19 12:53:50 -04:00
void SetupSecondLayer(const StreamPtr&);
TRACK_DATA_TYPE m_track0DataType = TRACK_DATA_TYPE_MODE1_2048;
BlockProviderPtr m_track0BlockProvider;
2018-04-30 21:01:23 +01:00
bool m_dvdIsDualLayer = false;
uint32 m_dvdSecondLayerStart = 0;
Iso9660Ptr m_fileSystem;
2018-10-08 00:04:04 -04:00
Iso9660Ptr m_fileSystemL1;
};