[vlc-devel] [PATCH] direct3d11: fix decoder padding not working with Qualcomm chipsets

Steve Lhomme robux4 at videolabs.io
Mon Jul 24 13:04:53 CEST 2017


---
 modules/video_output/win32/direct3d11.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 44f127aca1..3e9bbc0c3e 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -757,6 +757,31 @@ error:
     return VLC_EGENERIC;
 }
 
+static bool CanUseDecoderPadding(vout_display_t *vd)
+{
+#ifndef HAVE_ID3D11VIDEODECODER
+    (void) vd;
+    return true;
+#else
+    vout_display_sys_t *sys = vd->sys;
+    TCHAR szData[256];
+    DWORD len = 256;
+    IDXGIAdapter *pAdapter = D3D11DeviceAdapter(sys->d3ddevice);
+    if (!pAdapter)
+        return false;
+
+    DXGI_ADAPTER_DESC adapterDesc;
+    HRESULT hr = IDXGIAdapter_GetDesc(pAdapter, &adapterDesc);
+    IDXGIAdapter_Release(pAdapter);
+    if (FAILED(hr))
+        return false;
+
+    /* Qualcomm hardware has issues with textures and pixels that should not be
+    * part of the decoded area */
+    return adapterDesc.VendorId != 0x4D4F4351;
+#endif
+}
+
 static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size)
 {
     /* compensate for extra hardware decoding pulling extra pictures from our pool */
@@ -777,7 +802,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size)
         pool_size = 1;
 
     video_format_t surface_fmt = vd->fmt;
-    if (is_d3d11_opaque(surface_fmt.i_chroma))
+    if (is_d3d11_opaque(surface_fmt.i_chroma) && CanUseDecoderPadding(vd))
     {
         /* worst case scenario we need 128 alignment for HEVC */
         surface_fmt.i_width  = (surface_fmt.i_width  + 0x7F) & ~0x7F;
-- 
2.12.1



More information about the vlc-devel mailing list