#define TAGLIST "taglist"
static GQuark gst_tag_list_quark;
+
static GMutex *__tag_mutex;
+
static GHashTable *__tags;
#define TAG_LOCK g_mutex_lock (__tag_mutex)
_("image"), _("image related to this stream"), gst_tag_merge_use_first);
gst_tag_register (GST_TAG_PREVIEW_IMAGE, GST_TAG_FLAG_META, GST_TYPE_BUFFER,
_("preview image"), _("preview image related to this stream"), NULL);
+ gst_tag_register (GST_TAG_ATTACHMENT, GST_TAG_FLAG_META, GST_TYPE_BUFFER,
+ _("attachment"), _("file attached to this stream"),
+ gst_tag_merge_use_first);
gst_tag_register (GST_TAG_BEATS_PER_MINUTE, GST_TAG_FLAG_META, G_TYPE_DOUBLE,
_("beats per minute"), _("number of beats per minute in audio"), NULL);
gst_tag_merge_strings_with_comma (GValue * dest, const GValue * src)
{
GString *str;
+
gint i, count;
count = gst_value_list_get_size (src);
g_value_take_string (dest, str->str);
g_string_free (str, FALSE);
}
+
static GstTagInfo *
gst_tag_lookup (GQuark entry)
{
const gchar * nick, const gchar * blurb, GstTagMergeFunc func)
{
GQuark key;
+
GstTagInfo *info;
g_return_if_fail (name != NULL);
return (GST_IS_STRUCTURE (s) && s->name == gst_tag_list_quark);
}
+
typedef struct
{
GstStructure *list;
GstTagMergeMode mode;
}
GstTagCopyData;
+
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);
}
}
}
+
static gboolean
gst_tag_list_copy_foreach (GQuark tag, const GValue * value, gpointer user_data)
{
const gchar * tag, va_list var_args)
{
GstTagInfo *info;
+
GQuark quark;
+
gchar *error = NULL;
g_return_if_fail (GST_IS_TAG_LIST (list));
const gchar * tag, va_list var_args)
{
GstTagInfo *info;
+
GQuark quark;
g_return_if_fail (GST_IS_TAG_LIST (list));
gst_structure_remove_field ((GstStructure *) list, tag);
}
+
typedef struct
{
GstTagForeachFunc func;
gpointer data;
}
TagForeachData;
+
static int
structure_foreach_wrapper (GQuark field_id, const GValue * value,
gpointer user_data)