X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=compress.c;h=8e2f07c9c4f3342e2984c5b4b8b2a0b047bb038c;hp=a6c3d32a18990719f454c971a1ead2de46659e0e;hb=cec9a9348c155e285eb94f024b263d52e1735301;hpb=2fe91861ddba9c5aa75109b4fe3504d998eaf330 diff --git a/compress.c b/compress.c index a6c3d32a..8e2f07c9 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,13 @@ 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]) { + int i = SI_AMPLIFICATION; + char *s = stat_item_values[i] + strlen(status_item_list[i]) + 1; + sscanf(s, "%u", &pcd->amp); + } + PARA_NOTICE_LOG("amplification: %u (scaling factor: %1.2f)\n", pcd->amp, + pcd->amp / 64.0 + 1.0); } /**