diff options
author | Stefan Sauer <ensonic@users.sf.net> | 2012-03-15 22:22:12 +0100 |
---|---|---|
committer | Stefan Sauer <ensonic@users.sf.net> | 2012-03-15 22:34:45 +0100 |
commit | 3d7c8aad7024014fd9e48f5c52d42bcc5564c2d6 (patch) | |
tree | 345272167d91fcc349200d8c86239759592e28a0 | |
parent | e6c9b608517c3d54c1eed08ce36c1363788d8570 (diff) | |
download | gstreamer-plugins-bad-3d7c8aad7024014fd9e48f5c52d42bcc5564c2d6.tar.gz |
facedetect: don't skip faces
Skipping faces at this point makes us lie about the num-ber of faces and also
causes leaks.
-rw-r--r-- | ext/opencv/gstfacedetect.c | 89 |
1 files changed, 44 insertions, 45 deletions
diff --git a/ext/opencv/gstfacedetect.c b/ext/opencv/gstfacedetect.c index 01126710e..cff13e795 100644 --- a/ext/opencv/gstfacedetect.c +++ b/ext/opencv/gstfacedetect.c @@ -514,8 +514,6 @@ gst_face_detect_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf, for (i = 0; i < (faces ? faces->total : 0); i++) { CvRect *r = (CvRect *) cvGetSeqElem (faces, i); - GValue value = { 0 }; - GstStructure *s; guint mw = filter->min_size_width / 8; guint mh = filter->min_size_height / 8; guint rnx, rny, rnw, rnh; @@ -578,50 +576,51 @@ gst_face_detect_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf, i, faces->total, r->x, r->y, r->width, r->height, have_eyes, have_nose, have_mouth); - /* ignore 'face' where we don't fix mount/nose/eyes ? */ - if (!(have_eyes && have_nose && have_mouth)) - continue; - - s = gst_structure_new ("face", - "x", G_TYPE_UINT, r->x, - "y", G_TYPE_UINT, r->y, - "width", G_TYPE_UINT, r->width, - "height", G_TYPE_UINT, r->height, NULL); - if (nose && nose->total) { - CvRect *sr = (CvRect *) cvGetSeqElem (nose, 0); - GST_LOG_OBJECT (filter, "nose/%d: x,y = %4u,%4u: w.h = %4u,%4u", - nose->total, rnx + sr->x, rny + sr->y, sr->width, sr->height); - gst_structure_set (s, - "nose->x", G_TYPE_UINT, rnx + sr->x, - "nose->y", G_TYPE_UINT, rny + sr->y, - "nose->width", G_TYPE_UINT, sr->width, - "nose->height", G_TYPE_UINT, sr->height, NULL); - } - if (mouth && mouth->total) { - CvRect *sr = (CvRect *) cvGetSeqElem (mouth, 0); - GST_LOG_OBJECT (filter, "mouth/%d: x,y = %4u,%4u: w.h = %4u,%4u", - mouth->total, rmx + sr->x, rmy + sr->y, sr->width, sr->height); - gst_structure_set (s, - "mouth->x", G_TYPE_UINT, rmx + sr->x, - "mouth->y", G_TYPE_UINT, rmy + sr->y, - "mouth->width", G_TYPE_UINT, sr->width, - "mouth->height", G_TYPE_UINT, sr->height, NULL); - } - if (eyes && eyes->total) { - CvRect *sr = (CvRect *) cvGetSeqElem (eyes, 0); - GST_LOG_OBJECT (filter, "eyes/%d: x,y = %4u,%4u: w.h = %4u,%4u", - eyes->total, rex + sr->x, rey + sr->y, sr->width, sr->height); - gst_structure_set (s, - "eyes->x", G_TYPE_UINT, rex + sr->x, - "eyes->y", G_TYPE_UINT, rey + sr->y, - "eyes->width", G_TYPE_UINT, sr->width, - "eyes->height", G_TYPE_UINT, sr->height, NULL); - } + if (msg) { + GValue value = { 0 }; + GstStructure *s; + + s = gst_structure_new ("face", + "x", G_TYPE_UINT, r->x, + "y", G_TYPE_UINT, r->y, + "width", G_TYPE_UINT, r->width, + "height", G_TYPE_UINT, r->height, NULL); + if (nose && nose->total) { + CvRect *sr = (CvRect *) cvGetSeqElem (nose, 0); + GST_LOG_OBJECT (filter, "nose/%d: x,y = %4u,%4u: w.h = %4u,%4u", + nose->total, rnx + sr->x, rny + sr->y, sr->width, sr->height); + gst_structure_set (s, + "nose->x", G_TYPE_UINT, rnx + sr->x, + "nose->y", G_TYPE_UINT, rny + sr->y, + "nose->width", G_TYPE_UINT, sr->width, + "nose->height", G_TYPE_UINT, sr->height, NULL); + } + if (mouth && mouth->total) { + CvRect *sr = (CvRect *) cvGetSeqElem (mouth, 0); + GST_LOG_OBJECT (filter, "mouth/%d: x,y = %4u,%4u: w.h = %4u,%4u", + mouth->total, rmx + sr->x, rmy + sr->y, sr->width, sr->height); + gst_structure_set (s, + "mouth->x", G_TYPE_UINT, rmx + sr->x, + "mouth->y", G_TYPE_UINT, rmy + sr->y, + "mouth->width", G_TYPE_UINT, sr->width, + "mouth->height", G_TYPE_UINT, sr->height, NULL); + } + if (eyes && eyes->total) { + CvRect *sr = (CvRect *) cvGetSeqElem (eyes, 0); + GST_LOG_OBJECT (filter, "eyes/%d: x,y = %4u,%4u: w.h = %4u,%4u", + eyes->total, rex + sr->x, rey + sr->y, sr->width, sr->height); + gst_structure_set (s, + "eyes->x", G_TYPE_UINT, rex + sr->x, + "eyes->y", G_TYPE_UINT, rey + sr->y, + "eyes->width", G_TYPE_UINT, sr->width, + "eyes->height", G_TYPE_UINT, sr->height, NULL); + } - g_value_init (&value, GST_TYPE_STRUCTURE); - gst_value_set_structure (&value, s); - gst_value_list_append_value (&facelist, &value); - g_value_unset (&value); + g_value_init (&value, GST_TYPE_STRUCTURE); + gst_value_set_structure (&value, s); + gst_value_list_append_value (&facelist, &value); + g_value_unset (&value); + } if (do_display) { CvPoint center; |