GraphCenter.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:4k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #if defined (_MSC_VER) && (_MSC_VER >= 1000)
  20. #pragma once
  21. #endif
  22. #ifndef _GAOV_GRAPHCENTER_H
  23. #define  _GAOV_GRAPHCENTER_H
  24. enum Pin_type
  25. {
  26. VIDEO,
  27. AUDIO
  28. };
  29. // 这是回调函数的指针
  30. typedef int (__stdcall GetZZLState)(void* apUserPara, int aiState);
  31. #ifdef _DEBUG
  32. //注册图类
  33. static DWORD g_dwRegister;
  34. static HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister) 
  35. {
  36.     IMoniker * pMoniker;
  37.     IRunningObjectTable *pROT;
  38.     HRESULT hr;
  39.     hr = GetRunningObjectTable(0, &pROT);
  40.     if (FAILED(hr)) return hr;
  41.     WCHAR wsz[128];
  42.     wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
  43.     hr = CreateItemMoniker(L"!", wsz, &pMoniker);
  44.     if (SUCCEEDED(hr)) 
  45. {
  46.         hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
  47.         pMoniker->Release();
  48.     }
  49.     pROT->Release(); 
  50.     return hr;
  51. }
  52. static void RemoveGraphFromRot(DWORD pdwRegister)
  53. {
  54.     IRunningObjectTable *pROT;
  55.     if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) 
  56. {
  57.         pROT->Revoke(pdwRegister);
  58.         pROT->Release();
  59.     }
  60. }
  61. #endif //_DEBUG
  62. class CGraphCenter
  63. {
  64. public:
  65. CGraphCenter();
  66. ~CGraphCenter();
  67. public:
  68. STDMETHODIMP Initialize();
  69. STDMETHODIMP Uninitialize();
  70. STDMETHODIMP BuildGraph(LPCTSTR astrFileName, LPCTSTR astrZZLDirectory, LPCTSTR astrZZLFile);
  71. STDMETHODIMP DisassembleGraph();
  72. public:
  73. STDMETHODIMP Run();
  74. STDMETHODIMP Stop();
  75. public:
  76. int GetState()
  77. {
  78. return m_iIsStop;
  79. };
  80. float GetCompressedSpeed();
  81. //设置状态回调函数
  82. void SetStateProc(GetZZLState* apStateproc, void* apUserPara);
  83. private:
  84. STDMETHODIMP AddFilter(CLSID clsidFilter,    
  85. IBaseFilter** ppIFilter,
  86. LPCTSTR pstrFilterName = NULL);
  87. STDMETHODIMP ConnectAutoPins(IBaseFilter* pIFilterOutput, 
  88. LPCTSTR pstrPinNameOutput,
  89. IBaseFilter* pIFilterInput, 
  90. LPCTSTR pstrPinNameInput);
  91. STDMETHODIMP ConnectPins(IBaseFilter* pIFilterOutput, 
  92. LPCTSTR pstrPinNameOutput,
  93. IBaseFilter* pIFilterInput, 
  94. LPCTSTR pstrPinNameInput,
  95. AM_MEDIA_TYPE* pmt = NULL);
  96. //pin的连接
  97. STDMETHODIMP ConnectPinsEX(IBaseFilter* pIFilterOutput, 
  98. Pin_type atype,
  99. IBaseFilter* pIFilterInput, 
  100. LPCTSTR pstrPinNameInput,
  101. BOOL bisAuto = FALSE,AM_MEDIA_TYPE* pmt = NULL);
  102. STDMETHODIMP_(IPin*) FindPinOnFilter(IBaseFilter* pIFilter, 
  103. LPCTSTR pstrPinName,
  104. PIN_DIRECTION dir);
  105. STDMETHODIMP_(IPin*) FindPinOnFilterbyType(IBaseFilter* pIFilter, 
  106. Pin_type aType,
  107. PIN_DIRECTION dir);
  108. STDMETHODIMP RemoveFilter(IBaseFilter* pIFilter);
  109. private:
  110. static void WINAPI WaitForEnd(void * apParameter);
  111. private:
  112. //回调指针
  113. GetZZLState* mpGetZZLStateProc;
  114. void* mpGetZZLUserPara;
  115. private:
  116. //创建调试信息日志
  117. bool CreateDebugInfo();
  118. private:
  119. IBaseFilter* m_pTVStreamSink;
  120. IBaseFilter* m_pSourceFile;
  121. IBaseFilter* m_pAviSplitter;
  122. IBaseFilter* mpAsfReader;
  123. IGraphBuilder* m_pGB;
  124. IMediaControl* m_pMC;
  125. IMediaEvent* m_pEvent;
  126. CRITICAL_SECTION moCriticalSection; //保护停止标志位。
  127. int m_iIsStop; //0为运行,1为停止。-1为发生意外错误停止
  128. };
  129. #endif