Skip to content

Commit 9bf4b4d

Browse files
committed
Fixes to math for level calculations
1 parent 0b212e2 commit 9bf4b4d

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

shared-module/audiomixer/Mixer.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ static inline uint32_t add16signed(uint32_t a, uint32_t b) {
110110
for (int8_t i = 0; i < 2; i++) {
111111
int16_t ai = a >> (sizeof(int16_t) * 8 * i);
112112
int16_t bi = b >> (sizeof(int16_t) * 8 * i);
113-
int32_t intermediate = (int32_t)ai + bi / 2;
113+
int32_t intermediate = (int32_t)ai + bi;
114114
if (intermediate > SHRT_MAX) {
115115
intermediate = SHRT_MAX;
116116
} else if (intermediate < SHRT_MIN) {
@@ -139,14 +139,15 @@ static inline uint32_t mult16signed(uint32_t val, int32_t mul) {
139139
uint32_t result = 0;
140140
float mod_mul = (float)mul / (float)((1 << 15) - 1);
141141
for (int8_t i = 0; i < 2; i++) {
142-
int16_t ai = (val >> (sizeof(uint16_t) * 8 * i)) - 0x8000;
142+
int16_t ai = (val >> (sizeof(uint16_t) * 8 * i));
143143
int32_t intermediate = ai * mod_mul;
144144
if (intermediate > SHRT_MAX) {
145145
intermediate = SHRT_MAX;
146146
} else if (intermediate < SHRT_MIN) {
147147
intermediate = SHRT_MIN;
148148
}
149-
result |= (((uint32_t)intermediate) + 0x8000) << (sizeof(int16_t) * 8 * i);
149+
intermediate &= 0x0000FFFF;
150+
result |= (((uint32_t)intermediate)) << (sizeof(int16_t) * 8 * i);
150151
}
151152
return result;
152153
#endif

0 commit comments

Comments
 (0)