diff --git a/ChangeLog b/ChangeLog index 2d213c74eb..b77a41478c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-01-22 Thomas Vander Stichele + + * gst/gsttag.c: (_gst_tag_initialize), (gst_tag_register): + * gst/gsttag.h: + add GstTagFlag + 2004-01-20 Thomas Vander Stichele * docs/gst/gstreamer-sections.txt: diff --git a/docs/gst/tmpl/gstelement.sgml b/docs/gst/tmpl/gstelement.sgml index 25444f2963..10bef0cf5a 100644 --- a/docs/gst/tmpl/gstelement.sgml +++ b/docs/gst/tmpl/gstelement.sgml @@ -987,6 +987,8 @@ Is triggered whenever an error occured. @gstelement: the object which received the signal. @arg1: the error message @arg2: +@: +@: @: diff --git a/gst/gsttag.c b/gst/gsttag.c index 33aa8ac91c..25acc8b72b 100644 --- a/gst/gsttag.c +++ b/gst/gsttag.c @@ -41,6 +41,7 @@ typedef struct { gchar * blurb; /* translated description of type */ GstTagMergeFunc merge_func; /* functions to merge the values */ + GstTagFlag flag; /* type of tag */ } GstTagInfo; #define TAGLIST "taglist" @@ -56,147 +57,147 @@ _gst_tag_initialize (void) gst_tag_list_quark = g_quark_from_static_string (TAGLIST); __tag_mutex = g_mutex_new (); __tags = g_hash_table_new (g_direct_hash, g_direct_equal); - gst_tag_register (GST_TAG_TITLE, + gst_tag_register (GST_TAG_TITLE, GST_TAG_FLAG_META, G_TYPE_STRING, _("title"), _("commonly used title"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ARTIST, + gst_tag_register (GST_TAG_ARTIST, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist"), _("person(s) responsible for the recording"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ALBUM, + gst_tag_register (GST_TAG_ALBUM, GST_TAG_FLAG_META, G_TYPE_STRING, _("album"), _("album containing this data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DATE, + gst_tag_register (GST_TAG_DATE, GST_TAG_FLAG_META, G_TYPE_UINT, /* FIXME: own data type for dates? */ _("date"), _("date the data was created (in Julian calendar days)"), NULL); - gst_tag_register (GST_TAG_GENRE, + gst_tag_register (GST_TAG_GENRE, GST_TAG_FLAG_META, G_TYPE_STRING, _("genre"), _("genre this data belongs to"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COMMENT, + gst_tag_register (GST_TAG_COMMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("comment"), _("free text commenting the data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_TRACK_NUMBER, + gst_tag_register (GST_TAG_TRACK_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, _("track number"), _("track number inside a collection"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_TRACK_COUNT, + gst_tag_register (GST_TAG_TRACK_COUNT, GST_TAG_FLAG_META, G_TYPE_UINT, _("track count"), _("count of tracks inside collection this track belongs to"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_LOCATION, + gst_tag_register (GST_TAG_LOCATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("location"), _("original location of file as a URI"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DESCRIPTION, + gst_tag_register (GST_TAG_DESCRIPTION, GST_TAG_FLAG_META, G_TYPE_STRING, _("description"), _("short text describing the content of the data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_VERSION, + gst_tag_register (GST_TAG_VERSION, GST_TAG_FLAG_META, G_TYPE_STRING, _("version"), _("version of this data"), NULL); - gst_tag_register (GST_TAG_ISRC, + gst_tag_register (GST_TAG_ISRC, GST_TAG_FLAG_META, G_TYPE_STRING, _("ISRC"), _("International Standard Recording Code - see http://www.ifpi.org/isrc/"), NULL); - gst_tag_register (GST_TAG_ORGANIZATION, + gst_tag_register (GST_TAG_ORGANIZATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("organization"), _("organization"), /* FIXME */ gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COPYRIGHT, + gst_tag_register (GST_TAG_COPYRIGHT, GST_TAG_FLAG_META, G_TYPE_STRING, _("copyright"), _("copyright notice of the data"), NULL); - gst_tag_register (GST_TAG_CONTACT, + gst_tag_register (GST_TAG_CONTACT, GST_TAG_FLAG_META, G_TYPE_STRING, _("contact"), _("contact information"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_LICENSE, + gst_tag_register (GST_TAG_LICENSE, GST_TAG_FLAG_META, G_TYPE_STRING, _("license"), _("license of data"), NULL); - gst_tag_register (GST_TAG_PERFORMER, + gst_tag_register (GST_TAG_PERFORMER, GST_TAG_FLAG_META, G_TYPE_STRING, _("performer"), _("person(s) performing"), gst_tag_merge_strings_with_comma); gst_tag_register (GST_TAG_DURATION, - G_TYPE_UINT64, + G_TYPE_UINT64, GST_TAG_FLAG_DECODED, _("duration"), _("length in GStreamer time units (nanoseconds)"), NULL); - gst_tag_register (GST_TAG_CODEC, + gst_tag_register (GST_TAG_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("codec"), _("codec the data is stored in"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_BITRATE, + gst_tag_register (GST_TAG_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("bitrate"), _("exact or average bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_NOMINAL_BITRATE, + gst_tag_register (GST_TAG_NOMINAL_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("nominal bitrate"), _("nominal bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MINIMUM_BITRATE, + gst_tag_register (GST_TAG_MINIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("minimum bitrate"), _("minimum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MAXIMUM_BITRATE, + gst_tag_register (GST_TAG_MAXIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("maximum bitrate"), _("maximum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_ENCODER_VERSION, + gst_tag_register (GST_TAG_ENCODER_VERSION, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("encoder version"), _("version of the encoder used to encode this stream"), NULL); - gst_tag_register (GST_TAG_SERIAL, + gst_tag_register (GST_TAG_SERIAL, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("serial"), _("serial number of track"), NULL); - gst_tag_register (GST_TAG_TRACK_GAIN, + gst_tag_register (GST_TAG_TRACK_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track gain"), _("track gain in db"), NULL); - gst_tag_register (GST_TAG_TRACK_PEAK, + gst_tag_register (GST_TAG_TRACK_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track peak"), _("peak of the track"), NULL); - gst_tag_register (GST_TAG_ALBUM_GAIN, + gst_tag_register (GST_TAG_ALBUM_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album gain"), _("album gain in db"), NULL); - gst_tag_register (GST_TAG_ALBUM_PEAK, + gst_tag_register (GST_TAG_ALBUM_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album peak"), _("peak of the album"), @@ -259,6 +260,7 @@ gst_tag_lookup (GQuark entry) /** * gst_tag_register: * @name: the name or identifier string + * @flag: a flag describing the type of tag info * @type: the type this data is in * @nick: human-readable name * @blurb: a human-readable description about this tag @@ -267,13 +269,13 @@ gst_tag_lookup (GQuark entry) * Registers a new tag type for the use with GStreamer's type system. If a type * with that name is already registered, that one is used. * The old registration may have used a different type however. So don't rely - * on youre supplied values. + * on your supplied values. * If you know the type is already registered, use gst_tag_lookup instead. * This function takes ownership of all supplied variables. */ void -gst_tag_register (gchar *name, GType type, gchar *nick, gchar *blurb, - GstTagMergeFunc func) +gst_tag_register (gchar *name, GstTagFlag flag, GType type, + gchar *nick, gchar *blurb, GstTagMergeFunc func) { GQuark key; GstTagInfo *info; @@ -288,6 +290,7 @@ gst_tag_register (gchar *name, GType type, gchar *nick, gchar *blurb, g_return_if_fail (info == NULL); info = g_new (GstTagInfo, 1); + info->flag = flag; info->type = type; info->nick = nick; info->blurb = blurb; diff --git a/gst/gsttag.h b/gst/gsttag.h index ab9f3209d6..1be5984b78 100644 --- a/gst/gsttag.h +++ b/gst/gsttag.h @@ -41,6 +41,15 @@ typedef enum { } GstTagMergeMode; #define GST_TAG_MODE_IS_VALID(mode) (((mode) > GST_TAG_MERGE_UNDEFINED) && ((mode) < GST_TAG_MERGE_COUNT)) +typedef enum { + GST_TAG_FLAG_UNDEFINED, + GST_TAG_FLAG_META, + GST_TAG_FLAG_ENCODED, + GST_TAG_FLAG_DECODED, + GST_TAG_FLAG_COUNT +} GstTagFlag; +#define GST_TAG_FLAG_IS_VALID(flag) (((flag) > GST_TAG_FLAG_UNDEFINED) && ((flag) < GST_TAG_FLAG_COUNT)) + typedef GstStructure GstTagList; #define GST_TAG_LIST(x) ((GstTagList *) (x)) #define GST_IS_TAG_LIST(x) (gst_is_tag_list (GST_TAG_LIST (x))) @@ -52,6 +61,7 @@ typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); void _gst_tag_initialize (void); void gst_tag_register (gchar * name, + GstTagFlag flag, GType type, gchar * nick, gchar * blurb, diff --git a/gst/gsttaglist.c b/gst/gsttaglist.c index 33aa8ac91c..25acc8b72b 100644 --- a/gst/gsttaglist.c +++ b/gst/gsttaglist.c @@ -41,6 +41,7 @@ typedef struct { gchar * blurb; /* translated description of type */ GstTagMergeFunc merge_func; /* functions to merge the values */ + GstTagFlag flag; /* type of tag */ } GstTagInfo; #define TAGLIST "taglist" @@ -56,147 +57,147 @@ _gst_tag_initialize (void) gst_tag_list_quark = g_quark_from_static_string (TAGLIST); __tag_mutex = g_mutex_new (); __tags = g_hash_table_new (g_direct_hash, g_direct_equal); - gst_tag_register (GST_TAG_TITLE, + gst_tag_register (GST_TAG_TITLE, GST_TAG_FLAG_META, G_TYPE_STRING, _("title"), _("commonly used title"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ARTIST, + gst_tag_register (GST_TAG_ARTIST, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist"), _("person(s) responsible for the recording"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ALBUM, + gst_tag_register (GST_TAG_ALBUM, GST_TAG_FLAG_META, G_TYPE_STRING, _("album"), _("album containing this data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DATE, + gst_tag_register (GST_TAG_DATE, GST_TAG_FLAG_META, G_TYPE_UINT, /* FIXME: own data type for dates? */ _("date"), _("date the data was created (in Julian calendar days)"), NULL); - gst_tag_register (GST_TAG_GENRE, + gst_tag_register (GST_TAG_GENRE, GST_TAG_FLAG_META, G_TYPE_STRING, _("genre"), _("genre this data belongs to"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COMMENT, + gst_tag_register (GST_TAG_COMMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("comment"), _("free text commenting the data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_TRACK_NUMBER, + gst_tag_register (GST_TAG_TRACK_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, _("track number"), _("track number inside a collection"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_TRACK_COUNT, + gst_tag_register (GST_TAG_TRACK_COUNT, GST_TAG_FLAG_META, G_TYPE_UINT, _("track count"), _("count of tracks inside collection this track belongs to"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_LOCATION, + gst_tag_register (GST_TAG_LOCATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("location"), _("original location of file as a URI"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DESCRIPTION, + gst_tag_register (GST_TAG_DESCRIPTION, GST_TAG_FLAG_META, G_TYPE_STRING, _("description"), _("short text describing the content of the data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_VERSION, + gst_tag_register (GST_TAG_VERSION, GST_TAG_FLAG_META, G_TYPE_STRING, _("version"), _("version of this data"), NULL); - gst_tag_register (GST_TAG_ISRC, + gst_tag_register (GST_TAG_ISRC, GST_TAG_FLAG_META, G_TYPE_STRING, _("ISRC"), _("International Standard Recording Code - see http://www.ifpi.org/isrc/"), NULL); - gst_tag_register (GST_TAG_ORGANIZATION, + gst_tag_register (GST_TAG_ORGANIZATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("organization"), _("organization"), /* FIXME */ gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COPYRIGHT, + gst_tag_register (GST_TAG_COPYRIGHT, GST_TAG_FLAG_META, G_TYPE_STRING, _("copyright"), _("copyright notice of the data"), NULL); - gst_tag_register (GST_TAG_CONTACT, + gst_tag_register (GST_TAG_CONTACT, GST_TAG_FLAG_META, G_TYPE_STRING, _("contact"), _("contact information"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_LICENSE, + gst_tag_register (GST_TAG_LICENSE, GST_TAG_FLAG_META, G_TYPE_STRING, _("license"), _("license of data"), NULL); - gst_tag_register (GST_TAG_PERFORMER, + gst_tag_register (GST_TAG_PERFORMER, GST_TAG_FLAG_META, G_TYPE_STRING, _("performer"), _("person(s) performing"), gst_tag_merge_strings_with_comma); gst_tag_register (GST_TAG_DURATION, - G_TYPE_UINT64, + G_TYPE_UINT64, GST_TAG_FLAG_DECODED, _("duration"), _("length in GStreamer time units (nanoseconds)"), NULL); - gst_tag_register (GST_TAG_CODEC, + gst_tag_register (GST_TAG_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("codec"), _("codec the data is stored in"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_BITRATE, + gst_tag_register (GST_TAG_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("bitrate"), _("exact or average bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_NOMINAL_BITRATE, + gst_tag_register (GST_TAG_NOMINAL_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("nominal bitrate"), _("nominal bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MINIMUM_BITRATE, + gst_tag_register (GST_TAG_MINIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("minimum bitrate"), _("minimum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MAXIMUM_BITRATE, + gst_tag_register (GST_TAG_MAXIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("maximum bitrate"), _("maximum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_ENCODER_VERSION, + gst_tag_register (GST_TAG_ENCODER_VERSION, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("encoder version"), _("version of the encoder used to encode this stream"), NULL); - gst_tag_register (GST_TAG_SERIAL, + gst_tag_register (GST_TAG_SERIAL, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("serial"), _("serial number of track"), NULL); - gst_tag_register (GST_TAG_TRACK_GAIN, + gst_tag_register (GST_TAG_TRACK_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track gain"), _("track gain in db"), NULL); - gst_tag_register (GST_TAG_TRACK_PEAK, + gst_tag_register (GST_TAG_TRACK_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track peak"), _("peak of the track"), NULL); - gst_tag_register (GST_TAG_ALBUM_GAIN, + gst_tag_register (GST_TAG_ALBUM_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album gain"), _("album gain in db"), NULL); - gst_tag_register (GST_TAG_ALBUM_PEAK, + gst_tag_register (GST_TAG_ALBUM_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album peak"), _("peak of the album"), @@ -259,6 +260,7 @@ gst_tag_lookup (GQuark entry) /** * gst_tag_register: * @name: the name or identifier string + * @flag: a flag describing the type of tag info * @type: the type this data is in * @nick: human-readable name * @blurb: a human-readable description about this tag @@ -267,13 +269,13 @@ gst_tag_lookup (GQuark entry) * Registers a new tag type for the use with GStreamer's type system. If a type * with that name is already registered, that one is used. * The old registration may have used a different type however. So don't rely - * on youre supplied values. + * on your supplied values. * If you know the type is already registered, use gst_tag_lookup instead. * This function takes ownership of all supplied variables. */ void -gst_tag_register (gchar *name, GType type, gchar *nick, gchar *blurb, - GstTagMergeFunc func) +gst_tag_register (gchar *name, GstTagFlag flag, GType type, + gchar *nick, gchar *blurb, GstTagMergeFunc func) { GQuark key; GstTagInfo *info; @@ -288,6 +290,7 @@ gst_tag_register (gchar *name, GType type, gchar *nick, gchar *blurb, g_return_if_fail (info == NULL); info = g_new (GstTagInfo, 1); + info->flag = flag; info->type = type; info->nick = nick; info->blurb = blurb; diff --git a/gst/gsttaglist.h b/gst/gsttaglist.h index ab9f3209d6..1be5984b78 100644 --- a/gst/gsttaglist.h +++ b/gst/gsttaglist.h @@ -41,6 +41,15 @@ typedef enum { } GstTagMergeMode; #define GST_TAG_MODE_IS_VALID(mode) (((mode) > GST_TAG_MERGE_UNDEFINED) && ((mode) < GST_TAG_MERGE_COUNT)) +typedef enum { + GST_TAG_FLAG_UNDEFINED, + GST_TAG_FLAG_META, + GST_TAG_FLAG_ENCODED, + GST_TAG_FLAG_DECODED, + GST_TAG_FLAG_COUNT +} GstTagFlag; +#define GST_TAG_FLAG_IS_VALID(flag) (((flag) > GST_TAG_FLAG_UNDEFINED) && ((flag) < GST_TAG_FLAG_COUNT)) + typedef GstStructure GstTagList; #define GST_TAG_LIST(x) ((GstTagList *) (x)) #define GST_IS_TAG_LIST(x) (gst_is_tag_list (GST_TAG_LIST (x))) @@ -52,6 +61,7 @@ typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); void _gst_tag_initialize (void); void gst_tag_register (gchar * name, + GstTagFlag flag, GType type, gchar * nick, gchar * blurb,