summaryrefslogtreecommitdiffstats
path: root/gst/wavparse
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sourceforge.net>2008-08-05 14:22:12 +0000
committerStefan Kost <ensonic@users.sourceforge.net>2008-08-05 14:22:12 +0000
commit8e98d264cdb9e227793b79af769175d1ae31ec73 (patch)
treee1c05f3eb18092c63bb503370692b615ffd329b1 /gst/wavparse
parent6d0e3ac3964ec290a596950b7765fdb46b6431f9 (diff)
gst/wavparse/gstwavparse.c: Handle the acid chunk and send tempo as part of tags. Other fields are interesting too, b...
Original commit message from CVS: * gst/wavparse/gstwavparse.c: Handle the acid chunk and send tempo as part of tags. Other fields are interesting too, but need more tag-definitions. Fixes #545433.
Diffstat (limited to 'gst/wavparse')
-rw-r--r--gst/wavparse/gstwavparse.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 822c8138..fde7dbc3 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -1316,6 +1316,40 @@ gst_wavparse_stream_headers (GstWavParse * wav)
}
break;
}
+ case GST_RIFF_TAG_acid:{
+ const gst_riff_acid *acid = NULL;
+ const guint data_size = sizeof (gst_riff_acid);
+
+ if (wav->streaming) {
+ if (gst_adapter_available (wav->adapter) < 8 + data_size) {
+ return GST_FLOW_OK;
+ }
+ gst_adapter_flush (wav->adapter, 8);
+ acid = (const gst_riff_acid *) gst_adapter_peek (wav->adapter,
+ data_size);
+ } else {
+ gst_buffer_unref (buf);
+ if ((res =
+ gst_pad_pull_range (wav->sinkpad, wav->offset + 8,
+ data_size, &buf)) != GST_FLOW_OK)
+ goto header_read_error;
+ acid = (const gst_riff_acid *) GST_BUFFER_DATA (buf);
+ }
+ GST_INFO_OBJECT (wav, "Have acid chunk");
+ /* send data as tags */
+ if (!wav->tags)
+ wav->tags = gst_tag_list_new ();
+ gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BEATS_PER_MINUTE, acid->tempo, NULL);
+
+ if (wav->streaming) {
+ gst_adapter_flush (wav->adapter, data_size);
+ } else {
+ gst_buffer_unref (buf);
+ wav->offset += 8 + data_size;
+ }
+ break;
+ }
default:
gst_waveparse_ignore_chunk (wav, buf, tag, size);
}