Browse Source

avfilter/vf_amplify: add tolerance option

tags/n4.2
Paul B Mahol 6 years ago
parent
commit
c679119a73
2 changed files with 10 additions and 2 deletions
  1. +5
    -0
      doc/filters.texi
  2. +5
    -2
      libavfilter/vf_amplify.c

+ 5
- 0
doc/filters.texi View File

@@ -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. this value will not alter source pixel. Default is 10.
Allowed range is from 0 to 65535. 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 @item low
Set lower limit for changing source pixel. Default is 65535. Allowed range is from 0 to 65535. 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. This option controls maximum possible value that will decrease source pixel value.


+ 5
- 2
libavfilter/vf_amplify.c View File

@@ -34,6 +34,7 @@ typedef struct AmplifyContext {
int radius; int radius;
float factor; float factor;
float threshold; float threshold;
float tolerance;
int planes; int planes;


int llimit; 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 radius = s->radius;
const int nb_inputs = s->nb_inputs; const int nb_inputs = s->nb_inputs;
const float threshold = s->threshold; const float threshold = s->threshold;
const float tolerance = s->tolerance;
const float factor = s->factor; const float factor = s->factor;
const int llimit = s->llimit; const int llimit = s->llimit;
const int hlimit = s->hlimit; 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; avg = sum / (float)nb_inputs;
diff = src - avg; diff = src - avg;
if (fabsf(diff) < threshold) {
if (fabsf(diff) < threshold && fabsf(diff) > tolerance) {
int amp; int amp;
if (diff < 0) { if (diff < 0) {
amp = -FFMIN(FFABS(diff * factor), llimit); 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; avg = sum / (float)nb_inputs;
diff = src - avg; diff = src - avg;


if (fabsf(diff) < threshold) {
if (fabsf(diff) < threshold && fabsf(diff) > tolerance) {
int amp; int amp;
if (diff < 0) { if (diff < 0) {
amp = -FFMIN(FFABS(diff * factor), llimit); 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 }, { "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 }, { "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 }, { "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 }, { "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 }, { "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 }, { "planes", "set what planes to filter", OFFSET(planes), AV_OPT_TYPE_FLAGS, {.i64=7}, 0, 15, FLAGS },


Loading…
Cancel
Save