static guchar * load_image (const gchar *name, guint width, guint height) { guchar *grayscale_buffer; guint16 *depth; gchar *contents; gsize len; GError *error = NULL; gsize count = width * height * sizeof (guint16); depth = read_file_to_buffer (name, count, error); if (error != NULL) { g_debug ("Error Opening: %s", error->message); return NULL; } if (depth == NULL) { return NULL; } grayscale_buffer = create_grayscale_buffer (depth, width, height); g_slice_free1 (width * height * sizeof (guint16), depth); return grayscale_buffer; }
static void on_depth_frame (GFreenectDevice *kinect, gpointer user_data) { gint width, height; gint dimension_factor; guchar *grayscale_buffer; guint16 *depth; BufferInfo *buffer_info; gsize len; GError *error = NULL; GFreenectFrameMode frame_mode; depth = (guint16 *) gfreenect_device_get_depth_frame_raw (kinect, &len, &frame_mode); width = frame_mode.width; height = frame_mode.height; g_object_get (skeleton, "dimension-reduction", &dimension_factor, NULL); buffer_info = process_buffer (depth, width, height, dimension_factor, THRESHOLD_BEGIN, THRESHOLD_END); skeltrack_skeleton_track_joints (skeleton, buffer_info->reduced_buffer, buffer_info->reduced_width, buffer_info->reduced_height, NULL, on_track_joints, buffer_info); if (!SHOW_SKELETON) { grayscale_buffer = create_grayscale_buffer (buffer_info, dimension_factor); if (! clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE (depth_tex), grayscale_buffer, FALSE, width, height, 0, 3, CLUTTER_TEXTURE_NONE, &error)) { g_debug ("Error setting texture area: %s", error->message); g_error_free (error); } g_slice_free1 (width * height * sizeof (guchar) * 3, grayscale_buffer); } }
static void on_depth_frame (GFreenectDevice *kinect, gpointer user_data) { gint width, height; guchar *grayscale_buffer; guint16 *depth; gchar *contents; BufferInfo *buffer_info; gsize len; GError *error = NULL; GFreenectFrameMode frame_mode; depth = (guint16 *) gfreenect_device_get_depth_frame_raw (kinect, &len, &frame_mode); if (error != NULL) { g_debug ("ERROR Opening: %s", error->message); } width = frame_mode.width; height = frame_mode.height; buffer_info = process_buffer (depth, width, height, 1, THRESHOLD_BEGIN, THRESHOLD_END); grayscale_buffer = create_grayscale_buffer (buffer_info, 1); if (record_shot) { g_debug ("Taking shot..."); GError *error = NULL; gchar *name = g_strdup_printf ("./depth-data-%d", g_get_real_time ()); g_file_set_contents (name, (gchar *) buffer_info->reduced_buffer, width * height * sizeof (guint16), &error); if (error != NULL) { g_debug ("ERROR: %s", error->message); } else { g_print ("Created file: %s\n", name); } record_shot = FALSE; } if (! clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE (depth_tex), grayscale_buffer, FALSE, width, height, 0, 3, CLUTTER_TEXTURE_NONE, &error)) { g_debug ("Error setting texture area: %s", error->message); g_error_free (error); } g_slice_free1 (width * height * sizeof (guchar) * 3, grayscale_buffer); }
static void on_depth_frame (GFreenectDevice *kinect, gpointer user_data) { gboolean smoothing_enabled; gint width, height; gint dimension_factor; guchar *grayscale_buffer; guint16 *depth; BufferInfo *buffer_info; gsize len; GError *error = NULL; GFreenectFrameMode frame_mode; ClutterContent *content; depth = (guint16 *) gfreenect_device_get_depth_frame_raw (kinect, &len, &frame_mode); width = frame_mode.width; height = frame_mode.height; g_object_get (skeleton, "dimension-reduction", &dimension_factor, NULL); buffer_info = process_buffer (depth, width, height, dimension_factor, THRESHOLD_BEGIN, THRESHOLD_END); skeltrack_skeleton_track_joints (skeleton, buffer_info->reduced_buffer, buffer_info->reduced_width, buffer_info->reduced_height, NULL, on_track_joints, buffer_info); content = clutter_actor_get_content (depth_tex); if (!SHOW_SKELETON) { grayscale_buffer = create_grayscale_buffer (buffer_info, dimension_factor); if (depth_image == NULL) depth_image = clutter_image_new (); /* ref because we don't want it to be freed */ if (depth_canvas == content) g_object_ref (depth_canvas); clutter_actor_set_content (depth_tex, depth_image); if (! clutter_image_set_data (CLUTTER_IMAGE (depth_image), grayscale_buffer, COGL_PIXEL_FORMAT_RGB_888, width, height, 0, &error)) { g_debug ("Error setting texture area: %s", error->message); g_error_free (error); } g_slice_free1 (width * height * sizeof (guchar) * 3, grayscale_buffer); } else { /* ref because we don't want it to be freed */ if (depth_image && depth_image == content) g_object_ref (depth_image); clutter_actor_set_content (depth_tex, depth_canvas); } }