[vlc-commits] d3d11_device: cleanup exit on error

Steve Lhomme git at videolan.org
Tue Feb 11 15:35:35 CET 2020


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Tue Feb 11 15:31:32 2020 +0100| [885e4eb8f492ff0496be99a72a92d303b7b6e89a] | committer: Steve Lhomme

d3d11_device: cleanup exit on error

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

 modules/hw/d3d11/d3d11_device.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/modules/hw/d3d11/d3d11_device.c b/modules/hw/d3d11/d3d11_device.c
index b4f620aa46..bec6670891 100644
--- a/modules/hw/d3d11/d3d11_device.c
+++ b/modules/hw/d3d11/d3d11_device.c
@@ -82,12 +82,13 @@ static int D3D11OpenDecoderDevice(vlc_decoder_device *device, bool forced, vout_
         return ret;
 
     sys->external.cleanupDeviceCb = NULL;
+    HRESULT hr;
 #if VLC_WINSTORE_APP
     /* LEGACY, the d3dcontext and swapchain were given by the host app */
     ID3D11DeviceContext *d3dcontext = (ID3D11DeviceContext*)(uintptr_t) var_InheritInteger(device, "winrt-d3dcontext");
     if ( likely(d3dcontext != NULL) )
     {
-        D3D11_CreateDeviceExternal(device, d3dcontext, true, &sys->dec_device.d3d_dev);
+        hr = D3D11_CreateDeviceExternal(device, d3dcontext, true, &sys->dec_device.d3d_dev);
     }
     else
 #endif
@@ -108,7 +109,7 @@ static int D3D11OpenDecoderDevice(vlc_decoder_device *device, bool forced, vout_
                     sys->external.cleanupDeviceCb( sys->external.opaque );
                 goto error;
             }
-            D3D11_CreateDeviceExternal(device, out.device_context, true, &sys->dec_device.d3d_dev);
+            hr = D3D11_CreateDeviceExternal(device, out.device_context, true, &sys->dec_device.d3d_dev);
         }
         else
         {
@@ -122,25 +123,18 @@ static int D3D11OpenDecoderDevice(vlc_decoder_device *device, bool forced, vout_
                 if (likely(hKernel32 != NULL))
                     isWin81OrGreater = GetProcAddress(hKernel32, "IsProcessCritical") != NULL;
                 if (!isWin81OrGreater)
-                    return VLC_EGENERIC;
+                    goto error;
             }
 #endif /* !VLC_WINSTORE_APP */
 
-            HRESULT hr = D3D11_CreateDevice( device, &sys->hd3d, NULL,
-                                            true /* is_d3d11_opaque(chroma) */,
-                                            &sys->dec_device.d3d_dev );
-            if ( FAILED( hr ) )
-            {
-                D3D11_Destroy(&sys->hd3d);
-                return VLC_EGENERIC;
-            }
+            hr = D3D11_CreateDevice( device, &sys->hd3d, NULL,
+                                     true /* is_d3d11_opaque(chroma) */,
+                                     &sys->dec_device.d3d_dev );
         }
     }
 
-    if ( !sys->dec_device.d3d_dev.d3dcontext )
-    {
-        return VLC_EGENERIC;
-    }
+    if ( FAILED( hr ) )
+        goto error;
 
     device->ops = &d3d11_dev_ops;
     device->opaque = &sys->dec_device;



More information about the vlc-commits mailing list