#ifndef DS_VideoDecoder_H #define DS_VideoDecoder_H #include "interfaces.h" #include #include "inputpin.h" #include "outputpin.h" class DS_VideoDecoder: public IVideoDecoder, public IRtConfig { public: DS_VideoDecoder(const CodecInfo& info, const BITMAPINFOHEADER& format, int flip); ~DS_VideoDecoder() { try { if(m_iState==2)Stop(); if(m_iState==1)Close(); } catch(FatalError& error) { std::cerr<<"~DS_VideoDecoder(): "; error.Print(); } if(m_outFrame)delete m_outFrame; } void Close(); void Start(); void Stop(); BITMAPINFOHEADER& DestFmt(){return m_obh;} int DecodeFrame(char* src, int size, int is_keyframe); int SetDestFmt(int bits=24, int csp=0); CAPS GetCapabilities() const {return caps;} virtual const CodecInfo& GetCodecInfo() const {return record;} virtual void Restart(); int SetDirection(int d) { m_obh.biHeight=d?m_bh.biHeight:(-m_bh.biHeight); m_sVhdr2->bmiHeader.biHeight=m_obh.biHeight; return 0; } virtual HRESULT GetValue(const char*, int&); virtual HRESULT SetValue(const char*, int); private: int m_iHandle; IBaseFilter* m_pFilter; IPin* m_pInputPin; IPin* m_pOutputPin; CBaseFilter* m_pSrcFilter; CBaseFilter2* m_pParentFilter; IPin* m_pOurInput; COutputPin* m_pOurOutput; AM_MEDIA_TYPE m_sOurType, m_sDestType; VIDEOINFOHEADER m_sVhdr; VIDEOINFOHEADER *m_sVhdr2; IMemAllocator* m_pAll; IMemInputPin* m_pImp; void* m_pCust; const CodecInfo& record; int m_iState; CAPS caps; }; #endif