From: Katsuhiro Suzuki Date: Thu, 28 Apr 2022 16:17:27 +0000 (+0900) Subject: pcm: dmix: fix wrong scaling in 32bits pcm mixing X-Git-Tag: v1.2.7~11 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=b62fc061e4833b12286a5f9b2e78894b614ce3fb;p=alsa-lib.git pcm: dmix: fix wrong scaling in 32bits pcm mixing Generic mixing function for 32bits pcm has used 8bits right shift for pre-scaling. But this is generating wrong result if pcm data is negative value because return value type of bswap_32() is unsigned int. This patch adds type cast bswap_32() result to signed int. Fixes: https://github.com/alsa-project/alsa-lib/pull/222 Signed-off-by: Katsuhiro Suzuki Signed-off-by: Jaroslav Kysela --- diff --git a/src/pcm/pcm_dmix_generic.c b/src/pcm/pcm_dmix_generic.c index 8a5b6f14..701c66c9 100644 --- a/src/pcm/pcm_dmix_generic.c +++ b/src/pcm/pcm_dmix_generic.c @@ -330,7 +330,7 @@ static void generic_mix_areas_32_swap(unsigned int size, register signed int sample; for (;;) { - sample = bswap_32(*src) >> 8; + sample = (signed int) bswap_32(*src) >> 8; if (! *dst) { *sum = sample; *dst = *src; @@ -364,7 +364,7 @@ static void generic_remix_areas_32_swap(unsigned int size, register signed int sample; for (;;) { - sample = bswap_32(*src) >> 8; + sample = (signed int) bswap_32(*src) >> 8; if (! *dst) { *sum = -sample; *dst = bswap_32(-sample);