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);
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;
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++;
fn->private_data = pcd;
fn->min_iqs = 2; /* 16 bit audio */
pcd->current_gain = 1U << inertia;
- pcd->max_gain = 1U << (inertia + aggressiveness);
+ pcd->max_gain = (1U << inertia) * (1.0 + 3.0 * aggressiveness / 10.0);
}
static void *compress_setup(const struct lls_parse_result *lpr)
exit(EXIT_FAILURE);
}
val = U32_OPTVAL(AGGRESSIVENESS, lpr);
- if (val == 0 || val > 15) {
+ if (val > 10) {
PARA_EMERG_LOG("aggressiveness (%u) out of range\n", val);
exit(EXIT_FAILURE);
}
val = U32_OPTVAL(INERTIA, lpr);
- if (val == 0 || val > 15) {
+ if (val == 0 || val > 14) {
PARA_EMERG_LOG("inertia (%u) out of range\n", val);
exit(EXIT_FAILURE);
}
- val = U32_OPTVAL(AGGRESSIVENESS, lpr) + U32_OPTVAL(INERTIA, lpr);
- if (val > 16) {
- PARA_EMERG_LOG("inertia + aggressiveness (%u) > 16\n", val);
- exit(EXIT_FAILURE);
- }
val = U32_OPTVAL(TARGET_LEVEL, lpr);
if (val > 32767) {
PARA_EMERG_LOG("target-level (%u) out of range\n", val);