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

P2P编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. // Video Pin
  3. CTVStreamSourceVideoPin::CTVStreamSourceVideoPin(HRESULT *phr, CSource *pFilter)
  4. : CTVStreamSourcePin(NAME("Chaos Filter Video Pin"), phr, pFilter, false)
  5. {
  6. }
  7. //
  8. CTVStreamSourceVideoPin::~CTVStreamSourceVideoPin() 
  9. {
  10. }
  11. //
  12. HRESULT CTVStreamSourceVideoPin::ChangeStop()
  13. {
  14. return NOERROR;
  15. }
  16. //
  17. HRESULT CTVStreamSourceVideoPin::ChangeRate()
  18. {
  19. return NOERROR;
  20. }
  21. //
  22. HRESULT CTVStreamSourceVideoPin::SeekTime(REFERENCE_TIME rtPos)
  23. {
  24. SetSeekData(rtPos);
  25. //
  26. return S_FALSE;
  27. }
  28. //
  29. STDMETHODIMP CTVStreamSourceVideoPin::NonDelegatingQueryInterface(REFIID riid, void ** ppv) 
  30. {
  31. CheckPointer(ppv, E_POINTER);
  32. return CTVStreamSourcePin::NonDelegatingQueryInterface(riid, ppv);
  33. }
  34. //
  35. HRESULT CTVStreamSourceVideoPin::ChangeStart()
  36. {
  37. if (m_pFilter && m_pFilter->m_pComm)
  38. return NOERROR;
  39. //
  40. if (ThreadExists()) 
  41.     {
  42.         DeliverBeginFlush();
  43. //
  44.     Stop();
  45.         // complete the flush
  46.         DeliverEndFlush();
  47.     // restart
  48. Run();
  49.        
  50.     }
  51. //
  52. return NOERROR;
  53. }
  54. //
  55. HRESULT CTVStreamSourceVideoPin::OnThreadStartPlay(void) 
  56. {
  57. m_pFilter->SetBaseRef(_I64_MAX);
  58. //
  59. SetSeekData(m_rtStart + m_llBaseTime);
  60. //
  61.     return CTVStreamSourcePin::OnThreadStartPlay();
  62. }
  63. HRESULT CTVStreamSourceVideoPin::OnThreadDestroy(void) 
  64. {
  65. return  CTVStreamSourcePin::OnThreadDestroy();
  66. }
  67. //
  68. HRESULT CTVStreamSourceVideoPin::Active(void)
  69. {
  70. return CSourceStream::Active();
  71. }
  72. void CTVStreamSourceVideoPin::RawSync(LONGLONG start)
  73. {
  74. LONGLONG m_audiotime = m_pFilter->GetRawAudioRef();
  75. //如果videopin太快,则拖延一下video的行为
  76. if(m_audiotime != _I64_MAX && (start > m_audiotime) && (start - m_audiotime > 50000000))
  77. {
  78. Sleep(1000);
  79. }
  80. }