X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=compress.c;h=dd77de8153d917f46f75df6ced1b580b55dd1386;hp=a6c3d32a18990719f454c971a1ead2de46659e0e;hb=4524d2408d085cca4af1a783f52174128e45b16c;hpb=4173e7c1c653ec48e7676a2872ce9b4328a2fbcc 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); } /**