diff --git a/README.md b/README.md index a807c12fc..f6891a7c6 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Also user can use this library to replace native K4A library in your application The [k4a.h](./include/k4a/k4a.h) is the header file of K4A API, and the source code in [k4a.c](./src/sdk/k4a.c) is the implementation of K4A API. We have reimplemented the K4A API in [ob_k4a_impl.c](./src/orbbec/ob_k4a_impl.c) with OrbbecSDK, and keep the same effect as the original K4A API. Therefore, all functions called on user's side will be redirected to the OrbbecSDK, and user can access the Orbbec camera like the K4A device. +![OrbbecSDK-K4A-Wrapper](src/orbbec/docs/resource/OrbbecSDK-K4A-Wrapper.png) + ## Supported camera and platform Orbbec Femto Mega: Windows10+, Ubuntu20.04+; x64 @@ -41,10 +43,11 @@ Quick Instructions: ```powershell cd OrbbecSDK-K4A-Wrapper - mkdir build && cd build + mkdir build + cd build cmake .. -G Ninja - cmake --build . - cmake --install . + ninja + ninja install ``` * Linux @@ -52,10 +55,10 @@ Quick Instructions: ```bash cd OrbbecSDK-K4A-Wrapper mkdir build && cd build - cmake .. - cmake --build . - cmake --install - ``` + sudo cmake .. -G Ninja + sudo ninja + sudo ninja install +``` ### Test it! @@ -64,3 +67,4 @@ Connect the Orbbec camera to your PC, and run the k4aviewer. ## Attention 1. The library of this branch is not support the K4A device, please use the [Native K4A](https://github.com/microsoft/Azure-Kinect-Sensor-SDK) library to access the K4A device. +2. The OrbbecSDK K4A Wrapper is aim to provide the same API as the K4A, but it's not full API for OrbbecSDK and feature for Orbbec camera. If you want to use the full feature of Orbbec camera, please use the [OrbbecSDK](https://github.com/orbbec/OrbbecSDK) directly. diff --git a/src/orbbec/CMakeLists.txt b/src/orbbec/CMakeLists.txt index 15b488e53..c0a478035 100644 --- a/src/orbbec/CMakeLists.txt +++ b/src/orbbec/CMakeLists.txt @@ -65,13 +65,16 @@ target_link_libraries(k4a PRIVATE get_target_property(OrbbecSDK_DLL OrbbecSDK::OrbbecSDK IMPORTED_LOCATION) get_target_property(K4A_OUTPUT_DIR k4a RUNTIME_OUTPUT_DIRECTORY) -message(STATUS "OrbbecSDK_DLL: ${OrbbecSDK_DLL}") -message(STATUS "K4A_OUTPUT_DIR: ${K4A_OUTPUT_DIR}") -add_custom_command(TARGET k4a - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${OrbbecSDK_DLL} - ${K4A_OUTPUT_DIR}/$) + +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OrbbecSDK_DLL} ${K4A_OUTPUT_DIR}) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(DEPTHENGINE20_DLL ${CMAKE_CURRENT_LIST_DIR}/k4adepthengine/win_x64/depthengine_2_0.dll) + endif() +endif() + +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${DEPTHENGINE20_DLL} ${K4A_OUTPUT_DIR}) # Define alias for k4a add_library(k4a::k4a ALIAS k4a) @@ -166,6 +169,33 @@ install( development ) +set(OrbbecSDK_INSTALL "") + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(OrbbecSDK_INSTALL "/OrbbecSDK/lib/arm32/libOrbbecSDK.so") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(OrbbecSDK_INSTALL "/OrbbecSDK/lib/arm64/libOrbbecSDK.so") + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") + set(OrbbecSDK_INSTALL "/OrbbecSDK/lib/linux_x64/libOrbbecSDK.so") +elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(OrbbecSDK_INSTALL "/OrbbecSDK/lib/win_x86/OrbbecSDK.dll") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(OrbbecSDK_INSTALL "/OrbbecSDK/lib/win_x64/OrbbecSDK.dll") + endif() +endif() + +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}${OrbbecSDK_INSTALL} + DESTINATION + ${CMAKE_INSTALL_BINDIR} + COMPONENT + development +) + if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") install( FILES diff --git a/src/orbbec/docs/resource/OrbbecSDK-K4A-Wrapper.png b/src/orbbec/docs/resource/OrbbecSDK-K4A-Wrapper.png new file mode 100644 index 000000000..95c381083 Binary files /dev/null and b/src/orbbec/docs/resource/OrbbecSDK-K4A-Wrapper.png differ diff --git a/src/orbbec/ob_k4a_impl.c b/src/orbbec/ob_k4a_impl.c index 839589f83..9d7d0e61b 100644 --- a/src/orbbec/ob_k4a_impl.c +++ b/src/orbbec/ob_k4a_impl.c @@ -576,7 +576,7 @@ k4a_result_t k4a_device_start_imu(k4a_device_t device_handle) } ob_sensor_start(accel_sensor, profile, ob_accel_frame, device_handle, &ob_err); - // CHECK_OB_ERROR(ob_err); + CHECK_OB_ERROR(ob_err); ob_delete_stream_profile(profile, &ob_err); if (ob_err != NULL) { @@ -2013,7 +2013,7 @@ k4a_buffer_result_t k4a_device_get_serialnum(k4a_device_t device_handle, size_t snLen = strlen(sn); *serial_number_size = snLen + 1; - if (caller_buffer_size <= snLen || serial_number == NULL) + if (caller_buffer_size <= (size_t)snLen || serial_number == NULL) { return K4A_BUFFER_RESULT_TOO_SMALL; } @@ -2032,7 +2032,7 @@ k4a_result_t version_convert(const char *orbbec_version, k4a_version_t *k4a_vers return K4A_RESULT_FAILED; } - size_t orbbec_version_len = strlen(orbbec_version); + int orbbec_version_len = (int)strlen(orbbec_version); if (orbbec_version_len >= MAX_FIREWARE_VERSION_LEN) { LOG_WARNING("orbbec_version_len overflow ", 0); @@ -2042,7 +2042,7 @@ k4a_result_t version_convert(const char *orbbec_version, k4a_version_t *k4a_vers char split_version[MAX_FIREWARE_VERSION_LEN] = { 0 }; size_t count = 0; - for (size_t i = 0; i < orbbec_version_len; i++) + for (int i = 0; i < orbbec_version_len; i++) { if (orbbec_version[i] >= '0' && orbbec_version[i] <= '9') { @@ -2051,8 +2051,8 @@ k4a_result_t version_convert(const char *orbbec_version, k4a_version_t *k4a_vers } } - size_t split_version_len = orbbec_version_len - count; - memcpy(split_version, orbbec_version + count, split_version_len); + int split_version_len = orbbec_version_len - count; + memcpy(split_version, orbbec_version + count, (uint16_t)split_version_len); count = 0; for (int i = 0; i < split_version_len; i++)