From 9e98a0b11fddeabab6ef5e0915b96c950597e53e Mon Sep 17 00:00:00 2001 From: Rich Mattes Date: Sat, 26 May 2018 16:11:11 -0400 Subject: [PATCH 1/2] Build libfreenect_cv and cvdemo as C++ sources Signed-off-by: Rich Mattes --- wrappers/opencv/CMakeLists.txt | 4 ++-- wrappers/opencv/{cvdemo.c => cvdemo.cpp} | 0 wrappers/opencv/{libfreenect_cv.c => libfreenect_cv.cpp} | 0 wrappers/opencv/libfreenect_cv.h | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) rename wrappers/opencv/{cvdemo.c => cvdemo.cpp} (100%) rename wrappers/opencv/{libfreenect_cv.c => libfreenect_cv.cpp} (100%) diff --git a/wrappers/opencv/CMakeLists.txt b/wrappers/opencv/CMakeLists.txt index 02390752..bc5df19b 100644 --- a/wrappers/opencv/CMakeLists.txt +++ b/wrappers/opencv/CMakeLists.txt @@ -2,7 +2,7 @@ # OpenCV Interface ###################################################################################### find_package(OpenCV REQUIRED) -add_library (freenect_cv SHARED libfreenect_cv.c) +add_library (freenect_cv SHARED libfreenect_cv.cpp) set_target_properties (freenect_cv PROPERTIES VERSION ${PROJECT_VER} SOVERSION ${PROJECT_APIVER}) @@ -16,7 +16,7 @@ install (TARGETS freenect_cv install (FILES "libfreenect_cv.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR}) -add_executable(freenect-cvdemo cvdemo.c) +add_executable(freenect-cvdemo cvdemo.cpp) target_link_libraries(freenect-cvdemo freenect freenect_sync freenect_cv ${OpenCV_LIBS}) install (TARGETS freenect-cvdemo DESTINATION bin) diff --git a/wrappers/opencv/cvdemo.c b/wrappers/opencv/cvdemo.cpp similarity index 100% rename from wrappers/opencv/cvdemo.c rename to wrappers/opencv/cvdemo.cpp diff --git a/wrappers/opencv/libfreenect_cv.c b/wrappers/opencv/libfreenect_cv.cpp similarity index 100% rename from wrappers/opencv/libfreenect_cv.c rename to wrappers/opencv/libfreenect_cv.cpp diff --git a/wrappers/opencv/libfreenect_cv.h b/wrappers/opencv/libfreenect_cv.h index b73b60c9..55e3582c 100644 --- a/wrappers/opencv/libfreenect_cv.h +++ b/wrappers/opencv/libfreenect_cv.h @@ -1,11 +1,11 @@ #pragma once +#include + #ifdef __cplusplus extern "C" { #endif -#include - IplImage *freenect_sync_get_depth_cv(int index); IplImage *freenect_sync_get_rgb_cv(int index); From db0e1825ff93133f3ca5735524d78279ede824db Mon Sep 17 00:00:00 2001 From: Rich Mattes Date: Sat, 26 May 2018 16:14:01 -0400 Subject: [PATCH 2/2] Fix bugs in sync library error handling fnusb_open_subdevices checked for camera==NULL or res < 0 before jumping to the failure case. If camera was NULL but res was not 0, the function would return 0 indicating success. This occurs when a kinect is not plugged into the PC. Forcing res to be negative when the camera == NULL case allows the failure to open a device to propagate through an application. alloc_kinect in freenect_sync has a check for if freenect_open_device fails, but the logic is incorrect. freenect_open_device returns 0 on success and < 0 on error, so adding a check to see if the return is < 0 corrects detection of the failure case. Signed-off-by: Rich Mattes --- src/usb_libusb10.c | 1 + wrappers/c_sync/libfreenect_sync.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/usb_libusb10.c b/src/usb_libusb10.c index 11de86a8..614aeeeb 100644 --- a/src/usb_libusb10.c +++ b/src/usb_libusb10.c @@ -465,6 +465,7 @@ FN_INTERNAL int fnusb_open_subdevices(freenect_device *dev, int index) } if (res < 0 || camera == NULL) { + res = -1; goto failure; } diff --git a/wrappers/c_sync/libfreenect_sync.c b/wrappers/c_sync/libfreenect_sync.c index 1b2e0494..26a2261c 100644 --- a/wrappers/c_sync/libfreenect_sync.c +++ b/wrappers/c_sync/libfreenect_sync.c @@ -249,7 +249,7 @@ static int change_depth_format(sync_kinect_t *kinect, freenect_resolution res, f static sync_kinect_t *alloc_kinect(int index) { sync_kinect_t *kinect = (sync_kinect_t*)malloc(sizeof(sync_kinect_t)); - if (freenect_open_device(ctx, &kinect->dev, index)) { + if (freenect_open_device(ctx, &kinect->dev, index) < 0) { free(kinect); return NULL; }