00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 #include "..\basemuxer\basemuxer.h"
00025 #include "..\..\..\..\include\dsm\dsm.h"
00026
00027 [uuid("C6590B76-587E-4082-9125-680D0693A97B")]
00028 class CDSMMuxerFilter : public CBaseMuxerFilter
00029 {
00030 bool m_fAutoChap, m_fAutoRes;
00031
00032 struct SyncPoint {BYTE id; REFERENCE_TIME rtStart, rtStop; __int64 fp;};
00033 struct IndexedSyncPoint {BYTE id; REFERENCE_TIME rt, rtfp; __int64 fp;};
00034 CList<SyncPoint> m_sps;
00035 CList<IndexedSyncPoint> m_isps;
00036 REFERENCE_TIME m_rtPrevSyncPoint;
00037 void IndexSyncPoint(const MuxerPacket* p, __int64 fp);
00038
00039 void MuxPacketHeader(IBitStream* pBS, dsmp_t type, UINT64 len);
00040 void MuxFileInfo(IBitStream* pBS);
00041 void MuxStreamInfo(IBitStream* pBS, CBaseMuxerInputPin* pPin);
00042
00043 protected:
00044 void MuxInit();
00045 void MuxHeader(IBitStream* pBS);
00046 void MuxPacket(IBitStream* pBS, const MuxerPacket* pPacket);
00047 void MuxFooter(IBitStream* pBS);
00048
00049 public:
00050 CDSMMuxerFilter(LPUNKNOWN pUnk, HRESULT* phr, bool fAutoChap = true, bool fAutoRes = true);
00051 virtual ~CDSMMuxerFilter();
00052 };