summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.dev>2023-05-10 14:42:22 +0200
committerNiklas Haas <git@haasn.dev>2023-05-14 11:21:43 +0200
commit30c71ef98e6b0d3b5d303388a81676a5bd963227 (patch)
tree3cd00effb32fc018fe1d9ec69dccf2f7baf9f9bb /libavfilter
parent02f3b9312a99c4ea58211b1ee3d1cb41d04255b8 (diff)
downloadffmpeg-30c71ef98e6b0d3b5d303388a81676a5bd963227.tar.gz
lavfi/vf_libplacebo: add frame_mixer option
Fairly straightforward. We just need to modify the scaler handling code slightly to support looking at a different list of filter presets.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_libplacebo.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index f8b93f975f..94e49aa465 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -164,6 +164,7 @@ typedef struct LibplaceboContext {
struct pl_render_params params;
char *upscaler;
char *downscaler;
+ char *frame_mixer;
int lut_entries;
float antiringing;
int sigmoid;
@@ -285,17 +286,19 @@ static int parse_shader(AVFilterContext *avctx, const void *shader, size_t len)
static int find_scaler(AVFilterContext *avctx,
const struct pl_filter_config **opt,
- const char *name)
+ const char *name, int frame_mixing)
{
- const struct pl_filter_preset *preset;
+ const struct pl_filter_preset *preset, *presets_avail;
+ presets_avail = frame_mixing ? pl_frame_mixers : pl_scale_filters;
+
if (!strcmp(name, "help")) {
av_log(avctx, AV_LOG_INFO, "Available scaler presets:\n");
- for (preset = pl_scale_filters; preset->name; preset++)
+ for (preset = presets_avail; preset->name; preset++)
av_log(avctx, AV_LOG_INFO, " %s\n", preset->name);
return AVERROR_EXIT;
}
- for (preset = pl_scale_filters; preset->name; preset++) {
+ for (preset = presets_avail; preset->name; preset++) {
if (!strcmp(name, preset->name)) {
*opt = preset->filter;
return 0;
@@ -411,8 +414,9 @@ static int update_settings(AVFilterContext *ctx)
.disable_fbos = s->disable_fbos,
);
- RET(find_scaler(ctx, &s->params.upscaler, s->upscaler));
- RET(find_scaler(ctx, &s->params.downscaler, s->downscaler));
+ RET(find_scaler(ctx, &s->params.upscaler, s->upscaler, 0));
+ RET(find_scaler(ctx, &s->params.downscaler, s->downscaler, 0));
+ RET(find_scaler(ctx, &s->params.frame_mixer, s->frame_mixer, 1));
return 0;
fail:
@@ -1110,6 +1114,7 @@ static const AVOption libplacebo_options[] = {
{ "upscaler", "Upscaler function", OFFSET(upscaler), AV_OPT_TYPE_STRING, {.str = "spline36"}, .flags = DYNAMIC },
{ "downscaler", "Downscaler function", OFFSET(downscaler), AV_OPT_TYPE_STRING, {.str = "mitchell"}, .flags = DYNAMIC },
+ { "frame_mixer", "Frame mixing function", OFFSET(frame_mixer), AV_OPT_TYPE_STRING, {.str = "none"}, .flags = DYNAMIC },
{ "lut_entries", "Number of scaler LUT entries", OFFSET(lut_entries), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 256, DYNAMIC },
{ "antiringing", "Antiringing strength (for non-EWA filters)", OFFSET(antiringing), AV_OPT_TYPE_FLOAT, {.dbl = 0.0}, 0.0, 1.0, DYNAMIC },
{ "sigmoid", "Enable sigmoid upscaling", OFFSET(sigmoid), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC },