Sample Refresh после перемещения позиции (Seek) в графе
От: andrju  
Дата: 27.11.06 14:54
Оценка:
Для обновления картинки после перемещения позиции в остановленном графе, исользую следующий код:

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;

этот способ мне кажется медленным, а если необходимо покадровый просмотр, то неподходит.
есть ли другой способ обновления сэмпла?

заранее спасибо
Re: Sample Refresh после перемещения позиции (Seek) в графе
От: Аноним  
Дата: 06.11.07 15:58
Оценка:
Здравствуйте, andrju, Вы писали:

A>Для обновления картинки после перемещения позиции в остановленном графе, исользую следующий код:


A>m_pMMStream->Seek(pos);

A>// Set state to playback
A>if(!m_bPlaying)
A>{
A>m_pMMStream->SetState(STREAMSTATE_RUN);
A>hr=m_pSample->Update(SSUPDATE_ASYNC, NULL, NULL, 0);
A>if(hr==MS_S_PENDING)
A>{
A>do
A>{
A>hr = m_pSample->CompletionStatus(COMPSTAT_WAIT,10); // wait 10 milliseconds before returning
A>count++;
A>}while ((hr == MS_S_PENDING || hr == MS_E_BUSY) && count <= 3);
A>}
A>m_pMMStream->SetState(STREAMSTATE_STOP);
A>}


A>// где :

A>// Multimedia stream interface: IMultiMediaStream * m_pMMStream;
A>// DirectDraw sample stream interface: IDirectDrawStreamSample *m_pSample;

A>этот способ мне кажется медленным, а если необходимо покадровый просмотр, то неподходит.

A>есть ли другой способ обновления сэмпла?

A>заранее спасибо


у меня тот же вопрос, и код кстати похожий.
метод Seek действительно не подходит при покадровом просмотре, программа начинает тормозить.
подскажите, есть ли какой нибудь более быстрый аналог этого метода??? плз.
Re[2]: Sample Refresh после перемещения позиции (Seek) в гра
От: Аноним  
Дата: 10.11.07 10:32
Оценка:
Насчет покадрового просмотра, может Вам пригодится:
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);// шагаем на один семпл

окно обновляется автоматом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.