Make filter config parsers return int.
[paraslash.git] / compress.c
index dd77de8153d917f46f75df6ced1b580b55dd1386..22dcfd333c145a4a77e49ba3826c43b61828241b 100644 (file)
@@ -16,7 +16,7 @@
 #include "sched.h"
 #include "filter.h"
 #include "string.h"
-#include "audiod.h"
+#include "error.h"
 
 /** The size of the output data buffer. */
 #define COMPRESS_CHUNK_SIZE 40960
@@ -35,8 +35,6 @@ 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)
@@ -52,9 +50,8 @@ 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 = (PARA_ABS(sample) * (64 + pcd->amp)) >> 6;
-
-               adjusted_sample = (adjusted_sample * pcd->current_gain) >> gain_shift;
+               int sample = *ip++, adjusted_sample = (PARA_ABS(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);
@@ -87,13 +84,21 @@ static void close_compress(struct filter_node *fn)
        free(fn->buf);
 }
 
-static void *compress_parse_config(int argc, char **argv)
+/** TODO: Add sanity checks */
+static int compress_parse_config(int argc, char **argv, void **config)
 {
-       struct compress_filter_args_info *ret = para_calloc(sizeof(struct compress_filter_args_info));
-       if (!compress_cmdline_parser(argc, argv, ret))
-               return ret;
-       free(ret);
-       return NULL;
+       int ret;
+       struct compress_filter_args_info *compress_conf
+               = para_calloc(sizeof(*compress_conf));
+
+       ret = -E_COMPRESS_SYNTAX;
+       if (compress_cmdline_parser(argc, argv, compress_conf))
+               goto err;
+       *config = compress_conf;
+       return 1;
+err:
+       free(compress_conf);
+       return  ret;
 }
 
 static void open_compress(struct filter_node *fn)
@@ -106,10 +111,6 @@ 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);
 }
 
 /**