グラフをレンダリングした後、グラフを一時停止する必要があります。その後、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 は 1 フレームあたりの時間で、カスタム レンダラーで取得できます。ビデオ レンダラー ピンが接続されている場合、そのピンで VIDEOINFO::AvgTimePerFrame を取得できます。