On 12/24/2013 06:37 AM, Fahad Arslan wrote:
From: Fahad Arslan <fahad_ars...@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-disc...@lists.freedesktop.org]
Signed-off-by: Fahad Arslan <fahad_ars...@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
Fahad,
The patch itself is missing the Upstream-Status: and Signed-off-by:
Tags, I know you included them in the commit message above, but they
need to be in this patch file also.
Thanks
Sau!
@@ -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"
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core