dec = GST_FLAC_DEC (audio_dec);
- ///////////// FIXME:
- dec->tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "FLAC", NULL);
-
dec->adapter = gst_adapter_new ();
dec->decoder = FLAC__stream_decoder_new ();
/* no point calculating MD5 since it's never checked here */
FLAC__stream_decoder_set_md5_checking (dec->decoder, false);
- FLAC__stream_decoder_set_metadata_respond (dec->decoder,
- FLAC__METADATA_TYPE_VORBIS_COMMENT);
- FLAC__stream_decoder_set_metadata_respond (dec->decoder,
- FLAC__METADATA_TYPE_PICTURE);
GST_DEBUG_OBJECT (dec, "initializing decoder");
s = FLAC__stream_decoder_init_stream (dec->decoder,
flacdec->adapter = NULL;
}
- if (flacdec->tags) {
- gst_tag_list_free (flacdec->tags);
- flacdec->tags = NULL;
- }
-
return TRUE;
}
return TRUE;
}
-static gboolean
-gst_flac_dec_update_metadata (GstFlacDec * flacdec,
- const FLAC__StreamMetadata * metadata)
-{
- GstTagList *list;
- guint num, i;
-
- if (flacdec->tags)
- list = flacdec->tags;
- else
- flacdec->tags = list = gst_tag_list_new_empty ();
-
- num = metadata->data.vorbis_comment.num_comments;
- GST_DEBUG_OBJECT (flacdec, "%u tag(s) found", num);
-
- for (i = 0; i < num; ++i) {
- gchar *vc, *name, *value;
-
- vc = g_strndup ((gchar *) metadata->data.vorbis_comment.comments[i].entry,
- metadata->data.vorbis_comment.comments[i].length);
-
- if (gst_tag_parse_extended_comment (vc, &name, NULL, &value, TRUE)) {
- GST_DEBUG_OBJECT (flacdec, "%s : %s", name, value);
- if (value && strlen (value))
- gst_vorbis_tag_add (list, name, value);
- g_free (name);
- g_free (value);
- }
-
- g_free (vc);
- }
-
- return TRUE;
-}
-
/* CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0 */
static const guint8 crc8_table[256] = {
0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
return TRUE;
}
-/* FIXME: let parser extract tags */
-static void
-gst_flac_extract_picture_buffer (GstFlacDec * dec,
- const FLAC__StreamMetadata * metadata)
-{
- FLAC__StreamMetadata_Picture picture;
- GstTagList *tags;
-
- g_return_if_fail (metadata->type == FLAC__METADATA_TYPE_PICTURE);
-
- GST_LOG_OBJECT (dec, "Got PICTURE block");
- picture = metadata->data.picture;
-
- GST_DEBUG_OBJECT (dec, "declared MIME type is: '%s'",
- GST_STR_NULL (picture.mime_type));
- GST_DEBUG_OBJECT (dec, "image data is %u bytes", picture.data_length);
-
- tags = gst_tag_list_new_empty ();
-
- gst_tag_list_add_id3_image (tags, (guint8 *) picture.data,
- picture.data_length, picture.type);
-
- if (!gst_tag_list_is_empty (tags)) {
- gst_element_found_tags_for_pad (GST_ELEMENT (dec),
- GST_AUDIO_DECODER_SRC_PAD (dec), tags);
- } else {
- GST_DEBUG_OBJECT (dec, "problem parsing PICTURE block, skipping");
- gst_tag_list_free (tags);
- }
-}
-
static void
gst_flac_dec_metadata_cb (const FLAC__StreamDecoder * decoder,
const FLAC__StreamMetadata * metadata, void *client_data)
GST_DEBUG_OBJECT (flacdec, "total samples = %" G_GINT64_FORMAT, samples);
break;
}
- case FLAC__METADATA_TYPE_PICTURE:{
- gst_flac_extract_picture_buffer (flacdec, metadata);
- break;
- }
- case FLAC__METADATA_TYPE_VORBIS_COMMENT:
- gst_flac_dec_update_metadata (flacdec, metadata);
- break;
default:
break;
}
gst_caps_unref (caps);
}
- if (flacdec->tags) {
- gst_element_found_tags_for_pad (GST_ELEMENT (flacdec),
- GST_AUDIO_DECODER_SRC_PAD (flacdec), flacdec->tags);
- flacdec->tags = NULL;
- }
-
GST_LOG_OBJECT (flacdec, "alloc_buffer_and_set_caps");
outbuf = gst_buffer_new_allocate (NULL, samples * channels * (width / 8), 0);