T264Enc.h
上传用户:sunbaby
上传日期:2013-05-31
资源大小:242k
文件大小:5k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. #define OUTPIN_BUFFER_SIZE (1024*1024)
  2. #include "..commont264.h"
  3. #include "IProp.h"
  4. #include "pullpin.h"
  5. #include "alloc.h"
  6. #include "splitter.h"
  7. class CT264Enc: public CTransformFilter,
  8.                 public IProp,
  9.                 public ISpecifyPropertyPages
  10. {
  11. public:
  12.     static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
  13.     // Reveals IContrast & ISpecifyPropertyPages
  14.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
  15.     DECLARE_IUNKNOWN;
  16.     HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
  17.     HRESULT CheckInputType(const CMediaType *mtIn);
  18.     HRESULT CheckTransform(const CMediaType *mtIn,const CMediaType *mtOut);
  19.     HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
  20.     HRESULT DecideBufferSize(IMemAllocator *pAlloc,
  21.         ALLOCATOR_PROPERTIES *pProperties);
  22.     HRESULT StartStreaming();
  23.     HRESULT StopStreaming();
  24.     // ISpecifyPropertyPages method
  25.     STDMETHODIMP GetPages(CAUUID *pPages);
  26.     // IProp
  27.     HRESULT __stdcall get_Para(INT** pPara);
  28.     HRESULT __stdcall put_Default();
  29.     HRESULT __stdcall put_InfoWnd(INT hWnd);
  30.     CT264Enc(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr);
  31.     ~CT264Enc();
  32.     HRESULT Transform(IMediaSample *pMediaSample);
  33.     HRESULT Copy(IMediaSample *pSource, IMediaSample *pDest) const;
  34.     HRESULT InitOutMediaType(CMediaType* pOut);
  35. private:
  36.     T264_t* m_t264;
  37.     T264_param_t m_param;
  38.     BYTE* m_pBuffer;
  39.     LONGLONG m_avgFrameTime;
  40.     HWND m_hWnd;
  41.     TCHAR m_szInfo[_MAX_PATH];
  42. };
  43. class CT264Dec: public CTransformFilter
  44. {
  45. public:
  46.     static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
  47.     // Reveals IContrast & ISpecifyPropertyPages
  48.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
  49.     DECLARE_IUNKNOWN;
  50.     HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
  51.     HRESULT CheckInputType(const CMediaType *mtIn);
  52.     HRESULT CheckTransform(const CMediaType *mtIn,const CMediaType *mtOut);
  53.     HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
  54.     HRESULT DecideBufferSize(IMemAllocator *pAlloc,
  55.         ALLOCATOR_PROPERTIES *pProperties);
  56.     HRESULT StartStreaming();
  57.     HRESULT StopStreaming();
  58.     CT264Dec(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr);
  59.     ~CT264Dec();
  60.     HRESULT Transform(IMediaSample *pMediaSample);
  61.     HRESULT Copy(IMediaSample *pSource, IMediaSample *pDest) const;
  62.     HRESULT InitOutMediaType(CMediaType* pOut);
  63.     HRESULT SendSample(T264_t* t, T264_frame_t *frame, IMediaSample* pSample);
  64.     HRESULT Receive(IMediaSample* pSample);
  65.     HRESULT CompleteConnect(PIN_DIRECTION direction, IPin *pReceivePin);
  66. private:
  67.     T264_t* m_t264;
  68.     LONGLONG m_avgFrameTime;
  69.     HWND m_hWnd;
  70.     TCHAR m_szInfo[_MAX_PATH];
  71.     INT m_nWidth;
  72.     INT m_nHeight;
  73.     float m_framerate;
  74.     CRefTime m_time;
  75.     INT m_nStride;
  76.     IMemInputPin* m_pNextFilterInputpin;
  77. };
  78. class CT264Splitter: public CBaseSplitterFilter
  79. {
  80. public:
  81.     /* This goes in the factory template table to create new instances */
  82.     static CUnknown * WINAPI CreateInstance(LPUNKNOWN, HRESULT *);
  83.     //  Constructor and destructor
  84.     CT264Splitter(
  85.         LPUNKNOWN pUnk,
  86.         HRESULT *phr);
  87.     //  Support self-registration
  88.     LPAMOVIESETUP_FILTER GetSetupData();
  89.     //  Override type checking
  90.     HRESULT CheckInputType(const CMediaType *pmt);
  91.     //  Create specific parser
  92.     CBaseParser *CreateParser(CParserNotify *pNotify, CMediaType *pType);
  93. };
  94. /*  Parser */
  95. class CT264Parser : public CBaseParser
  96. {
  97. public:
  98.     CT264Parser(CParserNotify *pNotify, HRESULT *phr) :
  99.       CBaseParser(pNotify, phr),
  100.           m_bGotFirstPts(FALSE),
  101.           m_llFirstPts(0)
  102.       {
  103.       }
  104.       /*  Initialize a parser
  105.       pmt     - type of stream if known - can be NULL
  106.       pRdr    - way to read the source medium - can be NULL
  107.       */
  108.       HRESULT Init(CParseReader *pRdr);
  109.       /*  Get the size and count of buffers preferred based on the
  110.       actual content
  111.       */
  112.       void GetSizeAndCount(LONG *plSize, LONG *plCount);
  113.       /*  Call this to reinitialize for a new stream */
  114.       void StreamReset();
  115.       /*  Call this to pass new stream data :
  116.       pbData        - pointer to data
  117.       lData         - length of data
  118.       plProcessed   - Amount of data consumed
  119.       */
  120.       HRESULT Process(
  121.           const BYTE * pbData,
  122.           LONG lData,
  123.           LONG *plProcessed
  124.           );
  125. private:
  126.     /*  Parsing structures */
  127.     class CStream
  128.     {
  129.     public:
  130.         CStream():
  131.             m_pNotify(NULL) {}
  132.             BOOL Initialized()
  133.             {
  134.                 return m_pNotify != NULL;
  135.             }
  136.             CStreamNotify *m_pNotify;
  137.     };
  138.     CStream  m_Video;
  139.     LONGLONG m_llFirstPts;
  140.     BOOL     m_bGotFirstPts;
  141. };