Commit 25974ac0 authored by Sebastian Dröge's avatar Sebastian Dröge 🍵

d3dvideosink: Don't leak all surfaces

This was broken when disabling the buffer pool exporting.

Also disable buffer pool a bit more efficient...
parent 28d250ec
......@@ -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)) {
......
......@@ -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);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment