summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-26 17:25:26 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-26 17:25:26 +0100
commitf8ad440cf187c517b7800f3efdfc0954025c4422 (patch)
treee78e2d79b5b3497619886a655cce87cf3814a2b4 /src/lib/ffmpeg_decoder.cc
parent782ea85cae48d273e1ad9e06c9bdd85269877778 (diff)
Try to fix seeking with FFmpeg.
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
-rw-r--r--src/lib/ffmpeg_decoder.cc5
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