d3dvideosinnk: check d3d device exists before creating overlay vertex buffer
authorAaron Boxer <aaron.boxer@collabora.com>
Sat, 7 Dec 2019 05:16:05 +0000 (23:16 -0600)
committerAaron Boxer <aaron.boxer@collabora.com>
Wed, 18 Dec 2019 18:15:05 +0000 (13:15 -0500)
sys/d3dvideosink/gstd3d9overlay.c

index 5eeb89d..5ad241a 100644 (file)
@@ -54,6 +54,11 @@ GST_DEBUG_CATEGORY_EXTERN (gst_d3dvideosink_debug);
           goto end; \
         }
 
+#define CHECK_D3D_DEVICE(klass, sink, goto_label)                       \
+  if(!klass->d3d.d3d || !klass->d3d.device.d3d_device) {                \
+    GST_ERROR_OBJECT(sink, "Direct3D device or object does not exist"); \
+    goto goto_label;                                                    \
+  }
 
 typedef struct _textured_vertex
 {
@@ -362,6 +367,7 @@ gst_d3d9_overlay_init_vb (GstD3DVideoSink * sink,
       GST_ERROR_OBJECT (sink, "Failed to release D3D vertex buffer");
     }
   }
+  CHECK_D3D_DEVICE (klass, sink, error);
   hr = IDirect3DDevice9_CreateVertexBuffer (klass->d3d.device.d3d_device, byte_count,   /* Length */
       D3DUSAGE_WRITEONLY,       /* Usage */
       tri_fvf,                  /* FVF */
@@ -403,6 +409,9 @@ gst_d3d9_overlay_init_vb (GstD3DVideoSink * sink,
   }
 
   return D3D_OK;
+
+error:
+  return hr;
 }
 
 gboolean