]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - resample_filter.c
doxygen: Avoid segfault.
[paraslash.git] / resample_filter.c
index e630596aaf9a244038b608533310c62e16763cca..72a1864eeafb69982cc1f0e49a1013eb81872341 100644 (file)
@@ -126,13 +126,25 @@ static int resample_set_params(struct filter_node *fn)
 
 static int resample_init(struct filter_node *fn)
 {
-       int ret, converter = *(int *)fn->conf;
+       int ret;
+       const uint32_t trafo[] = {
+               [RCT_BEST] = SRC_SINC_BEST_QUALITY,
+               [RCT_MEDIUM] = SRC_SINC_MEDIUM_QUALITY,
+               [RCT_FASTEST] = SRC_SINC_FASTEST,
+               [RCT_ZERO_ORDER_HOLD] = SRC_ZERO_ORDER_HOLD,
+               [RCT_LINEAR] = SRC_LINEAR
+       };
        struct resample_context *ctx = fn->private_data;
+       const struct lls_option *o_c = FILTER_CMD_OPT(RESAMPLE, CONVERTER);
+       uint32_t converter = U32_OPTVAL(CONVERTER, fn->lpr);
 
+       PARA_INFO_LOG("converter type: %s\n",
+               lls_enum_string_val(converter, o_c));
        ret = resample_set_params(fn);
        if (ret < 0)
                return ret;
-       ctx->src_state = src_new(converter, U32_OPTVAL(CHANNELS, fn->lpr), &ret);
+       ctx->src_state = src_new(trafo[converter],
+               U32_OPTVAL(CHANNELS, fn->lpr), &ret);
        if (!ctx->src_state) {
                PARA_ERROR_LOG("%s\n", src_strerror(ret));
                return -E_LIBSAMPLERATE;
@@ -233,8 +245,7 @@ out:
 
 static void *resample_setup(const struct lls_parse_result *lpr)
 {
-       int given, *converter;
-       const char *converter_arg;
+       int given;
        uint32_t u32;
 
        /* sanity checks */
@@ -256,23 +267,7 @@ static void *resample_setup(const struct lls_parse_result *lpr)
                PARA_EMERG_LOG("fatal: destination sample rate can not be 0\n");
                exit(EXIT_FAILURE);
        }
-       converter = para_malloc(sizeof(int));
-       converter_arg = FILTER_CMD_OPT_STRING_VAL(RESAMPLE, CONVERTER, lpr);
-       if (!strcmp(converter_arg, "best"))
-               *converter = SRC_SINC_BEST_QUALITY;
-       else if (!strcmp(converter_arg, "medium"))
-               *converter = SRC_SINC_MEDIUM_QUALITY;
-       else if (!strcmp(converter_arg, "fastest"))
-               *converter = SRC_SINC_FASTEST;
-       else if (!strcmp(converter_arg, "zero_order_hold"))
-               *converter = SRC_ZERO_ORDER_HOLD;
-       else if (!strcmp(converter_arg, "linear"))
-               *converter = SRC_LINEAR;
-       else {
-               PARA_EMERG_LOG("invalid converter type: %s\n", converter_arg);
-               exit(EXIT_FAILURE);
-       }
-       return converter;
+       return NULL;
 }
 
 static void resample_teardown(__a_unused const struct lls_parse_result *lpr,