flacdec: don't extract metadata, leave that to the parser or container

This commit is contained in:
Tim-Philipp Müller 2011-10-30 18:49:21 +00:00
parent 5ab43cdf91
commit ab591b6d53
2 changed files with 0 additions and 93 deletions

View file

@ -189,19 +189,12 @@ gst_flac_dec_start (GstAudioDecoder * audio_dec)
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,
@ -235,11 +228,6 @@ gst_flac_dec_stop (GstAudioDecoder * dec)
flacdec->adapter = NULL;
}
if (flacdec->tags) {
gst_tag_list_free (flacdec->tags);
flacdec->tags = NULL;
}
return TRUE;
}
@ -264,41 +252,6 @@ gst_flac_dec_set_format (GstAudioDecoder * dec, GstCaps * caps)
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,
@ -434,37 +387,6 @@ gst_flac_dec_scan_got_frame (GstFlacDec * flacdec, guint8 * data, guint size,
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)
@ -503,13 +425,6 @@ gst_flac_dec_metadata_cb (const FLAC__StreamDecoder * decoder,
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;
}
@ -660,12 +575,6 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
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);

View file

@ -47,8 +47,6 @@ struct _GstFlacDec {
gboolean got_headers; /* have we received all the header buffers yet? */
GstTagList *tags;
GstFlowReturn last_flow; /* to marshal flow return from finis_frame to
* handle_frame via flac callbacks */