]> git.sesse.net Git - vlc/commitdiff
direct3d11: implement the pixel format fallback
authorSteve Lhomme <robUx4@videolabs.io>
Mon, 23 Mar 2015 14:15:47 +0000 (15:15 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Mon, 23 Mar 2015 17:11:43 +0000 (18:11 +0100)
NV12 is not supported in Windows 7 [1] so we need to fallback to RGBA

1: https://msdn.microsoft.com/en-us/library/windows/desktop/bb173059%28v=vs.85%29.aspx#DXGI_FORMAT_NV12

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/video_output/msw/direct3d11.c

index 1adcde5108f9f02f787632297c9523af0f64521c..3cc10b92774b8c950f4240e4f5fc8d170f494024 100644 (file)
@@ -192,10 +192,6 @@ static int Open(vlc_object_t *object)
     if (CommonInit(vd))
         goto error;
 
-    /* TODO : A fallback system */
-    vd->sys->d3dFormat = d3d_formats[0].format;
-    vd->sys->vlcFormat = d3d_formats[0].fourcc;
-
     video_format_t fmt;
     if (Direct3D11Open(vd, &fmt)) {
         msg_Err(vd, "Direct3D11 could not be opened");
@@ -586,6 +582,25 @@ static int Direct3D11Open(vout_display_t *vd, video_format_t *fmt)
 # endif
 #endif
 
+    for (unsigned i = 0; d3d_formats[i].name != 0; i++)
+    {
+        UINT i_formatSupport;
+        if( SUCCEEDED( ID3D11Device_CheckFormatSupport(sys->d3ddevice,
+                                                       d3d_formats[i].format,
+                                                       &i_formatSupport)) &&
+                ( i_formatSupport & D3D11_FORMAT_SUPPORT_TEXTURE2D ))
+        {
+            msg_Dbg(vd, "Using pixel format %s", d3d_formats[i].name );
+            sys->d3dFormat = d3d_formats[i].format;
+            sys->vlcFormat = d3d_formats[i].fourcc;
+            break;
+        }
+    }
+    if ( !sys->vlcFormat ) {
+       msg_Err(vd, "Could not get a suitable texture pixel format");
+       return VLC_EGENERIC;
+    }
+
     UpdateRects(vd, NULL, NULL, true);
 
     if (Direct3D11CreateResources(vd, fmt)) {