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