gst/: Remove the requirement for sub-classes to call the parent implementation of...
[platform/upstream/gstreamer.git] / gst / gsttaglist.h
1 /* GStreamer
2  * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
3  *
4  * gsttaglist.h: Header for tag support
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22
23 #ifndef __GST_TAGLIST_H__
24 #define __GST_TAGLIST_H__
25
26 #include <gst/gststructure.h>
27
28 G_BEGIN_DECLS
29
30 typedef enum {
31   GST_TAG_MERGE_UNDEFINED,
32   GST_TAG_MERGE_REPLACE_ALL,
33   GST_TAG_MERGE_REPLACE,
34   GST_TAG_MERGE_APPEND,
35   GST_TAG_MERGE_PREPEND,
36   GST_TAG_MERGE_KEEP,
37   GST_TAG_MERGE_KEEP_ALL,
38   /* add more */
39   GST_TAG_MERGE_COUNT
40 } GstTagMergeMode;
41
42 #define GST_TAG_MODE_IS_VALID(mode)     (((mode) > GST_TAG_MERGE_UNDEFINED) && ((mode) < GST_TAG_MERGE_COUNT))
43
44 typedef enum {
45   GST_TAG_FLAG_UNDEFINED,
46   GST_TAG_FLAG_META,
47   GST_TAG_FLAG_ENCODED,
48   GST_TAG_FLAG_DECODED,
49   GST_TAG_FLAG_COUNT
50 } GstTagFlag;
51
52 #define GST_TAG_FLAG_IS_VALID(flag)     (((flag) > GST_TAG_FLAG_UNDEFINED) && ((flag) < GST_TAG_FLAG_COUNT))
53
54 typedef GstStructure GstTagList;
55 #define GST_TAG_LIST(x)         ((GstTagList *) (x))
56 #define GST_IS_TAG_LIST(x)      (gst_is_tag_list (GST_TAG_LIST (x)))
57 #define GST_TYPE_TAG_LIST       (gst_tag_list_get_type ())
58
59 typedef void            (* GstTagForeachFunc)   (const GstTagList *list, const gchar *tag, gpointer user_data);
60 typedef void            (* GstTagMergeFunc)     (GValue *dest, const GValue *src);
61
62 /* initialize tagging system */
63 void            _gst_tag_initialize             (void);
64 GType           gst_tag_list_get_type           (void);
65
66 void            gst_tag_register                (const gchar *          name,
67                                                  GstTagFlag             flag,
68                                                  GType                  type,
69                                                  const gchar *          nick,
70                                                  const gchar *          blurb,
71                                                  GstTagMergeFunc        func);
72 /* some default merging functions */
73 void            gst_tag_merge_use_first         (GValue *               dest,
74                                                  const GValue *         src);
75 void            gst_tag_merge_strings_with_comma (GValue *              dest,
76                                                  const GValue *         src);
77
78 /* basic tag support */
79 gboolean        gst_tag_exists                  (const gchar *          tag);
80 GType           gst_tag_get_type                (const gchar *          tag);
81 G_CONST_RETURN gchar *
82                 gst_tag_get_nick                (const gchar *          tag);
83 G_CONST_RETURN gchar *
84                 gst_tag_get_description         (const gchar *          tag);
85 GstTagFlag      gst_tag_get_flag                (const gchar *          tag);
86 gboolean        gst_tag_is_fixed                (const gchar *          tag);
87
88 /* tag lists */
89 GstTagList *    gst_tag_list_new                (void);
90 gboolean        gst_is_tag_list                 (gconstpointer          p);
91 GstTagList *    gst_tag_list_copy               (const GstTagList *     list);
92 void            gst_tag_list_insert             (GstTagList *           into,
93                                                  const GstTagList *     from,
94                                                  GstTagMergeMode        mode);
95 GstTagList *    gst_tag_list_merge              (const GstTagList *     list1,
96                                                  const GstTagList *     list2,
97                                                  GstTagMergeMode        mode);
98 void            gst_tag_list_free               (GstTagList *           list);
99 guint           gst_tag_list_get_tag_size       (const GstTagList *     list,
100                                                  const gchar *          tag);
101 void            gst_tag_list_add                (GstTagList *           list,
102                                                  GstTagMergeMode        mode,
103                                                  const gchar *          tag,
104                                                  ...);
105 void            gst_tag_list_add_values         (GstTagList *           list,
106                                                  GstTagMergeMode        mode,
107                                                  const gchar *          tag,
108                                                  ...);
109 void            gst_tag_list_add_valist         (GstTagList *           list,
110                                                  GstTagMergeMode        mode,
111                                                  const gchar *          tag,
112                                                  va_list                var_args);
113 void            gst_tag_list_add_valist_values  (GstTagList *           list,
114                                                  GstTagMergeMode        mode,
115                                                  const gchar *          tag,
116                                                  va_list                var_args);
117 void            gst_tag_list_remove_tag         (GstTagList *           list,
118                                                  const gchar *          tag);
119 void            gst_tag_list_foreach            (GstTagList *           list,
120                                                  GstTagForeachFunc      func,
121                                                  gpointer               user_data);
122
123 G_CONST_RETURN GValue *
124                 gst_tag_list_get_value_index    (const GstTagList *     list,
125                                                  const gchar *          tag,
126                                                  guint                  index);
127 gboolean        gst_tag_list_copy_value         (GValue *               dest,
128                                                  const GstTagList *     list,
129                                                  const gchar *          tag);
130
131 /* simplifications (FIXME: do we want them?) */
132 gboolean        gst_tag_list_get_char           (const GstTagList *     list,
133                                                  const gchar *          tag,
134                                                  gchar *                value);
135 gboolean        gst_tag_list_get_char_index     (const GstTagList *     list,
136                                                  const gchar *          tag,
137                                                  guint                  index,
138                                                  gchar *                value);
139 gboolean        gst_tag_list_get_uchar          (const GstTagList *     list,
140                                                  const gchar *          tag,
141                                                  guchar *               value);
142 gboolean        gst_tag_list_get_uchar_index    (const GstTagList *     list,
143                                                  const gchar *          tag,
144                                                  guint                  index,
145                                                  guchar *               value);
146 gboolean        gst_tag_list_get_boolean        (const GstTagList *     list,
147                                                  const gchar *          tag,
148                                                  gboolean *             value);
149 gboolean        gst_tag_list_get_boolean_index  (const GstTagList *     list,
150                                                  const gchar *          tag,
151                                                  guint                  index,
152                                                  gboolean *             value);
153 gboolean        gst_tag_list_get_int            (const GstTagList *     list,
154                                                  const gchar *          tag,
155                                                  gint *                 value);
156 gboolean        gst_tag_list_get_int_index      (const GstTagList *     list,
157                                                  const gchar *          tag,
158                                                  guint                  index,
159                                                  gint *                 value);
160 gboolean        gst_tag_list_get_uint           (const GstTagList *     list,
161                                                  const gchar *          tag,
162                                                  guint *                value);
163 gboolean        gst_tag_list_get_uint_index     (const GstTagList *     list,
164                                                  const gchar *          tag,
165                                                  guint                  index,
166                                                  guint *                value);
167 gboolean        gst_tag_list_get_long           (const GstTagList *     list,
168                                                  const gchar *          tag,
169                                                  glong *                value);
170 gboolean        gst_tag_list_get_long_index     (const GstTagList *     list,
171                                                  const gchar *          tag,
172                                                  guint                  index,
173                                                  glong *                value);
174 gboolean        gst_tag_list_get_ulong          (const GstTagList *     list,
175                                                  const gchar *          tag,
176                                                  gulong *               value);
177 gboolean        gst_tag_list_get_ulong_index    (const GstTagList *     list,
178                                                  const gchar *          tag,
179                                                  guint                  index,
180                                                  gulong *               value);
181 gboolean        gst_tag_list_get_int64          (const GstTagList *     list,
182                                                  const gchar *          tag,
183                                                  gint64 *               value);
184 gboolean        gst_tag_list_get_int64_index    (const GstTagList *     list,
185                                                  const gchar *          tag,
186                                                  guint                  index,
187                                                  gint64 *               value);
188 gboolean        gst_tag_list_get_uint64         (const GstTagList *     list,
189                                                  const gchar *          tag,
190                                                  guint64 *              value);
191 gboolean        gst_tag_list_get_uint64_index   (const GstTagList *     list,
192                                                  const gchar *          tag,
193                                                  guint                  index,
194                                                  guint64 *              value);
195 gboolean        gst_tag_list_get_float          (const GstTagList *     list,
196                                                  const gchar *          tag,
197                                                  gfloat *               value);
198 gboolean        gst_tag_list_get_float_index    (const GstTagList *     list,
199                                                  const gchar *          tag,
200                                                  guint                  index,
201                                                  gfloat *               value);
202 gboolean        gst_tag_list_get_double         (const GstTagList *     list,
203                                                  const gchar *          tag,
204                                                  gdouble *              value);
205 gboolean        gst_tag_list_get_double_index   (const GstTagList *     list,
206                                                  const gchar *          tag,
207                                                  guint                  index,
208                                                  gdouble *              value);
209 gboolean        gst_tag_list_get_string         (const GstTagList *     list,
210                                                  const gchar *          tag,
211                                                  gchar **               value);
212 gboolean        gst_tag_list_get_string_index   (const GstTagList *     list,
213                                                  const gchar *          tag,
214                                                  guint                  index,
215                                                  gchar **               value);
216 gboolean        gst_tag_list_get_pointer        (const GstTagList *     list,
217                                                  const gchar *          tag,
218                                                  gpointer *             value);
219 gboolean        gst_tag_list_get_pointer_index  (const GstTagList *     list,
220                                                  const gchar *          tag,
221                                                  guint                  index,
222                                                  gpointer *             value);
223
224 /* GStreamer core tags (need to be discussed) */
225 /**
226  * GST_TAG_TITLE:
227  *
228  * commonly used title
229  */
230 #define GST_TAG_TITLE                   "title"
231 /**
232  * GST_TAG_ARTIST:
233  *
234  * person(s) responsible for the recording
235  */
236 #define GST_TAG_ARTIST                  "artist"
237 /**
238  * GST_TAG_ALBUM:
239  *
240  * album containing this data
241  */
242 #define GST_TAG_ALBUM                   "album"
243 /**
244  * GST_TAG_DATE:
245  *
246  * date the data was created (in Julian calendar days)
247  */
248 #define GST_TAG_DATE                    "date"
249 /**
250  * GST_TAG_GENRE:
251  *
252  * genre this data belongs to
253  */
254 #define GST_TAG_GENRE                   "genre"
255 /**
256  * GST_TAG_COMMENT:
257  *
258  * free text commenting the data
259  */
260 #define GST_TAG_COMMENT                 "comment"
261 /**
262  * GST_TAG_TRACK_NUMBER:
263  *
264  * track number inside a collection
265  */
266 #define GST_TAG_TRACK_NUMBER            "track-number"
267 /**
268  * GST_TAG_TRACK_COUNT:
269  *
270  * count of tracks inside collection this track belongs to
271  */
272 #define GST_TAG_TRACK_COUNT             "track-count"
273 /**
274  * GST_TAG_ALBUM_VOLUME_NUMBER:
275  *
276  * disc number inside a collection
277  */
278 #define GST_TAG_ALBUM_VOLUME_NUMBER     "album-disc-number"
279 /**
280  * GST_TAG_ALBUM_VOLUME_COUNT:
281  *
282  * count of discs inside collection this disc belongs to
283  */
284 #define GST_TAG_ALBUM_VOLUME_COUNT      "album-disc-count"
285 /**
286  * GST_TAG_LOCATION:
287  *
288  * original location of file as a URI
289  */
290 #define GST_TAG_LOCATION                "location"
291 /**
292  * GST_TAG_DESCRIPTION:
293  *
294  * short text describing the content of the data
295  */
296 #define GST_TAG_DESCRIPTION             "description"
297 /**
298  * GST_TAG_VERSION:
299  *
300  * version of this data
301  */
302 #define GST_TAG_VERSION                 "version"
303 /**
304  * GST_TAG_ISRC:
305  *
306  * International Standard Recording Code - see http://www.ifpi.org/isrc/
307  */
308 #define GST_TAG_ISRC                    "isrc"
309 /**
310  * GST_TAG_ORGANIZATION:
311  *
312  * organization
313  */
314 #define GST_TAG_ORGANIZATION            "organization"
315 /**
316  * GST_TAG_COPYRIGHT:
317  *
318  * copyright notice of the data
319  */
320 #define GST_TAG_COPYRIGHT               "copyright"
321 /**
322  * GST_TAG_CONTACT:
323  *
324  * contact information
325  */
326 #define GST_TAG_CONTACT                 "contact"
327 /**
328  * GST_TAG_LICENSE:
329  *
330  * license of data
331  */
332 #define GST_TAG_LICENSE                 "license"
333 /**
334  * GST_TAG_PERFORMER:
335  *
336  * person(s) performing
337  */
338 #define GST_TAG_PERFORMER               "performer"
339 /**
340  * GST_TAG_DURATION:
341  *
342  * length in GStreamer time units (nanoseconds)
343  */
344 #define GST_TAG_DURATION                "duration"
345 /**
346  * GST_TAG_CODEC:
347  *
348  * codec the data is stored in
349  */
350 #define GST_TAG_CODEC                   "codec"
351 /**
352  * GST_TAG_VIDEO_CODEC:
353  *
354  * codec the video data is stored in
355  */
356 #define GST_TAG_VIDEO_CODEC             "video-codec"
357 /**
358  * GST_TAG_AUDIO_CODEC:
359  *
360  * codec the audio data is stored in
361  */
362 #define GST_TAG_AUDIO_CODEC             "audio-codec"
363 /**
364  * GST_TAG_BITRATE:
365  *
366  * exact or average bitrate in bits/s
367  */
368 #define GST_TAG_BITRATE                 "bitrate"
369 /**
370  * GST_TAG_NOMINAL_BITRATE:
371  *
372  * nominal bitrate in bits/s
373  */
374 #define GST_TAG_NOMINAL_BITRATE         "nominal-bitrate"
375 /**
376  * GST_TAG_MINIMUM_BITRATE:
377  *
378  * minimum bitrate in bits/s
379  */
380 #define GST_TAG_MINIMUM_BITRATE         "minimum-bitrate"
381 /**
382  * GST_TAG_MAXIMUM_BITRATE:
383  *
384  * maximum bitrate in bits/s
385  */
386 #define GST_TAG_MAXIMUM_BITRATE         "maximum-bitrate"
387 /**
388  * GST_TAG_SERIAL:
389  *
390  * serial number of track
391  */
392 #define GST_TAG_SERIAL                  "serial"
393 /**
394  * GST_TAG_ENCODER:
395  *
396  * encoder used to encode this stream
397  */
398 #define GST_TAG_ENCODER                 "encoder"
399 /**
400  * GST_TAG_ENCODER_VERSION:
401  *
402  * version of the encoder used to encode this stream
403  */
404 #define GST_TAG_ENCODER_VERSION         "encoder-version"
405 /**
406  * GST_TAG_TRACK_GAIN:
407  *
408  * track gain in db
409  */
410 #define GST_TAG_TRACK_GAIN              "replaygain-track-gain"
411 /**
412  * GST_TAG_TRACK_PEAK:
413  *
414  * peak of the track
415  */
416 #define GST_TAG_TRACK_PEAK              "replaygain-track-peak"
417 /**
418  * GST_TAG_ALBUM_GAIN:
419  *
420  * album gain in db
421  */
422 #define GST_TAG_ALBUM_GAIN              "replaygain-album-gain"
423 /**
424  * GST_TAG_ALBUM_PEAK:
425  *
426  * peak of the album
427  */
428 #define GST_TAG_ALBUM_PEAK              "replaygain-album-peak"
429 /**
430  * GST_TAG_LANGUAGE_CODE:
431  *
432  * Language code (ISO-639-1)
433  */
434 #define GST_TAG_LANGUAGE_CODE           "language-code"
435
436 G_END_DECLS
437
438 #endif /* __GST_TAGLIST_H__ */