diff options
author | Katsuhiro Suzuki <katsuhiro@katsuster.net> | 2022-04-29 01:17:27 +0900 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2022-05-20 10:01:10 +0200 |
commit | b62fc061e4833b12286a5f9b2e78894b614ce3fb (patch) | |
tree | 2328669da017b1f77ee4b69e4971aa643aaad32f | |
parent | a513e65e1919d9cd4df5e43f595414e5cf16270e (diff) | |
download | alsa-lib-b62fc061e4833b12286a5f9b2e78894b614ce3fb.tar.gz |
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 <katsuhiro@katsuster.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/pcm/pcm_dmix_generic.c | 4 |
1 files changed, 2 insertions, 2 deletions
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); |