diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2013-09-02 10:39:53 +0200 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2013-09-02 10:39:53 +0200 |
commit | 71d41db99cef8c64e934388b76a0362cecb0265f (patch) | |
tree | c2840ea78c1300c930b69cd12f40bb5607c602f9 | |
parent | 0e8e0d357a7b132a2c09b989c73396f34d02a4b9 (diff) |
Fix compilation on armel, where soundtouch is compiled as an integer version instead of floats as everywhere elsedebian/1.0.10-2
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | debian/patches/02_soundtouch-int.patch | 234 | ||||
-rw-r--r-- | debian/patches/series | 1 |
3 files changed, 243 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 589a16f7..2e54f2b9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +gst-plugins-bad1.0 (1.0.10-2) unstable; 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@debian.org> Mon, 02 Sep 2013 10:38:03 +0200 + gst-plugins-bad1.0 (1.0.10-1) unstable; urgency=low * New upstream bugfix release. diff --git a/debian/patches/02_soundtouch-int.patch b/debian/patches/02_soundtouch-int.patch new file mode 100644 index 00000000..028a5a11 --- /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@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 d02a58f9..aa26555b 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 |