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 @@ -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 _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core