mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 08:11:16 +00:00
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
This commit is contained in:
parent
e746746120
commit
630790f50d
1 changed files with 4 additions and 4 deletions
|
@ -2560,15 +2560,15 @@ gst_ffmpegdec_chain (GstPad * pad, GstBuffer * inbuf)
|
||||||
discont = GST_BUFFER_IS_DISCONT (inbuf);
|
discont = GST_BUFFER_IS_DISCONT (inbuf);
|
||||||
|
|
||||||
/* The discont flags marks a buffer that is not continuous with the previous
|
/* 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
|
* buffer. This means we need to clear whatever data we currently have. We let
|
||||||
* currently also wait for a new keyframe, which might be suboptimal in the
|
* ffmpeg continue with the data that it has. We currently drain the old
|
||||||
* case of a network error, better show the errors than to drop all data.. */
|
* 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)) {
|
if (G_UNLIKELY (discont)) {
|
||||||
GST_DEBUG_OBJECT (ffmpegdec, "received DISCONT");
|
GST_DEBUG_OBJECT (ffmpegdec, "received DISCONT");
|
||||||
/* drain what we have queued */
|
/* drain what we have queued */
|
||||||
gst_ffmpegdec_drain (ffmpegdec);
|
gst_ffmpegdec_drain (ffmpegdec);
|
||||||
gst_ffmpegdec_flush_pcache (ffmpegdec);
|
gst_ffmpegdec_flush_pcache (ffmpegdec);
|
||||||
avcodec_flush_buffers (ffmpegdec->context);
|
|
||||||
ffmpegdec->discont = TRUE;
|
ffmpegdec->discont = TRUE;
|
||||||
gst_ffmpegdec_reset_ts (ffmpegdec);
|
gst_ffmpegdec_reset_ts (ffmpegdec);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue