From 4a4ec26aa3b041078f01848dac56ef1a528d33a1 Mon Sep 17 00:00:00 2001 From: "Arwed v. Merkatz" Date: Wed, 25 Aug 2004 12:27:59 +0000 Subject: Send vorbis headers at the beginning of a stream, fixes bug #141554. Original commit message from CVS: Send vorbis headers at the beginning of a stream, fixes bug #141554. --- AUTHORS | 1 + ChangeLog | 5 +++++ gst/matroska/matroska-demux.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/AUTHORS b/AUTHORS index ca46e98a..c493808a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -18,3 +18,4 @@ Benjamin Otte Ronald Bultje Julien MOUTTE Jan Schmidt +Arwed v. Merkatz diff --git a/ChangeLog b/ChangeLog index 35f72a0c..8e8700f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-08-25 Arwed v. Merkatz + + * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup), + send vorbis headers at the beginning of a stream, fixes bug #141554. + 2004-08-24 Sebastien Cote * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head), diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 4dc2fdf5..e4d63781 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -1896,6 +1896,31 @@ gst_matroska_demux_parse_blockgroup (GstMatroskaDemux * demux, break; } + if ((cluster_time + time == 0) && + (!strcmp (demux->src[stream]->codec_id, + GST_MATROSKA_CODEC_ID_AUDIO_VORBIS))) { + /* start of the stream and vorbis audio, need to send the codec_priv + * data as first three packets */ + guchar *p; + guint32 offset, length; + gint i; + GstBuffer *priv; + + p = (unsigned char *) demux->src[stream]->codec_priv; + offset = 3; + for (i = 0; i < 2; i++) { + length = p[i + 1]; + priv = gst_buffer_new_and_alloc (length); + memcpy (GST_BUFFER_DATA (priv), &p[offset], length); + gst_pad_push (demux->src[stream]->pad, GST_DATA (priv)); + offset += length; + } + length = demux->src[stream]->codec_priv_size - offset; + priv = gst_buffer_new_and_alloc (length); + memcpy (GST_BUFFER_DATA (priv), &p[offset], length); + gst_pad_push (demux->src[stream]->pad, GST_DATA (priv)); + } + if (res) { for (n = 0; n < laces; n++) { GstBuffer *sub = gst_buffer_create_sub (buf, -- cgit