# HG changeset patch # User Eleni Maria Stea # Date 1380978188 -10800 # Node ID 80df8030105bf88966cc2183a5af19aa5d7e4df5 init kinect diff -r 000000000000 -r 80df8030105b .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Oct 05 16:03:08 2013 +0300 @@ -0,0 +1,8 @@ +syntax: glob +*.o +*.settings +*.cproject +*.project +*.d +invisible +*.swp diff -r 000000000000 -r 80df8030105b Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile Sat Oct 05 16:03:08 2013 +0300 @@ -0,0 +1,23 @@ +src = $(wildcard src/*.cc) +obj = $(src:.cc=.o) +dep = $(obj:.o=.d) +bin = invisible + +dbg = -g -std=c++11 +opt = -O0 + +CXX = g++ +INCLUDE = -I/usr/include/ +CXXFLAGS = -fPIC -pedantic -Wall $(dbg) `pkg-config --cflags opencv` $(INCLUDE) +LDFLAGS = -L/usr/lib $(libs) -lGL -lGLU -lglut -lGLEW -lfreenect -lpthread `pkg-config --libs opencv` + +$(bin): $(obj) + $(CXX) -o $@ $(obj) $(LDFLAGS) + +%.d: %.cc + @$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@ + +.PHONY: clean +clean: + rm -f $(obj) $(bin) $(dep) + diff -r 000000000000 -r 80df8030105b src/kinect.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/kinect.cc Sat Oct 05 16:03:08 2013 +0300 @@ -0,0 +1,102 @@ +#include +#include +#include +#include "kinect.h" + +static void video_cb(freenect_device *kin_dev, void *rgb, uint32_t time); +static void depth_cb(freenect_device *kin_dev, void *depth, uint32_t time); + +static pthread_mutex_t video_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t depth_mutex = PTHREAD_MUTEX_INITIALIZER; + +bool init_kinect(freenect_context **kin_ctx, freenect_device **kin_dev, KinectParams *kin_params) +{ + if(freenect_init(kin_ctx, NULL) < 0) { + fprintf(stderr, "Failed to initialize kinect context.\n"); + return false; + } + + freenect_set_log_level(*kin_ctx, FREENECT_LOG_INFO); + + int num_dev = freenect_num_devices(*kin_ctx); + if(num_dev < 1) { + fprintf(stderr, "Kinect device not found.\n"); + return false; + } + printf("%d devices found, will use the first.\n", num_dev); + + if(freenect_open_device(*kin_ctx, kin_dev, 0) < 0) { + fprintf(stderr, "Couldn't open kinect device.\n"); + return false; + } + + if(freenect_set_tilt_degs(*kin_dev, kin_params->angle) < 0) { + stop_kinect(*kin_ctx, *kin_dev); + fprintf(stderr, "Failed to set kinect angle\n"); + return false; + } + + if(freenect_set_led(*kin_dev, kin_params->led_color) < 0) { + stop_kinect(*kin_ctx, *kin_dev); + fprintf(stderr, "Failed to set kinect LED\n"); + return false; + } + + pthread_mutex_init(&video_mutex, NULL); + pthread_mutex_init(&depth_mutex, NULL); + + freenect_set_video_callback(*kin_dev, video_cb); + freenect_set_depth_callback(*kin_dev, depth_cb); + + if(freenect_set_video_mode(*kin_dev, + freenect_find_video_mode(kin_params->video_res, + kin_params->video_format)) < 0) { + stop_kinect(*kin_ctx, *kin_dev); + fprintf(stderr, "Failed to set kinect video mode.\n"); + return false; + } + + if(freenect_set_depth_mode(*kin_dev, + freenect_find_depth_mode(kin_params->depth_res, + kin_params->depth_format)) < 0) { + stop_kinect(*kin_ctx, *kin_dev); + fprintf(stderr, "Failed to set kinect depth mode.\n"); + return false; + } + + if(freenect_start_video(*kin_dev) < 0) { + fprintf(stderr, "Failed to start kinect video.\n"); + return false; + } + + if(freenect_start_depth(*kin_dev) < 0) { + fprintf(stderr, "Failed to start kinect depth video.\n"); + return false; + } + + return true; +} + +void stop_kinect(freenect_context *kin_ctx, freenect_device *kin_dev) +{ + freenect_set_led(kin_dev, LED_OFF); + + freenect_stop_depth(kin_dev); + freenect_stop_video(kin_dev); + freenect_close_device(kin_dev); + freenect_shutdown(kin_ctx); +} + +void video_cb(freenect_device *kin_dev, void *rgb, uint32_t time) +{ + pthread_mutex_lock(&video_mutex); + printf("Started video.\n"); + pthread_mutex_unlock(&video_mutex); +} + +void depth_cb(freenect_device *kin_dev, void *depth, uint32_t time) +{ + pthread_mutex_lock(&depth_mutex); + printf("Started depth.\n"); + pthread_mutex_unlock(&depth_mutex); +} diff -r 000000000000 -r 80df8030105b src/kinect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/kinect.h Sat Oct 05 16:03:08 2013 +0300 @@ -0,0 +1,30 @@ +#ifndef KINECT_H_ +#define KINECT_H_ + +#include + +#define FREENECT_ANGLE 30 + +struct KinectParams { + double angle; + freenect_led_options led_color; + freenect_video_format video_format; + freenect_depth_format depth_format; + freenect_resolution video_res; + freenect_resolution depth_res; + + KinectParams() + { + angle = 10; + led_color = LED_RED; + video_format = FREENECT_VIDEO_RGB; + depth_format = FREENECT_DEPTH_11BIT; + video_res = FREENECT_RESOLUTION_MEDIUM; + depth_res = FREENECT_RESOLUTION_MEDIUM; + } +}; + +bool init_kinect(freenect_context **kin_ctx, freenect_device **kin_dev, KinectParams *kin_params); +void stop_kinect(freenect_context *kin_ctx, freenect_device *kin_dev); + +#endif // KINECT_H_ diff -r 000000000000 -r 80df8030105b src/main.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main.cc Sat Oct 05 16:03:08 2013 +0300 @@ -0,0 +1,17 @@ +#include + +#include "kinect.h" + +freenect_context *kin_ctx; +freenect_device *kin_dev; +KinectParams kin_params; + +int main() +{ + printf("hi\n"); + + if(!init_kinect(&kin_ctx, &kin_dev, &kin_params)) + return 1; + + stop_kinect(kin_ctx, kin_dev); +}