Browse Source

avfilter/af_ladspa: refactor code setting input control ports values

Signed-off-by: Paul B Mahol <onemda@gmail.com>
tags/n2.1
Paul B Mahol 12 years ago
parent
commit
4d86a945df
1 changed files with 37 additions and 24 deletions
  1. +37
    -24
      libavfilter/af_ladspa.c

+ 37
- 24
libavfilter/af_ladspa.c View File

@@ -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


Loading…
Cancel
Save