diff options
-rw-r--r-- | ext/flac/gstflacenc.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ext/flac/gstflacenc.c b/ext/flac/gstflacenc.c index 570c908bf..52525b7d5 100644 --- a/ext/flac/gstflacenc.c +++ b/ext/flac/gstflacenc.c @@ -625,6 +625,7 @@ gst_flac_enc_set_metadata (GstFlacEnc * flacenc, GstAudioInfo * info, if (n_images + n_preview_images > 0) { GstSample *sample; GstBuffer *buffer; + GstCaps *caps; const GstStructure *structure; GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE; gint i; @@ -641,16 +642,22 @@ gst_flac_enc_set_metadata (GstFlacEnc * flacenc, GstAudioInfo * info, } structure = gst_sample_get_info (sample); - if (!structure) { - GST_ERROR_OBJECT (flacenc, "No image tag info"); + caps = gst_sample_get_caps (sample); + if (!caps) { + GST_FIXME_OBJECT (flacenc, "Image tag without caps"); + gst_sample_unref (sample); continue; } flacenc->meta[entries] = FLAC__metadata_object_new (FLAC__METADATA_TYPE_PICTURE); - gst_structure_get (structure, "image-type", GST_TYPE_TAG_IMAGE_TYPE, - &image_type, NULL); + if (structure) + gst_structure_get (structure, "image-type", GST_TYPE_TAG_IMAGE_TYPE, + &image_type, NULL); + else + image_type = GST_TAG_IMAGE_TYPE_NONE; + /* Convert to ID3v2 APIC image type */ if (image_type == GST_TAG_IMAGE_TYPE_NONE) image_type = (i < n_images) ? 0x00 : 0x01; @@ -665,6 +672,9 @@ gst_flac_enc_set_metadata (GstFlacEnc * flacenc, GstAudioInfo * info, /* FIXME: There's no way to set the picture type in libFLAC */ flacenc->meta[entries]->data.picture.type = image_type; + + structure = gst_caps_get_structure (caps, 0); + FLAC__metadata_object_picture_set_mime_type (flacenc->meta[entries], (char *) gst_structure_get_name (structure), TRUE); |