2,543
社区成员
发帖
与我相关
我的任务
分享
HRESULT CContrast::Transform(IMediaSample *pIn, IMediaSample *pOut)
{
...............................
REFERENCE_TIME TimeStart, TimeEnd;
if(NOERROR == pIn->GetTime(×tart, &TimeEnd))
{
pDest->SetTime(×tart, &TimeEnd);
}
m_lStreamTime = TimeEnd;
...........................
}
STDMETHODIMP CMyFilter::get_Time(LONGLONG* lTime)
{
*lTime = m_lStreamTime;
return NOERROR;
}
void CGraphBuild::GetStreamTime(double* outStreamTime)
{
if (m_pMyFilter)
{
CComPtr<IFraction> pContrast;
HRESULT hr = m_pMyFilter->QueryInterface(IID_IFraction, (void**)&pContrast);
if (SUCCEEDED(hr))
{
__int64 lStreamTime;
if (SUCCEEDED(pContrast->get_Time(&lStreamTime)))
{
*outStreamTime = ((double)lStreamTime) / 10000000.;
return ;
}
}
}
*outStreamTime = 0;
}
bool CGraphBuild::GetDuration(double * outDuration)
{
if (mSeeking)
{
__int64 length = 0;
if (SUCCEEDED(mSeeking->GetDuration(&length)))
{
*outDuration = ((double)length) / 10000000.;
return true;
}
}
return false;
}
void CAviDlg::OnTimer(UINT_PTR nIDEvent)
{
double lStreamTime = 0;
m_pGraph->GetStreamTime(&lStreamTime);
double lStopTime = 0;
m_pGraph->GetDuration(&lStopTime);
double lDone = lStreamTime * 100 / lStopTime;
m_Progress.SetPos((int)lDone);
}
HRESULT CMyFilter::Transform(IMediaSample *pIn, IMediaSample *pOut)
{
...............................
REFERENCE_TIME TimeStart, TimeEnd;
if(NOERROR == pIn->GetTime(×tart, &TimeEnd))
{
pDest->SetTime(×tart, &TimeEnd);
}
m_lStreamTime = TimeEnd;
...........................
}
STDMETHODIMP CMyFilter::get_Time(LONGLONG* lTime)
{
*lTime = m_lStreamTime;
return NOERROR;
}
void CGraphBuild::GetStreamTime(double* outStreamTime)
{
if (m_pMyFilter)
{
CComPtr<IFraction> pContrast;
HRESULT hr = m_pMyFilter->QueryInterface(IID_IFraction, (void**)&pContrast);
if (SUCCEEDED(hr))
{
__int64 lStreamTime;
if (SUCCEEDED(pContrast->get_Time(&lStreamTime)))
{
*outStreamTime = ((double)lStreamTime) / 10000000.;
return ;
}
}
}
*outStreamTime = 0;
}
bool CGraphBuild::GetDuration(double * outDuration)
{
if (mSeeking)
{
__int64 length = 0;
if (SUCCEEDED(mSeeking->GetDuration(&length)))
{
*outDuration = ((double)length) / 10000000.;
return true;
}
}
return false;
}
void CAviDlg::OnTimer(UINT_PTR nIDEvent)
{
double lStreamTime = 0;
m_pGraph->GetStreamTime(&lStreamTime);
double lStopTime = 0;
m_pGraph->GetDuration(&lStopTime);
double lDone = lStreamTime * 100 / lStopTime;
m_Progress.SetPos((int)lDone);
}