Skip to content

Commit 43f25c7

Browse files
committed
tegra: Add build support
1 parent 09d0d93 commit 43f25c7

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed

CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ OPTION(ENABLE_OPENCL "Enable OpenCL support" ON)
3535
OPTION(ENABLE_CUDA "Enable CUDA support" ON)
3636
OPTION(ENABLE_OPENGL "Enable OpenGL support" ON)
3737
OPTION(ENABLE_VAAPI "Enable VA-API support" ON)
38+
OPTION(ENABLE_TEGRAJPEG "Enable Tegra HW JPEG support" ON)
3839

3940
IF(MSVC)
4041
# suppress several "possible loss of data" warnings, and
@@ -203,6 +204,27 @@ IF(ENABLE_VAAPI)
203204
ENDIF()
204205
ENDIF(ENABLE_VAAPI)
205206

207+
SET(HAVE_TegraJPEG disabled)
208+
IF(ENABLE_TEGRAJPEG)
209+
FIND_PACKAGE(TegraJPEG)
210+
211+
SET(HAVE_TegraJPEG no)
212+
IF(TegraJPEG_FOUND)
213+
SET(LIBFREENECT2_WITH_TEGRAJPEG_SUPPORT 1)
214+
SET(HAVE_TegraJPEG yes)
215+
216+
INCLUDE_DIRECTORIES(${TegraJPEG_INCLUDE_DIRS})
217+
218+
LIST(APPEND SOURCES
219+
src/tegra_jpeg_rgb_packet_processor.cpp
220+
)
221+
222+
LIST(APPEND LIBRARIES
223+
${CMAKE_DL_LIBS}
224+
)
225+
ENDIF()
226+
ENDIF()
227+
206228
IF(LIBFREENECT2_WITH_VT_SUPPORT)
207229
FIND_PACKAGE(TurboJPEG)
208230
ELSE()

cmake_modules/FindTegraJPEG.cmake

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# FindTegraJPEG.cmake
2+
# - TegraJPEG_FOUND
3+
# - TegraJPEG_INCLUDE_DIRS
4+
# - TegraJPEG_LIBRARIES
5+
6+
# Detect Linux4Tegra distribution
7+
SET(L4T_RELEASE_FILE /etc/nv_tegra_release)
8+
IF(EXISTS ${L4T_RELEASE_FILE})
9+
SET(TegraJPEG_IS_L4T TRUE)
10+
EXECUTE_PROCESS(
11+
COMMAND sha1sum --quiet -c /etc/nv_tegra_release
12+
RESULT_VARIABLE TegraJPEG_DRIVER_ERROR
13+
OUTPUT_VARIABLE TegraJPEG_DRIVER_OUTPUT
14+
ERROR_QUIET
15+
)
16+
IF(TegraJPEG_DRIVER_ERROR)
17+
MESSAGE(WARNING "Tegra drivers have wrong checksum:\n${TegraJPEG_DRIVER_OUTPUT}")
18+
ELSE()
19+
SET(TegraJPEG_DRIVER_OK TRUE)
20+
ENDIF()
21+
ENDIF()
22+
23+
# Detect L4T version
24+
IF(TegraJPEG_IS_L4T)
25+
FILE(READ ${L4T_RELEASE_FILE} L4T_RELEASE_CONTENT LIMIT 64 OFFSET 2)
26+
STRING(REGEX REPLACE "^R([0-9]*)[^,]*, REVISION: ([0-9.]*).*" "\\1" L4T_VER_MAJOR "${L4T_RELEASE_CONTENT}")
27+
STRING(REGEX REPLACE "^R([0-9]*)[^,]*, REVISION: ([0-9.]*).*" "\\2" L4T_VER_MINOR "${L4T_RELEASE_CONTENT}")
28+
SET(L4T_VER "${L4T_VER_MAJOR}.${L4T_VER_MINOR}")
29+
MESSAGE(STATUS "Found Linux4Tegra ${L4T_VER}")
30+
IF(L4T_VER VERSION_LESS 21.3.0)
31+
MESSAGE(WARNING "Linux4Tegra version (${L4T_VER}) less than minimum requirement (21.3)")
32+
ELSE()
33+
SET(TegraJPEG_L4T_OK TRUE)
34+
ENDIF()
35+
ENDIF()
36+
37+
# Download gstjpeg source
38+
IF(TegraJPEG_L4T_OK)
39+
SET(L4T_GSTJPEG_URL "http://developer.download.nvidia.com/embedded/L4T/r${L4T_VER_MAJOR}_Release_v${L4T_VER_MINOR}/source/gstjpeg_src.tbz2")
40+
SET(L4T_GSTJPEG_DEST ${DEPENDS_DIR}/gstjpeg/gstjpeg_src.tbz2)
41+
IF(NOT EXISTS ${L4T_GSTJPEG_DEST})
42+
MESSAGE(STATUS "Downloading gstjpeg_src.tbz2 to ${DEPENDS_DIR}...")
43+
# Do we want checksum for the download?
44+
FILE(DOWNLOAD ${L4T_GSTJPEG_URL} ${L4T_GSTJPEG_DEST} STATUS L4T_GSTJPEG_STATUS)
45+
LIST(GET ${L4T_GSTJPEG_STATUS} 0 L4T_GSTJPEG_ERROR)
46+
LIST(GET ${L4T_GSTJPEG_STATUS} 1 L4T_GSTJPEG_MSG)
47+
IF(L4T_GSTJPEG_ERROR)
48+
MESSAGE(WARNING "Failed to download gstjpeg_src.tbz2: ${L4T_GSTJPEG_MSG}")
49+
ENDIF()
50+
ENDIF()
51+
EXECUTE_PROCESS(
52+
COMMAND ${CMAKE_COMMAND} -E tar xjf ${L4T_GSTJPEG_DEST} gstjpeg_src/nv_headers
53+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
54+
RESULT_VARIABLE L4T_HEADERS_ERROR
55+
ERROR_VARIABLE L4T_HEADERS_MSG
56+
)
57+
IF(L4T_HEADERS_ERROR)
58+
MESSAGE(WARNING "Failed to unpack gstjpeg_src.tbz2: ${L4T_HEADERS_MSG}")
59+
ENDIF()
60+
ENDIF()
61+
62+
FIND_PATH(TegraJPEG_INCLUDE_DIRS
63+
nv_headers/jpeglib.h
64+
DOC "Found TegraJPEG include directory"
65+
PATHS ${CMAKE_BINARY_DIR}/gstjpeg_src
66+
NO_DEFAULT_PATH
67+
)
68+
69+
FIND_LIBRARY(TegraJPEG_LIBRARIES
70+
NAMES jpeg nvjpeg
71+
DOC "Found TegraJPEG library"
72+
PATHS /usr/lib/arm-linux-gnueabihf/tegra
73+
NO_DEFAULT_PATH
74+
)
75+
76+
IF(TegraJPEG_INCLUDE_DIRS AND TegraJPEG_LIBRARIES)
77+
INCLUDE(CheckCSourceCompiles)
78+
set(CMAKE_REQUIRED_INCLUDES ${TegraJPEG_INCLUDE_DIRS})
79+
set(CMAKE_REQUIRED_LIBRARIES ${TegraJPEG_LIBRARIES})
80+
check_c_source_compiles("#include <stdio.h>\n#include <nv_headers/jpeglib.h>\nint main() { struct jpeg_decompress_struct d; jpeg_create_decompress(&d); d.jpegTegraMgr = 0; d.input_frame_buf = 0; return 0; }" TegraJPEG_WORKS)
81+
set(CMAKE_REQUIRED_INCLUDES)
82+
set(CMAKE_REQUIRED_LIBRARIES)
83+
ENDIF()
84+
85+
INCLUDE(FindPackageHandleStandardArgs)
86+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TegraJPEG FOUND_VAR TegraJPEG_FOUND
87+
REQUIRED_VARS TegraJPEG_LIBRARIES TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_DRIVER_OK TegraJPEG_WORKS)

include/libfreenect2/config.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252

5353
#cmakedefine LIBFREENECT2_WITH_TURBOJPEG_SUPPORT
5454

55+
#cmakedefine LIBFREENECT2_WITH_TEGRAJPEG_SUPPORT
56+
#define LIBFREENECT2_TEGRAJPEG_LIBRARY "@TegraJPEG_LIBRARIES@"
57+
5558
#cmakedefine LIBFREENECT2_THREADING_STDLIB
5659

5760
#cmakedefine LIBFREENECT2_THREADING_TINYTHREAD

src/packet_pipeline.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ static RgbPacketProcessor *getDefaultRgbPacketProcessor()
4747
else
4848
delete vaapi;
4949
return new TurboJpegRgbPacketProcessor();
50+
#elif defined(LIBFREENECT2_WITH_TEGRAJPEG_SUPPORT)
51+
RgbPacketProcessor *tegra = new TegraJpegRgbPacketProcessor();
52+
if (tegra->good())
53+
return tegra;
54+
else
55+
delete tegra;
56+
return new TurboJpegRgbPacketProcessor();
5057
#elif defined(LIBFREENECT2_WITH_TURBOJPEG_SUPPORT)
5158
return new TurboJpegRgbPacketProcessor();
5259
#else

0 commit comments

Comments
 (0)