]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: dmix: fix wrong scaling in 32bits pcm mixing
authorKatsuhiro Suzuki <katsuhiro@katsuster.net>
Thu, 28 Apr 2022 16:17:27 +0000 (01:17 +0900)
committerJaroslav Kysela <perex@perex.cz>
Fri, 20 May 2022 08:01:10 +0000 (10:01 +0200)
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 <katsuhiro@katsuster.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_dmix_generic.c

index 8a5b6f148556fa6414e8e2170624feba75cea92d..701c66c9479f3ac540656c3b02574bf3d15be0a2 100644 (file)
@@ -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);