From 6cf03e31bc8cd622320c4ae78a15449336d48638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Thu, 13 Mar 2025 16:27:44 +0100 Subject: [PATCH] vulkan: fix memory leak at dynamic registering Also it cleans up a bit the code. Part-of: --- subprojects/gst-plugins-bad/ext/vulkan/vkh264dec.c | 12 ++++++------ subprojects/gst-plugins-bad/ext/vulkan/vkh265dec.c | 12 ++++++------ subprojects/gst-plugins-bad/ext/vulkan/vksink.c | 10 +++++++--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/vulkan/vkh264dec.c b/subprojects/gst-plugins-bad/ext/vulkan/vkh264dec.c index c55c60c029..8df6535e3e 100644 --- a/subprojects/gst-plugins-bad/ext/vulkan/vkh264dec.c +++ b/subprojects/gst-plugins-bad/ext/vulkan/vkh264dec.c @@ -47,7 +47,6 @@ struct CData typedef struct _GstVulkanH264Decoder GstVulkanH264Decoder; typedef struct _GstVulkanH264DecoderClass GstVulkanH264DecoderClass; -typedef struct _GstVulkanH264Decoder GstVulkanH264Decoder; typedef struct _GstVulkanH264Picture GstVulkanH264Picture; typedef struct _SPS SPS; typedef struct _PPS PPS; @@ -1356,11 +1355,9 @@ gst_vulkan_h264_decoder_class_init (gpointer g_klass, gpointer class_data) GST_VULKAN_H264_DECODER_CLASS (g_klass); struct CData *cdata = class_data; gchar *long_name; - const gchar *name, *desc; + const gchar *name; name = "Vulkan H.264 decoder"; - desc = "A H.264 video decoder based on Vulkan"; - if (cdata->description) long_name = g_strdup_printf ("%s on %s", name, cdata->description); else @@ -1369,12 +1366,11 @@ gst_vulkan_h264_decoder_class_init (gpointer g_klass, gpointer class_data) vk_h264_class->device_index = cdata->device_index; gst_element_class_set_metadata (element_class, long_name, - "Codec/Decoder/Video/Hardware", desc, + "Codec/Decoder/Video/Hardware", "A H.264 video decoder based on Vulkan", "Víctor Jáquez "); parent_class = g_type_class_peek_parent (g_klass); - gst_element_class_add_static_pad_template (element_class, &gst_vulkan_h264dec_sink_template); @@ -1410,6 +1406,10 @@ gst_vulkan_h264_decoder_class_init (gpointer g_klass, gpointer class_data) GST_DEBUG_FUNCPTR (gst_vulkan_h264_decoder_end_picture); h264decoder_class->output_picture = GST_DEBUG_FUNCPTR (gst_vulkan_h264_decoder_output_picture); + + g_free (long_name); + g_free (cdata->description); + g_free (cdata); } gboolean diff --git a/subprojects/gst-plugins-bad/ext/vulkan/vkh265dec.c b/subprojects/gst-plugins-bad/ext/vulkan/vkh265dec.c index c57cdf3c7e..226a779708 100644 --- a/subprojects/gst-plugins-bad/ext/vulkan/vkh265dec.c +++ b/subprojects/gst-plugins-bad/ext/vulkan/vkh265dec.c @@ -46,13 +46,11 @@ struct CData typedef struct _GstVulkanH265Decoder GstVulkanH265Decoder; typedef struct _GstVulkanH265DecoderClass GstVulkanH265DecoderClass; -typedef struct _GstVulkanH265Decoder GstVulkanH265Decoder; typedef struct _GstVulkanH265Picture GstVulkanH265Picture; typedef struct _VPS VPS; typedef struct _SPS SPS; typedef struct _PPS PPS; - struct _SPS { StdVideoH265SequenceParameterSet sps; @@ -1675,11 +1673,9 @@ gst_vulkan_h265_decoder_class_init (gpointer g_klass, gpointer class_data) GST_VULKAN_H265_DECODER_CLASS (g_klass); struct CData *cdata = class_data; gchar *long_name; - const gchar *name, *desc; + const gchar *name; name = "Vulkan H.265 decoder"; - desc = "A H.265 video decoder based on Vulkan"; - if (cdata->description) long_name = g_strdup_printf ("%s on %s", name, cdata->description); else @@ -1688,7 +1684,7 @@ gst_vulkan_h265_decoder_class_init (gpointer g_klass, gpointer class_data) vk_h265_class->device_index = cdata->device_index; gst_element_class_set_metadata (element_class, long_name, - "Codec/Decoder/Video/Hardware", desc, + "Codec/Decoder/Video/Hardware", "A H.265 video decoder based on Vulkan", "Víctor Jáquez "); parent_class = g_type_class_peek_parent (g_klass); @@ -1726,6 +1722,10 @@ gst_vulkan_h265_decoder_class_init (gpointer g_klass, gpointer class_data) GST_DEBUG_FUNCPTR (gst_vulkan_h265_decoder_end_picture); h265decoder_class->output_picture = GST_DEBUG_FUNCPTR (gst_vulkan_h265_decoder_output_picture); + + g_free (long_name); + g_free (cdata->description); + g_free (cdata); } gboolean diff --git a/subprojects/gst-plugins-bad/ext/vulkan/vksink.c b/subprojects/gst-plugins-bad/ext/vulkan/vksink.c index 99e0c5a582..dbf69fa96d 100644 --- a/subprojects/gst-plugins-bad/ext/vulkan/vksink.c +++ b/subprojects/gst-plugins-bad/ext/vulkan/vksink.c @@ -136,10 +136,9 @@ gst_vulkan_sink_class_init (gpointer g_klass, gpointer class_data) element_class = GST_ELEMENT_CLASS (g_klass); struct CData *cdata = class_data; gchar *long_name; - const gchar *name, *desc; + const gchar *name; name = "Vulkan Video sink"; - desc = "A videosink based on Vulkan"; if (cdata->description) long_name = g_strdup_printf ("%s on %s", name, cdata->description); @@ -167,7 +166,8 @@ gst_vulkan_sink_class_init (gpointer g_klass, gpointer class_data) GST_TYPE_VULKAN_DEVICE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, long_name, - "Sink/Video", desc, "Matthew Waters "); + "Sink/Video", "A videosink based on Vulkan", + "Matthew Waters "); parent_class = g_type_class_peek_parent (g_klass); @@ -186,6 +186,10 @@ gst_vulkan_sink_class_init (gpointer g_klass, gpointer class_data) gstvideosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_vulkan_sink_show_frame); + + g_free (long_name); + g_free (cdata->description); + g_free (cdata); } static gpointer