summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.dev>2023-08-06 18:09:04 +0200
committerNiklas Haas <github-daiK1o@haasn.dev>2023-08-06 22:44:54 +0200
commitf6de44dd6af89a5407d7ed77badde5885c08e59c (patch)
tree01196227595ba56e7fbda821380b2ce9fff0e12a /video
parent8417804224c50cad1f03a1662144471b95a76daf (diff)
downloadmpv-f6de44dd6af89a5407d7ed77badde5885c08e59c.tar.bz2
mpv-f6de44dd6af89a5407d7ed77badde5885c08e59c.tar.xz
vo_gpu_next: update for new pl_filter configuration API
Configuration of filter parameters was moved from pl_filter_function (of which the user had to make a copy) to pl_filter_config, with the pl_filter_function remaining immutable. Implement this new logic in a way that can reasonably exist side-by-side with the old configuration API. Once we drop support for PL_API_VER below 303, we can drastically simplify this code.
Diffstat (limited to 'video')
-rw-r--r--video/out/vo_gpu_next.c42
1 files changed, 33 insertions, 9 deletions
diff --git a/video/out/vo_gpu_next.c b/video/out/vo_gpu_next.c
index 6a9d20cbb0..0e7ac4afa5 100644
--- a/video/out/vo_gpu_next.c
+++ b/video/out/vo_gpu_next.c
@@ -69,8 +69,10 @@ struct osd_state {
struct scaler_params {
struct pl_filter_config config;
+#if PL_API_VER < 303
struct pl_filter_function kernel;
struct pl_filter_function window;
+#endif
};
struct user_hook {
@@ -1556,13 +1558,16 @@ static const struct pl_filter_config *map_scaler(struct priv *p,
const struct pl_filter_function_preset *fpreset;
if ((preset = pl_find_filter_preset(cfg->kernel.name))) {
par->config = *preset->filter;
- par->kernel = *par->config.kernel;
} else if ((fpreset = pl_find_filter_function_preset(cfg->kernel.name))) {
- par->config = (struct pl_filter_config) {0};
- par->kernel = *fpreset->function;
+ par->config = (struct pl_filter_config) {
+ .kernel = fpreset->function,
+#if PL_API_VER >= 303
+ .params[0] = fpreset->function->params[0],
+ .params[1] = fpreset->function->params[1],
+#endif
+ };
} else if (!strcmp(cfg->kernel.name, "ewa_lanczossharp")) {
par->config = pl_filter_ewa_lanczos;
- par->kernel = *par->config.kernel;
par->config.blur = 0.9812505644269356;
MP_WARN(p, "'ewa_lanczossharp' is deprecated and will be removed from "
"vo=gpu-next in the future, use --scale=ewa_lanczos "
@@ -1573,29 +1578,48 @@ static const struct pl_filter_config *map_scaler(struct priv *p,
return &pl_filter_bilinear;
}
+ const struct pl_filter_function_preset *wpreset;
+ if ((wpreset = pl_find_filter_function_preset(cfg->window.name))) {
+ par->config.window = wpreset->function;
+#if PL_API_VER >= 303
+ par->config.wparams[0] = wpreset->function->params[0];
+ par->config.wparams[1] = wpreset->function->params[1];
+#endif
+ }
+
+#if PL_API_VER < 303
+ par->kernel = *par->config.kernel;
par->config.kernel = &par->kernel;
if (par->config.window) {
par->window = *par->config.window;
par->config.window = &par->window;
}
-
- const struct pl_filter_function_preset *wpreset;
- if ((wpreset = pl_find_filter_function_preset(cfg->window.name)))
- par->window = *wpreset->function;
+#endif
for (int i = 0; i < 2; i++) {
+#if PL_API_VER >= 303
+ if (!isnan(cfg->kernel.params[i]))
+ par->config.params[i] = cfg->kernel.params[i];
+ if (!isnan(cfg->window.params[i]))
+ par->config.wparams[i] = cfg->window.params[i];
+#else
if (!isnan(cfg->kernel.params[i]))
par->kernel.params[i] = cfg->kernel.params[i];
if (!isnan(cfg->window.params[i]))
par->window.params[i] = cfg->window.params[i];
+#endif
}
par->config.clamp = cfg->clamp;
par->config.blur = cfg->kernel.blur;
par->config.taper = cfg->kernel.taper;
if (cfg->radius > 0.0) {
- if (par->kernel.resizable) {
+ if (par->config.kernel->resizable) {
+#if PL_API_VER >= 303
+ par->config.radius = cfg->radius;
+#else
par->kernel.radius = cfg->radius;
+#endif
} else {
MP_WARN(p, "Filter radius specified but filter '%s' is not "
"resizable, ignoring\n", cfg->kernel.name);