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;
}
Пример #2
0
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;
}
Пример #3
0
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);
}
Пример #4
0
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);

}
Пример #5
0
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 ();

}
Пример #6
0
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;
}
Пример #7
0
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);
}
Пример #8
0
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;
}
Пример #9
0
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;
}
Пример #10
0
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);
}
Пример #11
0
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;
}
Пример #13
0
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;
}