summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/video.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-09-02 15:59:40 +0200
committerwm4 <wm4@nowhere>2016-09-02 21:21:47 +0200
commit849480d0c9d5ef76bd3296034b2ad5019fb9c21d (patch)
treeef72fcfbbcce7fb0c88048ae70a0ec42cdf7866a /video/out/opengl/video.c
parenta07dae57e31882024518008c5c1c45f932c15193 (diff)
downloadmpv-849480d0c9d5ef76bd3296034b2ad5019fb9c21d.tar.bz2
mpv-849480d0c9d5ef76bd3296034b2ad5019fb9c21d.tar.xz
vo_opengl: deprecate sub-options, add them as global options
vo_opengl sub-option were always rather annoying to handle. It seems better to make them global options instead. This is simpler and easier to use. The only disadvantage we are aware of is that it's not clear that many/all of these new global options work with vo_opengl only. --vo=opengl-hq is also deprecated. There is extensive compatibility with the old behavior. One exception is that --vo-defaults will not apply to opengl-hq (though with opengl it still works). vo-cmdline is also dysfunctional and will be removed in a following commit. These changes also affect opengl-cb. The update mechanism is still rather inefficient: it requires syncing with the VO after each option change, rather than batching updates. There's also no granularity (video.c just updates "everything", and if auto-ICC profiles are enabled, vo_opengl.c will fetch them on each update). Most of the manpage changes were done by Niklas Haas <git@haasn.xyz>.
Diffstat (limited to 'video/out/opengl/video.c')
-rw-r--r--video/out/opengl/video.c163
1 files changed, 100 insertions, 63 deletions
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c
index 56005e77eb..44092897bf 100644
--- a/video/out/opengl/video.c
+++ b/video/out/opengl/video.c
@@ -170,6 +170,7 @@ struct gl_video {
struct mp_log *log;
struct gl_video_opts opts;
struct gl_video_opts *opts_alloc;
+ struct m_config_cache *opts_cache;
struct gl_lcms *cms;
bool gl_debug;
@@ -298,7 +299,7 @@ static const struct packed_fmt_entry mp_packed_formats[] = {
{0},
};
-const struct gl_video_opts gl_video_opts_def = {
+static const struct gl_video_opts gl_video_opts_def = {
.dither_algo = DITHER_FRUIT,
.dither_depth = -1,
.dither_size = 6,
@@ -324,35 +325,6 @@ const struct gl_video_opts gl_video_opts_def = {
.tone_mapping_param = NAN,
};
-const struct gl_video_opts gl_video_opts_hq_def = {
- .dither_algo = DITHER_FRUIT,
- .dither_depth = 0,
- .dither_size = 6,
- .temporal_dither_period = 1,
- .fbo_format = 0,
- .correct_downscaling = 1,
- .sigmoid_center = 0.75,
- .sigmoid_slope = 6.5,
- .sigmoid_upscaling = 1,
- .scaler = {
- {{"spline36", .params={NAN, NAN}}, {.params = {NAN, NAN}}}, // scale
- {{"mitchell", .params={NAN, NAN}}, {.params = {NAN, NAN}}}, // dscale
- {{"spline36", .params={NAN, NAN}}, {.params = {NAN, NAN}}}, // cscale
- {{"mitchell", .params={NAN, NAN}}, {.params = {NAN, NAN}},
- .clamp = 1, }, // tscale
- },
- .scaler_resizes_only = 1,
- .scaler_lut_size = 6,
- .interpolation_threshold = 0.0001,
- .alpha_mode = ALPHA_BLEND_TILES,
- .background = {0, 0, 0, 255},
- .gamma = 1.0f,
- .deband = 1,
- .target_brightness = 250,
- .hdr_tone_mapping = TONE_MAPPING_HABLE,
- .tone_mapping_param = NAN,
-};
-
static int validate_scaler_opt(struct mp_log *log, const m_option_t *opt,
struct bstr name, struct bstr param);
@@ -374,8 +346,8 @@ static int validate_window_opt(struct mp_log *log, const m_option_t *opt,
const struct m_sub_options gl_video_conf = {
.opts = (const m_option_t[]) {
- OPT_FLAG("dumb-mode", dumb_mode, 0),
- OPT_FLOATRANGE("gamma", gamma, 0, 0.1, 2.0),
+ OPT_FLAG("opengl-dumb-mode", dumb_mode, 0),
+ OPT_FLOATRANGE("opengl-gamma", gamma, 0, 0.1, 2.0),
OPT_FLAG("gamma-auto", gamma_auto, 0),
OPT_CHOICE_C("target-prim", target_prim, 0, mp_csp_prim_names),
OPT_CHOICE_C("target-trc", target_trc, 0, mp_csp_trc_names),
@@ -387,7 +359,7 @@ const struct m_sub_options gl_video_conf = {
{"gamma", TONE_MAPPING_GAMMA},
{"linear", TONE_MAPPING_LINEAR})),
OPT_FLOAT("tone-mapping-param", tone_mapping_param, 0),
- OPT_FLAG("pbo", pbo, 0),
+ OPT_FLAG("opengl-pbo", pbo, 0),
SCALER_OPTS("scale", SCALER_SCALE),
SCALER_OPTS("dscale", SCALER_DSCALE),
SCALER_OPTS("cscale", SCALER_CSCALE),
@@ -399,7 +371,7 @@ const struct m_sub_options gl_video_conf = {
OPT_FLAG("sigmoid-upscaling", sigmoid_upscaling, 0),
OPT_FLOATRANGE("sigmoid-center", sigmoid_center, 0, 0.0, 1.0),
OPT_FLOATRANGE("sigmoid-slope", sigmoid_slope, 0, 1.0, 20.0),
- OPT_CHOICE("fbo-format", fbo_format, 0,
+ OPT_CHOICE("opengl-fbo-format", fbo_format, 0,
({"rgb8", GL_RGB8},
{"rgba8", GL_RGBA8},
{"rgb10", GL_RGB10},
@@ -426,7 +398,7 @@ const struct m_sub_options gl_video_conf = {
{"yes", ALPHA_YES},
{"blend", ALPHA_BLEND},
{"blend-tiles", ALPHA_BLEND_TILES})),
- OPT_FLAG("rectangle-textures", use_rectangle, 0),
+ OPT_FLAG("opengl-rectangle-textures", use_rectangle, 0),
OPT_COLOR("background", background, 0),
OPT_FLAG("interpolation", interpolation, 0),
OPT_FLOAT("interpolation-threshold", interpolation_threshold, 0),
@@ -434,42 +406,105 @@ const struct m_sub_options gl_video_conf = {
({"no", BLEND_SUBS_NO},
{"yes", BLEND_SUBS_YES},
{"video", BLEND_SUBS_VIDEO})),
- OPT_STRINGLIST("user-shaders", user_shaders, 0),
+ OPT_STRINGLIST("opengl-shaders", user_shaders, 0),
OPT_FLAG("deband", deband, 0),
OPT_SUBSTRUCT("deband", deband_opts, deband_conf, 0),
OPT_FLOAT("sharpen", unsharp, 0),
OPT_SUBSTRUCT("", icc_opts, mp_icc_conf, 0),
+ {0}
+ },
+ .size = sizeof(struct gl_video_opts),
+ .defaults = &gl_video_opts_def,
+};
+
+#define LEGACY_SCALER_OPTS(n) \
+ OPT_SUBOPT_LEGACY(n, n), \
+ OPT_SUBOPT_LEGACY(n"-param1", n"-param1"), \
+ OPT_SUBOPT_LEGACY(n"-param2", n"-param2"), \
+ OPT_SUBOPT_LEGACY(n"-blur", n"-blur"), \
+ OPT_SUBOPT_LEGACY(n"-wparam", n"-wparam"), \
+ OPT_SUBOPT_LEGACY(n"-clamp", n"-clamp"), \
+ OPT_SUBOPT_LEGACY(n"-radius", n"-radius"), \
+ OPT_SUBOPT_LEGACY(n"-antiring", n"-antiring"), \
+ OPT_SUBOPT_LEGACY(n"-window", n"-window")
+
+const struct m_sub_options gl_video_conf_legacy = {
+ .opts = (const m_option_t[]) {
+ OPT_SUBOPT_LEGACY("dumb-mode", "opengl-dumb-mode"),
+ OPT_SUBOPT_LEGACY("gamma", "opengl-gamma"),
+ OPT_SUBOPT_LEGACY("gamma-auto", "gamma-auto"),
+ OPT_SUBOPT_LEGACY("target-prim", "target-prim"),
+ OPT_SUBOPT_LEGACY("target-trc", "target-trc"),
+ OPT_SUBOPT_LEGACY("target-brightness", "target-brightness"),
+ OPT_SUBOPT_LEGACY("hdr-tone-mapping", "hdr-tone-mapping"),
+ OPT_SUBOPT_LEGACY("tone-mapping-param", "tone-mapping-param"),
+ OPT_SUBOPT_LEGACY("pbo", "opengl-pbo"),
+ LEGACY_SCALER_OPTS("scale"),
+ LEGACY_SCALER_OPTS("dscale"),
+ LEGACY_SCALER_OPTS("cscale"),
+ LEGACY_SCALER_OPTS("tscale"),
+ OPT_SUBOPT_LEGACY("scaler-lut-size", "scaler-lut-size"),
+ OPT_SUBOPT_LEGACY("scaler-resizes-only", "scaler-resizes-only"),
+ OPT_SUBOPT_LEGACY("linear-scaling", "linear-scaling"),
+ OPT_SUBOPT_LEGACY("correct-downscaling", "correct-downscaling"),
+ OPT_SUBOPT_LEGACY("sigmoid-upscaling", "sigmoid-upscaling"),
+ OPT_SUBOPT_LEGACY("sigmoid-center", "sigmoid-center"),
+ OPT_SUBOPT_LEGACY("sigmoid-slope", "sigmoid-slope"),
+ OPT_SUBOPT_LEGACY("fbo-format", "opengl-fbo-format"),
+ OPT_SUBOPT_LEGACY("dither-depth", "dither-depth"),
+ OPT_SUBOPT_LEGACY("dither", "dither"),
+ OPT_SUBOPT_LEGACY("dither-size-fruit", "dither-size-fruit"),
+ OPT_SUBOPT_LEGACY("temporal-dither", "temporal-dither"),
+ OPT_SUBOPT_LEGACY("temporal-dither-period", "temporal-dither-period"),
+ OPT_SUBOPT_LEGACY("alpha", "alpha"),
+ OPT_SUBOPT_LEGACY("rectangle-textures", "opengl-rectangle-textures"),
+ OPT_SUBOPT_LEGACY("background", "background"),
+ OPT_SUBOPT_LEGACY("interpolation", "interpolation"),
+ OPT_SUBOPT_LEGACY("interpolation-threshold", "interpolation-threshold"),
+ OPT_SUBOPT_LEGACY("blend-subtitles", "blend-subtitles"),
+ OPT_SUBOPT_LEGACY("user-shaders", "opengl-shaders"),
+ OPT_SUBOPT_LEGACY("deband", "deband"),
+ OPT_SUBOPT_LEGACY("deband-iterations", "deband-iterations"),
+ OPT_SUBOPT_LEGACY("deband-threshold", "deband-threshold"),
+ OPT_SUBOPT_LEGACY("deband-range", "deband-range"),
+ OPT_SUBOPT_LEGACY("deband-grain", "deband-grain"),
+ OPT_SUBOPT_LEGACY("sharpen", "sharpen"),
+ OPT_SUBOPT_LEGACY("icc-profile", "icc-profile"),
+ OPT_SUBOPT_LEGACY("icc-profile-auto", "icc-profile-auto"),
+ OPT_SUBOPT_LEGACY("icc-cache-dir", "icc-cache-dir"),
+ OPT_SUBOPT_LEGACY("icc-intent", "icc-intent"),
+ OPT_SUBOPT_LEGACY("icc-contrast", "icc-contrast"),
+ OPT_SUBOPT_LEGACY("3dlut-size", "icc-3dlut-size"),
+
OPT_REMOVED("approx-gamma", "this is always enabled now"),
OPT_REMOVED("cscale-down", "chroma is never downscaled"),
OPT_REMOVED("scale-sep", "this is set automatically whenever sane"),
OPT_REMOVED("indirect", "this is set automatically whenever sane"),
OPT_REMOVED("srgb", "use target-prim=bt709:target-trc=srgb instead"),
OPT_REMOVED("source-shader", "use :deband to enable debanding"),
- OPT_REMOVED("prescale-luma", "use user shaders for prescaling"),
- OPT_REMOVED("scale-shader", "use user-shaders instead"),
- OPT_REMOVED("pre-shaders", "use user-shaders instead"),
- OPT_REMOVED("post-shaders", "use user-shaders instead"),
-
- OPT_REPLACED("lscale", "scale"),
- OPT_REPLACED("lscale-down", "scale-down"),
- OPT_REPLACED("lparam1", "scale-param1"),
- OPT_REPLACED("lparam2", "scale-param2"),
- OPT_REPLACED("lradius", "scale-radius"),
- OPT_REPLACED("lantiring", "scale-antiring"),
- OPT_REPLACED("cparam1", "cscale-param1"),
- OPT_REPLACED("cparam2", "cscale-param2"),
- OPT_REPLACED("cradius", "cscale-radius"),
- OPT_REPLACED("cantiring", "cscale-antiring"),
- OPT_REPLACED("smoothmotion", "interpolation"),
- OPT_REPLACED("smoothmotion-threshold", "tscale-param1"),
- OPT_REPLACED("scale-down", "dscale"),
- OPT_REPLACED("fancy-downscaling", "correct-downscaling"),
+ OPT_REMOVED("prescale-luma", "use opengl-shaders for prescaling"),
+ OPT_REMOVED("scale-shader", "use opengl-shaders instead"),
+ OPT_REMOVED("pre-shaders", "use opengl-shaders instead"),
+ OPT_REMOVED("post-shaders", "use opengl-shaders instead"),
+
+ OPT_SUBOPT_LEGACY("lscale", "scale"),
+ OPT_SUBOPT_LEGACY("lscale-down", "scale-down"),
+ OPT_SUBOPT_LEGACY("lparam1", "scale-param1"),
+ OPT_SUBOPT_LEGACY("lparam2", "scale-param2"),
+ OPT_SUBOPT_LEGACY("lradius", "scale-radius"),
+ OPT_SUBOPT_LEGACY("lantiring", "scale-antiring"),
+ OPT_SUBOPT_LEGACY("cparam1", "cscale-param1"),
+ OPT_SUBOPT_LEGACY("cparam2", "cscale-param2"),
+ OPT_SUBOPT_LEGACY("cradius", "cscale-radius"),
+ OPT_SUBOPT_LEGACY("cantiring", "cscale-antiring"),
+ OPT_SUBOPT_LEGACY("smoothmotion", "interpolation"),
+ OPT_SUBOPT_LEGACY("smoothmotion-threshold", "tscale-param1"),
+ OPT_SUBOPT_LEGACY("scale-down", "dscale"),
+ OPT_SUBOPT_LEGACY("fancy-downscaling", "correct-downscaling"),
{0}
},
- .size = sizeof(struct gl_video_opts),
- .defaults = &gl_video_opts_def,
};
static void uninit_rendering(struct gl_video *p);
@@ -3382,8 +3417,10 @@ struct gl_video *gl_video_init(GL *gl, struct mp_log *log, struct mpv_global *g)
.cms = gl_lcms_init(p, log, g),
.texture_16bit_depth = 16,
.sc = gl_sc_create(gl, log),
+ .opts_cache = m_config_cache_alloc(p, g, &gl_video_conf),
};
- set_options(p, NULL);
+ set_options(p, p->opts_cache->opts);
+ gl_lcms_set_options(p->cms, p->opts.icc_opts);
for (int n = 0; n < SCALER_COUNT; n++)
p->scaler[n] = (struct scaler){.index = n};
gl_video_set_debug(p, true);
@@ -3417,12 +3454,12 @@ static void set_options(struct gl_video *p, struct gl_video_opts *src)
p->opts = *p->opts_alloc;
}
-// Set the options, and possibly update the filter chain too.
-// Note: assumes all options are valid and verified by the option parser.
-void gl_video_set_options(struct gl_video *p, struct gl_video_opts *opts)
+void gl_video_update_options(struct gl_video *p)
{
- set_options(p, opts);
- reinit_from_options(p);
+ if (m_config_cache_update(p->opts_cache)) {
+ set_options(p, p->opts_cache->opts);
+ reinit_from_options(p);
+ }
}
static void reinit_from_options(struct gl_video *p)