vlc | branch: master | Steve Lhomme <[email protected]> | Wed Mar 11 15:01:58 
2020 +0100| [5f1a0aa70cdfb8fc74fb8d099086c12c4a41716a] | committer: Steve Lhomme

dxva2: select the favorite decoder format later

We need to know the chroma subsampling and bitdepth before we can choose a good
candidate. The list of supported formats provided by the decoder may not be the
optimal choice, not respecting the minimum bitdepth or adding more chroma
subsampling if falling back to NV12.

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

 modules/codec/avcodec/dxva2.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 3dda2c6c03..6009fe826a 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -281,11 +281,6 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum 
PixelFormat hwfmt, const
 
     va->sys = sys;
 
-    if (desc->comp[0].depth > 8)
-        sys->render = MAKEFOURCC('P','0','1','0');
-    else
-        sys->render =  MAKEFOURCC('N','V','1','2');
-
     /* Load dll*/
     sys->dxva2_dll = LoadLibrary(TEXT("DXVA2.DLL"));
     if (!sys->dxva2_dll) {
@@ -470,6 +465,14 @@ static int DxSetupOutput(vlc_va_t *va, const 
directx_va_mode_t *mode, const vide
         }
     }
 
+    D3DFORMAT preferredOutput;
+    if (mode->bit_depth > 8)
+        preferredOutput = MAKEFOURCC('P','0','1','0');
+    else
+        preferredOutput =  MAKEFOURCC('N','V','1','2');
+    msg_Dbg(va, "favor decoder format %4.4s (for %d bits)", (const 
char*)&preferredOutput,
+            mode->bit_depth);
+
     /* */
     for (unsigned pass = 0; pass < 2 && err != VLC_SUCCESS; ++pass)
     {
@@ -483,7 +486,7 @@ static int DxSetupOutput(vlc_va_t *va, const 
directx_va_mode_t *mode, const vide
             }
             if (!is_supported)
                 continue;
-            if (pass == 0 && format->format != sys->render)
+            if (pass == 0 && format->format != preferredOutput)
                 continue;
 
             /* We have our solution */

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to