From 76b7ff8f9967a30543bf8f8217b892c1a3826275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 27 Jan 2012 12:08:33 +0100 Subject: [PATCH] vorbisparse: Pass correct header buffer size to libvorbis and include channels/rate in the srcpad caps --- ext/vorbis/gstvorbisparse.c | 18 +++++++++++------- ext/vorbis/gstvorbisparse.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ext/vorbis/gstvorbisparse.c b/ext/vorbis/gstvorbisparse.c index c992c6d541..adc128d86b 100644 --- a/ext/vorbis/gstvorbisparse.c +++ b/ext/vorbis/gstvorbisparse.c @@ -189,13 +189,6 @@ vorbis_parse_push_headers (GstVorbisParse * parse) ogg_packet packet; GstMapInfo map; - /* get the headers into the caps, passing them to vorbis as we go */ - caps = gst_caps_make_writable (gst_pad_query_caps (parse->srcpad, NULL)); - vorbis_parse_set_header_on_caps (parse, caps); - GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps); - gst_pad_set_caps (parse->srcpad, caps); - gst_caps_unref (caps); - outbuf = GST_BUFFER_CAST (parse->streamheader->data); gst_buffer_map (outbuf, &map, GST_MAP_READ); packet.packet = map.data; @@ -207,6 +200,7 @@ vorbis_parse_push_headers (GstVorbisParse * parse) vorbis_synthesis_headerin (&parse->vi, &parse->vc, &packet); gst_buffer_unmap (outbuf, &map); parse->sample_rate = parse->vi.rate; + parse->channels = parse->vi.channels; outbuf1 = outbuf; outbuf = GST_BUFFER_CAST (parse->streamheader->next->data); @@ -224,6 +218,7 @@ vorbis_parse_push_headers (GstVorbisParse * parse) outbuf = GST_BUFFER_CAST (parse->streamheader->next->next->data); gst_buffer_map (outbuf, &map, GST_MAP_READ); packet.packet = map.data; + packet.bytes = map.size; packet.granulepos = GST_BUFFER_OFFSET_END (outbuf); packet.packetno = 3; packet.e_o_s = 0; @@ -232,6 +227,15 @@ vorbis_parse_push_headers (GstVorbisParse * parse) gst_buffer_unmap (outbuf, &map); outbuf3 = outbuf; + /* get the headers into the caps, passing them to vorbis as we go */ + caps = gst_caps_new_simple ("audio/x-vorbis", + "rate", G_TYPE_INT, parse->sample_rate, + "channels", G_TYPE_INT, parse->channels, NULL);; + vorbis_parse_set_header_on_caps (parse, caps); + GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps); + gst_pad_set_caps (parse->srcpad, caps); + gst_caps_unref (caps); + /* first process queued events */ vorbis_parse_drain_event_queue (parse); diff --git a/ext/vorbis/gstvorbisparse.h b/ext/vorbis/gstvorbisparse.h index 6538949758..46183ea856 100644 --- a/ext/vorbis/gstvorbisparse.h +++ b/ext/vorbis/gstvorbisparse.h @@ -66,6 +66,7 @@ struct _GstVorbisParse { gint64 prev_granulepos; gint32 prev_blocksize; guint32 sample_rate; + guint32 channels; }; struct _GstVorbisParseClass {