diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2020-09-14 14:24:51 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2020-09-14 14:24:51 +0300 |
commit | 90a079cc8d5d92ec776d70ae4790fed9e9465c29 (patch) | |
tree | 6044b48c5899e07e4cac9e318342953b708d6406 | |
parent | c6e51f404dc52e00cd92ceae2a251288a46db0b3 (diff) | |
download | gst-libav-90a079cc8d5d92ec776d70ae4790fed9e9465c29.tar.gz |
avviddec: Forward flow returns from draining instead of assuming OK
It might be useful for upstream to know that draining/finishing didn't
succeed, and why.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/90>
-rw-r--r-- | ext/libav/gstavviddec.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index aca53b1..d9eb178 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -1810,7 +1810,7 @@ static GstFlowReturn gst_ffmpegviddec_drain (GstVideoDecoder * decoder) { GstFFMpegVidDec *ffmpegdec = (GstFFMpegVidDec *) decoder; - GstFlowReturn ret; + GstFlowReturn ret = GST_FLOW_OK; gboolean got_frame = FALSE; if (!ffmpegdec->opened) @@ -1825,7 +1825,7 @@ gst_ffmpegviddec_drain (GstVideoDecoder * decoder) avcodec_flush_buffers (ffmpegdec->context); done: - return GST_FLOW_OK; + return ret; send_packet_failed: GST_WARNING_OBJECT (ffmpegdec, "send packet failed, could not drain decoder"); @@ -2003,12 +2003,15 @@ gst_ffmpegviddec_stop (GstVideoDecoder * decoder) static GstFlowReturn gst_ffmpegviddec_finish (GstVideoDecoder * decoder) { - gst_ffmpegviddec_drain (decoder); + GstFlowReturn flow_ret; + + flow_ret = gst_ffmpegviddec_drain (decoder); + /* note that finish can and should clean up more drastically, * but drain is also invoked on e.g. packet loss in GAP handling */ gst_ffmpegviddec_flush (decoder); - return GST_FLOW_OK; + return flow_ret; } static gboolean |