From 4524d2408d085cca4af1a783f52174128e45b16c Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 6 Jul 2008 20:26:12 +0200 Subject: [PATCH] compress.c: Activate pre-amplification. Use the amplification value announced by para_server to pre-amplify the stream. --- compress.c | 14 +++++++++++--- filter.c | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/compress.c b/compress.c index a6c3d32a..dd77de81 100644 --- a/compress.c +++ b/compress.c @@ -16,10 +16,13 @@ #include "sched.h" #include "filter.h" #include "string.h" +#include "audiod.h" /** The size of the output data buffer. */ #define COMPRESS_CHUNK_SIZE 40960 +extern char *stat_item_values[NUM_STAT_ITEMS]; + /** Data specific to the compress filter. */ struct private_compress_data { /** The current multiplier. */ @@ -32,6 +35,8 @@ struct private_compress_data { unsigned num_samples; /** Absolute value of the maximal sample in the current block. */ unsigned peak; + /** Amplification factor. */ + unsigned amp; }; static ssize_t compress(char *inbuf, size_t inbuf_len, struct filter_node *fn) @@ -47,10 +52,9 @@ static ssize_t compress(char *inbuf, size_t inbuf_len, struct filter_node *fn) return 0; for (i = 0; i < length / 2; i++) { /* be careful in that heat, my dear */ - int sample = *ip++, adjusted_sample; + int sample = *ip++, adjusted_sample = (PARA_ABS(sample) * (64 + pcd->amp)) >> 6; - adjusted_sample = (PARA_ABS(sample) * pcd->current_gain) - >> gain_shift; + adjusted_sample = (adjusted_sample * pcd->current_gain) >> gain_shift; if (unlikely(adjusted_sample > 32767)) { /* clip */ PARA_NOTICE_LOG("clip: sample: %d, adjusted sample: %d\n", sample, adjusted_sample); @@ -102,6 +106,10 @@ static void open_compress(struct filter_node *fn) fn->buf = para_malloc(fn->bufsize); pcd->current_gain = 1 << pcd->conf->inertia_arg; pcd->max_gain = 1 << (pcd->conf->inertia_arg + pcd->conf->aggressiveness_arg); + if (stat_item_values[SI_AMPLIFICATION]) + sscanf(stat_item_values[SI_AMPLIFICATION], "%u", &pcd->amp); + PARA_NOTICE_LOG("amplification: %u (scaling factor: %1.2f)\n", pcd->amp, + pcd->amp / 64.0 + 1.0); } /** diff --git a/filter.c b/filter.c index 939f9b56..bab827d3 100644 --- a/filter.c +++ b/filter.c @@ -17,6 +17,8 @@ #include "stdout.h" #include "error.h" +char *stat_item_values[NUM_STAT_ITEMS] = {NULL}; + /** Initialize the array of errors for para_filter. */ INIT_FILTER_ERRLISTS; -- 2.39.5