mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
Take offset gaps into account.
Prevents measurecollector from crashing when frame numbers are not consecutive. Fixes bug #596285.
This commit is contained in:
parent
1adfafbe2c
commit
05e059c624
1 changed files with 28 additions and 15 deletions
|
@ -135,17 +135,27 @@ gst_measure_collector_post_message (GstMeasureCollector * mc)
|
||||||
|
|
||||||
if (strcmp (mc->metric, "SSIM") == 0) {
|
if (strcmp (mc->metric, "SSIM") == 0) {
|
||||||
gfloat dresult = 0;
|
gfloat dresult = 0;
|
||||||
|
guint64 mlen;
|
||||||
g_free (mc->result);
|
g_free (mc->result);
|
||||||
mc->result = g_new0 (GValue, 1);
|
mc->result = g_new0 (GValue, 1);
|
||||||
g_value_init (mc->result, G_TYPE_FLOAT);
|
g_value_init (mc->result, G_TYPE_FLOAT);
|
||||||
|
mlen = mc->measurements->len;
|
||||||
for (i = 0; i < mc->measurements->len; i++) {
|
for (i = 0; i < mc->measurements->len; i++) {
|
||||||
const GValue *v;
|
const GValue *v;
|
||||||
GstStructure *str =
|
GstStructure *str =
|
||||||
(GstStructure *) g_ptr_array_index (mc->measurements, i);
|
(GstStructure *) g_ptr_array_index (mc->measurements, i);
|
||||||
v = gst_structure_get_value (str, "mean");
|
if (str)
|
||||||
dresult += g_value_get_float (v);
|
{
|
||||||
|
v = gst_structure_get_value (str, "mean");
|
||||||
|
dresult += g_value_get_float (v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GST_WARNING_OBJECT (mc, "No measurement info for frame %" G_GUINT64_FORMAT, i);
|
||||||
|
mlen--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g_value_set_float (mc->result, dresult / mc->measurements->len);
|
g_value_set_float (mc->result, dresult / mlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
m = gst_message_new_element (GST_OBJECT_CAST (mc),
|
m = gst_message_new_element (GST_OBJECT_CAST (mc),
|
||||||
|
@ -269,16 +279,18 @@ gst_measure_collector_save_csv (GstMeasureCollector * mc)
|
||||||
for (i = 0; i < mc->measurements->len; i++) {
|
for (i = 0; i < mc->measurements->len; i++) {
|
||||||
fprintf (file, "\n");
|
fprintf (file, "\n");
|
||||||
str = (GstStructure *) g_ptr_array_index (mc->measurements, i);
|
str = (GstStructure *) g_ptr_array_index (mc->measurements, i);
|
||||||
for (j = 0; j < gst_structure_n_fields (str); j++) {
|
if (str != NULL) {
|
||||||
const gchar *fieldname;
|
for (j = 0; j < gst_structure_n_fields (str); j++) {
|
||||||
fieldname = gst_structure_nth_field_name (str, j);
|
const gchar *fieldname;
|
||||||
if (G_LIKELY (j > 0))
|
fieldname = gst_structure_nth_field_name (str, j);
|
||||||
fprintf (file, ";");
|
if (G_LIKELY (j > 0))
|
||||||
if (G_LIKELY (g_value_transform (gst_structure_get_value (str, fieldname),
|
fprintf (file, ";");
|
||||||
&tmp)))
|
if (G_LIKELY (g_value_transform (gst_structure_get_value (str, fieldname),
|
||||||
fprintf (file, "%s", g_value_get_string (&tmp));
|
&tmp)))
|
||||||
else
|
fprintf (file, "%s", g_value_get_string (&tmp));
|
||||||
fprintf (file, "<untranslatable>");
|
else
|
||||||
|
fprintf (file, "<untranslatable>");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,8 +399,9 @@ gst_measure_collector_finalize (GObject * object)
|
||||||
GstMeasureCollector *mc = GST_MEASURE_COLLECTOR (object);
|
GstMeasureCollector *mc = GST_MEASURE_COLLECTOR (object);
|
||||||
|
|
||||||
for (i = 0; i < mc->measurements->len; i++) {
|
for (i = 0; i < mc->measurements->len; i++) {
|
||||||
gst_structure_free ((GstStructure *) g_ptr_array_index (mc->measurements,
|
if (g_ptr_array_index (mc->measurements,i) != NULL)
|
||||||
i));
|
gst_structure_free ((GstStructure *) g_ptr_array_index (mc->measurements,
|
||||||
|
i));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_ptr_array_free (mc->measurements, TRUE);
|
g_ptr_array_free (mc->measurements, TRUE);
|
||||||
|
|
Loading…
Reference in a new issue