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
00032 #pragma once
00033
00034 #include "ogmdecoderdllstuff.h"
00035 #include "OGMDecodeInputPin.h"
00036 #include <libilliCore/iLE_Math.h>
00037
00038
00039 struct sOGMFormatBlock;
00040 class OGMDecodeInputPin;
00041 class OGMDecodeOutputPin;
00042
00043
00044 class OGMDecodeFilter
00045
00046 : public CTransformFilter
00047 {
00048 public:
00049
00050
00051
00052
00053
00054 OGMDecodeFilter(void);
00055 virtual ~OGMDecodeFilter(void);
00056
00057
00058 static CUnknown* WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr);
00059
00060 virtual HRESULT CheckInputType(const CMediaType* inMediaType);
00061 virtual HRESULT CheckTransform(const CMediaType* inInputMediaType, const CMediaType* inOutputMediaType);
00062 virtual HRESULT DecideBufferSize(IMemAllocator* inAllocator, ALLOCATOR_PROPERTIES* inPropInputRequest);
00063 virtual HRESULT GetMediaType(int iPosition, CMediaType* outMediaType);
00064 virtual HRESULT Transform(IMediaSample* inInputSample, IMediaSample* inOutputSample);
00065
00066 virtual HRESULT Receive(IMediaSample* inSample);
00067
00068 virtual HRESULT NewSegment(REFERENCE_TIME inStartTime, REFERENCE_TIME inStopTime, double inRate);
00069
00070 virtual CBasePin* GetPin(int inPinNo);
00071
00072
00073 protected:
00074 void deleteBufferedPackets();
00075
00076 OGMDecodeInputPin* mInputPin;
00077 CTransformOutputPin* mOutputPin;
00078 struct sSimplePack {
00079 unsigned char* mBuff;
00080 unsigned long mLength;
00081 unsigned long mDuration;
00082 unsigned long mHeaderSize;
00083 bool mIsKeyframe;
00084
00085 };
00086
00087
00088
00089 unsigned long mOGMGranulesBuffered;
00090
00091 __int64 mSegStart;
00092 __int64 mSegEnd;
00093 double mSegRate;
00094
00095 vector<sSimplePack> mPacketBuffer;
00096 };