diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/h/Advanced.h b/orbbec_camera/SDK/arm64/include/libobsensor/h/Advanced.h
index abff49dc..800b77df 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/h/Advanced.h
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/h/Advanced.h
@@ -101,6 +101,16 @@ OB_EXPORT void ob_delete_depth_work_mode_list(ob_depth_work_mode_list *work_mode
*/
OB_EXPORT const char *ob_device_get_current_preset_name(const ob_device *device, ob_error **error);
+/**
+ * @brief Get the version of the current depth work mode.
+ *
+ * @param[in] device The device object.
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ *
+ * @return const char* The version string, e.g. "1.2.3". Empty string when the device does not
+ * support versioned modes.
+ */
+OB_EXPORT const char *ob_device_get_current_preset_depth_work_mode_version(const ob_device *device, ob_error **error);
/**
* @brief Get the available preset list.
* @attention After loading the preset, the settings in the preset will set to the device immediately. Therefore, it is recommended to re-read the device
@@ -113,6 +123,17 @@ OB_EXPORT const char *ob_device_get_current_preset_name(const ob_device *device,
*/
OB_EXPORT void ob_device_load_preset(ob_device *device, const char *preset_name, ob_error **error);
+/**
+ * @brief Load the preset by preset name and the target depth work mode version.
+ * When multiple presets share the same name, the version selects the exact one.
+ *
+ * @param[in] device The device object.
+ * @param[in] preset_name The preset name. The name should be one of the preset names returned by @ref ob_device_get_available_preset_list.
+ * @param[in] version The target depth work mode version string, e.g. "1.2.3". Must not be empty.
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ */
+OB_EXPORT void ob_device_load_preset_by_depth_work_mode_version(ob_device *device, const char *preset_name, const char *version, ob_error **error);
+
/**
* @brief Load preset from json string.
* @brief After loading the custom preset, the settings in the custom preset will set to the device immediately.
@@ -217,6 +238,18 @@ OB_EXPORT const char *ob_device_preset_list_get_name(const ob_device_preset_list
*/
OB_EXPORT bool ob_device_preset_list_has_preset(const ob_device_preset_list *preset_list, const char *preset_name, ob_error **error);
+/**
+ * @brief Get the target depth work mode version of the preset at the specified index.
+ *
+ * @param[in] preset_list Data structure containing a list of presets
+ * @param[in] index Index of the target preset
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ *
+ * @return const char* The version string of the depth work mode, e.g. "1.2.3". Empty string when the
+ * device does not support versioned modes.
+ */
+OB_EXPORT const char *ob_device_preset_list_get_depth_work_mode_version(const ob_device_preset_list *preset_list, uint32_t index, ob_error **error);
+
/**
* @brief Check if the device supports the frame interleave feature.
*
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/h/Context.h b/orbbec_camera/SDK/arm64/include/libobsensor/h/Context.h
index 3c84c5be..ab9ee954 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/h/Context.h
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/h/Context.h
@@ -80,6 +80,20 @@ OB_EXPORT void ob_enable_net_device_enumeration(ob_context *context, bool enable
*/
OB_EXPORT bool ob_force_ip_config(const char *macAddress, ob_net_ip_config config, ob_error **error);
+/**
+ * @brief Send a GigE Vision Action Command via GVCP.
+ *
+ * @param[in] deviceKey Device key to match.
+ * @param[in] groupKey Group key to match against the camera's Action blocks.
+ * @param[in] groupMask Group mask, bitwise-ANDed with each Action block's mask.
+ * @param[in] destIp Destination IPv4 address. NULL or "255.255.255.255" uses broadcast.
+ * @param[in] scheduledTime PTP absolute timestamp. 0 = immediate trigger, non-zero = scheduled.
+ * @param[out] error Pointer to an error object that will be populated if an error occurs.
+ *
+ * @return bool true on success. Fire-and-forget; does not wait for camera ACK.
+ */
+OB_EXPORT bool ob_send_action_command(uint32_t deviceKey, uint32_t groupKey, uint32_t groupMask, const char *destIp, uint64_t scheduledTime, ob_error **error);
+
/**
* @brief Set the GVCP port scheme used for network device discovery and control.
*
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/h/ObTypes.h b/orbbec_camera/SDK/arm64/include/libobsensor/h/ObTypes.h
index 1a234540..6590efd2 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/h/ObTypes.h
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/h/ObTypes.h
@@ -1578,6 +1578,12 @@ typedef enum {
* @brief The device captures data in software synchronization mode, starting acquisition based on the system time.
*/
OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_SYNCED = 1 << 8,
+
+ /**
+ * @brief Group actions trigger mode.
+ * @note The device waits for a GVCP ACTION_CMD matching the configured action parameters.
+ */
+ OB_MULTI_DEVICE_SYNC_MODE_GROUP_ACTIONS = 1 << 9,
} ob_multi_device_sync_mode,
OBMultiDeviceSyncMode;
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/h/Property.h b/orbbec_camera/SDK/arm64/include/libobsensor/h/Property.h
index 486a54f0..02c6a848 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/h/Property.h
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/h/Property.h
@@ -674,6 +674,7 @@ typedef enum {
/**
* @brief Enable FPS boost in trigger mode
+ * Not effective for devices connected via USB 2.x or lower
*/
OB_PROP_FPS_BOOST_BOOL = 275,
@@ -695,6 +696,44 @@ typedef enum {
*/
OB_PROP_COLOR_AE_AWB_STATUS_INT = 287,
+ /**
+ * @brief Number of Action Signal blocks supported by the device
+ */
+ OB_PROP_ACTION_SIGNAL_COUNT_INT = 296,
+
+ /**
+ * @brief Action Device Key, shared across all Action Commands
+ */
+ OB_PROP_ACTION_DEVICE_KEY_INT = 297,
+
+ /**
+ * @brief Maximum number of scheduled Action Commands that can be queued by the device
+ */
+ OB_PROP_ACTION_SCHEDULED_COMMAND_QUEUE_SIZE_INT = 298,
+
+ /**
+ * @brief Action Signal selector, 0..N-1; subsequent selector-scoped reads/writes target the selected block.
+ * @note The selector is stateful. The selector, Group Key, and Group Mask
+ * must be written serially as one caller-controlled sequence. Do not
+ * interleave this sequence with Action Command property operations
+ * from another thread on the same device.
+ */
+ OB_PROP_ACTION_SELECTOR_INT = 299,
+
+ /**
+ * @brief Action Group Key for the currently selected block.
+ * @note Must be written serially with OB_PROP_ACTION_SELECTOR_INT and
+ * OB_PROP_ACTION_GROUP_MASK_INT on the same device.
+ */
+ OB_PROP_ACTION_GROUP_KEY_INT = 300,
+
+ /**
+ * @brief Action Group Mask for the currently selected block.
+ * @note Must be written serially with OB_PROP_ACTION_SELECTOR_INT and
+ * OB_PROP_ACTION_GROUP_KEY_INT on the same device.
+ */
+ OB_PROP_ACTION_GROUP_MASK_INT = 301,
+
/**
* @brief Baseline calibration parameters
*/
@@ -978,6 +1017,11 @@ typedef enum {
*/
OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT = 2052,
+ /**
+ * @brief Color camera WB control
+ */
+ OB_PROP_COLOR_WB_CTRL_INT = 2053,
+
/**
* @brief Software disparity to depth
*/
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Context.hpp b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Context.hpp
index 7201ed05..d01a52f0 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Context.hpp
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Context.hpp
@@ -157,6 +157,24 @@ public:
return res;
}
+ /**
+ * @brief Send a GigE Vision Action Command via GVCP.
+ *
+ * @param deviceKey Device key to match.
+ * @param groupKey Group key to match.
+ * @param groupMask Group mask, bitwise-ANDed with Action block masks.
+ * @param destIp Destination IPv4 address. Defaults to "255.255.255.255" for broadcast.
+ * @param scheduledTime PTP timestamp. 0 = immediate, non-zero = scheduled.
+ *
+ * @return bool true on success.
+ */
+ bool sendActionCommand(uint32_t deviceKey, uint32_t groupKey, uint32_t groupMask, const char *destIp = "255.255.255.255", uint64_t scheduledTime = 0) {
+ ob_error *error = nullptr;
+ bool ok = ob_send_action_command(deviceKey, groupKey, groupMask, destIp, scheduledTime, &error);
+ Error::handle(&error);
+ return ok;
+ }
+
/**
* @brief Set the GVCP port scheme used for network device discovery and control.
*
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Device.hpp b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Device.hpp
index 37a420c2..b483a9b8 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Device.hpp
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Device.hpp
@@ -880,6 +880,31 @@ public:
Error::handle(&error);
}
+ /**
+ * @brief load the preset by preset name and the target depth work mode version.
+ * The version is forwarded to the depth work mode switch when loading the preset.
+ * @param[in] presetName The preset name to set. The name should be one of the preset names returned by @ref getAvailablePresetList.
+ * @param[in] version The target depth work mode version string, e.g. "1.2.3". Must not be empty.
+ */
+ void loadPreset(const char *presetName, const char *version) const {
+ ob_error *error = nullptr;
+ ob_device_load_preset_by_depth_work_mode_version(impl_, presetName, version, &error);
+ Error::handle(&error);
+ }
+
+ /**
+ * @brief Get the version of the current depth work mode.
+ *
+ * @return const char* The version string, e.g. "1.2.3". Empty string when the device
+ * does not support versioned modes.
+ */
+ const char *getCurrentPresetDepthWorkModeVersion() const {
+ ob_error *error = nullptr;
+ const char *version = ob_device_get_current_preset_depth_work_mode_version(impl_, &error);
+ Error::handle(&error);
+ return version;
+ }
+
/**
* @brief Get available preset list
* @brief The available preset list usually defined by the device manufacturer and restores on the device.
@@ -1836,6 +1861,21 @@ public:
return name;
}
+ /**
+ * @brief Get the depth work mode version of the preset at the specified index
+ *
+ * @param[in] index the index of the device preset
+ *
+ * @return const char* the version string of the depth work mode, e.g. "1.2.3". Empty string
+ * when the device does not support versioned modes.
+ */
+ const char *getDepthWorkModeVersion(uint32_t index) {
+ ob_error *error = nullptr;
+ const char *version = ob_device_preset_list_get_depth_work_mode_version(impl_, index, &error);
+ Error::handle(&error);
+ return version;
+ }
+
/**
* @brief check if the preset list contains the special name preset.
* @param[in] name The name of the preset
diff --git a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Filter.hpp b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Filter.hpp
index 591f2f99..0a2194d9 100644
--- a/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Filter.hpp
+++ b/orbbec_camera/SDK/arm64/include/libobsensor/hpp/Filter.hpp
@@ -177,8 +177,12 @@ public:
* @return std::shared_ptr< Frame > The processed frame.
*/
virtual std::shared_ptr process(std::shared_ptr frame) const {
+ const ob_frame *frameImpl = nullptr;
+ if(frame) {
+ frameImpl = frame->getImpl();
+ }
ob_error *error = nullptr;
- auto result = ob_filter_process(impl_, frame->getImpl(), &error);
+ auto result = ob_filter_process(impl_, frameImpl, &error);
Error::handle(&error);
if(!result) {
return nullptr;
@@ -192,8 +196,12 @@ public:
* @param[in] frame The pending frame. The processing result is returned by the callback function.
*/
virtual void pushFrame(std::shared_ptr frame) const {
+ const ob_frame *frameImpl = nullptr;
+ if(frame) {
+ frameImpl = frame->getImpl();
+ }
ob_error *error = nullptr;
- ob_filter_push_frame(impl_, frame->getImpl(), &error);
+ ob_filter_push_frame(impl_, frameImpl, &error);
Error::handle(&error);
}
diff --git a/orbbec_camera/SDK/arm64/lib/OrbbecSDKConfig-release.cmake b/orbbec_camera/SDK/arm64/lib/OrbbecSDKConfig-release.cmake
index 231fafb1..c3bd1654 100644
--- a/orbbec_camera/SDK/arm64/lib/OrbbecSDKConfig-release.cmake
+++ b/orbbec_camera/SDK/arm64/lib/OrbbecSDKConfig-release.cmake
@@ -8,12 +8,12 @@ set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "ob::OrbbecSDK" for configuration "Release"
set_property(TARGET ob::OrbbecSDK APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(ob::OrbbecSDK PROPERTIES
- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.1"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.2"
IMPORTED_SONAME_RELEASE "libOrbbecSDK.so.2"
)
list(APPEND _cmake_import_check_targets ob::OrbbecSDK )
-list(APPEND _cmake_import_check_files_for_ob::OrbbecSDK "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.1" )
+list(APPEND _cmake_import_check_files_for_ob::OrbbecSDK "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.2" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/orbbec_camera/SDK/arm64/lib/OrbbecSDKVersion.cmake b/orbbec_camera/SDK/arm64/lib/OrbbecSDKVersion.cmake
index 7851ea03..515957a9 100644
--- a/orbbec_camera/SDK/arm64/lib/OrbbecSDKVersion.cmake
+++ b/orbbec_camera/SDK/arm64/lib/OrbbecSDKVersion.cmake
@@ -9,19 +9,19 @@
# The variable CVF_VERSION must be set before calling configure_file().
-set(PACKAGE_VERSION "2.10.1")
+set(PACKAGE_VERSION "2.10.2")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
- if("2.10.1" MATCHES "^([0-9]+)\\.")
+ if("2.10.2" MATCHES "^([0-9]+)\\.")
set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
endif()
else()
- set(CVF_VERSION_MAJOR "2.10.1")
+ set(CVF_VERSION_MAJOR "2.10.2")
endif()
if(PACKAGE_FIND_VERSION_RANGE)
diff --git a/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2 b/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2
index 027ba8ff..6687316d 120000
--- a/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2
+++ b/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2
@@ -1 +1 @@
-libOrbbecSDK.so.2.10.1
\ No newline at end of file
+libOrbbecSDK.so.2.10.2
\ No newline at end of file
diff --git a/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.1 b/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.2
similarity index 67%
rename from orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.1
rename to orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.2
index c54fc1cd..1eb61970 100644
Binary files a/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.1 and b/orbbec_camera/SDK/arm64/lib/libOrbbecSDK.so.2.10.2 differ
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/h/Advanced.h b/orbbec_camera/SDK/x64/include/libobsensor/h/Advanced.h
index abff49dc..800b77df 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/h/Advanced.h
+++ b/orbbec_camera/SDK/x64/include/libobsensor/h/Advanced.h
@@ -101,6 +101,16 @@ OB_EXPORT void ob_delete_depth_work_mode_list(ob_depth_work_mode_list *work_mode
*/
OB_EXPORT const char *ob_device_get_current_preset_name(const ob_device *device, ob_error **error);
+/**
+ * @brief Get the version of the current depth work mode.
+ *
+ * @param[in] device The device object.
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ *
+ * @return const char* The version string, e.g. "1.2.3". Empty string when the device does not
+ * support versioned modes.
+ */
+OB_EXPORT const char *ob_device_get_current_preset_depth_work_mode_version(const ob_device *device, ob_error **error);
/**
* @brief Get the available preset list.
* @attention After loading the preset, the settings in the preset will set to the device immediately. Therefore, it is recommended to re-read the device
@@ -113,6 +123,17 @@ OB_EXPORT const char *ob_device_get_current_preset_name(const ob_device *device,
*/
OB_EXPORT void ob_device_load_preset(ob_device *device, const char *preset_name, ob_error **error);
+/**
+ * @brief Load the preset by preset name and the target depth work mode version.
+ * When multiple presets share the same name, the version selects the exact one.
+ *
+ * @param[in] device The device object.
+ * @param[in] preset_name The preset name. The name should be one of the preset names returned by @ref ob_device_get_available_preset_list.
+ * @param[in] version The target depth work mode version string, e.g. "1.2.3". Must not be empty.
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ */
+OB_EXPORT void ob_device_load_preset_by_depth_work_mode_version(ob_device *device, const char *preset_name, const char *version, ob_error **error);
+
/**
* @brief Load preset from json string.
* @brief After loading the custom preset, the settings in the custom preset will set to the device immediately.
@@ -217,6 +238,18 @@ OB_EXPORT const char *ob_device_preset_list_get_name(const ob_device_preset_list
*/
OB_EXPORT bool ob_device_preset_list_has_preset(const ob_device_preset_list *preset_list, const char *preset_name, ob_error **error);
+/**
+ * @brief Get the target depth work mode version of the preset at the specified index.
+ *
+ * @param[in] preset_list Data structure containing a list of presets
+ * @param[in] index Index of the target preset
+ * @param[out] error Pointer to an error object that will be set if an error occurs.
+ *
+ * @return const char* The version string of the depth work mode, e.g. "1.2.3". Empty string when the
+ * device does not support versioned modes.
+ */
+OB_EXPORT const char *ob_device_preset_list_get_depth_work_mode_version(const ob_device_preset_list *preset_list, uint32_t index, ob_error **error);
+
/**
* @brief Check if the device supports the frame interleave feature.
*
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/h/Context.h b/orbbec_camera/SDK/x64/include/libobsensor/h/Context.h
index 3c84c5be..ab9ee954 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/h/Context.h
+++ b/orbbec_camera/SDK/x64/include/libobsensor/h/Context.h
@@ -80,6 +80,20 @@ OB_EXPORT void ob_enable_net_device_enumeration(ob_context *context, bool enable
*/
OB_EXPORT bool ob_force_ip_config(const char *macAddress, ob_net_ip_config config, ob_error **error);
+/**
+ * @brief Send a GigE Vision Action Command via GVCP.
+ *
+ * @param[in] deviceKey Device key to match.
+ * @param[in] groupKey Group key to match against the camera's Action blocks.
+ * @param[in] groupMask Group mask, bitwise-ANDed with each Action block's mask.
+ * @param[in] destIp Destination IPv4 address. NULL or "255.255.255.255" uses broadcast.
+ * @param[in] scheduledTime PTP absolute timestamp. 0 = immediate trigger, non-zero = scheduled.
+ * @param[out] error Pointer to an error object that will be populated if an error occurs.
+ *
+ * @return bool true on success. Fire-and-forget; does not wait for camera ACK.
+ */
+OB_EXPORT bool ob_send_action_command(uint32_t deviceKey, uint32_t groupKey, uint32_t groupMask, const char *destIp, uint64_t scheduledTime, ob_error **error);
+
/**
* @brief Set the GVCP port scheme used for network device discovery and control.
*
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/h/ObTypes.h b/orbbec_camera/SDK/x64/include/libobsensor/h/ObTypes.h
index 1a234540..6590efd2 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/h/ObTypes.h
+++ b/orbbec_camera/SDK/x64/include/libobsensor/h/ObTypes.h
@@ -1578,6 +1578,12 @@ typedef enum {
* @brief The device captures data in software synchronization mode, starting acquisition based on the system time.
*/
OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_SYNCED = 1 << 8,
+
+ /**
+ * @brief Group actions trigger mode.
+ * @note The device waits for a GVCP ACTION_CMD matching the configured action parameters.
+ */
+ OB_MULTI_DEVICE_SYNC_MODE_GROUP_ACTIONS = 1 << 9,
} ob_multi_device_sync_mode,
OBMultiDeviceSyncMode;
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/h/Property.h b/orbbec_camera/SDK/x64/include/libobsensor/h/Property.h
index 486a54f0..02c6a848 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/h/Property.h
+++ b/orbbec_camera/SDK/x64/include/libobsensor/h/Property.h
@@ -674,6 +674,7 @@ typedef enum {
/**
* @brief Enable FPS boost in trigger mode
+ * Not effective for devices connected via USB 2.x or lower
*/
OB_PROP_FPS_BOOST_BOOL = 275,
@@ -695,6 +696,44 @@ typedef enum {
*/
OB_PROP_COLOR_AE_AWB_STATUS_INT = 287,
+ /**
+ * @brief Number of Action Signal blocks supported by the device
+ */
+ OB_PROP_ACTION_SIGNAL_COUNT_INT = 296,
+
+ /**
+ * @brief Action Device Key, shared across all Action Commands
+ */
+ OB_PROP_ACTION_DEVICE_KEY_INT = 297,
+
+ /**
+ * @brief Maximum number of scheduled Action Commands that can be queued by the device
+ */
+ OB_PROP_ACTION_SCHEDULED_COMMAND_QUEUE_SIZE_INT = 298,
+
+ /**
+ * @brief Action Signal selector, 0..N-1; subsequent selector-scoped reads/writes target the selected block.
+ * @note The selector is stateful. The selector, Group Key, and Group Mask
+ * must be written serially as one caller-controlled sequence. Do not
+ * interleave this sequence with Action Command property operations
+ * from another thread on the same device.
+ */
+ OB_PROP_ACTION_SELECTOR_INT = 299,
+
+ /**
+ * @brief Action Group Key for the currently selected block.
+ * @note Must be written serially with OB_PROP_ACTION_SELECTOR_INT and
+ * OB_PROP_ACTION_GROUP_MASK_INT on the same device.
+ */
+ OB_PROP_ACTION_GROUP_KEY_INT = 300,
+
+ /**
+ * @brief Action Group Mask for the currently selected block.
+ * @note Must be written serially with OB_PROP_ACTION_SELECTOR_INT and
+ * OB_PROP_ACTION_GROUP_KEY_INT on the same device.
+ */
+ OB_PROP_ACTION_GROUP_MASK_INT = 301,
+
/**
* @brief Baseline calibration parameters
*/
@@ -978,6 +1017,11 @@ typedef enum {
*/
OB_PROP_DEPTH_AUTO_EXPOSURE_PRIORITY_INT = 2052,
+ /**
+ * @brief Color camera WB control
+ */
+ OB_PROP_COLOR_WB_CTRL_INT = 2053,
+
/**
* @brief Software disparity to depth
*/
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Context.hpp b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Context.hpp
index 7201ed05..d01a52f0 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Context.hpp
+++ b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Context.hpp
@@ -157,6 +157,24 @@ public:
return res;
}
+ /**
+ * @brief Send a GigE Vision Action Command via GVCP.
+ *
+ * @param deviceKey Device key to match.
+ * @param groupKey Group key to match.
+ * @param groupMask Group mask, bitwise-ANDed with Action block masks.
+ * @param destIp Destination IPv4 address. Defaults to "255.255.255.255" for broadcast.
+ * @param scheduledTime PTP timestamp. 0 = immediate, non-zero = scheduled.
+ *
+ * @return bool true on success.
+ */
+ bool sendActionCommand(uint32_t deviceKey, uint32_t groupKey, uint32_t groupMask, const char *destIp = "255.255.255.255", uint64_t scheduledTime = 0) {
+ ob_error *error = nullptr;
+ bool ok = ob_send_action_command(deviceKey, groupKey, groupMask, destIp, scheduledTime, &error);
+ Error::handle(&error);
+ return ok;
+ }
+
/**
* @brief Set the GVCP port scheme used for network device discovery and control.
*
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Device.hpp b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Device.hpp
index 37a420c2..b483a9b8 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Device.hpp
+++ b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Device.hpp
@@ -880,6 +880,31 @@ public:
Error::handle(&error);
}
+ /**
+ * @brief load the preset by preset name and the target depth work mode version.
+ * The version is forwarded to the depth work mode switch when loading the preset.
+ * @param[in] presetName The preset name to set. The name should be one of the preset names returned by @ref getAvailablePresetList.
+ * @param[in] version The target depth work mode version string, e.g. "1.2.3". Must not be empty.
+ */
+ void loadPreset(const char *presetName, const char *version) const {
+ ob_error *error = nullptr;
+ ob_device_load_preset_by_depth_work_mode_version(impl_, presetName, version, &error);
+ Error::handle(&error);
+ }
+
+ /**
+ * @brief Get the version of the current depth work mode.
+ *
+ * @return const char* The version string, e.g. "1.2.3". Empty string when the device
+ * does not support versioned modes.
+ */
+ const char *getCurrentPresetDepthWorkModeVersion() const {
+ ob_error *error = nullptr;
+ const char *version = ob_device_get_current_preset_depth_work_mode_version(impl_, &error);
+ Error::handle(&error);
+ return version;
+ }
+
/**
* @brief Get available preset list
* @brief The available preset list usually defined by the device manufacturer and restores on the device.
@@ -1836,6 +1861,21 @@ public:
return name;
}
+ /**
+ * @brief Get the depth work mode version of the preset at the specified index
+ *
+ * @param[in] index the index of the device preset
+ *
+ * @return const char* the version string of the depth work mode, e.g. "1.2.3". Empty string
+ * when the device does not support versioned modes.
+ */
+ const char *getDepthWorkModeVersion(uint32_t index) {
+ ob_error *error = nullptr;
+ const char *version = ob_device_preset_list_get_depth_work_mode_version(impl_, index, &error);
+ Error::handle(&error);
+ return version;
+ }
+
/**
* @brief check if the preset list contains the special name preset.
* @param[in] name The name of the preset
diff --git a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Filter.hpp b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Filter.hpp
index 591f2f99..0a2194d9 100644
--- a/orbbec_camera/SDK/x64/include/libobsensor/hpp/Filter.hpp
+++ b/orbbec_camera/SDK/x64/include/libobsensor/hpp/Filter.hpp
@@ -177,8 +177,12 @@ public:
* @return std::shared_ptr< Frame > The processed frame.
*/
virtual std::shared_ptr process(std::shared_ptr frame) const {
+ const ob_frame *frameImpl = nullptr;
+ if(frame) {
+ frameImpl = frame->getImpl();
+ }
ob_error *error = nullptr;
- auto result = ob_filter_process(impl_, frame->getImpl(), &error);
+ auto result = ob_filter_process(impl_, frameImpl, &error);
Error::handle(&error);
if(!result) {
return nullptr;
@@ -192,8 +196,12 @@ public:
* @param[in] frame The pending frame. The processing result is returned by the callback function.
*/
virtual void pushFrame(std::shared_ptr frame) const {
+ const ob_frame *frameImpl = nullptr;
+ if(frame) {
+ frameImpl = frame->getImpl();
+ }
ob_error *error = nullptr;
- ob_filter_push_frame(impl_, frame->getImpl(), &error);
+ ob_filter_push_frame(impl_, frameImpl, &error);
Error::handle(&error);
}
diff --git a/orbbec_camera/SDK/x64/lib/OrbbecSDKConfig-release.cmake b/orbbec_camera/SDK/x64/lib/OrbbecSDKConfig-release.cmake
index 231fafb1..c3bd1654 100644
--- a/orbbec_camera/SDK/x64/lib/OrbbecSDKConfig-release.cmake
+++ b/orbbec_camera/SDK/x64/lib/OrbbecSDKConfig-release.cmake
@@ -8,12 +8,12 @@ set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "ob::OrbbecSDK" for configuration "Release"
set_property(TARGET ob::OrbbecSDK APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(ob::OrbbecSDK PROPERTIES
- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.1"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.2"
IMPORTED_SONAME_RELEASE "libOrbbecSDK.so.2"
)
list(APPEND _cmake_import_check_targets ob::OrbbecSDK )
-list(APPEND _cmake_import_check_files_for_ob::OrbbecSDK "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.1" )
+list(APPEND _cmake_import_check_files_for_ob::OrbbecSDK "${_IMPORT_PREFIX}/lib/libOrbbecSDK.so.2.10.2" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/orbbec_camera/SDK/x64/lib/OrbbecSDKVersion.cmake b/orbbec_camera/SDK/x64/lib/OrbbecSDKVersion.cmake
index 7851ea03..515957a9 100644
--- a/orbbec_camera/SDK/x64/lib/OrbbecSDKVersion.cmake
+++ b/orbbec_camera/SDK/x64/lib/OrbbecSDKVersion.cmake
@@ -9,19 +9,19 @@
# The variable CVF_VERSION must be set before calling configure_file().
-set(PACKAGE_VERSION "2.10.1")
+set(PACKAGE_VERSION "2.10.2")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
- if("2.10.1" MATCHES "^([0-9]+)\\.")
+ if("2.10.2" MATCHES "^([0-9]+)\\.")
set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
endif()
else()
- set(CVF_VERSION_MAJOR "2.10.1")
+ set(CVF_VERSION_MAJOR "2.10.2")
endif()
if(PACKAGE_FIND_VERSION_RANGE)
diff --git a/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2 b/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2
index 027ba8ff..6687316d 120000
--- a/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2
+++ b/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2
@@ -1 +1 @@
-libOrbbecSDK.so.2.10.1
\ No newline at end of file
+libOrbbecSDK.so.2.10.2
\ No newline at end of file
diff --git a/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.1 b/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.2
similarity index 68%
rename from orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.1
rename to orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.2
index 4b9023d2..ba8936d3 100644
Binary files a/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.1 and b/orbbec_camera/SDK/x64/lib/libOrbbecSDK.so.2.10.2 differ