From 630790f50d04a4998a37a0e01304e9196f776476 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 20 Apr 2012 16:16:25 +0200 Subject: [PATCH] ffdec: don't flush buffers on DISCONT Don't flush the buffers that ffmpeg has on DISCONT but instead let it recover. This gives a much better image in the case of packet loss. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=635020 --- ext/ffmpeg/gstffmpegdec.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index 918abf866e..719c5386b9 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -2560,15 +2560,15 @@ gst_ffmpegdec_chain (GstPad * pad, GstBuffer * inbuf) discont = GST_BUFFER_IS_DISCONT (inbuf); /* The discont flags marks a buffer that is not continuous with the previous - * buffer. This means we need to clear whatever data we currently have. We - * currently also wait for a new keyframe, which might be suboptimal in the - * case of a network error, better show the errors than to drop all data.. */ + * buffer. This means we need to clear whatever data we currently have. We let + * ffmpeg continue with the data that it has. We currently drain the old + * frames that might be inside the decoder and we clear any partial data in + * the pcache, we might be able to remove the drain and flush too. */ if (G_UNLIKELY (discont)) { GST_DEBUG_OBJECT (ffmpegdec, "received DISCONT"); /* drain what we have queued */ gst_ffmpegdec_drain (ffmpegdec); gst_ffmpegdec_flush_pcache (ffmpegdec); - avcodec_flush_buffers (ffmpegdec->context); ffmpegdec->discont = TRUE; gst_ffmpegdec_reset_ts (ffmpegdec); }