handdetect: code refactoring of gst_handdetect_load_profile.

Change gst_handdetect_load_profile() so it can be used generically.

https://bugzilla.gnome.org/show_bug.cgi?id=752528
This commit is contained in:
Vanessa Chipirrás Navalón 2015-08-17 17:47:42 +02:00 committed by Luis de Bethencourt
parent a452ce4099
commit 00a55d1a69

View File

@ -113,7 +113,8 @@ static gboolean gst_handdetect_set_caps (GstOpencvVideoFilter * transform,
static GstFlowReturn gst_handdetect_transform_ip (GstOpencvVideoFilter * static GstFlowReturn gst_handdetect_transform_ip (GstOpencvVideoFilter *
transform, GstBuffer * buffer, IplImage * img); transform, GstBuffer * buffer, IplImage * img);
static void gst_handdetect_load_profile (GstHanddetect * filter); static CvHaarClassifierCascade *gst_handdetect_load_profile (GstHanddetect *
filter, gchar * profile);
static void gst_handdetect_navigation_interface_init (GstNavigationInterface * static void gst_handdetect_navigation_interface_init (GstNavigationInterface *
iface); iface);
@ -270,7 +271,10 @@ gst_handdetect_init (GstHanddetect * filter)
filter->roi_height = 0; filter->roi_height = 0;
filter->display = TRUE; filter->display = TRUE;
gst_handdetect_load_profile (filter); filter->cvCascade_fist =
gst_handdetect_load_profile (filter, filter->profile_fist);
filter->cvCascade_palm =
gst_handdetect_load_profile (filter, filter->profile_palm);
gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter), gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
TRUE); TRUE);
@ -286,12 +290,14 @@ gst_handdetect_set_property (GObject * object, guint prop_id,
case PROP_PROFILE_FIST: case PROP_PROFILE_FIST:
g_free (filter->profile_fist); g_free (filter->profile_fist);
filter->profile_fist = g_value_dup_string (value); filter->profile_fist = g_value_dup_string (value);
gst_handdetect_load_profile (filter); filter->cvCascade_fist =
gst_handdetect_load_profile (filter, filter->profile_fist);
break; break;
case PROP_PROFILE_PALM: case PROP_PROFILE_PALM:
g_free (filter->profile_palm); g_free (filter->profile_palm);
filter->profile_palm = g_value_dup_string (value); filter->profile_palm = g_value_dup_string (value);
gst_handdetect_load_profile (filter); filter->cvCascade_palm =
gst_handdetect_load_profile (filter, filter->profile_palm);
break; break;
case PROP_DISPLAY: case PROP_DISPLAY:
filter->display = g_value_get_boolean (value); filter->display = g_value_get_boolean (value);
@ -602,26 +608,18 @@ gst_handdetect_transform_ip (GstOpencvVideoFilter * transform,
return GST_FLOW_OK; return GST_FLOW_OK;
} }
static void static CvHaarClassifierCascade *
gst_handdetect_load_profile (GstHanddetect * filter) gst_handdetect_load_profile (GstHanddetect * filter, gchar * profile)
{ {
GST_DEBUG_OBJECT (filter, "Loading profiles...\n"); CvHaarClassifierCascade *cascade;
filter->cvCascade_fist =
(CvHaarClassifierCascade *) cvLoad (filter->profile_fist, 0, 0, 0); if (profile == NULL)
filter->cvCascade_palm = return NULL;
(CvHaarClassifierCascade *) cvLoad (filter->profile_palm, 0, 0, 0); if (!(cascade = (CvHaarClassifierCascade *) cvLoad (profile, 0, 0, 0))) {
if (!filter->cvCascade_fist || !filter->cvCascade_palm) GST_WARNING_OBJECT (filter, "Couldn't load Haar classifier cascade: %s.",
GST_WARNING_OBJECT (filter, profile);
"WARNING: Could not load HAAR classifier cascade: %s.\n", }
filter->profile_fist); return cascade;
else
GST_DEBUG_OBJECT (filter, "Loaded profile %s\n", filter->profile_fist);
if (!filter->cvCascade_palm)
GST_WARNING_OBJECT (filter,
"WARNING: Could not load HAAR classifier cascade: %s.\n",
filter->profile_palm);
else
GST_DEBUG_OBJECT (filter, "Loaded profile %s\n", filter->profile_palm);
} }
/* Entry point to initialize the plug-in /* Entry point to initialize the plug-in