[Pkg-gstreamer-commits] [SCM] GStreamer Bad Plugins 0.10 Packaging branch, master, updated. debian/0.10.23-6-1-g0382c5e
Sebastian Dröge
sebastian.droege at collabora.co.uk
Mon Aug 6 11:59:09 UTC 2012
The following commit has been merged in the master branch:
commit 0382c5e8a331e0b3f93da094822f48a71b2720e2
Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date: Mon Aug 6 10:29:36 2012 +0200
debian/patches/*opus*: Backport Opus plugin patches from upstream GIT to fix major problems with handling of Opus streams. This caused invalid files to be created and assertions on valid files (Closes: #683919)
diff --git a/debian/changelog b/debian/changelog
index 2d8c958..8a7f66f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+gst-plugins-bad0.10 (0.10.23-7) unstable; urgency=low
+
+ * debian/patches/*opus*:
+ + Backport Opus plugin patches from upstream GIT to fix major
+ problems with handling of Opus streams. This caused invalid
+ files to be created and assertions on valid files (Closes: #683919).
+
+ -- Sebastian Dröge <slomo at debian.org> Mon, 06 Aug 2012 10:28:07 +0200
+
gst-plugins-bad0.10 (0.10.23-6) unstable; urgency=low
* debian/rules,
diff --git a/debian/patches/0008-opusenc-configure-baseclass-requested-samples-really.patch b/debian/patches/0008-opusenc-configure-baseclass-requested-samples-really.patch
new file mode 100644
index 0000000..7d3ea7b
--- /dev/null
+++ b/debian/patches/0008-opusenc-configure-baseclass-requested-samples-really.patch
@@ -0,0 +1,31 @@
+From db0aa7f0567435b14011750c02b0dcfd12cceb65 Mon Sep 17 00:00:00 2001
+From: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
+Date: Wed, 7 Mar 2012 12:55:43 +0100
+Subject: [PATCH 08/20] opusenc: configure baseclass requested samples really
+ in samples
+
+... as opposed to bytes.
+---
+ ext/opus/gstopusenc.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
+index 29b254e..a87e08b 100644
+--- a/ext/opus/gstopusenc.c
++++ b/ext/opus/gstopusenc.c
+@@ -382,10 +382,8 @@ gst_opus_enc_setup_base_class (GstOpusEnc * enc, GstAudioEncoder * benc)
+ {
+ gst_audio_encoder_set_latency (benc,
+ gst_opus_enc_get_latency (enc), gst_opus_enc_get_latency (enc));
+- gst_audio_encoder_set_frame_samples_min (benc,
+- enc->frame_samples * enc->n_channels * 2);
+- gst_audio_encoder_set_frame_samples_max (benc,
+- enc->frame_samples * enc->n_channels * 2);
++ gst_audio_encoder_set_frame_samples_min (benc, enc->frame_samples);
++ gst_audio_encoder_set_frame_samples_max (benc, enc->frame_samples);
+ gst_audio_encoder_set_frame_max (benc, 0);
+ }
+
+--
+1.7.10.4
+
diff --git a/debian/patches/0009-opusenc-only-request-and-process-1-frame-at-a-time.patch b/debian/patches/0009-opusenc-only-request-and-process-1-frame-at-a-time.patch
new file mode 100644
index 0000000..7365f3e
--- /dev/null
+++ b/debian/patches/0009-opusenc-only-request-and-process-1-frame-at-a-time.patch
@@ -0,0 +1,120 @@
+From 228d8808fe6f8aa7390b73d2b248b3a8f092eb9e Mon Sep 17 00:00:00 2001
+From: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
+Date: Wed, 7 Mar 2012 12:59:28 +0100
+Subject: [PATCH 09/20] opusenc: only request and process 1 frame at a time
+
+... since it is specified in _finish_frame that input buffer may be invalidated
+after calling it, and is as such not reliably available for further encoding.
+
+Also, requesting or allowing several frames is only useful if subclass intends
+to process these "in 1 run" (as in, 1 output buffer), not for having another
+(inner) loop in subclass where the baseclass one will do just fine.
+---
+ ext/opus/gstopusenc.c | 70 ++++++++++++++++++++++---------------------------
+ 1 file changed, 31 insertions(+), 39 deletions(-)
+
+diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
+index a87e08b..6a19ffd 100644
+--- a/ext/opus/gstopusenc.c
++++ b/ext/opus/gstopusenc.c
+@@ -384,7 +384,7 @@ gst_opus_enc_setup_base_class (GstOpusEnc * enc, GstAudioEncoder * benc)
+ gst_opus_enc_get_latency (enc), gst_opus_enc_get_latency (enc));
+ gst_audio_encoder_set_frame_samples_min (benc, enc->frame_samples);
+ gst_audio_encoder_set_frame_samples_max (benc, enc->frame_samples);
+- gst_audio_encoder_set_frame_max (benc, 0);
++ gst_audio_encoder_set_frame_max (benc, 1);
+ }
+
+ static gint
+@@ -792,6 +792,8 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
+ gsize bsize, size;
+ gsize bytes;
+ gint ret = GST_FLOW_OK;
++ gint outsize;
++ GstBuffer *outbuf;
+
+ g_mutex_lock (enc->property_lock);
+
+@@ -816,51 +818,41 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
+ goto done;
+ }
+
++ g_assert (size == bytes);
+
+- while (size) {
+- gint outsize;
+- GstBuffer *outbuf;
++ ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc),
++ GST_BUFFER_OFFSET_NONE, enc->max_payload_size * enc->n_channels,
++ GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (enc)), &outbuf);
+
+- ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc),
+- GST_BUFFER_OFFSET_NONE, enc->max_payload_size * enc->n_channels,
+- GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (enc)), &outbuf);
+-
+- if (GST_FLOW_OK != ret)
+- goto done;
+-
+- GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)",
+- enc->frame_samples, (int) bytes);
+-
+- outsize =
+- opus_multistream_encode (enc->state, (const gint16 *) data,
+- enc->frame_samples, GST_BUFFER_DATA (outbuf),
+- enc->max_payload_size * enc->n_channels);
++ if (GST_FLOW_OK != ret)
++ goto done;
+
+- if (outsize < 0) {
+- GST_ERROR_OBJECT (enc, "Encoding failed: %d", outsize);
+- ret = GST_FLOW_ERROR;
+- goto done;
+- } else if (outsize > enc->max_payload_size) {
+- GST_WARNING_OBJECT (enc,
+- "Encoded size %d is higher than max payload size (%d bytes)",
+- outsize, enc->max_payload_size);
+- ret = GST_FLOW_ERROR;
+- goto done;
+- }
++ GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)",
++ enc->frame_samples, (int) bytes);
+
+- GST_DEBUG_OBJECT (enc, "Output packet is %u bytes", outsize);
+- GST_BUFFER_SIZE (outbuf) = outsize;
++ outsize =
++ opus_multistream_encode (enc->state, (const gint16 *) data,
++ enc->frame_samples, GST_BUFFER_DATA (outbuf),
++ enc->max_payload_size * enc->n_channels);
+
+- ret =
+- gst_audio_encoder_finish_frame (GST_AUDIO_ENCODER (enc), outbuf,
+- enc->frame_samples);
++ if (outsize < 0) {
++ GST_ERROR_OBJECT (enc, "Encoding failed: %d", outsize);
++ ret = GST_FLOW_ERROR;
++ goto done;
++ } else if (outsize > enc->max_payload_size) {
++ GST_WARNING_OBJECT (enc,
++ "Encoded size %d is higher than max payload size (%d bytes)",
++ outsize, enc->max_payload_size);
++ ret = GST_FLOW_ERROR;
++ goto done;
++ }
+
+- if ((GST_FLOW_OK != ret) && (GST_FLOW_NOT_LINKED != ret))
+- goto done;
++ GST_DEBUG_OBJECT (enc, "Output packet is %u bytes", outsize);
++ GST_BUFFER_SIZE (outbuf) = outsize;
+
+- data += bytes;
+- size -= bytes;
+- }
++ ret =
++ gst_audio_encoder_finish_frame (GST_AUDIO_ENCODER (enc), outbuf,
++ enc->frame_samples);
+
+ done:
+
+--
+1.7.10.4
+
diff --git a/debian/patches/0010-opus-Handle-GstByteWriter-return-values.patch b/debian/patches/0010-opus-Handle-GstByteWriter-return-values.patch
new file mode 100644
index 0000000..0664dd5
--- /dev/null
+++ b/debian/patches/0010-opus-Handle-GstByteWriter-return-values.patch
@@ -0,0 +1,57 @@
+From 95626e69c86686d5b94ebb0a42c778fce7ad63ff Mon Sep 17 00:00:00 2001
+From: Edward Hervey <edward.hervey at collabora.co.uk>
+Date: Wed, 4 Apr 2012 11:51:28 +0200
+Subject: [PATCH 10/20] opus: Handle GstByteWriter return values
+
+---
+ ext/opus/gstopusheader.c | 24 ++++++++++++++----------
+ 1 file changed, 14 insertions(+), 10 deletions(-)
+
+diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
+index d3d631f..9048eb8 100644
+--- a/ext/opus/gstopusheader.c
++++ b/ext/opus/gstopusheader.c
+@@ -33,6 +33,7 @@ gst_opus_enc_create_id_buffer (gint nchannels, gint n_stereo_streams,
+ {
+ GstBuffer *buffer;
+ GstByteWriter bw;
++ gboolean hdl = TRUE;
+
+ g_return_val_if_fail (nchannels > 0 && nchannels < 256, NULL);
+ g_return_val_if_fail (n_stereo_streams >= 0, NULL);
+@@ -41,19 +42,22 @@ gst_opus_enc_create_id_buffer (gint nchannels, gint n_stereo_streams,
+ gst_byte_writer_init (&bw);
+
+ /* See http://wiki.xiph.org/OggOpus */
+- gst_byte_writer_put_data (&bw, (const guint8 *) "OpusHead", 8);
+- gst_byte_writer_put_uint8 (&bw, 0); /* version number */
+- gst_byte_writer_put_uint8 (&bw, nchannels);
+- gst_byte_writer_put_uint16_le (&bw, 0); /* pre-skip */
+- gst_byte_writer_put_uint32_le (&bw, sample_rate);
+- gst_byte_writer_put_uint16_le (&bw, 0); /* output gain */
+- gst_byte_writer_put_uint8 (&bw, channel_mapping_family);
++ hdl &= gst_byte_writer_put_data (&bw, (const guint8 *) "OpusHead", 8);
++ hdl &= gst_byte_writer_put_uint8 (&bw, 0); /* version number */
++ hdl &= gst_byte_writer_put_uint8 (&bw, nchannels);
++ hdl &= gst_byte_writer_put_uint16_le (&bw, 0); /* pre-skip */
++ hdl &= gst_byte_writer_put_uint32_le (&bw, sample_rate);
++ hdl &= gst_byte_writer_put_uint16_le (&bw, 0); /* output gain */
++ hdl &= gst_byte_writer_put_uint8 (&bw, channel_mapping_family);
+ if (channel_mapping_family > 0) {
+- gst_byte_writer_put_uint8 (&bw, nchannels - n_stereo_streams);
+- gst_byte_writer_put_uint8 (&bw, n_stereo_streams);
+- gst_byte_writer_put_data (&bw, channel_mapping, nchannels);
++ hdl &= gst_byte_writer_put_uint8 (&bw, nchannels - n_stereo_streams);
++ hdl &= gst_byte_writer_put_uint8 (&bw, n_stereo_streams);
++ hdl &= gst_byte_writer_put_data (&bw, channel_mapping, nchannels);
+ }
+
++ if (!hdl)
++ GST_WARNING ("Error creating header");
++
+ buffer = gst_byte_writer_reset_and_get_buffer (&bw);
+
+ GST_BUFFER_OFFSET (buffer) = 0;
+--
+1.7.10.4
+
diff --git a/debian/patches/0011-opuspay-plug-buffer-leak.patch b/debian/patches/0011-opuspay-plug-buffer-leak.patch
new file mode 100644
index 0000000..bedd291
--- /dev/null
+++ b/debian/patches/0011-opuspay-plug-buffer-leak.patch
@@ -0,0 +1,25 @@
+From 2ad90f2d162e8cc3a981d2e77e926d6eec01919e Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv at pseudoterminal.org>
+Date: Wed, 23 May 2012 20:28:06 +0200
+Subject: [PATCH 11/20] opuspay: plug buffer leak
+
+Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676647
+---
+ ext/opus/gstrtpopuspay.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c
+index cdd7ee0..08d01b1 100644
+--- a/ext/opus/gstrtpopuspay.c
++++ b/ext/opus/gstrtpopuspay.c
+@@ -136,5 +136,7 @@ gst_rtp_opus_pay_handle_buffer (GstBaseRTPPayload * basepayload,
+ gst_rtp_buffer_set_marker (outbuf, FALSE);
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+
++ gst_buffer_unref (buffer);
++
+ return gst_basertppayload_push (basepayload, outbuf);
+ }
+--
+1.7.10.4
+
diff --git a/debian/patches/0012-opusdec-fix-lost-packet-handling-for-FEC-PLC.patch b/debian/patches/0012-opusdec-fix-lost-packet-handling-for-FEC-PLC.patch
new file mode 100644
index 0000000..65b4eba
--- /dev/null
+++ b/debian/patches/0012-opusdec-fix-lost-packet-handling-for-FEC-PLC.patch
@@ -0,0 +1,84 @@
+From 6c3e13197ebc81df26d5e01a161a13e8e4b66bf4 Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Mon, 30 Apr 2012 14:40:02 +0100
+Subject: [PATCH 12/20] opusdec: fix lost packet handling for FEC/PLC
+
+The base audio decoder sends zero size packets, not NULL buffers,
+to signal dropped packets.
+---
+ ext/opus/gstopusdec.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
+index 7776f58..cbfc3ac 100644
+--- a/ext/opus/gstopusdec.c
++++ b/ext/opus/gstopusdec.c
+@@ -382,13 +382,16 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
+ to potentially wait for next buffer to decode a missing buffer */
+ if (dec->use_inband_fec && !dec->primed) {
+ GST_DEBUG_OBJECT (dec, "First buffer received in FEC mode, early out");
++ gst_buffer_replace (&dec->last_buffer, buffer);
++ dec->primed = TRUE;
+ goto done;
+ }
+
+ /* That's the buffer we'll be sending to the opus decoder. */
+- buf = dec->use_inband_fec && dec->last_buffer ? dec->last_buffer : buffer;
++ buf = (dec->use_inband_fec
++ && GST_BUFFER_SIZE (dec->last_buffer) > 0) ? dec->last_buffer : buffer;
+
+- if (buf) {
++ if (buf && GST_BUFFER_SIZE (buf) > 0) {
+ data = GST_BUFFER_DATA (buf);
+ size = GST_BUFFER_SIZE (buf);
+ GST_DEBUG_OBJECT (dec, "Using buffer of size %u", size);
+@@ -418,20 +421,24 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
+ if (dec->use_inband_fec) {
+ if (dec->last_buffer) {
+ /* normal delayed decode */
++ GST_LOG_OBJECT (dec, "FEC enabled, decoding last delayed buffer");
+ n = opus_multistream_decode (dec->state, data, size, out_data, samples,
+ 0);
+ } else {
+ /* FEC reconstruction decode */
++ GST_LOG_OBJECT (dec, "FEC enabled, reconstructing last buffer");
+ n = opus_multistream_decode (dec->state, data, size, out_data, samples,
+ 1);
+ }
+ } else {
+ /* normal decode */
++ GST_LOG_OBJECT (dec, "FEC disabled, decoding buffer");
+ n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0);
+ }
+
+ if (n < 0) {
+ GST_ELEMENT_ERROR (dec, STREAM, DECODE, ("Decoding error: %d", n), (NULL));
++ gst_buffer_unref (outbuf);
+ return GST_FLOW_ERROR;
+ }
+ GST_DEBUG_OBJECT (dec, "decoded %d samples", n);
+@@ -472,17 +479,16 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
+ }
+ }
+
++ if (dec->use_inband_fec) {
++ gst_buffer_replace (&dec->last_buffer, buffer);
++ }
++
+ res = gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (dec), outbuf, 1);
+
+ if (res != GST_FLOW_OK)
+ GST_DEBUG_OBJECT (dec, "flow: %s", gst_flow_get_name (res));
+
+ done:
+- if (dec->use_inband_fec) {
+- gst_buffer_replace (&dec->last_buffer, buffer);
+- dec->primed = TRUE;
+- }
+-
+ return res;
+
+ creation_failed:
+--
+1.7.10.4
+
diff --git a/debian/patches/0013-opus-bump-written-version-from-0-to-0x01.patch b/debian/patches/0013-opus-bump-written-version-from-0-to-0x01.patch
new file mode 100644
index 0000000..4b2b766
--- /dev/null
+++ b/debian/patches/0013-opus-bump-written-version-from-0-to-0x01.patch
@@ -0,0 +1,26 @@
+From b4d365257091c2127e7e0557589d141364ebe55e Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Thu, 24 May 2012 21:58:44 +0100
+Subject: [PATCH 13/20] opus: bump written version from 0 to 0x01
+
+as per the spec update at https://wiki.xiph.org/OggOpus#ID_Header
+---
+ ext/opus/gstopusheader.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
+index 9048eb8..dc9954f 100644
+--- a/ext/opus/gstopusheader.c
++++ b/ext/opus/gstopusheader.c
+@@ -43,7 +43,7 @@ gst_opus_enc_create_id_buffer (gint nchannels, gint n_stereo_streams,
+
+ /* See http://wiki.xiph.org/OggOpus */
+ hdl &= gst_byte_writer_put_data (&bw, (const guint8 *) "OpusHead", 8);
+- hdl &= gst_byte_writer_put_uint8 (&bw, 0); /* version number */
++ hdl &= gst_byte_writer_put_uint8 (&bw, 0x01); /* version number */
+ hdl &= gst_byte_writer_put_uint8 (&bw, nchannels);
+ hdl &= gst_byte_writer_put_uint16_le (&bw, 0); /* pre-skip */
+ hdl &= gst_byte_writer_put_uint32_le (&bw, sample_rate);
+--
+1.7.10.4
+
diff --git a/debian/patches/0014-opus-reject-major-version-number-above-what-we-grok.patch b/debian/patches/0014-opus-reject-major-version-number-above-what-we-grok.patch
new file mode 100644
index 0000000..560abe7
--- /dev/null
+++ b/debian/patches/0014-opus-reject-major-version-number-above-what-we-grok.patch
@@ -0,0 +1,33 @@
+From b73a14139f54621a06137db7e7373f43c65870fa Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Thu, 24 May 2012 22:12:56 +0100
+Subject: [PATCH 14/20] opus: reject major version number above what we grok
+
+---
+ ext/opus/gstopusheader.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
+index dc9954f..597808d 100644
+--- a/ext/opus/gstopusheader.c
++++ b/ext/opus/gstopusheader.c
+@@ -219,12 +219,15 @@ gst_opus_header_is_id_header (GstBuffer * buf)
+ {
+ gsize size = GST_BUFFER_SIZE (buf);
+ const guint8 *data = GST_BUFFER_DATA (buf);
+- guint8 channels, channel_mapping_family, n_streams, n_stereo_streams;
++ guint8 version, channels, channel_mapping_family, n_streams, n_stereo_streams;
+
+ if (size < 19)
+ return FALSE;
+ if (!gst_opus_header_is_header (buf, "OpusHead", 8))
+ return FALSE;
++ version = data[8];
++ if (version >= 0x0f) /* major version >=0 is what we grok */
++ return FALSE;
+ channels = data[9];
+ if (channels == 0)
+ return FALSE;
+--
+1.7.10.4
+
diff --git a/debian/patches/0015-opusparse-heed-test-vector-framing-to-eat-any-paddin.patch b/debian/patches/0015-opusparse-heed-test-vector-framing-to-eat-any-paddin.patch
new file mode 100644
index 0000000..59d9088
--- /dev/null
+++ b/debian/patches/0015-opusparse-heed-test-vector-framing-to-eat-any-paddin.patch
@@ -0,0 +1,28 @@
+From 88c96c2baad14ba5c7b6bd233be2c7f1fc0a2c2d Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Fri, 25 May 2012 22:16:30 +0100
+Subject: [PATCH 15/20] opusparse: heed test vector framing to eat any padding
+
+This fixes parsing on one particular test vector where payload
+data is smaller than the actual audio payload.
+---
+ ext/opus/gstopusparse.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c
+index 472e7b0..8d18211 100644
+--- a/ext/opus/gstopusparse.c
++++ b/ext/opus/gstopusparse.c
+@@ -193,6 +193,9 @@ gst_opus_parse_check_valid_frame (GstBaseParse * base,
+
+ packet_offset = 8;
+ data += packet_offset;
++
++ /* for ad hoc framing, heed the framing, so we eat any padding */
++ payload_offset = packet_size;
+ }
+
+ if (is_header) {
+--
+1.7.10.4
+
diff --git a/debian/patches/0016-opusdec-do-not-assert-on-bad-header-error-out-instea.patch b/debian/patches/0016-opusdec-do-not-assert-on-bad-header-error-out-instea.patch
new file mode 100644
index 0000000..357f7b0
--- /dev/null
+++ b/debian/patches/0016-opusdec-do-not-assert-on-bad-header-error-out-instea.patch
@@ -0,0 +1,35 @@
+From 722b15abcaadbf32542184df889ed06d7a01f8fe Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Sun, 27 May 2012 23:41:24 +0100
+Subject: [PATCH 16/20] opusdec: do not assert on bad header, error out
+ instead
+
+---
+ ext/opus/gstopusdec.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
+index cbfc3ac..9fb397c 100644
+--- a/ext/opus/gstopusdec.c
++++ b/ext/opus/gstopusdec.c
+@@ -240,9 +240,14 @@ gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
+ GstCaps *caps;
+ const GstAudioChannelPosition *pos = NULL;
+
+- g_return_val_if_fail (gst_opus_header_is_id_header (buf), GST_FLOW_ERROR);
+- g_return_val_if_fail (dec->n_channels == 0
+- || dec->n_channels == data[9], GST_FLOW_ERROR);
++ if (!gst_opus_header_is_id_header (buf)) {
++ GST_ERROR_OBJECT (dec, "Header is not an Opus ID header");
++ return GST_FLOW_ERROR;
++ }
++ if (!(dec->n_channels == 0 || dec->n_channels == data[9])) {
++ GST_ERROR_OBJECT (dec, "Opus ID header has invalid channels");
++ return GST_FLOW_ERROR;
++ }
+
+ dec->n_channels = data[9];
+ dec->pre_skip = GST_READ_UINT16_LE (data + 10);
+--
+1.7.10.4
+
diff --git a/debian/patches/0017-opusdec-read-gain-from-the-right-place-in-the-header.patch b/debian/patches/0017-opusdec-read-gain-from-the-right-place-in-the-header.patch
new file mode 100644
index 0000000..b3d0c26
--- /dev/null
+++ b/debian/patches/0017-opusdec-read-gain-from-the-right-place-in-the-header.patch
@@ -0,0 +1,26 @@
+From 8767a624f027e6c762d0eeed16d4fafd85ba858f Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Tue, 29 May 2012 17:24:02 +0100
+Subject: [PATCH 17/20] opusdec: read gain from the right place in the header
+
+It's at byte offset 16, not 14.
+---
+ ext/opus/gstopusdec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
+index 9fb397c..65ecb06 100644
+--- a/ext/opus/gstopusdec.c
++++ b/ext/opus/gstopusdec.c
+@@ -251,7 +251,7 @@ gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
+
+ dec->n_channels = data[9];
+ dec->pre_skip = GST_READ_UINT16_LE (data + 10);
+- dec->r128_gain = GST_READ_UINT16_LE (data + 14);
++ dec->r128_gain = GST_READ_UINT16_LE (data + 16);
+ dec->r128_gain_volume = gst_opus_dec_get_r128_volume (dec->r128_gain);
+ GST_INFO_OBJECT (dec,
+ "Found pre-skip of %u samples, R128 gain %d (volume %f)",
+--
+1.7.10.4
+
diff --git a/debian/patches/0020-opusenc-add-missing-mutex-unlock-on-error-path.patch b/debian/patches/0020-opusenc-add-missing-mutex-unlock-on-error-path.patch
new file mode 100644
index 0000000..1d36d94
--- /dev/null
+++ b/debian/patches/0020-opusenc-add-missing-mutex-unlock-on-error-path.patch
@@ -0,0 +1,28 @@
+From aba3143b9e5986f5ffef841864b3942013120de0 Mon Sep 17 00:00:00 2001
+From: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
+Date: Fri, 15 Jun 2012 10:32:39 +0100
+Subject: [PATCH 20/20] opusenc: add missing mutex unlock on error path
+
+---
+ ext/opus/gstopusenc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
+index 80b3fe8..4c05028 100644
+--- a/ext/opus/gstopusenc.c
++++ b/ext/opus/gstopusenc.c
+@@ -635,8 +635,10 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
+ opus_multistream_encoder_destroy (enc->state);
+ enc->state = NULL;
+ }
+- if (!gst_opus_enc_setup (enc))
++ if (!gst_opus_enc_setup (enc)) {
++ g_mutex_unlock (enc->property_lock);
+ return FALSE;
++ }
+
+ enc->frame_samples = gst_opus_enc_get_frame_samples (enc);
+
+--
+1.7.10.4
+
diff --git a/debian/patches/series b/debian/patches/series
index c209868..727411c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,13 @@
0001-vp8enc-fix-target-bitrate-config-with-libvpx-1.1.0.patch
99_ltmain_as-needed.patch
+0008-opusenc-configure-baseclass-requested-samples-really.patch
+0009-opusenc-only-request-and-process-1-frame-at-a-time.patch
+0010-opus-Handle-GstByteWriter-return-values.patch
+0011-opuspay-plug-buffer-leak.patch
+0012-opusdec-fix-lost-packet-handling-for-FEC-PLC.patch
+0013-opus-bump-written-version-from-0-to-0x01.patch
+0014-opus-reject-major-version-number-above-what-we-grok.patch
+0015-opusparse-heed-test-vector-framing-to-eat-any-paddin.patch
+0016-opusdec-do-not-assert-on-bad-header-error-out-instea.patch
+0017-opusdec-read-gain-from-the-right-place-in-the-header.patch
+0020-opusenc-add-missing-mutex-unlock-on-error-path.patch
--
GStreamer Bad Plugins 0.10 Packaging
More information about the Pkg-gstreamer-commits
mailing list