Remove the code, on seeking, to seek to the requested timestamp
authorCarl Hetherington <cth@carlh.net>
Fri, 30 Jan 2015 22:08:08 +0000 (22:08 +0000)
committerCarl Hetherington <cth@carlh.net>
Fri, 30 Jan 2015 22:08:08 +0000 (22:08 +0000)
in the audio stream if it is lower than that for the video stream.
The FFmpeg docs don't support it, AFAICS, as they suggest that
the the seek should be in the timebase of the specified stream.

It also causes problems with the "preview" test when seeking
inaccurately in the viewer.

src/lib/ffmpeg_decoder.cc

index 7c846349f466d225cd190601446a917bd0e02eab..bd01b280b65bc223101aac0282ef4c4bc5f71b40 100644 (file)
@@ -301,7 +301,7 @@ FFmpegDecoder::seek (ContentTime time, bool accurate)
 {
        VideoDecoder::seek (time, accurate);
        AudioDecoder::seek (time, accurate);
-       
+
        /* If we are doing an `accurate' seek, we need to use pre-roll, as
           we don't really know what the seek will give us.
        */
@@ -314,15 +314,7 @@ FFmpegDecoder::seek (ContentTime time, bool accurate)
        */
        
        ContentTime const u = time - _pts_offset;
-       int64_t s = u.seconds() / av_q2d (_format_context->streams[_video_stream]->time_base);
-
-       if (_ffmpeg_content->audio_stream ()) {
-               s = min (
-                       s, int64_t (u.seconds() / av_q2d (_ffmpeg_content->audio_stream()->stream(_format_context)->time_base))
-                       );
-       }
-
-       av_seek_frame (_format_context, _video_stream, s, 0);
+       av_seek_frame (_format_context, _video_stream, u.seconds() / av_q2d (_format_context->streams[_video_stream]->time_base), 0);
 
        avcodec_flush_buffers (video_codec_context());
        if (audio_codec_context ()) {