From: Andre Noll Date: Mon, 23 Jul 2018 08:52:14 +0000 (+0200) Subject: compress: Apply damping later. X-Git-Tag: v0.6.3~42^2~1 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=e0441a354b25f6fdd97480fe4e1f4f942347611f;hp=6b966e1df730ab787014b4bd5dd08214d3722bfe compress: Apply damping later. This changes the algorithm of the compress filter to apply the right shift defined by the --damp argument *after* the peak value of the current block has been computed. This makes damping orthogonal to the dynamic volume adjustments. However, we increase the downshift so that the initial value of the gain multiplier results in a right shift by one. Hence the expected peak value is 16384, so make this the default target gain. --- diff --git a/compress_filter.c b/compress_filter.c index f98fb413..0c76fd78 100644 --- a/compress_filter.c +++ b/compress_filter.c @@ -48,8 +48,7 @@ static int compress_post_select(__a_unused struct sched *s, void *context) size_t length, i; int16_t *ip, *op; uint32_t inertia = U32_OPTVAL(INERTIA, fn->lpr); - unsigned gain_shift = inertia + U32_OPTVAL(DAMP, fn->lpr), - mask = (1U << U32_OPTVAL(BLOCKSIZE, fn->lpr)) - 1U; + unsigned mask = (1U << U32_OPTVAL(BLOCKSIZE, fn->lpr)) - 1U; //inplace = false; next_buffer: ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL); @@ -78,7 +77,7 @@ next_buffer: neg = true; } sample *= pcd->current_gain; - sample >>= gain_shift; + sample >>= inertia + 1; if (sample > 32767) { /* clip */ PARA_WARNING_LOG("clip: %d\n", sample); sample = 32767; @@ -87,11 +86,13 @@ next_buffer: pcd->peak = 0; } else if (sample > pcd->peak) pcd->peak = sample; + sample >>= U32_OPTVAL(DAMP, fn->lpr); op[i] = neg? -sample : sample; if (++pcd->num_samples & mask) continue; // PARA_DEBUG_LOG("gain: %u, peak: %u\n", pcd->current_gain, // pcd->peak); + if (pcd->peak < U32_OPTVAL(TARGET_LEVEL, fn->lpr)) { if (pcd->current_gain < pcd->max_gain) pcd->current_gain++; diff --git a/m4/lls/filter_cmd.suite.m4 b/m4/lls/filter_cmd.suite.m4 index 1399de62..dece6e6e 100644 --- a/m4/lls/filter_cmd.suite.m4 +++ b/m4/lls/filter_cmd.suite.m4 @@ -61,7 +61,7 @@ caption = filters typestr = level arg_info = required_arg arg_type = uint32 - default_val = 20000 + default_val = 16384 [help] If the peak of the previous block is less than the target level, volume is increased slightly for the next block. Otherwise it is