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

P2P编程

开发平台:

Visual C++

  1. #ifndef __TV_STREAM_SOURCE_H__
  2. #define __TV_STREAM_SOURCE_H__
  3. class CTVStreamSource : public CSource, 
  4. public IFileSourceFilter, 
  5. public ISettings
  6. {
  7. friend class CTVStreamSourceVideoPin;
  8. friend class CTVStreamSourceAudioPin;
  9. friend class CTVStreamSourcePin;
  10. public:
  11. DECLARE_IUNKNOWN
  12. static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *pHr);
  13. //
  14. public:
  15. //IFileSourceFilter
  16. STDMETHOD(Load)(LPCOLESTR pszFileName, const AM_MEDIA_TYPE *pmt);
  17. STDMETHOD(GetCurFile)(LPOLESTR *ppszFileName, AM_MEDIA_TYPE *pmt);
  18. //
  19. private:
  20. HRESULT _LoadFile(const char* filename);
  21. HRESULT _LoadURL(char* strURL);
  22. public:
  23. // interface ISettings
  24. STDMETHODIMP_(void) SetPopMsgHWND(HWND pop);
  25. public:
  26. STDMETHOD(Stop)();
  27. /*
  28. STDMETHOD(Run)(REFERENCE_TIME tStart);
  29. STDMETHOD(Pause)();*/
  30. //
  31. STDMETHODIMP JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName);
  32. //
  33. IBaseFilter* FindFilterFromFriendlyName(REFCLSID clsid, string str);
  34. public:
  35. LONGLONG GetBaseRef();
  36. void SetBaseRef(LONGLONG llBaseRef);
  37. LONGLONG GetRawAudioRef();
  38. void SetRawAudioRef(LONGLONG llRawRef);
  39. private:
  40.     CTVStreamSource(LPUNKNOWN pUnk, HRESULT *pHr);
  41.     ~CTVStreamSource();
  42. static bool UpdateAndStartLocalServer();
  43. static bool DoesFileExist(LPCTSTR path, LPCTSTR filename);
  44. //
  45. private:
  46.     // Overriden to say what interfaces we support where
  47.     STDMETHOD(NonDelegatingQueryInterface)(REFIID riid, void ** ppv);
  48. private:
  49. LPWSTR m_pFileName;
  50. BOOL   m_isAudioOnly;
  51. BOOL   m_bUpdateComplete;
  52. volatile BOOL   m_bCanDynamicReconnect;
  53. //
  54. CTVStreamSourceVideoPin* m_pVideoPin;
  55. CTVStreamSourceAudioPin* m_pAudioPin;
  56. //
  57. NetworkProxy*    m_pComm;
  58. ZZLFileReader*   m_pFileReader; // zzl文件
  59. //
  60. CCritSec         m_critllBase;
  61. LONGLONG         m_llBaseRef;//用于音视频同步
  62. LONGLONG  m_rawAudiotime; //以音频时间为标准,进行相对粗略的同步
  63. //
  64. string           m_srcname;  // 资源名
  65. //
  66. OSVERSIONINFOEX osvi; // 操作系统版本信息
  67. public:
  68. //
  69. HANDLE      m_hThread;
  70. unsigned    m_iThreadID;
  71. //
  72. //
  73. static unsigned __stdcall ThreadFunc( void* pArguments );
  74. void AddFilterToCache();
  75. IFilterGraph* GetFG();
  76. IGraphConfig* GetGCF();
  77. BOOL CanDynamicReconnect(){return m_bCanDynamicReconnect;}
  78. //
  79. IBaseFilter* CreateDMO( REFCLSID clsidDMO, REFCLSID catDMO);
  80. HRESULT EnumFilters (IFilterGraph *pGraph);
  81. //
  82. IBaseFilter* m_pVideoRender;
  83. IBaseFilter* m_pAudioRender;
  84. //
  85. BOOL m_iSAddFilterToCache;
  86. // 切换编码的时候虽然要调用mediacontrol::stop,但是不能stop掉这个Filter
  87. volatile bool m_bDoRealStop;
  88. };
  89. #endif// __TV_STREAM_SOURCE_H__