From ff6ed239b4a5159f9309fc2ff25d1ca6797e936c Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Thu, 1 Dec 2016 21:45:53 -0500 Subject: [PATCH] cvlaplace: Avoid extra copy of the output image Simply produce the result into the output image provided by the base class. This avoid useless copy. This also removes unchecked buffer map and ensure that GstVideoMeta is respected (for stride mostly). https://bugzilla.gnome.org/show_bug.cgi?id=775377 --- ext/opencv/gstcvlaplace.cpp | 14 +++----------- ext/opencv/gstcvlaplace.h | 1 - 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/ext/opencv/gstcvlaplace.cpp b/ext/opencv/gstcvlaplace.cpp index 865a965d69..d4baed8bbd 100644 --- a/ext/opencv/gstcvlaplace.cpp +++ b/ext/opencv/gstcvlaplace.cpp @@ -120,7 +120,6 @@ gst_cv_laplace_finalize (GObject * obj) cvReleaseImage (&filter->intermediary_img); cvReleaseImage (&filter->cvGray); cvReleaseImage (&filter->Laplace); - cvReleaseImage (&filter->CLaplace); } G_OBJECT_CLASS (gst_cv_laplace_parent_class)->finalize (obj); @@ -192,12 +191,10 @@ gst_cv_laplace_cv_set_caps (GstOpencvVideoFilter * trans, gint in_width, if (filter->intermediary_img != NULL) { cvReleaseImage (&filter->intermediary_img); - cvReleaseImage (&filter->CLaplace); cvReleaseImage (&filter->cvGray); cvReleaseImage (&filter->Laplace); } - filter->CLaplace = cvCreateImage (cvSize (in_width, in_height), IPL_DEPTH_8U, in_channels); filter->intermediary_img = cvCreateImage (cvSize (out_width, out_height), IPL_DEPTH_16S, 1); filter->cvGray = cvCreateImage (cvSize (in_width, in_height), IPL_DEPTH_8U, 1); @@ -267,7 +264,6 @@ gst_cv_laplace_transform (GstOpencvVideoFilter * base, GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg) { GstCvLaplace *filter = GST_CV_LAPLACE (base); - GstMapInfo out_info; g_assert (filter->intermediary_img); @@ -276,17 +272,13 @@ gst_cv_laplace_transform (GstOpencvVideoFilter * base, GstBuffer * buf, cvConvertScale (filter->intermediary_img, filter->Laplace, filter->scale, filter->shift); - cvZero (filter->CLaplace); + cvZero (outimg); if (filter->mask) { - cvCopy (img, filter->CLaplace, filter->Laplace); + cvCopy (img, outimg, filter->Laplace); } else { - cvCvtColor (filter->Laplace, filter->CLaplace, CV_GRAY2RGB); + cvCvtColor (filter->Laplace, outimg, CV_GRAY2RGB); } - gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE); - memcpy (out_info.data, filter->CLaplace->imageData, - gst_buffer_get_size (outbuf)); - return GST_FLOW_OK; } diff --git a/ext/opencv/gstcvlaplace.h b/ext/opencv/gstcvlaplace.h index 7163695c9e..d5cabb9e2d 100644 --- a/ext/opencv/gstcvlaplace.h +++ b/ext/opencv/gstcvlaplace.h @@ -75,7 +75,6 @@ struct _GstCvLaplace IplImage *intermediary_img; IplImage *cvGray; IplImage *Laplace; - IplImage *CLaplace; }; struct _GstCvLaplaceClass