Commit 40f59cac authored by Max Kellermann's avatar Max Kellermann

pcm: fixed software volume, broken by unsigned integer

"volume" was passed as an unsigned integer, which is correct. It's just that when it was multiplied with the sample value, the whole operation was changed to unsigned, breaking the algorithm (and Qball's ears). Internally change "volume" to signed.
parent ecc3c39e
...@@ -47,8 +47,7 @@ pcm_range(int32_t sample, unsigned bits) ...@@ -47,8 +47,7 @@ pcm_range(int32_t sample, unsigned bits)
} }
static void static void
pcm_volume_change_8(int8_t *buffer, unsigned num_samples, pcm_volume_change_8(int8_t *buffer, unsigned num_samples, int volume)
unsigned volume)
{ {
while (num_samples > 0) { while (num_samples > 0) {
int32_t sample = *buffer; int32_t sample = *buffer;
...@@ -61,8 +60,7 @@ pcm_volume_change_8(int8_t *buffer, unsigned num_samples, ...@@ -61,8 +60,7 @@ pcm_volume_change_8(int8_t *buffer, unsigned num_samples,
} }
static void static void
pcm_volume_change_16(int16_t *buffer, unsigned num_samples, pcm_volume_change_16(int16_t *buffer, unsigned num_samples, int volume)
unsigned volume)
{ {
while (num_samples > 0) { while (num_samples > 0) {
int32_t sample = *buffer; int32_t sample = *buffer;
...@@ -75,8 +73,7 @@ pcm_volume_change_16(int16_t *buffer, unsigned num_samples, ...@@ -75,8 +73,7 @@ pcm_volume_change_16(int16_t *buffer, unsigned num_samples,
} }
static void static void
pcm_volume_change_24(int32_t *buffer, unsigned num_samples, pcm_volume_change_24(int32_t *buffer, unsigned num_samples, int volume)
unsigned volume)
{ {
while (num_samples > 0) { while (num_samples > 0) {
int64_t sample = *buffer; int64_t sample = *buffer;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment