From 74918ab9eac380be594c3495d565c1774ccb7c3a Mon Sep 17 00:00:00 2001 From: He Junyan Date: Tue, 26 Apr 2022 01:16:06 +0800 Subject: [PATCH] av1parse: Fix a latent memory leak in colorimetry setting. Also delete the useless "have_cinfo" judgement. Part-of: --- .../gst/videoparsers/gstav1parse.c | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c index 997ba4d123..f127856f37 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c @@ -1177,29 +1177,30 @@ gst_av1_parse_handle_sequence_obu (GstAV1Parse * self, GstAV1OBU * obu) if (seq_header.color_config.color_description_present_flag) { GstVideoColorimetry cinfo; - gboolean have_cinfo = TRUE; gchar *colorimetry = NULL; - if (have_cinfo) { - if (seq_header.color_config.color_range) - cinfo.range = GST_VIDEO_COLOR_RANGE_0_255; - else - cinfo.range = GST_VIDEO_COLOR_RANGE_16_235; + if (seq_header.color_config.color_range) + cinfo.range = GST_VIDEO_COLOR_RANGE_0_255; + else + cinfo.range = GST_VIDEO_COLOR_RANGE_16_235; - cinfo.matrix = gst_video_color_matrix_from_iso - (seq_header.color_config.matrix_coefficients); - cinfo.transfer = gst_video_transfer_function_from_iso - (seq_header.color_config.transfer_characteristics); - cinfo.primaries = gst_video_color_primaries_from_iso - (seq_header.color_config.color_primaries); - colorimetry = gst_video_colorimetry_to_string (&cinfo); - } + cinfo.matrix = gst_video_color_matrix_from_iso + (seq_header.color_config.matrix_coefficients); + cinfo.transfer = gst_video_transfer_function_from_iso + (seq_header.color_config.transfer_characteristics); + cinfo.primaries = gst_video_color_primaries_from_iso + (seq_header.color_config.color_primaries); - if (g_strcmp0 (colorimetry, self->colorimetry)) { - g_clear_pointer (&self->colorimetry, g_free); + colorimetry = gst_video_colorimetry_to_string (&cinfo); + + if (g_strcmp0 (colorimetry, self->colorimetry) != 0) { + g_free (self->colorimetry); self->colorimetry = colorimetry; + colorimetry = NULL; self->update_caps = TRUE; } + + g_clear_pointer (&colorimetry, g_free); } if (self->subsampling_x != seq_header.color_config.subsampling_x) {