Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added examples/k22v4l/11to16.bin
Binary file not shown.
174 changes: 174 additions & 0 deletions examples/k22v4l/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

PROJECT(libfreenect2)
SET(CMAKE_BUILD_TYPE RelWithDebInfo)

SET(MY_DIR ${libfreenect2_SOURCE_DIR})

OPTION(ENABLE_CXX11 "Enable C++11 support" OFF)
OPTION(ENABLE_OPENCL "Enable OpenCL support" ON)
OPTION(ENABLE_OPENGL "Enable OpenGL support" ON)

IF(ENABLE_CXX11)
INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
IF(COMPILER_SUPPORTS_CXX11)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ELSEIF(COMPILER_SUPPORTS_CXX0X)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
ELSE()
MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
ENDIF()
ENDIF(ENABLE_CXX11)

# additional cmake modules
LIST(APPEND CMAKE_MODULE_PATH ${MY_DIR}/cmake_modules)

# setup threading
INCLUDE(SetupLibfreenect2Threading)
INCLUDE_DIRECTORIES(${LIBFREENECT2_THREADING_INCLUDE_DIR})

INCLUDE(GenerateResources)

#set the default path for built executables to the "bin" directory
SET(EXECUTABLE_OUTPUT_PATH ${MY_DIR}/bin)

#set the default path for built libraries to the "lib" directory
SET(LIBRARY_OUTPUT_PATH ${MY_DIR}/lib)

FIND_PACKAGE(OpenCL)

# dependencies
FIND_PACKAGE(OpenCV REQUIRED)

# OpenCV
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIR})

# LibUSB
INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libusb/include/libusb-1.0/")
LINK_DIRECTORIES("${MY_DIR}/../../depends/libusb/lib/")

IF(ENABLE_OPENGL)
# GLFW
SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
SET(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build the GLFW example programs")
SET(GLFW_BUILD_TESTS OFF CACHE BOOL "Build the GLFW test programs")
SET(GLFW_BUILD_DOCS OFF CACHE BOOL "Build the GLFW documentation")

ADD_SUBDIRECTORY(${MY_DIR}/../../depends/glfw_src/ ${MY_DIR}/../../depends/glfw)
INCLUDE_DIRECTORIES(${MY_DIR}/../../depends/glfw_src/include/)
ENDIF(ENABLE_OPENGL)

if(APPLE)
# libjpeg-turbo
INCLUDE_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/include/")
LINK_DIRECTORIES("${MY_DIR}/../../depends/libjpeg_turbo/lib/")
endif()

SET(RESOURCES_INC_FILE "${MY_DIR}/src/resources.inc")

SET(SOURCES
src/transfer_pool.cpp
src/event_loop.cpp

src/double_buffer.cpp
src/frame_listener_impl.cpp
src/packet_pipeline.cpp

src/rgb_packet_stream_parser.cpp
src/rgb_packet_processor.cpp
src/turbo_jpeg_rgb_packet_processor.cpp

src/depth_packet_stream_parser.cpp
src/depth_packet_processor.cpp
src/cpu_depth_packet_processor.cpp
src/resource.cpp

src/usb_control.cpp
src/command_transaction.cpp
src/libfreenect2.cpp
${LIBFREENECT2_THREADING_SOURCE}
${RESOURCES_INC_FILE}
)

SET(LIBRARIES
usb-1.0
${OpenCV_LIBS}
turbojpeg
${LIBFREENECT2_THREADING_LIBRARIES}
)

SET(RESOURCES
11to16.bin
xTable.bin
zTable.bin
)


IF(ENABLE_OPENGL)
SET(LIBFREENECT2_WITH_OPENGL_SUPPORT 1)
LIST(APPEND SOURCES
src/flextGL.c
src/opengl_depth_packet_processor.cpp
)

LIST(APPEND LIBRARIES
glfw
${GLFW_LIBRARIES}
)

LIST(APPEND RESOURCES
src/shader/debug.fs
src/shader/default.vs
src/shader/filter1.fs
src/shader/filter2.fs
src/shader/stage1.fs
src/shader/stage2.fs
)
ENDIF(ENABLE_OPENGL)

IF(ENABLE_OPENCL AND OPENCL_FOUND)
SET(LIBFREENECT2_WITH_OPENCL_SUPPORT 1)
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIRS})

LIST(APPEND SOURCES
src/opencl_depth_packet_processor.cpp
)

LIST(APPEND LIBRARIES
${OPENCL_LIBRARIES}
)

LIST(APPEND RESOURCES
src/opencl_depth_packet_processor.cl
)
ENDIF(ENABLE_OPENCL AND OPENCL_FOUND)

CONFIGURE_FILE("${MY_DIR}/include/libfreenect2/config.h.in" "${MY_DIR}/include/libfreenect2/config.h" @ONLY)

GENERATE_RESOURCES(${RESOURCES_INC_FILE} ${MY_DIR} ${RESOURCES})

INCLUDE_DIRECTORIES("${MY_DIR}/include")

ADD_DEFINITIONS(-DRESOURCES_INC)
ADD_LIBRARY(freenect2 SHARED ${SOURCES})
TARGET_LINK_LIBRARIES(freenect2 ${LIBRARIES})

ADD_EXECUTABLE(k22v4l
k22v4l.cpp
)

TARGET_LINK_LIBRARIES(k22v4l
freenect2
)

CONFIGURE_FILE(freenect2.cmake.in "${PROJECT_BINARY_DIR}/freenect2Config.cmake" @ONLY)

INSTALL(TARGETS freenect2 DESTINATION lib)
INSTALL(DIRECTORY "${MY_DIR}/include/" DESTINATION include PATTERN "*.in" EXCLUDE)
IF(LIBFREENECT2_THREADING_TINYTHREAD)
INSTALL(FILES "${MY_DIR}/src/tinythread/tinythread.h" DESTINATION include/${PROJECT_NAME}/tinythread/)
ENDIF(LIBFREENECT2_THREADING_TINYTHREAD)
INSTALL(FILES "${PROJECT_BINARY_DIR}/freenect2Config.cmake" DESTINATION lib/cmake/freenect2/)

6 changes: 6 additions & 0 deletions examples/k22v4l/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

Depends on v4l2loopback

Load kernel module and add 3 devices:

# modprobe v4l2loopback devices=3
76 changes: 76 additions & 0 deletions examples/k22v4l/cmake_modules/FindOpenCL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# - Try to find OpenCL
# This module tries to find an OpenCL implementation on your system. It supports
# AMD / ATI, Apple and NVIDIA implementations, but should work, too.
#
# To set manually the paths, define these environment variables:
# OpenCL_INCPATH - Include path (e.g. OpenCL_INCPATH=/opt/cuda/4.0/cuda/include)
# OpenCL_LIBPATH - Library path (e.h. OpenCL_LIBPATH=/usr/lib64/nvidia)
#
# Once done this will define
# OPENCL_FOUND - system has OpenCL
# OPENCL_INCLUDE_DIRS - the OpenCL include directory
# OPENCL_LIBRARIES - link these to use OpenCL
#
# WIN32 should work, but is untested

FIND_PACKAGE(PackageHandleStandardArgs)

SET (OPENCL_VERSION_STRING "0.1.0")
SET (OPENCL_VERSION_MAJOR 0)
SET (OPENCL_VERSION_MINOR 1)
SET (OPENCL_VERSION_PATCH 0)

IF (APPLE)

FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX")
FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX")
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX")

ELSE (APPLE)

IF (WIN32)
# The AMD SDK currently installs both x86 and x86_64 libraries
# This is only a hack to find out architecture
IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86_64")
ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/lib/x86")
ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )

# On Win32 search relative to the library
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include")
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{ATISTREAMSDKROOT}" "$ENV{AMDAPPSDKROOT}" PATH_SUFFIXES "/include")

ELSE (WIN32)

# Unix style platforms
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL
PATHS ENV LD_LIBRARY_PATH ENV OpenCL_LIBPATH
)

GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH)
GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)

# The AMD SDK currently does not place its headers
# in /usr/include, therefore also search relative
# to the library
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include" "/opt/AMDAPP/include" ENV OpenCL_INCPATH)
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include" "/opt/AMDAPP/include" ENV OpenCL_INCPATH)

ENDIF (WIN32)

ENDIF (APPLE)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS)

IF(_OPENCL_CPP_INCLUDE_DIRS)
SET( OPENCL_HAS_CPP_BINDINGS TRUE )
LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} )
# This is often the same, so clean up
LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS )
ENDIF(_OPENCL_CPP_INCLUDE_DIRS)

MARK_AS_ADVANCED(
OPENCL_INCLUDE_DIRS
)

14 changes: 14 additions & 0 deletions examples/k22v4l/cmake_modules/GenerateResources.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FUNCTION(GENERATE_RESOURCES OUTPUT BASE_FOLDER)

ADD_EXECUTABLE(generate_resources_tool
src/generate_resources.cpp
)

ADD_CUSTOM_COMMAND(
OUTPUT ${OUTPUT}
COMMAND generate_resources_tool ${BASE_FOLDER} ${ARGN} > ${OUTPUT}
WORKING_DIRECTORY ${BASE_FOLDER}
DEPENDS generate_resources_tool ${ARGN}
)

ENDFUNCTION(GENERATE_RESOURCES)
40 changes: 40 additions & 0 deletions examples/k22v4l/cmake_modules/SetupLibfreenect2Threading.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
INCLUDE(CheckCXXSourceCompiles)

CHECK_CXX_SOURCE_COMPILES("
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>

int main(int argc, char** argv) {
std::thread thread;
std::mutex mutex;
std::lock_guard<std::mutex> lock_guard(mutex);
std::unique_lock<std::mutex> unique_lock(mutex);
std::condition_variable condition_variable;
thread_local int i;

return 0;
}

" LIBFREENECT2_THREADING_STDLIB)

IF(LIBFREENECT2_THREADING_STDLIB)
SET(LIBFREENECT2_THREADING "stdlib")
SET(LIBFREENECT2_THREADING_INCLUDE_DIR "")
SET(LIBFREENECT2_THREADING_SOURCE "")
SET(LIBFREENECT2_THREADING_LIBRARIES "")
SET(LIBFREENECT2_THREADING_STDLIB 1)
ELSE(LIBFREENECT2_THREADING_STDLIB)
SET(LIBFREENECT2_THREADING "tinythread")
SET(LIBFREENECT2_THREADING_INCLUDE_DIR "src/tinythread/")
SET(LIBFREENECT2_THREADING_SOURCE "src/tinythread/tinythread.cpp")
IF(NOT WIN32)
SET(LIBFREENECT2_THREADING_LIBRARIES "pthread")
ELSE(NOT WIN32)
SET(LIBFREENECT2_THREADING_LIBRARIES "")
ENDIF(NOT WIN32)
SET(LIBFREENECT2_THREADING_TINYTHREAD 1)
ENDIF(LIBFREENECT2_THREADING_STDLIB)

MESSAGE(STATUS "using ${LIBFREENECT2_THREADING} as threading library")
13 changes: 13 additions & 0 deletions examples/k22v4l/freenect2.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FIND_LIBRARY(freenect2_LIBRARY freenect2
PATHS @CMAKE_INSTALL_PREFIX@/lib
NO_DEFAULT_PATH
)
SET(freenect2_LIBRARIES ${freenect2_LIBRARY} @LIBFREENECT2_THREADING_LIBRARIES@)
FIND_PATH(freenect2_INCLUDE_DIR @PROJECT_NAME@/libfreenect2.hpp
PATHS @CMAKE_INSTALL_PREFIX@/include
NO_DEFAULT_PATH
)

IF("@LIBFREENECT2_THREADING_TINYTHREAD@")
SET(freenect2_INCLUDE_DIRS ${freenect2_INCLUDE_DIR} ${freenect2_INCLUDE_DIR}/tinythread)
ENDIF("@LIBFREENECT2_THREADING_TINYTHREAD@")
Loading