diff --git a/subprojects/gst-plugins-bad/sys/va/gstvabaseenc.c b/subprojects/gst-plugins-bad/sys/va/gstvabaseenc.c index 78efc1e170..32a29b36f3 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvabaseenc.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvabaseenc.c @@ -660,9 +660,12 @@ gst_va_base_enc_handle_frame (GstVideoEncoder * venc, if (ret != GST_FLOW_OK) goto error_encode; - while (g_queue_get_length (&base->output_list) > 0) + while (ret == GST_FLOW_OK && g_queue_get_length (&base->output_list) > 0) ret = _push_out_one_buffer (base); + if (ret != GST_FLOW_OK) + goto error_push_buffer; + frame_encode = NULL; if (!base_class->reorder_frame (base, NULL, FALSE, &frame_encode)) goto error_reorder; @@ -706,6 +709,12 @@ error_encode: gst_video_encoder_finish_frame (venc, frame_encode); return ret; } +error_push_buffer: + { + GST_ELEMENT_ERROR (venc, STREAM, ENCODE, + ("Failed to push one frame."), (NULL)); + return ret; + } } static GstFlowReturn