diff options
author | marxin <mliska@suse.cz> | 2019-03-05 21:32:18 +0100 |
---|---|---|
committer | marxin <mliska@suse.cz> | 2019-03-05 21:32:18 +0100 |
commit | c24f53d4f6088b0dad58f8a1028b7e70db6bd231 (patch) | |
tree | 01552654cb329d6debaf63571663cb68ab5ace93 | |
parent | c40877bc6ac81ecf0b8dc70ad1c708ac1b2bf167 (diff) |
Fix #25639 by not shifting a negative value.
-rw-r--r-- | servers/audio_server.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index 14c555ab5b..8c092a02a2 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -259,11 +259,13 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { float l = CLAMP(buf[from + j].l, -1.0, 1.0); int32_t vl = l * ((1 << 20) - 1); - p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 0] = vl << 11; + int32_t vl2 = (vl < 0 ? -1 : 1) * (ABS(vl) << 11); + p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 0] = vl2; float r = CLAMP(buf[from + j].r, -1.0, 1.0); int32_t vr = r * ((1 << 20) - 1); - p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 1] = vr << 11; + int32_t vr2 = (vr < 0 ? -1 : 1) * (ABS(vr) << 11); + p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 1] = vr2; } } else { |