render.h
上传用户:weixiumei
上传日期:2008-05-15
资源大小:1769k
文件大小:3k
开发平台:

Visual C++

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (c) 1992 - 2000  Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11. class CRenderInputPin;
  12. class CRender;
  13. class CRenderFilter;
  14. // Main filter object
  15. class CRenderFilter : public CBaseFilter
  16. {
  17.     CRender * const m_pRender;
  18. public:
  19.     // Constructor
  20.     CRenderFilter(CRender *pRender,
  21.                 LPUNKNOWN pUnk,
  22.                 CCritSec *pLock,
  23.                 HRESULT *phr);
  24.     // Pin enumeration
  25.     CBasePin * GetPin(int n);
  26.     int GetPinCount();
  27. };
  28. //  Pin object
  29. class CRenderInputPin : public CRenderedInputPin
  30. {
  31.     CRender    * const m_pRender;           // Main renderer object
  32.     CCritSec * const m_pReceiveLock;        // Critical section
  33. public:
  34.     CRenderInputPin(CRender *pRender,
  35.                   LPUNKNOWN pUnk,
  36.                   CBaseFilter *pFilter,
  37.                   CCritSec *pLock,
  38.                   CCritSec *pReceiveLock,
  39.                   HRESULT *phr);
  40.     // Do something with this media sample
  41.     STDMETHODIMP Receive(IMediaSample *pSample);
  42.     STDMETHODIMP ReceiveCanBlock();
  43.     // Check if the pin can support this specific proposed type and format
  44.     HRESULT CheckMediaType(const CMediaType *);
  45. };
  46. //  CRender object which has filter and pin members
  47. class CRender : public CUnknown,
  48. public ITransfer
  49. {
  50.     friend class CRenderFilter;
  51.     friend class CRenderInputPin;
  52.     CRenderFilter *m_pFilter;         // Methods for filter interfaces
  53.     CRenderInputPin *m_pPin;          // A simple rendered input pin
  54.     CCritSec m_Lock;                // Main renderer critical section
  55.     CCritSec m_ReceiveLock;         // Sublock for received samples
  56. void * m_pfnCallback;
  57. void * m_cbParam;
  58. public:
  59.     DECLARE_IUNKNOWN
  60.     CRender(LPUNKNOWN pUnk, HRESULT *phr);
  61.     ~CRender();
  62.     // ITransfer methods
  63.     STDMETHODIMP SetFrameCallback(void * cbParam, void * pfnCallback);
  64.     
  65. static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
  66. private:
  67.     // Overriden to say what interfaces we support where
  68.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
  69. };