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
00035 #include "abstractaudiodllstuff.h"
00036 #include "BasicSeekable.h"
00037 #include <fstream>
00038 using namespace std;
00039
00040 class AbstractAudioDecodeOutputPin;
00041 class AbstractAudioDecodeFilter;
00042
00043
00044 class ABS_AUDIO_DEC_API AbstractAudioDecodeInputPin
00045
00046 : public CBaseInputPin
00047 , public BasicSeekable
00048 {
00049 public:
00050
00051 friend class AbstractAudioDecodeOutputPin;
00052
00053
00054 static const short SIZE_16_BITS = 2;
00055 static const signed short SINT_MAX = 32767;
00056 static const signed short SINT_MIN = -32768;
00057
00058
00059 DECLARE_IUNKNOWN
00060 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00061
00062
00063 AbstractAudioDecodeInputPin(AbstractAudioDecodeFilter* inParentFilter, CCritSec* inFilterLock, AbstractAudioDecodeOutputPin* inOutputPin, CHAR* inObjectName, LPCWSTR inPinDisplayName, CMediaType* inAcceptMediaType);
00064 virtual ~AbstractAudioDecodeInputPin(void);
00065
00066
00067 virtual long decodeData(unsigned char* inBuf, long inNumBytes) = 0;
00068 virtual bool ConstructCodec() = 0;
00069 virtual void DestroyCodec() = 0;
00070
00071 virtual HRESULT BreakConnect();
00072 virtual HRESULT CompleteConnect (IPin *inReceivePin);
00073 STDMETHODIMP Receive(IMediaSample *pSample);
00074 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00075 virtual HRESULT GetMediaType(int inPosition, CMediaType *outMediaType);
00076 virtual HRESULT SetMediaType(const CMediaType* inMediaType) = 0;
00077
00078 virtual void ResetFrameCount();
00079 virtual void ResetTimeBases();
00080
00081 virtual STDMETHODIMP EndOfStream(void);
00082 virtual STDMETHODIMP BeginFlush();
00083 virtual STDMETHODIMP EndFlush();
00084 virtual STDMETHODIMP NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
00085
00086
00087
00088
00089 REFERENCE_TIME mChainTimeBase;
00090 REFERENCE_TIME mPreviousEndTime;
00091 protected:
00092
00093 virtual bool SetSampleParams(IMediaSample* outMediaSample, unsigned long inDataSize, REFERENCE_TIME* inStartTime, REFERENCE_TIME* inEndTime);
00094
00095
00096 HRESULT mHR;
00097 bool mBegun;
00098 AbstractAudioDecodeOutputPin* mOutputPin;
00099 __int64 mUptoFrame;
00100 __int64 mLastSeenStartGranPos;
00101 AbstractAudioDecodeFilter* mParentFilter;
00102 CMediaType* mAcceptableMediaType;
00103
00104
00105 CCritSec* mStreamLock;
00106
00107
00108 unsigned long mFrameSize;
00109 unsigned long mNumChannels;
00110 unsigned long mSampleRate;
00111
00112 REFERENCE_TIME mSeekTimeBase;
00113
00114
00115
00116
00117 };