Skip to content

Commit

Permalink
Merge branch 'dfsg' into debian
Browse files Browse the repository at this point in the history
* dfsg: (84 commits)
  Fix stupid comparison mistake in audio serial fallback
  Update CMakeList.txt and ebuild for v0.5.0
  c_sync: Collapse unused functions
  Configure audio support at runtime - fixes OpenKinect#372
  Use audio serial as a fallback for K4W and 1473 models that do not provide a useful camera serial (thanks @olzhas). Fixes OpenKinect#360 and resolves OpenKinect#393.
  Remove legacy keep_alive.c; now require libusb >= 1.0.18
  c_sync: Add freenect_sync_camera_to_world() (thanks @martyvona) - fixes OpenKinect#294
  Fix a crash-on-exit in the OpenNI2 driver caused by using a deleted iterator.
  Cleanup imports in examples; also fixes a micview compile error on OS X.
  Allow freenect_set_tilt_degs to take a negative angle
  Update CMakeLists.txt for v0.4.3
  win32: Fix command in examples/CMakeLists.txt
  ebuild: Improve python dependency - fixes OpenKinect#391
  Standardize indentation in fnusb_open_subdevices
  Use non-infinite timeouts for bulk tilt / led commands Reset the audio device before using it to ensure the commands can be sent correctly Fixes OpenKinect#390
  Update README.md and CMakeLists.txt for v0.4.2
  Fix fakenect not handling freenect_process_events_timeout
  FN_DEBUG: print read_register and read_cmos_register replies
  Fix cmake module include order Fix cpack user option on linux Separate cpack options for different generators and add tgz generator Add cmake config file Fixes OpenKinect#355
  wrappers/python: update freenect.c - fixes OpenKinect#326
  ...
  • Loading branch information
yarikoptic committed Oct 27, 2014
2 parents 1645521 + 9716fbf commit b8649d5
Show file tree
Hide file tree
Showing 78 changed files with 15,187 additions and 4,037 deletions.
102 changes: 62 additions & 40 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,48 +30,49 @@
# CMake directives
######################################################################################

#Require 2.6 or higher.

cmake_minimum_required(VERSION 2.6)
set(PYTHON_EXECUTABLE "python2")

######################################################################################
# Project declaration and options
######################################################################################

PROJECT(libfreenect)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/")

# Find the host operating system and architecture
include (FindOS)
# Set up installation directories
include (SetupDirectories)

set (PROJECT_VER_MAJOR 0)
set (PROJECT_VER_MINOR 2)
set (PROJECT_VER_MINOR 5)
set (PROJECT_VER_PATCH 0)
set (PROJECT_VER
set (PROJECT_VER
"${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}.${PROJECT_VER_PATCH}")
set (PROJECT_APIVER
set (PROJECT_APIVER
"${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")

OPTION(BUILD_AUDIO "Build audio support" OFF)
OPTION(BUILD_REDIST_PACKAGE "Build libfreenect in a legally-redistributable manner (only affects audio)" OFF)
OPTION(BUILD_REDIST_PACKAGE "Build libfreenect in a legally-redistributable manner (only affects audio)" ON)
OPTION(BUILD_EXAMPLES "Build example programs" ON)
OPTION(BUILD_FAKENECT "Build fakenect mock library" ON)
OPTION(BUILD_C_SYNC "Build c synchronous library" ON)
OPTION(BUILD_CPP "Build C++ Library (currently header only)" ON)
OPTION(BUILD_CV "Build OpenCV wrapper" OFF)
OPTION(BUILD_AS3_SERVER "Build the Actionscript 3 Server Example" OFF)
OPTION(BUILD_PYTHON "Build Python extension" OFF)
OPTION(BUILD_OPENNI2_DRIVER "Build libfreenect driver for OpenNI2" OFF)
IF(PROJECT_OS_LINUX)
OPTION(BUILD_CPACK "Build an RPM or DEB using CPack" OFF)
OPTION(BUILD_CPACK_DEB "Build an DEB using CPack" OFF)
OPTION(BUILD_CPACK_RPM "Build an RPM using CPack" OFF)
OPTION(BUILD_CPACK_TGZ "Build an TGZ using CPack" OFF)
ENDIF(PROJECT_OS_LINUX)

######################################################################################
# CMake Modules
# Dependencies and Definitions
######################################################################################

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/")

# Find the host operating system and architecture
include (FindOS)
# Set up installation directories
include (SetupDirectories)

# Find packages needed to build library
find_package(libusb-1.0 REQUIRED)

Expand All @@ -82,33 +83,41 @@ if(BIG_ENDIAN)
add_definitions(-DFN_BIGENDIAN)
endif()

if(BUILD_AUDIO)
add_definitions(-DBUILD_AUDIO)
endif()

if (WIN32)
set(MATH_LIB "")
set(MATH_LIB "")
else(WIN32)
set(MATH_LIB "m")
endif()

######################################################################################
# CMake
# CMake
######################################################################################

SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
SET(DOC_OUTPUT_PATH ${CMAKE_BINARY_DIR}/doc)

# let CFLAGS env override this
if(CMAKE_C_FLAGS STREQUAL "")
set(CMAKE_C_FLAGS "-O2")
endif()
SET(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG=1")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
if (MSVC)
set(C_FLAGS_WARNING "-W4")
else ()
set(C_FLAGS_WARNING "-Wall")
endif (MSVC)

add_definitions(-Wall)
set(C_CXX_FLAGS_DEFAULT "${C_FLAGS_WARNING} -O2")

# These defaults can be overriden by -DCMAKE_C_FLAGS=""
set(CMAKE_C_FLAGS "${C_CXX_FLAGS_DEFAULT} ${CMAKE_C_FLAGS}")
# C Configurations
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DDEBUG=1")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS}")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} -g")

# These defaults can be overriden by -DCMAKE_CXX_FLAGS=""
set(CMAKE_CXX_FLAGS "${C_CXX_FLAGS_DEFAULT} ${CMAKE_CXX_FLAGS}")
# C++ Configurations
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g -DDEBUG=1")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -g")

# Pretty much everyone is going to need the main includes
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
Expand All @@ -118,13 +127,11 @@ include_directories(${LIBUSB_1_INCLUDE_DIRS})

if(WIN32)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/platform/windows")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/platform/windows/libusb10emu/libusb-1.0")
endif()

# Add library project
add_subdirectory (src)

# Add examples
IF(BUILD_EXAMPLES)
add_subdirectory (examples)
ENDIF()
Expand Down Expand Up @@ -153,6 +160,10 @@ IF(BUILD_PYTHON)
add_subdirectory (wrappers/python)
ENDIF()

IF(BUILD_OPENNI2_DRIVER)
add_subdirectory(OpenNI2-FreenectDriver)
ENDIF()

######################################################################################
# Extras
######################################################################################
Expand All @@ -163,13 +174,17 @@ configure_file(
"${CMAKE_CURRENT_BINARY_DIR}/UninstallTarget.cmake"
IMMEDIATE @ONLY)

# --- cmake config file ---
CONFIGURE_FILE(libfreenectConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libfreenectConfig.cmake @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libfreenectConfig.cmake DESTINATION share/${PROJECT_NAME})

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/UninstallTarget.cmake)

# Create Debian/RPM Packages
# after make, use "fakeroot cpack" in the build Dir to complete

IF ( BUILD_CPACK )
IF ( BUILD_CPACK_TGZ OR BUILD_CPACK_DEB OR BUILD_CPACK_RPM )
set(CPACK_PACKAGE_DESCRIPTION "libfreenect for kinect")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "libfreenect library for using kinect")
set(CPACK_PACKAGE_NAME "libfreenect-dev")
Expand All @@ -182,20 +197,27 @@ IF ( BUILD_CPACK )
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VER_PATCH})
set(VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")

set(CPACK_GENERATOR "DEB;RPM;")
set(CPACK_GENERATOR "")
if (BUILD_CPACK_TGZ)
list(APPEND CPACK_GENERATOR "TGZ")
endif()
if (BUILD_CPACK_RPM)
list(APPEND CPACK_GENERATOR "RPM")
endif()
if (BUILD_CPACK_DEB)
list(APPEND CPACK_GENERATOR "DEB")
endif()
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}-${CMAKE_SYSTEM_PROCESSOR}")

include(CPack)

INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/libfreenect.a" DESTINATION ${PROJECT_LIBRARY_INSTALL_DIR})
if (BUILD_AUDIO)
INSTALL(FILES "include/libfreenect-audio.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})
endif()
INSTALL(FILES "include/libfreenect.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})
INSTALL(FILES "include/libfreenect-registration.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})
INSTALL(FILES "include/libfreenect_registration.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})
INSTALL(FILES "include/libfreenect_audio.h" DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})
INSTALL(FILES "APACHE20" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}")
INSTALL(FILES "GPL2" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}")
INSTALL(FILES "README.asciidoc" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}")
INSTALL(FILES "README.md" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}")

ENDIF ( BUILD_CPACK )
ENDIF ( )

102 changes: 0 additions & 102 deletions HACKING

This file was deleted.

25 changes: 25 additions & 0 deletions OpenNI2-FreenectDriver/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
######################################################################################
# OpenNI2-FreenectDriver
######################################################################################

file(GLOB HEADERS src/*.hpp src/*.h)
file(GLOB SOURCES src/*.cpp)
add_library(FreenectDriver SHARED ${HEADERS} ${SOURCES})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function")

set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib/OpenNI2-FreenectDriver)
set_target_properties(FreenectDriver PROPERTIES
VERSION ${PROJECT_VER}
SOVERSION ${PROJECT_APIVER}
OUTPUT_NAME FreenectDriver)

add_definitions(-DPROJECT_VER="${PROJECT_VER}")

include_directories(extern/OpenNI-Linux-x64-2.2.0.33/Include)
include_directories(${PROJECT_SOURCE_DIR}/wrappers/cpp)

target_link_libraries(FreenectDriver freenectstatic ${MATH_LIB})

install (TARGETS FreenectDriver
DESTINATION "${PROJECT_LIBRARY_INSTALL_DIR}/OpenNI2-FreenectDriver")
60 changes: 60 additions & 0 deletions OpenNI2-FreenectDriver/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
OpenNI2-FreenectDriver
======================

OpenNI2-FreenectDriver is a bridge to libfreenect implemented as an OpenNI2 driver.
It allows OpenNI2 to use Kinect hardware on Linux and OSX.
It was originally a [separate project](https://github.com/piedar/OpenNI2-FreenectDriver) but is now distributed with libfreenect.
OpenNI2-FreenectDriver is distributed under the [Apache 2](https://github.com/OpenKinect/libfreenect/blob/master/APACHE20) license.

Install
-------
1. Download and unpack [OpenNI](http://www.openni.org/openni-sdk/) 2.2.0.33 or higher.
2. Go to the top libfreenect directory and build it with the OpenNI2 driver.

mkdir build
cd build
cmake .. -DBUILD_OPENNI2_DRIVER=ON
make

3. Copy the driver to your OpenNI2 driver repository. You must first change `Repository` to match your project layout.

Repository="/example/path/to/Samples/Bin/OpenNI2/Drivers/"
cp -L lib/OpenNI2-FreenectDriver/libFreenectDriver.{so,dylib} ${Repository}
# you could instead make a symlink to avoid copying after every build
# ln -s lib/OpenNI2-FreenectDriver/libFreenectDriver.{so,dylib} ${Repository}

OpenNI2-FreenectDriver is built with a static libfreenect, so you do not need to include libfreenect when deploying.
However, you will need to make sure target systems have libusb and all other dependencies listed in `ldd libFreenectDriver.so`.

__________________________________________________

Structure
---------
This driver is modeled on TestDevice.cpp and Drivers/Kinect/.
In the FreenectDriver namespace, it ties together the C++ interfaces of OpenNI2 and libfreenect using multiple inheritance.

Driver inherits publically from oni::driver::DriverBase and privately from Freenect::Freenect.
libfreenect.hpp allows protected access to the Freenect context, so that FreenectDriver can call the Freenect's C API.
As a DriverBase, FreenectDriver manages devices and sets up device state callbacks.

Device inherits publically from oni::driver::DeviceBase and Freenect::FreenectDevice.
Because of this, it can be built by Freenect::Freenect::createDevice() and it can define Device's depth and video callbacks.
Those callbacks trigger acquireFrame() in FreenectStream.

VideoStream is a virtual base class inheriting from oni::driver::StreamBase.
It does generic frame setup in buildFrame() and then calls pure virtual populateFrame() to let derived classes finish the frame.
It also provides the base skeleton for setting and getting properties, which cascades down the inheritance tree.

DepthStream and ColorStream are nearly identical in definition and implementation, both inheriting from VideoStream.
They differ mostly in the formats they use to process data and the video modes they support.
These two classes offer a system to store and report supported video modes.
To implement a new mode, simply add it to getSupportedVideoModes() and modify populateFrame() as necessary.

__________________________________________________

Todo
----
* support more FREENECT_RESOLUTION_\*, FREENECT_VIDEO_\*, and FREENECT_DEPTH_\*
* provide more OniVideoMode and OniStreamProperty
* implement remaining derived functions
Loading

0 comments on commit b8649d5

Please sign in to comment.