diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-06-26 17:25:26 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-06-26 17:25:26 +0100 |
| commit | f8ad440cf187c517b7800f3efdfc0954025c4422 (patch) | |
| tree | e78e2d79b5b3497619886a655cce87cf3814a2b4 /src/lib/ffmpeg_decoder.cc | |
| parent | 782ea85cae48d273e1ad9e06c9bdd85269877778 (diff) | |
Try to fix seeking with FFmpeg.
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 2d1792390..a3fdaf9b1 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -301,6 +301,7 @@ FFmpegDecoder::do_seek (VideoContent::Frame frame, bool backwards, bool accurate { int64_t const vt = frame * _ffmpeg_content->video_frame_rate() / av_q2d (_format_context->streams[_video_stream]->time_base); av_seek_frame (_format_context, _video_stream, vt, backwards ? AVSEEK_FLAG_BACKWARD : 0); + _video_position = frame; avcodec_flush_buffers (video_codec_context()); if (_subtitle_codec_context) { @@ -322,6 +323,8 @@ FFmpegDecoder::do_seek (VideoContent::Frame frame, bool backwards, bool accurate if (r >= 0 && finished) { int64_t const bet = av_frame_get_best_effort_timestamp (_frame); if (bet > vt) { + _video_position = (bet * av_q2d (_format_context->streams[_video_stream]->time_base) + _pts_offset) + * _ffmpeg_content->video_frame_rate(); break; } } @@ -330,8 +333,6 @@ FFmpegDecoder::do_seek (VideoContent::Frame frame, bool backwards, bool accurate av_free_packet (&_packet); } } - - return; } void |
