From a5f75b49493c686c2a95f5b7e775fa6db1d78e90 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Tue, 5 Jan 2021 19:53:41 -0500 Subject: Fix issue with diffs being incorrect with extreme values. --- tools/aif2pcm/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tools/aif2pcm/main.c') diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c index af24c417f..5acdd324c 100644 --- a/tools/aif2pcm/main.c +++ b/tools/aif2pcm/main.c @@ -425,6 +425,7 @@ struct Bytes *delta_decompress(struct Bytes *delta, unsigned int expected_length } #define U8_TO_S8(value) ((value) < 128 ? (value) : (value) - 256) +#define ABS(value) ((value) >= 0 ? (value) : -(value)) int get_delta_index(uint8_t sample, uint8_t prev_sample) { @@ -447,9 +448,8 @@ int get_delta_index(uint8_t sample, uint8_t prev_sample) for (int i = delta_table_start_index; i < delta_table_end_index; i++) { uint8_t new_sample = prev_sample + gDeltaEncodingTable[i]; - uint8_t sample_diff_1 = (sample - new_sample) & 0xff; - uint8_t sample_diff_2 = (new_sample - sample) & 0xff; - int error = sample_diff_1 < sample_diff_2 ? sample_diff_1 : sample_diff_2; + int new_sample_signed = U8_TO_S8(new_sample); + error = ABS(new_sample_signed - sample_signed); if (error < best_error) { -- cgit v1.2.3