faceblur: facedetect: templatematch: textwrite: Set buffer to writable
These elements operates in place, set buffer to writable before operating.
This commit is contained in:
parent
42984056db
commit
5a9d9a8ae0
@ -272,6 +272,9 @@ gst_faceblur_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
|
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
|
||||||
filter->cvStorage, 1.1, 2, 0, cvSize (30, 30));
|
filter->cvStorage, 1.1, 2, 0, cvSize (30, 30));
|
||||||
|
|
||||||
|
if (faces && faces->total > 0) {
|
||||||
|
buf = gst_buffer_make_writable (buf);
|
||||||
|
}
|
||||||
for (i = 0; i < (faces ? faces->total : 0); i++) {
|
for (i = 0; i < (faces ? faces->total : 0); i++) {
|
||||||
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
|
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
|
||||||
cvSetImageROI (filter->cvImage, *r);
|
cvSetImageROI (filter->cvImage, *r);
|
||||||
@ -279,11 +282,9 @@ gst_faceblur_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
cvSmooth (filter->cvImage, filter->cvImage, CV_GAUSSIAN, 11, 11, 0, 0);
|
cvSmooth (filter->cvImage, filter->cvImage, CV_GAUSSIAN, 11, 11, 0, 0);
|
||||||
cvResetImageROI (filter->cvImage);
|
cvResetImageROI (filter->cvImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
|
/* these filters operate in place, so we push the same buffer */
|
||||||
filter->cvImage->imageSize);
|
|
||||||
|
|
||||||
return gst_pad_push (filter->srcpad, buf);
|
return gst_pad_push (filter->srcpad, buf);
|
||||||
}
|
}
|
||||||
|
@ -284,6 +284,10 @@ gst_facedetect_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
|
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
|
||||||
filter->cvStorage, 1.1, 2, 0, cvSize (30, 30));
|
filter->cvStorage, 1.1, 2, 0, cvSize (30, 30));
|
||||||
|
|
||||||
|
if (filter->display && faces && faces->total > 0) {
|
||||||
|
buf = gst_buffer_make_writable (buf);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < (faces ? faces->total : 0); i++) {
|
for (i = 0; i < (faces ? faces->total : 0); i++) {
|
||||||
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
|
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
|
||||||
|
|
||||||
@ -310,9 +314,6 @@ gst_facedetect_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
|
|
||||||
filter->cvImage->imageSize);
|
|
||||||
|
|
||||||
return gst_pad_push (filter->srcpad, buf);
|
return gst_pad_push (filter->srcpad, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,13 +310,14 @@ gst_templatematch_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
double best_res;
|
double best_res;
|
||||||
|
|
||||||
filter = GST_TEMPLATEMATCH (GST_OBJECT_PARENT (pad));
|
filter = GST_TEMPLATEMATCH (GST_OBJECT_PARENT (pad));
|
||||||
buf = gst_buffer_make_writable (buf);
|
|
||||||
|
/* FIXME Why template == NULL returns OK?
|
||||||
|
* shouldn't it be a passthrough instead? */
|
||||||
if ((!filter) || (!buf) || filter->template == NULL) {
|
if ((!filter) || (!buf) || filter->template == NULL) {
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf);
|
filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf);
|
||||||
|
|
||||||
|
|
||||||
if (!filter->cvDistImage) {
|
if (!filter->cvDistImage) {
|
||||||
filter->cvDistImage =
|
filter->cvDistImage =
|
||||||
cvCreateImage (cvSize (filter->cvImage->width -
|
cvCreateImage (cvSize (filter->cvImage->width -
|
||||||
@ -344,6 +345,9 @@ gst_templatematch_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
|
|
||||||
if (filter->display) {
|
if (filter->display) {
|
||||||
CvPoint corner = best_pos;
|
CvPoint corner = best_pos;
|
||||||
|
|
||||||
|
buf = gst_buffer_make_writable (buf);
|
||||||
|
|
||||||
corner.x += filter->cvTemplateImage->width;
|
corner.x += filter->cvTemplateImage->width;
|
||||||
corner.y += filter->cvTemplateImage->height;
|
corner.y += filter->cvTemplateImage->height;
|
||||||
cvRectangle (filter->cvImage, best_pos, corner, CV_RGB (255, 32, 32), 3,
|
cvRectangle (filter->cvImage, best_pos, corner, CV_RGB (255, 32, 32), 3,
|
||||||
@ -352,10 +356,6 @@ gst_templatematch_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
|
|
||||||
filter->cvImage->imageSize);
|
|
||||||
|
|
||||||
return gst_pad_push (filter->srcpad, buf);
|
return gst_pad_push (filter->srcpad, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,11 +384,9 @@ gst_textwrite_chain (GstPad * pad, GstBuffer * buf)
|
|||||||
|
|
||||||
cvInitFont(&(filter->font),CV_FONT_VECTOR0, filter->width,filter->height,0,filter->thickness,0);
|
cvInitFont(&(filter->font),CV_FONT_VECTOR0, filter->width,filter->height,0,filter->thickness,0);
|
||||||
|
|
||||||
|
buf = gst_buffer_make_writable (buf);
|
||||||
cvPutText (filter->cvImage,filter->textbuf,cvPoint(filter->xpos,filter->ypos), &(filter->font), cvScalar(filter->colorR,filter->colorG,filter->colorB,0));
|
cvPutText (filter->cvImage,filter->textbuf,cvPoint(filter->xpos,filter->ypos), &(filter->font), cvScalar(filter->colorR,filter->colorG,filter->colorB,0));
|
||||||
|
|
||||||
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
|
|
||||||
filter->cvImage->imageSize);
|
|
||||||
|
|
||||||
return gst_pad_push (filter->srcpad, buf);
|
return gst_pad_push (filter->srcpad, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user