From: Andre Noll Date: Tue, 2 Apr 2013 15:02:09 +0000 (+0000) Subject: compress: Avoid PARA_ABS and PARA_MAX in inner loop. X-Git-Tag: v0.4.13~29^2~2 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=15a54f2ef3d6c33b15a1180332e63604e7cedc60;hp=28c03cbe5dbfae3a99869445408089d14b777577 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%. --- 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;