• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GStreamer
2  * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
3  * Copyright (C) 2006-2011 Tim-Philipp Müller <tim centricular net>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 
22 #ifndef __GST_TAG_TAG_H__
23 #define __GST_TAG_TAG_H__
24 
25 #include <gst/gst.h>
26 #include <gst/tag/tag-prelude.h>
27 #include <gst/tag/gsttagdemux.h>
28 #include <gst/tag/gsttagmux.h>
29 #include <gst/tag/xmpwriter.h>
30 #include <gst/tag/tag-enumtypes.h>
31 
32 G_BEGIN_DECLS
33 
34 /* Tag names */
35 
36 /**
37  * GST_TAG_MUSICBRAINZ_TRACKID:
38  *
39  * MusicBrainz track ID
40  */
41 #define GST_TAG_MUSICBRAINZ_TRACKID	"musicbrainz-trackid"
42 /**
43  * GST_TAG_MUSICBRAINZ_ARTISTID:
44  *
45  * MusicBrainz artist ID
46  */
47 #define GST_TAG_MUSICBRAINZ_ARTISTID	"musicbrainz-artistid"
48 /**
49  * GST_TAG_MUSICBRAINZ_ALBUMID:
50  *
51  * MusicBrainz album ID
52  */
53 #define GST_TAG_MUSICBRAINZ_ALBUMID	"musicbrainz-albumid"
54 /**
55  * GST_TAG_MUSICBRAINZ_ALBUMARTISTID:
56  *
57  * MusicBrainz album artist ID
58  */
59 #define GST_TAG_MUSICBRAINZ_ALBUMARTISTID	"musicbrainz-albumartistid"
60 /**
61  * GST_TAG_MUSICBRAINZ_RELEASEGROUPID:
62  *
63  * MusicBrainz Release Group ID
64  *
65  * Since: 1.18
66  */
67 #define GST_TAG_MUSICBRAINZ_RELEASEGROUPID	"musicbrainz-releasegroupid"
68 /**
69  * GST_TAG_MUSICBRAINZ_RELEASETRACKID:
70  *
71  * MusicBrainz Release Track ID
72  *
73  * Since: 1.18
74  */
75 #define GST_TAG_MUSICBRAINZ_RELEASETRACKID	"musicbrainz-releasetrackid"
76 /**
77  * GST_TAG_MUSICBRAINZ_TRMID:
78  *
79  * MusicBrainz track TRM ID
80  */
81 #define GST_TAG_MUSICBRAINZ_TRMID	"musicbrainz-trmid"
82 
83 /**
84  * GST_TAG_ACOUSTID_ID:
85  *
86  * AcoustID Identifier
87  *
88  * Since: 1.18
89  */
90 #define GST_TAG_ACOUSTID_ID	"acoustid-id"
91 
92 /**
93  * GST_TAG_ACOUSTID_FINGERPRINT:
94  *
95  * AcoustID Fingerprint (Chromaprint)
96  *
97  * Since: 1.18
98  */
99 /*
100  * FIXME 2.0: Using "chromaprint-fingerprint" for backwards compatibility with the
101  * old custom tag from the chromaprint plugin but should change this to
102  * "acoustid-fingerprint" in 2.0 for consistency.
103 */
104 #define GST_TAG_ACOUSTID_FINGERPRINT	"chromaprint-fingerprint"
105 
106 /**
107  * GST_TAG_CMML_STREAM:
108  *
109  * Annodex CMML stream element tag
110  */
111 #define GST_TAG_CMML_STREAM "cmml-stream"
112 /**
113  * GST_TAG_CMML_HEAD:
114  *
115  * Annodex CMML head element tag
116  */
117 
118 #define GST_TAG_CMML_HEAD "cmml-head"
119 /**
120  * GST_TAG_CMML_CLIP:
121  *
122  * Annodex CMML clip element tag
123  */
124 #define GST_TAG_CMML_CLIP "cmml-clip"
125 /**
126  * GST_TAG_MUSICAL_KEY:
127  *
128  * Musical key in which the sound starts. It is represented as a string
129  * with a maximum length of three characters. The ground keys are
130  * represented with "A","B","C","D","E", "F" and "G" and halfkeys
131  * represented with "b" and "#". Minor is represented as "m" (e.g. "Dbm").
132  * Off key is represented with an "o" only.
133  * This notation might be extended in the future to support non-minor/major
134  * keys.
135  *
136  * Since: 1.2
137  */
138 #define GST_TAG_MUSICAL_KEY                   "musical-key"
139 
140 
141 /* CDDA tags */
142 
143 /**
144  * GST_TAG_CDDA_CDDB_DISCID:
145  *
146  * CDDB disc id in its short form (e.g. 'aa063d0f')
147  */
148 #define GST_TAG_CDDA_CDDB_DISCID              "discid"
149 
150 /**
151  * GST_TAG_CDDA_CDDB_DISCID_FULL:
152  *
153  * CDDB disc id including all details
154  */
155 #define GST_TAG_CDDA_CDDB_DISCID_FULL         "discid-full"
156 
157 /**
158  * GST_TAG_CDDA_MUSICBRAINZ_DISCID:
159  *
160  * Musicbrainz disc id (e.g. 'ahg7JUcfR3vCYBphSDIogOOWrr0-')
161  */
162 #define GST_TAG_CDDA_MUSICBRAINZ_DISCID       "musicbrainz-discid"
163 
164 /**
165  * GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL:
166  *
167  * Musicbrainz disc id details
168  */
169 #define GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL  "musicbrainz-discid-full"
170 
171 /**
172  * GST_TAG_CAPTURING_SHUTTER_SPEED:
173  *
174  * Shutter speed used when capturing an image, in seconds. (fraction)
175  */
176 #define GST_TAG_CAPTURING_SHUTTER_SPEED        "capturing-shutter-speed"
177 
178 /**
179  * GST_TAG_CAPTURING_FOCAL_RATIO:
180  *
181  * Focal ratio (f-number) used when capturing an image. (double)
182  *
183  * The value stored is the denominator of the focal ratio (f-number).
184  * For example, if this tag value is 2, the focal ratio is f/2.
185  */
186 #define GST_TAG_CAPTURING_FOCAL_RATIO          "capturing-focal-ratio"
187 
188 /**
189  * GST_TAG_CAPTURING_FOCAL_LENGTH:
190  *
191  * Focal length used when capturing an image, in mm. (double)
192  */
193 #define GST_TAG_CAPTURING_FOCAL_LENGTH         "capturing-focal-length"
194 
195 /**
196  * GST_TAG_CAPTURING_FOCAL_LENGTH_35_MM:
197  *
198  * 35 mm equivalent focal length used when capturing an image, in mm. (double)
199  *
200  * Since: 1.10
201  */
202 #define GST_TAG_CAPTURING_FOCAL_LENGTH_35_MM   "capturing-focal-length-35mm"
203 
204 /**
205  * GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO:
206  *
207  * Digital zoom ratio used when capturing an image. (double)
208  */
209 #define GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO   "capturing-digital-zoom-ratio"
210 
211 /**
212  * GST_TAG_CAPTURING_ISO_SPEED:
213  *
214  * ISO speed used when capturing an image. (integer)
215  */
216 #define GST_TAG_CAPTURING_ISO_SPEED           "capturing-iso-speed"
217 
218 /**
219  * GST_TAG_CAPTURING_EXPOSURE_PROGRAM:
220  *
221  * Type of exposure control used when capturing an image. (string)
222  *
223  * The allowed values are:
224  *   "undefined"
225  *   "manual"
226  *   "normal" - automatically controlled
227  *   "aperture-priority" - user selects aperture value
228  *   "shutter-priority" - user selects shutter speed
229  *   "creative" - biased towards depth of field
230  *   "action" - biased towards fast shutter speed
231  *   "portrait" - closeup, leaving background out of focus
232  *   "landscape" - landscape photos, background in focus
233  */
234 #define GST_TAG_CAPTURING_EXPOSURE_PROGRAM     "capturing-exposure-program"
235 
236 /**
237  * GST_TAG_CAPTURING_EXPOSURE_MODE:
238  *
239  * Exposure mode used when capturing an image. (string)
240  *
241  * The allowed values are:
242  *   "auto-exposure"
243  *   "manual-exposure"
244  *   "auto-bracket"
245  */
246 #define GST_TAG_CAPTURING_EXPOSURE_MODE       "capturing-exposure-mode"
247 
248 /**
249  * GST_TAG_CAPTURING_EXPOSURE_COMPENSATION:
250  *
251  * Exposure compensation using when capturing an image in EV. (double)
252  */
253 #define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation"
254 
255 /**
256  * GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE:
257  *
258  * Scene mode used when capturing an image. (string)
259  *
260  * The allowed values are:
261  *   "standard"
262  *   "landscape"
263  *   "portrait"
264  *   "night-scene"
265  */
266 #define GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE  "capturing-scene-capture-type"
267 
268 /**
269  * GST_TAG_CAPTURING_GAIN_ADJUSTMENT:
270  *
271  * Gain adjustment applied to an image. (string)
272  *
273  * The allowed values are:
274  *   "none"
275  *   "low-gain-up"
276  *   "high-gain-up"
277  *   "low-gain-down"
278  *   "high-gain-down"
279  */
280 #define GST_TAG_CAPTURING_GAIN_ADJUSTMENT     "capturing-gain-adjustment"
281 
282 /**
283  * GST_TAG_CAPTURING_WHITE_BALANCE:
284  *
285  * White balance mode used when capturing an image. (string)
286  *
287  * The allowed values are:
288  *   "auto"
289  *   "manual"
290  *   "daylight"
291  *   "cloudy"
292  *   "tungsten"
293  *   "fluorescent"
294  *   "fluorescent h" (newer daylight-calibrated fluorescents)
295  *   "flash"
296  */
297 #define GST_TAG_CAPTURING_WHITE_BALANCE       "capturing-white-balance"
298 
299 /**
300  * GST_TAG_CAPTURING_CONTRAST:
301  *
302  * Direction of contrast processing applied when capturing an image. (string)
303  *
304  * The allowed values are:
305  *  "normal"
306  *  "soft"
307  *  "hard"
308  */
309 #define GST_TAG_CAPTURING_CONTRAST            "capturing-contrast"
310 
311 /**
312  * GST_TAG_CAPTURING_SATURATION:
313  *
314  * Direction of saturation processing applied when capturing an image. (string)
315  *
316  * The allowed values are:
317  *  "normal"
318  *  "low-saturation"
319  *  "high-saturation"
320  */
321 #define GST_TAG_CAPTURING_SATURATION          "capturing-saturation"
322 
323 /**
324  * GST_TAG_CAPTURING_SHARPNESS:
325  *
326  * Direction of sharpness processing applied when capturing an image. (string)
327  *
328  * The allowed values are:
329  *  "normal"
330  *  "soft"
331  *  "hard"
332  */
333 #define GST_TAG_CAPTURING_SHARPNESS          "capturing-sharpness"
334 
335 /**
336  * GST_TAG_CAPTURING_FLASH_FIRED:
337  *
338  * If flash was fired during the capture of an image. (boolean)
339  *
340  * Note that if this tag isn't present, it should not be assumed that
341  * the flash did not fire. It should be treated as unknown.
342  */
343 #define GST_TAG_CAPTURING_FLASH_FIRED         "capturing-flash-fired"
344 
345 /**
346  * GST_TAG_CAPTURING_FLASH_MODE:
347  *
348  * The flash mode selected during the capture of an image. (string)
349  *
350  * The allowed values are:
351  *  "auto"
352  *  "always"
353  *  "never"
354  */
355 #define GST_TAG_CAPTURING_FLASH_MODE         "capturing-flash-mode"
356 
357 /**
358  * GST_TAG_CAPTURING_METERING_MODE:
359  *
360  * Defines the way a camera determines the exposure. (string)
361  *
362  * The allowed values are:
363  *   "unknown"
364  *   "average"
365  *   "center-weighted-average"
366  *   "spot"
367  *   "multi-spot"
368  *   "pattern"
369  *   "partial"
370  *   "other"
371  */
372 #define GST_TAG_CAPTURING_METERING_MODE      "capturing-metering-mode"
373 
374 /**
375  * GST_TAG_CAPTURING_SOURCE:
376  *
377  * Indicates the source of capture. The device/medium used to do the
378  * capture. (string)
379  *
380  * Allowed values are:
381  *   "dsc" (= digital still camera)
382  *   "transparent-scanner"
383  *   "reflex-scanner"
384  *   "other"
385  */
386 #define GST_TAG_CAPTURING_SOURCE             "capturing-source"
387 
388 /**
389  * GST_TAG_IMAGE_HORIZONTAL_PPI:
390  *
391  * Media (image/video) intended horizontal pixel density in ppi. (double)
392  */
393 #define GST_TAG_IMAGE_HORIZONTAL_PPI         "image-horizontal-ppi"
394 /**
395  * GST_TAG_IMAGE_VERTICAL_PPI:
396  *
397  * Media (image/video) intended vertical pixel density in ppi. (double)
398  */
399 #define GST_TAG_IMAGE_VERTICAL_PPI           "image-vertical-ppi"
400 
401 
402 /* additional information for image tags */
403 
404 /**
405  * GstTagImageType:
406  * @GST_TAG_IMAGE_TYPE_NONE                  : No image type. Can be used to
407  *      tell functions such as gst_tag_image_data_to_image_sample() that no
408  *      image type should be set.
409  * @GST_TAG_IMAGE_TYPE_UNDEFINED             : Undefined/other image type
410  * @GST_TAG_IMAGE_TYPE_FRONT_COVER           : Cover (front)
411  * @GST_TAG_IMAGE_TYPE_BACK_COVER            : Cover (back)
412  * @GST_TAG_IMAGE_TYPE_LEAFLET_PAGE          : Leaflet page
413  * @GST_TAG_IMAGE_TYPE_MEDIUM                : Medium (e.g. label side of CD)
414  * @GST_TAG_IMAGE_TYPE_LEAD_ARTIST           : Lead artist/lead performer/soloist
415  * @GST_TAG_IMAGE_TYPE_ARTIST                : Artist/performer
416  * @GST_TAG_IMAGE_TYPE_CONDUCTOR             : Conductor
417  * @GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA        : Band/orchestra
418  * @GST_TAG_IMAGE_TYPE_COMPOSER              : Composer
419  * @GST_TAG_IMAGE_TYPE_LYRICIST              : Lyricist/text writer
420  * @GST_TAG_IMAGE_TYPE_RECORDING_LOCATION    : Recording location
421  * @GST_TAG_IMAGE_TYPE_DURING_RECORDING      : During recording
422  * @GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE    : During performance
423  * @GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE         : Movie/video screen capture
424  * @GST_TAG_IMAGE_TYPE_FISH                  : A fish as funny as the ID3v2 spec
425  * @GST_TAG_IMAGE_TYPE_ILLUSTRATION          : Illustration
426  * @GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO      : Band/artist logotype
427  * @GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO : Publisher/studio logotype
428  *
429  * Type of image contained in an image tag (specified as "image-type" field in
430  * the info structure in the image's #GstSample)
431  */
432 /* Note: keep in sync with register_tag_image_type_enum() */
433 typedef enum {
434   GST_TAG_IMAGE_TYPE_NONE = -1,
435   GST_TAG_IMAGE_TYPE_UNDEFINED = 0,
436   GST_TAG_IMAGE_TYPE_FRONT_COVER,
437   GST_TAG_IMAGE_TYPE_BACK_COVER,
438   GST_TAG_IMAGE_TYPE_LEAFLET_PAGE,
439   GST_TAG_IMAGE_TYPE_MEDIUM,
440   GST_TAG_IMAGE_TYPE_LEAD_ARTIST,
441   GST_TAG_IMAGE_TYPE_ARTIST,
442   GST_TAG_IMAGE_TYPE_CONDUCTOR,
443   GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA,
444   GST_TAG_IMAGE_TYPE_COMPOSER,
445   GST_TAG_IMAGE_TYPE_LYRICIST,
446   GST_TAG_IMAGE_TYPE_RECORDING_LOCATION,
447   GST_TAG_IMAGE_TYPE_DURING_RECORDING,
448   GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE,
449   GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE,
450   GST_TAG_IMAGE_TYPE_FISH,
451   GST_TAG_IMAGE_TYPE_ILLUSTRATION,
452   GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO,
453   GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO
454 } GstTagImageType;
455 
456 /**
457  * GST_TAG_ID3V2_HEADER_SIZE:
458  *
459  * ID3V2 header size considered minimum input for some functions such as
460  * gst_tag_list_from_id3v2_tag() and gst_tag_get_id3v2_tag_size() for example.
461  */
462 #define GST_TAG_ID3V2_HEADER_SIZE            10
463 
464 /* functions for vorbis comment manipulation */
465 
466 GST_TAG_API
467 const gchar *           gst_tag_from_vorbis_tag                 (const gchar *          vorbis_tag);
468 
469 GST_TAG_API
470 const gchar *           gst_tag_to_vorbis_tag                   (const gchar *          gst_tag);
471 
472 GST_TAG_API
473 void                    gst_vorbis_tag_add                      (GstTagList *           list,
474                                                                  const gchar *          tag,
475                                                                  const gchar *          value);
476 
477 GST_TAG_API
478 GList *                 gst_tag_to_vorbis_comments              (const GstTagList *     list,
479                                                                  const gchar *          tag);
480 
481 /* functions to convert GstBuffers with vorbiscomment contents to GstTagLists and back */
482 
483 GST_TAG_API
484 GstTagList *            gst_tag_list_from_vorbiscomment         (const guint8 *         data,
485                                                                  gsize                  size,
486                                                                  const guint8 *         id_data,
487                                                                  const guint            id_data_length,
488                                                                  gchar **               vendor_string);
489 
490 GST_TAG_API
491 GstTagList *            gst_tag_list_from_vorbiscomment_buffer  (GstBuffer *            buffer,
492                                                                  const guint8 *         id_data,
493                                                                  const guint            id_data_length,
494                                                                  gchar **               vendor_string);
495 
496 GST_TAG_API
497 GstBuffer *             gst_tag_list_to_vorbiscomment_buffer    (const GstTagList *     list,
498                                                                  const guint8 *         id_data,
499                                                                  const guint            id_data_length,
500                                                                  const gchar *          vendor_string);
501 
502 /* functions for ID3 tag manipulation */
503 
504 /* FIXME 0.11: inconsistent API naming: gst_tag_list_new_from_id3v1(), gst_tag_list_from_*_buffer(),
505  * gst_tag_list_from_id3v2_tag(). Also, note gst.tag.list_xyz() namespace vs. gst.tag_list_xyz(),
506  * which is a bit confusing and possibly doesn't map too well */
507 
508 GST_TAG_API
509 guint                   gst_tag_id3_genre_count                 (void);
510 
511 GST_TAG_API
512 const gchar *           gst_tag_id3_genre_get                   (const guint            id);
513 
514 GST_TAG_API
515 GstTagList *            gst_tag_list_new_from_id3v1             (const guint8 *         data);
516 
517 GST_TAG_API
518 const gchar *           gst_tag_from_id3_tag                    (const gchar *          id3_tag);
519 
520 GST_TAG_API
521 const gchar *           gst_tag_from_id3_user_tag               (const gchar *          type,
522                                                                  const gchar *          id3_user_tag);
523 
524 GST_TAG_API
525 const gchar *           gst_tag_to_id3_tag                      (const gchar *          gst_tag);
526 
527 GST_TAG_API
528 gboolean                gst_tag_list_add_id3_image (GstTagList   * tag_list,
529                                                     const guint8 * image_data,
530                                                     guint          image_data_len,
531                                                     guint          id3_picture_type);
532 
533 GST_TAG_API
534 GstTagList *            gst_tag_list_from_id3v2_tag (GstBuffer * buffer);
535 
536 GST_TAG_API
537 guint                   gst_tag_get_id3v2_tag_size  (GstBuffer * buffer);
538 
539 /* functions to  convert GstBuffers with xmp packets contents to GstTagLists and back */
540 
541 GST_TAG_API
542 GstTagList *            gst_tag_list_from_xmp_buffer (GstBuffer *  buffer);
543 
544 GST_TAG_API
545 GstBuffer *		          gst_tag_list_to_xmp_buffer   (const GstTagList * list,
546 							                                        gboolean read_only,
547 							                                        const gchar ** schemas);
548 
549 GST_TAG_API
550 const gchar**		        gst_tag_xmp_list_schemas     (void);
551 
552 /* functions related to exif */
553 
554 GST_TAG_API
555 GstBuffer *             gst_tag_list_to_exif_buffer (const GstTagList * taglist,
556                                                      gint byte_order,
557                                                      guint32 base_offset);
558 
559 GST_TAG_API
560 GstBuffer *             gst_tag_list_to_exif_buffer_with_tiff_header (const GstTagList * taglist);
561 
562 GST_TAG_API
563 GstTagList *            gst_tag_list_from_exif_buffer (GstBuffer * buffer,
564                                                        gint byte_order,
565                                                        guint32 base_offset);
566 
567 GST_TAG_API
568 GstTagList *            gst_tag_list_from_exif_buffer_with_tiff_header (
569                                                       GstBuffer * buffer);
570 
571 /* other tag-related functions */
572 
573 GST_TAG_API
574 gboolean                gst_tag_parse_extended_comment (const gchar  * ext_comment,
575                                                         gchar       ** key,
576                                                         gchar       ** lang,
577                                                         gchar       ** value,
578                                                         gboolean       fail_if_no_key);
579 
580 GST_TAG_API
581 gchar                 * gst_tag_freeform_string_to_utf8 (const gchar  * data,
582                                                          gint           size,
583                                                          const gchar ** env_vars);
584 
585 GST_TAG_API
586 GstSample             * gst_tag_image_data_to_image_sample (const guint8   * image_data,
587                                                             guint            image_data_len,
588                                                             GstTagImageType  image_type);
589 
590 /* FIXME 0.11: get rid of this awkward register/init function, see tags.c */
591 
592 GST_TAG_API
593 void                    gst_tag_register_musicbrainz_tags (void);
594 
595 
596 /* language tag related functions */
597 
598 GST_TAG_API
599 gchar **       gst_tag_get_language_codes (void);
600 
601 GST_TAG_API
602 const gchar *  gst_tag_get_language_name (const gchar * language_code);
603 
604 GST_TAG_API
605 const gchar *  gst_tag_get_language_code_iso_639_1 (const gchar * lang_code);
606 
607 GST_TAG_API
608 const gchar *  gst_tag_get_language_code_iso_639_2B (const gchar * lang_code);
609 
610 GST_TAG_API
611 const gchar *  gst_tag_get_language_code_iso_639_2T (const gchar * lang_code);
612 
613 GST_TAG_API
614 gboolean       gst_tag_check_language_code          (const gchar * lang_code);
615 
616 /**
617  * gst_tag_get_language_code:
618  * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de")
619  *
620  * Convenience macro wrapping gst_tag_get_language_code_iso_639_1().
621  */
622 #define gst_tag_get_language_code(lang_code) \
623     gst_tag_get_language_code_iso_639_1(lang_code)
624 
625 
626 /* functions to deal with (mostly) Creative Commons licenses */
627 
628 /**
629  * GstTagLicenseFlags:
630  * @GST_TAG_LICENSE_PERMITS_REPRODUCTION: making multiple copies
631  *     is allowed
632  * @GST_TAG_LICENSE_PERMITS_DISTRIBUTION: distribution, public display
633  *     and public performance are allowed
634  * @GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS: distribution of derivative
635  *     works is allowed
636  * @GST_TAG_LICENSE_PERMITS_SHARING: commercial derivatives are allowed,
637  *     but only non-commercial distribution is allowed
638  * @GST_TAG_LICENSE_REQUIRES_NOTICE: copyright and license notices
639  *     must be kept intact
640  * @GST_TAG_LICENSE_REQUIRES_ATTRIBUTION: credit must be given to
641  *     copyright holder and/or author
642  * @GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE: derivative works must be
643  *     licensed under the same terms or compatible terms as the original work
644  * @GST_TAG_LICENSE_REQUIRES_SOURCE_CODE: source code (the preferred
645  *     form for making modifications) must be provided when exercising some
646  *     rights granted by the license
647  * @GST_TAG_LICENSE_REQUIRES_COPYLEFT: derivative and combined works
648  *     must be licensed under specified terms, similar to those of the original
649  *     work
650  * @GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT: derivative works must be
651  *     licensed under specified terms, with at least the same conditions as
652  *     the original work; combinations with the work may be licensed under
653  *     different terms
654  * @GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE: exercising rights for
655  *     commercial purposes is prohibited
656  * @GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE: use in a
657  *     non-developing country is prohibited
658  * @GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE: this license was created
659  *     by the Creative Commons project
660  * @GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE: this license was
661  *     created by the Free Software Foundation (FSF)
662  *
663  * See http://creativecommons.org/ns for more information.
664  */
665 typedef enum {
666   GST_TAG_LICENSE_PERMITS_REPRODUCTION             = (1 << 0),
667   GST_TAG_LICENSE_PERMITS_DISTRIBUTION             = (1 << 1),
668   GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS         = (1 << 2),
669   GST_TAG_LICENSE_PERMITS_SHARING                  = (1 << 3),
670 
671   GST_TAG_LICENSE_REQUIRES_NOTICE                  = (1 << 8),
672   GST_TAG_LICENSE_REQUIRES_ATTRIBUTION             = (1 << 9),
673   GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE             = (1 << 10),
674   GST_TAG_LICENSE_REQUIRES_SOURCE_CODE             = (1 << 11),
675   GST_TAG_LICENSE_REQUIRES_COPYLEFT                = (1 << 12),
676   GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT         = (1 << 13),
677 
678   GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE         = (1 << 16),
679   GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE = (1 << 17),
680 
681   GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE         = (1 << 24),
682   GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE = (1 << 25)
683 } GstTagLicenseFlags;
684 
685 GST_TAG_API
686 gchar **            gst_tag_get_licenses (void);
687 
688 GST_TAG_API
689 GstTagLicenseFlags  gst_tag_get_license_flags (const gchar * license_ref);
690 
691 GST_TAG_API
692 const gchar *       gst_tag_get_license_nick  (const gchar * license_ref);
693 
694 GST_TAG_API
695 const gchar *       gst_tag_get_license_title (const gchar * license_ref);
696 
697 GST_TAG_API
698 const gchar *       gst_tag_get_license_version (const gchar * license_ref);
699 
700 GST_TAG_API
701 const gchar *       gst_tag_get_license_description  (const gchar * license_ref);
702 
703 GST_TAG_API
704 const gchar *       gst_tag_get_license_jurisdiction (const gchar * license_ref);
705 
706 G_END_DECLS
707 
708 #endif /* __GST_TAG_TAG_H__ */
709