Commit ff6ed239 authored by Nicolas Dufresne's avatar Nicolas Dufresne

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
parent 50e0165e
......@@ -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;
}
......
......@@ -75,7 +75,6 @@ struct _GstCvLaplace
IplImage *intermediary_img;
IplImage *cvGray;
IplImage *Laplace;
IplImage *CLaplace;
};
struct _GstCvLaplaceClass
......
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