From 4d86a945dfe7c31dfdc0f27f3df1579f07ed6b17 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Tue, 24 Sep 2013 16:08:17 +0000 Subject: avfilter/af_ladspa: refactor code setting input control ports values Signed-off-by: Paul B Mahol --- libavfilter/af_ladspa.c | 61 ++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 24 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/af_ladspa.c b/libavfilter/af_ladspa.c index d1e3e23721..45f17ffbf3 100644 --- a/libavfilter/af_ladspa.c +++ b/libavfilter/af_ladspa.c @@ -349,6 +349,40 @@ static void *try_load(const char *dir, const char *soname) return ret; } +static int set_control(AVFilterContext *ctx, unsigned long port, LADSPA_Data value) +{ + LADSPAContext *s = ctx->priv; + const char *label = s->desc->Label; + LADSPA_PortRangeHint *h = (LADSPA_PortRangeHint *)s->desc->PortRangeHints + + s->icmap[port]; + + if (port >= s->nb_inputcontrols) { + av_log(ctx, AV_LOG_ERROR, "Control c%ld is out of range [0 - %lu].\n", + port, s->nb_inputcontrols); + return AVERROR(EINVAL); + } + + if (LADSPA_IS_HINT_BOUNDED_BELOW(h->HintDescriptor) && + value < h->LowerBound) { + av_log(ctx, AV_LOG_ERROR, + "%s: input control c%ld is below lower boundary of %0.4f.\n", + label, port, h->LowerBound); + return AVERROR(EINVAL); + } + + if (LADSPA_IS_HINT_BOUNDED_ABOVE(h->HintDescriptor) && + value > h->UpperBound) { + av_log(ctx, AV_LOG_ERROR, + "%s: input control c%ld is above upper boundary of %0.4f.\n", + label, port, h->UpperBound); + return AVERROR(EINVAL); + } + + s->ictlv[port] = value; + + return 0; +} + static av_cold int init(AVFilterContext *ctx) { LADSPAContext *s = ctx->priv; @@ -495,8 +529,8 @@ static av_cold int init(AVFilterContext *ctx) // Parse control parameters p = s->options; while (s->options) { - LADSPA_PortRangeHint *h; LADSPA_Data val; + int ret; if (!(arg = av_strtok(p, "|", &saveptr))) break; @@ -507,30 +541,9 @@ static av_cold int init(AVFilterContext *ctx) return AVERROR(EINVAL); } - if (i < 0 || i >= s->nb_inputcontrols) { - av_log(ctx, AV_LOG_ERROR, - "Control c%d is out of range [0 - %lu].\n", - i, s->nb_inputcontrols); - return AVERROR(EINVAL); - } - - h = (LADSPA_PortRangeHint *)s->desc->PortRangeHints + s->icmap[i]; - s->ictlv[i] = val; + if ((ret = set_control(ctx, i, val)) < 0) + return ret; s->ctl_needs_value[i] = 0; - if (LADSPA_IS_HINT_BOUNDED_BELOW(h->HintDescriptor) && - val < h->LowerBound) { - av_log(ctx, AV_LOG_ERROR, - "%s: input control c%d is below lower boundary of %0.4f.\n", - s->desc->Label, i, h->LowerBound); - return AVERROR(EINVAL); - } - if (LADSPA_IS_HINT_BOUNDED_ABOVE(h->HintDescriptor) && - val > h->UpperBound) { - av_log(ctx, AV_LOG_ERROR, - "%s: input control c%d is above upper boundary of %0.4f.\n", - s->desc->Label, i, h->UpperBound); - return AVERROR(EINVAL); - } } // Check if any controls are not set -- cgit v1.2.3