QuicktimeGraph.h
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #pragma once
  22. #include "BaseGraph.h"
  23. #include "DX7AllocatorPresenter.h"
  24. #include "DX9AllocatorPresenter.h"
  25. namespace DSObjects
  26. {
  27. class CQuicktimeGraph;
  28. class CQuicktimeWindow : public CPlayerWindow
  29. {
  30. CDC m_dc;
  31. CBitmap m_bm;
  32. QT::GWorldPtr m_offscreenGWorld;
  33. CQuicktimeGraph* m_pGraph;
  34. FILTER_STATE m_fs;
  35. UINT m_idEndPoller;
  36. static QT::OSErr MyMovieDrawingCompleteProc(QT::Movie theMovie, long refCon);
  37. void ProcessMovieEvent(unsigned int message, unsigned int wParam, long lParam);
  38. protected:
  39. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  40. public:
  41. CQuicktimeWindow(CQuicktimeGraph* pGraph);
  42. bool OpenMovie(CString fn);
  43. void CloseMovie();
  44. void Run(), Pause(), Stop();
  45. FILTER_STATE GetState();
  46. QT::Movie theMovie;
  47.     QT::MovieController theMC;
  48. CSize m_size;
  49. public:
  50. DECLARE_MESSAGE_MAP()
  51. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  52. afx_msg void OnDestroy();
  53. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  54. afx_msg void OnTimer(UINT nIDEvent);
  55. };
  56. class CQuicktimeGraph : public CBaseGraph, public IVideoFrameStep
  57. {
  58. protected:
  59. bool m_fQtInitialized;
  60. CPlayerWindow m_wndWindowFrame;
  61. CQuicktimeWindow m_wndDestFrame;
  62. CComPtr<ISubPicAllocatorPresenter> m_pQTAP;
  63. public:
  64. CQuicktimeGraph(HWND hParent, HRESULT& hr);
  65. virtual ~CQuicktimeGraph();
  66.     DECLARE_IUNKNOWN;
  67.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
  68. protected:
  69. // IGraphBuilder
  70.     STDMETHODIMP RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList);
  71. // IMediaControl
  72.     STDMETHODIMP Run();
  73.     STDMETHODIMP Pause();
  74.     STDMETHODIMP Stop();
  75. STDMETHODIMP GetState(LONG msTimeout, OAFilterState* pfs);
  76. // IMediaSeeking
  77. STDMETHODIMP GetDuration(LONGLONG* pDuration);
  78. STDMETHODIMP GetCurrentPosition(LONGLONG* pCurrent);
  79. STDMETHODIMP SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags);
  80. STDMETHODIMP SetRate(double dRate);
  81. STDMETHODIMP GetRate(double* pdRate);
  82. // IVideoWindow
  83.     STDMETHODIMP SetWindowPosition(long Left, long Top, long Width, long Height);
  84. // IBasicVideo
  85.     STDMETHODIMP SetDestinationPosition(long Left, long Top, long Width, long Height);
  86.     STDMETHODIMP GetVideoSize(long* pWidth, long* pHeight);
  87. // IBasicAudio
  88.     STDMETHODIMP put_Volume(long lVolume);
  89.     STDMETHODIMP get_Volume(long* plVolume);
  90. // IVideoFrameStep
  91.     STDMETHODIMP Step(DWORD dwFrames, IUnknown* pStepObject);
  92.     STDMETHODIMP CanStep(long bMultiple, IUnknown* pStepObject);    
  93.     STDMETHODIMP CancelStep();
  94. // IGraphEngine
  95. STDMETHODIMP_(engine_t) GetEngine();
  96. };
  97. }
  98. using namespace DSObjects;