static void xmms_asf_get_mediainfo (xmms_xform_t *xform) { xmms_asf_data_t *data; asf_metadata_t *metadata; uint64_t tmp; gint i; g_return_if_fail (xform); data = xmms_xform_private_data_get (xform); g_return_if_fail (data); if ((tmp = asf_get_duration (data->file)) > 0) { xmms_xform_metadata_set_int (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_DURATION, tmp/10000); } if ((tmp = asf_get_max_bitrate (data->file)) > 0) { xmms_xform_metadata_set_int (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_BITRATE, tmp); } metadata = asf_header_get_metadata (data->file); if (!metadata) { XMMS_DBG ("No metadata object found in the file"); return; } if (metadata->title && metadata->title[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_TITLE, metadata->title); } if (metadata->artist && metadata->artist[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_ARTIST, metadata->artist); } if (metadata->description && metadata->description[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_COMMENT, metadata->description); } for (i = 0; i < metadata->extended_count; i++) { const char *key, *value; guint16 length; key = metadata->extended[i].key; value = metadata->extended[i].value; length = metadata->extended[i].length; if (!xmms_xform_metadata_mapper_match (xform, key, value, length)) { XMMS_DBG ("Unhandled tag '%s' = '%s'", key, value); } } asf_metadata_destroy (metadata); }
static void xmms_asf_get_mediainfo (xmms_xform_t *xform) { xmms_asf_data_t *data; asf_metadata_t *metadata; uint64_t tmp; gchar *track = NULL; gint i; g_return_if_fail (xform); data = xmms_xform_private_data_get (xform); g_return_if_fail (data); if ((tmp = asf_get_duration (data->file)) > 0) { xmms_xform_metadata_set_int (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_DURATION, tmp/10000); } if ((tmp = asf_get_max_bitrate (data->file)) > 0) { xmms_xform_metadata_set_int (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_BITRATE, tmp); } metadata = asf_header_get_metadata (data->file); if (!metadata) { XMMS_DBG ("No metadata object found in the file"); return; } if (metadata->title && metadata->title[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_TITLE, metadata->title); } if (metadata->artist && metadata->artist[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_ARTIST, metadata->artist); } if (metadata->description && metadata->description[0]) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_COMMENT, metadata->description); } for (i=0; i<metadata->extended_count; i++) { char *key, *value; key = metadata->extended[i].key; value = metadata->extended[i].value; if (key == NULL || value == NULL || !strlen (value)) { continue; } else if (!strcmp (key, "WM/AlbumTitle")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_ALBUM, value); } else if (!strcmp (key, "WM/Year")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_YEAR, value); } else if (!strcmp (key, "WM/Genre")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_GENRE, value); } else if ((!track && !strcmp (key, "WM/Track")) || !strcmp (key, "WM/TrackNumber")) { /* WM/TrackNumber overrides WM/Track value as specified in the Microsoft * documentation at http://msdn2.microsoft.com/en-us/library/aa392014.aspx */ track = value; } else if (!strcmp (key, "MusicBrainz/Album Id")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_ALBUM_ID, value); } else if (!strcmp (key, "MusicBrainz/Artist Id")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_ARTIST_ID, value); } else if (!strcmp (key, "MusicBrainz/Track Id")) { xmms_xform_metadata_set_str (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_TRACK_ID, value); } } if (track) { gint tracknr; gchar *end; tracknr = strtol (track, &end, 10); if (end && *end == '\0') { xmms_xform_metadata_set_int (xform, XMMS_MEDIALIB_ENTRY_PROPERTY_TRACKNR, tracknr); } } asf_metadata_destroy (metadata); }