formatter: Plug lists of TimedValue leak

This commit is contained in:
Thibault Saunier 2019-07-12 16:15:35 -04:00
parent 2c9cbc6d06
commit 955d177dd6
3 changed files with 12 additions and 8 deletions

View file

@ -1048,6 +1048,7 @@ ges_base_xml_formatter_add_control_binding (GESBaseXmlFormatter * self,
if (priv->state != STATE_LOADING_CLIPS) {
GST_DEBUG_OBJECT (self, "Not loading control bindings in %s state.",
loading_state_name (priv->state));
g_slist_free_full (timed_values, g_free);
return;
}
@ -1072,6 +1073,7 @@ ges_base_xml_formatter_add_control_binding (GESBaseXmlFormatter * self,
gst_timed_value_control_source_set_from_list (GST_TIMED_VALUE_CONTROL_SOURCE
(source), timed_values);
g_slist_free_full (timed_values, g_free);
} else
GST_WARNING ("This interpolation type is not supported\n");
}

View file

@ -675,7 +675,7 @@ _parse_binding (GMarkupParseContext * context, const gchar * element_name,
if (strlen (pair)) {
GstTimedValue *value;
value = g_slice_new (GstTimedValue);
value = g_new0 (GstTimedValue, 1);
value_pair = g_strsplit (pair, ":", 0);
value->timestamp = g_ascii_strtoull (value_pair[0], NULL, 10);
value->value = g_ascii_strtod (value_pair[1], NULL);
@ -1425,6 +1425,7 @@ _save_keyframes (GString * str, GESTrackElement * trackelement, gint index,
":%s ", value->timestamp, g_ascii_dtostr (strbuf,
G_ASCII_DTOSTR_BUF_SIZE, value->value)), depth);
}
g_list_free (timed_values);
append_escaped (str, g_markup_printf_escaped ("'/>\n"), depth);
} else
GST_DEBUG ("control source not in [interpolation]");

View file

@ -386,7 +386,7 @@ _check_properties (GESTimeline * timeline)
if (GES_IS_EFFECT (element)) {
GstControlBinding *binding;
GstControlSource *source;
GList *timed_values;
GList *timed_values, *tmpvalue;
GstTimedValue *value;
binding =
@ -397,20 +397,21 @@ _check_properties (GESTimeline * timeline)
fail_unless (source != NULL);
/* Now check keyframe position */
timed_values =
tmpvalue = timed_values =
gst_timed_value_control_source_get_all
(GST_TIMED_VALUE_CONTROL_SOURCE (source));
value = timed_values->data;
value = tmpvalue->data;
fail_unless (value->value == 0.);
fail_unless (value->timestamp == 0 * GST_SECOND);
timed_values = timed_values->next;
value = timed_values->data;
tmpvalue = tmpvalue->next;
value = tmpvalue->data;
fail_unless (value->value == 0.);
fail_unless (value->timestamp == 5 * GST_SECOND);
timed_values = timed_values->next;
value = timed_values->data;
tmpvalue = tmpvalue->next;
value = tmpvalue->data;
fail_unless (value->value == 1.);
fail_unless (value->timestamp == 10 * GST_SECOND);
g_list_free (timed_values);
}
/* Checking children properties */
else if (GES_IS_VIDEO_SOURCE (element)) {