From 0a29654d7bb3db80582e9b793ed876903802c144 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Fri, 20 Oct 2023 12:54:44 +0530 Subject: [PATCH] svtav1enc: Don't segfault on not-negotiated Don't drain on finish if we didn't configure the encoder. Part-of: --- .../gst-plugins-bad/ext/svtav1/gstsvtav1enc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c b/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c index f796c1a111..935a25fe4c 100644 --- a/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c +++ b/subprojects/gst-plugins-bad/ext/svtav1/gstsvtav1enc.c @@ -838,6 +838,8 @@ gst_svtav1enc_send_eos (GstSvtAv1Enc * svtav1enc) input_buffer.p_buffer = NULL; input_buffer.metadata = NULL; + GST_DEBUG_OBJECT (svtav1enc, "send eos"); + ret = svt_av1_enc_send_picture (svtav1enc->svt_encoder, &input_buffer); if (ret != EB_ErrorNone) { @@ -867,6 +869,8 @@ gst_svtav1enc_dequeue_encoded_frames (GstSvtAv1Enc * svtav1enc, EbErrorType res = EB_ErrorNone; gboolean encode_at_eos = FALSE; + GST_DEBUG_OBJECT (svtav1enc, "dequeue encoded frames"); + do { GstVideoCodecFrame *frame = NULL; EbBufferHeaderType *output_buf = NULL; @@ -1049,13 +1053,17 @@ gst_svtav1enc_handle_frame (GstVideoEncoder * encoder, static GstFlowReturn gst_svtav1enc_finish (GstVideoEncoder * encoder) { + GstFlowReturn ret = GST_FLOW_OK; GstSvtAv1Enc *svtav1enc = GST_SVTAV1ENC (encoder); GST_DEBUG_OBJECT (svtav1enc, "finish"); - gst_svtav1enc_send_eos (svtav1enc); + if (svtav1enc->state) { + gst_svtav1enc_send_eos (svtav1enc); + ret = gst_svtav1enc_dequeue_encoded_frames (svtav1enc, TRUE, TRUE); + } - return gst_svtav1enc_dequeue_encoded_frames (svtav1enc, TRUE, TRUE); + return ret; } static gboolean