vlc | branch: master | Steve Lhomme <[email protected]> | Thu May 9 09:29:39 2019 +0200| [f7dd40a93e3b7089debb66145e18dc023753dd0c] | committer: Steve Lhomme
direct3d: pass the source colorimetry to the output setup callback > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f7dd40a93e3b7089debb66145e18dc023753dd0c --- modules/video_output/win32/d3d_render.h | 8 ++++++++ modules/video_output/win32/direct3d11.c | 11 +++++++++++ modules/video_output/win32/direct3d9.c | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/modules/video_output/win32/d3d_render.h b/modules/video_output/win32/d3d_render.h index 29b4d7470d..062d1d7e5d 100644 --- a/modules/video_output/win32/d3d_render.h +++ b/modules/video_output/win32/d3d_render.h @@ -35,10 +35,18 @@ struct direct3d_cfg_t { unsigned width; unsigned height; unsigned bitdepth; + bool full_range; /** video is full range or studio/limited range */ + video_color_space_t colorspace; /** video color space */ + video_color_primaries_t primaries; /** video color primaries */ + video_transfer_func_t transfer; /** video transfer function */ }; struct output_cfg_t { int surface_format; + bool full_range; /** video is full range or studio/limited range */ + video_color_space_t colorspace; /** video color space */ + video_color_primaries_t primaries; /** video color primaries */ + video_transfer_func_t transfer; /** video transfer function */ }; typedef bool (*d3d_device_setup_cb)(void* opaque, const struct device_cfg_t*, struct device_setup_t* ); diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 196587a050..a9caf168d6 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -204,6 +204,13 @@ static HRESULT UpdateBackBuffer(vout_display_t *vd, const video_format_t *fmt) } break; } + cfg.full_range = fmt->color_range == COLOR_RANGE_FULL || + /* the YUV->RGB conversion already output full range */ + is_d3d11_opaque(fmt->i_chroma) || + vlc_fourcc_IsYUV(fmt->i_chroma); + cfg.primaries = fmt->primaries; + cfg.colorspace = fmt->space; + cfg.transfer = fmt->transfer; struct output_cfg_t out; if (!sys->updateOutputCb( sys->outside_opaque, &cfg, &out )) @@ -485,6 +492,10 @@ static bool LocalSwapchainUpdateOutput( void *opaque, const struct direct3d_cfg_ if ( !UpdateSwapchain( vd, cfg ) ) return -1; out->surface_format = vd->sys->display.pixelFormat->formatTexture; + out->full_range = vd->sys->display.colorspace->b_full_range; + out->colorspace = vd->sys->display.colorspace->color; + out->primaries = vd->sys->display.colorspace->primaries; + out->transfer = vd->sys->display.colorspace->transfer; return true; } diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c index eb24cb9d7d..9eafc0b614 100644 --- a/modules/video_output/win32/direct3d9.c +++ b/modules/video_output/win32/direct3d9.c @@ -599,6 +599,11 @@ static int UpdateOutput(vout_display_t *vd, const video_format_t *fmt) break; } + cfg.full_range = fmt->color_range == COLOR_RANGE_FULL; + cfg.primaries = fmt->primaries; + cfg.colorspace = fmt->space; + cfg.transfer = fmt->transfer; + struct output_cfg_t out; if (!sys->updateOutputCb( sys->outside_opaque, &cfg, &out )) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
