From 8862abd7c659347979eb5a8964462b4e805a7c42 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Thu, 20 Dec 2018 12:37:43 +0900 Subject: [PATCH] nvdec: Fix possible frame drop on EOS On eos, baseclass videoencoder call finish() vfunc instead of drain() --- sys/nvcodec/gstnvdec.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sys/nvcodec/gstnvdec.c b/sys/nvcodec/gstnvdec.c index 0586fc256f..8ef76db7e5 100644 --- a/sys/nvcodec/gstnvdec.c +++ b/sys/nvcodec/gstnvdec.c @@ -215,6 +215,7 @@ static gboolean gst_nvdec_src_query (GstVideoDecoder * decoder, GstQuery * query); static gboolean gst_nvdec_flush (GstVideoDecoder * decoder); static GstFlowReturn gst_nvdec_drain (GstVideoDecoder * decoder); +static GstFlowReturn gst_nvdec_finish (GstVideoDecoder * decoder); static GstStaticPadTemplate gst_nvdec_sink_template = GST_STATIC_PAD_TEMPLATE (GST_VIDEO_DECODER_SINK_NAME, @@ -261,6 +262,7 @@ gst_nvdec_class_init (GstNvDecClass * klass) video_decoder_class->src_query = GST_DEBUG_FUNCPTR (gst_nvdec_src_query); video_decoder_class->drain = GST_DEBUG_FUNCPTR (gst_nvdec_drain); video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_nvdec_flush); + video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_nvdec_finish); element_class->set_context = GST_DEBUG_FUNCPTR (gst_nvdec_set_context); } @@ -1010,6 +1012,14 @@ gst_nvdec_drain (GstVideoDecoder * decoder) return handle_pending_frames (nvdec); } +static GstFlowReturn +gst_nvdec_finish (GstVideoDecoder * decoder) +{ + GST_DEBUG_OBJECT (decoder, "finish"); + + return gst_nvdec_drain (decoder); +} + static gboolean gst_nvdec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) {