From 15a54f2ef3d6c33b15a1180332e63604e7cedc60 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 2 Apr 2013 15:02:09 +0000 Subject: [PATCH] compress: Avoid PARA_ABS and PARA_MAX in inner loop. These macros are type-safe and evaluate their arguments only once. However, they are also slow. For the compress filter we are dealing with ints and unsigned ints only, so the additional checks performed by the macros only slow things down. Getting rid of the macros reduces the running time of para_filter -f compress < foo.wav > /dev/null by approximately 8%. --- compress_filter.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/compress_filter.c b/compress_filter.c index 04377b75..cf55985c 100644 --- a/compress_filter.c +++ b/compress_filter.c @@ -75,8 +75,11 @@ next_buffer: op = para_malloc(length); for (i = 0; i < length / 2; i++) { /* be careful in that heat, my dear */ - int sample = *ip++, adjusted_sample = (PARA_ABS(sample) * - pcd->current_gain) >> gain_shift; + int sample = *ip++, adjusted_sample; + + adjusted_sample = sample > 0? sample : -sample; + adjusted_sample *= pcd->current_gain; + adjusted_sample >>= gain_shift; if (adjusted_sample > 32767) { /* clip */ PARA_NOTICE_LOG("clip: sample: %d, adjusted sample: %d\n", sample, adjusted_sample); @@ -84,8 +87,8 @@ next_buffer: pcd->current_gain = (3 * pcd->current_gain + (1 << pcd->conf->inertia_arg)) / 4; pcd->peak = 0; - } else - pcd->peak = PARA_MAX(pcd->peak, adjusted_sample); + } else if (adjusted_sample > pcd->peak) + pcd->peak = adjusted_sample; op[i] = sample >= 0? adjusted_sample : -adjusted_sample; if (++pcd->num_samples & mask) continue; -- 2.39.5