summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-01-05 19:53:41 -0500
committerluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-01-05 19:53:41 -0500
commita5f75b49493c686c2a95f5b7e775fa6db1d78e90 (patch)
tree12b7e86cee2cec91138ddd27fa37bc3fabfdc9d7
parent8855623ad01711f3a997bd111c3cfe31becffeaa (diff)
Fix issue with diffs being incorrect with extreme values.
-rw-r--r--tools/aif2pcm/main.c6
1 files changed, 3 insertions, 3 deletions
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)
{