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 };