parent
e1875bf25f
commit
ef473dd0ae
@ -460,6 +460,40 @@ typedef struct
|
|||||||
}
|
}
|
||||||
MyForEach;
|
MyForEach;
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
gst_tag_to_coverart (const GValue * image_value)
|
||||||
|
{
|
||||||
|
gchar *coverart_data, *data_result, *mime_result;
|
||||||
|
const gchar *mime_type;
|
||||||
|
GstStructure *mime_struct;
|
||||||
|
GstBuffer *buffer;
|
||||||
|
GList *l = NULL;
|
||||||
|
|
||||||
|
g_return_val_if_fail (image_value != NULL, NULL);
|
||||||
|
|
||||||
|
buffer = gst_value_get_buffer (image_value);
|
||||||
|
g_return_val_if_fail (gst_caps_is_fixed (buffer->caps), NULL);
|
||||||
|
mime_struct = gst_caps_get_structure (buffer->caps, 0);
|
||||||
|
mime_type = gst_structure_get_name (mime_struct);
|
||||||
|
|
||||||
|
if (strcmp (mime_type, "text/uri-list") == 0) {
|
||||||
|
/* URI reference */
|
||||||
|
coverart_data = g_strndup ((gchar *) buffer->data, buffer->size);
|
||||||
|
mime_type = "-->";
|
||||||
|
} else {
|
||||||
|
coverart_data = g_base64_encode (buffer->data, buffer->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
data_result = g_strdup_printf ("COVERART=%s", coverart_data);
|
||||||
|
mime_result = g_strdup_printf ("COVERARTMIME=%s", mime_type);
|
||||||
|
g_free (coverart_data);
|
||||||
|
|
||||||
|
l = g_list_append (l, data_result);
|
||||||
|
l = g_list_append (l, mime_result);
|
||||||
|
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_tag_to_vorbis_comments:
|
* gst_tag_to_vorbis_comments:
|
||||||
* @list: a #GstTagList
|
* @list: a #GstTagList
|
||||||
@ -481,6 +515,18 @@ gst_tag_to_vorbis_comments (const GstTagList * list, const gchar * tag)
|
|||||||
g_return_val_if_fail (list != NULL, NULL);
|
g_return_val_if_fail (list != NULL, NULL);
|
||||||
g_return_val_if_fail (tag != NULL, NULL);
|
g_return_val_if_fail (tag != NULL, NULL);
|
||||||
|
|
||||||
|
/* Special case: cover art is split into two tags to store data and
|
||||||
|
* MIME-type. Even if the tag list contains multiple entries, there is
|
||||||
|
* no reasonable way to save more than one.
|
||||||
|
* If both, preview image and image, are present we prefer the
|
||||||
|
* image tag.
|
||||||
|
*/
|
||||||
|
if ((strcmp (tag, GST_TAG_PREVIEW_IMAGE) == 0 &&
|
||||||
|
gst_tag_list_get_tag_size (list, GST_TAG_IMAGE) == 0) ||
|
||||||
|
strcmp (tag, GST_TAG_IMAGE) == 0) {
|
||||||
|
return gst_tag_to_coverart (gst_tag_list_get_value_index (list, tag, 0));
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp (tag, GST_TAG_EXTENDED_COMMENT) != 0) {
|
if (strcmp (tag, GST_TAG_EXTENDED_COMMENT) != 0) {
|
||||||
vorbis_tag = gst_tag_to_vorbis_tag (tag);
|
vorbis_tag = gst_tag_to_vorbis_tag (tag);
|
||||||
if (!vorbis_tag)
|
if (!vorbis_tag)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user