[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