h264decoder: Fix GstVideoCodecFrame leak
authorSeungha Yang <seungha@centricular.com>
Mon, 20 Nov 2023 16:41:16 +0000 (01:41 +0900)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 29 Nov 2023 17:04:51 +0000 (17:04 +0000)
If current buffer has no slice data, frame should be released.
Otherwise frames will stay in decoder baseclass forever.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5733>

subprojects/gst-plugins-bad/gst-libs/gst/codecs/gsth264decoder.c

index 3d85f5f..2c90d34 100644 (file)
@@ -1870,8 +1870,16 @@ gst_h264_decoder_finish_current_picture (GstH264Decoder * self,
   GstH264DecoderClass *klass;
   GstFlowReturn flow_ret = GST_FLOW_OK;
 
-  if (!priv->current_picture)
+  if (!priv->current_picture) {
+    if (priv->current_frame) {
+      GST_DEBUG_OBJECT (self,
+          "AU buffer without slice data, releasing current frame %u",
+          priv->current_frame->system_frame_number);
+      gst_video_decoder_release_frame (GST_VIDEO_DECODER_CAST (self),
+          gst_video_codec_frame_ref (priv->current_frame));
+    }
     return;
+  }
 
   klass = GST_H264_DECODER_GET_CLASS (self);