|
|
@@ -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 }, |
|
|
|