summaryrefslogtreecommitdiffstats
path: root/ext/flac/gstflacdec.c
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2008-06-04 10:42:46 +0000
committerTim-Philipp Müller <tim@centricular.net>2008-06-04 10:42:46 +0000
commit21c48f1a1d6b83c7f770f4b32ea5901a42b61683 (patch)
tree9ee3ab2804e5696d1d67e1bff0ea079d60c9ee39 /ext/flac/gstflacdec.c
parentef66d037f1f2f3b109e93785bd34ae33c256d0d3 (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.c117
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 */