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

P2P编程

开发平台:

Visual C++

  1. #ifndef __TV_STREAM_SOURCE_PINS_H__
  2. #define __TV_STREAM_SOURCE_PINS_H__
  3. struct SEEKDATA
  4. {
  5. REFERENCE_TIME rtSeekTo;
  6. BOOL bSycn;
  7. };
  8. //
  9. enum
  10. {
  11. MIN_VIDEO_SAMPLE_BUFFER = 131072, //128KB
  12. MIN_AUDIO_SAMPLE_BUFFER = 65536,  // 64KB
  13. };
  14. //
  15. class CTVStreamSourcePin : public CSourceStream,
  16.   public CSourceSeeking
  17. {
  18. public:
  19.     CTVStreamSourcePin(TCHAR *pObjectName, HRESULT *phr, CSource *pFilter, bool isAudio);
  20.     ~CTVStreamSourcePin();
  21.     // Override the version that offers exactly one media type
  22. const AM_MEDIA_TYPE * GetType();
  23.     HRESULT GetMediaType(CMediaType *pMediaType);
  24.     HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *Request);
  25. //
  26. STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
  27. STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
  28. STDMETHODIMP_(ULONG) AddRef();                                    
  29. STDMETHODIMP_(ULONG) Release();
  30. //IMediaSeeking
  31. virtual HRESULT ChangeStart() = 0;
  32. virtual HRESULT ChangeStop()  = 0;
  33. virtual HRESULT ChangeRate()  = 0;
  34. //
  35. void SetMediaTime();
  36. //
  37.     HRESULT FillBuffer(IMediaSample *pSample);
  38. HRESULT DoBufferProcessingLoop(void);
  39.     // Quality control
  40. STDMETHODIMP Notify(IBaseFilter *pSelf, Quality q);
  41. // HRESULT Active(void);
  42.     HRESULT BeginFlushData(void);
  43.     HRESULT EndFlushData(void);
  44.     void    KillPin();
  45. public:
  46. //
  47. void SetSeekData(REFERENCE_TIME rtSeekTo);
  48. //
  49. BOOL IsSeeking();
  50. void SetAnotherPin(CTVStreamSourcePin* pPin);
  51. //
  52. //
  53. //
  54. private:
  55.     BOOL DumpoutData();
  56. void SetDefaultMediaType();
  57. void GetFirstMediaType();
  58. void SetInfor(TVMEDIATYPESECTION tv);
  59. BOOL CheckMediaType(PBYTE pData);
  60. CMediaType m_MediaType;
  61. //
  62. BYTE* m_Data;
  63. //
  64. volatile BOOL m_bPinAvaible;
  65. volatile BOOL m_bSync;
  66.     volatile LONG m_bFlushforSync;
  67. protected:
  68. virtual HRESULT OnThreadStartPlay(void);
  69. virtual HRESULT OnThreadDestroy(void);
  70. virtual void RawSync(LONGLONG start) = 0;
  71. SampleHeader        m_header;
  72. bool                m_isAudioPin;
  73. bool m_bTryGetMediaType;
  74. //
  75. int                 m_iVideoSampleSize;
  76. int                 m_iAudioSampleSize;
  77. //
  78. CCritSec            m_critsec_rtCurrTime_SeekData;
  79. SEEKDATA            m_SeekData;
  80. //
  81. CTVStreamSource*    m_pFilter;
  82. CTVStreamSourcePin* m_pAnotherPin;
  83. #ifdef USE_LOG
  84. FILE* log;
  85. #endif
  86. //
  87. protected:
  88. CCritSec m_crisecllBaseTime;
  89. LONGLONG m_llBaseTime;
  90. //
  91. };
  92. #endif// __TV_STREAM_SOURCE_PINS_H__