Wednesday, May 09, 2012

How P frame seek support will be added in any multimedia framework

Some multimedia frameworks will have support for P frame seek. Some

frameworks wont have this support. So How can we add this support ?



For P frame seek, we can not start directly start decoding & rendering

from the P frame;

Since P frame doesnt have entire frame information, if we start

decoding & rendering from P frame, it will shows

green patches on screen and affect the user experience.





How P frame seek is supported in Directshow multimedia framework ?





For any seek timestamp, Parser will seek the I frame timestamp before

the seek timestamp.

Ex :

I frame is available in 10th second.

if the seek is done to 12th second, the Parser will fetch I frame from

10th second and give it do the decoder.



Source Filter will set IMediaSample's SetPreroll() as true. The

decoder will decode the frame,get necessary information and wont give

it to the renderer.



Once the timestamp reached the seek timestamp, Parser will set the

setPreroll as false, then frame will starts rendering.





OpenCORE:



In OpenCORE's frame have an option to set DoNotRender flag. If we set

this flag, it wont render the given frame.



In Generic, In any multimedia framework,



if we are calling seek to any timestamp, Upto seektimestamp is

reached, video and audio frames are dropped without rendering on

hardware device.In case of audio, we will have more I frames. But if

we are rendering audio alone, video takes more time to catchup

video.User might be able to observe the weird behaviour since ear is

more sensitive than eyes. In this scenario, rendering the audio also

causes the audio clock to increase. It will cause AV sync issues once

video starts rendering.



In any multimedia framework, we have to do the following steps to

do P frame seek:







1.ParserseekTo(Nearest_I_Frame to SeekTimesamp);

2.ParserRead(frame);

3.Decode(decodedAudioVideoFrame);



4. if (decodedAudioVideoFrameTimestamp < SeekTimestamp)

{

release audioVideoFrame;

}

else

render(decodedAudioVideoFrame);

0 Comments:

Post a Comment

<< Home