summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Sauer <ensonic@users.sf.net>2012-03-15 22:22:12 +0100
committerStefan Sauer <ensonic@users.sf.net>2012-03-15 22:34:45 +0100
commit3d7c8aad7024014fd9e48f5c52d42bcc5564c2d6 (patch)
tree345272167d91fcc349200d8c86239759592e28a0
parente6c9b608517c3d54c1eed08ce36c1363788d8570 (diff)
downloadgstreamer-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.c89
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;