ffmpeg | branch: master | Paul B Mahol <one...@gmail.com> | Fri Feb 22 23:32:27 
2019 +0100| [c679119a73d96b834061bbed2cc38aa6bb5f79f0] | committer: Paul B Mahol

avfilter/vf_amplify: add tolerance option

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

 doc/filters.texi         | 5 +++++
 libavfilter/vf_amplify.c | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 0ef6f56d5d..ba9858abce 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -5652,6 +5652,11 @@ Set threshold for difference amplification. Any 
difference greater or equal to
 this value will not alter source pixel. Default is 10.
 Allowed range is from 0 to 65535.
 
+@item tolerance
+Set tolerance for difference amplification. Any difference lower to
+this value will not alter source pixel. Default is 0.
+Allowed range is from 0 to 65535.
+
 @item low
 Set lower limit for changing source pixel. Default is 65535. Allowed range is 
from 0 to 65535.
 This option controls maximum possible value that will decrease source pixel 
value.
diff --git a/libavfilter/vf_amplify.c b/libavfilter/vf_amplify.c
index 08243ad953..48dcb93a67 100644
--- a/libavfilter/vf_amplify.c
+++ b/libavfilter/vf_amplify.c
@@ -34,6 +34,7 @@ typedef struct AmplifyContext {
     int radius;
     float factor;
     float threshold;
+    float tolerance;
     int planes;
 
     int llimit;
@@ -104,6 +105,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, 
int jobnr, int nb_jobs
     const int radius = s->radius;
     const int nb_inputs = s->nb_inputs;
     const float threshold = s->threshold;
+    const float tolerance = s->tolerance;
     const float factor = s->factor;
     const int llimit = s->llimit;
     const int hlimit = s->hlimit;
@@ -136,7 +138,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, 
int jobnr, int nb_jobs
 
                     avg = sum / (float)nb_inputs;
                     diff = src - avg;
-                    if (fabsf(diff) < threshold) {
+                    if (fabsf(diff) < threshold && fabsf(diff) > tolerance) {
                         int amp;
                         if (diff < 0) {
                             amp = -FFMIN(FFABS(diff * factor), llimit);
@@ -179,7 +181,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, 
int jobnr, int nb_jobs
                     avg = sum / (float)nb_inputs;
                     diff = src - avg;
 
-                    if (fabsf(diff) < threshold) {
+                    if (fabsf(diff) < threshold && fabsf(diff) > tolerance) {
                         int amp;
                         if (diff < 0) {
                             amp = -FFMIN(FFABS(diff * factor), llimit);
@@ -271,6 +273,7 @@ static const AVOption amplify_options[] = {
     { "radius", "set radius", OFFSET(radius), AV_OPT_TYPE_INT, {.i64=2}, 1, 
63, .flags = FLAGS },
     { "factor", "set factor", OFFSET(factor), AV_OPT_TYPE_FLOAT, {.dbl=2}, 0, 
UINT16_MAX, .flags = FLAGS },
     { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, 
{.dbl=10}, 0, UINT16_MAX, .flags = FLAGS },
+    { "tolerance", "set tolerance", OFFSET(tolerance), AV_OPT_TYPE_FLOAT, 
{.dbl=0}, 0, UINT16_MAX, .flags = FLAGS },
     { "low", "set low limit for amplification", OFFSET(llimit), 
AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS },
     { "high", "set high limit for amplification", OFFSET(hlimit), 
AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS },
     { "planes", "set what planes to filter", OFFSET(planes), 
AV_OPT_TYPE_FLAGS, {.i64=7},    0, 15,  FLAGS },

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

Reply via email to