[FFmpeg-cvslog] avfilter/vf_vaguedenoiser: change thresholding to function pointers

Paul B Mahol git at videolan.org
Mon Sep 12 15:39:55 EEST 2016


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun Sep 11 23:12:10 2016 +0200| [dc669d5fbed20c2ceb68b45e3aafaefbf3c8871e] | committer: Paul B Mahol

avfilter/vf_vaguedenoiser: change thresholding to function pointers

Signed-off-by: Paul B Mahol <onemda at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dc669d5fbed20c2ceb68b45e3aafaefbf3c8871e
---

 libavfilter/vf_vaguedenoiser.c | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
index eca1191..5b3c6da 100644
--- a/libavfilter/vf_vaguedenoiser.c
+++ b/libavfilter/vf_vaguedenoiser.c
@@ -56,6 +56,10 @@ typedef struct VagueDenoiserContext {
     int hhighsize[32];
     int vlowsize[32];
     int vhighsize[32];
+
+    void (*thresholding)(float *block, const int width, const int height,
+                         const int stride, const float threshold,
+                         const float percent, const int nsteps);
 } VagueDenoiserContext;
 
 #define OFFSET(x) offsetof(VagueDenoiserContext, x)
@@ -308,7 +312,7 @@ static void invert_step(const float *input, float *output, float *temp, const in
 
 static void hard_thresholding(float *block, const int width, const int height,
                               const int stride, const float threshold,
-                              const float percent)
+                              const float percent, const int unused)
 {
     const float frac = 1.f - percent * 0.01f;
     int y, x;
@@ -351,7 +355,7 @@ static void soft_thresholding(float *block, const int width, const int height, c
 
 static void qian_thresholding(float *block, const int width, const int height,
                               const int stride, const float threshold,
-                              const float percent)
+                              const float percent, const int unused)
 {
     const float percent01 = percent * 0.01f;
     const float tr2 = threshold * threshold * percent01;
@@ -435,12 +439,7 @@ static void filter(VagueDenoiserContext *s, AVFrame *in, AVFrame *out)
             v_low_size0 = (v_low_size0 + 1) >> 1;
         }
 
-        if (s->method == 0)
-            hard_thresholding(s->block, width, height, width, s->threshold, s->percent);
-        else if (s->method == 1)
-            soft_thresholding(s->block, width, height, width, s->threshold, s->percent, s->nsteps);
-        else
-            qian_thresholding(s->block, width, height, width, s->threshold, s->percent);
+        s->thresholding(s->block, width, height, width, s->threshold, s->percent, s->nsteps);
 
         s->hlowsize[0]  = (width + 1) >> 1;
         s->hhighsize[0] = width >> 1;
@@ -520,6 +519,25 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
     return ff_filter_frame(outlink, out);
 }
 
+static av_cold int init(AVFilterContext *ctx)
+{
+    VagueDenoiserContext *s = ctx->priv;
+
+    switch (s->method) {
+    case 0:
+        s->thresholding = hard_thresholding;
+        break;
+    case 1:
+        s->thresholding = soft_thresholding;
+        break;
+    case 2:
+        s->thresholding = qian_thresholding;
+        break;
+    }
+
+    return 0;
+}
+
 static av_cold void uninit(AVFilterContext *ctx)
 {
     VagueDenoiserContext *s = ctx->priv;
@@ -554,6 +572,7 @@ AVFilter ff_vf_vaguedenoiser = {
     .description   = NULL_IF_CONFIG_SMALL("Apply a Wavelet based Denoiser."),
     .priv_size     = sizeof(VagueDenoiserContext),
     .priv_class    = &vaguedenoiser_class,
+    .init          = init,
     .uninit        = uninit,
     .query_formats = query_formats,
     .inputs        = vaguedenoiser_inputs,



More information about the ffmpeg-cvslog mailing list