Browse Source

d3d9: fully initialize DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA

Although we set all known usable bits, it seems that leaving reserved bits
"uninitialized" doesn't work in some case. In particular with LLVM builds,
which results in bogus output.

Co-authored-by: Pierre Lamot <pierre@videolabs.io>
pull/144/head
Steve Lhomme 3 years ago
parent
commit
a7de762a71
  1. 11
      modules/video_output/opengl/interop_dxva2.c
  2. 11
      modules/video_output/win32/direct3d9.c

11
modules/video_output/opengl/interop_dxva2.c

@ -387,11 +387,12 @@ static int InitRangeProcessor(struct vlc_gl_interop *interop, IDirect3DDevice9Ex
SetupProcessorInput(interop, &interop->fmt_in, src_format);
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA colorspace;
colorspace.Usage = 0; // playback
colorspace.RGB_Range = true ? 0 : 1;
colorspace.YCbCr_xvYCC = true ? 1 : 0;
colorspace.YCbCr_Matrix = false ? 0 : 1;
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA colorspace = {
.Usage = 0, // playback
.RGB_Range = true ? 0 : 1,
.YCbCr_xvYCC = true ? 1 : 0,
.YCbCr_Matrix = false ? 0 : 1,
};
hr = IDXVAHD_VideoProcessor_SetVideoProcessBltState( sys->processor.proc, DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE, sizeof(colorspace), &colorspace);
return VLC_SUCCESS;

11
modules/video_output/win32/direct3d9.c

@ -1582,11 +1582,12 @@ static int InitRangeProcessor(vout_display_t *vd, const d3d9_format_t *d3dfmt,
SetupProcessorInput(vd, vd->source, d3dfmt);
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA colorspace;
colorspace.Usage = 0; // playback
colorspace.RGB_Range = render_out->full_range ? 0 : 1;
colorspace.YCbCr_xvYCC = render_out->full_range ? 1 : 0;
colorspace.YCbCr_Matrix = render_out->colorspace == libvlc_video_colorspace_BT601 ? 0 : 1;
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA colorspace = {
.Usage = 0, // playback
.RGB_Range = render_out->full_range ? 0 : 1,
.YCbCr_xvYCC = render_out->full_range ? 1 : 0,
.YCbCr_Matrix = render_out->colorspace == libvlc_video_colorspace_BT601 ? 0 : 1,
};
hr = IDXVAHD_VideoProcessor_SetVideoProcessBltState( sys->processor.proc, DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE, sizeof(colorspace), &colorspace);
return VLC_SUCCESS;

Loading…
Cancel
Save