[Pkg-gstreamer-commits] [gst-plugins-bad1.0] 01/01: Fix compilation on armel, where soundtouch is compiled as an integer version instead of floats as everywhere else

Sebastian Dröge slomo at alioth.debian.org
Mon Sep 2 09:07:45 UTC 2013


This is an automated email from the git hooks/post-receive script.

slomo pushed a commit to branch debian-experimental
in repository gst-plugins-bad1.0.

commit 2a8581e34981af40c1cc5f501dab1607c099fedd
Author: Sebastian Dröge <slomo at circular-chaos.org>
Date:   Mon Sep 2 10:38:44 2013 +0200

    Fix compilation on armel, where soundtouch is compiled as an integer version instead of floats as everywhere else
---
 debian/changelog                       |    8 ++
 debian/patches/02_soundtouch-int.patch |  234 ++++++++++++++++++++++++++++++++
 debian/patches/series                  |    1 +
 3 files changed, 243 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 12aca15..82b3f4f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+gst-plugins-bad1.0 (1.1.4-2) experimental; urgency=low
+
+  * debian/patches/02_soundtouch-int.patch:
+    + Fix compilation on armel, where soundtouch is compiled as an integer
+      version instead of floats as everywhere else.
+
+ -- Sebastian Dröge <slomo at debian.org>  Mon, 02 Sep 2013 10:38:03 +0200
+
 gst-plugins-bad1.0 (1.1.4-1) experimental; urgency=low
 
   * New upstream development snapshot:
diff --git a/debian/patches/02_soundtouch-int.patch b/debian/patches/02_soundtouch-int.patch
new file mode 100644
index 0000000..028a5a1
--- /dev/null
+++ b/debian/patches/02_soundtouch-int.patch
@@ -0,0 +1,234 @@
+From 576b4826c80a3b4ca4fa946a42732e7c599d312f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <slomo at circular-chaos.org>
+Date: Mon, 2 Sep 2013 10:29:08 +0200
+Subject: [PATCH] soundtouch: Allow compilation against float and integer
+ version of the library
+
+https://bugzilla.gnome.org/show_bug.cgi?id=707270
+---
+ ext/soundtouch/gstbpmdetect.cc | 31 +++++++++++++++---------
+ ext/soundtouch/gstpitch.cc     | 53 ++++++++++++++++++++----------------------
+ ext/soundtouch/gstpitch.hh     |  5 ++--
+ 3 files changed, 47 insertions(+), 42 deletions(-)
+
+diff --git a/ext/soundtouch/gstbpmdetect.cc b/ext/soundtouch/gstbpmdetect.cc
+index cb21e4c..79f7658 100644
+--- a/ext/soundtouch/gstbpmdetect.cc
++++ b/ext/soundtouch/gstbpmdetect.cc
+@@ -31,7 +31,6 @@
+ #undef PACKAGE_BUGREPORT
+ #undef PACKAGE
+ 
+-#define FLOAT_SAMPLES 1
+ #include <soundtouch/BPMDetect.h>
+ 
+ #include <gst/audio/audio.h>
+@@ -55,11 +54,21 @@ struct _GstBPMDetectPrivate
+ #endif
+ };
+ 
+-#define ALLOWED_CAPS \
+-    "audio/x-raw, "                                           \
+-    " format = (string) " GST_AUDIO_NE (F32) ", "             \
+-    " rate = (int) [ 8000, MAX ], "                           \
+-    " channels = (int) [ 1, 2 ]"
++#if defined(SOUNDTOUCH_FLOAT_SAMPLES)
++  #define ALLOWED_CAPS \
++    "audio/x-raw, " \
++      "format = (string) " GST_AUDIO_NE (F32) ", " \
++      "rate = (int) [ 8000, MAX ], " \
++      "channels = (int) [ 1, 2 ]"
++#elif defined(SOUNDTOUCH_INTEGER_SAMPLES)
++  #define ALLOWED_CAPS \
++    "audio/x-raw, " \
++      "format = (string) " GST_AUDIO_NE (S16) ", " \
++      "rate = (int) [ 8000, MAX ], " \
++      "channels = (int) [ 1, 2 ]"
++#else
++#error "Only integer or float samples are supported"
++#endif
+ 
+ #define gst_bpm_detect_parent_class parent_class
+ G_DEFINE_TYPE (GstBPMDetect, gst_bpm_detect, GST_TYPE_AUDIO_FILTER);
+@@ -209,13 +218,13 @@ gst_bpm_detect_transform_ip (GstBaseTransform * trans, GstBuffer * in)
+ 
+   gst_buffer_map (in, &info, GST_MAP_READ);
+ 
+-  nsamples = info.size / (4 * GST_AUDIO_INFO_CHANNELS (&filter->info));
++  nsamples = info.size / (GST_AUDIO_INFO_BPF (&filter->info) * GST_AUDIO_INFO_CHANNELS (&filter->info));
+ 
+   /* For stereo BPMDetect->inputSamples() does downmixing into the input
+    * data but our buffer data shouldn't be modified.
+    */
+   if (GST_AUDIO_INFO_CHANNELS (&filter->info) == 1) {
+-    gfloat *inbuf = (gfloat *) info.data;
++    soundtouch::SAMPLETYPE *inbuf = (soundtouch::SAMPLETYPE *) info.data;
+ 
+     while (nsamples > 0) {
+       bpm_detect->priv->detect->inputSamples (inbuf, MIN (nsamples, 2048));
+@@ -223,13 +232,13 @@ gst_bpm_detect_transform_ip (GstBaseTransform * trans, GstBuffer * in)
+       inbuf += 2048;
+     }
+   } else {
+-    gfloat *inbuf, *intmp, data[2 * 2048];
++    soundtouch::SAMPLETYPE *inbuf, *intmp, data[2 * 2048];
+ 
+-    inbuf = (gfloat *) info.data;
++    inbuf = (soundtouch::SAMPLETYPE *) info.data;
+     intmp = data;
+ 
+     while (nsamples > 0) {
+-      memcpy (intmp, inbuf, sizeof (gfloat) * 2 * MIN (nsamples, 2048));
++      memcpy (intmp, inbuf, sizeof (soundtouch::SAMPLETYPE) * 2 * MIN (nsamples, 2048));
+       bpm_detect->priv->detect->inputSamples (intmp, MIN (nsamples, 2048));
+       nsamples -= 2048;
+       inbuf += 2048 * 2;
+diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
+index fd36d21..1235b31 100644
+--- a/ext/soundtouch/gstpitch.cc
++++ b/ext/soundtouch/gstpitch.cc
+@@ -31,7 +31,6 @@
+ #undef PACKAGE_BUGREPORT
+ #undef PACKAGE
+ 
+-#define FLOAT_SAMPLES 1
+ #include <soundtouch/SoundTouch.h>
+ 
+ #include <gst/gst.h>
+@@ -62,11 +61,21 @@ enum
+   ARG_PITCH
+ };
+ 
+-#define SUPPORTED_CAPS \
+-  "audio/x-raw, " \
+-    "format = (string) " GST_AUDIO_NE (F32) ", " \
+-    "rate = (int) [ 8000, MAX ], " \
+-    "channels = (int) [ 1, 2 ]"
++#if defined(SOUNDTOUCH_FLOAT_SAMPLES)
++  #define SUPPORTED_CAPS \
++    "audio/x-raw, " \
++      "format = (string) " GST_AUDIO_NE (F32) ", " \
++      "rate = (int) [ 8000, MAX ], " \
++      "channels = (int) [ 1, 2 ]"
++#elif defined(SOUNDTOUCH_INTEGER_SAMPLES)
++  #define SUPPORTED_CAPS \
++    "audio/x-raw, " \
++      "format = (string) " GST_AUDIO_NE (S16) ", " \
++      "rate = (int) [ 8000, MAX ], " \
++      "channels = (int) [ 1, 2 ]"
++#else
++#error "Only integer or float samples are supported"
++#endif
+ 
+ static GstStaticPadTemplate gst_pitch_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+@@ -294,29 +303,17 @@ static gboolean
+ gst_pitch_setcaps (GstPitch * pitch, GstCaps * caps)
+ {
+   GstPitchPrivate *priv;
+-  GstStructure *structure;
+-  gint rate, channels;
+ 
+   priv = GST_PITCH_GET_PRIVATE (pitch);
+ 
+-  structure = gst_caps_get_structure (caps, 0);
+-
+-  if (!gst_structure_get_int (structure, "rate", &rate) ||
+-      !gst_structure_get_int (structure, "channels", &channels)) {
++  if (gst_audio_info_from_caps (&pitch->info, caps))
+     return FALSE;
+-  }
+ 
+   GST_OBJECT_LOCK (pitch);
+ 
+-  pitch->samplerate = rate;
+-  pitch->channels = channels;
+-
+   /* notify the soundtouch instance of this change */
+-  priv->st->setSampleRate (rate);
+-  priv->st->setChannels (channels);
+-
+-  /* calculate sample size */
+-  pitch->sample_size = (sizeof (gfloat) * channels);
++  priv->st->setSampleRate (pitch->info.rate);
++  priv->st->setChannels (pitch->info.channels);
+ 
+   GST_OBJECT_UNLOCK (pitch);
+ 
+@@ -361,10 +358,10 @@ gst_pitch_prepare_buffer (GstPitch * pitch)
+   if (samples == 0)
+     return NULL;
+ 
+-  buffer = gst_buffer_new_and_alloc (samples * pitch->sample_size);
++  buffer = gst_buffer_new_and_alloc (samples * pitch->info.bpf);
+ 
+   gst_buffer_map (buffer, &info, (GstMapFlags) GST_MAP_READWRITE);
+-  samples = priv->st->receiveSamples ((gfloat *) info.data, samples);
++  samples = priv->st->receiveSamples ((soundtouch::SAMPLETYPE *) info.data, samples);
+   gst_buffer_unmap (buffer, &info);
+ 
+   if (samples <= 0) {
+@@ -373,7 +370,7 @@ gst_pitch_prepare_buffer (GstPitch * pitch)
+   }
+ 
+   GST_BUFFER_DURATION (buffer) =
+-      gst_util_uint64_scale (samples, GST_SECOND, pitch->samplerate);
++      gst_util_uint64_scale (samples, GST_SECOND, pitch->info.rate);
+   /* temporary store samples here, to avoid having to recalculate this */
+   GST_BUFFER_OFFSET (buffer) = (gint64) samples;
+ 
+@@ -471,8 +468,8 @@ gst_pitch_convert (GstPitch * pitch,
+   g_return_val_if_fail (dst_format && dst_value, FALSE);
+ 
+   GST_OBJECT_LOCK (pitch);
+-  sample_size = pitch->sample_size;
+-  samplerate = pitch->samplerate;
++  sample_size = pitch->info.bpf;
++  samplerate = pitch->info.rate;
+   GST_OBJECT_UNLOCK (pitch);
+ 
+   if (sample_size == 0 || samplerate == 0) {
+@@ -847,7 +844,7 @@ gst_pitch_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+ 
+   /* push the received samples on the soundtouch buffer */
+   GST_LOG_OBJECT (pitch, "incoming buffer (%d samples) %" GST_TIME_FORMAT,
+-      (gint) (gst_buffer_get_size (buffer) / pitch->sample_size),
++      (gint) (gst_buffer_get_size (buffer) / pitch->info.bpf),
+       GST_TIME_ARGS (timestamp));
+ 
+   if (GST_PITCH_GET_PRIVATE (pitch)->pending_segment) {
+@@ -872,7 +869,7 @@ gst_pitch_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+   }
+ 
+   gst_buffer_map (buffer, &info, GST_MAP_READ);
+-  priv->st->putSamples ((gfloat *) info.data, info.size / pitch->sample_size);
++  priv->st->putSamples ((soundtouch::SAMPLETYPE *) info.data, info.size / pitch->info.bpf);
+   gst_buffer_unmap (buffer, &info);
+   gst_buffer_unref (buffer);
+ 
+diff --git a/ext/soundtouch/gstpitch.hh b/ext/soundtouch/gstpitch.hh
+index ad1f7f6..1efb59b 100644
+--- a/ext/soundtouch/gstpitch.hh
++++ b/ext/soundtouch/gstpitch.hh
+@@ -21,6 +21,7 @@
+ #define __GST_PITCH_H__
+ 
+ #include <gst/gst.h>
++#include <gst/audio/audio.h>
+ 
+ G_BEGIN_DECLS
+ 
+@@ -71,9 +72,7 @@ struct _GstPitch
+   gfloat  seg_arate;            /* Rate to apply from input segment */
+ 
+   /* values extracted from caps */
+-  gint          samplerate;      /* samplerate                           */
+-  gint          channels;        /* number of audio channels             */
+-  gsize         sample_size;     /* number of bytes for a single sample  */
++  GstAudioInfo  info;
+ 
+   /* stream tracking */
+   GstClockTime  next_buffer_time;
+-- 
+1.8.4
+
diff --git a/debian/patches/series b/debian/patches/series
index d02a58f..aa26555 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 01_fix-modplug-linking.patch
+02_soundtouch-int.patch
 99_ltmain_as-needed.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gstreamer/gst-plugins-bad1.0.git



More information about the Pkg-gstreamer-commits mailing list