summaryrefslogtreecommitdiff
path: root/libavfilter/af_ladspa.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2013-09-24 16:08:17 +0000
committerPaul B Mahol <onemda@gmail.com>2013-09-27 12:49:54 +0000
commit4d86a945dfe7c31dfdc0f27f3df1579f07ed6b17 (patch)
treeb365f202cc92a2570a2cb4a7de21dcddb4dd3c05 /libavfilter/af_ladspa.c
parentd8d235ffe9c13ed129010f3d367a341fab448839 (diff)
avfilter/af_ladspa: refactor code setting input control ports values
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/af_ladspa.c')
-rw-r--r--libavfilter/af_ladspa.c61
1 files changed, 37 insertions, 24 deletions
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