📄 tvpinvideo.cpp
字号:
#include "stdafx.h"
// Video Pin
CTVStreamSourceVideoPin::CTVStreamSourceVideoPin(HRESULT *phr, CSource *pFilter)
: CTVStreamSourcePin(NAME("Chaos Filter Video Pin"), phr, pFilter, false)
{
}
//
CTVStreamSourceVideoPin::~CTVStreamSourceVideoPin()
{
}
//
HRESULT CTVStreamSourceVideoPin::ChangeStop()
{
return NOERROR;
}
//
HRESULT CTVStreamSourceVideoPin::ChangeRate()
{
return NOERROR;
}
//
HRESULT CTVStreamSourceVideoPin::SeekTime(REFERENCE_TIME rtPos)
{
SetSeekData(rtPos);
//
return S_FALSE;
}
//
STDMETHODIMP CTVStreamSourceVideoPin::NonDelegatingQueryInterface(REFIID riid, void ** ppv)
{
CheckPointer(ppv, E_POINTER);
return CTVStreamSourcePin::NonDelegatingQueryInterface(riid, ppv);
}
//
HRESULT CTVStreamSourceVideoPin::ChangeStart()
{
if (m_pFilter && m_pFilter->m_pComm)
return NOERROR;
//
if (ThreadExists())
{
DeliverBeginFlush();
//
Stop();
// complete the flush
DeliverEndFlush();
// restart
Run();
}
//
return NOERROR;
}
//
HRESULT CTVStreamSourceVideoPin::OnThreadStartPlay(void)
{
m_pFilter->SetBaseRef(_I64_MAX);
//
SetSeekData(m_rtStart + m_llBaseTime);
//
return CTVStreamSourcePin::OnThreadStartPlay();
}
HRESULT CTVStreamSourceVideoPin::OnThreadDestroy(void)
{
return CTVStreamSourcePin::OnThreadDestroy();
}
//
HRESULT CTVStreamSourceVideoPin::Active(void)
{
return CSourceStream::Active();
}
void CTVStreamSourceVideoPin::RawSync(LONGLONG start)
{
LONGLONG m_audiotime = m_pFilter->GetRawAudioRef();
//如果videopin太快,则拖延一下video的行为
if(m_audiotime != _I64_MAX && (start > m_audiotime) && (start - m_audiotime > 50000000))
{
Sleep(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -