invisible

annotate src/kinect.cc @ 4:1ff5a1a50b41

foo, TODO: fix conversions
author Eleni Maria Stea <eleni@mutantstargoat.com>
date Wed, 16 Oct 2013 15:41:08 +0300
parents fdbd55eaa14e
children 700127288dc5
rev   line source
eleni@0 1 #include <stdio.h>
eleni@0 2 #include <pthread.h>
eleni@0 3 #include <libfreenect.h>
eleni@1 4
eleni@0 5 #include "kinect.h"
eleni@1 6 #include "frame.h"
eleni@0 7
eleni@0 8 bool init_kinect(freenect_context **kin_ctx, freenect_device **kin_dev, KinectParams *kin_params)
eleni@0 9 {
eleni@0 10 if(freenect_init(kin_ctx, NULL) < 0) {
eleni@0 11 fprintf(stderr, "Failed to initialize kinect context.\n");
eleni@0 12 return false;
eleni@0 13 }
eleni@0 14
eleni@0 15 freenect_set_log_level(*kin_ctx, FREENECT_LOG_INFO);
eleni@0 16
eleni@0 17 int num_dev = freenect_num_devices(*kin_ctx);
eleni@0 18 if(num_dev < 1) {
eleni@0 19 fprintf(stderr, "Kinect device not found.\n");
eleni@0 20 return false;
eleni@0 21 }
eleni@0 22 printf("%d devices found, will use the first.\n", num_dev);
eleni@0 23
eleni@0 24 if(freenect_open_device(*kin_ctx, kin_dev, 0) < 0) {
eleni@0 25 fprintf(stderr, "Couldn't open kinect device.\n");
eleni@0 26 return false;
eleni@0 27 }
eleni@0 28
eleni@0 29 if(freenect_set_tilt_degs(*kin_dev, kin_params->angle) < 0) {
eleni@0 30 stop_kinect(*kin_ctx, *kin_dev);
eleni@0 31 fprintf(stderr, "Failed to set kinect angle\n");
eleni@0 32 return false;
eleni@0 33 }
eleni@0 34
eleni@0 35 if(freenect_set_led(*kin_dev, kin_params->led_color) < 0) {
eleni@2 36 fprintf(stderr, "Failed to set kinect LED\n");
eleni@0 37 stop_kinect(*kin_ctx, *kin_dev);
eleni@0 38 return false;
eleni@0 39 }
eleni@0 40
eleni@2 41 return true;
eleni@2 42 }
eleni@2 43
eleni@2 44 bool init_kinect_frames(freenect_context **kin_ctx, freenect_device **kin_dev,
eleni@2 45 KinectParams *kin_params) {
eleni@0 46
eleni@0 47 freenect_set_video_callback(*kin_dev, video_cb);
eleni@0 48 freenect_set_depth_callback(*kin_dev, depth_cb);
eleni@0 49
eleni@0 50 if(freenect_set_video_mode(*kin_dev,
eleni@0 51 freenect_find_video_mode(kin_params->video_res,
eleni@0 52 kin_params->video_format)) < 0) {
eleni@0 53 fprintf(stderr, "Failed to set kinect video mode.\n");
eleni@0 54 return false;
eleni@0 55 }
eleni@0 56
eleni@0 57 if(freenect_set_depth_mode(*kin_dev,
eleni@0 58 freenect_find_depth_mode(kin_params->depth_res,
eleni@0 59 kin_params->depth_format)) < 0) {
eleni@0 60 fprintf(stderr, "Failed to set kinect depth mode.\n");
eleni@0 61 return false;
eleni@0 62 }
eleni@0 63
eleni@0 64 if(freenect_start_video(*kin_dev) < 0) {
eleni@0 65 fprintf(stderr, "Failed to start kinect video.\n");
eleni@0 66 return false;
eleni@0 67 }
eleni@0 68
eleni@0 69 if(freenect_start_depth(*kin_dev) < 0) {
eleni@0 70 fprintf(stderr, "Failed to start kinect depth video.\n");
eleni@0 71 return false;
eleni@0 72 }
eleni@0 73
eleni@0 74 return true;
eleni@0 75 }
eleni@0 76
eleni@2 77 void stop_kinect_video_frames(freenect_device *kin_dev)
eleni@2 78 {
eleni@2 79 freenect_stop_video(kin_dev);
eleni@2 80 }
eleni@2 81
eleni@2 82 void stop_kinect_depth_frames(freenect_device *kin_dev)
eleni@2 83 {
eleni@2 84 freenect_stop_depth(kin_dev);
eleni@2 85 }
eleni@2 86
eleni@2 87 void stop_kinect_frames(freenect_device *kin_dev)
eleni@2 88 {
eleni@2 89 stop_kinect_video_frames(kin_dev);
eleni@2 90 stop_kinect_depth_frames(kin_dev);
eleni@2 91 }
eleni@2 92
eleni@0 93 void stop_kinect(freenect_context *kin_ctx, freenect_device *kin_dev)
eleni@0 94 {
eleni@0 95 freenect_set_led(kin_dev, LED_OFF);
eleni@0 96 freenect_close_device(kin_dev);
eleni@0 97 freenect_shutdown(kin_ctx);
eleni@0 98 }