From 95a3c0123f47badc6699da1085482d1da16c0c6b Mon Sep 17 00:00:00 2001 From: Benjamin Gaignard Date: Tue, 4 Mar 2025 11:04:56 +0100 Subject: [PATCH] v4l2codecs: Release sink allocator when deciding allocation All decoders have the same design pattern in decide allocation and forgot to release sink allocator before allocating a new one. Fixing the memory leak by clearing sink allocator before creating the new one. Part-of: --- subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c | 1 + subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c | 1 + subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c | 1 + .../gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c | 1 + subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c | 1 + subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c | 1 + 6 files changed, 6 insertions(+) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c index eb84153edd..29d56d4b03 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c @@ -416,6 +416,7 @@ gst_v4l2_codec_av1_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c index aedda948ae..b2fa130e1e 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c @@ -462,6 +462,7 @@ gst_v4l2_codec_h264_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c index 12866e4a04..2f38959d6e 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c @@ -490,6 +490,7 @@ gst_v4l2_codec_h265_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c index 74271e5823..478bade5db 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c @@ -384,6 +384,7 @@ gst_v4l2_codec_mpeg2_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c index c3f3ecb653..db7d544c8e 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c @@ -343,6 +343,7 @@ gst_v4l2_codec_vp8_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c index ea5394ebcd..2c837ef4c3 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c @@ -613,6 +613,7 @@ gst_v4l2_codec_vp9_dec_decide_allocation (GstVideoDecoder * decoder, g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); + g_clear_object (&self->sink_allocator); self->has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);