Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
    }
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
  }
}