2017-05-16 19:54:38 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Stream.h"
|
|
|
|
#include "ISO9660/ISO9660.h"
|
|
|
|
|
2020-10-02 09:11:30 -04:00
|
|
|
namespace ISO9660
|
|
|
|
{
|
|
|
|
class CBlockProvider;
|
|
|
|
}
|
|
|
|
|
2017-05-16 19:54:38 -04:00
|
|
|
class COpticalMedia
|
|
|
|
{
|
|
|
|
public:
|
2021-07-20 17:34:11 -04:00
|
|
|
typedef std::shared_ptr<ISO9660::CBlockProvider> BlockProviderPtr;
|
|
|
|
|
2020-10-01 15:57:55 -04:00
|
|
|
COpticalMedia() = default;
|
|
|
|
|
2020-10-01 15:04:15 -04:00
|
|
|
enum CREATE_FLAGS
|
|
|
|
{
|
|
|
|
CREATE_AUTO_DISABLE_DL_DETECT = 0x01,
|
|
|
|
};
|
|
|
|
|
2017-05-16 19:54:38 -04:00
|
|
|
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;
|
|
|
|
|
2020-10-01 15:57:55 -04:00
|
|
|
static std::unique_ptr<COpticalMedia> CreateAuto(StreamPtr&, uint32 = 0);
|
|
|
|
static std::unique_ptr<COpticalMedia> CreateDvd(StreamPtr&, bool = false, uint32 = 0);
|
2021-07-20 17:34:11 -04:00
|
|
|
static std::unique_ptr<COpticalMedia> CreateCustomSingleTrack(BlockProviderPtr);
|
2017-05-16 19:54:38 -04:00
|
|
|
|
|
|
|
//TODO: Get Track Count
|
2018-04-30 21:01:23 +01:00
|
|
|
TRACK_DATA_TYPE GetTrackDataType(uint32) const;
|
2020-10-02 09:11:30 -04:00
|
|
|
|
|
|
|
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();
|
2017-05-16 19:54:38 -04:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
bool GetDvdIsDualLayer() const;
|
|
|
|
uint32 GetDvdSecondLayerStart() const;
|
2017-06-09 10:44:30 -04:00
|
|
|
|
2017-05-16 19:54:38 -04:00
|
|
|
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&);
|
2017-06-09 10:44:30 -04:00
|
|
|
|
2017-05-16 19:54:38 -04:00
|
|
|
TRACK_DATA_TYPE m_track0DataType = TRACK_DATA_TYPE_MODE1_2048;
|
2020-10-02 09:11:30 -04:00
|
|
|
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;
|
2017-05-16 19:54:38 -04:00
|
|
|
};
|