9 #include <k4arecord/playback.h>
10 #include <k4arecord/record.h>
14 #include <unordered_map>
32 namespace k4a_plugin {
40 static std::unordered_map<std::string, HINSTANCE> map_lib_name_to_handle;
42 if (map_lib_name_to_handle.count(lib_name) == 0) {
48 std::string env_lib_dir =
"";
49 char const* temp = std::getenv(
"K4A_LIB_DIR");
50 if (temp !=
nullptr) {
51 env_lib_dir = std::string(temp);
55 static const std::vector<std::string> k4a_lib_path_hints = {
58 "C:\\Program Files\\Azure Kinect SDK v1.4.1\\sdk\\windows-desktop\\amd64\\release\\bin",
59 "C:\\Program Files\\Azure Kinect SDK v1.4.0\\sdk\\windows-desktop\\amd64\\release\\bin",
60 "C:\\Program Files\\Azure Kinect SDK v1.3.0\\sdk\\windows-desktop\\amd64\\release\\bin",
61 "C:\\Program Files\\Azure Kinect SDK v1.2.0\\sdk\\windows-desktop\\amd64\\release\\bin"
65 HINSTANCE handle =
NULL;
66 for (
const std::string& k4a_lib_path_hint : k4a_lib_path_hints) {
69 std::string full_path = k4a_lib_path_hint +
"\\" + lib_name;
70 handle = LoadLibrary(TEXT(full_path.c_str()));
79 map_lib_name_to_handle[lib_name] = handle;
81 return map_lib_name_to_handle.at(lib_name);
84 #define DEFINE_BRIDGED_FUNC_WITH_COUNT(lib_name, return_type, f_name, \
86 return_type f_name(EXTRACT_TYPES_PARAMS(num_args, __VA_ARGS__)) { \
87 typedef return_type (*f_type)( \
88 EXTRACT_TYPES_PARAMS(num_args, __VA_ARGS__)); \
89 static f_type f = nullptr; \
92 f = (f_type)GetProcAddress(GetDynamicLibHandle(lib_name), \
95 utility::LogError("Cannot load func {}", #f_name); \
97 utility::LogDebug("Loaded func {}", #f_name); \
100 return f(EXTRACT_PARAMS(num_args, __VA_ARGS__)); \
109 static std::unordered_map<std::string, void*> map_lib_name_to_handle;
111 if (map_lib_name_to_handle.count(lib_name) == 0) {
121 std::vector<std::string> k4a_lib_path_hints;
122 if (
const char* ld_paths_c = std::getenv(
"LD_LIBRARY_PATH")) {
125 k4a_lib_path_hints.insert(k4a_lib_path_hints.begin(),
"");
127 void* handle =
nullptr;
128 std::string full_path;
129 for (
const std::string& k4a_lib_path_hint : k4a_lib_path_hints) {
130 if (k4a_lib_path_hint ==
"") {
131 full_path = lib_name;
133 full_path = k4a_lib_path_hint +
"/" + lib_name;
135 handle = dlopen(full_path.c_str(), RTLD_NOW);
136 if (handle !=
NULL) {
144 struct link_map* map =
nullptr;
145 if (!dlinfo(handle, RTLD_DI_LINKMAP, &map)) {
146 if (map !=
nullptr) {
155 map_lib_name_to_handle[lib_name] = handle;
157 return map_lib_name_to_handle.at(lib_name);
160 #define DEFINE_BRIDGED_FUNC_WITH_COUNT(lib_name, return_type, f_name, \
162 return_type f_name(EXTRACT_TYPES_PARAMS(num_args, __VA_ARGS__)) { \
163 typedef return_type (*f_type)( \
164 EXTRACT_TYPES_PARAMS(num_args, __VA_ARGS__)); \
165 static f_type f = nullptr; \
168 f = (f_type)dlsym(GetDynamicLibHandle(lib_name), #f_name); \
170 utility::LogError("Cannot load {}: {}", #f_name, dlerror()); \
173 return f(EXTRACT_PARAMS(num_args, __VA_ARGS__)); \
178 #define DEFINE_BRIDGED_FUNC(lib_name, return_type, f_name, ...) \
179 DEFINE_BRIDGED_FUNC_WITH_COUNT(lib_name, return_type, f_name, \
180 COUNT_ARGS(__VA_ARGS__), __VA_ARGS__)
191 const k4a_device_configuration_t,
276 k4a_record_configuration_t*,
331 k4a_playback_seek_origin_t,
351 k4a_logging_message_cb_t*,
489 k4a_memory_destroy_cb_t*,
492 buffer_release_cb_context,
593 k4a_device_configuration_t*,
626 k4a_hardware_version_t*,
634 k4a_color_control_command_t,
646 k4a_color_control_mode_t*,
654 k4a_color_control_command_t,
656 k4a_color_control_mode_t*,
666 k4a_color_control_command_t,
668 k4a_color_control_mode_t,
688 const k4a_depth_mode_t,
690 const k4a_color_resolution_t,
701 sync_in_jack_connected,
703 sync_out_jack_connected)
711 raw_calibration_size,
712 const k4a_depth_mode_t,
714 const k4a_color_resolution_t,
722 const k4a_calibration_t*,
726 const k4a_calibration_type_t,
728 const k4a_calibration_type_t,
736 const k4a_calibration_t*,
742 const k4a_calibration_type_t,
744 const k4a_calibration_type_t,
754 const k4a_calibration_t*,
758 const k4a_calibration_type_t,
760 const k4a_calibration_type_t,
770 const k4a_calibration_t*,
776 const k4a_calibration_type_t,
778 const k4a_calibration_type_t,
786 k4a_transformation_t,
788 const k4a_calibration_t*,
794 k4a_transformation_t,
795 transformation_handle)
800 k4a_transformation_t,
801 transformation_handle,
805 transformed_depth_image)
810 k4a_transformation_t,
811 transformation_handle,
817 transformed_color_image)
822 k4a_transformation_t,
823 transformation_handle,
826 const k4a_calibration_type_t,
filament::Texture::InternalFormat format
#define DEFINE_BRIDGED_FUNC(lib_name, return_type, f_name,...)
Helper functions for the ml ops.
k4a_result_t k4a_record_add_imu_track(k4a_record_t recording_handle)
uint32_t k4a_device_get_installed_count()
k4a_result_t k4a_calibration_get_from_raw(char *raw_calibration, size_t raw_calibration_size, const k4a_depth_mode_t depth_mode, const k4a_color_resolution_t color_resolution, k4a_calibration_t *calibration)
k4a_image_t k4a_capture_get_depth_image(k4a_capture_t capture_handle)
void k4a_capture_release(k4a_capture_t capture_handle)
k4a_result_t k4a_image_create(k4a_image_format_t format, int width_pixels, int height_pixels, int stride_bytes, k4a_image_t *image_handle)
void k4a_image_set_white_balance(k4a_image_t image_handle, uint32_t white_balance)
k4a_wait_result_t k4a_device_get_imu_sample(k4a_device_t device_handle, k4a_imu_sample_t *imu_sample, int32_t timeout_in_ms)
void k4a_image_reference(k4a_image_t image_handle)
uint64_t k4a_image_get_exposure_usec(k4a_image_t image_handle)
k4a_stream_result_t k4a_playback_get_next_imu_sample(k4a_playback_t playback_handle, k4a_imu_sample_t *imu_sample)
k4a_result_t k4a_calibration_2d_to_3d(const k4a_calibration_t *calibration, const k4a_float2_t *source_point2d, const float source_depth_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float3_t *target_point3d_mm, int *valid)
k4a_stream_result_t k4a_playback_get_previous_imu_sample(k4a_playback_t playback_handle, k4a_imu_sample_t *imu_sample)
uint32_t k4a_image_get_white_balance(k4a_image_t image_handle)
k4a_result_t k4a_record_write_header(k4a_record_t recording_handle)
k4a_result_t k4a_playback_get_record_configuration(k4a_playback_t playback_handle, k4a_record_configuration_t *config)
k4a_result_t k4a_image_create_from_buffer(k4a_image_format_t format, int width_pixels, int height_pixels, int stride_bytes, uint8_t *buffer, size_t buffer_size, k4a_memory_destroy_cb_t *buffer_release_cb, void *buffer_release_cb_context, k4a_image_t *image_handle)
k4a_result_t k4a_record_add_tag(k4a_record_t recording_handle, const char *name, const char *value)
k4a_result_t k4a_transformation_depth_image_to_point_cloud(k4a_transformation_t transformation_handle, const k4a_image_t depth_image, const k4a_calibration_type_t camera, k4a_image_t xyz_image)
int k4a_image_get_stride_bytes(k4a_image_t image_handle)
void k4a_capture_set_temperature_c(k4a_capture_t capture_handle, float temperature_c)
float k4a_capture_get_temperature_c(k4a_capture_t capture_handle)
k4a_buffer_result_t k4a_playback_get_raw_calibration(k4a_playback_t playback_handle, uint8_t *data, size_t *data_size)
k4a_result_t k4a_device_open(uint32_t index, k4a_device_t *device_handle)
k4a_result_t k4a_calibration_2d_to_2d(const k4a_calibration_t *calibration, const k4a_float2_t *source_point2d, const float source_depth_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d, int *valid)
void k4a_capture_set_depth_image(k4a_capture_t capture_handle, k4a_image_t image_handle)
void k4a_device_stop_imu(k4a_device_t device_handle)
k4a_result_t k4a_device_get_calibration(k4a_device_t device_handle, const k4a_depth_mode_t depth_mode, const k4a_color_resolution_t color_resolution, k4a_calibration_t *calibration)
k4a_stream_result_t k4a_playback_get_previous_capture(k4a_playback_t playback_handle, k4a_capture_t *capture_handle)
k4a_result_t k4a_playback_get_calibration(k4a_playback_t playback_handle, k4a_calibration_t *calibration)
k4a_result_t k4a_device_get_sync_jack(k4a_device_t device_handle, bool *sync_in_jack_connected, bool *sync_out_jack_connected)
void k4a_image_set_timestamp_usec(k4a_image_t image_handle, uint64_t timestamp_usec)
k4a_buffer_result_t k4a_playback_get_tag(k4a_playback_t playback_handle, const char *name, char *value, size_t *value_size)
k4a_result_t k4a_device_get_version(k4a_device_t device_handle, k4a_hardware_version_t *version)
void k4a_image_set_exposure_time_usec(k4a_image_t image_handle, uint64_t exposure_usec)
k4a_result_t k4a_device_get_color_control_capabilities(k4a_device_t device_handle, k4a_color_control_command_t command, bool *supports_auto, int32_t *min_value, int32_t *max_value, int32_t *step_value, int32_t *default_value, k4a_color_control_mode_t *default_mode)
void k4a_image_release(k4a_image_t image_handle)
k4a_result_t k4a_record_flush(k4a_record_t recording_handle)
k4a_result_t k4a_device_set_color_control(k4a_device_t device_handle, k4a_color_control_command_t command, k4a_color_control_mode_t mode, int32_t value)
k4a_result_t k4a_record_create(const char *path, k4a_device_t device, const k4a_device_configuration_t device_config, k4a_record_t *recording_handle)
uint8_t * k4a_image_get_buffer(k4a_image_t image_handle)
void k4a_device_close(k4a_device_t device_handle)
void k4a_capture_set_color_image(k4a_capture_t capture_handle, k4a_image_t image_handle)
k4a_result_t k4a_calibration_3d_to_2d(const k4a_calibration_t *calibration, const k4a_float3_t *source_point3d_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d, int *valid)
k4a_result_t k4a_device_start_imu(k4a_device_t device_handle)
int k4a_image_get_height_pixels(k4a_image_t image_handle)
k4a_image_format_t k4a_image_get_format(k4a_image_t image_handle)
k4a_result_t k4a_calibration_3d_to_3d(const k4a_calibration_t *calibration, const k4a_float3_t *source_point3d_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float3_t *target_point3d_mm)
k4a_buffer_result_t k4a_device_get_serialnum(k4a_device_t device_handle, char *serial_number, size_t *serial_number_size)
void k4a_playback_close(k4a_playback_t playback_handle)
k4a_transformation_t k4a_transformation_create(const k4a_calibration_t *calibration)
k4a_result_t k4a_playback_open(const char *path, k4a_playback_t *playback_handle)
void k4a_transformation_destroy(k4a_transformation_t transformation_handle)
k4a_result_t k4a_transformation_depth_image_to_color_camera(k4a_transformation_t transformation_handle, const k4a_image_t depth_image, k4a_image_t transformed_depth_image)
k4a_image_t k4a_capture_get_ir_image(k4a_capture_t capture_handle)
uint64_t k4a_image_get_timestamp_usec(k4a_image_t image_handle)
uint64_t k4a_playback_get_last_timestamp_usec(k4a_playback_t playback_handle)
void k4a_device_stop_cameras(k4a_device_t device_handle)
k4a_image_t k4a_capture_get_color_image(k4a_capture_t capture_handle)
k4a_result_t k4a_playback_seek_timestamp(k4a_playback_t playback_handle, int64_t offset_usec, k4a_playback_seek_origin_t origin)
static const std::string k4a_lib_name
void k4a_image_set_iso_speed(k4a_image_t image_handle, uint32_t iso_speed)
k4a_result_t k4a_record_write_capture(k4a_record_t recording_handle, k4a_capture_t capture_handle)
k4a_result_t k4a_capture_create(k4a_capture_t *capture_handle)
k4a_stream_result_t k4a_playback_get_next_capture(k4a_playback_t playback_handle, k4a_capture_t *capture_handle)
k4a_wait_result_t k4a_device_get_capture(k4a_device_t device_handle, k4a_capture_t *capture_handle, int32_t timeout_in_ms)
k4a_buffer_result_t k4a_device_get_raw_calibration(k4a_device_t device_handle, uint8_t *data, size_t *data_size)
void k4a_record_close(k4a_record_t recording_handle)
size_t k4a_image_get_size(k4a_image_t image_handle)
static void * GetDynamicLibHandle(const std::string &lib_name)
k4a_result_t k4a_record_write_imu_sample(k4a_record_t recording_handle, k4a_imu_sample_t imu_sample)
int k4a_image_get_width_pixels(k4a_image_t image_handle)
void k4a_capture_set_ir_image(k4a_capture_t capture_handle, k4a_image_t image_handle)
k4a_result_t k4a_playback_set_color_conversion(k4a_playback_t playback_handle, k4a_image_format_t target_format)
k4a_result_t k4a_device_start_cameras(k4a_device_t device_handle, k4a_device_configuration_t *config)
k4a_result_t k4a_set_debug_message_handler(k4a_logging_message_cb_t *message_cb, void *message_cb_context, k4a_log_level_t min_level)
k4a_result_t k4a_device_get_color_control(k4a_device_t device_handle, k4a_color_control_command_t command, k4a_color_control_mode_t *mode, int32_t *value)
static const std::string k4arecord_lib_name
uint32_t k4a_image_get_iso_speed(k4a_image_t image_handle)
void k4a_capture_reference(k4a_capture_t capture_handle)
k4a_result_t k4a_transformation_color_image_to_depth_camera(k4a_transformation_t transformation_handle, const k4a_image_t depth_image, const k4a_image_t color_image, k4a_image_t transformed_color_image)
static const std::string path
void SplitString(std::vector< std::string > &tokens, const std::string &str, const std::string &delimiters=" ", bool trim_empty_str=true)
Generic file read and write utility for python interface.