d3dvideosink: Don't leak all surfaces
authorSebastian Dröge <sebastian@centricular.com>
Wed, 2 Jul 2014 08:31:49 +0000 (10:31 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 2 Jul 2014 08:33:15 +0000 (10:33 +0200)
This was broken when disabling the buffer pool exporting.

Also disable buffer pool a bit more efficient...

sys/d3dvideosink/d3dhelpers.c
sys/d3dvideosink/d3dvideosink.c

index c9b0d1b..03ed6ee 100644 (file)
@@ -1881,13 +1881,9 @@ d3d_render_buffer (GstD3DVideoSink * sink, GstBuffer * buf)
 
     surface = ((GstD3DSurfaceMemory *) mem)->surface;
 
-#ifndef DISABLE_BUFFER_POOL
     /* Need to keep an additional ref until the next buffer
      * to make sure it isn't reused until then */
     sink->fallback_buffer = buf;
-#else
-    sink->fallback_buffer = NULL;
-#endif
   } else {
     mem = gst_buffer_peek_memory (buf, 0);
     surface = ((GstD3DSurfaceMemory *) mem)->surface;
@@ -1900,9 +1896,7 @@ d3d_render_buffer (GstD3DVideoSink * sink, GstBuffer * buf)
 
   if (sink->d3d.surface)
     IDirect3DSurface9_Release (sink->d3d.surface);
-#ifndef DISABLE_BUFFER_POOL
   IDirect3DSurface9_AddRef (surface);
-#endif
   sink->d3d.surface = surface;
 
   if (!d3d_present_swap_chain (sink)) {
index 09ced08..5568075 100644 (file)
@@ -472,6 +472,10 @@ gst_d3dvideosink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
   gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
   gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE, NULL);
 
+#ifdef DISABLE_BUFFER_POOL
+  return TRUE;
+#endif
+
   GST_OBJECT_LOCK (sink);
   pool = sink->pool ? gst_object_ref (sink->pool) : NULL;
   GST_OBJECT_UNLOCK (sink);
@@ -520,9 +524,7 @@ gst_d3dvideosink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
 
   if (pool) {
     /* we need at least 2 buffer because we hold on to the last one */
-#ifndef DISABLE_BUFFER_POOL
     gst_query_add_allocation_pool (query, pool, size, 2, 0);
-#endif
     gst_object_unref (pool);
   }