Without calling Pause () fn we are not able to set seek position...
--------------------------------------------------------------------------
we are able to do the SetPosition ( set the seek position) on the fly while running the video.
In our Source Filter we are not able to set the seek position. Before setting the seek position, we have to the
following:
Pause() of IMediaControl;
SetPosition();
Run()
then only we are able to set the seek position to the source filter.
Solution:
--------------
The reason we are not able to do the seek position while running the video is we are not handling
setPosition properly.
if Source Filter's output pin thread exists , that represents the video is running; then
i)call the stop on Source Filter's output pins .
if(m_paStreams[i]->ThreadExists())
{
if(m_paStreams[i]->IsConnected())
{
hr = m_paStreams[i]->DeliverBeginFlush() ;
}
if(m_State != State_Stopped )
{
hr = m_paStreams[i]->Stop();
}
if(m_paStreams[i]->IsConnected())
{
hr = m_paStreams[i]->DeliverEndFlush() ;
}
}
ii)Set the seek position
iii)call the Pause () fn on Each output pins of the source Filter
If the filter graph is stopped, the video renderer does not update the image after a seek operation. To the user, it will
appear as if the seek did not happen. To update the image, pause the graph after the seek operation. Pausing the graph cues a
new video frame for the video renderer. You can use the IMediaControl::StopWhenReady method, which pauses the graph and then
stops it.
No comments:
Post a Comment