From 42984056db42cd07f02bc8c153bb0933fb41a3c2 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 26 Apr 2010 16:17:23 -0300 Subject: [PATCH] edgedetect: Fix chain buffer handling Allocate a new output buffer instead of using the input buffer pointing to the internal cvCEdge opencv's IplImage data, which might change, consequently changing the buffer. --- ext/opencv/edgedetect/gstedgedetect.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ext/opencv/edgedetect/gstedgedetect.c b/ext/opencv/edgedetect/gstedgedetect.c index aa7b377..77e1d62 100644 --- a/ext/opencv/edgedetect/gstedgedetect.c +++ b/ext/opencv/edgedetect/gstedgedetect.c @@ -288,6 +288,7 @@ static GstFlowReturn gst_edgedetect_chain (GstPad * pad, GstBuffer * buf) { Gstedgedetect *filter; + GstBuffer *outbuf; filter = GST_EDGEDETECT (GST_OBJECT_PARENT (pad)); @@ -305,10 +306,14 @@ gst_edgedetect_chain (GstPad * pad, GstBuffer * buf) } else { cvCvtColor (filter->cvEdge, filter->cvCEdge, CV_GRAY2RGB); } - gst_buffer_set_data (buf, (guint8 *) filter->cvCEdge->imageData, - filter->cvCEdge->imageSize); - return gst_pad_push (filter->srcpad, buf); + outbuf = gst_buffer_new_and_alloc (filter->cvCEdge->imageSize); + gst_buffer_copy_metadata (outbuf, buf, GST_BUFFER_COPY_ALL); + memcpy (GST_BUFFER_DATA (outbuf), filter->cvCEdge->imageData, + GST_BUFFER_SIZE (outbuf)); + + gst_buffer_unref (buf); + return gst_pad_push (filter->srcpad, outbuf); } /* entry point to initialize the plug-in -- 2.7.4