static void gst_tag_list_add_value_internal (GstStructure * list, GstTagMergeMode mode, GQuark tag, const GValue * value) { GstTagInfo *info = gst_tag_lookup (tag); const GValue *value2; g_assert (info != NULL); if (info->merge_func && (value2 = gst_structure_id_get_value (list, tag)) != NULL) { GValue dest = { 0, }; switch (mode) { case GST_TAG_MERGE_REPLACE_ALL: case GST_TAG_MERGE_REPLACE: gst_structure_id_set_value (list, tag, value); break; case GST_TAG_MERGE_PREPEND: gst_value_list_concat (&dest, value, value2); gst_structure_id_set_value (list, tag, &dest); g_value_unset (&dest); break; case GST_TAG_MERGE_APPEND: gst_value_list_concat (&dest, value2, value); gst_structure_id_set_value (list, tag, &dest); g_value_unset (&dest); break; case GST_TAG_MERGE_KEEP: case GST_TAG_MERGE_KEEP_ALL: break; default: g_assert_not_reached (); break; } } else { switch (mode) { case GST_TAG_MERGE_APPEND: case GST_TAG_MERGE_KEEP: if (gst_structure_id_get_value (list, tag) != NULL) break; /* fall through */ case GST_TAG_MERGE_REPLACE_ALL: case GST_TAG_MERGE_REPLACE: case GST_TAG_MERGE_PREPEND: gst_structure_id_set_value (list, tag, value); break; case GST_TAG_MERGE_KEEP_ALL: break; default: g_assert_not_reached (); break; } } }
static gboolean copy_func (GQuark field_id, const GValue * value, GstStructure * dest) { gst_structure_id_set_value (dest, field_id, value); return TRUE; }
static gboolean copy_fixed (GQuark field_id, const GValue * value, GstStructure * dest) { if (gst_value_is_fixed (value)) { gst_structure_id_set_value (dest, field_id, value); } return TRUE; }
gboolean add_fields_to_structure (GQuark field_id, const GValue * value, gpointer st) { GstStructure *data = GST_STRUCTURE (st); gst_structure_id_set_value (data, field_id, value); return TRUE; }
static gboolean copy_missing_fields (GQuark field_id, const GValue * value, gpointer user_data) { GstStructure *st = (GstStructure *) user_data; const GValue *val = gst_structure_id_get_value (st, field_id); if (G_UNLIKELY (val == NULL)) { gst_structure_id_set_value (st, field_id, value); } return TRUE; }