diff --git a/sys/ximage/gstximagesrc.c b/sys/ximage/gstximagesrc.c index 17f4a4e971..8058a953b6 100644 --- a/sys/ximage/gstximagesrc.c +++ b/sys/ximage/gstximagesrc.c @@ -85,10 +85,12 @@ static GstCaps *gst_ximage_src_fixate (GstBaseSrc * bsrc, GstCaps * caps); static void gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc); /* Called when a buffer is returned from the pipeline */ -static void +static gboolean gst_ximage_src_return_buf (GstXImageSrc * ximagesrc, GstBuffer * ximage) { GstMetaXImage *meta = GST_META_XIMAGE_GET (ximage); + /* True will make dispose free the buffer, while false will keep it */ + gboolean ret = TRUE; /* If our geometry changed we can't reuse that image. */ if ((meta->width != ximagesrc->width) || (meta->height != ximagesrc->height)) { @@ -107,7 +109,10 @@ gst_ximage_src_return_buf (GstXImageSrc * ximagesrc, GstBuffer * ximage) GST_BUFFER_FLAGS (GST_BUFFER (ximage)) = 0; /* clear out any flags from the previous use */ ximagesrc->buffer_pool = g_slist_prepend (ximagesrc->buffer_pool, ximage); g_mutex_unlock (&ximagesrc->pool_lock); + ret = FALSE; } + + return ret; } static Window diff --git a/sys/ximage/ximageutil.c b/sys/ximage/ximageutil.c index 76d2866ac0..a96a515b7a 100644 --- a/sys/ximage/ximageutil.c +++ b/sys/ximage/ximageutil.c @@ -314,11 +314,12 @@ ximageutil_calculate_pixel_aspect_ratio (GstXContext * xcontext) GST_DEBUG ("set xcontext PAR to %d/%d\n", xcontext->par_n, xcontext->par_d); } -static void +static gboolean gst_ximagesrc_buffer_dispose (GstBuffer * ximage) { GstElement *parent; GstMetaXImage *meta; + gboolean ret = TRUE; g_return_if_fail (ximage != NULL); @@ -331,10 +332,10 @@ gst_ximagesrc_buffer_dispose (GstBuffer * ximage) } if (meta->return_func) - meta->return_func (parent, ximage); + ret = meta->return_func (parent, ximage); beach: - return; + return ret; } void diff --git a/sys/ximage/ximageutil.h b/sys/ximage/ximageutil.h index d5e88fac8e..cd2e8893ea 100644 --- a/sys/ximage/ximageutil.h +++ b/sys/ximage/ximageutil.h @@ -134,7 +134,7 @@ void ximageutil_calculate_pixel_aspect_ratio (GstXContext * xcontext); /* custom ximagesrc buffer, copied from ximagesink */ /* BufferReturnFunc is called when a buffer is finalised */ -typedef void (*BufferReturnFunc) (GstElement *parent, GstBuffer *buf); +typedef gboolean (*BufferReturnFunc) (GstElement *parent, GstBuffer *buf); /** * GstMetaXImage: