vlc | branch: master | Steve Lhomme <rob...@ycbcr.xyz> | Thu Aug 22 12:53:06 2019 +0200| [c94b8d80c88f827abb717cb16e03878220852b50] | committer: Steve Lhomme
direct3d11: map the single texture only once for DXGI mapped FourCCs There's only one texture create for all planes. Fixes CPU NV12 displaying. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c94b8d80c88f827abb717cb16e03878220852b50 --- modules/video_output/win32/direct3d11.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 733a249bd8..278973911b 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -629,7 +629,7 @@ static void PreparePicture(vout_display_t *vd, picture_t *picture, subpicture_t { vout_display_sys_t *sys = vd->sys; - if (sys->picQuad.textureFormat->formatTexture == DXGI_FORMAT_UNKNOWN || !is_d3d11_opaque(picture->format.i_chroma)) + if (sys->picQuad.textureFormat->formatTexture == DXGI_FORMAT_UNKNOWN) { D3D11_MAPPED_SUBRESOURCE mappedResource; int i; @@ -659,6 +659,30 @@ static void PreparePicture(vout_display_t *vd, picture_t *picture, subpicture_t ID3D11DeviceContext_Unmap(sys->d3d_dev.d3dcontext, sys->stagingSys.resource[i], 0); } } + else if (!is_d3d11_opaque(picture->format.i_chroma)) + { + D3D11_MAPPED_SUBRESOURCE mappedResource; + HRESULT hr; + + hr = ID3D11DeviceContext_Map(sys->d3d_dev.d3dcontext, sys->stagingSys.resource[0], + 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if( unlikely(FAILED(hr)) ) + msg_Err(vd, "Failed to map the %4.4s staging picture. (hr=0x%lX)", (const char*)&picture->format.i_chroma, hr); + else + { + uint8_t *buf = mappedResource.pData; + for (int i = 0; i < picture->i_planes; i++) + { + sys->stagingPlanes[i].p_pixels = buf; + + plane_CopyPixels(&sys->stagingPlanes[i], &picture->p[i]); + + buf += sys->stagingPlanes[i].i_pitch * sys->stagingPlanes[i].i_lines; + } + + ID3D11DeviceContext_Unmap(sys->d3d_dev.d3dcontext, sys->stagingSys.resource[0], 0); + } + } else { picture_sys_d3d11_t *p_sys = ActivePictureSys(picture); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits