[FFmpeg-devel] [PATCH 1/2] avfilter/af_ladspa: refactor code setting input control ports values

Paul B Mahol onemda at gmail.com
Tue Sep 24 18:48:59 CEST 2013


Signed-off-by: Paul B Mahol <onemda at gmail.com>
---
 libavfilter/af_ladspa.c | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/libavfilter/af_ladspa.c b/libavfilter/af_ladspa.c
index d1e3e23..f25699e 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, int 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 < 0 || port >= s->nb_inputcontrols) {
+        av_log(ctx, AV_LOG_ERROR, "Control c%d 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%d 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%d 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
-- 
1.7.11.2



More information about the ffmpeg-devel mailing list