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 "directshowabstractsdllstuff.h"
00036 #include "BasicSeekPassThrough.h"
00037
00038
00039 #include <vector>
00040
00041 #include <fstream>
00042
00043 using namespace std;
00044
00045
00046 class AbstractTransformOutputPin;
00047 class AbstractTransformFilter;
00048
00049 class AbstractTransformInputPin
00050
00051 : public CBaseInputPin
00052
00053 , public BasicSeekPassThrough
00054 {
00055 public:
00056
00057 friend class AbstractTransformOutputPin;
00058
00059
00060 DECLARE_IUNKNOWN
00061 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00062
00063
00064 AbstractTransformInputPin(AbstractTransformFilter* inParentFilter, CCritSec* inFilterLock, AbstractTransformOutputPin* inOutputPin, CHAR* inObjectName, LPCWSTR inPinDisplayName, vector<CMediaType*> inAcceptableMediaTypes);
00065 virtual ~AbstractTransformInputPin(void);
00066
00067
00068 virtual HRESULT BreakConnect();
00069 virtual HRESULT CompleteConnect(IPin *inReceivePin);
00070
00071
00072 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00073 virtual HRESULT GetMediaType(int inPosition, CMediaType *outMediaType);
00074 virtual HRESULT SetMediaType(const CMediaType* inMediaType) = 0;
00075
00076
00077 virtual STDMETHODIMP Receive(IMediaSample *pSample);
00078
00079
00080 virtual STDMETHODIMP EndOfStream(void);
00081 virtual STDMETHODIMP BeginFlush();
00082 virtual STDMETHODIMP EndFlush();
00083 virtual STDMETHODIMP NewSegment(REFERENCE_TIME inStartTime, REFERENCE_TIME inStopTime, double inRate);
00084
00085 protected:
00086
00087 static const short SIZE_16_BITS = 2;
00088 static const signed short SINT_MAX = 32767;
00089 static const signed short SINT_MIN = -32768;
00090
00091
00092 virtual HRESULT TransformData(unsigned char* inBuf, long inNumBytes) = 0;
00093 virtual bool ConstructCodec() = 0;
00094 virtual void DestroyCodec() = 0;
00095
00096 virtual bool SetSampleParams(IMediaSample* outMediaSample, unsigned long inDataSize, REFERENCE_TIME* inStartTime, REFERENCE_TIME* inEndTime);
00097
00098 HRESULT mHR;
00099
00100
00101 AbstractTransformOutputPin* mOutputPin;
00102 AbstractTransformFilter* mParentFilter;
00103 vector<CMediaType*> mAcceptableMediaTypes;
00104
00105
00106 CCritSec* mStreamLock;
00107 };