X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=resample_filter.c;h=72a1864eeafb69982cc1f0e49a1013eb81872341;hp=e630596aaf9a244038b608533310c62e16763cca;hb=e79198e9851faddfd64e47654b5bc66fbc574255;hpb=4adde8dae3317fa83b81e7a860c9ed9133e99bb0 diff --git a/resample_filter.c b/resample_filter.c index e630596a..72a1864e 100644 --- a/resample_filter.c +++ b/resample_filter.c @@ -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,