gboolean gst_isomp4_plugin_init (GstPlugin * plugin) { #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif /* ENABLE_NLS */ gst_pb_utils_init (); /* ensure private tag is registered */ gst_tag_register (GST_QT_DEMUX_PRIVATE_TAG, GST_TAG_FLAG_META, GST_TYPE_SAMPLE, "QT atom", "unparsed QT tag atom", gst_tag_merge_use_first); gst_tag_register (GST_QT_DEMUX_CLASSIFICATION_TAG, GST_TAG_FLAG_META, G_TYPE_STRING, GST_QT_DEMUX_CLASSIFICATION_TAG, "content classification", gst_tag_merge_use_first); if (!gst_element_register (plugin, "qtdemux", GST_RANK_PRIMARY + 1, GST_TYPE_QTDEMUX)) return FALSE; if (!gst_element_register (plugin, "qtdemux-libde265", GST_RANK_PRIMARY + 1, GST_TYPE_QTDEMUX)) return FALSE; return TRUE; }
static gboolean plugin_init (GstPlugin * plugin) { #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif /* ENABLE_NLS */ /* ensure private tag is registered */ gst_tag_register (GST_QT_DEMUX_PRIVATE_TAG, GST_TAG_FLAG_META, GST_TYPE_BUFFER, "QT atom", "unparsed QT tag atom", gst_tag_merge_use_first); gst_tag_register (GST_QT_DEMUX_CLASSIFICATION_TAG, GST_TAG_FLAG_META, G_TYPE_STRING, GST_QT_DEMUX_CLASSIFICATION_TAG, "content classification", gst_tag_merge_use_first); if (!gst_element_register (plugin, "qtdemux", GST_RANK_PRIMARY, GST_TYPE_QTDEMUX)) return FALSE; if (!gst_element_register (plugin, "rtpxqtdepay", GST_RANK_MARGINAL, GST_TYPE_RTP_XQT_DEPAY)) return FALSE; return TRUE; }
static void mxf_init (void) { gst_tag_register (GST_TAG_MXF_UMID, GST_TAG_FLAG_META, G_TYPE_STRING, "UMID", "Unique Material Identifier", NULL); gst_tag_register (GST_TAG_MXF_STRUCTURE, GST_TAG_FLAG_META, GST_TYPE_STRUCTURE, "Structure", "Structural metadata of " "the MXF file", NULL); gst_tag_register (GST_TAG_MXF_DESCRIPTIVE_METADATA_FRAMEWORK, GST_TAG_FLAG_META, GST_TYPE_STRUCTURE, "DM Framework", "Descriptive metadata framework", NULL); }
static void metadata_tags_xmp_register (void) { gst_tag_register (GST_TAG_XMP_GEO_LOCATION_COUNTRY, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_XMP_GEO_LOCATION_COUNTRY, "human readable english country name of where the media has been recorded or produced", NULL); gst_tag_register (GST_TAG_XMP_GEO_LOCATION_CITY, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_XMP_GEO_LOCATION_CITY, "human readable english city name of where the media has been recorded or produced", NULL); gst_tag_register (GST_TAG_XMP_GEO_LOCATION_SUBLOCATION, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_XMP_GEO_LOCATION_SUBLOCATION, "human readable location detail of where the media has been recorded or produced", NULL); }
void metadata_tags_register (void) { /* whole chunk tags */ gst_tag_register (GST_TAG_EXIF, GST_TAG_FLAG_META, GST_TYPE_BUFFER, GST_TAG_EXIF, "exif metadata chunk", NULL); gst_tag_register (GST_TAG_IPTC, GST_TAG_FLAG_META, GST_TYPE_BUFFER, GST_TAG_IPTC, "iptc metadata chunk", NULL); gst_tag_register (GST_TAG_XMP, GST_TAG_FLAG_META, GST_TYPE_BUFFER, GST_TAG_XMP, "xmp metadata chunk", NULL); /* tags related to some metadata */ metadata_tags_exif_register (); metadata_tags_iptc_register (); metadata_tags_xmp_register (); }
static gpointer gst_tag_register_tags_internal (gpointer unused) { #ifdef ENABLE_NLS GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE, LOCALEDIR); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif /* musicbrainz tags */ gst_tag_register (GST_TAG_MUSICBRAINZ_TRACKID, GST_TAG_FLAG_META, G_TYPE_STRING, _("track ID"), _("MusicBrainz track ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ARTISTID, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist ID"), _("MusicBrainz artist ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMID, GST_TAG_FLAG_META, G_TYPE_STRING, _("album ID"), _("MusicBrainz album ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMARTISTID, GST_TAG_FLAG_META, G_TYPE_STRING, _("album artist ID"), _("MusicBrainz album artist ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_TRMID, GST_TAG_FLAG_META, G_TYPE_STRING, _("track TRM ID"), _("MusicBrainz TRM ID"), NULL); /* CDDA tags */ gst_tag_register (GST_TAG_CDDA_CDDB_DISCID, GST_TAG_FLAG_META, G_TYPE_STRING, "discid", "CDDB discid for metadata retrieval", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_CDDB_DISCID_FULL, GST_TAG_FLAG_META, G_TYPE_STRING, "discid full", "CDDB discid for metadata retrieval (full)", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID, GST_TAG_FLAG_META, G_TYPE_STRING, "musicbrainz-discid", "Musicbrainz discid for metadata retrieval", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL, GST_TAG_FLAG_META, G_TYPE_STRING, "musicbrainz-discid-full", "Musicbrainz discid for metadata retrieval (full)", gst_tag_merge_use_first); return NULL; }
static gboolean plugin_init (GstPlugin * plugin) { GST_DEBUG_CATEGORY_INIT (id3demux_debug, "id3demux", 0, "GStreamer ID3 tag demuxer"); gst_tag_register_musicbrainz_tags (); /* ensure private tag is registered */ gst_tag_register (GST_ID3_DEMUX_TAG_ID3V2_FRAME, GST_TAG_FLAG_META, GST_TYPE_BUFFER, "ID3v2 frame", "unparsed id3v2 tag frame", gst_tag_merge_use_first); return gst_element_register (plugin, "id3demux", GST_RANK_PRIMARY, GST_TYPE_ID3DEMUX); }
static gboolean plugin_init (GstPlugin * plugin) { gboolean ret; GST_DEBUG_CATEGORY_INIT (gst_chromaprint_debug, "chromaprint", 0, "chromaprint element"); GST_INFO ("libchromaprint %s", chromaprint_get_version ()); ret = gst_element_register (plugin, "chromaprint", GST_RANK_NONE, GST_TYPE_CHROMAPRINT); if (ret) { gst_tag_register (GST_TAG_CHROMAPRINT_FINGERPRINT, GST_TAG_FLAG_META, G_TYPE_STRING, "chromaprint fingerprint", "Chromaprint fingerprint", NULL); } return ret; }
static gboolean plugin_init (GstPlugin * plugin) { gboolean ret; int major, minor, rev; GST_DEBUG_CATEGORY_INIT (gst_ofa_debug, "ofa", 0, "ofa element"); ofa_get_version (&major, &minor, &rev); GST_DEBUG ("libofa %d.%d.%d", major, minor, rev); ret = gst_element_register (plugin, "ofa", GST_RANK_NONE, GST_TYPE_OFA); if (ret) { /* TODO: get this into core */ gst_tag_register (GST_TAG_OFA_FINGERPRINT, GST_TAG_FLAG_META, G_TYPE_STRING, "ofa fingerprint", "OFA fingerprint", NULL); } return ret; }
static void metadata_tags_exif_register (void) { /* capture tags */ gst_tag_register (GST_TAG_CAPTURE_APERTURE, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_APERTURE, "Aperture (in APEX units)", NULL); /* The unit is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99. if numerator is 0xFFFFFFFF means unknown */ gst_tag_register (GST_TAG_CAPTURE_BRIGHTNESS, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_BRIGHTNESS, "Brightness (APEX from -99.99 to 99.99)", NULL); /* * 1- sRGB * 0xFFFF - Uncalibrated */ gst_tag_register (GST_TAG_CAPTURE_COLOR_SPACE, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_COLOR_SPACE, "Color Space", NULL); /* from -100 to 100 [-100, -34] - soft [-33, 33] - normal [34, 100] - hard *** exif is just 0, 1, 2 (normal, soft and hard) */ gst_tag_register (GST_TAG_CAPTURE_CONTRAST, GST_TAG_FLAG_META, G_TYPE_INT, GST_TAG_CAPTURE_CONTRAST, "Contrast", NULL); /* * 0- Normal process * 1- Custom process */ gst_tag_register (GST_TAG_CAPTURE_CUSTOM_RENDERED, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_CUSTOM_RENDERED, "Indicates the use of special processing on image data", NULL); /* if Zero ZOOM not used */ gst_tag_register (GST_TAG_CAPTURE_DIGITAL_ZOOM, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_DIGITAL_ZOOM, "Digital zoom ratio", NULL); /* * 0 - Auto exposure * 1 - Manual exposure * 2 - Auto bracket (the camera shoots a series of frames of the same scene * at different exposure settings) */ gst_tag_register (GST_TAG_CAPTURE_EXPOSURE_MODE, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_EXPOSURE_MODE, "Exposure Mode", NULL); /* 0 - not defined 1- Manual 2- Normal program 3- Aperture priority 4- Shutter priority 5- Creative program (biased toward death of field) 6- Action program (biased toward fast shutter speed) 7- Portrait mode (for closeup photos with the background out of focus) 8- Landscape mode (for landscape photos with the background in focus) *** exif is until here *** 9- Night 10- Back-light 11- Spotlight 12- Snow 13- Beach */ gst_tag_register (GST_TAG_CAPTURE_EXPOSURE_PROGRAM, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_EXPOSURE_PROGRAM, "Class of program used for exposure", NULL); gst_tag_register (GST_TAG_CAPTURE_EXPOSURE_TIME, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_EXPOSURE_TIME, "Exposure time in seconds", NULL); /* * bits (76543210) indicating the flash status: * 0- Flash firing * 0- Flash did not fire * 1- Flash fired * 1,2- Flash return * 00- No strobe return detection function * 01- reserved * 10- Strobe return light not detected * 11- Strobe return light detected. * 3,4- Flash mode * 00- unknown * 01- Compulsory flash firing * 10- Compulsory flash suppression * 11- Auto mode * 5- if flash function is present * 0- Flash function present * 1- No flash function * 6- Red-eye mode * 0- No red-eye reduction mode or unknown * 1- Red-eye reduction supported * So, we have the following possible values: * * 0000.H = Flash did not fire. * 0001.H = Flash fired. * 0005.H = Strobe return light not detected. * 0007.H = Strobe return light detected. * 0009.H = Flash fired, compulsory flash mode * 000D.H = Flash fired, compulsory flash mode, return light not detected * 000F.H = Flash fired, compulsory flash mode, return light detected * 0010.H = Flash did not fire, compulsory flash mode * 0018.H = Flash did not fire, auto mode * 0019.H = Flash fired, auto mode * 001D.H = Flash fired, auto mode, return light not detected * 001F.H = Flash fired, auto mode, return light detected * 0020.H = No flash function * 0041.H = Flash fired, red-eye reduction mode * 0045.H = Flash fired, red-eye reduction mode, return light not detected * 0047.H = Flash fired, red-eye reduction mode, return light detected * 0049.H = Flash fired, compulsory flash mode, red-eye reduction mode * 004D.H = Flash fired, compulsory flash mode, red-eye reduction mode, * return light not detected * 004F.H = Flash fired, compulsory flash mode, red-eye reduction mode, * return light detected * 0059.H = Flash fired, auto mode, red-eye reduction mode * 005D.H = Flash fired, auto mode, return light not detected, * red-eye reduction mode * 005F.H = Flash fired, auto mode, return light detected, * red-eye reduction mode * Other = reserved */ gst_tag_register (GST_TAG_CAPTURE_FLASH, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_FLASH, "Flash status", NULL); gst_tag_register (GST_TAG_CAPTURE_FNUMBER, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_FNUMBER, "F number (focal ratio)", NULL); gst_tag_register (GST_TAG_CAPTURE_FOCAL_LEN, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_FOCAL_LEN, "Focal length of lens used to take image. Unit is millimeter", NULL); /* 0- None 1- Low gain up 2- High gain up 3- Low gain down 4- High gain down */ gst_tag_register (GST_TAG_CAPTURE_GAIN, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_GAIN, "", NULL); gst_tag_register (GST_TAG_CAPTURE_ISO_SPEED_RATINGS, GST_TAG_FLAG_META, G_TYPE_INT, GST_TAG_CAPTURE_ISO_SPEED_RATINGS, "ISO Speed and ISO Latitude as specified in ISO 12232", NULL); /* 0- unknown (default) 1- Daylight 2- Fluorescent 3- Tungsten (incandescent light) 4- Flash 9- Fine weather 10- Cloudy weather 11- Shade 12- Daylight fluorescent (D 5700 %G–%@ 7100K) 13- Day white fluorescent (N 4600 %G–%@ 5400K) 14- Cool white fluorescent (W 3900 %G–%@ 4500K) 15- White fluorescent (WW 3200 %G–%@ 3700K) 17- Standard light A 18- Standard light B 19- Standard light C 20- D55 21- D65 22- D75 23- D50 24- ISO studio tungsten 255- other light source Other = reserved */ gst_tag_register (GST_TAG_CAPTURE_LIGHT_SOURCE, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_LIGHT_SOURCE, "The kind of light source.", NULL); /* * The relation of the '0th row' and '0th column' to visual position: * 1- top-left * 2- top-right * 3- bottom-right * 4- bottom-left * 5- left-top * 6- right-top * 7- right-bottom * 8- left-bottom */ gst_tag_register (GST_TAG_CAPTURE_ORIENTATION, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_ORIENTATION, "The orientation of the camera.", NULL); /* from -100 to 100 [-100, -34] - low [-33, 33] - normal [34, 100] - high *** exif is just 0, 1, 2 (normal, low and high) */ gst_tag_register (GST_TAG_CAPTURE_SATURATION, GST_TAG_FLAG_META, G_TYPE_INT, GST_TAG_CAPTURE_SATURATION, "The saturation", NULL); /* * 0 - Standard * 1 - Landscape * 2 - Portrait * 3 - Night scene */ gst_tag_register (GST_TAG_CAPTURE_SCENE_CAPTURE_TYPE, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_SCENE_CAPTURE_TYPE, "Scene Type", NULL); gst_tag_register (GST_TAG_CAPTURE_SHUTTER_SPEED, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_CAPTURE_SHUTTER_SPEED, "Shutter speed (APEX)", NULL); /* 0- Auto 1- Off *** exif is until here *** 2- Sunlight 3- Cloudy 4- Shade 5- Tungsten 6- Fluorescent 7- Incandescent 8- Flash 9- Horizon (sun on the horizon) */ gst_tag_register (GST_TAG_CAPTURE_WHITE_BALANCE, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_CAPTURE_WHITE_BALANCE, "White balance mode", NULL); /* generic tags */ gst_tag_register (GST_TAG_CREATOR_TOOL, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_CREATOR_TOOL, "The name of the first known tool used to create the resource." " Or firmware or driver version of device", NULL); /* date and time tags */ /* formated as subset of ISO RFC 8601 as described in * http://www.w3.org/TR/1998/NOTE-datetime-19980827 * which is: * YYYY * YYYY-MM * YYYY-MM-DD * YYYY-MM-DDThh:mmTZD * YYYY-MM-DDThh:mm:ssTZD * YYYY-MM-DDThh:mm:ss.sTZD * where: * YYYY = four-digit year * MM = two-digit month (01=January) * DD = two-digit day of month (01 through 31) * hh = two digits of hour (00 through 23) * mm = two digits of minute (00 through 59) * ss = two digits of second (00 through 59) * s = one or more digits representing a decimal fraction of a second * TZD = time zone designator (Z or +hh:mm or -hh:mm) */ gst_tag_register (GST_TAG_DATE_TIME_DIGITIZED, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_DATE_TIME_DIGITIZED, "Date/Time of image digitized", NULL); gst_tag_register (GST_TAG_DATE_TIME_MODIFIED, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_DATE_TIME_MODIFIED, "Date/Time of image was last modified", NULL); gst_tag_register (GST_TAG_DATE_TIME_ORIGINAL, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_DATE_TIME_ORIGINAL, "Date/Time of original image taken", NULL); /* devices tags */ gst_tag_register (GST_TAG_DEVICE_MAKE, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_DEVICE_MAKE, "The manufacturer of the recording equipment", NULL); gst_tag_register (GST_TAG_DEVICE_MODEL, GST_TAG_FLAG_META, G_TYPE_STRING, GST_TAG_DEVICE_MODEL, "The model name or model number of the equipment", NULL); /* exif specific tags */ gst_tag_register (GST_TAG_EXIF_MAKER_NOTE, GST_TAG_FLAG_META, GST_TYPE_BUFFER, GST_TAG_EXIF_MAKER_NOTE, "Camera private data", NULL); /* image tags */ gst_tag_register (GST_TAG_IMAGE_HEIGHT, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_IMAGE_HEIGHT, "Image height in pixels", NULL); gst_tag_register (GST_TAG_IMAGE_WIDTH, GST_TAG_FLAG_META, G_TYPE_UINT, GST_TAG_IMAGE_WIDTH, "Image width in pixels", NULL); gst_tag_register (GST_TAG_IMAGE_XRESOLUTION, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_IMAGE_XRESOLUTION, "Horizontal resolution in pixels per inch", NULL); gst_tag_register (GST_TAG_IMAGE_YRESOLUTION, GST_TAG_FLAG_META, GST_TYPE_FRACTION, GST_TAG_IMAGE_YRESOLUTION, "Vertical resolution in pixels per inch", NULL); }
EXPORT_C #endif void _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_FLAG_META, G_TYPE_STRING, _("title"), _("commonly used title"), gst_tag_merge_strings_with_comma); gst_tag_register (GST_TAG_TITLE_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("title sortname"), _("commonly used title for sorting purposes"), NULL); 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_ARTIST_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist sortname"), _("person(s) responsible for the recording for sorting purposes"), NULL); 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_ALBUM_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("album sortname"), _("album containing this data for sorting purposes"), NULL); gst_tag_register (GST_TAG_DATE, GST_TAG_FLAG_META, GST_TYPE_DATE, _("date"), _("date the data was created (as a GDate structure)"), NULL); 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_FLAG_META, G_TYPE_STRING, _("comment"), _("free text commenting the data"), gst_tag_merge_use_first); gst_tag_register (GST_TAG_EXTENDED_COMMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("extended comment"), _("free text commenting the data in key=value or key[en]=comment form"), gst_tag_merge_use_first); 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_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_ALBUM_VOLUME_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, _("disc number"), _("disc number inside a collection"), gst_tag_merge_use_first); gst_tag_register (GST_TAG_ALBUM_VOLUME_COUNT, GST_TAG_FLAG_META, G_TYPE_UINT, _("disc count"), _("count of discs inside collection this disc belongs to"), gst_tag_merge_use_first); 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_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_FLAG_META, G_TYPE_STRING, _("version"), _("version of this data"), NULL); 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_FLAG_META, G_TYPE_STRING, _("organization"), _("organization"), /* FIXME */ gst_tag_merge_strings_with_comma); 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_COPYRIGHT_URI, GST_TAG_FLAG_META, G_TYPE_STRING, _("copyright uri"), _("URI to the copyright notice of the data"), NULL); 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_FLAG_META, G_TYPE_STRING, _("license"), _("license of data"), NULL); gst_tag_register (GST_TAG_LICENSE_URI, GST_TAG_FLAG_META, G_TYPE_STRING, _("license uri"), _("URI to the license of the data"), NULL); 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_COMPOSER, GST_TAG_FLAG_META, G_TYPE_STRING, _("composer"), _("person(s) who composed the recording"), gst_tag_merge_strings_with_comma); gst_tag_register (GST_TAG_DURATION, GST_TAG_FLAG_DECODED, G_TYPE_UINT64, _("duration"), _("length in GStreamer time units (nanoseconds)"), NULL); 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_VIDEO_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("video codec"), _("codec the video data is stored in"), NULL); gst_tag_register (GST_TAG_AUDIO_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("audio codec"), _("codec the audio data is stored in"), NULL); 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_FLAG_ENCODED, G_TYPE_UINT, _("nominal bitrate"), _("nominal bitrate in bits/s"), NULL); 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_FLAG_ENCODED, G_TYPE_UINT, _("maximum bitrate"), _("maximum bitrate in bits/s"), NULL); gst_tag_register (GST_TAG_ENCODER, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("encoder"), _("encoder used to encode this stream"), NULL); 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_FLAG_ENCODED, G_TYPE_UINT, _("serial"), _("serial number of track"), NULL); 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_FLAG_META, G_TYPE_DOUBLE, _("replaygain track peak"), _("peak of the track"), NULL); 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_FLAG_META, G_TYPE_DOUBLE, _("replaygain album peak"), _("peak of the album"), NULL); gst_tag_register (GST_TAG_REFERENCE_LEVEL, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain reference level"), _("reference level of track and album gain values"), NULL); gst_tag_register (GST_TAG_LANGUAGE_CODE, GST_TAG_FLAG_META, G_TYPE_STRING, _("language code"), _("language code for this stream, conforming to ISO-639-1"), NULL); gst_tag_register (GST_TAG_IMAGE, GST_TAG_FLAG_META, GST_TYPE_BUFFER, _("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_BEATS_PER_MINUTE, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("beats per minute"), _("number of beats per minute in audio"), NULL); }
static gboolean flv_metadata_value_handler(FlvScriptDataReader* reader, gchar* value_name, gint value_type, void* param) { gdouble double_value; guint8 boolean_value; gchar* string_value; gboolean result = TRUE; FlvMetadata* metadata = (FlvMetadata*)param; switch (value_type) { case FLV_SCRIPT_DATA_TYPE_DOUBLE: result = flv_script_data_read_double(reader, &double_value); if (!result) break; if (strcmp(value_name, "duration") == 0) { metadata->duration = (GstClockTime)(double_value * GST_SECOND); gst_tag_list_add (metadata->tag_list, GST_TAG_MERGE_REPLACE, GST_TAG_DURATION, metadata->duration, NULL); } else if (strcmp(value_name, "filesize") == 0) { metadata->file_size = (gint)double_value; } else if (strcmp(value_name, "videocodecid") == 0) { metadata->video_codec_id = (gint)double_value; } else if (strcmp(value_name, "videodatarate") == 0) { metadata->video_data_rate = double_value; } else if (strcmp(value_name, "width") == 0) { metadata->width = (gint)double_value; } else if (strcmp(value_name, "height") == 0) { metadata->height = (gint)double_value; } else if (strcmp(value_name, "AspectRatioX") == 0) { metadata->par_x = (gint)double_value; } else if (strcmp(value_name, "AspectRatioY") == 0) { metadata->par_y = (gint)double_value; } else if (strcmp(value_name, "framerate") == 0) { metadata->framerate = double_value; } else if (strcmp(value_name, "audiocodecid") == 0) { metadata->audio_codec_id = (gint)double_value; } else if (strcmp(value_name, "audiosamplesize") == 0) { metadata->audio_sample_size = (gint)double_value; } break; case FLV_SCRIPT_DATA_TYPE_BOOL: result = flv_script_data_read_ui8(reader, &boolean_value); if (!result) break; if (strcmp(value_name, "canSeekToEnd") == 0) { metadata->can_seek_to_end = boolean_value; } else if (strcmp(value_name, "stereo") == 0) { metadata->is_stereo = boolean_value; } break; case FLV_SCRIPT_DATA_TYPE_STRING: case FLV_SCRIPT_DATA_TYPE_LONG_STRING: result = flv_script_data_read_string(reader, &string_value, value_type == FLV_SCRIPT_DATA_TYPE_LONG_STRING); if (!result) break; // Register the tag if needed so it shows up if (!gst_tag_exists(value_name)) { gst_tag_register(value_name, GST_TAG_FLAG_META, G_TYPE_STRING, value_name, "FLV Metadata Tag", NULL); } gst_tag_list_add(metadata->tag_list, GST_TAG_MERGE_REPLACE, value_name, string_value, NULL); g_free(string_value); break; case FLV_SCRIPT_DATA_TYPE_OBJECT: // Only read the keyframe metadata once if ((strcmp(value_name, "keyframes") == 0) && (metadata->keyframes == NULL)) { result &= flv_script_data_read_object(reader, flv_metadata_keyframe_handler, param); } else { result &= flv_script_data_read_object(reader, flv_metadata_skip_handler, param); } break; case FLV_SCRIPT_DATA_TYPE_MOVIE_CLIP: // Per AMF version 0: "This type is not supported and is reserved for future use." result = FALSE; break; case FLV_SCRIPT_DATA_TYPE_NULL: case FLV_SCRIPT_DATA_TYPE_UNDEFINED: // Nothing follows break; case FLV_SCRIPT_DATA_TYPE_REFERENCE: // U16, two byte index follows // this is just an index to some other object in this script tag, we can safely ignore this reader->position += 2; break; case FLV_SCRIPT_DATA_TYPE_ECMA: result &= flv_script_data_read_ecma(reader, flv_metadata_skip_handler, param); break; case FLV_SCRIPT_DATA_TYPE_TERMINATOR: /* Just return true for ECMA terminator */ break; case FLV_SCRIPT_DATA_TYPE_STRICT: result &= flv_script_data_read_strict_array(reader, flv_metadata_skip_handler, param); break; case FLV_SCRIPT_DATA_TYPE_DATE: // Skip date value (64 bits milliseconds + 16 bits time zone == 80 bits == 10 bytes) reader->position += 10; break; default: /* Non-handled type */ result = FALSE; break; } return result; }
static gpointer gst_tag_register_tags_internal (gpointer unused) { #ifdef ENABLE_NLS GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE, LOCALEDIR); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif /* musicbrainz tags */ gst_tag_register (GST_TAG_MUSICBRAINZ_TRACKID, GST_TAG_FLAG_META, G_TYPE_STRING, _("track ID"), _("MusicBrainz track ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ARTISTID, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist ID"), _("MusicBrainz artist ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMID, GST_TAG_FLAG_META, G_TYPE_STRING, _("album ID"), _("MusicBrainz album ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMARTISTID, GST_TAG_FLAG_META, G_TYPE_STRING, _("album artist ID"), _("MusicBrainz album artist ID"), NULL); gst_tag_register (GST_TAG_MUSICBRAINZ_TRMID, GST_TAG_FLAG_META, G_TYPE_STRING, _("track TRM ID"), _("MusicBrainz TRM ID"), NULL); /* CDDA tags */ gst_tag_register (GST_TAG_CDDA_CDDB_DISCID, GST_TAG_FLAG_META, G_TYPE_STRING, "discid", "CDDB discid for metadata retrieval", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_CDDB_DISCID_FULL, GST_TAG_FLAG_META, G_TYPE_STRING, "discid full", "CDDB discid for metadata retrieval (full)", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID, GST_TAG_FLAG_META, G_TYPE_STRING, "musicbrainz-discid", "Musicbrainz discid for metadata retrieval", gst_tag_merge_use_first); gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL, GST_TAG_FLAG_META, G_TYPE_STRING, "musicbrainz-discid-full", "Musicbrainz discid for metadata retrieval (full)", gst_tag_merge_use_first); /* photography tags */ gst_tag_register (GST_TAG_CAPTURING_SHUTTER_SPEED, GST_TAG_FLAG_META, GST_TYPE_FRACTION, _("capturing shutter speed"), _("Shutter speed used when capturing an image, in seconds"), NULL); gst_tag_register (GST_TAG_CAPTURING_FOCAL_RATIO, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("capturing focal ratio"), _("Focal ratio (f-number) used when capturing the image"), NULL); gst_tag_register (GST_TAG_CAPTURING_FOCAL_LENGTH, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("capturing focal length"), _("Focal length of the lens used capturing the image, in mm"), NULL); gst_tag_register (GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("capturing digital zoom ratio"), _("Digital zoom ratio used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_ISO_SPEED, GST_TAG_FLAG_META, G_TYPE_INT, _("capturing iso speed"), _("The ISO speed used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing exposure program"), _("The exposure program used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_MODE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing exposure mode"), _("The exposure mode used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("capturing exposure compensation"), _("The exposure compensation used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing scene capture type"), _("The scene capture mode used when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing gain adjustment"), _("The overall gain adjustment applied on an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_WHITE_BALANCE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing white balance"), _("The white balance mode set when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_CONTRAST, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing contrast"), _("The direction of contrast processing applied " "when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_SATURATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing saturation"), _("The direction of saturation processing applied when " "capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_SHARPNESS, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing sharpness"), _("The direction of sharpness processing applied " "when capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_FLASH_FIRED, GST_TAG_FLAG_META, G_TYPE_BOOLEAN, _("capturing flash fired"), _("If the flash fired while capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_FLASH_MODE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing flash mode"), _("The selected flash mode while capturing an image"), NULL); gst_tag_register (GST_TAG_CAPTURING_METERING_MODE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing metering mode"), _("The metering mode used while determining exposure for capturing an" " image"), NULL); gst_tag_register (GST_TAG_CAPTURING_SOURCE, GST_TAG_FLAG_META, G_TYPE_STRING, _("capturing source"), _("The source or type of device used for the capture"), NULL); gst_tag_register (GST_TAG_IMAGE_HORIZONTAL_PPI, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("image horizontal ppi"), _("Media (image/video) intended horizontal pixel density in ppi"), NULL); gst_tag_register (GST_TAG_IMAGE_VERTICAL_PPI, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("image vertical ppi"), _("Media (image/video) intended vertical pixel density in ppi"), NULL); return NULL; }