summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungha Yang <seungha@centricular.com>2020-09-16 03:13:09 +0900
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-09-30 00:44:33 +0000
commitd9a29bf7842eac607dd63f4a36da4c9c09fb6adf (patch)
treeca15802c80a43175f6c7ebdc2abd21978a48973b
parent456be5283789f89fbb546b88d453e79ced0d5a30 (diff)
downloadgst-libav-d9a29bf7842eac607dd63f4a36da4c9c09fb6adf.tar.gz
avviddec: Don't return GST_FLOW_EOS from drain()/finish()
AVERROR_EOF means that it's fully drained, but it doesn't mean that that end of stream. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/96>
-rw-r--r--ext/libav/gstavviddec.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index d9eb178..b21c231 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -1824,6 +1824,14 @@ gst_ffmpegviddec_drain (GstVideoDecoder * decoder)
} while (got_frame && ret == GST_FLOW_OK);
avcodec_flush_buffers (ffmpegdec->context);
+ /* FFMpeg will return AVERROR_EOF if it's internal was fully drained
+ * then we are translating it to GST_FLOW_EOS. However, because this behavior
+ * is fullly internal stuff of this implementation and gstvideodecoer
+ * baseclass doesn't convert this GST_FLOW_EOS to GST_FLOW_OK,
+ * convert this flow retturn by ourselves */
+ if (ret == GST_FLOW_EOS)
+ ret = GST_FLOW_OK;
+
done:
return ret;