summaryrefslogtreecommitdiff
path: root/libavfilter/vf_vaguedenoiser.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2016-09-11 23:12:10 +0200
committerPaul B Mahol <onemda@gmail.com>2016-09-12 14:38:45 +0200
commitdc669d5fbed20c2ceb68b45e3aafaefbf3c8871e (patch)
treecb520b8698397bff561871b73bed7491741d9f74 /libavfilter/vf_vaguedenoiser.c
parent5bbffe3412c1c34873d83d3fb80b379bb6e53d3f (diff)
avfilter/vf_vaguedenoiser: change thresholding to function pointers
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/vf_vaguedenoiser.c')
-rw-r--r--libavfilter/vf_vaguedenoiser.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
index eca1191bbf..5b3c6da827 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,