Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}