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 }
|