d3dvideosink: release the offscreen surface before the d3d device
authorAndoni Morales Alastruey <ylatuya@gmail.com>
Mon, 25 Jun 2012 14:18:41 +0000 (16:18 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 26 Jun 2012 07:40:29 +0000 (09:40 +0200)
The offscreen surface keeps a reference on the d3d device, so if the
device is released first we don't see the reference count debug message
going to 0 as it should be.

sys/d3dvideosink/d3dvideosink.c

index 5af373a..e00ea6e 100644 (file)
@@ -2243,13 +2243,6 @@ error:
 static gboolean
 gst_d3dvideosink_release_d3d_device (GstD3DVideoSink * sink)
 {
-  if (sink->d3ddev) {
-    int ref_count;
-    ref_count = IDirect3DDevice9_Release (sink->d3ddev);
-    sink->d3ddev = NULL;
-    GST_DEBUG_OBJECT (sink, "Direct3D device released. Reference count: %d",
-        ref_count);
-  }
   if (sink->d3d_offscreen_surface) {
     int ref_count;
     ref_count = IDirect3DSurface9_Release (sink->d3d_offscreen_surface);
@@ -2257,6 +2250,13 @@ gst_d3dvideosink_release_d3d_device (GstD3DVideoSink * sink)
     GST_DEBUG_OBJECT (sink,
         "Direct3D offscreen surface released. Reference count: %d", ref_count);
   }
+  if (sink->d3ddev) {
+    int ref_count;
+    ref_count = IDirect3DDevice9_Release (sink->d3ddev);
+    sink->d3ddev = NULL;
+    GST_DEBUG_OBJECT (sink, "Direct3D device released. Reference count: %d",
+        ref_count);
+  }
   return TRUE;
 }