Для обновления картинки после перемещения позиции в остановленном графе, исользую следующий код:
m_pMMStream->Seek(pos);
// Set state to playback
if(!m_bPlaying)
{
m_pMMStream->SetState(STREAMSTATE_RUN);
hr=m_pSample->Update(SSUPDATE_ASYNC, NULL, NULL, 0);
if(hr==MS_S_PENDING)
{
do
{
hr = m_pSample->CompletionStatus(COMPSTAT_WAIT,10); // wait 10 milliseconds before returning
count++;
}while ((hr == MS_S_PENDING || hr == MS_E_BUSY) && count <= 3);
}
m_pMMStream->SetState(STREAMSTATE_STOP);
}
// где :
// Multimedia stream interface: IMultiMediaStream * m_pMMStream;
// DirectDraw sample stream interface: IDirectDrawStreamSample *m_pSample;
этот способ мне кажется медленным, а если необходимо покадровый просмотр, то неподходит.
есть ли другой способ обновления сэмпла?
заранее спасибо
Насчет покадрового просмотра, может Вам пригодится:
long bMultiple = 0;// это не обязательно, нужно для переходов на несколько семплов
IVideoFrameStep* pVideoFrameStep;
if(piGraphBuilder->QueryInterface(IID_IVideoFrameStep, (void **)&pVideoFrameStep) == S_OK)
{
pVideoFrameStep->Release();
// проверяем доступность покадрового воспр.
if(pVideoFrameStep->CanStep(bMultiple, NULL) == S_OK)
{
////// делаем что нужно, к примеру пункт меню устанавливаем
}
}
ну и потом
pVideoFrameStep->Step(1, NULL);// шагаем на один семпл
окно обновляется автоматом.