Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH] pulseaudio: rescale input being passed to float method of speex
@ 2013-12-24 14:37 Fahad Arslan
  2013-12-24 16:54 ` Saul Wold
  2013-12-26 11:57 ` Koen Kooi
  0 siblings, 2 replies; 12+ messages in thread
From: Fahad Arslan @ 2013-12-24 14:37 UTC (permalink / raw)
  To: openembedded-core

From: Fahad Arslan <Fahad_Arslan@mentor.com>

Pulseaudio uses Speex to do resampling. Default Pulseaudio resampler
is speex-float-1. However, Speex recipe in poky configures speex in
fixed point. This scenario creates a situation in which audio streams
that need to be resampled are not playedback since input to speex is
zeroed out when flaot input in range of +/-1 is converted to int.
So we are rescaling the input before invoking speex flaot method.

Upstream-Status: Submitted [pulseaudio-discuss@lists.freedesktop.org]

Signed-off-by: Fahad Arslan <Fahad_Arslan@mentor.com>
---
 .../pulseaudio/rescale_input_to_speex_float.patch  |   24 ++++++++++++++++++++
 .../pulseaudio/pulseaudio_4.0.bb                   |    3 ++-
 2 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-multimedia/pulseaudio/pulseaudio/rescale_input_to_speex_float.patch

diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/rescale_input_to_speex_float.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/rescale_input_to_speex_float.patch
new file mode 100644
index 0000000..fe5e6a7
--- /dev/null
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/rescale_input_to_speex_float.patch
@@ -0,0 +1,24 @@
+diff -Naur a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c
+--- a/src/pulsecore/resampler.c	2013-12-24 18:25:08.164787401 +0500
++++ b/src/pulsecore/resampler.c	2013-12-24 18:24:43.056787026 +0500
+@@ -1347,7 +1347,7 @@
+ 
+ static void speex_resample_float(pa_resampler *r, const pa_memchunk *input, unsigned in_n_frames, pa_memchunk *output, unsigned *out_n_frames) {
+     float *in, *out;
+-    uint32_t inf = in_n_frames, outf = *out_n_frames;
++    uint32_t inf = in_n_frames, outf = *out_n_frames, i;
+ 
+     pa_assert(r);
+     pa_assert(input);
+@@ -1357,6 +1357,11 @@
+     in = pa_memblock_acquire_chunk(input);
+     out = pa_memblock_acquire_chunk(output);
+ 
++    /* Speex float API scale range is +/-32768 instead of +/-1.
++       So rescale input before passing it to Speex. */
++    for (i = 0; i < inf; i++)
++        in[i] = 32768.*in[i];
++
+     pa_assert_se(speex_resampler_process_interleaved_float(r->speex.state, in, &inf, out, &outf) == 0);
+ 
+     pa_memblock_release(input->memblock);
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio_4.0.bb b/meta/recipes-multimedia/pulseaudio/pulseaudio_4.0.bb
index b419c54..5afa20b 100644
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio_4.0.bb
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio_4.0.bb
@@ -1,7 +1,8 @@
 require pulseaudio.inc
 
 SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-${PV}.tar.xz \
-           file://volatiles.04_pulse"
+           file://volatiles.04_pulse \
+           file://rescale_input_to_speex_float.patch"
 
 SRC_URI[md5sum] = "591f211db2790a7e4d222f2dc6858db3"
 SRC_URI[sha256sum] = "35ceb36bb1822fe54f0b5e4863b4f486769fdfb8ff2111f01fd8778928f9cdae"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2014-01-16 19:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-24 14:37 [PATCH] pulseaudio: rescale input being passed to float method of speex Fahad Arslan
2013-12-24 16:54 ` Saul Wold
2014-01-01 16:01   ` Arslan, Fahad
2014-01-02 18:47     ` Saul Wold
2014-01-07  9:59       ` Arslan, Fahad
2014-01-07 10:03         ` Koen Kooi
2014-01-07 10:22           ` Koen Kooi
2014-01-10  7:48             ` Arslan, Fahad
2014-01-10 15:33               ` Koen Kooi
2014-01-16 12:08                 ` Arslan, Fahad
2014-01-16 19:16                   ` Koen Kooi
2013-12-26 11:57 ` Koen Kooi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox