[FFmpeg-devel] [PATCH] First shot at AVCHD seeking via new seeking API

Ivan Schreter schreter
Sun Jul 5 23:23:38 CEST 2009


I've finally found some time to experiment a bit further with seeking 
code. I've implemented a read_seek2 routine in mpegts.c and some generic 
code for finding proper position in lavf/utils.c. This is just a first 
shot, as I suppose, I can make the generic code a little simpler. 
Comments welcome.

Basically, the implementation in mpegts.c first calls generic seeking 
routine to find approximate position with given timestamp (via 
bisection) and then calls the routine to find exact position in 
lavf/utils.c based on given timestamp criteria.

The lavf patch introduces two functions, one public to be used by 
demuxers (av_gen_syncpoint_search) and one internal to iterate to proper 
position (av_search_keyframe_multi_partial). The implementation tries to 
find for each active stream key frames just before and just after the 
target timestamp. If there is no key frame fulfilling the timestamp 
criteria in given direction, then obviously only one direction can be 
used. Additionally, timestamp and position of minimum timestamp frame 
will be also stored, in order to handle one special case (see later).

After the positions and timestamps of key frames are known, we will 
search for closest timestamp to the requested one and then for an 
associated position in the file where to reposition the file pointer in 
order to guarantee that all active streams meet a key frame before this 

There is one special case, however: seeking to a negative timestamp or 
timestamp lower than minimum timestamp in the file. This was handled 
until now by seeking to the beginning of video file. Strictly speaking, 
the new API should simply discard the request returning an error. 
However, this will break just about any player and video editor, so I 
implemented it as a special case.

Comments on that?

There is also seek regression of mpegts, since now it returns key frames 
instead of some frames. Patch also attached.

Byte seeking is not yet implemented.

BTW, if I understand it correctly, new seeking API should guarantee 
seeking by PTS. Maybe it would make sense to add a flag to format 
descriptor, whether it supports seeking by PTS or by DTS. Currently, you 
cannot say what timestamp are you actually seeking to. Any 



-------------- next part --------------
A non-text attachment was scrubbed...
Name: seek_cooked_lavf.patch
Type: text/x-patch
Size: 16456 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090705/e29fb658/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: seek_cooked_mpegts.patch
Type: text/x-patch
Size: 3962 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090705/e29fb658/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: seek_cooked_seekregress.patch
Type: text/x-patch
Size: 4863 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090705/e29fb658/attachment-0002.bin>

More information about the ffmpeg-devel mailing list