00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #pragma once
00032 #include "oggdllstuff.h"
00033 #include "StreamHeaders.h"
00034 #include <libOOOgg/OggPage.h>
00035 #include <libOOOgg/IOggCallback.h>
00036 #include "BasicSeekPassThrough.h"
00037 #include <fstream>
00038 #include "OggDemuxSourceFilter.h"
00039 using namespace std;
00040
00041 class OggDemuxSourceFilter;
00042
00043 class OGG_DEMUX_API OggDemuxSourcePin
00044 : public CBaseOutputPin
00045 , public BasicSeekPassThrough
00046
00047 {
00048 public:
00049
00050 DECLARE_IUNKNOWN
00051 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00052 OggDemuxSourcePin( TCHAR* inObjectName,
00053 OggDemuxSourceFilter* inParentFilter,
00054 CCritSec* inFilterLock,
00055 StreamHeaders* inHeaderSource,
00056 CMediaType* inMediaType,
00057 wstring inPinName,
00058 bool inAllowSeek,
00059 unsigned long inNumBuffers,
00060 unsigned long inBufferSize);
00061
00062
00063
00064 virtual ~OggDemuxSourcePin(void);
00065 static const unsigned long BUFFER_SIZE = 1024*512;
00066 static const unsigned long NUM_BUFFERS = 125;
00067
00068
00069 virtual bool deliverOggPacket(StampedOggPacket* inOggPacket);
00070
00071
00072 virtual HRESULT GetMediaType(int inPosition, CMediaType* outMediaType);
00073 virtual HRESULT CheckMediaType(const CMediaType* inMediaType);
00074 virtual HRESULT DecideBufferSize(IMemAllocator* inoutAllocator, ALLOCATOR_PROPERTIES* inoutInputRequest);
00075
00076
00077
00078
00079
00080
00081
00082 virtual HRESULT CompleteConnect (IPin *inReceivePin);
00083 virtual HRESULT BreakConnect(void);
00084 virtual HRESULT DeliverNewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
00085 virtual HRESULT DeliverEndOfStream(void);
00086 virtual HRESULT DeliverEndFlush(void);
00087 virtual HRESULT DeliverBeginFlush(void);
00088 protected:
00089 OggDemuxSourceFilter* mParentFilter;
00090 StreamHeaders* mHeaders;
00091 CMediaType* mMediaType;
00092 StampedOggPacket* mPartialPacket;
00093 HRESULT mFilterHR;
00094 COutputQueue* mDataQueue;
00095 fstream debugLog;
00096 bool mFirstRun;
00097
00098 unsigned long mBufferSize;
00099 unsigned long mNumBuffers;
00100 };