GraphCenter.h
资源名称:p2p_vod.rar [点击查看]
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:4k
源码类别:
P2P编程
开发平台:
Visual C++
- /*
- * Openmysee
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
- #if defined (_MSC_VER) && (_MSC_VER >= 1000)
- #pragma once
- #endif
- #ifndef _GAOV_GRAPHCENTER_H
- #define _GAOV_GRAPHCENTER_H
- enum Pin_type
- {
- VIDEO,
- AUDIO
- };
- // 这是回调函数的指针
- typedef int (__stdcall GetZZLState)(void* apUserPara, int aiState);
- #ifdef _DEBUG
- //注册图类
- static DWORD g_dwRegister;
- static HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
- {
- IMoniker * pMoniker;
- IRunningObjectTable *pROT;
- HRESULT hr;
- hr = GetRunningObjectTable(0, &pROT);
- if (FAILED(hr)) return hr;
- WCHAR wsz[128];
- wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
- hr = CreateItemMoniker(L"!", wsz, &pMoniker);
- if (SUCCEEDED(hr))
- {
- hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
- pMoniker->Release();
- }
- pROT->Release();
- return hr;
- }
- static void RemoveGraphFromRot(DWORD pdwRegister)
- {
- IRunningObjectTable *pROT;
- if (SUCCEEDED(GetRunningObjectTable(0, &pROT)))
- {
- pROT->Revoke(pdwRegister);
- pROT->Release();
- }
- }
- #endif //_DEBUG
- class CGraphCenter
- {
- public:
- CGraphCenter();
- ~CGraphCenter();
- public:
- STDMETHODIMP Initialize();
- STDMETHODIMP Uninitialize();
- STDMETHODIMP BuildGraph(LPCTSTR astrFileName, LPCTSTR astrZZLDirectory, LPCTSTR astrZZLFile);
- STDMETHODIMP DisassembleGraph();
- public:
- STDMETHODIMP Run();
- STDMETHODIMP Stop();
- public:
- int GetState()
- {
- return m_iIsStop;
- };
- float GetCompressedSpeed();
- //设置状态回调函数
- void SetStateProc(GetZZLState* apStateproc, void* apUserPara);
- private:
- STDMETHODIMP AddFilter(CLSID clsidFilter,
- IBaseFilter** ppIFilter,
- LPCTSTR pstrFilterName = NULL);
- STDMETHODIMP ConnectAutoPins(IBaseFilter* pIFilterOutput,
- LPCTSTR pstrPinNameOutput,
- IBaseFilter* pIFilterInput,
- LPCTSTR pstrPinNameInput);
- STDMETHODIMP ConnectPins(IBaseFilter* pIFilterOutput,
- LPCTSTR pstrPinNameOutput,
- IBaseFilter* pIFilterInput,
- LPCTSTR pstrPinNameInput,
- AM_MEDIA_TYPE* pmt = NULL);
- //pin的连接
- STDMETHODIMP ConnectPinsEX(IBaseFilter* pIFilterOutput,
- Pin_type atype,
- IBaseFilter* pIFilterInput,
- LPCTSTR pstrPinNameInput,
- BOOL bisAuto = FALSE,AM_MEDIA_TYPE* pmt = NULL);
- STDMETHODIMP_(IPin*) FindPinOnFilter(IBaseFilter* pIFilter,
- LPCTSTR pstrPinName,
- PIN_DIRECTION dir);
- STDMETHODIMP_(IPin*) FindPinOnFilterbyType(IBaseFilter* pIFilter,
- Pin_type aType,
- PIN_DIRECTION dir);
- STDMETHODIMP RemoveFilter(IBaseFilter* pIFilter);
- private:
- static void WINAPI WaitForEnd(void * apParameter);
- private:
- //回调指针
- GetZZLState* mpGetZZLStateProc;
- void* mpGetZZLUserPara;
- private:
- //创建调试信息日志
- bool CreateDebugInfo();
- private:
- IBaseFilter* m_pTVStreamSink;
- IBaseFilter* m_pSourceFile;
- IBaseFilter* m_pAviSplitter;
- IBaseFilter* mpAsfReader;
- IGraphBuilder* m_pGB;
- IMediaControl* m_pMC;
- IMediaEvent* m_pEvent;
- CRITICAL_SECTION moCriticalSection; //保护停止标志位。
- int m_iIsStop; //0为运行,1为停止。-1为发生意外错误停止
- };
- #endif