The basic object for tags is a GstTagList
. An element that is reading tags from a stream should
create an empty taglist and fill this with individual tags. Empty tag
lists can be created with gst_tag_list_new ()
. Then,
the element can fill the list using gst_tag_list_add ()
or gst_tag_list_add_values ()
.
Note that elements often read metadata as strings, but the
values in the taglist might not necessarily be strings - they need to be
of the type the tag was registered as (the API documentation for each
predefined tag should contain the type). Be sure to use functions like
gst_value_transform ()
to make sure that your data is of the right type.
After data reading, you can send the tags downstream with the TAG event.
When the TAG event reaches the sink, it will post the TAG message on
the pipeline's GstBus for the application to pick up.
We currently require the core to know the GType of tags before they are
being used, so all tags must be registered first. You can add new tags
to the list of known tags using gst_tag_register ()
.
If you think the tag will be useful in more cases than just your own
element, it might be a good idea to add it to gsttag.c
instead. That's up to you to decide. If you want to do it in your own
element, it's easiest to register the tag in one of your class init
functions, preferably _class_init ()
.
static void gst_my_filter_class_init (GstMyFilterClass *klass) { [..] gst_tag_register ("my_tag_name", GST_TAG_FLAG_META, G_TYPE_STRING, _("my own tag"), _("a tag that is specific to my own element"), NULL); [..] }