diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2008-06-04 10:42:46 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2008-06-04 10:42:46 +0000 |
commit | 21c48f1a1d6b83c7f770f4b32ea5901a42b61683 (patch) | |
tree | 9ee3ab2804e5696d1d67e1bff0ea079d60c9ee39 /ext/flac/gstflacdec.c | |
parent | ef66d037f1f2f3b109e93785bd34ae33c256d0d3 (diff) |
Use new utility functions in libgsttag to process coverart (#512333).
Original commit message from CVS:
* ext/flac/gstflacdec.c: (gst_flac_extract_picture_buffer):
* gst/id3demux/id3v2frames.c: (parse_picture_frame):
Use new utility functions in libgsttag to process coverart (#512333).
Diffstat (limited to 'ext/flac/gstflacdec.c')
-rw-r--r-- | ext/flac/gstflacdec.c | 117 |
1 files changed, 9 insertions, 108 deletions
diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c index 71623f28..a7149aeb 100644 --- a/ext/flac/gstflacdec.c +++ b/ext/flac/gstflacdec.c @@ -635,130 +635,31 @@ gst_flac_dec_scan_for_last_block (GstFlacDec * flacdec, gint64 * samples) /* FIXME: remove ifndef once we depend on flac >= 1.2.x */ #ifndef LEGACY_FLAC -static gchar * -gst_flac_normalize_picture_mime_type (const gchar * old_mime_type, - gboolean * is_pic_uri) -{ - gchar *mime_str; - - g_return_val_if_fail (old_mime_type != NULL, NULL); - - /* Make lower-case */ - mime_str = g_ascii_strdown (old_mime_type, -1); - - /* Fix up 'jpg' => 'jpeg' in mime/media type */ - if (g_ascii_strcasecmp (mime_str, "jpg") == 0 || - g_ascii_strcasecmp (mime_str, "image/jpg") == 0) { - g_free (mime_str); - mime_str = g_strdup ("image/jpeg"); - } - - /* Check if the picture is a URI reference */ - *is_pic_uri = (strcmp (mime_str, "-->") == 0); - - if (!(*is_pic_uri) && *mime_str && strchr (mime_str, '/') == NULL) { - gchar *tmp = g_strdup_printf ("image/%s", mime_str); - - g_free (mime_str); - mime_str = tmp; - } - - return mime_str; -} - static void -gst_flac_extract_picture_buffer (GstFlacDec * flacdec, +gst_flac_extract_picture_buffer (GstFlacDec * dec, const FLAC__StreamMetadata * metadata) { - /* Most of this is copied from gst/id3demux/id3v2frames.c */ - gchar *mime_type; - - GstBuffer *image; - - GstCaps *image_caps; - FLAC__StreamMetadata_Picture picture; - - gboolean is_pic_uri; + GstTagList *tags; g_return_if_fail (metadata->type == FLAC__METADATA_TYPE_PICTURE); GST_LOG ("Got PICTURE block"); picture = metadata->data.picture; - is_pic_uri = FALSE; - mime_type = gst_flac_normalize_picture_mime_type (picture.mime_type, - &is_pic_uri); - - GST_DEBUG ("PICTURE MIME-type is: \"%s\"", mime_type); + GST_DEBUG ("declared MIME type is: '%s'", GST_STR_NULL (picture.mime_type)); GST_DEBUG ("image data is %u bytes", picture.data_length); - if (is_pic_uri) { - gchar *uri; - - uri = g_strndup ((gchar *) picture.data, picture.data_length); - GST_DEBUG ("image URI: %s", uri); - - image = gst_buffer_new (); - GST_BUFFER_MALLOCDATA (image) = (guint8 *) uri; /* take ownership */ - GST_BUFFER_DATA (image) = (guint8 *) uri; - GST_BUFFER_SIZE (image) = picture.data_length; - - image_caps = gst_caps_new_simple ("text/uri-list", NULL); - } - - else { - image = gst_buffer_new_and_alloc (picture.data_length); - memcpy (GST_BUFFER_DATA (image), picture.data, picture.data_length); - - /* if possible use GStreamer media type rather than declared type */ - image_caps = gst_type_find_helper_for_buffer (NULL, image, NULL); - if (image_caps) { - GST_DEBUG ("Found GStreamer media type: %" GST_PTR_FORMAT, image_caps); - } else if (mime_type && *mime_type) { - GST_DEBUG ("No GStreamer media type found, using declared type: \"%s\"", - mime_type); - image_caps = gst_caps_new_simple (mime_type, NULL); - } else { - GST_DEBUG ("Empty declared mime type, ignoring image frame"); - image = NULL; - image_caps = NULL; - } - } + tags = gst_tag_list_new (); - g_free (mime_type); + gst_tag_list_add_id3_image (tags, (guint8 *) picture.data, + picture.data_length, picture.type); - if (image && image_caps) { - GstTagList *tags = gst_tag_list_new (); - - if (picture.type == 1 || picture.type == 2) { - /* file icon for preview. Don't add image-type to caps, since it only - * makes sense for there to be one of these. */ - gst_buffer_set_caps (image, image_caps); - gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, - GST_TAG_PREVIEW_IMAGE, image, NULL); - } else { - GstTagImageType gst_tag_pic_type = GST_TAG_IMAGE_TYPE_UNDEFINED; - - if (picture.type >= 0x03 && picture.type <= 0x14) - gst_tag_pic_type = (GstTagImageType) ((gint) (picture.type) - 2); - - gst_structure_set (gst_caps_get_structure (image_caps, 0), - "image-type", GST_TYPE_TAG_IMAGE_TYPE, gst_tag_pic_type, NULL); - - gst_buffer_set_caps (image, image_caps); - gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, image, NULL); - } - gst_caps_unref (image_caps); - gst_buffer_unref (image); - - /* Announce discovered tags */ - gst_element_found_tags_for_pad (GST_ELEMENT (flacdec), flacdec->srcpad, - tags); + if (!gst_tag_list_is_empty (tags)) { + gst_element_found_tags_for_pad (GST_ELEMENT (dec), dec->srcpad, tags); } else { - if (image) - gst_buffer_unref (image); GST_DEBUG ("problem parsing PICTURE block, skipping"); + gst_tag_list_free (tags); } } #endif /* LEGACY_FLAC */ |