00001 #pragma once
00002
00003 #include <string>
00004 #include <map>
00005 #include <libCMMLParse/libCMMLParse.h>
00006 #include <libCMMLParse/CMMLParser.h>
00007 #include <libTemporalURI/C_TimeStamp.h>
00008 #include "CMMLRawSourcePin.h"
00009 using namespace std;
00010
00011 class CMMLRawSourcePin;
00012
00013 class CMMLRawSourceFilter
00014 : public CBaseFilter
00015 , public CAMThread
00016 , public IFileSourceFilter
00017 , public IAMFilterMiscFlags
00018 {
00019 public:
00020
00021 friend class CMMLRawSourcePin;
00022
00023 enum eThreadCommands {
00024 THREAD_EXIT = 0,
00025 THREAD_PAUSE = 1,
00026 THREAD_RUN = 2
00027 };
00028
00029
00030 DECLARE_IUNKNOWN
00031 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00032
00033 CMMLRawSourceFilter(void);
00034 virtual ~CMMLRawSourceFilter(void);
00035
00036 static CUnknown* WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr);
00037
00038
00039 virtual int GetPinCount();
00040 virtual CBasePin* GetPin(int inPinNo);
00041
00042
00043 ULONG STDMETHODCALLTYPE GetMiscFlags(void);
00044
00045
00046 virtual STDMETHODIMP GetCurFile(LPOLESTR* outFileName, AM_MEDIA_TYPE* outMediaType);
00047 virtual STDMETHODIMP Load(LPCOLESTR inFileName, const AM_MEDIA_TYPE* inMediaType);
00048
00049
00050 virtual DWORD ThreadProc(void);
00051
00052
00053 STDMETHODIMP Run(REFERENCE_TIME tStart);
00054 STDMETHODIMP Pause(void);
00055 STDMETHODIMP Stop(void);
00056
00057 protected:
00058 virtual HRESULT DataProcessLoop();
00059
00060
00061 CMMLRawSourcePin* mCMMLSourcePin;
00062 CMMLParser mCMMLParser;
00063
00064 C_CMMLDoc* mCMMLDoc;
00065 wstring mFileName;
00066
00067
00068 typedef map<wstring, __int64> tTrackMap;
00069
00070 tTrackMap mTrackMap;
00071
00072 long mUptoTag;
00073 };