[vlc-commits] directx_va: allow 4835 drivers to decode HEVC 8 bits

Steve Lhomme git at videolan.org
Thu Apr 19 08:07:56 CEST 2018


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Thu Apr 19 08:05:48 2018 +0200| [9b5781df362cbb981659267709e91ec65a533afa] | committer: Steve Lhomme

directx_va: allow 4835 drivers to decode HEVC 8 bits

It may be better to detect HD 5500 and HD6000 which seem to be the (only?) ones
with bogus HEVC capabilities. Basically 5xxx Intel CPUs.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9b5781df362cbb981659267709e91ec65a533afa
---

 modules/codec/avcodec/d3d11va.c | 23 ++++++++++++++++++++---
 modules/codec/avcodec/dxva2.c   | 23 ++++++++++++++++++++---
 2 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index 3aee0cd621..b594e7e654 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -546,7 +546,23 @@ static int DxGetInputList(vlc_va_t *va, input_list_t *p_list)
 extern const GUID DXVA_ModeHEVC_VLD_Main;
 extern const GUID DXVA_ModeHEVC_VLD_Main10;
 extern const GUID DXVA_ModeVP9_VLD_10bit_Profile2;
-static bool CanUseIntelHEVC(vlc_va_t *va)
+static bool CanUseIntelHEVC8(vlc_va_t *va)
+{
+    vlc_va_sys_t *sys = va->sys;
+    /* it should be OK starting after driver 20.19.15.4835 */
+    struct wddm_version WDMM = {
+        .wddm         = 0,
+        .d3d_features = 0,
+        .revision     = 0,
+        .build        = 4835,
+    };
+    if (D3D11CheckDriverVersion(&sys->d3d_dev, GPU_MANUFACTURER_INTEL, &WDMM) == VLC_SUCCESS)
+        return true;
+
+    msg_Dbg(va, "HEVC not supported with these drivers");
+    return false;
+}
+static bool CanUseIntelHEVC10(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
     /* it should be OK starting after driver 20.19.15.4835 */
@@ -578,8 +594,9 @@ static int DxSetupOutput(vlc_va_t *va, const GUID *input, const video_format_t *
     }
 #endif
 
-    if ((IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main) ||
-         IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main10)) && !CanUseIntelHEVC(va))
+    if (IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main) && !CanUseIntelHEVC8(va))
+        return VLC_EGENERIC;
+    if (IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main10) && !CanUseIntelHEVC10(va))
         return VLC_EGENERIC;
 
     DXGI_FORMAT processorInput[5];
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 9131cdc8db..fd78c65630 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -497,7 +497,23 @@ static int DxGetInputList(vlc_va_t *va, input_list_t *p_list)
 
 extern const GUID DXVA_ModeHEVC_VLD_Main;
 extern const GUID DXVA_ModeHEVC_VLD_Main10;
-static bool CanUseIntelHEVC(vlc_va_t *va)
+static bool CanUseIntelHEVC8(vlc_va_t *va)
+{
+    vlc_va_sys_t *sys = va->sys;
+    /* it should be OK starting after driver 20.19.15.4835 */
+    struct wddm_version WDMM = {
+        .wddm         = 0,
+        .d3d_features = 0,
+        .revision     = 0,
+        .build        = 4835,
+    };
+    if (D3D9CheckDriverVersion(&sys->hd3d, &sys->d3d_dev, GPU_MANUFACTURER_INTEL, &WDMM) == VLC_SUCCESS)
+        return true;
+
+    msg_Dbg(va, "HEVC not supported with these drivers");
+    return false;
+}
+static bool CanUseIntelHEVC10(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
     /* it should be OK starting after driver 20.19.15.4835 */
@@ -518,8 +534,9 @@ static int DxSetupOutput(vlc_va_t *va, const GUID *input, const video_format_t *
 {
     VLC_UNUSED(fmt);
 
-    if ((IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main) ||
-         IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main10)) && !CanUseIntelHEVC(va))
+    if (IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main) && !CanUseIntelHEVC8(va))
+        return VLC_EGENERIC;
+    if (IsEqualGUID(input,&DXVA_ModeHEVC_VLD_Main10) && !CanUseIntelHEVC10(va))
         return VLC_EGENERIC;
 
     int err = VLC_EGENERIC;



More information about the vlc-commits mailing list