00001 #pragma once 00002 00003 #include "..\BaseSplitter\BaseSplitter.h" 00004 #include "..\..\..\..\include\dsm\dsm.h" 00005 #include "..\..\..\DSUtil\DSMPropertyBag.h" 00006 00007 class CDSMSplitterFile : public CBaseSplitterFile 00008 { 00009 HRESULT Init(IDSMResourceBagImpl& res, IDSMChapterBagImpl& chap); 00010 00011 public: 00012 CDSMSplitterFile(IAsyncReader* pReader, HRESULT& hr, IDSMResourceBagImpl& res, IDSMChapterBagImpl& chap); 00013 00014 CAtlMap<BYTE, CMediaType> m_mts; 00015 REFERENCE_TIME m_rtFirst, m_rtDuration; 00016 00017 struct SyncPoint {REFERENCE_TIME rt; __int64 fp;}; 00018 CArray<SyncPoint> m_sps; 00019 00020 typedef CAtlMap<CStringA, CStringW, CStringElementTraits<CStringA>, CStringElementTraits<CStringW> > CStreamInfoMap; 00021 CStreamInfoMap m_fim; 00022 CAtlMap<BYTE, CStreamInfoMap> m_sim; 00023 00024 bool Sync(dsmp_t& type, UINT64& len, __int64 limit = 65536); 00025 bool Sync(UINT64& syncpos, dsmp_t& type, UINT64& len, __int64 limit = 65536); 00026 bool Read(__int64 len, BYTE& id, CMediaType& mt); 00027 bool Read(__int64 len, Packet* p, bool fData = true); 00028 bool Read(__int64 len, CArray<SyncPoint>& sps); 00029 bool Read(__int64 len, CStreamInfoMap& im); 00030 bool Read(__int64 len, IDSMResourceBagImpl& res); 00031 bool Read(__int64 len, IDSMChapterBagImpl& chap); 00032 __int64 Read(__int64 len, CStringW& str); 00033 00034 __int64 FindSyncPoint(REFERENCE_TIME rt); 00035 };