invisible

annotate src/kinect.cc @ 1:fdbd55eaa14e

add frame class, mutices
author Eleni Maria Stea <eleni@mutantstargoat.com>
date Sat, 05 Oct 2013 19:02:40 +0300
parents 80df8030105b
children b0b90ef993a0
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@0 36 stop_kinect(*kin_ctx, *kin_dev);
eleni@0 37 fprintf(stderr, "Failed to set kinect LED\n");
eleni@0 38 return false;
eleni@0 39 }
eleni@0 40
eleni@1 41 init_frame_mx();
eleni@0 42
eleni@0 43 freenect_set_video_callback(*kin_dev, video_cb);
eleni@0 44 freenect_set_depth_callback(*kin_dev, depth_cb);
eleni@0 45
eleni@0 46 if(freenect_set_video_mode(*kin_dev,
eleni@0 47 freenect_find_video_mode(kin_params->video_res,
eleni@0 48 kin_params->video_format)) < 0) {
eleni@0 49 stop_kinect(*kin_ctx, *kin_dev);
eleni@0 50 fprintf(stderr, "Failed to set kinect video mode.\n");
eleni@0 51 return false;
eleni@0 52 }
eleni@0 53
eleni@0 54 if(freenect_set_depth_mode(*kin_dev,
eleni@0 55 freenect_find_depth_mode(kin_params->depth_res,
eleni@0 56 kin_params->depth_format)) < 0) {
eleni@0 57 stop_kinect(*kin_ctx, *kin_dev);
eleni@0 58 fprintf(stderr, "Failed to set kinect depth mode.\n");
eleni@0 59 return false;
eleni@0 60 }
eleni@0 61
eleni@0 62 if(freenect_start_video(*kin_dev) < 0) {
eleni@0 63 fprintf(stderr, "Failed to start kinect video.\n");
eleni@0 64 return false;
eleni@0 65 }
eleni@0 66
eleni@0 67 if(freenect_start_depth(*kin_dev) < 0) {
eleni@0 68 fprintf(stderr, "Failed to start kinect depth video.\n");
eleni@0 69 return false;
eleni@0 70 }
eleni@0 71
eleni@0 72 return true;
eleni@0 73 }
eleni@0 74
eleni@0 75 void stop_kinect(freenect_context *kin_ctx, freenect_device *kin_dev)
eleni@0 76 {
eleni@0 77 freenect_set_led(kin_dev, LED_OFF);
eleni@0 78
eleni@0 79 freenect_stop_depth(kin_dev);
eleni@0 80 freenect_stop_video(kin_dev);
eleni@0 81 freenect_close_device(kin_dev);
eleni@0 82 freenect_shutdown(kin_ctx);
eleni@0 83 }