summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2009-09-01 21:42:26 +0200
committerWim Taymans <wim@metal.(none)>2009-09-01 21:42:26 +0200
commit46bf3b92d0252b4ea3188d2f77141caacfa05ec4 (patch)
treeb974304250707996e2f3162959f0d07a6bbb5711
parentdf248a7aa633252ff6726828df64025a2e9e7bbf (diff)
ffdec: disable interpolation when dropping frames
When we are dropping frames because of QoS disable the DTS interpolation because we won't be able to update the timestamps and end up setting the wrong timestamps. Instead, simply use the timestamps from ffmpeg.
-rw-r--r--ext/ffmpeg/gstffmpegdec.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c
index 2478462..f8345f0 100644
--- a/ext/ffmpeg/gstffmpegdec.c
+++ b/ext/ffmpeg/gstffmpegdec.c
@@ -1683,6 +1683,14 @@ gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
if (len < 0 && (mode_switch || ffmpegdec->context->hurry_up))
len = 0;
+ if (len > 0 && have_data <= 0 && (mode_switch
+ || ffmpegdec->context->hurry_up)) {
+ /* we consumed some bytes but nothing decoded and we are skipping frames,
+ * disable the interpollation of DTS timestamps */
+ ffmpegdec->ts_is_dts = FALSE;
+ ffmpegdec->last_out = -1;
+ }
+
/* no data, we're done */
if (len < 0 || have_data <= 0)
goto beach;