IPFilter.h
上传用户:hhs829
上传日期:2022-06-17
资源大小:586k
文件大小:2k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. //
  2. // Sample DirectShow In-Place Transform Filter that accepts data for use in application
  3. //
  4. #include <streams.h>
  5. // This is an example in-place transform filter that is created within
  6. // the application, and not by CoCreateInstance
  7. class CAppTransform : public CTransInPlaceFilter
  8. {
  9. public:
  10.     CAppTransform(LPUNKNOWN pUnkOuter, HRESULT *phr);
  11.     HRESULT CheckInputType(const CMediaType* mtIn);
  12.     HRESULT Transform(IMediaSample *pSample);
  13. };
  14. // DirectShow graph management sample code:
  15. // This builds a playback graph using RenderFile
  16. // and then inserts a transform filter on the uncompressed video.
  17. class CAppGraphBuilder
  18. {
  19. private:
  20. CAppTransform*   m_pFilter;
  21.     IGraphBuilder*   m_pGraph;
  22. DWORD      m_dwObjectTable; 
  23. public:
  24.     CAppGraphBuilder();
  25.     ~CAppGraphBuilder();
  26.     void DestroyGraph(void);
  27.     HRESULT BuildFromFile(LPCWSTR pszFile);
  28.     HRESULT Run(void);
  29.     HRESULT MakeChild(HWND hwnd);
  30.     HRESULT ResizeVideoWindow(RECT* prc);
  31. private:
  32. void CreateAppFilter(void);
  33. HRESULT FindFilterByInterface(REFIID riid, IBaseFilter** ppFilter);
  34. HRESULT ConnectUpstreamOf(IBaseFilter* pFilter, IBaseFilter* pTransform);
  35. HRESULT NextUpstream(IBaseFilter* pFilter, IBaseFilter** ppNext);   
  36. IPin* GetPin(IBaseFilter* pFilter, PIN_DIRECTION dirRequest);
  37. // Helper methods
  38. IPin* InputPinOf(IBaseFilter* pFilter) 
  39. {
  40. return GetPin(pFilter, PINDIR_INPUT);
  41. }
  42. IPin* OutputPinOf(IBaseFilter* pFilter) 
  43. {
  44. return GetPin(pFilter, PINDIR_OUTPUT);
  45. }
  46. void AddToObjectTable(void) ;
  47. void RemoveFromObjectTable(void);
  48. };