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 "abstractvideoencoderdllstuff.h"
00034 #include "AbstractVideoEncodeFilter.h"
00035 #include "BasicSeekable.h"
00036 class AbstractVideoEncodeFilter;
00037 class ABS_VIDEO_ENC_API AbstractVideoEncodeOutputPin
00038 : public CBaseOutputPin
00039 , public BasicSeekable
00040 {
00041 public:
00042 AbstractVideoEncodeOutputPin(AbstractVideoEncodeFilter* inParentFilter, CCritSec* inFilterLock, CHAR* inObjectName, LPCWSTR inPinDisplayName, CMediaType* inOutputMediaType);
00043 virtual ~AbstractVideoEncodeOutputPin(void);
00044
00045 DECLARE_IUNKNOWN
00046 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00047
00048 virtual HRESULT DecideBufferSize(IMemAllocator* inAllocator, ALLOCATOR_PROPERTIES *inReqAllocProps);
00049 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00050
00051
00052 virtual bool FillFormatBuffer(BYTE* inFormatBuffer) = 0;
00053 virtual unsigned long FormatBufferSize() = 0;
00054
00055 virtual HRESULT GetMediaType(int inPosition, CMediaType *outMediaType);
00056
00057
00058
00059 virtual HRESULT CompleteConnect (IPin *inReceivePin);
00060 virtual HRESULT DeliverNewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
00061 virtual HRESULT DeliverEndOfStream(void);
00062 virtual HRESULT DeliverEndFlush(void);
00063 virtual HRESULT DeliverBeginFlush(void);
00064
00065 COutputQueue* mDataQueue;
00066 protected:
00067 HRESULT mHR;
00068 AbstractVideoEncodeFilter* mParentFilter;
00069 void FillMediaType(CMediaType* inMediaType);
00070
00071 CMediaType* mOutputMediaType;
00072
00073 static const int BUFF_SIZE = 65536;
00074 static const int BUFF_COUNT = 5;
00075 };