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 #include "abstractVideodllstuff.h"
00034 #include "BasicSeekable.h"
00035 class AbstractVideoDecodeOutputPin;
00036 class AbstractVideoDecodeFilter;
00037
00038 class ABS_VIDEO_DEC_API AbstractVideoDecodeInputPin
00039 : public CBaseInputPin
00040 , public BasicSeekable
00041 {
00042 public:
00043 friend class AbstractVideoDecodeOutputPin;
00044 AbstractVideoDecodeInputPin(AbstractVideoDecodeFilter* inParentFilter, CCritSec* inFilterLock, AbstractVideoDecodeOutputPin* inOutputPin, CHAR* inObjectName, LPCWSTR inPinDisplayName, CMediaType* inAcceptMediaType);
00045 virtual ~AbstractVideoDecodeInputPin(void);
00046 static const short SIZE_16_BITS = 2;
00047 static const unsigned long HUNDRED_NANOS = 10000000;
00048 static const signed short SINT_MAX = 32767;
00049 static const signed short SINT_MIN = -32768;
00050
00051 DECLARE_IUNKNOWN
00052 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00053
00054
00055 virtual long decodeData(unsigned char* inBuf, long inNumBytes, LONGLONG inStart, LONGLONG inEnd) = 0;
00056 virtual bool ConstructCodec() = 0;
00057 virtual void DestroyCodec() = 0;
00058
00059
00060 virtual HRESULT BreakConnect();
00061 virtual HRESULT CompleteConnect (IPin *inReceivePin);
00062 STDMETHODIMP Receive(IMediaSample *pSample);
00063 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00064 virtual HRESULT GetMediaType(int inPosition, CMediaType *outMediaType);
00065 virtual HRESULT SetMediaType(const CMediaType* inMediaType) = 0;
00066
00067 virtual void ResetFrameCount();
00068
00069 virtual STDMETHODIMP EndOfStream(void);
00070 virtual STDMETHODIMP BeginFlush();
00071 virtual STDMETHODIMP EndFlush();
00072 virtual STDMETHODIMP NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
00073
00074 protected:
00075
00076 virtual bool SetSampleParams(IMediaSample* outMediaSample, unsigned long inDataSize, REFERENCE_TIME* inStartTime, REFERENCE_TIME* inEndTime);
00077
00079
00080 HRESULT mHR;
00081 bool mBegun;
00082 AbstractVideoDecodeOutputPin* mOutputPin;
00083
00084 __int64 mLastSeenStartGranPos;
00085 AbstractVideoDecodeFilter* mParentFilter;
00086 CMediaType* mAcceptableMediaType;
00087
00088 LONGLONG mFrameDuration;
00089 LONGLONG mFrameSize;
00090 LONGLONG mFrameCount;
00091
00092 unsigned long mHeight;
00093 unsigned long mWidth;
00094
00095 CCritSec* mStreamLock;
00096
00097
00098 REFERENCE_TIME mSeekTimeBase;
00099 };