mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avfilter/vf_lumakey: change options to doubles, so that values are automatically scaled
This commit is contained in:
parent
08f7968fc4
commit
6b9862f614
@ -28,12 +28,13 @@
|
||||
typedef struct LumakeyContext {
|
||||
const AVClass *class;
|
||||
|
||||
int threshold;
|
||||
int tolerance;
|
||||
int softness;
|
||||
double threshold;
|
||||
double tolerance;
|
||||
double softness;
|
||||
|
||||
int white;
|
||||
int black;
|
||||
int so;
|
||||
int max;
|
||||
|
||||
int (*do_lumakey_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
|
||||
@ -47,7 +48,7 @@ static int do_lumakey_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_
|
||||
const int slice_end = (frame->height * (jobnr + 1)) / nb_jobs;
|
||||
uint8_t *alpha = frame->data[3] + slice_start * frame->linesize[3];
|
||||
const uint8_t *luma = frame->data[0] + slice_start * frame->linesize[0];
|
||||
const int so = s->softness;
|
||||
const int so = s->so;
|
||||
const int w = s->white;
|
||||
const int b = s->black;
|
||||
int x, y;
|
||||
@ -79,7 +80,7 @@ static int do_lumakey_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb
|
||||
const int slice_end = (frame->height * (jobnr + 1)) / nb_jobs;
|
||||
uint16_t *alpha = (uint16_t *)(frame->data[3] + slice_start * frame->linesize[3]);
|
||||
const uint16_t *luma = (const uint16_t *)(frame->data[0] + slice_start * frame->linesize[0]);
|
||||
const int so = s->softness;
|
||||
const int so = s->so;
|
||||
const int w = s->white;
|
||||
const int b = s->black;
|
||||
const int m = s->max;
|
||||
@ -113,14 +114,16 @@ static int config_input(AVFilterLink *inlink)
|
||||
|
||||
depth = desc->comp[0].depth;
|
||||
if (depth == 8) {
|
||||
s->white = av_clip_uint8(s->threshold + s->tolerance);
|
||||
s->black = av_clip_uint8(s->threshold - s->tolerance);
|
||||
s->white = av_clip_uint8((s->threshold + s->tolerance) * 255);
|
||||
s->black = av_clip_uint8((s->threshold - s->tolerance) * 255);
|
||||
s->do_lumakey_slice = do_lumakey_slice8;
|
||||
s->so = s->softness * 255;
|
||||
} else {
|
||||
s->max = (1 << depth) - 1;
|
||||
s->white = av_clip(s->threshold + s->tolerance, 0, s->max);
|
||||
s->black = av_clip(s->threshold - s->tolerance, 0, s->max);
|
||||
s->white = av_clip((s->threshold + s->tolerance) * s->max, 0, s->max);
|
||||
s->black = av_clip((s->threshold - s->tolerance) * s->max, 0, s->max);
|
||||
s->do_lumakey_slice = do_lumakey_slice16;
|
||||
s->so = s->softness * s->max;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -182,9 +185,9 @@ static const AVFilterPad lumakey_outputs[] = {
|
||||
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
|
||||
|
||||
static const AVOption lumakey_options[] = {
|
||||
{ "threshold", "set the threshold value", OFFSET(threshold), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT16_MAX, FLAGS },
|
||||
{ "tolerance", "set the tolerance value", OFFSET(tolerance), AV_OPT_TYPE_INT, {.i64=1}, 0, UINT16_MAX, FLAGS },
|
||||
{ "softness", "set the softness value", OFFSET(softness), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT16_MAX, FLAGS },
|
||||
{ "threshold", "set the threshold value", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
|
||||
{ "tolerance", "set the tolerance value", OFFSET(tolerance), AV_OPT_TYPE_DOUBLE, {.dbl=0.01}, 0, 1, FLAGS },
|
||||
{ "softness", "set the softness value", OFFSET(softness), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user