From 3bca5c128a1253cfe359f5fe926190bb7d3ad978 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Thu, 10 Aug 2017 00:38:55 +0300 Subject: [PATCH] [win32] Fix dxva renderer flickers at playback startup --- .../VideoRenderers/WinRenderer.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/WinRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/WinRenderer.cpp index f664200852d57..2a6ec1e8561f7 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/WinRenderer.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/WinRenderer.cpp @@ -855,7 +855,7 @@ void CWinRenderer::RenderHW(DWORD flags, CD3DTexture* target) && image->format != BUFFER_FMT_D3D11_P016) return; - if (!image->HasPic()) + if (!image->loaded) return; int past = 0; @@ -871,12 +871,15 @@ void CWinRenderer::RenderHW(DWORD flags, CD3DTexture* target) bool found = false; for (int i = 0; i < m_NumYV12Buffers; i++) { - if (m_renderBuffers[i].HasPic() - && m_renderBuffers[i].frameIdx == image->frameIdx + (future*2 + 2)) + if (m_renderBuffers[i].frameIdx == image->frameIdx + (future*2 + 2)) { - views[1 - future++] = &m_renderBuffers[i]; - found = true; - break; + // a future frame may not be loaded yet + if (m_renderBuffers[i].loaded || m_renderBuffers[i].UploadBuffer()) + { + views[1 - future++] = &m_renderBuffers[i]; + found = true; + break; + } } } if (!found) @@ -889,12 +892,14 @@ void CWinRenderer::RenderHW(DWORD flags, CD3DTexture* target) bool found = false; for (int i = 0; i < m_NumYV12Buffers; i++) { - if (m_renderBuffers[i].HasPic() - && m_renderBuffers[i].frameIdx == image->frameIdx - (past*2 + 2)) + if (m_renderBuffers[i].frameIdx == image->frameIdx - (past*2 + 2)) { - views[3 + past++] = &m_renderBuffers[i]; - found = true; - break; + if (m_renderBuffers[i].loaded) + { + views[3 + past++] = &m_renderBuffers[i]; + found = true; + break; + } } } if (!found)