faceblur: facedetect: templatematch: textwrite: Set buffer to writable

These elements operates in place, set buffer to writable before
operating.
This commit is contained in:
Thiago Santos 2010-04-26 17:34:12 -03:00
parent 42984056db
commit 5a9d9a8ae0
4 changed files with 15 additions and 15 deletions

View file

@ -272,6 +272,9 @@ gst_faceblur_chain (GstPad * pad, GstBuffer * buf)
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
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++) {
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
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);
cvResetImageROI (filter->cvImage);
}
}
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
filter->cvImage->imageSize);
/* these filters operate in place, so we push the same buffer */
return gst_pad_push (filter->srcpad, buf);
}

View file

@ -284,6 +284,10 @@ gst_facedetect_chain (GstPad * pad, GstBuffer * buf)
cvHaarDetectObjects (filter->cvGray, filter->cvCascade,
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++) {
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);
}

View file

@ -310,13 +310,14 @@ gst_templatematch_chain (GstPad * pad, GstBuffer * buf)
double best_res;
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) {
return GST_FLOW_OK;
}
filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf);
if (!filter->cvDistImage) {
filter->cvDistImage =
cvCreateImage (cvSize (filter->cvImage->width -
@ -344,6 +345,9 @@ gst_templatematch_chain (GstPad * pad, GstBuffer * buf)
if (filter->display) {
CvPoint corner = best_pos;
buf = gst_buffer_make_writable (buf);
corner.x += filter->cvTemplateImage->width;
corner.y += filter->cvTemplateImage->height;
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);
}

View file

@ -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);
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));
gst_buffer_set_data (buf, (guint8 *) filter->cvImage->imageData,
filter->cvImage->imageSize);
return gst_pad_push (filter->srcpad, buf);
}