diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index 658153372e..56005e77eb 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -594,6 +594,19 @@ static void uninit_rendering(struct gl_video *p) gl_sc_reset_error(p->sc); } +bool gl_video_gamma_auto_enabled(struct gl_video *p) +{ + return p->opts.gamma_auto; +} + +struct mp_colorspace gl_video_get_output_colorspace(struct gl_video *p) +{ + return (struct mp_colorspace) { + .primaries = p->opts.target_prim, + .gamma = p->opts.target_trc, + }; +} + // Warning: profile.start must point to a ta allocation, and the function // takes over ownership. void gl_video_set_icc_profile(struct gl_video *p, bstr icc_data) diff --git a/video/out/opengl/video.h b/video/out/opengl/video.h index 29300c3312..b21112ac9f 100644 --- a/video/out/opengl/video.h +++ b/video/out/opengl/video.h @@ -167,6 +167,8 @@ float gl_video_scale_ambient_lux(float lmin, float lmax, void gl_video_set_ambient_lux(struct gl_video *p, int lux); void gl_video_set_icc_profile(struct gl_video *p, bstr icc_data); bool gl_video_icc_auto_enabled(struct gl_video *p); +bool gl_video_gamma_auto_enabled(struct gl_video *p); +struct mp_colorspace gl_video_get_output_colorspace(struct gl_video *p); void gl_video_set_gl_state(struct gl_video *p); void gl_video_unset_gl_state(struct gl_video *p); diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c index 0e4c117352..300a3a76d0 100644 --- a/video/out/vo_opengl.c +++ b/video/out/vo_opengl.c @@ -242,7 +242,7 @@ static void get_and_update_ambient_lighting(struct gl_priv *p) if (r == VO_TRUE) { gl_video_set_ambient_lux(p->renderer, lux); } - if (r != VO_TRUE && p->renderer_opts->gamma_auto) { + if (r != VO_TRUE && gl_video_gamma_auto_enabled(p->renderer)) { MP_ERR(p, "gamma_auto option provided, but querying for ambient" " lighting is not supported on this platform\n"); } @@ -306,10 +306,7 @@ static int control(struct vo *vo, uint32_t request, void *data) struct mp_image *screen = gl_read_window_contents(p->gl); // set image parameters according to the display, if possible if (screen) { - screen->params.color = (struct mp_colorspace) { - .primaries = p->renderer_opts->target_prim, - .gamma = p->renderer_opts->target_trc, - }; + screen->params.color = gl_video_get_output_colorspace(p->renderer); if (p->glctx->flip_v) mp_image_vflip(screen); }