diff -u pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/changelog pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/changelog --- pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/changelog +++ pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/changelog @@ -1,3 +1,11 @@ +pulseaudio (1:0.9.22~0.9.21+stable-queue-32-g8478-0ubuntu14.1) lucid-proposed; urgency=low + + * 0098-lp445849-highpitched-surround.patch: Backport patch from + maverick to fix Highpitched rattling like sound with 5.1 surround + configuration. (LP: #445849) + + -- David Henningsson Mon, 28 Mar 2011 17:19:50 +0200 + pulseaudio (1:0.9.22~0.9.21+stable-queue-32-g8478-0ubuntu14) lucid; urgency=low * 0096-lp451635-handle-dove-x0-line-hp-swap.patch: Make the connector diff -u pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/patches/series pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/patches/series --- pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/patches/series +++ pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/patches/series @@ -18,0 +19 @@ +0098-fix-lp445849-highpitched-surround.patch only in patch2: unchanged: --- pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478.orig/debian/patches/0098-fix-lp445849-highpitched-surround.patch +++ pulseaudio-0.9.22~0.9.21+stable-queue-32-g8478/debian/patches/0098-fix-lp445849-highpitched-surround.patch @@ -0,0 +1,108 @@ +From a8d76e99ff0b13f424b44433fb169df6735a5842 Mon Sep 17 00:00:00 2001 +From: David Henningsson +Date: Fri, 8 Oct 2010 18:47:00 +0200 +Subject: [PATCH] SSE/MMX/ARM: Fix high frequency noise with unusual number of channels + +In the assembly optimized versions of SSE, a noise could occur when the +number of channels were 3,5,6 or 7. For MMX and ARM, this could occur +when the number of channels were 3. + +Signed-off-by: David Henningsson +--- + src/pulsecore/svolume_arm.c | 5 ++++- + src/pulsecore/svolume_mmx.c | 14 ++++++++------ + src/pulsecore/svolume_sse.c | 19 +++++++++++++------ + 3 files changed, 25 insertions(+), 13 deletions(-) + +diff --git a/src/pulsecore/svolume_arm.c b/src/pulsecore/svolume_arm.c +index 5bd1448..fdd8f09 100644 +--- a/src/pulsecore/svolume_arm.c ++++ b/src/pulsecore/svolume_arm.c +@@ -47,7 +47,10 @@ pa_volume_s16ne_arm (int16_t *samples, int32_t *volumes, unsigned channels, unsi + { + int32_t *ve; + +- channels = PA_MAX (4U, channels); ++ /* Channels must be at least 4, and always a multiple of the original number. ++ * This is also the max amount we overread the volume array, which should ++ * have enough padding. */ ++ channels = channels == 3 ? 6 : PA_MAX (4U, channels); + ve = volumes + channels; + + __asm__ __volatile__ ( +diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c +index e50ebee..a71a39b 100644 +--- a/src/pulsecore/svolume_mmx.c ++++ b/src/pulsecore/svolume_mmx.c +@@ -98,9 +98,10 @@ pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi + { + pa_reg_x86 channel, temp; + +- /* the max number of samples we process at a time, this is also the max amount +- * we overread the volume array, which should have enough padding. */ +- channels = PA_MAX (4U, channels); ++ /* Channels must be at least 4, and always a multiple of the original number. ++ * This is also the max amount we overread the volume array, which should ++ * have enough padding. */ ++ channels = channels == 3 ? 6 : PA_MAX (4U, channels); + + __asm__ __volatile__ ( + " xor %3, %3 \n\t" +@@ -164,9 +165,10 @@ pa_volume_s16re_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi + { + pa_reg_x86 channel, temp; + +- /* the max number of samples we process at a time, this is also the max amount +- * we overread the volume array, which should have enough padding. */ +- channels = PA_MAX (4U, channels); ++ /* Channels must be at least 4, and always a multiple of the original number. ++ * This is also the max amount we overread the volume array, which should ++ * have enough padding. */ ++ channels = channels == 3 ? 6 : PA_MAX (4U, channels); + + __asm__ __volatile__ ( + " xor %3, %3 \n\t" +diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c +index 1cc4e0a..5983164 100644 +--- a/src/pulsecore/svolume_sse.c ++++ b/src/pulsecore/svolume_sse.c +@@ -74,14 +74,19 @@ + " por %%xmm4, "#s1" \n\t" /* .. | l h | */ \ + " por %%xmm5, "#s2" \n\t" + ++ ++static int channel_overread_table[8] = {8,8,8,12,8,10,12,14}; ++ + static void + pa_volume_s16ne_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length) + { + pa_reg_x86 channel, temp; + +- /* the max number of samples we process at a time, this is also the max amount +- * we overread the volume array, which should have enough padding. */ +- channels = PA_MAX (8U, channels); ++ /* Channels must be at least 8 and always a multiple of the original number. ++ * This is also the max amount we overread the volume array, which should ++ * have enough padding. */ ++ if (channels < 8) ++ channels = channel_overread_table[channels]; + + __asm__ __volatile__ ( + " xor %3, %3 \n\t" +@@ -159,9 +164,11 @@ pa_volume_s16re_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, uns + { + pa_reg_x86 channel, temp; + +- /* the max number of samples we process at a time, this is also the max amount +- * we overread the volume array, which should have enough padding. */ +- channels = PA_MAX (8U, channels); ++ /* Channels must be at least 8 and always a multiple of the original number. ++ * This is also the max amount we overread the volume array, which should ++ * have enough padding. */ ++ if (channels < 8) ++ channels = channel_overread_table[channels]; + + __asm__ __volatile__ ( + " xor %3, %3 \n\t" +-- +1.7.4.1