Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 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
18 changes: 11 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -41,21 +43,22 @@ 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

```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!

Expand All @@ -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.
44 changes: 37 additions & 7 deletions src/orbbec/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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}/$<CONFIGURATION>)

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)
Expand Down Expand Up @@ -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
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 11 additions & 6 deletions src/orbbec/ob_k4a_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -2010,10 +2010,15 @@ k4a_buffer_result_t k4a_device_get_serialnum(k4a_device_t device_handle,
size_t caller_buffer_size = 0;
caller_buffer_size = *serial_number_size;

<<<<<<< HEAD
size_t snLen = strlen(sn);
*serial_number_size = snLen + 1;
=======
int snLen = (int)strlen(sn);
*serial_number_size = snLen;
>>>>>>> ob/feature/1.1.x_build_ninja

if (caller_buffer_size <= snLen || serial_number == NULL)
if (caller_buffer_size <= (size_t)snLen || serial_number == NULL)
{
return K4A_BUFFER_RESULT_TOO_SMALL;
}
Expand All @@ -2032,7 +2037,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);
Expand All @@ -2042,7 +2047,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')
{
Expand All @@ -2051,8 +2056,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++)
Expand Down