Вам нужно приостановить график после того, как вы отобразили график. После этого вы можете изменить кадр, который хотите показать, используя SetPositions.
Примерно так:
int ShowFrame(long lFrame)
{
if (FAILED(m_pMC->Pause()))
return -1;
LONGLONG llUnknown = 0;
LONGLONG llTime = LONGLONG(m_lFrameTime) * lFrame + m_lFrameTime / 2;
GUID TimeFormat;
if (FAILED(m_pMS->GetTimeFormat(&TimeFormat))) return -1;
if (TimeFormat == TIME_FORMAT_MEDIA_TIME)
{
llUnknown = llTime;
}
else
{
if (FAILED(m_pMS->ConvertTimeFormat(&llUnknown, &TimeFormat, llTime, &TIME_FORMAT_MEDIA_TIME))) return -1;
}
if (FAILED(m_pMS->SetPositions(&llUnknown, AM_SEEKING_AbsolutePositioning, 0, AM_SEEKING_NoPositioning))) return -1;
return 0;
}
m_lFrameTime - это время на один кадр, которое вы можете получить в своем пользовательском рендерере. Когда подключен вывод видео рендерера, вы можете получить VIDEOINFO :: AvgTimePerFrame на этом выводе.