From 9ac34b89626823aad7ac2542dc145adea5cf24ee Mon Sep 17 00:00:00 2001 From: Steve Lhomme <robux4@ycbcr.xyz> Date: Wed, 15 Jul 2020 16:39:14 +0200 Subject: [PATCH] direct3d11: use a local video_format_t to match the incoming texture --- modules/video_output/win32/direct3d11.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index e302b3b521bd..af02d3f571a5 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -89,6 +89,7 @@ struct vout_display_sys_t { vout_display_sys_win32_t sys; /* only use if sys.event is not NULL */ display_win32_area_t area; + video_format_t texture_fmt; /* Sensors */ void *p_sensors; @@ -297,6 +298,7 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, goto error; CommonInit(vd, &sys->area, cfg); + sys->texture_fmt = vd->source; sys->outside_opaque = var_InheritAddress( vd, "vout-cb-opaque" ); sys->updateOutputCb = var_InheritAddress( vd, "vout-cb-update-output" ); @@ -614,8 +616,8 @@ static void PreparePicture(vout_display_t *vd, picture_t *picture, subpicture_t { /* the decoder produced different sizes than the vout, we need to * adjust the vertex */ - sys->area.texture_source.i_width = sys->picQuad.i_height = texDesc.Height; - sys->area.texture_source.i_height = sys->picQuad.i_width = texDesc.Width; + sys->texture_fmt.i_width = sys->picQuad.i_height = texDesc.Height; + sys->texture_fmt.i_height = sys->picQuad.i_width = texDesc.Width; CommonPlacePicture(VLC_OBJECT(vd), &sys->area, &sys->sys); UpdateSize(vd); @@ -820,8 +822,8 @@ static int Direct3D11Open(vout_display_t *vd, video_format_t *fmtp, vlc_video_co sys->picQuad.i_height = (sys->picQuad.i_height + 0x01) & ~0x01; } - sys->area.texture_source.i_width = sys->picQuad.i_width; - sys->area.texture_source.i_height = sys->picQuad.i_height; + sys->texture_fmt.i_width = sys->picQuad.i_width; + sys->texture_fmt.i_height = sys->picQuad.i_height; CommonPlacePicture(VLC_OBJECT(vd), &sys->area, &sys->sys); @@ -1092,7 +1094,7 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma .top = vd->source.i_y_offset, .bottom = vd->source.i_y_offset + vd->source.i_visible_height, }; - if (D3D11_SetupQuad( vd, sys->d3d_dev, &sys->area.texture_source, &sys->picQuad, &sys->display, + if (D3D11_SetupQuad( vd, sys->d3d_dev, &sys->texture_fmt, &sys->picQuad, &sys->display, &source_rect, vd->source.orientation ) != VLC_SUCCESS) { msg_Err(vd, "Could not Create the main quad picture."); @@ -1118,9 +1120,9 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma /* we need a staging texture */ ID3D11Texture2D *textures[D3D11_MAX_SHADER_VIEW] = {0}; if (!is_d3d11_opaque(fmt->i_chroma)) - sys->area.texture_source.i_chroma = sys->picQuad.textureFormat->fourcc; + sys->texture_fmt.i_chroma = sys->picQuad.textureFormat->fourcc; - if (AllocateTextures(vd, sys->d3d_dev, sys->picQuad.textureFormat, &sys->area.texture_source, 1, textures, sys->stagingPlanes)) + if (AllocateTextures(vd, sys->d3d_dev, sys->picQuad.textureFormat, &sys->texture_fmt, 1, textures, sys->stagingPlanes)) { msg_Err(vd, "Failed to allocate the staging texture"); return VLC_EGENERIC; -- GitLab