Skip to content
This repository has been archived by the owner on Feb 27, 2023. It is now read-only.

Commit

Permalink
Refactor the way it adjusts the shoulder from virtual ones
Browse files Browse the repository at this point in the history
  • Loading branch information
joaquimrocha committed Oct 2, 2012
1 parent f846a0b commit 70b9be4
Showing 1 changed file with 54 additions and 44 deletions.
98 changes: 54 additions & 44 deletions skeltrack/skeltrack-skeleton.c
Expand Up @@ -1559,6 +1559,38 @@ set_left_and_right_from_extremas (SkeltrackSkeleton *self,
g_slice_free1 (matrix_size * sizeof (gint), dist_right_b); g_slice_free1 (matrix_size * sizeof (gint), dist_right_b);
} }


static Node *
get_adjusted_shoulder (guint buffer_width,
guint buffer_height,
guint dimension_reduction,
GList *graph,
Node *centroid,
Node *head,
Node *shoulder)
{
Node *virtual_shoulder, *adjusted_shoulder = NULL;
virtual_shoulder = g_slice_new (Node);
virtual_shoulder->x = shoulder->x;
virtual_shoulder->y = shoulder->y;
virtual_shoulder->z = centroid->z;

convert_mm_to_screen_coords (buffer_width,
buffer_height,
dimension_reduction,
virtual_shoulder->x,
virtual_shoulder->y,
virtual_shoulder->z,
(guint *) &virtual_shoulder->i,
(guint *) &virtual_shoulder->j);

adjusted_shoulder = get_closest_torso_node (graph,
virtual_shoulder,
head);
g_slice_free (Node, virtual_shoulder);

return adjusted_shoulder;
}

static SkeltrackJoint ** static SkeltrackJoint **
track_joints (SkeltrackSkeleton *self) track_joints (SkeltrackSkeleton *self)
{ {
Expand Down Expand Up @@ -1617,28 +1649,17 @@ track_joints (SkeltrackSkeleton *self)


if (left_shoulder && head && head->z > left_shoulder->z) if (left_shoulder && head && head->z > left_shoulder->z)
{ {
Node *virtual_left_shoulder = g_slice_new (Node); Node *adjusted_shoulder;

adjusted_shoulder = get_adjusted_shoulder (self->priv->buffer_width,
virtual_left_shoulder->x = left_shoulder->x; self->priv->buffer_height,
virtual_left_shoulder->y = left_shoulder->y; self->priv->dimension_reduction,
virtual_left_shoulder->z = centroid->z; self->priv->graph,

centroid,
convert_mm_to_screen_coords (self->priv->buffer_width, head,
self->priv->buffer_height, left_shoulder);
self->priv->dimension_reduction,
virtual_left_shoulder->x, if (adjusted_shoulder)
virtual_left_shoulder->y, left_shoulder = adjusted_shoulder;
virtual_left_shoulder->z,
(guint *) &virtual_left_shoulder->i,
(guint *) &virtual_left_shoulder->j);

Node *neighbor = get_closest_torso_node (self->priv->graph,
virtual_left_shoulder,
head);
if (neighbor)
left_shoulder = neighbor;

g_slice_free (Node, virtual_left_shoulder);
} }


set_joint_from_node (&joints, set_joint_from_node (&joints,
Expand All @@ -1648,28 +1669,17 @@ track_joints (SkeltrackSkeleton *self)


if (right_shoulder && head && head->z > right_shoulder->z) if (right_shoulder && head && head->z > right_shoulder->z)
{ {
Node *virtual_right_shoulder = g_slice_new (Node); Node *adjusted_shoulder;

adjusted_shoulder = get_adjusted_shoulder (self->priv->buffer_width,
virtual_right_shoulder->x = right_shoulder->x; self->priv->buffer_height,
virtual_right_shoulder->y = right_shoulder->y; self->priv->dimension_reduction,
virtual_right_shoulder->z = centroid->z; self->priv->graph,

centroid,
convert_mm_to_screen_coords (self->priv->buffer_width, head,
self->priv->buffer_height, right_shoulder);
self->priv->dimension_reduction,
virtual_right_shoulder->x, if (adjusted_shoulder)
virtual_right_shoulder->y, right_shoulder = adjusted_shoulder;
virtual_right_shoulder->z,
(guint *) &virtual_right_shoulder->i,
(guint *) &virtual_right_shoulder->j);

Node *neighbor = get_closest_torso_node (self->priv->graph,
virtual_right_shoulder,
centroid);
if (neighbor)
right_shoulder = neighbor;

g_slice_free (Node, virtual_right_shoulder);
} }
set_joint_from_node (&joints, set_joint_from_node (&joints,
right_shoulder, right_shoulder,
Expand Down

0 comments on commit 70b9be4

Please sign in to comment.