mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
avfilter/vf_amplify: add tolerance option
This commit is contained in:
parent
6f93868e46
commit
c679119a73
@ -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.
|
||||||
|
@ -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…
Reference in New Issue
Block a user