feat(gemini2): add OrbbecSDK_ROS2/

This commit is contained in:
X-lanni
2025-07-04 15:30:11 +08:00
parent 5cf886315d
commit 1e82e0115a
185 changed files with 864328 additions and 0 deletions
@@ -0,0 +1,22 @@
/* License: Apache 2.0. See LICENSE file in root directory.
Copyright(c) 2020 Orbbec Corporation. All Rights Reserved. */
/**
* \file ObSensor.h
* \brief This file serves as the C entrance for the OrbbecSDK library.
* It includes all necessary header files for OrbbecSDK usage.
*/
#pragma once
#include <libobsensor/h/Context.h>
#include <libobsensor/h/Device.h>
#include <libobsensor/h/Error.h>
#include <libobsensor/h/Filter.h>
#include <libobsensor/h/Frame.h>
#include <libobsensor/h/ObTypes.h>
#include <libobsensor/h/Pipeline.h>
#include <libobsensor/h/Property.h>
#include <libobsensor/h/RecordPlayback.h>
#include <libobsensor/h/Sensor.h>
#include <libobsensor/h/StreamProfile.h>
#include <libobsensor/h/Version.h>
@@ -0,0 +1,21 @@
/* License: Apache 2.0. See LICENSE file in root directory.
Copyright(c) 2020 Orbbec Corporation. All Rights Reserved. */
/**
* \file ObSensor.hpp
* \brief This is the main entry point for the OrbbecSDK C++ library.
* It includes all necessary header files for using the library.
*/
#pragma once
#include <libobsensor/hpp/Context.hpp>
#include <libobsensor/hpp/Device.hpp>
#include <libobsensor/hpp/Error.hpp>
#include <libobsensor/hpp/Filter.hpp>
#include <libobsensor/hpp/Frame.hpp>
#include <libobsensor/hpp/Pipeline.hpp>
#include <libobsensor/hpp/RecordPlayback.hpp>
#include <libobsensor/hpp/Sensor.hpp>
#include <libobsensor/hpp/StreamProfile.hpp>
#include <libobsensor/hpp/Types.hpp>
#include <libobsensor/hpp/Version.hpp>
@@ -0,0 +1,181 @@
/**
* @file Context.h
* @brief Context is a management class that describes the runtime of the SDK and is responsible for resource allocation and release of the SDK.
* Context has the ability to manage multiple devices. It is responsible for enumerating devices, monitoring device callbacks, and enabling multi-device
* synchronization.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Create a context object
*
* @param[out] error Pointer to an error object that will be populated if an error occurs during context creation
* @return Pointer to the created context object
*/
ob_context *ob_create_context(ob_error **error);
/**
* @brief Create a context object with a specified configuration file
*
* @param[in] config_path Path to the configuration file. If NULL, the default configuration file will be used.
* @param[out] error Pointer to an error object that will be populated if an error occurs during context creation
* @return Pointer to the created context object
*/
ob_context *ob_create_context_with_config(const char *config_path, ob_error **error);
/**
* @brief Delete a context object
*
* @param[in] context Pointer to the context object to be deleted
* @param[out] error Pointer to an error object that will be populated if an error occurs during context deletion
*/
void ob_delete_context(ob_context *context, ob_error **error);
/**
* @brief Get a list of enumerated devices
*
* @param[in] context Pointer to the context object
* @param[out] error Pointer to an error object that will be populated if an error occurs during device enumeration
* @return Pointer to the device list object
*/
ob_device_list *ob_query_device_list(ob_context *context, ob_error **error);
/**
* @brief Enable or disable network device enumeration
* @brief After enabling, the network device will be automatically discovered and can be retrieved through @ref ob_query_device_list. The default state can be
* set in the configuration file.
*
* @attention Network device enumeration is performed through the GVCP protocol. If the device is not in the same subnet as the host, it will be discovered but
* cannot be connected.
*
* @param[in] context Pointer to the context object
* @param[in] enable true to enable, false to disable
* @param[out] error Pointer to an error object that will be populated if an error occurs.
*/
void ob_enable_net_device_enumeration(ob_context *context, bool enable, ob_error **error);
/**
* @brief Create a network device object
*
* @param[in] context Pointer to the context object
* @param[in] address IP address of the device
* @param[in] port Port number of the device
* @param[out] error Pointer to an error object that will be populated if an error occurs during device creation
* @return Pointer to the created device object
*/
ob_device *ob_create_net_device(ob_context *context, const char *address, uint16_t port, ob_error **error);
/**
* @brief Set a device plug-in callback function
* @attention The added and removed device lists returned through the callback interface need to be released manually
*
* @param[in] context Pointer to the context object
* @param[in] callback Pointer to the callback function triggered when a device is plugged or unplugged
* @param[in] user_data Pointer to user data that can be passed to and retrieved from the callback function
* @param[out] error Pointer to an error object that will be populated if an error occurs during callback function setting
*/
void ob_set_device_changed_callback(ob_context *context, ob_device_changed_callback callback, void *user_data, ob_error **error);
/**
* @brief Activates device clock synchronization to synchronize the clock of the host and all created devices (if supported).
*
* @param[in] context Pointer to the context object
* @param[in] repeatInterval The interval for auto-repeated synchronization, in milliseconds. If the value is 0, synchronization is performed only once.
* @param[out] error Pointer to an error object that will be populated if an error occurs during execution
*/
void ob_enable_device_clock_sync(ob_context *context, uint64_t repeatInterval, ob_error **error);
#define ob_enable_multi_device_sync ob_enable_device_clock_sync
/**
* @brief Free idle memory from the internal frame memory pool
*
* @param[in] context Pointer to the context object
* @param[out] error Pointer to an error object that will be populated if an error occurs during memory freeing
*/
void ob_free_idle_memory(ob_context *context, ob_error **error);
/**
* @brief Set the global log level
*
* @attention This interface setting will affect the output level of all logs (terminal, file, callback)
*
* @param[in] severity Log level to set
* @param[out] error Pointer to an error object that will be populated if an error occurs during log level setting
*/
void ob_set_logger_severity(ob_log_severity severity, ob_error **error);
/**
* @brief Set the log output to a file
*
* @param[in] severity Log level to output to file
* @param[in] directory Path to the log file output directory. If the path is empty, the existing settings will continue to be used (if the existing
* configuration is also empty, the log will not be output to the file)
* @param[out] error Pointer to an error object that will be populated if an error occurs during log output setting
*/
void ob_set_logger_to_file(ob_log_severity severity, const char *directory, ob_error **error);
/**
* @brief Set the log callback function
*
* @param[in] severity Log level to set for the callback function
* @param[in] callback Pointer to the callback function
* @param[in] user_data Pointer to user data that can be passed to and retrieved from the callback function
* @param[out] error Pointer to an error object that will be populated if an error occurs during log callback function setting
*/
void ob_set_logger_callback(ob_log_severity severity, ob_log_callback callback, void *user_data, ob_error **error);
/**
* @brief Set the log output to the console
*
* @param[in] severity Log level to output to the console
* @param[out] error Pointer to an error object that will be populated if an error occurs during log output setting
*/
void ob_set_logger_to_console(ob_log_severity severity, ob_error **error);
/**
* @brief Load a license file
*
* @param[in] filePath Path to the license file
* @param[in] key Decryption key. "OB_DEFAULT_DECRYPT_KEY" can be used to represent the default key.
* @param[out] error Pointer to an error object that will be populated if an error occurs during license loading
*/
void ob_load_license(const char *filePath, const char *key, ob_error **error);
/**
* @brief Load a license from data
*
* @param[in] data Pointer to the license data
* @param[in] dataLen Length of the license data
* @param[in] key Decryption key. "OB_DEFAULT_DECRYPT_KEY" can be used to represent the default key.
* @param[out] error Pointer to an error object that will be populated if an error occurs during license loading
*/
void ob_load_license_from_data(const char *data, uint32_t dataLen, const char *key, ob_error **error);
/**
* @brief Set the UVC backend for the specified context
* This function configures the Universal Video Class (UVC) backend for the given context, allowing the selection of a specific backend for
* video capture operations.
*
* @attention This function is only supported on Linux (ARM) platforms.
* Some devices, like the Dabai series, do not support V4L2. Therefore, the default backend is LIBUVC. Ensure that the device
* supports V4L2 before setting it as the backend.
*
* @param[in] context Pointer to the context object
* @param[in] uvc_backend Specifies the UVC backend to use:
* - `UVC_BACKEND_AUTO`: Automatically selects between
* V4L2 or libuvc based on metadata support.
* - `UVC_BACKEND_LIBUVC`: Forces the use of libuvc.
* - `UVC_BACKEND_V4L2`: Forces the use of V4L2.
* @param[out] error Pointer to an error object that will be populated if an error occurs.
*/
void ob_set_uvc_backend(ob_context *context, ob_uvc_backend uvc_backend, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,982 @@
/**
* @file Device.h
* @brief Device-related functions, including operations such as obtaining and creating a device, setting and obtaining device property, and obtaining sensors
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
#include "Property.h"
#include "MultipleDevices.h"
/**
* @brief Get the number of devices
*
* @param[in] list Device list object
* @param[out] error Log error messages
* @return uint32_t return the number of devices
*/
uint32_t ob_device_list_device_count(ob_device_list *list, ob_error **error);
/**
* @brief Get device name (DEPRECATED)
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return const char* return device name
*/
const char *ob_device_list_get_device_name(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get the pid of the specified device
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return int return the device pid
*/
int ob_device_list_get_device_pid(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get the vid of the specified device
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return int return device vid
*/
int ob_device_list_get_device_vid(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get the uid of the specified device
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return const char* return the device uid
*/
const char *ob_device_list_get_device_uid(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get the serial number of the specified device.
*
* @param[in] list Device list object.
* @param[in] index Device index.
* @param[out] error Log error messages.
* @return const char* The device UID.
*/
const char *ob_device_list_get_device_serial_number(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get device connection type
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return const char* returns the device connection typecurrently supports"USB", "USB1.0", "USB1.1", "USB2.0", "USB2.1", "USB3.0", "USB3.1", "USB3.2",
* "Ethernet"
*/
const char *ob_device_list_get_device_connection_type(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get device ip address
*
* @attention Only valid for network devices, otherwise it will return "0.0.0.0".
*
* @param list Device list object
* @param index Device index
* @param error Log error messages
* @return const char* returns the device ip addresssuch as "192.168.1.10"
*/
const char *ob_device_list_get_device_ip_address(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Get the device extension information.
*
* @param[in] list Device list object
* @param[in] index Device index
* @param[out] error Log error messages
* @return const char* The device extension information
*/
const char *ob_device_list_get_extension_info(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Create a device.
*
* @attention If the device has already been acquired and created elsewhere, repeated acquisitions will return an error.
*
* @param[in] list Device list object.
* @param[in] index The index of the device to create.
* @param[out] error Log error messages.
* @return ob_device* The created device.
*
*/
ob_device *ob_device_list_get_device(ob_device_list *list, uint32_t index, ob_error **error);
/**
* @brief Create a device.
*
* @attention If the device has already been acquired and created elsewhere, repeated acquisitions will return an error.
*
* @param[in] list Device list object.
* @param[in] serial_number The serial number of the device to create.
* @param[out] error Log error messages.
* @return ob_device* The created device.
*/
ob_device *ob_device_list_get_device_by_serial_number(ob_device_list *list, const char *serial_number, ob_error **error);
/**
* @brief Create device by uid
* @brief On Linux platform, the uid of the device is composed of bus-port-dev, for example 1-1.2-1. But the SDK will remove the dev number and only keep the
* bus-port as the uid to create the device, for example 1-1.2, so that we can create a device connected to the specified USB port. Similarly, users can also
* directly pass in bus-port as uid to create device.
*
* @attention If the device has already been acquired and created elsewhere, repeated acquisitions will return an error.
*
* @param[in] list Device list object.
* @param[in] uid The UID of the device to create.
* @param[out] error Log error messages.
* @return ob_device* The created device.
*/
ob_device *ob_device_list_get_device_by_uid(ob_device_list *list, const char *uid, ob_error **error);
/**
* @brief Delete a device.
*
* @param[in] device The device to be deleted.
* @param[out] error Log error messages.
*/
void ob_delete_device(ob_device *device, ob_error **error);
/**
* @brief Delete device information.
*
* @param[in] info The device information to be deleted.
* @param[out] error Log error messages.
*/
void ob_delete_device_info(ob_device_info *info, ob_error **error);
/**
* @brief Delete a device list.
*
* @param[in] list The device list object to be deleted.
* @param[out] error Log error messages.
*/
void ob_delete_device_list(ob_device_list *list, ob_error **error);
/**
* @brief Get device information.
*
* @param[in] device The device to obtain information from.
* @param[out] error Log error messages.
* @return ob_device_info* The device information.
*/
ob_device_info *ob_device_get_device_info(ob_device *device, ob_error **error);
/**
* @brief List all sensors.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
* @return ob_sensor_list* The list of all sensors.
*/
ob_sensor_list *ob_device_get_sensor_list(ob_device *device, ob_error **error);
/**
* @brief Get a device's sensor.
*
* @param[in] device The device object.
* @param[in] type The type of sensor to get.
* @param[out] error Log error messages.
* @return ob_sensor* The acquired sensor.
*/
ob_sensor *ob_device_get_sensor(ob_device *device, ob_sensor_type type, ob_error **error);
/**
* @brief Set an integer type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property to be set.
* @param[in] property The property value to be set.
* @param[out] error Log error messages.
*/
void ob_device_set_int_property(ob_device *device, ob_property_id property_id, int32_t property, ob_error **error);
/**
* @brief Get an integer type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The property ID.
* @param[out] error Log error messages.
* @return int32_t The property value.
*/
int32_t ob_device_get_int_property(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Set a float type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property to be set.
* @param[in] property The property value to be set.
* @param[out] error Log error messages.
*/
void ob_device_set_float_property(ob_device *device, ob_property_id property_id, float property, ob_error **error);
/**
* @brief Get a float type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The property ID.
* @param[out] error Log error messages.
* @return float The property value.
*/
float ob_device_get_float_property(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Set a boolean type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property to be set.
* @param[in] property The property value to be set.
* @param[out] error Log error messages.
*/
void ob_device_set_bool_property(ob_device *device, ob_property_id property_id, bool property, ob_error **error);
/**
* @brief Get a boolean type of device property.
*
* @param[in] device The device object.
* @param[in] property_id The property ID.
* @param[out] error Log error messages.
* @return bool The property value.
*/
bool ob_device_get_bool_property(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Set structured data.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property to be set.
* @param[in] data The property data to be set.
* @param[in] data_size The size of the property to be set.
* @param[out] error Log error messages.
*/
void ob_device_set_structured_data(ob_device *device, ob_property_id property_id, const void *data, uint32_t data_size, ob_error **error);
/**
* @brief Get structured data of a device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property.
* @param[out] data The obtained property data.
* @param[out] data_size The size of the obtained property data.
* @param[out] error Log error messages.
*/
void ob_device_get_structured_data(ob_device *device, ob_property_id property_id, void *data, uint32_t *data_size, ob_error **error);
/**
* @brief Set structured data of a device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property.
* @param[in] data_bundle The target data to set.
* @param[in] cb The data callback.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_set_structured_data_ext(ob_device *device, ob_property_id property_id, ob_data_bundle *data_bundle, ob_set_data_callback cb, void *user_data,
ob_error **error);
/**
* @brief Get structured data of a device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property.
* @param[out] error Log error messages.
* @return ob_data_bundle. NOTE: ob_data_bundle must be freed by ob_delete_data_bundle() because it comes from OrbbecSDK's API.
*/
ob_data_bundle *ob_device_get_structured_data_ext(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Set raw data of a device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property to be set.
* @param[in] data The property data to be set.
* @param[in] data_size The size of the property data to be set.
* @param[in] cb The set data callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_set_raw_data(ob_device *device, ob_property_id property_id, void *data, uint32_t data_size, ob_set_data_callback cb, bool async, void *user_data,
ob_error **error);
/**
* @brief Get raw data of a device property.
*
* @param[in] device The device object.
* @param[in] property_id The ID of the property.
* @param[in] cb The get data callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_get_raw_data(ob_device *device, ob_property_id property_id, ob_get_data_callback cb, bool async, void *user_data, ob_error **error);
/**
* @brief Get the protocol version of the device.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
* @return The protocol version of the device.
*/
ob_protocol_version ob_device_get_protocol_version(ob_device *device, ob_error **error);
/**
* @brief Get the cmdVersion of a property.
*
* @param[in] device The device object.
* @param[in] property_id The property id.
* @param[out] error Log error messages.
* @return The cmdVersion of the property.
*/
ob_cmd_version ob_device_get_cmd_version(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Get the number of properties supported by the device.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
* @return The number of properties supported by the device.
*/
uint32_t ob_device_get_supported_property_count(ob_device *device, ob_error **error);
/**
* @brief Get the type of property supported by the device.
*
* @param[in] device The device object.
* @param[in] index The property index.
* @param[out] error Log error messages.
* @return The type of property supported by the device.
*/
ob_property_item ob_device_get_supported_property(ob_device *device, uint32_t index, ob_error **error);
/**
* @brief Check if a device property permission is supported.
*
* @param[in] device The device object.
* @param[in] property_id The property id.
* @param[in] permission The type of permission that needs to be interpreted.
* @param[out] error Log error messages.
* @return Whether the property permission is supported.
*/
bool ob_device_is_property_supported(ob_device *device, ob_property_id property_id, ob_permission_type permission, ob_error **error);
/**
* @brief Get the integer type of device property range.
*
* @param[in] device The device object.
* @param[in] property_id The property id.
* @param[out] error Log error messages.
* @return The property range.
*/
ob_int_property_range ob_device_get_int_property_range(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Get the float type of device property range.
*
* @param[in] device The device object.
* @param[in] property_id The property id.
* @param[out] error Log error messages.
* @return The property range.
*/
ob_float_property_range ob_device_get_float_property_range(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Get the boolean type of device property range.
*
* @param[in] device The device object.
* @param[in] property_id The property id.
* @param[out] error Log error messages.
* @return The property range.
*/
ob_bool_property_range ob_device_get_bool_property_range(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* @brief Write to an AHB register.
*
* @param[in] device The device object.
* @param reg The register to be written.
* @param mask The mask.
* @param value The value to be written.
* @param[out] error Log error messages.
*/
void ob_device_write_ahb(ob_device *device, uint32_t reg, uint32_t mask, uint32_t value, ob_error **error);
/**
* @brief Read an AHB register.
*
* @param[in] device The device object.
* @param reg The register to be read.
* @param mask The mask.
* @param value The value to be read.
* @param[out] error Log error messages.
*/
void ob_device_read_ahb(ob_device *device, uint32_t reg, uint32_t mask, uint32_t *value, ob_error **error);
/**
* @brief Write to an I2C register.
*
* @param[in] device The device object.
* @param module_id The I2C module id to be written.
* @param reg The register to be written.
* @param mask The mask.
* @param value The value to be written.
* @param[out] error Log error messages.
*/
void ob_device_write_i2c(ob_device *device, uint32_t module_id, uint32_t reg, uint32_t mask, uint32_t value, ob_error **error);
/**
* @brief Read an I2C register.
*
* @param[in] device The device object.
* @param module_id The id of the I2C module to be read.
* @param reg The register to be read.
* @param mask The mask.
* @param value The value to be read.
* @param[out] error Log error messages.
*/
void ob_device_read_i2c(ob_device *device, uint32_t module_id, uint32_t reg, uint32_t mask, uint32_t *value, ob_error **error);
/**
* @brief Set the properties of writing to Flash [Asynchronous Callback].
*
* @param[in] device The device object.
* @param offset The flash offset address.
* @param data The property data to be written.
* @param data_size The size of the property to be written.
* @param cb The set data callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_write_flash(ob_device *device, uint32_t offset, const void *data, uint32_t data_size, ob_set_data_callback cb, bool async, void *user_data,
ob_error **error);
/**
* @brief Read Flash properties [asynchronous callback].
*
* @param[in] device The device object.
* @param offset The flash offset address.
* @param data_size The size of the data to be read.
* @param cb The read flash data and progress callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_read_flash(ob_device *device, uint32_t offset, uint32_t data_size, ob_get_data_callback cb, bool async, void *user_data, ob_error **error);
/**
* @brief Set customer data.
*
* @param[in] device The device object.
* @param[in] data The property data to be set.
* @param[in] data_size The size of the property to be set,the maximum length cannot exceed 65532 bytes.
* @param[out] error Log error messages.
*/
void ob_device_write_customer_data(ob_device *device, const void *data, uint32_t data_size, ob_error **error);
/**
* @brief Get customer data of a device property.
*
* @param[in] device The device object.
* @param[out] data The obtained property data.
* @param[out] data_size The size of the obtained property data.
* @param[out] error Log error messages.
*/
void ob_device_read_customer_data(ob_device *device, void *data, uint32_t *data_size, ob_error **error);
/**
* @brief Upgrade the device firmware.
*
* @param[in] device The device object.
* @param[in] path The firmware path.
* @param[in] callback The firmware upgrade progress callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_upgrade(ob_device *device, const char *path, ob_device_upgrade_callback callback, bool async, void *user_data, ob_error **error);
/**
* @brief Upgrade the device firmware.
*
* @param[in] device The device object.
* @param[in] file_data The firmware file data.
* @param[in] file_size The firmware file size.
* @param[in] callback The firmware upgrade progress callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_upgrade_from_data(ob_device *device, const char *file_data, uint32_t file_size, ob_device_upgrade_callback callback, bool async, void *user_data,
ob_error **error);
/**
* @brief Get the current device status.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
*
* @return ob_device_state The device state information.
*/
ob_device_state ob_device_get_device_state(ob_device *device, ob_error **error);
/**
* @brief Monitor device state changes.
*
* @param[in] device The device object.
* @param[in] callback The callback function to be called when the device status changes.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_state_changed(ob_device *device, ob_device_state_callback callback, void *user_data, ob_error **error);
/**
* @brief Send files to the specified path on the device.
*
* @param[in] device The device object.
* @param[in] file_path The source file path.
* @param[in] dst_path The destination path on the device.
* @param[in] callback The file sending progress callback.
* @param[in] async Whether to execute asynchronously.
* @param[in] user_data User-defined data that will be returned in the callback.
* @param[out] error Log error messages.
*/
void ob_device_send_file_to_destination(ob_device *device, const char *file_path, const char *dst_path, ob_file_send_callback callback, bool async,
void *user_data, ob_error **error);
/**
* @brief Verify the device authorization code.
*
* @param[in] device The device object.
* @param[in] auth_code The authorization code.
* @param[out] error Log error messages.
*
* @return bool Whether the activation is successful.
*/
bool ob_device_activate_authorization(ob_device *device, const char *auth_code, ob_error **error);
/**
* @brief Write the device authorization code.
*
* @param[in] device The device object.
* @param[in] auth_code The authorization code.
* @param[out] error Log error messages.
*/
void ob_device_write_authorization_code(ob_device *device, const char *auth_code, ob_error **error);
/**
* @brief Get the original parameter list of camera calibration saved on the device.
*
* @attention The parameters in the list do not correspond to the current open-stream configuration.You need to select the parameters according to the actual
* situation, and may need to do scaling, mirroring and other processing. Non-professional users are recommended to use the ob_pipeline_get_camera_param()
* interface.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
*
* @return ob_camera_param_list The camera parameter list.
*/
ob_camera_param_list *ob_device_get_calibration_camera_param_list(ob_device *device, ob_error **error);
/**
* @brief Get the current depth work mode.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
*
* @return ob_depth_work_mode The current depth work mode.
*/
ob_depth_work_mode ob_device_get_current_depth_work_mode(ob_device *device, ob_error **error);
/**
* @brief Switch the depth work mode by ob_depth_work_mode.
* Prefer to use ob_device_switch_depth_work_mode_by_name to switch depth mode when the complete name of the depth work mode is known.
*
* @param[in] device The device object.
* @param[in] work_mode The depth work mode from ob_depth_work_mode_list which is returned by ob_device_get_depth_work_mode_list.
* @param[out] error Log error messages.
*
* @return ob_status The switch result. OB_STATUS_OK: success, other failed.
*/
ob_status ob_device_switch_depth_work_mode(ob_device *device, const ob_depth_work_mode *work_mode, ob_error **error);
/**
* @brief Switch the depth work mode by work mode name.
*
* @param[in] device The device object.
* @param[in] mode_name The depth work mode name which is equal to ob_depth_work_mode.name.
* @param[out] error Log error messages.
*
* @return ob_status The switch result. OB_STATUS_OK: success, other failed.
*/
ob_status ob_device_switch_depth_work_mode_by_name(ob_device *device, const char *mode_name, ob_error **error);
/**
* @brief Request the list of supported depth work modes.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
*
* @return ob_depth_work_mode_list The list of ob_depth_work_mode.
*/
ob_depth_work_mode_list *ob_device_get_depth_work_mode_list(ob_device *device, ob_error **error);
/**
* @brief Device reboot
* @attention The device will be disconnected and reconnected. After the device is disconnected, the interface access to the device handle may be abnormal.
* Please use the ob_delete_device interface to delete the handle directly. After the device is reconnected, it can be obtained again.
*
* @param[in] device Device object
* @param[out] error Log error messages
*/
void ob_device_reboot(ob_device *device, ob_error **error);
/**
* @brief Get the current device synchronization configuration
* @brief Device synchronization: including exposure synchronization function and multi-camera synchronization function of different sensors within a single
* machine
*
* @param[in] device Device object
* @param[out] error Log error messages
* @return ob_device_sync_config Return the device synchronization configuration
*/
ob_device_sync_config ob_device_get_sync_config(ob_device *device, ob_error **error);
/**
* @brief Set the device synchronization configuration
* @brief Used to configure the exposure synchronization function and multi-camera synchronization function of different sensors in a single machine
*
* @attention Calling this function will directly write the configuration to the device Flash, and it will still take effect after the device restarts. To avoid
* affecting the Flash lifespan, do not update the configuration frequently.
*
* @param[in] device Device object
* @param[out] device_sync_config Device synchronization configuration
* @param[out] error Log error messages
*/
void ob_device_set_sync_config(ob_device *device, ob_device_sync_config device_sync_config, ob_error **error);
/**
* @brief Get device name
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* return the device name
*/
const char *ob_device_info_name(ob_device_info *info, ob_error **error);
/**
* @brief Get device pid
* @param[in] info Device Information
* @param[out] error Log error messages
* @return int return the device pid
*/
int ob_device_info_pid(ob_device_info *info, ob_error **error);
/**
* @brief Get device vid
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return int return device vid
*/
int ob_device_info_vid(ob_device_info *info, ob_error **error);
/**
* @brief Get device uid
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* return device uid
*/
const char *ob_device_info_uid(ob_device_info *info, ob_error **error);
/**
* @brief Get device serial number
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* return device serial number
*/
const char *ob_device_info_serial_number(ob_device_info *info, ob_error **error);
/**
* @brief Get the firmware version number
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return int return the firmware version number
*/
const char *ob_device_info_firmware_version(ob_device_info *info, ob_error **error);
/**
* @brief Get the USB connection type (DEPRECATED)
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The USB connection type
*/
const char *ob_device_info_usb_type(ob_device_info *info, ob_error **error);
/**
* @brief Get the device connection type
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The connection typecurrently supports"USB", "USB1.0", "USB1.1", "USB2.0", "USB2.1", "USB3.0", "USB3.1", "USB3.2", "Ethernet"
*/
const char *ob_device_info_connection_type(ob_device_info *info, ob_error **error);
/**
* @brief Get the device IP address
*
* @attention Only valid for network devices, otherwise it will return "0.0.0.0"
*
* @param info Device Information
* @param error Log error messages
* @return const char* The IP addresssuch as "192.168.1.10"
*/
const char *ob_device_info_ip_address(ob_device_info *info, ob_error **error);
/**
* @brief Get the hardware version number
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The hardware version number
*/
const char *ob_device_info_hardware_version(ob_device_info *info, ob_error **error);
/**
* @brief Get the device extension information.
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The device extension information
*/
const char *ob_device_info_get_extension_info(ob_device_info *info, ob_error **error);
/**
* @brief Get the minimum SDK version number supported by the device
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The minimum SDK version number supported by the device
*/
const char *ob_device_info_supported_min_sdk_version(ob_device_info *info, ob_error **error);
/**
* @brief Get the chip name
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return const char* The ASIC name
*/
const char *ob_device_info_asicName(ob_device_info *info, ob_error **error);
/**
* @brief Get the device type
*
* @param[in] info Device Information
* @param[out] error Log error messages
* @return ob_device_type The device type
*/
ob_device_type ob_device_info_device_type(ob_device_info *info, ob_error **error);
/**
* @brief Get the number of camera parameter lists
*
* @param param_list Camera parameter list
* @param error Log error messages
* @return uint32_t The number of lists
*/
uint32_t ob_camera_param_list_count(ob_camera_param_list *param_list, ob_error **error);
/**
* @brief Get camera parameters from the camera parameter list
*
* @param param_list Camera parameter list
* @param index Parameter index
* @param error Log error messages
* @return ob_camera_param The camera parameters. Since it returns the structure object directly, there is no need to provide a delete interface.
*/
ob_camera_param ob_camera_param_list_get_param(ob_camera_param_list *param_list, uint32_t index, ob_error **error);
/**
* @brief Delete the camera parameter list
*
* @param param_list Camera parameter list
* @param error Log error messages
*/
void ob_delete_camera_param_list(ob_camera_param_list *param_list, ob_error **error);
/**
* \if English
* @brief Get the depth work mode count that ob_depth_work_mode_list hold
* @param[in] work_mode_list data struct contain list of ob_depth_work_mode
* @param[out] error Log error messages
* @return The total number contained in ob_depth_work_mode_list
*
*/
uint32_t ob_depth_work_mode_list_count(ob_depth_work_mode_list *work_mode_list, ob_error **error);
/**
* @brief Get the index target of ob_depth_work_mode from work_mode_list
*
* @param[in] work_mode_list Data structure containing a list of ob_depth_work_mode
* @param[in] index Index of the target ob_depth_work_mode
* @param[out] error Log error messages
* @return ob_depth_work_mode
*
*/
ob_depth_work_mode ob_depth_work_mode_list_get_item(ob_depth_work_mode_list *work_mode_list, uint32_t index, ob_error **error);
/**
* @brief Free the resources of ob_depth_work_mode_list
*
* @param[in] work_mode_list Data structure containing a list of ob_depth_work_mode
* @param[out] error Log error messages
*
*/
void ob_delete_depth_work_mode_list(ob_depth_work_mode_list *work_mode_list, ob_error **error);
/**
* @brief Free the resources of data_bundle which come from OrbbecSDK's API
*
* @param data_bundle Data bundle
* @param[out] error Log error messages
*/
void ob_delete_data_bundle(ob_data_bundle *data_bundle, ob_error **error);
/**
* @brief Check if the device supports global timestamp.
*
* @param[in] device The device object.
* @param[out] error Log error messages.
* @return bool Whether the device supports global timestamp.
*/
bool ob_device_is_global_timestamp_supported(ob_device *device, ob_error **error);
/**
* @brief Load depth filter config from file.
* @param[in] device The device object.
* @param[in] file_path Path of the config file.
* @param[out] error Log error messages.
*/
void ob_device_load_depth_filter_config(ob_device *device, const char *file_path, ob_error **error);
/**
* @brief Reset depth filter config to device default define.
* @param[in] device The device object.
* @param[out] error Log error messages.
*/
void ob_device_reset_default_depth_filter_config(ob_device *device, ob_error **error);
/**
* @breif Get the current preset name.
* @brief The preset mean a set of parameters or configurations that can be applied to the device to achieve a specific effect or function.
*
* @param device The device object.
* @param error Log error messages.
* @return The current preset name, it should be one of the preset names returned by @ref ob_device_get_available_preset_list.
*/
const char *ob_device_get_current_preset_name(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
* settings to update the user program temporarily.
*
* @param device The device object.
* @param preset_name Log error messages. The name should be one of the preset names returned by @ref ob_device_get_available_preset_list.
* @param error Log error messages.
*/
void ob_device_load_preset(ob_device *device, const char *preset_name, 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.
* @brief After loading the custom preset, the available preset list will be appended with the custom preset and named as the file name.
*
* @param device The device object.
* @param json_file_path The json file path.
* @param error Log error messages.
*/
void ob_device_load_preset_from_json_file(ob_device *device, const char *json_file_path, ob_error **error);
/**
* @brief Export current settings as a preset json file.
* @brief After exporting the custom preset, the available preset list will be appended with the custom preset and named as the file name.
*
* @param device The device object.
* @param json_file_path The json file path.
* @param error Log error messages.
*/
void ob_device_export_current_settings_as_preset_json_file(ob_device *device, const char *json_file_path, ob_error **error);
/**
* @brief Get the available preset list.
*
* @param device The device object.
* @param error Log error messages.
* @return The available preset list.
*/
ob_device_preset_list *ob_device_get_available_preset_list(ob_device *device, ob_error **error);
/**
* @brief Delete the available preset list.
*
* @param preset_list The available preset list.
* @param error Log error messages.
*/
void ob_delete_preset_list(ob_device_preset_list *preset_list, ob_error **error);
/**
* @brief Get the number of preset in the preset list.
*
* @param preset_list The available preset list.
* @param error Log error messages.
* @return The number of preset in the preset list.
*/
uint32_t ob_device_preset_list_count(ob_device_preset_list *preset_list, ob_error **error);
/**
* @brief Get the name of the preset in the preset list.
*
* @param preset_list The available preset list.
* @param index The index of the preset in the preset list.
* @param error Log error messages.
* @return The name of the preset in the preset list.
*/
const char *ob_device_preset_list_get_name(ob_device_preset_list *preset_list, uint32_t index, ob_error **error);
/**
* @brief Check if the preset list has the preset.
*
* @param preset_list The available preset list.
* @param preset_name The name of the preset.
* @param error Log error messages.
* @return Whether the preset list has the preset. If true, the preset list has the preset. If false, the preset list does not have the preset.
*/
bool ob_device_preset_list_has_preset(ob_device_preset_list *preset_list, const char *preset_name, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,62 @@
/**
* @file Error.h
* @brief Functions for handling errors, mainly used for obtaining error messages.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Get the error status.
*
* @param[in] error The error object.
* @return The error status.
*/
ob_status ob_error_status(ob_error *error);
/**
* @brief Get the error message.
*
* @param[in] error The error object.
* @return The error message.
*/
const char *ob_error_message(const ob_error *error);
/**
* @brief Get the name of the API function that caused the error.
*
* @param[in] error The error object.
* @return The name of the API function.
*/
const char *ob_error_function(ob_error *error);
/**
* @brief Get the error parameters.
*
* @param[in] error The error object.
* @return The error parameters.
*/
const char *ob_error_args(ob_error *error);
/**
* @brief Get the type of exception that caused the error.
*
* @param[in] error The error object.
* @return The type of exception.
*/
ob_exception_type ob_error_exception_type(ob_error *error);
/**
* @brief Delete the error object.
*
* @param[in] error The error object to delete.
*/
void ob_delete_error(ob_error *error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,652 @@
/**
* @file Filter.h
* @brief The processing unit of the SDK can perform point cloud generation, format conversion and other functions.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Create a PointCloud Filter.
*
* @param[out] error Log error messages.
*
* @return A pointcloud_filter object.
*/
ob_filter *ob_create_pointcloud_filter(ob_error **error);
/**
* @brief Set the camera parameters for the PointCloud Filter.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] param Camera parameters.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_camera_param(ob_filter *filter, ob_camera_param param, ob_error **error);
/**
* @brief Set the point cloud type parameters for the PointCloud Filter.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] type Point cloud type: depth point cloud or RGBD point cloud.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_point_format(ob_filter *filter, ob_format type, ob_error **error);
/**
* @brief Set the alignment state of the frames that will be input to produce the point cloud.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] state Alignment status, True: aligned; False: unaligned.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_frame_align_state(ob_filter *filter, bool state, ob_error **error);
/**
* @brief Set the point cloud data scaling factor.
*
* @attention Calling this function to set the scale will change the point coordinate scaling factor of the output point cloud frame: posScale = posScale /
* scale. The point coordinate scaling factor for the output point cloud frame can be obtained via the @ref ob_points_frame_get_position_value_scale function.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] scale Set the point cloud coordinate data zoom factor.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_position_data_scale(ob_filter *filter, float scale, ob_error **error);
/**
* @brief Set the point cloud color data normalization.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] state Sets whether the point cloud color data is normalized.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_color_data_normalization(ob_filter *filter, bool state, ob_error **error);
/**
* @brief Set the point cloud coordinate system.
*
* @param[in] filter A pointcloud_filter object.
* @param[in] type Coordinate system type.
* @param[out] error Log error messages.
*/
void ob_pointcloud_filter_set_coordinate_system(ob_filter *filter, ob_coordinate_system_type type, ob_error **error);
/**
* @brief Create a format convert Filter.
*
* @param[out] error Log error messages.
*
* @return A format_convert object.
*/
ob_filter *ob_create_format_convert_filter(ob_error **error);
/**
* @brief Set the type of format conversion for the format convert Filter.
*
* @param[in] filter A format convert filter object.
* @param[in] type Format conversion type.
* @param[out] error Log error messages.
*/
void ob_format_convert_filter_set_format(ob_filter *filter, ob_convert_format type, ob_error **error);
/**
* @brief Create a compression Filter.
*
* @param[out] error Log error messages.
*
* @return A depth_filter object.
*/
ob_filter *ob_create_compression_filter(ob_error **error);
/**
* @brief Set the compression parameters for the compression Filter.
*
* @param[in] filter A compression_filter object.
* @param[in] mode Compression mode OB_COMPRESSION_LOSSLESS or OB_COMPRESSION_LOSSY.
* @param[in] params Compression params, struct ob_compression_params, when mode is OB_COMPRESSION_LOSSLESS, params is NULL.
* @param[out] error Log error messages.
*/
void ob_compression_filter_set_compression_params(ob_filter *filter, ob_compression_mode mode, void *params, ob_error **error);
/**
* @brief Create a decompression Filter.
*
* @param[out] error Log error messages.
*
* @return A decompression Filter object.
*/
ob_filter *ob_create_decompression_filter(ob_error **error);
/**
* @brief Create a HoleFilling Filter.
*
* @param[out] error Log error messages.
*
* @return A depth_filter object.
*/
ob_filter *ob_create_holefilling_filter(ob_error **error);
/**
* @brief Set the HoleFillingFilter mode.
*
* @param[in] filter A holefilling_filter object.
* @param[in] mode holefilling mode OB_HOLE_FILL_TOP,OB_HOLE_FILL_NEAREST or OB_HOLE_FILL_FAREST.
* @param[out] error Log error messages.
*/
void ob_holefilling_filter_set_mode(ob_filter *filter, ob_hole_filling_mode mode, ob_error **error);
/**
* @brief Get the HoleFillingFilter mode.
*
* @param[in] filter A holefilling_filter object.
* @param[out] error Log error messages.
* @return ob_hole_filling_mode
*/
ob_hole_filling_mode ob_holefilling_filter_get_mode(ob_filter *filter, ob_error **error);
/**
* @brief Create a Temporal Filter.
*
* @param[out] error Log error messages.
*
* @return A depth_filter object.
*/
ob_filter *ob_create_temporal_filter(ob_error **error);
/**
* @brief Get the TemporalFilter diffscale range.
*
* @param[in] filter A temporal_filter object.
* @param[out] error Log error messages.
* @return ob_float_property_range the value of property range.
*/
ob_float_property_range ob_temporal_filter_get_diffscale_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the TemporalFilter diffscale value.
*
* @param[in] filter A temporal_filter object.
* @param[in] value diffscale value.
* @param[out] error Log error messages.
*/
void ob_temporal_filter_set_diffscale_value(ob_filter *filter, float value, ob_error **error);
/**
* @brief Get the TemporalFilter weight range.
*
* @param[in] filter A temporal filter object.
* @param[out] error Log error messages.
*/
ob_float_property_range ob_temporal_filter_get_weight_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the TemporalFilter weight range.
*
* @param[in] filter A temporal_filter object.
* @param[in] value weight value.
* @param[out] error Log error messages.
*/
void ob_temporal_filter_set_weight_value(ob_filter *filter, float value, ob_error **error);
/**
* @brief Create a spatial advanced filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_spatial_advanced_filter(ob_error **error);
/**
* @brief Get the spatial advanced filter alpha range.
*
* @param[in] filter A spatial advanced filter object.
* @param[out] error Log error messages.
* @return ob_float_property_range the alpha value of property range.
*/
ob_float_property_range ob_spatial_advanced_filter_get_alpha_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial advanced filter disp diff range.
*
* @param[in] filter A spatial advanced filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the dispdiff value of property range.
*/
ob_uint16_property_range ob_spatial_advanced_filter_get_disp_diff_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial advanced filter radius range.
*
* @param[in] filter A spatial advanced filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the radius value of property range.
*/
ob_uint16_property_range ob_spatial_advanced_filter_get_radius_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial advanced filter magnitude range.
*
* @param[in] filter A spatial advanced filter object.
* @param[out] error Log error messages.
* @return ob_int_property_range the magnitude value of property range.
*/
ob_int_property_range ob_spatial_advanced_filter_get_magnitude_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial advanced filter params.
*
* @param[in] filter A spatial advanced filter object.
* @param[out] error Log error messages.
* @return ob_spatial_advanced_filter_params.
*/
ob_spatial_advanced_filter_params ob_spatial_advanced_filter_get_filter_params(ob_filter *filter, ob_error **error);
/**
* @brief Set the spatial advanced filter params.
*
* @param[in] filter A spatial advanced filter object.
* @param[in] params ob_spatial_advanced_filter_params.
* @param[out] error Log error messages.
*/
void ob_spatial_advanced_filter_set_filter_params(ob_filter *filter, ob_spatial_advanced_filter_params params, ob_error **error);
/**
* @brief Create a spatial fast filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_spatial_fast_filter(ob_error **error);
/**
* @brief Get the spatial fast filter window size range.
*
* @param[in] filter A spatial fast filter object.
* @param[out] error Log error messages.
* @return ob_uint8_property_range the filter window size value of property range.
*/
ob_uint8_property_range ob_spatial_fast_filter_get_size_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the spatial fast filter params.
*
* @param[in] filter A spatial fast filter object.
* @param[in] params ob_spatial_fast_filter_params.
* @param[out] error Log error messages.
*/
void ob_spatial_fast_filter_set_filter_params(ob_filter *filter, ob_spatial_fast_filter_params params, ob_error **error);
/**
* @brief Get the spatial fast filter params.
*
* @param[in] filter A spatial fast filter object.
* @param[out] error Log error messages.
* @return ob_spatial_fast_filter_params.
*/
ob_spatial_fast_filter_params ob_spatial_fast_filter_get_filter_params(ob_filter *filter, ob_error **error);
/**
* @brief Create a spatial moderate filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_spatial_moderate_filter(ob_error **error);
/**
* @brief Get the spatial moderate filter disp diff range.
*
* @param[in] filter A spatial moderate filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the dispdiff value of property range.
*/
ob_uint16_property_range ob_spatial_moderate_filter_get_disp_diff_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial moderate filter magnitude range.
*
* @param[in] filter A spatial moderate filter object.
* @param[out] error Log error messages.
* @return ob_uint8_property_range the magnitude value of property range.
*/
ob_uint8_property_range ob_spatial_moderate_filter_get_magnitude_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial moderate filter window size range.
*
* @param[in] filter A spatial moderate filter object.
* @param[out] error Log error messages.
* @return ob_uint8_property_range the filter window size value of property range.
*/
ob_uint8_property_range ob_spatial_moderate_filter_get_size_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the spatial moderate filter params.
*
* @param[in] filter A spatial moderate filter object.
* @param[out] error Log error messages.
* @return ob_spatial_moderate_filter_params.
*/
ob_spatial_moderate_filter_params ob_spatial_moderate_filter_get_filter_params(ob_filter *filter, ob_error **error);
/**
* @brief Set the spatial moderate filter params.
*
* @param[in] filter A spatial moderate filter object.
* @param[in] params ob_spatial_moderate_filter_params.
* @param[out] error Log error messages.
*/
void ob_spatial_moderate_filter_set_filter_params(ob_filter *filter, ob_spatial_moderate_filter_params params, ob_error **error);
/**
* @brief Create a noise removal filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_noise_removal_filter(ob_error **error);
/**
* @brief Get the noise removal filter disp diff range.
*
* @param[in] filter A noise removal filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the disp_diff value of property range.
*/
ob_uint16_property_range ob_noise_removal_filter_get_disp_diff_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the noise removal filter max size range.
*
* @param[in] filter noise removal filter object.
* @param[out] error Log error messages.
* @return ob_int_property_range the _max_size value of property range.
*/
ob_int_property_range ob_noise_removal_filter_get_max_size_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the noise removal filter params.
*
* @param[in] filter noise removal filter object.
* @param[in] params ob_noise_removal_filter_params.
* @param[out] error Log error messages.
*/
void ob_noise_removal_filter_set_filter_params(ob_filter *filter, ob_noise_removal_filter_params params, ob_error **error);
/**
* @brief Get the noise removal filter params.
*
* @param[in] filter noise removal filter object.
* @param[out] error Log error messages.
* @return ob_noise_removal_filter_params.
*/
ob_noise_removal_filter_params ob_noise_removal_filter_get_filter_params(ob_filter *filter, ob_error **error);
/**
* @brief Create a edge noise removal filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_edge_noise_removal_filter(ob_error **error);
/**
* @brief Set the edge noise removal filter params.
*
* @param[in] filter edge noise removal filter object.
* @param[in] params ob_edge_noise_removal_filter_params.
* @param[out] error Log error messages.
*/
void ob_edge_noise_removal_filter_set_filter_params(ob_filter *filter, ob_edge_noise_removal_filter_params params, ob_error **error);
/**
* @brief Get the edge noise removal filter params.
*
* @param[in] filter edge noise removal filter object.
* @param[out] error Log error messages.
* @return ob_edge_noise_removal_filter_params.
*/
ob_edge_noise_removal_filter_params ob_edge_noise_removal_filter_get_filter_params(ob_filter *filter, ob_error **error);
/**
* @brief Get the noise removal filter margin left th range.
*
* @param[in] filter A edge noise removal filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the margin_left_th value of property range.
*/
ob_uint16_property_range ob_edge_noise_removal_filter_get_margin_left_th_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the noise removal filter margin right th range.
*
* @param[in] filter A edge noise removal filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the margin_right_th value of property range.
*/
ob_uint16_property_range ob_edge_noise_removal_filter_get_margin_right_th_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the noise removal filter margin top th range.
*
* @param[in] filter A edge noise removal filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the margin_top_th value of property range.
*/
ob_uint16_property_range ob_edge_noise_removal_filter_get_margin_top_th_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the noise removal filter margin bottom th range.
*
* @param[in] filter A edge noise removal filter object.
* @param[out] error Log error messages.
* @return ob_uint16_property_range the margin_bottom_th value of property range.
*/
ob_uint16_property_range ob_edge_noise_removal_filter_get_margin_bottom_th_range(ob_filter *filter, ob_error **error);
/**
* @brief Create a decimation filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_decimation_filter(ob_error **error);
/**
* @brief Get the decimation filter scale range.
*
* @param[in] filter A decimation filter object.
* @param[out] error Log error messages.
*/
ob_uint8_property_range ob_decimation_filter_get_scale_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the decimation filter scale value.
*
* @param[in] filter A decimation object.
* @param[in] value decimation filter scale value.
* @param[out] error Log error messages.
*/
void ob_decimation_filter_set_scale_value(ob_filter *filter, uint8_t value, ob_error **error);
/**
* @brief Get the decimation filter scale value.
*
* @param[in] filter A decimation object.
* @param[out] error Log error messages.
* @return decimation filter scale value.
*/
uint8_t ob_decimation_filter_get_scale_value(ob_filter *filter, ob_error **error);
/**
* @brief Create a threshold filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_threshold_filter(ob_error **error);
/**
* @brief Get the threshold filter min range.
*
* @param[in] filter A threshold filter object.
* @param[out] error Log error messages.
*/
ob_int_property_range ob_threshold_filter_get_min_range(ob_filter *filter, ob_error **error);
/**
* @brief Get the threshold filter max range.
*
* @param[in] filter A threshold filter object.
* @param[out] error Log error messages.
*/
ob_int_property_range ob_threshold_filter_get_max_range(ob_filter *filter, ob_error **error);
/**
* @brief Set the threshold filter scale range.
*
* @param[in] filter A threshold object.
* @param[in] min threshold filter scale min value.
* @param[in] max threshold filter scale max value.
* @param[out] error Log error messages.
*/
bool ob_threshold_filter_set_scale_value(ob_filter *filter, uint16_t min, uint16_t max, ob_error **error);
/**
* @brief Create a SequenceId filter.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_sequenceId_filter(ob_error **error);
/**
* @brief Set the sequence id filter select sequence id.
*
* @param[in] filter A sequence id object.
* @param[in] sequence_id sequence id to pass the filter.
* @param[out] error Log error messages.
*/
void ob_sequence_id_filter_select_sequence_id(ob_filter *filter, int sequence_id, ob_error **error);
/**
* @brief Get the current sequence id.
*
* @param[in] filter A sequence id object.
* @param[out] error Log error messages.
* @return sequence id to pass the filter.
*/
int ob_sequence_id_filter_get_sequence_id(ob_filter *filter, ob_error **error);
/**
* @brief Get the current sequence id list.
*
* @param[in] filter A sequence id object.
* @param[out] error Log error messages.
*/
ob_sequence_id_item *ob_sequence_id_filter_get_sequence_id_list(ob_filter *filter, ob_error **error);
/**
* @brief Get the current sequence id list size.
*
* @param[in] filter A sequence id object.
* @param[out] error Log error messages.
*/
int ob_sequence_id_filter_get_sequence_id_list_size(ob_filter *filter, ob_error **error);
/**
* @brief Create a hdr merge.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_hdr_merge(ob_error **error);
/**
* @brief Create a align.
* @param[in] align_to_stream ob_stream_type.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_align(ob_error **error, ob_stream_type align_to_stream);
/**
* @brief Get the algin stream type.
*
* @param[in] filter A align object.
* @param[out] error Log error messages.
* @return A ob_stream_type.
*/
ob_stream_type ob_align_get_to_stream_type(ob_filter *filter, ob_error **error);
/**
* @brief Create a disparity transform.
* @param[in] depth_to_disparity disparity to depth, depth to disparity Conversion.
* @param[out] error Log error messages.
* @return A depth_filter object.
*/
ob_filter *ob_create_disparity_transform(ob_error **error, bool depth_to_disparity);
/**
* @brief Reset the filter, clears the cache, and resets the state. If the asynchronous interface is used, the processing thread will also be stopped and the
* pending cache frames will be cleared.
*
* @param[in] filter A filter object.
* @param[out] error Log error messages.
*/
void ob_filter_reset(ob_filter *filter, ob_error **error);
/**
* @brief Process the frame (synchronous interface).
*
* @param[in] filter A filter object.
* @param[in] frame Pointer to the frame object to be processed.
* @param[out] error Log error messages.
*
* @return The frame object processed by the filter.
*/
ob_frame *ob_filter_process(ob_filter *filter, ob_frame *frame, ob_error **error);
/**
* @brief Enable the frame post processing
*
* @param[in] filter A filter object.
* @param[in] enable enable status
* @param[out] error Log error messages.
*/
void ob_filter_enable(ob_filter *filter, bool enable, ob_error **error);
/**
* @brief Get the enable status of the frame post processing
*
* @param[in] filter A filter object.
* @param[out] error Log error messages.
*
* @return The post processing filter status.
*/
bool ob_filter_is_enable(ob_filter *filter, ob_error **error);
/**
* @brief Set the processing result callback function for the filter (asynchronous callback interface).
*
* @param[in] filter A filter object.
* @param[in] callback Callback function.
* @param[in] user_data Arbitrary user data pointer can be passed in and returned from the callback.
* @param[out] error Log error messages.
*/
void ob_filter_set_callback(ob_filter *filter, ob_filter_callback callback, void *user_data, ob_error **error);
/**
* @brief Push the frame into the pending cache for the filter (asynchronous callback interface).
*
* @param[in] filter A filter object.
* @param[in] frame Pointer to the frame object to be processed.
* @param[out] error Log error messages.
*/
void ob_filter_push_frame(ob_filter *filter, ob_frame *frame, ob_error **error);
/**
* @brief Delete the filter.
*
* @param[in] filter A filter object.
* @param[out] error Log error messages.
*/
void ob_delete_filter(ob_filter *filter, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,436 @@
/**
* @file Frame.h
* @brief Frame related function is mainly used to obtain frame data and frame information
*
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Get the frame index
*
* @param[in] frame Frame object
* @param[out] error Log wrong message
* @return uint64_t return the frame index
*/
uint64_t ob_frame_index(ob_frame *frame, ob_error **error);
/**
* @brief Get the frame format
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return ob_format return the frame format
*/
ob_format ob_frame_format(ob_frame *frame, ob_error **error);
/**
* @brief Get the frame type
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return ob_frame_type return the frame type
*/
ob_frame_type ob_frame_get_type(ob_frame *frame, ob_error **error);
/**
* @brief Get the hardware timestamp of the frame in milliseconds.
* @brief The hardware timestamp is the time point when the frame was captured by the device, on device clock domain.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint64_t return the frame hardware timestamp in milliseconds
*/
uint64_t ob_frame_time_stamp(ob_frame *frame, ob_error **error);
/**
* @brief Get the hardware timestamp of the frame in microseconds.
* @brief The hardware timestamp is the time point when the frame was captured by the device, on device clock domain.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint64_t return the frame hardware timestamp in microseconds
*/
uint64_t ob_frame_time_stamp_us(ob_frame *frame, ob_error **error);
/**
* @brief Get the system timestamp of the frame in milliseconds.
* @brief The system timestamp is the time point when the frame was received by the host, on host clock domain.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint64_t return the frame system timestamp in milliseconds
*/
uint64_t ob_frame_system_time_stamp(ob_frame *frame, ob_error **error);
/**
* @brief Get the system timestamp of the frame in microseconds.
* @brief The system timestamp is the time point when the frame was received by the host, on host clock domain.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint64_t return the frame system timestamp in microseconds
*/
uint64_t ob_frame_system_time_stamp_us(ob_frame *frame, ob_error **error);
/**
* @brief Get the global timestamp of the frame in microseconds.
* @brief The global timestamp is the time point when the frame was was captured by the device, and has been converted to the host clock domain. The
* conversion process base on the device timestamp and can eliminate the timer drift of the device
*
* @attention Only some devices support getting the global timestamp. If the device does not support it, this function will return 0. Check the device support
* status by @ref ob_device_is_global_timestamp_supported() function.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint64_t The global timestamp of the frame in microseconds.
*/
uint64_t ob_frame_global_time_stamp_us(ob_frame *frame, ob_error **error);
/**
* @brief Get frame data
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return void* * return frame data pointer
*/
void *ob_frame_data(ob_frame *frame, ob_error **error);
/**
* @brief Get the frame data size
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint32_t return the frame data size
* If it is point cloud data, it return the number of bytes occupied by all point sets. If you need to find the number of points, you need to divide dataSize
* by the structure size of the corresponding point type.
*/
uint32_t ob_frame_data_size(ob_frame *frame, ob_error **error);
/**
* @brief Get the metadata of the frame
*
* @param[in] frame frame object
* @param[out] error Log error messages
* @return void* return the metadata pointer of the frame
*/
void *ob_frame_metadata(ob_frame *frame, ob_error **error);
#define ob_video_frame_metadata ob_frame_metadata // for compatibility
/**
* @brief Get the metadata size of the frame
*
* @param[in] frame frame object
* @param[out] error Log error messages
* @return uint32_t return the metadata size of the frame
*/
uint32_t ob_frame_metadata_size(ob_frame *frame, ob_error **error);
#define ob_video_frame_metadata_size ob_frame_metadata_size // for compatibility
/**
* @brief check if the frame contains the specified metadata
*
* @param[in] frame frame object
* @param[in] type metadata type, refer to @ref ob_frame_metadata_type
* @param[out] error Log error messages
*/
bool ob_frame_has_metadata(ob_frame *frame, ob_frame_metadata_type type, ob_error **error);
/**
* @brief Get the metadata value of the frame
*
* @param[in] frame frame object
* @param[in] type metadata type, refer to @ref ob_frame_metadata_type
* @param[out] error Log error messages
* @return int64_t return the metadata value of the frame
*/
int64_t ob_frame_get_metadata_value(ob_frame *frame, ob_frame_metadata_type type, ob_error **error);
/**
* @brief Get the stream profile of the frame
*
* @attention Require @ref ob_delete_stream_profile() to release the return stream profile.
*
* @param frame frame object
* @param error Log error messages
* @return ob_stream_profile* Return the stream profile of the frame, if the frame is not captured by a sensor stream, it will return NULL
*/
ob_stream_profile* ob_frame_get_stream_profile(ob_frame *frame, ob_error **error);
/**
* @brief Get the sensor of the frame
*
* @attention Require @ref ob_delete_sensor() to release the return sensor.
*
* @param[in] frame frame object
* @param[out] error Log error messages
* @return ob_sensor* return the sensor of the frame, if the frame is not captured by a sensor or the sensor stream has been destroyed, it will return NULL
*/
ob_sensor* ob_frame_get_sensor(ob_frame *frame, ob_error **error);
/**
* @brief Get the device of the frame
*
* @attention Require @ref ob_delete_device() to release the return device.
*
* @param frame frame object
* @param[out] error Log error messages
* @return ob_device* return the device of the frame, if the frame is not captured by a sensor stream or the device has been destroyed, it will return NULL
*/
ob_device* ob_frame_get_device(ob_frame *frame, ob_error **error);
/**
* @brief Get video frame width
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint32_t return the frame width
*/
uint32_t ob_video_frame_width(ob_frame *frame, ob_error **error);
/**
* @brief Get video frame height
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return uint32_t return the frame height
*/
uint32_t ob_video_frame_height(ob_frame *frame, ob_error **error);
/**
* @brief Get the effective number of pixels (such as Y16 format frame, but only the lower 10 bits are effective bits, and the upper 6 bits are filled with 0)
* @attention Only valid for Y8/Y10/Y11/Y12/Y14/Y16 format
*
* @param[in] frame video frame object
* @param[out] error log error messages
* @return uint8_t return the effective number of pixels in the pixel, or 0 if it is an unsupported format
*/
uint8_t ob_video_frame_pixel_available_bit_size(ob_frame *frame, ob_error **error);
/**
* @brief Get the source sensor type of the ir frame (left or right for dual camera)
*
* @param frame Frame object
* @param ob_error Log error messages
* @return ob_sensor_type return the source sensor type of the ir frame
*/
ob_sensor_type ob_ir_frame_get_source_sensor_type(ob_frame *frame, ob_error **ob_error);
/**
* @brief Get the value scale of the depth frame. The pixel value of the depth frame is multiplied by the scale to give a depth value in millimeters.
* For example, if valueScale=0.1 and a certain coordinate pixel value is pixelValue=10000, then the depth value = pixelValue*valueScale = 10000*0.1=1000mm.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return float The value scale of the depth frame
*/
float ob_depth_frame_get_value_scale(ob_frame *frame, ob_error **error);
/**
* @brief Get the point position value scale of the points frame. The point position value of the points frame is multiplied by the scale to give a position
* value in millimeters. For example, if scale=0.1, the x-coordinate value of a point is x = 10000, which means that the actual x-coordinate value = x*scale =
* 10000*0.1 = 1000mm.
*
* @param[in] frame Frame object
* @param[out] error Log error messages
* @return float The position value scale of the points frame
*/
float ob_points_frame_get_position_value_scale(ob_frame *frame, ob_error **error);
/**
* @brief Delete a frame object
*
* @param[in] frame The frame object to delete
* @param[out] error Log error messages
*/
void ob_delete_frame(ob_frame *frame, ob_error **error);
/**
* @brief Get the number of frames contained in the frameset
*
* @param[in] frameset frameset object
* @param[out] error Log error messages
* @return uint32_t return the number of frames
*/
uint32_t ob_frameset_frame_count(ob_frame *frameset, ob_error **error);
/**
* @brief Get the depth frame from the frameset.
*
* @param[in] frameset Frameset object.
* @param[out] error Log error messages.
* @return ob_frame* Return the depth frame.
*/
ob_frame *ob_frameset_depth_frame(ob_frame *frameset, ob_error **error);
/**
* @brief Get the color frame from the frameset.
*
* @param[in] frameset Frameset object.
* @param[out] error Log error messages.
* @return ob_frame* Return the color frame.
*/
ob_frame *ob_frameset_color_frame(ob_frame *frameset, ob_error **error);
/**
* @brief Get the infrared frame from the frameset.
*
* @param[in] frameset Frameset object.
* @param[out] error Log error messages.
* @return ob_frame* Return the infrared frame.
*/
ob_frame *ob_frameset_ir_frame(ob_frame *frameset, ob_error **error);
/**
* @brief Get point cloud data from the frameset.
*
* @param[in] frameset Frameset object.
* @param[out] error Log error messages.
* @return ob_frame* Return the point cloud frame.
*/
ob_frame *ob_frameset_points_frame(ob_frame *frameset, ob_error **error);
/**
* @brief Get a frame of a specific type from the frameset.
*
* @param[in] frameset Frameset object.
* @param[in] frame_type Frame type.
* @param[out] error Log error messages.
* @return ob_frame* Return the frame of the specified type, or nullptr if it does not exist.
*/
ob_frame *ob_frameset_get_frame(ob_frame *frameset, ob_frame_type frame_type, ob_error **error);
/**
* @brief Get a frame at a specific index from the FrameSet
*
* @param[in] frameset Frameset object.
* @param[in] index The index of the frame.
* @param[out] error Log error messages.
* @return ob_frame* Return the frame at the specified index, or nullptr if it does not exist.
*/
ob_frame *ob_frameset_get_frame_by_index(ob_frame *frameset, int index, ob_error **error);
/**
* @brief Get accelerometer frame data.
*
* @param[in] frame Accelerometer frame.
* @param[out] error Log error messages.
* @return ob_accel_value Return the accelerometer data.
*/
ob_accel_value ob_accel_frame_value(ob_frame *frame, ob_error **error);
/**
* @brief Get the temperature when acquiring the accelerometer frame.
*
* @param[in] frame Accelerometer frame.
* @param[out] error Log error messages.
* @return float Return the temperature value.
*/
float ob_accel_frame_temperature(ob_frame *frame, ob_error **error);
/**
* @brief Get gyroscope frame data.
*
* @param[in] frame Gyroscope frame.
* @param[out] error Log error messages.
* @return ob_gyro_value Return the gyroscope data.
*/
ob_gyro_value ob_gyro_frame_value(ob_frame *frame, ob_error **error);
/**
* @brief Get the temperature when acquiring the gyroscope frame.
*
* @param[in] frame Gyroscope frame.
* @param[out] error Log error messages.
* @return float Return the temperature value.
*/
float ob_gyro_frame_temperature(ob_frame *frame, ob_error **error);
/**
* @brief Increase the reference count of a frame object.
*
* @param[in] frame Frame object to increase the reference count.
* @param[out] error Log error messages.
*/
void ob_frame_add_ref(ob_frame *frame, ob_error **error);
/**
* @brief Create an empty frame object based on the specified parameters.
*
* @param[in] frame_format Frame object format.
* @param[in] width Frame object width.
* @param[in] height Frame object height.
* @param[in] stride_bytes Buffer row span.
* @param[in] frame_type Frame object type.
* @param[out] error Log error messages.
* @return ob_frame* Return an empty frame object.
*/
ob_frame *ob_create_frame(ob_format frame_format, int width, int height, int stride_bytes, ob_frame_type frame_type, ob_error **error);
/**
* @brief Create a frame object based on an externally created buffer.
*
* @param[in] frame_format Frame object format.
* @param[in] frame_width Frame object width.
* @param[in] frame_height Frame object height.
* @param[in] buffer Frame object buffer.
* @param[in] buffer_size Frame object buffer size.
* @param[in] buffer_destroy_cb Destroy callback.
* @param[in] buffer_destroy_context Destroy context.
* @param[out] error Log error messages.
* @return ob_frame* Return the frame object.
*/
ob_frame *ob_create_frame_from_buffer(ob_format frame_format, uint32_t frame_width, uint32_t frame_height, uint8_t *buffer, uint32_t buffer_size,
ob_frame_destroy_callback *buffer_destroy_cb, void *buffer_destroy_context, ob_error **error);
/**
* @brief Create an empty frameset object.
*
* @param[out] error Log error messages.
* @return ob_frame* Return the frameset object.
*/
ob_frame *ob_create_frameset(ob_error **error);
/**
* @brief Add a frame of the specified type to the frameset.
*
* @param[in] frameset Frameset object.
* @param[in] type Type of frame to add.
* @param[in] frame Frame object to add.
* @param[out] error Log error messages.
*/
void ob_frameset_push_frame(ob_frame *frameset, ob_frame_type type, ob_frame *frame, ob_error **error);
/**
* @brief Set the system timestamp of a frame object.
*
* @param[in] frame Frame object to set the system timestamp for.
* @param[in] system_timestamp System timestamp to set in milliseconds.
* @param[out] error Log error messages.
*/
void ob_frame_set_system_time_stamp(ob_frame *frame, uint64_t system_timestamp, ob_error **error);
/**
* @brief Set the device timestamp of a frame object.
*
* @param[in] frame Frame object to set the device timestamp.
* @param[in] device_timestamp Device timestamp to set in milliseconds.
* @param[out] error Log error messages.
*/
void ob_frame_set_device_time_stamp(ob_frame *frame, uint64_t device_timestamp, ob_error **error);
/**
* @brief Set the device timestamp of a frame object.
*
* @param[in] frame Frame object to set the device timestamp for.
* @param[in] device_timestamp_us Device timestamp to set in microseconds.
* @param[out] error Log error messages.
*/
void ob_frame_set_device_time_stamp_us(ob_frame *frame, uint64_t device_timestamp_us, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,124 @@
/**
* @file MultipleDevices.h
* @brief This file contains the multiple devices related API witch is used to control the synchronization between multiple devices and the synchronization
* between different sensor within single device.
* @brief The synchronization between multiple devices is complex, and different models have different synchronization modes and limitations. please refer to
* the product manual for details.
* @brief As the Depth and Infrared are the same sensor physically, the behavior of the Infrared is same as the Depth in the synchronization mode.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
#include "Device.h"
/**
* @brief Get the supported multi device sync mode bitmap of the device.
* @brief For example, if the return value is 0b00001100, it means the device supports @ref OB_MULTI_DEVICE_SYNC_MODE_PRIMARY and @ref
* OB_MULTI_DEVICE_SYNC_MODE_SECONDARY. User can check the supported mode by the code:
* ```c
* if(supported_mode_bitmap & OB_MULTI_DEVICE_SYNC_MODE_FREE_RUN){
* //support OB_MULTI_DEVICE_SYNC_MODE_FREE_RUN
* }
* if(supported_mode_bitmap & OB_MULTI_DEVICE_SYNC_MODE_STANDALONE){
* //support OB_MULTI_DEVICE_SYNC_MODE_STANDALONE
* }
* // and so on
* ```
* @param[in] device The device handle.
* @param[out] error The error information.
* @return uint16_t return the supported multi device sync mode bitmap of the device.
*/
uint16_t ob_device_get_supported_multi_device_sync_mode_bitmap(ob_device *device, ob_error **error);
/**
* @brief set the multi device sync configuration of the device.
*
* @param[in] device The device handle.
* @param[in] config The multi device sync configuration.
* @param[out] error The error information.
*/
void ob_device_set_multi_device_sync_config(ob_device *device, const ob_multi_device_sync_config *config, ob_error **error);
/**
* @brief get the multi device sync configuration of the device.
*
* @param[in] device The device handle.
* @param[out] error The error information.
* @return ob_multi_device_sync_config return the multi device sync configuration of the device.
*/
ob_multi_device_sync_config ob_device_get_multi_device_sync_config(ob_device *device, ob_error **error);
/**
* @brief send the capture command to the device.
* @brief The device will start one time image capture after receiving the capture command when it is in the @ref OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_TRIGGERING
*
* @attention The frequency of the user call this function multiplied by the number of frames per trigger should be less than the frame rate of the stream. The
* number of frames per trigger can be set by @ref framesPerTrigger.
* @attention For some modelsreceive and execute the capture command will have a certain delay and performance consumption, so the frequency of calling this
* function should not be too high, please refer to the product manual for the specific supported frequency.
* @attention If the device is not in the @ref OB_MULTI_DEVICE_SYNC_MODE_HARDWARE_TRIGGERING mode, device will ignore the capture command.
*
* @param[in] device The device handle.
* @param[out] error The error information.
*/
void ob_device_trigger_capture(ob_device *device, ob_error **error);
/**
* @brief set the timestamp reset configuration of the device.
*
* @param[in] device The device handle.
* @param[in] config The timestamp reset configuration.
* @param[out] error The error information.
*/
void ob_device_set_timestamp_reset_config(ob_device *device, const ob_device_timestamp_reset_config *config, ob_error **error);
/**
* @brief get the timestamp reset configuration of the device.
*
* @param[in] device The device handle.
* @param[out] error The error information.
* @return ob_device_timestamp_reset_config return the timestamp reset configuration of the device.
*/
ob_device_timestamp_reset_config ob_device_get_timestamp_reset_config(ob_device *device, ob_error **error);
/**
* @brief send the timestamp reset command to the device.
* @brief The device will reset the timer for calculating the timestamp for output frames to 0 after receiving the timestamp reset command when the timestamp
* reset function is enabled. The timestamp reset function can be enabled by call @ref ob_device_set_timestamp_reset_config.
*
* @attention If the stream of the device is started, the timestamp of the continuous frames output by the stream will jump once after the timestamp reset.
* @attention Due to the timer of device is not high-accuracy, the timestamp of the continuous frames output by the stream will drift after a long time. User
* can call this function periodically to reset the timer to avoid the timestamp drift, the recommended interval time is 60 minutes.
*
* @param[in] device The device handle.
* @param[out] error The error information.
*/
void ob_device_timestamp_reset(ob_device *device, ob_error **error);
/**
* @brief Alias for @ref ob_device_timestamp_reset since it is more accurate.
*/
#define ob_device_timer_reset ob_device_timestamp_reset
/**
* @brief synchronize the timer of the device with the host.
* @brief After calling this function, the timer of the device will be synchronized with the host. User can call this function to multiple devices to
* synchronize all timers of the devices.
*
* @attention If the stream of the device is started, the timestamp of the continuous frames output by the stream will may jump once after the timer sync.
* @attention Due to the timer of device is not high-accuracy, the timestamp of the continuous frames output by the stream will drift after a long time. User
* can call this function periodically to synchronize the timer to avoid the timestamp drift, the recommended interval time is 60 minutes.
*
* @param[in] device The device handle.
* @param[out] error The error information.
*/
void ob_device_timer_sync_with_host(ob_device *device, ob_error **error);
#ifdef __cplusplus
} // extern "C"
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,389 @@
/**
* @file Pipeline.h
* @brief The SDK's advanced API can quickly implement functions such as switching streaming, frame synchronization, software filtering, etc., suitable for
* applications, and the algorithm focuses on rgbd data stream scenarios. If you are on real-time or need to handle synchronization separately, align the scene.
* Please use the interface of Device's Lower API.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Create a pipeline object
*
* @param[out] error Log error messages
* @return ob_pipeline* return the pipeline object
*/
ob_pipeline *ob_create_pipeline(ob_error **error);
/**
* @brief Using device objects to create pipeline objects
*
* @param[in] dev Device object used to create pipeline
* @param[out] error Log error messages
* @return ob_pipeline* return the pipeline object
*/
ob_pipeline *ob_create_pipeline_with_device(ob_device *dev, ob_error **error);
/**
* @brief Use the playback file to create a pipeline object
*
* @param[in] file_name The playback file path used to create the pipeline
* @param[out] error Log error messages
* @return ob_pipeline* return the pipeline object
*/
ob_pipeline *ob_create_pipeline_with_playback_file(const char *file_name, ob_error **error);
/**
* @brief Delete pipeline objects
*
* @param[in] pipeline The pipeline object to be deleted
* @param[out] error Log error messages
*/
void ob_delete_pipeline(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Start the pipeline with default parameters
*
* @param[in] pipeline pipeline object
* @param[out] error Log error messages
*/
void ob_pipeline_start(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Start the pipeline with configuration parameters
*
* @param[in] pipeline pipeline object
* @param[in] config Parameters to be configured
* @param[out] error Log error messages
*/
void ob_pipeline_start_with_config(ob_pipeline *pipeline, ob_config *config, ob_error **error);
/**
* @brief Start the pipeline and set the frame collection data callback
*
* @param[in] pipeline pipeline object
* @param[in] config Parameters to be configured
* @param[in] callback Trigger a callback when all frame data in the frameset arrives
* @param[in] user_data Pass in any user data and get it from the callback
* @param[out] error Log error messages
*/
void ob_pipeline_start_with_callback(ob_pipeline *pipeline, ob_config *config, ob_frameset_callback callback, void *user_data, ob_error **error);
/**
* @brief Stop pipeline
*
* @param[in] pipeline pipeline object
* @param[out] error Log error messages
*/
void ob_pipeline_stop(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Get the configuration object associated with the pipeline
* @brief Returns default configuration if the user has not configured
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
* @return ob_config* The configuration object
*/
ob_config *ob_pipeline_get_config(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Wait for a set of frames to be returned synchronously
*
* @param[in] pipeline The pipeline object
* @param[in] timeout_ms The timeout for waiting (in milliseconds)
* @param[out] error Log error messages
* @return ob_frame* The frameset that was waited for. A frameset is a special frame that can be used to obtain independent frames from the set.
*/
ob_frame *ob_pipeline_wait_for_frameset(ob_pipeline *pipeline, uint32_t timeout_ms, ob_error **error);
/**
* @brief Get the device object associated with the pipeline
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
* @return ob_device* The device object
*/
ob_device *ob_pipeline_get_device(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Get the playback object associated with the pipeline
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
* @return ob_playback* The playback object
*/
ob_playback *ob_pipeline_get_playback(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Get the stream profile list associated with the pipeline
*
* @param[in] pipeline The pipeline object
* @param[in] sensorType The sensor type. The supported sensor types can be obtained through the ob_device_get_sensor_list() interface.
* @param[out] error Log error messages
* @return ob_stream_profile_list* The stream profile list
*/
ob_stream_profile_list *ob_pipeline_get_stream_profile_list(ob_pipeline *pipeline, ob_sensor_type sensorType, ob_error **error);
/**
* @brief Enable frame synchronization
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
*/
void ob_pipeline_enable_frame_sync(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Disable frame synchronization
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
*/
void ob_pipeline_disable_frame_sync(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Dynamically switch the corresponding configuration
*
* @param[in] pipeline The pipeline object
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
*/
void ob_pipeline_switch_config(ob_pipeline *pipeline, ob_config *config, ob_error **error);
/**
* @brief Get the current camera parameters
*
* @param[in] pipeline pipeline object
* @param[in] colorWidth color width
* @param[in] colorHeight color height
* @param[in] depthWidth depth width
* @param[in] depthHeight depth height
* @param[out] error Log error messages
* @return ob_camera_param returns camera internal parameters
*/
ob_camera_param ob_pipeline_get_camera_param_with_profile(ob_pipeline *pipeline, uint32_t colorWidth, uint32_t colorHeight, uint32_t depthWidth,
uint32_t depthHeight, ob_error **error);
/**
* @brief Get current camera parameters
* @attention If D2C is enabled, it will return the camera parameters after D2C, if not, it will return to the default parameters
*
* @param[in] pipeline pipeline object
* @param[out] error Log error messages
* @return ob_camera_param The camera internal parameters
*/
ob_camera_param ob_pipeline_get_camera_param(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Get device calibration parameters with the specified configuration
*
* @param[in] pipeline pipeline object
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
* @return ob_calibration_param The calibration parameters
*/
ob_calibration_param ob_pipeline_get_calibration_param(ob_pipeline *pipeline, ob_config *config, ob_error **error);
/**
* @brief Return a list of D2C-enabled depth sensor resolutions corresponding to the input color sensor resolution
*
* @param[in] pipeline The pipeline object
* @param[in] color_profile The input profile of the color sensor
* @param[in] align_mode The input align mode
* @param[out] error Log error messages
* @return ob_stream_profile_list* The list of D2C-enabled depth sensor resolutions
*/
ob_stream_profile_list *ob_get_d2c_depth_profile_list(ob_pipeline *pipeline, ob_stream_profile *color_profile, ob_align_mode align_mode, ob_error **error);
/**
* @brief Get the valid area after D2C (DEPRECATED)
*
* @param[in] pipeline The pipeline object
* @param[in] distance The working distance
* @param[out] error Log error messages
* @return ob_rect The area information that is valid after D2C at the working distance
*/
ob_rect ob_get_d2c_valid_area(ob_pipeline *pipeline, uint32_t distance, ob_error **error);
/**
* @brief Get the valid area between the minimum distance and maximum distance after D2C
*
* @param[in] pipeline The pipeline object
* @param[in] minimum_distance The minimum working distance
* @param[in] maximum_distance The maximum working distance
* @param[out] error Log error messages
* @return ob_rect The area information that is valid after D2C at the working distance
*/
ob_rect ob_get_d2c_range_valid_area(ob_pipeline *pipeline, uint32_t minimum_distance, uint32_t maximum_distance, ob_error **error);
/**
* @brief Start recording
*
* @param[in] pipeline The pipeline object
* @param[in] file_name The recorded file path
* @param[out] error Log error messages
*/
void ob_pipeline_start_record(ob_pipeline *pipeline, const char *file_name, ob_error **error);
/**
* @brief Stop recording
*
* @param[in] pipeline The pipeline object
* @param[out] error Log error messages
*/
void ob_pipeline_stop_record(ob_pipeline *pipeline, ob_error **error);
/**
* @brief Create the pipeline configuration
*
* @param[out] error Log error messages
* @return ob_config* The configuration object
*/
ob_config *ob_create_config(ob_error **error);
/**
* @brief Delete the pipeline configuration
*
* @param[in] config The configuration to be deleted
* @param[out] error Log error messages
*/
void ob_delete_config(ob_config *config, ob_error **error);
/**
* @brief Enable the specified stream in the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[in] profile The stream configuration to be enabled
* @param[out] error Log error messages
*/
void ob_config_enable_stream(ob_config *config, ob_stream_profile *profile, ob_error **error);
/**
* @brief Enable a video stream to be used in the configuration.
*
* This function configures and enables a video stream with specific parameters.
* Users must specify all parameters explicitly as C does not support default arguments.
* Refer to the product manual for details on supported resolutions and formats for different camera models.
*
* @param config Pointer to the configuration structure.
* @param type The video stream type.
* @param width The video stream width.
* @param height The video stream height.
* @param fps The video stream frame rate.
* @param format The video stream format.
* @param error Pointer to store the error if operation fails.
*/
void ob_config_enable_video_stream(ob_config *config, ob_stream_type type, int width, int height, int fps, ob_format format, ob_error **error);
/**
* @brief Enable an accelerometer stream to be used in the configuration.
*
* This function configures and enables an accelerometer stream with specific parameters.
* Users must specify all parameters explicitly. For details on available full-scale ranges and sample rates,
* please refer to the product manual.
*
* @param config Pointer to the configuration structure.
* @param fullScaleRange The full-scale range of the accelerometer.
* @param sampleRate The sample rate of the accelerometer.
* @param error Pointer to store the error if operation fails.
*/
void ob_config_enable_accel_stream(ob_config *config, ob_accel_full_scale_range full_scale_range, ob_accel_sample_rate sample_rate, ob_error **error);
/**
* @brief Enable a gyroscope stream to be used in the configuration.
*
* This function configures and enables a gyroscope stream with specific parameters.
* Users must specify all parameters explicitly. For details on available full-scale ranges and sample rates,
* please refer to the product manual.
*
* @param config Pointer to the configuration structure.
* @param fullScaleRange The full-scale range of the gyroscope.
* @param sampleRate The sample rate of the gyroscope.
* @param error Pointer to store the error if operation fails.
*/
void ob_config_enable_gyro_stream(ob_config *config, ob_gyro_full_scale_range full_scale_range, ob_gyro_sample_rate sample_rate, ob_error **error);
/**
* @deprecated Use @ref ob_config_enable_stream instead
* @brief Enable all streams in the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
*/
void ob_config_enable_all_stream(ob_config *config, ob_error **error);
/**
* @brief Get the enabled stream profile list in the pipeline configuration
*
* @param config The pipeline configuration
* @param error Log error messages
* @return ob_stream_profile_list* The enabled stream profile list, should be released by @ref ob_delete_stream_profile_list after use
*/
ob_stream_profile_list *ob_config_get_enabled_stream_profile_list(ob_config *config, ob_error **error);
/**
* @brief Disable a specific stream in the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[in] type The type of stream to be disabled
* @param[out] error Log error messages
*/
void ob_config_disable_stream(ob_config *config, ob_stream_type type, ob_error **error);
/**
* @brief Disable all streams in the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
*/
void ob_config_disable_all_stream(ob_config *config, ob_error **error);
/**
* @brief Set the alignment mode for the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[in] mode The alignment mode to be set
* @param[out] error Log error messages
*/
void ob_config_set_align_mode(ob_config *config, ob_align_mode mode, ob_error **error);
/**
* @brief Set whether depth scaling is required after setting D2C
*
* @param[in] config The pipeline configuration
* @param[in] enable Whether scaling is required
* @param[out] error Log error messages
*/
void ob_config_set_depth_scale_require(ob_config *config, bool enable, ob_error **error);
/**
* @brief Set the target resolution for D2C, which is applicable when the color stream is not enabled using the OrbbecSDK and the depth needs to be D2C
* Note: When using the OrbbecSDK to enable the color stream, this interface should also be used to set the D2C target resolution. The configuration of the
* enabled color stream is preferred for D2C.
*
* @param[in] config The pipeline configuration
* @param[in] d2c_target_width The target width for D2C
* @param[in] d2c_target_height The target height for D2C
* @param[out] error Log error messages
*/
void ob_config_set_d2c_target_resolution(ob_config *config, uint32_t d2c_target_width, uint32_t d2c_target_height, ob_error **error);
/**
* @brief Set the frame aggregation output mode for the pipeline configuration
* @brief The processing strategy when the FrameSet generated by the frame aggregation function does not contain the frames of all opened streams (which
* can be caused by different frame rates of each stream, or by the loss of frames of one stream): drop directly or output to the user.
*
* @param[in] config The pipeline configuration
* @param[in] mode The frame aggregation output mode to be set (default mode is @ref OB_FRAME_AGGREGATE_OUTPUT_FULL_FRAME_REQUIRE)
* @param[out] error Log error messages
*/
void ob_config_set_frame_aggregate_output_mode(ob_config *config, ob_frame_aggregate_output_mode mode, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,780 @@
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2020 Orbbec Corporation. All Rights Reserved.
/**
* @file Property.h
* @brief Control command property list maintenance
*/
#ifdef OB_SENSOR_SDK_DEVELOPER
#include "libobsensor/internal/InternalProperty.h"
#else // not define OB_SENSOR_SDK_DEVELOPER
#ifndef _OB_PROPERTY_H_
#define _OB_PROPERTY_H_
#include "ObTypes.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Enumeration value describing all attribute control commands of the device
*/
typedef enum {
/**
* @brief LDP switch
*/
OB_PROP_LDP_BOOL = 2,
/**
* @brief Laser switch
*/
OB_PROP_LASER_BOOL = 3,
/**
* @brief laser pulse width
*/
OB_PROP_LASER_PULSE_WIDTH_INT = 4,
/**
* @brief Laser current (uint: mA)
*/
OB_PROP_LASER_CURRENT_FLOAT = 5,
/**
* @brief IR flood switch
*/
OB_PROP_FLOOD_BOOL = 6,
/**
* @brief IR flood level
*/
OB_PROP_FLOOD_LEVEL_INT = 7,
/**
* @brief temperature compensation switch
*/
OB_PROP_TEMPERATURE_COMPENSATION_BOOL = 8,
/**
* @brief Depth mirror
*/
OB_PROP_DEPTH_MIRROR_BOOL = 14,
/**
* @brief Depth flip
*/
OB_PROP_DEPTH_FLIP_BOOL = 15,
/**
* @brief Depth Postfilter
*/
OB_PROP_DEPTH_POSTFILTER_BOOL = 16,
/**
* @brief Depth Holefilter
*/
OB_PROP_DEPTH_HOLEFILTER_BOOL = 17,
/**
* @brief IR mirror
*/
OB_PROP_IR_MIRROR_BOOL = 18,
/**
* @brief IR flip
*/
OB_PROP_IR_FLIP_BOOL = 19,
/**
* @brief Minimum depth threshold
*/
OB_PROP_MIN_DEPTH_INT = 22,
/**
* @brief Maximum depth threshold
*/
OB_PROP_MAX_DEPTH_INT = 23,
/**
* @brief Software filter switch
*/
OB_PROP_DEPTH_SOFT_FILTER_BOOL = 24,
/**
* @brief LDP status
*/
OB_PROP_LDP_STATUS_BOOL = 32,
/**
* @brief soft filter maxdiff param
*/
OB_PROP_DEPTH_MAX_DIFF_INT = 40,
/**
* @brief soft filter maxSpeckleSize
*/
OB_PROP_DEPTH_MAX_SPECKLE_SIZE_INT = 41,
/**
* @brief Hardware d2c is on
*/
OB_PROP_DEPTH_ALIGN_HARDWARE_BOOL = 42,
/**
* @brief Timestamp adjustment
*/
OB_PROP_TIMESTAMP_OFFSET_INT = 43,
/**
* @brief Hardware distortion switch Rectify
*/
OB_PROP_HARDWARE_DISTORTION_SWITCH_BOOL = 61,
/**
* @brief Fan mode switch
*/
OB_PROP_FAN_WORK_MODE_INT = 62,
/**
* @brief Multi-resolution D2C mode
*/
OB_PROP_DEPTH_ALIGN_HARDWARE_MODE_INT = 63,
/**
* @brief Anti_collusion activation status
*/
OB_PROP_ANTI_COLLUSION_ACTIVATION_STATUS_BOOL = 64,
/**
* @brief the depth precision level, which may change the depth frame data unit, needs to be confirmed through the ValueScale interface of
* DepthFrame
*/
OB_PROP_DEPTH_PRECISION_LEVEL_INT = 75,
/**
* @brief tof filter range configuration
*/
OB_PROP_TOF_FILTER_RANGE_INT = 76,
/**
* @brief laser mode, the firmware terminal currently only return 1: IR Drive, 2: Torch
*/
OB_PROP_LASER_MODE_INT = 79,
/**
* @brief brt2r-rectify function switch (brt2r is a special module on mx6600), 0: Disable, 1: Rectify Enable
*/
OB_PROP_RECTIFY2_BOOL = 80,
/**
* @brief Color mirror
*/
OB_PROP_COLOR_MIRROR_BOOL = 81,
/**
* @brief Color flip
*/
OB_PROP_COLOR_FLIP_BOOL = 82,
/**
* @brief Indicator switch, 0: Disable, 1: Enable
*/
OB_PROP_INDICATOR_LIGHT_BOOL = 83,
/**
* @brief Disparity to depth switch, false: switch to software disparity convert to depth, true: switch to hardware disparity convert to depth
*/
OB_PROP_DISPARITY_TO_DEPTH_BOOL = 85,
/**
* @brief BRT function switch (anti-background interference), 0: Disable, 1: Enable
*/
OB_PROP_BRT_BOOL = 86,
/**
* @brief Watchdog function switch, 0: Disable, 1: Enable
*/
OB_PROP_WATCHDOG_BOOL = 87,
/**
* @brief External signal trigger restart function switch, 0: Disable, 1: Enable
*/
OB_PROP_EXTERNAL_SIGNAL_RESET_BOOL = 88,
/**
* @brief Heartbeat monitoring function switch, 0: Disable, 1: Enable
*/
OB_PROP_HEARTBEAT_BOOL = 89,
/**
* @brief Depth cropping mode device: OB_DEPTH_CROPPING_MODE
*/
OB_PROP_DEPTH_CROPPING_MODE_INT = 90,
/**
* @brief D2C preprocessing switch (such as RGB cropping), 0: off, 1: on
*/
OB_PROP_D2C_PREPROCESS_BOOL = 91,
/**
* @brief Custom RGB cropping switch, 0 is off, 1 is on custom cropping, and the ROI cropping area is issued
*/
OB_PROP_RGB_CUSTOM_CROP_BOOL = 94,
/**
* @brief Device operating mode (power consumption)
*/
OB_PROP_DEVICE_WORK_MODE_INT = 95,
/**
* @brief Device communication type, 0: USB; 1: Ethernet(RTSP)
*/
OB_PROP_DEVICE_COMMUNICATION_TYPE_INT = 97,
/**
* @brief Switch infrared imaging mode, 0: active IR mode, 1: passive IR mode
*/
OB_PROP_SWITCH_IR_MODE_INT = 98,
/**
* @brief Laser power level
*/
OB_PROP_LASER_POWER_LEVEL_CONTROL_INT = 99,
/**
* @brief LDP's measure distance, unit: mm
*/
OB_PROP_LDP_MEASURE_DISTANCE_INT = 100,
/**
* @brief Reset device time to zero
*/
OB_PROP_TIMER_RESET_SIGNAL_BOOL = 104,
/**
* @brief Enable send reset device time signal to other device. true: enable, false: disable
*/
OB_PROP_TIMER_RESET_TRIGGER_OUT_ENABLE_BOOL = 105,
/**
* @brief Delay to reset device time, unit: us
*/
OB_PROP_TIMER_RESET_DELAY_US_INT = 106,
/**
* @brief Signal to capture image
*/
OB_PROP_CAPTURE_IMAGE_SIGNAL_BOOL = 107,
/**
* @brief Right IR sensor mirror state
*/
OB_PROP_IR_RIGHT_MIRROR_BOOL = 112,
/**
* @brief Number frame to capture once a 'OB_PROP_CAPTURE_IMAGE_SIGNAL_BOOL' effect. range: [1, 255]
*/
OB_PROP_CAPTURE_IMAGE_FRAME_NUMBER_INT = 113,
/**
* @brief Right IR sensor flip state. true: flip image, false: origin, default: false
*/
OB_PROP_IR_RIGHT_FLIP_BOOL = 114,
/**
* @brief Color sensor rotation, angle{0, 90, 180, 270}
*/
OB_PROP_COLOR_ROTATE_INT = 115,
/**
* @brief IR/Left-IR sensor rotation, angle{0, 90, 180, 270}
*/
OB_PROP_IR_ROTATE_INT = 116,
/**
* @brief Right IR sensor rotation, angle{0, 90, 180, 270}
*/
OB_PROP_IR_RIGHT_ROTATE_INT = 117,
/**
* @brief Depth sensor rotation, angle{0, 90, 180, 270}
*/
OB_PROP_DEPTH_ROTATE_INT = 118,
/**
* @brief Get hardware laser power actual level which real state of laser element. OB_PROP_LASER_POWER_LEVEL_CONTROL_INT99will effect this command
* which it setting and changed the hardware laser energy level.
*/
OB_PROP_LASER_POWER_ACTUAL_LEVEL_INT = 119,
/**
* @brief USB's power state, enum type: OBUSBPowerState
*/
OB_PROP_USB_POWER_STATE_INT = 121,
/**
* @brief DC's power state, enum type: OBDCPowerState
*/
OB_PROP_DC_POWER_STATE_INT = 122,
/**
* @brief Device development mode switch, optional modes can refer to the definition in @ref OBDeviceDevelopmentMode,the default mode is
* @ref OB_USER_MODE
* @attention The device takes effect after rebooting when switching modes.
*/
OB_PROP_DEVICE_DEVELOPMENT_MODE_INT = 129,
/**
* @brief Multi-DeviceSync synchronized signal trigger out is enable state. true: enable, false: disable
*/
OB_PROP_SYNC_SIGNAL_TRIGGER_OUT_BOOL = 130,
/**
* @brief Restore factory settings and factory parameters
* @attention This command can only be written, and the parameter value must be true. The command takes effect after restarting the device.
*/
OB_PROP_RESTORE_FACTORY_SETTINGS_BOOL = 131,
/**
* @brief Enter recovery mode (flashing mode) when boot the device
* @attention The device will take effect after rebooting with the enable option. After entering recovery mode, you can upgrade the device system. Upgrading
* the system may cause system damage, please use it with caution.
*/
OB_PROP_BOOT_INTO_RECOVERY_MODE_BOOL = 132,
/**
* @brief Query whether the current device is running in recovery mode (read-only)
*/
OB_PROP_DEVICE_IN_RECOVERY_MODE_BOOL = 133,
/**
* @brief Capture interval mode, 0:time interval, 1:number interval
*/
OB_PROP_CAPTURE_INTERVAL_MODE_INT = 134,
/**
* @brief Capture time interval
*/
OB_PROP_CAPTURE_IMAGE_TIME_INTERVAL_INT = 135,
/**
* @brief Capture number interval
*/
OB_PROP_CAPTURE_IMAGE_NUMBER_INTERVAL_INT = 136,
/*
* @brief Timer reset function enable
*/
OB_PROP_TIMER_RESET_ENABLE_BOOL = 140,
/**
* @brief Enable or disable the device to retry USB2.0 re-identification when the device is connected to a USB2.0 port.
* @brief This feature ensures that the device is not mistakenly identified as a USB 2.0 device when connected to a USB 3.0 port.
*/
OB_PROP_DEVICE_USB2_REPEAT_IDENTIFY_BOOL = 141,
/**
* @brief Reboot device delay mode. Delay time unit: ms, range: [0, 8000).
*/
OB_PROP_DEVICE_REBOOT_DELAY_INT = 142,
/**
* @brief Query the status of laser overcurrent protection (read-only)
*/
OB_PROP_LASER_OVERCURRENT_PROTECTION_STATUS_BOOL = 148,
/**
* @brief Query the status of laser pulse width protection (read-only)
*/
OB_PROP_LASER_PULSE_WIDTH_PROTECTION_STATUS_BOOL = 149,
/**
* @brief Laser always on, true: always on, false: off, laser will be turned off when out of exposure time
*/
OB_PROP_LASER_ALWAYS_ON_BOOL = 174,
/**
* @brief Laser on/off alternate mode, 0: off, 1: on-off alternate, 2: off-on alternate
* @attention When turn on this mode, the laser will turn on and turn off alternately each frame.
*/
OB_PROP_LASER_ON_OFF_PATTERN_INT = 175,
/**
* @brief Depth unit flexible adjustment\
* @brief This property allows continuous adjustment of the depth unit, unlike @ref OB_PROP_DEPTH_PRECISION_LEVEL_INT must be set to some fixed value.
*/
OB_PROP_DEPTH_UNIT_FLEXIBLE_ADJUSTMENT_FLOAT = 176,
/**
* @brief Laser control, 0: off, 1: on, 2: auto
*
*/
OB_PROP_LASER_CONTROL_INT = 182,
/**
* @brief IR brightness
*/
OB_PROP_IR_BRIGHTNESS_INT = 184,
/**
* @brief slave device sync status
*/
OB_PROP_SLAVE_DEVICE_SYNC_STATUS_BOOL = 188,
/**
* @brief Color AE max exposure
*/
OB_PROP_COLOR_AE_MAX_EXPOSURE_INT = 189,
/**
* @brief IR AE max exposure
*/
OB_PROP_IR_AE_MAX_EXPOSURE_INT = 190,
/**
* @brief disparity search range mode
*/
OB_PROP_DISP_SEARCH_RANGE_MODE_INT = 191,
/**
* @brief cpu temperature correction . true: calibrate temperature
*/
OB_PROP_CPU_TEMPERATURE_CALIBRATION_BOOL = 199,
/**
* @brief Baseline calibration parameters
*/
OB_STRUCT_BASELINE_CALIBRATION_PARAM = 1002,
/**
* @brief Device temperature information
*/
OB_STRUCT_DEVICE_TEMPERATURE = 1003,
/**
* @brief TOF exposure threshold range
*/
OB_STRUCT_TOF_EXPOSURE_THRESHOLD_CONTROL = 1024,
/**
* @brief get/set serial number
*/
OB_STRUCT_DEVICE_SERIAL_NUMBER = 1035,
/**
* @brief get/set device time
*/
OB_STRUCT_DEVICE_TIME = 1037,
/**
* @brief Multi-device synchronization mode and parameter configuration
*/
OB_STRUCT_MULTI_DEVICE_SYNC_CONFIG = 1038,
/**
* @brief RGB cropping ROI
*/
OB_STRUCT_RGB_CROP_ROI = 1040,
/**
* @brief Device IP address configuration
*/
OB_STRUCT_DEVICE_IP_ADDR_CONFIG = 1041,
/**
* @brief The current camera depth mode
*/
OB_STRUCT_CURRENT_DEPTH_ALG_MODE = 1043,
/**
* @brief A list of depth accuracy levels, returning an array of uin16_t, corresponding to the enumeration
*/
OB_STRUCT_DEPTH_PRECISION_SUPPORT_LIST = 1045,
/**
* @brief Device network static ip config record
* @brief Using for get last static ip configwitch is record in device flash when user set static ip config
*
* @attention read only
*/
OB_STRUCT_DEVICE_STATIC_IP_CONFIG_RECORD = 1053,
/**
* @brief Using to configure the depth sensor's HDR mode
* @brief The Value type is @ref OBHdrConfig
*
* @attention After enable HDR mode, the depth sensor auto exposure will be disabled.
*/
OB_STRUCT_DEPTH_HDR_CONFIG = 1059,
/**
* @brief Color Sensor AE ROI configuration
* @brief The Value type is @ref OBRegionOfInterest
*/
OB_STRUCT_COLOR_AE_ROI = 1060,
/**
* @brief Depth Sensor AE ROI configuration
* @brief The Value type is @ref OBRegionOfInterest
* @brief Since the ir sensor is the same physical sensor as the depth sensor, this property will also effect the ir sensor.
*/
OB_STRUCT_DEPTH_AE_ROI = 1061,
/**
* @brief ASIC serial number
*/
OB_STRUCT_ASIC_SERIAL_NUMBER = 1063,
/**
* @brief Color camera auto exposure
*/
OB_PROP_COLOR_AUTO_EXPOSURE_BOOL = 2000,
/**
* @brief Color camera exposure adjustment
*/
OB_PROP_COLOR_EXPOSURE_INT = 2001,
/**
* @brief Color camera gain adjustment
*/
OB_PROP_COLOR_GAIN_INT = 2002,
/**
* @brief Color camera automatic white balance
*/
OB_PROP_COLOR_AUTO_WHITE_BALANCE_BOOL = 2003,
/**
* @brief Color camera white balance adjustment
*/
OB_PROP_COLOR_WHITE_BALANCE_INT = 2004,
/**
* @brief Color camera brightness adjustment
*/
OB_PROP_COLOR_BRIGHTNESS_INT = 2005,
/**
* @brief Color camera sharpness adjustment
*/
OB_PROP_COLOR_SHARPNESS_INT = 2006,
/**
* @brief Color camera shutter adjustment
*/
OB_PROP_COLOR_SHUTTER_INT = 2007,
/**
* @brief Color camera saturation adjustment
*/
OB_PROP_COLOR_SATURATION_INT = 2008,
/**
* @brief Color camera contrast adjustment
*/
OB_PROP_COLOR_CONTRAST_INT = 2009,
/**
* @brief Color camera gamma adjustment
*/
OB_PROP_COLOR_GAMMA_INT = 2010,
/**
* @brief Color camera image rotation
*/
OB_PROP_COLOR_ROLL_INT = 2011,
/**
* @brief Color camera auto exposure priority
*/
OB_PROP_COLOR_AUTO_EXPOSURE_PRIORITY_INT = 2012,
/**
* @brief Color camera brightness compensation
*/
OB_PROP_COLOR_BACKLIGHT_COMPENSATION_INT = 2013,
/**
* @brief Color camera color tint
*/
OB_PROP_COLOR_HUE_INT = 2014,
/**
* @brief Color Camera Power Line Frequency
*/
OB_PROP_COLOR_POWER_LINE_FREQUENCY_INT = 2015,
/**
* @brief Automatic exposure of depth camera (infrared camera will be set synchronously under some models of devices)
*/
OB_PROP_DEPTH_AUTO_EXPOSURE_BOOL = 2016,
/**
* @brief Depth camera exposure adjustment (infrared cameras will be set synchronously under some models of devices)
*/
OB_PROP_DEPTH_EXPOSURE_INT = 2017,
/**
* @brief Depth camera gain adjustment (infrared cameras will be set synchronously under some models of devices)
*/
OB_PROP_DEPTH_GAIN_INT = 2018,
/**
* @brief Infrared camera auto exposure (depth camera will be set synchronously under some models of devices)
*/
OB_PROP_IR_AUTO_EXPOSURE_BOOL = 2025,
/**
* @brief Infrared camera exposure adjustment (some models of devices will set the depth camera synchronously)
*/
OB_PROP_IR_EXPOSURE_INT = 2026,
/**
* @brief Infrared camera gain adjustment (the depth camera will be set synchronously under some models of devices)
*/
OB_PROP_IR_GAIN_INT = 2027,
/**
* @brief Select Infrared camera data source channel. If not support throw exception. 0 : IR stream from IR Left sensor; 1 : IR stream from IR Right sensor;
*/
OB_PROP_IR_CHANNEL_DATA_SOURCE_INT = 2028,
/**
* @brief Depth effect dedistortion, true: on, false: off. mutually exclusive with D2C function, RM_Filter disable When hardware or software D2C is enabled.
*/
OB_PROP_DEPTH_RM_FILTER_BOOL = 2029,
/**
* @brief Color camera maximal gain
*/
OB_PROP_COLOR_MAXIMAL_GAIN_INT = 2030,
/**
* @brief Color camera shutter gain
*/
OB_PROP_COLOR_MAXIMAL_SHUTTER_INT = 2031,
/**
* @brief The enable/disable switch for IR short exposure function, supported only by a few devices.
*/
OB_PROP_IR_SHORT_EXPOSURE_BOOL = 2032,
/**
* @brief Color camera HDR
*/
OB_PROP_COLOR_HDR_BOOL = 2034,
/**
* @brief IR long exposure mode switch read and write.
*/
OB_PROP_IR_LONG_EXPOSURE_BOOL = 2035,
/**
* @brief Setting and getting the USB device frame skipping mode status, true: frame skipping mode, false: non-frame skipping mode.
*/
OB_PROP_SKIP_FRAME_BOOL = 2036,
/**
* @brief Depth HDR merge, true: on, false: off.
*/
OB_PROP_HDR_MERGE_BOOL = 2037,
/**
* @brief Color camera FOCUS
*/
OB_PROP_COLOR_FOCUS_INT = 2038,
/**
* @brief Software disparity to depth
*/
OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL = 3004,
/**
* @brief Depth data unpacking function switch (each open stream will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format)
*/
OB_PROP_SDK_DEPTH_FRAME_UNPACK_BOOL = 3007,
/**
* @brief IR data unpacking function switch (each current will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format)
*/
OB_PROP_SDK_IR_FRAME_UNPACK_BOOL = 3008,
/**
* @brief Accel data conversion function switch (on by default)
*/
OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL = 3009,
/**
* @brief Gyro data conversion function switch (on by default)
*/
OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL = 3010,
/**
* @brief Left IR frame data unpacking function switch (each current will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format)
*/
OB_PROP_SDK_IR_LEFT_FRAME_UNPACK_BOOL = 3011,
/**
* @brief Right IR frame data unpacking function switch (each current will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format)
*/
OB_PROP_SDK_IR_RIGHT_FRAME_UNPACK_BOOL = 3012,
/**
* @brief depth Margin Filter
*/
OB_PROP_SDK_DEPTH_RECTIFY_MG_FILTER_BOOL = 3013,
/**
* @brief Depth Stream Industry Working Mode Settings, currently only supported by DCW2.
*/
OB_PROP_DEPTH_INDUSTRY_MODE_INT = 3024,
/**
* @brief "OpenNI device setting data stream packet size, such as DCW2.
*/
OB_PROP_STREAM_PACK_UNIT_INT = 3025,
/**
* @brief Calibration JSON file read from device (Femto Mega, read only)
*/
OB_RAW_DATA_CAMERA_CALIB_JSON_FILE = 4029,
} OBPropertyID,
ob_property_id;
// For backward compatibility
#define OB_PROP_TIMER_RESET_TRIGGLE_OUT_ENABLE_BOOL OB_PROP_TIMER_RESET_TRIGGER_OUT_ENABLE_BOOL
#define OB_PROP_LASER_ON_OFF_MODE_INT OB_PROP_LASER_ON_OFF_PATTERN_INT
#define OB_PROP_LASER_ENERGY_LEVEL_INT OB_PROP_LASER_POWER_LEVEL_CONTROL_INT
#define OB_PROP_LASER_HW_ENERGY_LEVEL_INT OB_PROP_LASER_POWER_ACTUAL_LEVEL_INT
#define OB_PROP_DEVICE_USB3_REPEAT_IDENTIFY_BOOL OB_PROP_DEVICE_USB2_REPEAT_IDENTIFY_BOOL
#define OB_PROP_DEPTH_NOISE_REMOVAL_FILTER_BOOL OB_PROP_DEPTH_SOFT_FILTER_BOOL
/**
* @brief The data type used to describe all property settings
*/
typedef enum OBPropertyType {
OB_BOOL_PROPERTY = 0, /**< Boolean property */
OB_INT_PROPERTY = 1, /**< Integer property */
OB_FLOAT_PROPERTY = 2, /**< Floating-point property */
OB_STRUCT_PROPERTY = 3, /**< Struct property */
} OBPropertyType,
ob_property_type;
/**
* @brief Used to describe the characteristics of each property
*/
typedef struct OBPropertyItem {
OBPropertyID id; /**< Property ID */
const char *name; /**< Property name */
OBPropertyType type; /**< Property type */
OBPermissionType permission; /**< Property read and write permission */
} OBPropertyItem, ob_property_item;
#ifdef __cplusplus
}
#endif
#endif // _OB_PROPERTY_H_
#endif // OB_SENSOR_SDK_DEVELOPER
@@ -0,0 +1,132 @@
/**
* @file RecordPlayback.h
* @brief Header file for recording and playback functions.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Create a recorder for data recording.
*
* @param[out] error Pointer to log error messages.
* @return Pointer to the recorder object.
*/
ob_recorder *ob_create_recorder(ob_error **error);
/**
* @brief Create a recorder for data recording.
*
* @param dev The device object used to create the recorder.
* @param[out] error Pointer to log error messages.
* @return Pointer to the recorder object.
*/
ob_recorder *ob_create_recorder_with_device(ob_device *dev, ob_error **error);
/**
* @brief Delete the recorder object.
*
* @param recorder Pointer to the recorder object.
* @param[out] error Pointer to log error messages.
*/
void ob_delete_recorder(ob_recorder *recorder, ob_error **error);
/**
* @brief Start recording.
*
* @param[in] recorder Pointer to the recorder object.
* @param[in] filename Recorded file name.
* @param[in] async Whether to record asynchronously.
* @param[out] error Pointer to log error messages.
*/
void ob_recorder_start(ob_recorder *recorder, const char *filename, bool async, ob_error **error);
/**
* @brief Stop recording.
*
* @param[in] recorder Pointer to the recorder object.
* @param[out] error Pointer to log error messages.
*/
void ob_recorder_stop(ob_recorder *recorder, ob_error **error);
/**
* @brief Write frame data to the recorder.
*
* @param[in] recorder Pointer to the recorder object.
* @param[in] frame Pointer to the frame data to write.
* @param[out] error Pointer to log error messages.
*/
void ob_recorder_write_frame(ob_recorder *recorder, ob_frame *frame, ob_error **error);
/**
* @brief Create a playback object.
*
* @param[in] filename Playback filename.
* @param[out] error Pointer to log error messages.
* @return Pointer to the playback object.
*/
ob_playback *ob_create_playback(const char *filename, ob_error **error);
/**
* @brief Delete the playback object.
*
* @param[in] playback Pointer to the playback object.
* @param[out] error Pointer to log error messages.
*/
void ob_delete_playback(ob_playback *playback, ob_error **error);
/**
* @brief Start playback, with data returned from the callback.
*
* @param[in] playback Pointer to the playback object.
* @param[in] callback Callback function for playback data.
* @param[in] user_data User data.
* @param[in] type Type of playback data.
* @param[out] error Pointer to log error messages.
*/
void ob_playback_start(ob_playback *playback, ob_playback_callback callback, void *user_data, ob_media_type type, ob_error **error);
/**
* @brief Stop playback.
*
* @param[in] playback Pointer to the playback object.
* @param[out] error Pointer to log error messages.
*/
void ob_playback_stop(ob_playback *playback, ob_error **error);
/**
* @brief Set the playback state.
*
* @param[in] playback Pointer to the playback object.
* @param[in] callback Playback status callback function.
* @param[in] user_data User data.
* @param[out] error Pointer to log error messages.
*/
void ob_set_playback_state_callback(ob_playback *playback, ob_media_state_callback callback, void *user_data, ob_error **error);
/**
* @brief Get the device information in the recording file.
*
* @param[in] playback Pointer to the playback object.
* @param[out] error Pointer to log error messages.
* @return Pointer to the device information.
*/
ob_device_info *ob_playback_get_device_info(ob_playback *playback, ob_error **error);
/**
* @brief Get the intrinsic and extrinsic parameter information in the recording file.
*
* @param[in] playback Pointer to the playback object.
* @param[out] error Pointer to log error messages.
* @return Camera intrinsic and extrinsic parameter.
*/
ob_camera_param ob_playback_get_camera_param(ob_playback *playback, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,162 @@
/**
* @file Sensor.h
* @brief Defines types related to sensors, used for obtaining stream configurations, opening and closing streams, and setting and getting sensor properties.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Get the type of the sensor.
*
* @param[in] sensor The sensor object.
* @param[out] error Logs error messages.
* @return The sensor type.
*/
ob_sensor_type ob_sensor_get_type(ob_sensor *sensor, ob_error **error);
/**
* @brief Get a list of all supported stream profiles.
*
* @param[in] sensor The sensor object.
* @param[out] error Logs error messages.
* @return A list of stream profiles.
*/
ob_stream_profile_list *ob_sensor_get_stream_profile_list(ob_sensor *sensor, ob_error **error);
/**
* @brief Request the list of recommended filter list
*
* @param[in] sensor The ob_sensor object.
* @param[out] error Log error messages.
*
* @return ob_filter_list
*/
ob_filter_list *ob_sensor_get_recommended_filter_list(ob_sensor *sensor, ob_error **error);
/**
* @brief Get the number of recommended filter list
*
* @param filter_list Recommended filter list
* @param error Log error messages
* @return uint32_t The number of list
*/
uint32_t ob_filter_list_get_count(ob_filter_list *filter_list, ob_error **error);
/**
* @brief Get the number of recommended filter list
*
* @param filter_list Recommended filter list
* @param index Recommended filter index
* @param error Log error messages
* @return ob_filter The index of ob_filter
*/
ob_filter *ob_get_filter(ob_filter_list *filter_list, uint32_t index, ob_error **error);
/**
* @brief Get the name of ob_filter
*
* @param filter ob_filter object
* @param error Log error messages
* @return char The filter of name
*/
const char *ob_get_filter_name(ob_filter *filter, ob_error **error);
/**
* @brief Delete a list of ob_filter objects.
*
* @param[in] filter_list The list of ob_filter objects to delete.
* @param[out] error Logs error messages.
*/
void ob_delete_filter_list(ob_filter_list *filter_list, ob_error **error);
/**
* @brief Open the current sensor and set the callback data frame.
*
* @param[in] sensor The sensor object.
* @param[in] profile The stream configuration information.
* @param[in] callback The callback function triggered when frame data arrives.
* @param[in] user_data Any user data to pass in and get from the callback.
* @param[out] error Logs error messages.
*/
void ob_sensor_start(ob_sensor *sensor, ob_stream_profile *profile, ob_frame_callback callback, void *user_data, ob_error **error);
/**
* @brief Stop the sensor stream.
*
* @param[in] sensor The sensor object.
* @param[out] error Logs error messages.
*/
void ob_sensor_stop(ob_sensor *sensor, ob_error **error);
/**
* @brief Dynamically switch resolutions.
*
* @param[in] sensor The sensor object.
* @param[in] profile The stream configuration information.
* @param[out] error Logs error messages.
*/
void ob_sensor_switch_profile(ob_sensor *sensor, ob_stream_profile *profile, ob_error **error);
/**
* @brief Delete a list of sensor objects.
*
* @param[in] sensor_list The list of sensor objects to delete.
* @param[out] error Logs error messages.
*/
void ob_delete_sensor_list(ob_sensor_list *sensor_list, ob_error **error);
/**
* @brief Get the number of sensors in the sensor list.
*
* @param[in] sensor_list The list of sensor objects.
* @param[out] error Logs error messages.
* @return The number of sensors in the list.
*/
uint32_t ob_sensor_list_get_sensor_count(ob_sensor_list *sensor_list, ob_error **error);
/**
* @brief Get the sensor type.
*
* @param[in] sensor_list The list of sensor objects.
* @param[in] index The index of the sensor on the list.
* @param[out] error Logs error messages.
* @return The sensor type.
*/
ob_sensor_type ob_sensor_list_get_sensor_type(ob_sensor_list *sensor_list, uint32_t index, ob_error **error);
/**
* @brief Get a sensor by sensor type.
*
* @param[in] sensor_list The list of sensor objects.
* @param[in] sensorType The sensor type to be obtained.
* @param[out] error Logs error messages.
* @return The sensor pointer. If the specified type of sensor does not exist, it will return null.
*/
ob_sensor *ob_sensor_list_get_sensor_by_type(ob_sensor_list *sensor_list, ob_sensor_type sensorType, ob_error **error);
/**
* @brief Get a sensor by index number.
*
* @param[in] sensor_list The list of sensor objects.
* @param[in] index The index of the sensor on the list.
* @param[out] error Logs error messages.
* @return The sensor object.
*/
ob_sensor *ob_sensor_list_get_sensor(ob_sensor_list *sensor_list, uint32_t index, ob_error **error);
/**
* @brief Delete a sensor object.
*
* @param[in] sensor The sensor object to delete.
* @param[out] error Logs error messages.
*/
void ob_delete_sensor(ob_sensor *sensor, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,219 @@
/**
* @file StreamProfile.h
* @brief The stream profile related type is used to get information such as the width, height, frame rate, and format of the stream.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Get stream profile format
*
* @param[in] profile Stream profile object
* @param[out] error Log error messages
* @return ob_format return the format of the stream
*/
ob_format ob_stream_profile_format(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get stream profile type
*
* @param[in] profile Stream profile object
* @param[out] error Log error messages
* @return ob_stream_type stream type
*/
ob_stream_type ob_stream_profile_type(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the extrinsic for source stream to target stream
*
* @param source Source stream profile
* @param target Target stream profile
* @param error Log error messages
* @return ob_extrinsic The extrinsic
*/
ob_extrinsic ob_stream_profile_get_extrinsic_to(ob_stream_profile *source, ob_stream_profile *target, ob_error **error);
/**
* @brief Get the frame rate of the video stream
*
* @param[in] profile Stream profile object
* @param[out] error Log error messages
* @return uint32_t return the frame rate of the stream
*/
uint32_t ob_video_stream_profile_fps(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the width of the video stream
*
* @param[in] profile Stream profile object , If the profile is not a video stream configuration, an error will be returned
* @param[out] error Log error messages
* @return uint32_t return the width of the stream
*/
uint32_t ob_video_stream_profile_width(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the height of the video stream
*
* @param[in] profile Stream profile object , If the profile is not a video stream configuration, an error will be returned
* @param[out] error Log error messages
* @return uint32_t return the height of the stream
*/
uint32_t ob_video_stream_profile_height(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the intrinsic of the video stream
*
* @param profile Stream profile object
* @param error Log error messages
* @return ob_camera_intrinsic Return the intrinsic of the stream
*/
ob_camera_intrinsic ob_video_stream_get_intrinsic(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the distortion of the video stream
*
* @param profile Stream profile object
* @param error Log error messages
* @return ob_camera_distortion Return the distortion of the stream
*/
ob_camera_distortion ob_video_stream_get_distortion(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the full-scale range of the accelerometer stream.
*
* @param[in] profile Stream profile object. If the profile is not for the accelerometer stream, an error will be returned.
* @param[out] error Log error messages.
* @return The full-scale range of the accelerometer stream.
*/
ob_accel_full_scale_range ob_accel_stream_profile_full_scale_range(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the sampling frequency of the accelerometer frame.
*
* @param[in] profile Stream profile object. If the profile is not for the accelerometer stream, an error will be returned.
* @param[out] error Log error messages.
* @return The sampling frequency of the accelerometer frame.
*/
ob_accel_sample_rate ob_accel_stream_profile_sample_rate(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the intrinsic of the accelerometer stream.
*
* @param profile Stream profile object. If the profile is not for the accelerometer stream, an error will be returned.
* @param error Log error messages.
* @return ob_accel_intrinsic Return the intrinsic of the accelerometer stream.
*/
ob_accel_intrinsic ob_accel_stream_profile_get_intrinsic(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the full-scale range of the gyroscope stream.
*
* @param[in] profile Stream profile object. If the profile is not for the gyroscope stream, an error will be returned.
* @param[out] error Log error messages.
* @return The full-scale range of the gyroscope stream.
*/
ob_gyro_full_scale_range ob_gyro_stream_profile_full_scale_range(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the intrinsic of the gyroscope stream.
*
* @param profile Stream profile object. If the profile is not for the gyroscope stream, an error will be returned.
* @param error Log error messages.
* @return ob_gyro_intrinsic Return the intrinsic of the gyroscope stream.
*/
ob_gyro_intrinsic ob_gyro_stream_get_intrinsic(ob_stream_profile *profile, ob_error **error);
/**
* @brief Get the sampling frequency of the gyroscope stream.
*
* @param[in] profile Stream profile object. If the profile is not for the gyroscope stream, an error will be returned.
* @param[out] error Log error messages.
* @return The sampling frequency of the gyroscope stream.
*/
ob_gyro_sample_rate ob_gyro_stream_profile_sample_rate(ob_stream_profile *profile, ob_error **error);
/**
* @brief Match the corresponding ob_stream_profile through the passed parameters. If there are multiple matches,
* the first one in the list will be returned by default. If no matched profile is found, an error will be returned.
*
* @param[in] profile_list Resolution list.
* @param[in] width Width. If you don't need to add matching conditions, you can pass OB_WIDTH_ANY.
* @param[in] height Height. If you don't need to add matching conditions, you can pass OB_HEIGHT_ANY.
* @param[in] format Format. If you don't need to add matching conditions, you can pass OB_FORMAT_ANY.
* @param[in] fps Frame rate. If you don't need to add matching conditions, you can pass OB_FPS_ANY.
* @param[out] error Log error messages.
* @return The matching profile.
*/
ob_stream_profile *ob_stream_profile_list_get_video_stream_profile(ob_stream_profile_list *profile_list, int width, int height, ob_format format, int fps,
ob_error **error);
/**
* @brief Match the corresponding ob_stream_profile through the passed parameters. If there are multiple matches,
* the first one in the list will be returned by default. If no matched profile is found, an error will be returned.
*
* @param[in] profile_list Resolution list.
* @param[in] fullScaleRange Full-scale range. If you don't need to add matching conditions, you can pass 0.
* @param[in] sampleRate Sample rate. If you don't need to add matching conditions, you can pass 0.
* @param[out] error Log error messages.
* @return The matching profile.
*/
ob_stream_profile *ob_stream_profile_list_get_accel_stream_profile(ob_stream_profile_list *profile_list, ob_accel_full_scale_range fullScaleRange,
ob_accel_sample_rate sampleRate, ob_error **error);
/**
* @brief Match the corresponding ob_stream_profile through the passed parameters. If there are multiple matches,
* the first one in the list will be returned by default. If no matched profile is found, an error will be returned.
*
* @param[in] profile_list Resolution list.
* @param[in] fullScaleRange Full-scale range. If you don't need to add matching conditions, you can pass 0.
* @param[in] sampleRate Sample rate. If you don't need to add matching conditions, you can pass 0.
* @param[out] error Log error messages.
* @return The matching profile.
*/
ob_stream_profile *ob_stream_profile_list_get_gyro_stream_profile(ob_stream_profile_list *profile_list, ob_gyro_full_scale_range fullScaleRange,
ob_gyro_sample_rate sampleRate, ob_error **error);
/**
* @brief Get the corresponding StreamProfile by subscripting.
*
* @param[in] profile_list StreamProfile lists.
* @param[in] index Index.
* @param[out] error Log error messages.
* @return The matching profile.
*/
ob_stream_profile *ob_stream_profile_list_get_profile(ob_stream_profile_list *profile_list, int index, ob_error **error);
/**
* @brief Get the number of StreamProfile lists.
*
* @param[in] profile_list StreamProfile list.
* @param[out] error Log error messages.
* @return The number of StreamProfile lists.
*/
uint32_t ob_stream_profile_list_count(ob_stream_profile_list *profile_list, ob_error **error);
/**
* @brief Delete the stream profile list.
*
* @param[in] profile_list Stream configuration list.
* @param[out] error Log error messages.
*/
void ob_delete_stream_profile_list(ob_stream_profile_list *profile_list, ob_error **error);
/**
* @brief Delete the stream configuration.
*
* @param[in] profile Stream profile object .
* @param[out] error Log error messages.
*/
void ob_delete_stream_profile(ob_stream_profile *profile, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,142 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "ObTypes.h"
/**
* @brief Transform a 3d point of a source coordinate system into a 3d point of the target coordinate system.
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] source_point3f Source 3d point value
* @param[in] source_sensor_type Source sensor type
* @param[in] target_sensor_type Target sensor type
* @param[out] target_point3f Target 3d point value
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool ob_calibration_3d_to_3d(const ob_calibration_param calibration_param, const ob_point3f source_point3f, const ob_sensor_type source_sensor_type,
const ob_sensor_type target_sensor_type, ob_point3f *target_point3f, ob_error **error);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 3d point of the target coordinate system.
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] source_point2f Source 2d point value
* @param[in] source_depth_pixel_value The depth of sourcePoint2f in millimeters
* @param[in] source_sensor_type Source sensor type
* @param[in] target_sensor_type Target sensor type
* @param[out] target_point3f Target 3d point value
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool ob_calibration_2d_to_3d(const ob_calibration_param calibration_param, const ob_point2f source_point2f, const float source_depth_pixel_value,
const ob_sensor_type source_sensor_type, const ob_sensor_type target_sensor_type, ob_point3f *target_point3f, ob_error **error);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 3d point of the target coordinate system.
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] source_point2f Source 2d point value
* @param[in] source_depth_pixel_value The depth of sourcePoint2f in millimeters
* @param[in] source_sensor_type Source sensor type
* @param[in] target_sensor_type Target sensor type
* @param[out] target_point3f Target 3d point value
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool ob_calibration_2d_to_3d_undistortion(const ob_calibration_param calibration_param, const ob_point2f source_point2f, const float source_depth_pixel_value,
const ob_sensor_type source_sensor_type, const ob_sensor_type target_sensor_type, ob_point3f *target_point3f,
ob_error **error);
/**
* @brief Transform a 3d point of a source coordinate system into a 2d pixel coordinate of the target camera.
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] source_point3f Source 3d point value
* @param[in] source_sensor_type Source sensor type
* @param[in] target_sensor_type Target sensor type
* @param[out] target_point2f Target 2d point value
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool ob_calibration_3d_to_2d(const ob_calibration_param calibration_param, const ob_point3f source_point3f, const ob_sensor_type source_sensor_type,
const ob_sensor_type target_sensor_type, ob_point2f *target_point2f, ob_error **error);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 2d pixel coordinate of the target camera
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] source_point2f Source 2d point value
* @param[in] source_depth_pixel_value The depth of sourcePoint2f in millimeters
* @param[in] source_sensor_type Source sensor type
* @param[in] target_sensor_type Target sensor type
* @param[out] target_point2f Target 2d point value
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool ob_calibration_2d_to_2d(const ob_calibration_param calibration_param, const ob_point2f source_point2f, const float source_depth_pixel_value,
const ob_sensor_type source_sensor_type, const ob_sensor_type target_sensor_type, ob_point2f *target_point2f, ob_error **error);
/**
* @brief Transforms the depth frame into the geometry of the color camera.
*
* @param[in] device Device handle
* @param[in] depth_frame Input depth frame
* @param[in] target_color_camera_width Target color camera width
* @param[in] target_color_camera_height Target color camera height
* @param[out] error Log error messages
*
* @return ob_frame* Transformed depth frame
*/
ob_frame *transformation_depth_frame_to_color_camera(ob_device *device, ob_frame *depth_frame, uint32_t target_color_camera_width,
uint32_t target_color_camera_height, ob_error **error);
/**
* @brief Init transformation tables
*
* @param[in] calibration_param Device calibration param,see pipeline::getCalibrationParam
* @param[in] sensor_type sensor type
* @param[in] data input data,needs to be allocated externally.During initialization, the external allocation size is 'data_size', for example, data_size = 1920
* * 1080 * 2*sizeof(float) (1920 * 1080 represents the image resolution, and 2 represents two LUTs, one for x-coordinate and one for y-coordinate).
* @param[in] data_size input data size
* @param[out] xy_tables output xy tables
* @param[out] error Log error messages
*
* @return bool Transform result
*/
bool transformation_init_xy_tables(const ob_calibration_param calibration_param, const ob_sensor_type sensor_type, float *data, uint32_t *data_size,
ob_xy_tables *xy_tables, ob_error **error);
/**
* @brief Transform depth image to point cloud data
*
* @param[in] xy_tables input xy tables,see transformation_init_xy_tables
* @param[in] depth_image_data input depth image data
* @param[out] pointcloud_data output point cloud data
* @param[out] error Log error messages
*/
void transformation_depth_to_pointcloud(ob_xy_tables *xy_tables, const void *depth_image_data, void *pointcloud_data, ob_error **error);
/**
* @brief Transform depth image to point cloud data
*
* @param[in] xy_tables input xy tables,see transformation_init_xy_tables
* @param[in] depth_image_data input depth image data
* @param[in] color_image_data input color image data (only RGB888 support)
* @param[out] pointcloud_data output point cloud data
* @param[out] error Log error messages
*/
void transformation_depth_to_rgbd_pointcloud(ob_xy_tables *xy_tables, const void *depth_image_data, const void *color_image_data, void *pointcloud_data,
ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,50 @@
/**
* @file Version.h
* @brief Functions for retrieving the SDK version number information.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Get the SDK version number.
*
* @return int The SDK version number.
*/
int ob_get_version();
/**
* @brief Get the SDK major version number.
*
* @return int The SDK major version number.
*/
int ob_get_major_version();
/**
* @brief Get the SDK minor version number.
*
* @return int The SDK minor version number.
*/
int ob_get_minor_version();
/**
* @brief Get the SDK patch version number.
*
* @return int The SDK patch version number.
*/
int ob_get_patch_version();
/**
* @brief Get the SDK stage version.
* @attention The returned char* does not need to be freed.
*
* @return const char* The SDK stage version.
*/
const char *ob_get_stage_version();
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,164 @@
/**
* @file Context.hpp
* @brief The SDK context class, which serves as the entry point to the underlying SDK. It is used to query device lists, handle device callbacks, and set the
* log level.
*
*/
#pragma once
#include "Types.hpp"
#include <functional>
#include <memory>
struct ContextImpl;
namespace ob {
class Device;
class DeviceInfo;
class DeviceList;
class OB_EXTENSION_API Context {
private:
std::unique_ptr<ContextImpl> impl_;
public:
/**
* @brief The Context class is a management class that describes the runtime of the SDK. It is responsible for applying and releasing resources for the SDK.
* The context has the ability to manage multiple devices, enumerate devices, monitor device callbacks, and enable functions such as multi-device
* synchronization.
*/
Context(const char *configPath = "");
virtual ~Context() noexcept;
/**
* @brief Queries the enumerated device list.
*
* @return std::shared_ptr<DeviceList> A pointer to the device list class.
*/
std::shared_ptr<DeviceList> queryDeviceList();
/**
* @brief enable or disable net device enumeration.
* @brief after enable, the net device will be discovered automatically and can be retrieved by @ref queryDeviceList. The default state can be set in the
* configuration file.
*
* @attention Net device enumeration by gvcp protocol, if the device is not in the same subnet as the host, it will be discovered but cannot be connected.
*
* @param[out] enable true to enable, false to disable
*/
void enableNetDeviceEnumeration(bool enable);
/**
* @brief Creates a network device object.
*
* @param address The IP address.
* @param port The port.
* @return std::shared_ptr<Device> The created device object.
*/
std::shared_ptr<Device> createNetDevice(const char *address, uint16_t port);
/**
* @brief Changes the IP configuration of a network device.
*
* @param deviceUid The device unique ID, which is the network device MAC address. It can be obtained through the @ref DeviceList::uid() function.
* @param config The new IP configuration.
*/
void changeNetDeviceIpConfig(const char *deviceUid, const OBNetIpConfig &config);
using DeviceChangedCallback = std::function<void(std::shared_ptr<DeviceList> removedList, std::shared_ptr<DeviceList> addedList)>;
/**
* @brief Set the device plug-in callback function.
*
* @param callback The function triggered when the device is plugged and unplugged.
*/
void setDeviceChangedCallback(DeviceChangedCallback callback);
/**
* @brief Activates device clock synchronization to synchronize the clock of the host and all created devices (if supported).
*
* @param repeatInterval The interval for auto-repeated synchronization, in milliseconds. If the value is 0, synchronization is performed only once.
*/
void enableDeviceClockSync(uint64_t repeatInterval);
#define enableMultiDeviceSync enableDeviceClockSync
/**
* @brief Frees idle memory from the internal frame memory pool.
*/
void freeIdleMemory();
/**
* @brief Set the level of the global log, which affects both the log level output to the terminal and output to the file.
*
* @param severity The log output level.
*/
static void setLoggerSeverity(OBLogSeverity severity);
/**
* @brief Set log output to a file.
*
* @param severity The log level output to the file.
* @param directory The log file output path. If the path is empty, the existing settings will continue to be used (if the existing configuration is also
* empty, the log will not be output to the file).
*/
static void setLoggerToFile(OBLogSeverity severity, const char *directory);
/**
* @brief Set log output to the terminal.
*
* @param severity The log level output to the terminal.
*/
static void setLoggerToConsole(OBLogSeverity severity);
/**
* @brief Log output callback function.
*
* @param severity The current callback log level.
* @param logMsg The log message.
*/
using LogCallback = std::function<void(OBLogSeverity severity, const char *logMsg)>;
/**
* @brief Set the logger to callback.
*
* @param severity The callback log level.
* @param callback The callback function.
*/
static void setLoggerToCallback(OBLogSeverity severity, LogCallback callback);
/**
* @brief Loads a license file.
*
* @param filePath The license file path.
* @param key The decryption key.
*/
static void loadLicense(const char *filePath, const char *key = OB_DEFAULT_DECRYPT_KEY);
/**
* @brief Loads a license from data.
*
* @param data The license data.
* @param dataLen The license data length.
* @param key The decryption key.
*/
static void loadLicenseFromData(const char *data, uint32_t dataLen, const char *key = OB_DEFAULT_DECRYPT_KEY);
/**
* @brief Set the UVC backend for the specified context
* This function configures the Universal Video Class (UVC) backend for the given context, allowing the selection of a specific backend for
* video capture operations.
*
* @attention This function is only supported on Linux (ARM) platforms.
* Some devices, like the Dabai series, do not support V4L2. Therefore, the default backend is LIBUVC. Ensure that the device
* supports V4L2 before setting it as the backend.
*
* @param[in] uvcBackend Specifies the UVC backend to use:
* - `UVC_BACKEND_AUTO`: Automatically selects between
* V4L2 or libuvc based on metadata support.
* - `UVC_BACKEND_LIBUVC`: Forces the use of libuvc.
* - `UVC_BACKEND_V4L2`: Forces the use of V4L2.
*/
void setUVCBackend(OBUvcBackend uvcBackend);
};
} // namespace ob
@@ -0,0 +1,969 @@
/**
* @file Device.hpp
* @brief Device related types, including operations such as getting and creating a device, setting and obtaining device attributes, and obtaining sensors
*
*/
#pragma once
#include "Types.hpp"
#include "libobsensor/h/Property.h"
#include "libobsensor/hpp/Filter.hpp"
#include <memory>
#include <string>
#include <vector>
struct DeviceImpl;
struct DeviceInfoImpl;
struct DeviceListImpl;
struct CameraParamListImpl;
namespace ob {
class SensorList;
class Context;
class DeviceInfo;
class Sensor;
class CameraParamList;
class OBDepthWorkModeList;
class DevicePresetList;
class OB_EXTENSION_API Device {
protected:
std::unique_ptr<DeviceImpl> impl_;
Device(Device &&device);
public:
/**
* @brief Describe the entity of the RGBD camera, representing a specific model of RGBD camera
*/
Device(std::unique_ptr<DeviceImpl> impl);
virtual ~Device() noexcept;
/**
* @brief Get device information
*
* @return std::shared_ptr<DeviceInfo> return device information
*/
std::shared_ptr<DeviceInfo> getDeviceInfo();
/**
* @brief Get device sensor list
*
* @return std::shared_ptr<SensorList> return the sensor list
*/
std::shared_ptr<SensorList> getSensorList();
/**
* @brief Get specific type of sensor
* if device not open, SDK will automatically open the connected device and return to the instance
*
* @return std::shared_ptr<Sensor> return the sensor example, if the device does not have the device,return nullptr
*/
std::shared_ptr<Sensor> getSensor(OBSensorType type);
/**
* @brief Set int type of device property
*
* @param propertyId Property id
* @param property Property to be set
*/
void setIntProperty(OBPropertyID propertyId, int32_t property);
/**
* @brief Set float type of device property
*
* @param propertyId Property id
* @param property Property to be set
*/
void setFloatProperty(OBPropertyID propertyId, float property);
/**
* @brief Set bool type of device property
*
* @param propertyId Property id
* @param property Property to be set
*/
void setBoolProperty(OBPropertyID propertyId, bool property);
/**
* @brief Get int type of device property
*
* @param propertyId Property id
* @return int32_t Property to get
*/
int32_t getIntProperty(OBPropertyID propertyId);
/**
* @brief Get float type of device property
*
* @param propertyId Property id
* @return float Property to get
*/
float getFloatProperty(OBPropertyID propertyId);
/**
* @brief Get bool type of device property
*
* @param propertyId Property id
* @return bool Property to get
*/
bool getBoolProperty(OBPropertyID propertyId);
/**
* @brief Get int type device property range (including current value and default value)
*
* @param propertyId Property id
* @return OBIntPropertyRange Property range
*/
OBIntPropertyRange getIntPropertyRange(OBPropertyID propertyId);
/**
* @brief Get float type device property range((including current value and default value)
*
* @param propertyId Property id
* @return OBFloatPropertyRange Property range
*/
OBFloatPropertyRange getFloatPropertyRange(OBPropertyID propertyId);
/**
* @brief Get bool type device property range (including current value and default value)
*
* @param propertyId The ID of the property
* @return OBBoolPropertyRange The range of the property
*/
OBBoolPropertyRange getBoolPropertyRange(OBPropertyID propertyId);
/**
* @brief Write to an AHB register
*
* @param reg The register to write to
* @param mask The mask to apply
* @param value The value to write
*/
void writeAHB(uint32_t reg, uint32_t mask, uint32_t value);
/**
* @brief Read from an AHB register
*
* @param reg The register to read from
* @param mask The mask to apply
* @param value The value to return
*/
void readAHB(uint32_t reg, uint32_t mask, uint32_t *value);
/**
* @brief Write to an I2C register
*
* @param moduleId The ID of the I2C module to write to
* @param reg The register to write to
* @param mask The mask to apply
* @param value The value to write
*/
void writeI2C(uint32_t moduleId, uint32_t reg, uint32_t mask, uint32_t value);
/**
* @brief Read from an I2C register
*
* @param moduleId The ID of the I2C module to read from
* @param reg The register to read from
* @param mask The mask to apply
* @param value The value to return
*/
void readI2C(uint32_t moduleId, uint32_t reg, uint32_t mask, uint32_t *value);
/**
* @brief Set the properties for writing to Flash
*
* @param offset The offset address in Flash
* @param data The data to write
* @param dataSize The size of the data to write
* @param callback The callback for write progress
* @param async Whether to execute asynchronously
*/
void writeFlash(uint32_t offset, const void *data, uint32_t dataSize, SetDataCallback callback, bool async = false);
/**
* @brief Read a property from Flash
*
* @param offset The offset address in Flash
* @param dataSize The size of the property to read
* @param callback The callback for read progress and data
* @param async Whether to execute asynchronously
*/
void readFlash(uint32_t offset, uint32_t dataSize, GetDataCallback callback, bool async = false);
/**
* @brief Set the customer data type of a device property
*
* @param data The data to set
* @param dataSize The size of the data to set,the maximum length cannot exceed 65532 bytes.
*/
void writeCustomerData(const void *data, uint32_t dataSize);
/**
* @brief Get the customer data type of a device property
*
* @param data The property data obtained
* @param dataSize The size of the data obtained
*/
void readCustomerData(void *data, uint32_t *dataSize);
/**
* @brief Set the raw data type of a device property (with asynchronous callback)
*
* @param propertyId The ID of the property
* @param data The data to set
* @param dataSize The size of the data to set
* @param callback The callback for set progress
* @param async Whether to execute asynchronously
*/
void setRawData(OBPropertyID propertyId, const void *data, uint32_t dataSize, SetDataCallback callback, bool async = false);
/**
* @brief Get the raw data type of a device property (with asynchronous callback)
*
* @param propertyId The ID of the property
* @param callback The callback for getting the data and progress
* @param async Whether to execute asynchronously
*/
void getRawData(OBPropertyID propertyId, GetDataCallback callback, bool async = false);
/**
* @brief Set the structured data type of a device property
*
* @param propertyId The ID of the property
* @param data The data to set
* @param dataSize The size of the data to set
*/
void setStructuredData(OBPropertyID propertyId, const void *data, uint32_t dataSize);
/**
* @brief Get the structured data type of a device property
*
* @param propertyId The ID of the property
* @param data The property data obtained
* @param dataSize The size of the data obtained
*/
void getStructuredData(OBPropertyID propertyId, void *data, uint32_t *dataSize);
/**
* @brief Set the structured data type of a device property (with extended data bundle)
*
* @param propertyId The ID of the property
* @param dataBundle The target data bundle
* @param callback The callback for setting
*/
void setStructuredDataExt(OBPropertyID propertyId, std::shared_ptr<OBDataBundle> dataBundle, SetDataCallback callback);
/**
* @brief Get the structured data type of a device property (with extended data bundle)
*
* @param propertyId The ID of the property
* @return The data bundle
*/
std::shared_ptr<OBDataBundle> getStructuredDataExt(OBPropertyID propertyId);
/**
* @brief Get the property protocol version
*
* @return The protocol version
*/
OBProtocolVersion getProtocolVersion();
/**
* @brief Get the cmdVersion of a property
*
* @param propertyId The ID of the property
* @return The cmdVersion
*/
OBCmdVersion getCmdVersion(OBPropertyID propertyId);
/**
* @brief Get the number of properties supported by the device
*
* @return The number of supported properties
*/
uint32_t getSupportedPropertyCount();
/**
* @brief Get the supported properties of the device
*
* @param index The index of the property
* @return The type of supported property
*/
OBPropertyItem getSupportedProperty(uint32_t index);
/**
* @brief Check if a property permission is supported
*
* @param propertyId The ID of the property
* @param permission The read and write permissions to check
* @return Whether the property permission is supported
*/
bool isPropertySupported(OBPropertyID propertyId, OBPermissionType permission);
/**
* @brief Check if the global timestamp is supported for the device
*
* @return Whether the global timestamp is supported
*/
bool isGlobalTimestampSupported();
/**
* @brief Upgrade the device firmware
*
* @param filePath Firmware path
* @param callback Firmware upgrade progress and status callback
* @param async Whether to execute asynchronously
*/
void deviceUpgrade(const char *filePath, DeviceUpgradeCallback callback, bool async = true);
/**
* \if English
* @brief Upgrade the device firmware
*
* @param fileData Firmware file data
* @param fileSize Firmware file size
* @param callback Firmware upgrade progress and status callback
* @param async Whether to execute asynchronously
*/
void deviceUpgradeFromData(const char *fileData, uint32_t fileSize, DeviceUpgradeCallback callback, bool async = true);
/**
* @brief Send files to the specified path on the device side [Asynchronouscallback]
*
* @param filePath Original file path
* @param dstPath Accept the save path on the device side
* @param callback File transfer callback
* @param async Whether to execute asynchronously
*/
void sendFile(const char *filePath, const char *dstPath, SendFileCallback callback, bool async = true);
/**
* @brief Get the current state
* @return OBDeviceState device state information
*/
OBDeviceState getDeviceState();
/**
* @brief Set the device state changed callbacks
*
* @param callback The callback function that is triggered when the device status changes (for example, the frame rate is automatically reduced or the
* stream is closed due to high temperature, etc.)
*/
void setDeviceStateChangedCallback(DeviceStateChangedCallback callback);
/**
* @brief Verify device authorization code
*
* @param authCode Authorization code
* @return bool whether the activation is successful
*/
bool activateAuthorization(const char *authCode);
/**
* @brief Write authorization code
* @param[in] authCodeStr Authorization code
*/
void writeAuthorizationCode(const char *authCodeStr);
/**
* @brief Get the original parameter list of camera calibration saved in the device.
*
* @attention The parameters in the list do not correspond to the current open-current configuration. You need to select the parameters according to the
* actual situation, and may need to do scaling, mirroring and other processing. Non-professional users are recommended to use the
* Pipeline::getCameraParam() interface.
*
* @return std::shared_ptr<CameraParamList> camera parameter list
*/
std::shared_ptr<CameraParamList> getCalibrationCameraParamList();
/**
* @brief Get current depth work mode
*
* @return ob_depth_work_mode Current depth work mode
*/
OBDepthWorkMode getCurrentDepthWorkMode();
/**
* @brief Switch depth work mode by OBDepthWorkMode. Prefer invoke switchDepthWorkMode(const char *modeName) to switch depth mode
* when known the complete name of depth work mode.
* @param[in] workMode Depth work mode come from ob_depth_work_mode_list which return by ob_device_get_depth_work_mode_list
*/
OBStatus switchDepthWorkMode(const OBDepthWorkMode &workMode);
/**
* @brief Switch depth work mode by work mode name.
*
* @param[in] modeName Depth work mode name which equals to OBDepthWorkMode.name
*/
OBStatus switchDepthWorkMode(const char *modeName);
/**
* @brief Request support depth work mode list
* @return OBDepthWorkModeList list of ob_depth_work_mode
*/
std::shared_ptr<OBDepthWorkModeList> getDepthWorkModeList();
/**
* @brief Device restart
* @attention The device will be disconnected and reconnected. After the device is disconnected, the access to the Device object interface may be abnormal.
* Please delete the object directly and obtain it again after the device is reconnected.
*/
void reboot();
/**
* @brief Device restart delay mode
* @attention The device will be disconnected and reconnected. After the device is disconnected, the access to the Device object interface may be abnormal.
* Please delete the object directly and obtain it again after the device is reconnected.
* Support devices: Gemini2 L
*
* @param[in] delayMs Time unitms。delayMs == 0No delaydelayMs > 0, Delay millisecond connect to host device after reboot
*/
void reboot(uint32_t delayMs);
/**
* @brief Synchronize the device time (synchronize local system time to device)
* @deprecated This interface is deprecated, please use @ref timerSyncWithHost instead.
* @return The command (round trip time, rtt)
*/
DEPRECATED uint64_t syncDeviceTime();
/**
* @brief get the current device synchronization configuration
* @brief Device synchronization: including exposure synchronization function and multi-camera synchronization function of different sensors within a single
* machine
*
* @deprecated This interface is deprecated, please use @ref getMultiDeviceSyncConfig instead.
*
* @return OBDeviceSyncConfig return the device synchronization configuration
*/
DEPRECATED OBDeviceSyncConfig getSyncConfig();
/**
* @brief Set the device synchronization configuration
* @brief Used to configure the exposure synchronization function and multi-camera synchronization function of different sensors in a single machine
*
* @deprecated This interface is deprecated, please use @ref setMultiDeviceSyncConfig instead.
*
* @attention Calling this function will directly write the configuration to the device Flash, and it will still take effect after the device restarts. To
* avoid affecting the Flash lifespan, do not update the configuration frequently.
*
* @param deviceSyncConfig Device synchronization configuration
*/
DEPRECATED void setSyncConfig(const OBDeviceSyncConfig &deviceSyncConfig);
/**
* @brief Get the supported multi device sync mode bitmap of the device.
* @brief For example, if the return value is 0b00001100, it means the device supports @ref OB_MULTI_DEVICE_SYNC_MODE_PRIMARY and @ref
* OB_MULTI_DEVICE_SYNC_MODE_SECONDARY. User can check the supported mode by the code:
* ```c
* if(supported_mode_bitmap & OB_MULTI_DEVICE_SYNC_MODE_FREE_RUN){
* //support OB_MULTI_DEVICE_SYNC_MODE_FREE_RUN
* }
* if(supported_mode_bitmap & OB_MULTI_DEVICE_SYNC_MODE_STANDALONE){
* //support OB_MULTI_DEVICE_SYNC_MODE_STANDALONE
* }
* // and so on
* ```
* @return uint16_t return the supported multi device sync mode bitmap of the device.
*/
uint16_t getSupportedMultiDeviceSyncModeBitmap();
/**
* @brief set the multi device sync configuration of the device.
*
* @param[in] config The multi device sync configuration.
*/
void setMultiDeviceSyncConfig(const OBMultiDeviceSyncConfig &config);
/**
* @brief get the multi device sync configuration of the device.
*
* @return OBMultiDeviceSyncConfig return the multi device sync configuration of the device.
*/
OBMultiDeviceSyncConfig getMultiDeviceSyncConfig();
/**
* @brief send the capture command to the device.
* @brief The device will start one time image capture after receiving the capture command when it is in the @ref
* OB_MULTI_DEVICE_SYNC_MODE_SOFTWARE_TRIGGERING
*
* @attention The frequency of the user call this function multiplied by the number of frames per trigger should be less than the frame rate of the stream.
* The number of frames per trigger can be set by @ref framesPerTrigger.
* @attention For some modelsreceive and execute the capture command will have a certain delay and performance consumption, so the frequency of calling
* this function should not be too high, please refer to the product manual for the specific supported frequency.
* @attention If the device is not in the @ref OB_MULTI_DEVICE_SYNC_MODE_HARDWARE_TRIGGERING mode, device will ignore the capture command.
*/
void triggerCapture();
/**
* @brief set the timestamp reset configuration of the device.
*/
void setTimestampResetConfig(const OBDeviceTimestampResetConfig &config);
/**
* @brief get the timestamp reset configuration of the device.
*
* @return OBDeviceTimestampResetConfig return the timestamp reset configuration of the device.
*/
OBDeviceTimestampResetConfig getTimestampResetConfig();
/**
* @brief send the timestamp reset command to the device.
* @brief The device will reset the timer for calculating the timestamp for output frames to 0 after receiving the timestamp reset command when the
* timestamp reset function is enabled. The timestamp reset function can be enabled by call @ref ob_device_set_timestamp_reset_config.
* @brief Before calling this function, user should call @ref ob_device_set_timestamp_reset_config to disable the timestamp reset function (It is not
* required for some models, but it is still recommended to do so for code compatibility).
*
* @attention If the stream of the device is started, the timestamp of the continuous frames output by the stream will jump once after the timestamp reset.
* @attention Due to the timer of device is not high-accuracy, the timestamp of the continuous frames output by the stream will drift after a long time.
* User can call this function periodically to reset the timer to avoid the timestamp drift, the recommended interval time is 60 minutes.
*/
void timestampReset();
/**
* @brief Alias for @ref timestampReset since it is more accurate.
*/
#define timerReset timestampReset
/**
* @brief synchronize the timer of the device with the host.
* @brief After calling this function, the timer of the device will be synchronized with the host. User can call this function to multiple devices to
* synchronize all timers of the devices.
*
* @attention If the stream of the device is started, the timestamp of the continuous frames output by the stream will may jump once after the timer
* sync.
* @attention Due to the timer of device is not high-accuracy, the timestamp of the continuous frames output by the stream will drift after a long time.
* User can call this function periodically to synchronize the timer to avoid the timestamp drift, the recommended interval time is 60 minutes.
*
*/
void timerSyncWithHost();
/**
* @brief Load depth filter config from file.
* @param filePath Path of the config file.
*/
void loadDepthFilterConfig(const char *filePath);
/**
* @brief Reset depth filter config to device default define.
*/
void resetDefaultDepthFilterConfig();
/**
* @brief Get current preset name
* @brief The preset mean a set of parameters or configurations that can be applied to the device to achieve a specific effect or function.
* @return const char* return the current preset name, it should be one of the preset names returned by @ref getAvailablePresetList.
*/
const char *getCurrentPresetName();
/**
* @brief Get current depth mode name
* @brief According the current preset name to return current depth mode name
* @return const char* return the current depth mode name.
*/
const char *getCurrentDepthModeName();
/**
* @brief load the preset according to the preset name.
* @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
* settings to update the user program temporarily.
* @param presetName The preset name to set. The name should be one of the preset names returned by @ref getAvailablePresetList.
*/
void loadPreset(const char *presetName);
/**
* @brief Get available preset list
* @brief The available preset list usually defined by the device manufacturer and restores on the device.
* @brief User can load the custom preset by calling @ref loadPresetFromJsonFile to append the available preset list.
*
* @return DevicePresetList return the available preset list.
*/
std::shared_ptr<DevicePresetList> getAvailablePresetList();
/**
* @brief Load custom preset from file.
* @brief After loading the custom preset, the settings in the custom preset will set to the device immediately.
* @brief After loading the custom preset, the available preset list will be appended with the custom preset and named as the file name.
*
* @attention The user should ensure that the custom preset file is adapted to the device and the settings in the file are valid.
* @attention It is recommended to re-read the device settings to update the user program temporarily after successfully loading the custom preset.
*
* @param filePath The path of the custom preset file.
*/
void loadPresetFromJsonFile(const char *filePath);
/**
* @brief Load custom preset from data.
* @brief After loading the custom preset, the settings in the custom preset will set to the device immediately.
* @brief After loading the custom preset, the available preset list will be appended with the custom preset and named as the @ref presetName.
*
* @attention The user should ensure that the custom preset data is adapted to the device and the settings in the data are valid.
* @attention It is recommended to re-read the device settings to update the user program temporarily after successfully loading the custom preset.
*
* @param data The custom preset data.
* @param size The size of the custom preset data.
*/
void loadPresetFromJsonData(const char *presetName, const uint8_t *data, uint32_t size);
/**
* @brief Export current device settings as a preset json file.
* @brief The exported preset file can be loaded by calling @ref loadPresetFromJsonFile to restore the device setting.
* @brief After exporting the preset, a new preset named as the @ref filePath will be added to the available preset list.
*
* @param filePath The path of the preset file to be exported.
*/
void exportSettingsAsPresetJsonFile(const char *filePath);
/**
* @brief Export current device settings as a preset json data.
* @brief After exporting the preset, a new preset named as the @ref presetName will be added to the available preset list.
*
* @attention The memory of the data is allocated by the SDK, and will automatically be released by the SDK.
* @attention The memory of the data will be reused by the SDK on the next call, so the user should copy the data to a new buffer if it needs to be
* preserved.
*
* @param[out] data return the preset json data.
* @param[out] dataSize return the size of the preset json data.
*/
void exportSettingsAsPresetJsonData(const char *presetName, const uint8_t **data, uint32_t *dataSize);
friend class Pipeline;
friend class Recorder;
friend class CoordinateTransformHelper;
};
/**
* @brief A class describing device information, representing the name, id, serial number and other basic information of an RGBD camera.
*/
class OB_EXTENSION_API DeviceInfo {
private:
std::unique_ptr<DeviceInfoImpl> impl_;
public:
DeviceInfo(std::unique_ptr<DeviceInfoImpl> impl);
virtual ~DeviceInfo() noexcept;
/**
* @brief Get device name
*
* @return const char * return the device name
*/
const char *name();
/**
* @brief Get the pid of the device
*
* @return int return the pid of the device
*/
int pid();
/**
* @brief Get the vid of the device
*
* @return int return the vid of the device
*/
int vid();
/**
* @brief Get system assigned uid for distinguishing between different devices
*
* @return const char * return the uid of the device
*/
const char *uid();
/**
* @brief Get the serial number of the device
*
* @return const char * return the serial number of the device
*/
const char *serialNumber();
/**
* @brief Get the version number of the firmware
*
* @return const char* return the version number of the firmware
*/
const char *firmwareVersion();
/**
* @brief Get the USB connection type of the device (DEPRECATED)
*
* @return const char* the USB connection type of the device
*/
DEPRECATED const char *usbType();
/**
* @brief Get the connection type of the device
*
* @return const char* the connection type of the devicecurrently supports"USB", "USB1.0", "USB1.1", "USB2.0", "USB2.1", "USB3.0", "USB3.1", "USB3.2",
* "Ethernet"
*/
const char *connectionType();
/**
* @brief Get the IP address of the device
*
* @attention Only valid for network devices, otherwise it will return "0.0.0.0".
*
* @return const char* the IP address of the device, such as "192.168.1.10"
*/
const char *ipAddress();
/**
* @brief Get the version number of the hardware
*
* @return const char* the version number of the hardware
*/
const char *hardwareVersion();
/**
* @brief Get the minimum version number of the SDK supported by the device
*
* @return const char* the minimum SDK version number supported by the device
*/
const char *supportedMinSdkVersion();
/**
* @brief Get information about extensions obtained from SDK supported by the device
*
* @return const char* Returns extended information about the device
*/
const char *extensionInfo();
/**
* @brief Get chip type name
*
* @return const char* the chip type name
*/
const char *asicName();
/**
* @brief Get the device type
*
* @return OBDeviceType the device type
*/
OBDeviceType deviceType();
friend class Context;
friend class DeviceList;
friend class Pipeline;
};
/**
* @brief Class representing a list of devices
*/
class OB_EXTENSION_API DeviceList {
private:
std::unique_ptr<DeviceListImpl> impl_;
public:
DeviceList(std::unique_ptr<DeviceListImpl> impl);
~DeviceList() noexcept;
/**
* @brief Get the number of devices in the list
*
* @return uint32_t the number of devices in the list
*/
uint32_t deviceCount();
/**
* @brief Get the name of the device at the specified index (DEPRECATED)
*
* @param index the index of the device
* @return int the name of the device
*/
DEPRECATED const char *name(uint32_t index);
/**
* @brief Get the PID of the device at the specified index
*
* @param index the index of the device
* @return int the PID of the device
*/
int pid(uint32_t index);
/**
* @brief Get the VID of the device at the specified index
*
* @param index the index of the device
* @return int the VID of the device
*/
int vid(uint32_t index);
/**
* @brief Get the UID of the device at the specified index
*
* @param index the index of the device
* @return const char* the UID of the device
*/
const char *uid(uint32_t index);
/**
* @brief Get the serial number of the device at the specified index
*
* @param index the index of the device
* @return const char* the serial number of the device
*/
const char *serialNumber(uint32_t index);
/**
* @brief Get device connection type
*
* @param index device index
* @return const char* returns connection typecurrently supports"USB", "USB1.0", "USB1.1", "USB2.0", "USB2.1", "USB3.0", "USB3.1", "USB3.2", "Ethernet"
*/
const char *connectionType(uint32_t index);
/**
* @brief get the ip address of the device at the specified index
*
* @attention Only valid for network devices, otherwise it will return "0.0.0.0".
*
* @param index the index of the device
* @return const char* the ip address of the device
*/
const char *ipAddress(uint32_t index);
/**
* @brief Get the device object at the specified index
*
* @attention If the device has already been acquired and created elsewhere, repeated acquisition will throw an exception
*
* @param index the index of the device to create
* @return std::shared_ptr<Device> the device object
*/
std::shared_ptr<Device> getDevice(uint32_t index);
/**
* @brief Get the device object with the specified serial number
*
* @attention If the device has already been acquired and created elsewhere, repeated acquisition will throw an exception
*
* @param serialNumber the serial number of the device to create
* @return std::shared_ptr<Device> the device object
*/
std::shared_ptr<Device> getDeviceBySN(const char *serialNumber);
/**
* @brief Get the specified device object from the device list by uid
* @brief On Linux platform, the uid of the device is composed of bus-port-dev, for example 1-1.2-1. But the SDK will remove the dev number and only keep
* the bus-port as the uid to create the device, for example 1-1.2, so that we can create a device connected to the specified USB port. Similarly, users can
* also directly pass in bus-port as uid to create device.
*
* @attention If the device has been acquired and created elsewhere, repeated acquisition will throw an exception
*
* @param uid The uid of the device to be created
* @return std::shared_ptr<Device> returns the device object
*/
std::shared_ptr<Device> getDeviceByUid(const char *uid);
};
/**
* @brief Class representing a list of camera parameters
*/
class OB_EXTENSION_API CameraParamList {
private:
std::unique_ptr<CameraParamListImpl> impl_;
public:
CameraParamList(std::unique_ptr<CameraParamListImpl> impl);
~CameraParamList() noexcept;
/**
* @brief Get the number of camera parameter groups
*
* @return uint32_t the number of camera parameter groups
*/
uint32_t count();
/**
* @brief Get the camera parameters for the specified index
*
* @param index the index of the parameter group
* @return OBCameraParam the corresponding group parameters
*/
OBCameraParam getCameraParam(uint32_t index);
};
/**
* @brief Class representing a list of OBDepthWorkMode
*/
class OB_EXTENSION_API OBDepthWorkModeList {
private:
std::unique_ptr<OBDepthWorkModeListImpl> impl_;
public:
OBDepthWorkModeList(std::unique_ptr<OBDepthWorkModeListImpl> impl_);
~OBDepthWorkModeList();
/**
* @brief Get the number of OBDepthWorkMode objects in the list
*
* @return uint32_t the number of OBDepthWorkMode objects in the list
*/
uint32_t count();
/**
* @brief Get the OBDepthWorkMode object at the specified index
*
* @param index the index of the target OBDepthWorkMode object
* @return OBDepthWorkMode the OBDepthWorkMode object at the specified index
*/
OBDepthWorkMode getOBDepthWorkMode(uint32_t index);
/**
* @brief Get the name of the depth work mode at the specified index
*
* @param index the index of the depth work mode
* @return const char* the name of the depth work mode
*/
const char *getName(uint32_t index);
/**
* @brief Get the OBDepthWorkMode object at the specified index
*
* @param index the index of the target OBDepthWorkMode object
* @return OBDepthWorkMode the OBDepthWorkMode object at the specified index
*/
OBDepthWorkMode operator[](uint32_t index);
};
/**
* @brief Class representing a list of device presets
* @breif A device preset is a set of parameters or configurations that can be applied to the device to achieve a specific effect or function.
*/
class OB_EXTENSION_API DevicePresetList {
private:
std::unique_ptr<DevicePresetListImpl> impl_;
public:
DevicePresetList(std::unique_ptr<DevicePresetListImpl> impl);
~DevicePresetList() noexcept;
/**
* @brief Get the number of device presets in the list
*
* @return uint32_t the number of device presets in the list
*/
uint32_t count();
/**
* @brief Get the name of the device preset at the specified index
*
* @param index the index of the device preset
* @return const char* the name of the device preset
*/
const char *getName(uint32_t index);
/**
* @breif check if the preset list contains the special name preset.
* @param name The name of the preset
* @return bool Returns true if the special name is found in the preset list, otherwise returns false.
*/
bool hasPreset(const char *name);
};
} // namespace ob
@@ -0,0 +1,49 @@
/**
* @file Error.hpp
* @brief This file defines the Error class, which describes abnormal errors within the SDK.
* Detailed information about the exception can be obtained through this class.
*/
#pragma once
#include "Types.hpp"
#include <memory>
struct ErrorImpl;
namespace ob {
class OB_EXTENSION_API Error {
private:
std::unique_ptr<ErrorImpl> impl_;
public:
Error(std::unique_ptr<ErrorImpl> impl) noexcept;
Error(const Error &error) noexcept;
~Error() noexcept;
/**
* @brief Get the detailed error logs of SDK internal exceptions.
* @return A C-style string containing the error message.
*/
const char *getMessage() const noexcept;
/**
* @brief Get the exception type of the error, which can be used to determine which module is abnormal.
* @return The OBExceptionType enum value.
*/
OBExceptionType getExceptionType() const noexcept;
/**
* @brief Get the name of the error function.
* @return A C-style string containing the name of the error function.
*/
const char *getName() const noexcept;
/**
* @brief Get the parameter passed to the error interface.
* @return A C-style string containing the error interface parameter.
*/
const char *getArgs() const noexcept;
};
} // namespace ob
@@ -0,0 +1,651 @@
/**
* @file Filter.hpp
* @brief This file contains the Filter class, which is the processing unit of the SDK that can perform point cloud generation, format conversion, and other
* functions.
*/
#pragma once
#include "Types.hpp"
#include <functional>
#include <memory>
#include <map>
#include <string>
#include <iostream>
namespace ob {
class Frame;
class OBFilterList;
/**
* @brief A callback function that takes a shared pointer to a Frame object as its argument.
*/
typedef std::function<void(std::shared_ptr<Frame>)> FilterCallback;
/**
* @brief The Filter class is the base class for all filters in the SDK.
*/
class OB_EXTENSION_API Filter : public std::enable_shared_from_this<Filter> {
public:
Filter();
Filter(std::shared_ptr<FilterImpl> impl);
virtual ~Filter() = default;
/**
* @brief ReSet the filter, freeing the internal cache, stopping the processing thread, and clearing the pending buffer frame when asynchronous processing
* is used.
*/
virtual void reset();
/**
* @brief enable the filter
*/
void enable(bool enable);
/**
* @brief Return Enable State
*/
bool isEnabled();
/**
* @brief Processes a frame synchronously.
*
* @param frame The frame to be processed.
* @return std::shared_ptr< Frame > The processed frame.
*/
virtual std::shared_ptr<Frame> process(std::shared_ptr<Frame> frame);
/**
* @brief Pushes the pending frame into the cache for asynchronous processing.
*
* @param frame The pending frame. The processing result is returned by the callback function.
*/
virtual void pushFrame(std::shared_ptr<Frame> frame);
/**
* @brief Set the callback function for asynchronous processing.
*
* @param callback The processing result callback.
*/
virtual void setCallBack(FilterCallback callback);
/**
* @brief Get the type of filter.
*
* @return string The type of filte.
*/
virtual const char *type();
/**
* @brief Check if the runtime type of the filter object is compatible with a given type.
*
* @tparam T The given type.
* @return bool The result.
*/
template <typename T> bool is();
/**
* @brief Convert the filter object to a target type.
*
* @tparam T The target type.
* @return std::shared_ptr<T> The result. If it cannot be converted, an exception will be thrown.
*/
template <typename T> std::shared_ptr<T> as() {
if(!is<T>()) {
throw std::runtime_error("unsupported operation, object's type is not require type");
}
return std::static_pointer_cast<T>(shared_from_this());
}
protected:
std::shared_ptr<FilterImpl> impl_;
std::string type_;
friend class OBFilterList;
};
/**
* @brief The PointCloudFilter class is a subclass of Filter that generates point clouds.
*/
class OB_EXTENSION_API PointCloudFilter : public Filter {
public:
PointCloudFilter();
/**
* @brief Set the point cloud type parameters.
*
* @param type The point cloud type: depth point cloud or RGBD point cloud.
*/
void setCreatePointFormat(OBFormat type);
/**
* @brief Set the camera parameters.
*
* @param param The camera internal and external parameters.
*/
void setCameraParam(OBCameraParam param);
/**
* @brief Set the frame alignment state that will be input to generate point cloud.
*
* @param state The alignment status. True: enable alignment; False: disable alignment.
*/
void setFrameAlignState(bool state);
/**
* @brief Set the point cloud coordinate data zoom factor.
*
* @attention Calling this function to set the scale will change the point coordinate scaling factor of the output point cloud frame: posScale = posScale /
* scale. The point coordinate scaling factor for the output point cloud frame can be obtained via @ref PointsFrame::getPositionValueScale function.
*
* @param scale The zoom factor.
*/
void setPositionDataScaled(float scale);
/**
* @brief Set point cloud color data normalization.
*
* @param state Whether normalization is required.
*/
void setColorDataNormalization(bool state);
/**
* @brief Set the point cloud coordinate system.
*
* @param type The coordinate system type.
*/
void setCoordinateSystem(OBCoordinateSystemType type);
};
/**
* @brief The FormatConvertFilter class is a subclass of Filter that performs format conversion.
*/
class OB_EXTENSION_API FormatConvertFilter : public Filter {
public:
FormatConvertFilter();
/**
* @brief Set the format conversion type.
*
* @param type The format conversion type.
*/
void setFormatConvertType(OBConvertFormat type);
};
/**
* @brief The CompressionFilter class is a subclass of Filter that performs compression.
*/
class OB_EXTENSION_API CompressionFilter : public Filter {
public:
CompressionFilter();
/**
* @brief Set the compression parameters.
*
* @param mode The compression mode: OB_COMPRESSION_LOSSLESS or OB_COMPRESSION_LOSSY.
* @param params The compression parameters. When mode is OB_COMPRESSION_LOSSLESS, params is NULL.
*/
void setCompressionParams(OBCompressionMode mode, void *params);
};
/**
* @brief The DecompressionFilter class is a subclass of Filter that performs decompression.
*/
class OB_EXTENSION_API DecompressionFilter : public Filter {
public:
DecompressionFilter();
};
/**
* @brief Hole filling filter,the processing performed depends on the selected hole filling mode.
*/
class OB_EXTENSION_API HoleFillingFilter : public Filter {
public:
HoleFillingFilter();
/**
* @brief Set the HoleFillingFilter mode.
*
* @param[in] filter A holefilling_filter object.
* @param mode OBHoleFillingMode, OB_HOLE_FILL_TOP,OB_HOLE_FILL_NEAREST or OB_HOLE_FILL_FAREST.
*/
void setFilterMode(OBHoleFillingMode mode);
/**
* @brief Get the HoleFillingFilter mode.
*
* @return OBHoleFillingMode
*/
OBHoleFillingMode getFilterMode();
};
/**
* @brief Temporal filter
*/
class OB_EXTENSION_API TemporalFilter : public Filter {
public:
TemporalFilter();
/**
* @brief Get the TemporalFilter diffscale range.
*
* @return OBFloatPropertyRange the diffscale value of property range.
*/
OBFloatPropertyRange getDiffScaleRange();
/**
* @brief Set the TemporalFilter diffscale value.
*
* @param value diffscale value.
*/
void setDiffScale(float value);
/**
* @brief Get the TemporalFilter weight range.
*
* @return OBFloatPropertyRange the weight value of property range.
*/
OBFloatPropertyRange getWeightRange();
/**
* @brief Set the TemporalFilter weight value.
*
* @param value weight value.
*/
void setWeight(float value);
};
/**
* @brief Spatial advanced filter smooths the image by calculating frame with alpha and delta settings
* alpha defines the weight of the current pixel for smoothing,
* delta defines the depth gradient below which the smoothing will occur as number of depth levels.
*/
class OB_EXTENSION_API SpatialAdvancedFilter : public Filter {
public:
SpatialAdvancedFilter();
/**
* @brief Get the spatial advanced filter alpha range.
*
* @return OBFloatPropertyRange the alpha value of property range.
*/
OBFloatPropertyRange getAlphaRange();
/**
* @brief Get the spatial advanced filter dispdiff range.
*
* @return OBUint16PropertyRange the dispdiff value of property range.
*/
OBUint16PropertyRange getDispDiffRange();
/**
* @brief Get the spatial advanced filter radius range.
*
* @return OBUint16PropertyRange the radius value of property range.
*/
OBUint16PropertyRange getRadiusRange();
/**
* @brief Get the spatial advanced filter magnitude range.
*
* @return OBIntPropertyRange the magnitude value of property range.
*/
OBIntPropertyRange getMagnitudeRange();
/**
* @brief Get the spatial advanced filter params.
*
* @return OBSpatialAdvancedFilterParams
*/
OBSpatialAdvancedFilterParams getFilterParams();
/**
* @brief Set the spatial advanced filter params.
*
* @param params OBSpatialAdvancedFilterParams.
*/
void setFilterParams(OBSpatialAdvancedFilterParams params);
};
/**
* @brief Spatial fast filter smooths the image by calculating frame with filter window size settings
*/
class OB_EXTENSION_API SpatialFastFilter : public Filter {
public:
SpatialFastFilter();
/**
* @brief Get the spatial fast filter window size range
*
* @return OBUint8PropertyRange the windows size value of property range.
*/
OBUint8PropertyRange getSizeRange();
/**
* @brief Get the spatial fast filter params.
*
* @return OBSpatialFastFilterParams
*/
OBSpatialFastFilterParams getFilterParams();
/**
* @brief Set the spatial fast filter params.
*
* @param params OBSpatialFastFilterParams.
*/
void setFilterParams(OBSpatialFastFilterParams params);
};
/**
* @brief Spatial moderate filter smooths the image by calculating frame with filter window size,magnitude and disp diff settings
*/
class OB_EXTENSION_API SpatialModerateFilter : public Filter {
public:
SpatialModerateFilter();
/**
* @brief Get the spatial moderate filter window size range
*
* @return OBUint8PropertyRange the windows size value of property range.
*/
OBUint8PropertyRange getSizeRange();
/**
* @brief Get the spatial moderate filter magnitude range.
*
* @return OBUint8PropertyRange the magnitude value of property range.
*/
OBUint8PropertyRange getMagnitudeRange();
/**
* @brief Get the spatial moderate filter dispdiff range.
*
* @return OBUint16PropertyRange the dispdiff value of property range.
*/
OBUint16PropertyRange getDispDiffRange();
/**
* @brief Get the spatial moderate filter params.
*
* @return OBSpatialModerateFilterParams
*/
OBSpatialModerateFilterParams getFilterParams();
/**
* @brief Set the spatial moderate filter params.
*
* @param params OBSpatialModerateFilterParams.
*/
void setFilterParams(OBSpatialModerateFilterParams params);
};
/**
* @brief Depth to disparity or disparity to depth
*/
class OB_EXTENSION_API DisparityTransform : public Filter {
public:
/**
* @brief Create a disparity transform.
* @param depth_to_disparity disparity to depth or depth to disparity Conversion.
*/
DisparityTransform(bool depth_to_disparity);
};
/**
* @brief HdrMerge processing block,
* the processing merges between depth frames with
* different sub-preset sequence ids.
*/
class OB_EXTENSION_API HdrMerge : public Filter {
public:
HdrMerge();
};
/**
* @brief Align for depth to other or other to depth.
*/
class OB_EXTENSION_API Align : public Filter {
public:
/**
* @brief Creaet Align filter.
* @param OBStreamType alignment is performed between a depth image and another image.
*/
Align(OBStreamType align_to_stream);
/**
* @brief Get the stream type to be aligned with.
*
* @return OBStreamType The stream type of align to.
*/
OBStreamType getAlignToStreamType();
};
/**
* @brief Creates depth Thresholding filter
* By controlling min and max options on the block
*/
class OB_EXTENSION_API ThresholdFilter : public Filter {
public:
ThresholdFilter();
/**
* @brief Get the threshold filter min range.
*
* @return OBIntPropertyRange The range of the threshold filter min.
*/
OBIntPropertyRange getMinRange();
/**
* @brief Get the threshold filter max range.
*
* @return OBIntPropertyRange The range of the threshold filter max.
*/
OBIntPropertyRange getMaxRange();
/**
* @brief Get the threshold filter max and min range.
*/
bool setValueRange(uint16_t min, uint16_t max);
};
/**
* @brief Create SequenceIdFilter processing block.
*/
class OB_EXTENSION_API SequenceIdFilter : public Filter {
public:
SequenceIdFilter();
/**
* @brief Set the sequenceId filter params.
*
* @param sequence id to pass the filter.
*/
void selectSequenceId(int sequence_id);
/**
* @brief Get the current sequence id.
*
* @return sequence id to pass the filter.
*/
int getSelectSequenceId();
/**
* @brief Get the current sequence id list.
*
* @return OBSequenceIdItem.
*/
OBSequenceIdItem *getSequenceIdList();
/**
* @brief Get the sequenceId list size.
*
* @return the size of sequenceId list.
*/
int getSequenceIdListSize();
};
/**
* @brief The noise removal filter,removing scattering depth pixels.
*/
class OB_EXTENSION_API NoiseRemovalFilter : public Filter {
public:
NoiseRemovalFilter();
/**
* @brief Set the noise removal filter params.
*
* @param[in] params ob_noise_removal_filter_params.
*/
void setFilterParams(OBNoiseRemovalFilterParams filterParams);
/**
* @brief Get the noise removal filter params.
*
* @return OBNoiseRemovalFilterParams.
*/
OBNoiseRemovalFilterParams getFilterParams();
/**
* @brief Get the noise removal filter disp diff range.
* @return OBUint16PropertyRange The disp diff of property range.
*/
OBUint16PropertyRange getDispDiffRange();
/**
* @brief Get the noise removal filter max size range.
* @return OBUint16PropertyRange The max size of property range.
*/
OBUint16PropertyRange getMaxSizeRange();
};
/**
* @brief Decimation filter,reducing complexity by subsampling depth maps and losing depth details.
*/
class OB_EXTENSION_API DecimationFilter : public Filter {
public:
DecimationFilter();
/**
* @brief Set the decimation filter scale value.
*
* @param type The decimation filter scale value.
*/
void setScaleValue(uint8_t value);
/**
* @brief Get the decimation filter scale value.
*/
uint8_t getScaleValue();
/**
* @brief Get the property range of the decimation filter scale value.
*/
OBUint8PropertyRange getScaleRange();
};
/**
* @brief The edge noise removal filter,removing scattering depth pixels.
*/
class OB_EXTENSION_API EdgeNoiseRemovalFilter : public Filter {
public:
EdgeNoiseRemovalFilter();
/**
* @brief Set the edge noise removal filter params.
*
* @param[in] params ob_edge_noise_removal_filter_params.
*/
void setFilterParams(OBEdgeNoiseRemovalFilterParams filterParams);
/**
* @brief Get the edge noise removal filter params.
*
* @return OBEdgeNoiseRemovalFilterParams.
*/
OBEdgeNoiseRemovalFilterParams getFilterParams();
/**
* @brief Get the edge noise removal filter margin left th range.
* @return OBUint16PropertyRange The disp diff of property range.
*/
OBUint16PropertyRange getMarginLeftThRange();
/**
* @brief Get the edge noise removal filter margin right th range.
* @return OBUint16PropertyRange The max size of property range.
*/
OBUint16PropertyRange getMarginRightThRange();
/**
* @brief Get the edge noise removal filter margin top th range.
* @return OBUint16PropertyRange The disp diff of property range.
*/
OBUint16PropertyRange getMarginTopThRange();
/**
* @brief Get the edge noise removal filter margin bottom th range.
* @return OBUint16PropertyRange The max size of property range.
*/
OBUint16PropertyRange getMarginBottomThRange();
};
// Define the is() template function for the Filter class
template <typename T> bool Filter::is() {
std::string name = type();
if(name == "HDRMerge") {
return typeid(T) == typeid(HdrMerge);
}
if(name == "SequenceIdFilter") {
return typeid(T) == typeid(SequenceIdFilter);
}
if(name == "ThresholdFilter") {
return typeid(T) == typeid(ThresholdFilter);
}
if(name == "DisparityTransform") {
return typeid(T) == typeid(DisparityTransform);
}
if(name == "NoiseRemovalFilter") {
return typeid(T) == typeid(NoiseRemovalFilter);
}
if(name == "SpatialAdvancedFilter") {
return typeid(T) == typeid(SpatialAdvancedFilter);
}
if(name == "SpatialFastFilter") {
return typeid(T) == typeid(SpatialFastFilter);
}
if(name == "SpatialModerateFilter") {
return typeid(T) == typeid(SpatialModerateFilter);
}
if(name == "TemporalFilter") {
return typeid(T) == typeid(TemporalFilter);
}
if(name == "HoleFillingFilter") {
return typeid(T) == typeid(HoleFillingFilter);
}
if(name == "DecimationFilter") {
return typeid(T) == typeid(DecimationFilter);
}
if(name == "PointCloudFilter") {
return typeid(T) == typeid(PointCloudFilter);
}
if(name == "CompressionFilter") {
return typeid(T) == typeid(CompressionFilter);
}
if(name == "DecompressionFilter") {
return typeid(T) == typeid(DecompressionFilter);
}
if(name == "FormatConverter") {
return typeid(T) == typeid(FormatConvertFilter);
}
if(name == "Align") {
return typeid(T) == typeid(Align);
}
if(name == "EdgeNoiseRemovalFilter") {
return typeid(T) == typeid(EdgeNoiseRemovalFilter);
}
return false;
}
} // namespace ob
@@ -0,0 +1,538 @@
/**
* @file Frame.hpp
* @brief Frame related type, which is mainly used to obtain frame data and frame information.
*
*/
#pragma once
#include "Types.hpp"
#include <memory>
#include <iostream>
#include <typeinfo>
/**
* Frame class
* Frame
* |
* +------+----------+----------+-----------+
* | | | | |
* VideoFrame PointsFrame AccelFrame GyroFrame FrameSet
* |
* +--+------+---------+
* | | |
* ColorFrame DepthFrame IRFrame
* |
* +-----+-----+
* | |
* IRLeftFrame IRRightFrame
*/
struct FrameImpl;
namespace ob {
class Device;
class Sensor;
class StreamProfile;
class Filter;
class FrameHelper;
typedef std::function<void(void *buffer, void *context)> BufferDestroyCallback;
class OB_EXTENSION_API Frame : public std::enable_shared_from_this<Frame> {
protected:
std::unique_ptr<FrameImpl> impl_;
public:
explicit Frame(std::unique_ptr<FrameImpl> impl);
Frame(Frame &frame);
virtual ~Frame() noexcept;
/**
* @brief Get the type of frame.
*
* @return OBFrameType The type of frame.
*/
virtual OBFrameType type();
/**
* @brief Get the format of the frame.
*
* @return OBFormat The format of the frame.
*/
virtual OBFormat format();
/**
* @brief Get the sequence number of the frame.
*
* @return uint64_t The sequence number of the frame.
*/
virtual uint64_t index();
/**
* @brief Get the frame data.
*
* @return void* The frame data.
*/
virtual void *data();
/**
* @brief Get the size of the frame data.
*
* @return uint32_t The size of the frame data.
* For point cloud data, this returns the number of bytes occupied by all point sets. To find the number of points, divide the dataSize by the structure
* size of the corresponding point type.
*/
virtual uint32_t dataSize();
/**
* @brief Get the hardware timestamp of the frame in milliseconds.
* @brief The hardware timestamp is the time point when the frame was captured by the device, on device clock domain.
*
* @return uint64_t The hardware timestamp of the frame in milliseconds.
*/
uint64_t timeStamp();
/**
* @brief Get the hardware timestamp of the frame in microseconds.
* @brief The hardware timestamp is the time point when the frame was captured by the device, on device clock domain.
*
* @return uint64_t The hardware timestamp of the frame in microseconds.
*/
uint64_t timeStampUs();
/**
* @brief Get the system timestamp of the frame in milliseconds.
* @brief The system timestamp is the time point when the frame was received by the host, on host clock domain.
*
* @return uint64_t The system timestamp of the frame in milliseconds.
*/
uint64_t systemTimeStamp();
/**
* @brief Get the system timestamp of the frame in microseconds.
* @brief The system timestamp is the time point when the frame was received by the host, on host clock domain.
*
* @return uint64_t The system timestamp of the frame in microseconds.
*/
uint64_t systemTimeStampUs();
/**
* @brief Get the global timestamp of the frame in microseconds.
* @brief The global timestamp is the time point when the frame was was captured by the device, and has been converted to the host clock domain. The
* conversion process base on the device timestamp and can eliminate the timer drift of the device
*
* @attention Only some devices support getting the global timestamp. If the device does not support it, this function will return 0. Check the device
* support status by @ref Device::isGlobalTimestampSupported() function.
*
* @return uint64_t The global timestamp of the frame in microseconds.
*/
uint64_t globalTimeStampUs();
/**
* @brief Get the metadata of the frame.
*
* @return void* The metadata of the frame.
*/
void *metadata();
/**
* @brief Get the size of the metadata of the frame.
*
* @return uint32_t The size of the metadata of the frame.
*/
uint32_t metadataSize();
/**
* @brief Check if the frame object has metadata of a given type.
*
* @param type The metadata type. refer to @ref OBFrameMetadataType
* @return bool The result.
*/
bool hasMetadata(OBFrameMetadataType type);
/**
* @brief Get the metadata value
*
* @param type The metadata type. refer to @ref OBFrameMetadataType
* @return int64_t The metadata value.
*/
int64_t getMetadataValue(OBFrameMetadataType type);
/**
* @brief get StreamProfile of the frame
*
* @return std::shared_ptr<StreamProfile> The StreamProfile of the frame, may return nullptr if the frame is not captured from a stream.
*/
std::shared_ptr<StreamProfile> getStreamProfile();
/**
* @brief get owner sensor of the frame
*
* @return std::shared_ptr<Sensor> The owner sensor of the frame, return nullptr if the frame is not owned by any sensor or the sensor is destroyed
*/
std::shared_ptr<Sensor> getSensor();
/**
* @brief get owner device of the frame
*
* @return std::shared_ptr<Device> The owner device of the frame, return nullptr if the frame is not owned by any device or the device is destroyed
*/
std::shared_ptr<Device> getDevice();
/**
* @brief Check if the runtime type of the frame object is compatible with a given type.
*
* @tparam T The given type.
* @return bool The result.
*/
template <typename T> bool is();
/**
* @brief Convert the frame object to a target type.
*
* @tparam T The target type.
* @return std::shared_ptr<T> The result. If it cannot be converted, an exception will be thrown.
*/
template <typename T> std::shared_ptr<T> as() {
if(!is<T>()) {
throw std::runtime_error("unsupported operation, object's type is not require type");
}
return std::dynamic_pointer_cast<T>(shared_from_this());
}
private:
friend class Filter;
friend class Recorder;
friend class FrameHelper;
friend class CoordinateTransformHelper;
};
class OB_EXTENSION_API VideoFrame : public Frame {
public:
explicit VideoFrame(Frame &frame);
explicit VideoFrame(std::unique_ptr<FrameImpl> impl);
~VideoFrame() noexcept override = default;
/**
* @brief Get the width of the frame.
*
* @return uint32_t The width of the frame.
*/
uint32_t width();
/**
* @brief Get the height of the frame.
*
* @return uint32_t The height of the frame.
*/
uint32_t height();
/**
* @brief Get the effective number of pixels in the frame.
* @attention Only valid for Y8/Y10/Y11/Y12/Y14/Y16 format.
*
* @return uint8_t The effective number of pixels in the frame, or 0 if it is an unsupported format.
*/
uint8_t pixelAvailableBitSize();
};
class OB_EXTENSION_API ColorFrame : public VideoFrame {
public:
explicit ColorFrame(Frame &frame);
explicit ColorFrame(std::unique_ptr<FrameImpl> impl);
~ColorFrame() noexcept override = default;
};
class OB_EXTENSION_API DepthFrame : public VideoFrame {
public:
explicit DepthFrame(Frame &frame);
explicit DepthFrame(std::unique_ptr<FrameImpl> impl);
~DepthFrame() noexcept override = default;
/**
* @brief Get the value scale of the depth frame. The pixel value of depth frame is multiplied by the scale to give a depth value in millimeters.
* For example, if valueScale=0.1 and a certain coordinate pixel value is pixelValue=10000, then the depth value = pixelValue*valueScale =
* 10000*0.1=1000mm.
*
* @return float The scale.
*/
float getValueScale();
};
class OB_EXTENSION_API IRFrame : public VideoFrame {
public:
explicit IRFrame(Frame &frame);
explicit IRFrame(std::unique_ptr<FrameImpl> impl);
~IRFrame() noexcept override = default;
public:
OBSensorType getDataSource();
};
class OB_EXTENSION_API PointsFrame : public Frame {
public:
explicit PointsFrame(Frame &frame);
explicit PointsFrame(std::unique_ptr<FrameImpl> impl);
~PointsFrame() noexcept override = default;
/**
* @brief Get the point position value scale of the points frame. The point position value of the points frame is multiplied by the scale to give a position
* value in millimeters. For example, if scale=0.1, the x-coordinate value of a point is x = 10000, which means that the actual x-coordinate value = x*scale
* = 10000*0.1 = 1000mm.
*
* @return float The position value scale.
*/
float getPositionValueScale();
};
/**
* @brief Define the FrameSet class, which inherits from the Frame class
*
*/
class OB_EXTENSION_API FrameSet : public Frame {
public:
explicit FrameSet(std::unique_ptr<FrameImpl> impl);
explicit FrameSet(Frame &frame);
~FrameSet() noexcept override;
/**
* @brief Get the number of frames in the FrameSet
*
* @return uint32_t The number of frames
*/
uint32_t frameCount();
/**
* @brief Get the depth frame in the FrameSet
*
* @return std::shared_ptr<DepthFrame> The depth frame
*/
std::shared_ptr<DepthFrame> depthFrame();
/**
* @brief Get the color frame in the FrameSet
*
* @return std::shared_ptr<ColorFrame> The color frame
*/
std::shared_ptr<ColorFrame> colorFrame();
/**
* @brief Get the infrared frame in the FrameSet
*
* @return std::shared_ptr<IRFrame> The infrared frame
*/
std::shared_ptr<IRFrame> irFrame();
/**
* @brief Get the point cloud frame in the FrameSet
*
* @return std::shared_ptr<PointsFrame> The point cloud data frame
*/
std::shared_ptr<PointsFrame> pointsFrame();
/**
* @brief Get a frame of a specific type from the FrameSet
*
* @param frameType The type of sensor
* @return std::shared_ptr<Frame> The corresponding type of frame
*/
std::shared_ptr<Frame> getFrame(OBFrameType frameType);
/**
* @brief Get a frame at a specific index from the FrameSet
*
* @param index The index of the frame
* @return std::shared_ptr<Frame> The frame at the specified index
*/
std::shared_ptr<Frame> getFrame(int index);
// Declare Pipeline and Filter classes as friends
friend class Pipeline;
friend class Filter;
};
/**
* @brief Define the AccelFrame class, which inherits from the Frame class
*
*/
class OB_EXTENSION_API AccelFrame : public Frame {
public:
explicit AccelFrame(Frame &frame);
explicit AccelFrame(std::unique_ptr<FrameImpl> impl);
~AccelFrame() noexcept override = default;
/**
* @brief Get the accelerometer frame data
*
* @return OBAccelValue The accelerometer frame data
*/
OBAccelValue value();
/**
* @brief Get the temperature when the frame was sampled
*
* @return float The temperature value
*/
float temperature();
};
/**
* @brief Define the GyroFrame class, which inherits from the Frame class
*/
class OB_EXTENSION_API GyroFrame : public Frame {
public:
explicit GyroFrame(Frame &frame);
explicit GyroFrame(std::unique_ptr<FrameImpl> impl);
~GyroFrame() noexcept override = default;
/**
* @brief Get the gyro frame data
*
* @return OBAccelValue The gyro frame data
*/
OBGyroValue value();
/**
* @brief Get the temperature when the frame was sampled
*
* @return float The temperature value
*/
float temperature();
};
/**
* @brief Define the RawPhaseFrame class, which inherits from the VideoFrame class
*/
class OB_EXTENSION_API RawPhaseFrame : public VideoFrame {
public:
explicit RawPhaseFrame(Frame &frame);
explicit RawPhaseFrame(std::unique_ptr<FrameImpl> impl);
~RawPhaseFrame() noexcept override = default;
};
/**
* @brief Define the FrameHelper class
*/
class OB_EXTENSION_API FrameHelper {
public:
/**
* @brief Create a Frame object.
*
* @param[in] type The type of frame. See @ref OBFrameType.
* @param[in] format The format of the frame. See @ref OBFormat.
* @param[in] width The width of the frame.
* @param[in] height The height of the frame.
* @param[in] strideBytes The stride of the frame in bytes. If strideBytes > 0, the frame data size = height * strideBytes. If strideBytes = 0, the frame
* datasize = height * width * pixelSize (pixelSize according to the format).
*
* @return std::shared_ptr<Frame> The created frame object.
*/
static std::shared_ptr<Frame> createFrame(OBFrameType type, OBFormat format, uint32_t width, uint32_t height, uint32_t strideBytes);
/**
* @brief Create a frame object based on an externally created buffer
*
* @param[in] format The format of the frame. See @ref OBFormat.
* @param[in] width The width of the frame.
* @param[in] height The height of the frame.
* @param[in] buffer The frame object buffer
* @param[in] bufferSize The frame object buffer size
* @param[in] destroyCallback The frame object buffer destroy callback
* @param[in] destroyCallbackContext The frame object buffer destroy callback context
*
* @return std::shared_ptr<Frame> The created frame object
*/
static std::shared_ptr<Frame> createFrameFromBuffer(OBFormat format, uint32_t width, uint32_t height, uint8_t *buffer, uint32_t bufferSize,
BufferDestroyCallback destroyCallback, void *destroyCallbackContext);
/**
* @brief Create an empty FrameSet object
*
* @return std::shared_ptr<Frame> The FrameSet object
*/
static std::shared_ptr<FrameSet> createFrameSet();
/**
* @brief Add a frame of a specific type to the FrameSet
*
* @param frameSet The FrameSet object
* @param frameType The type of frame to add
* @param frame The frame object to add
*/
static void pushFrame(std::shared_ptr<Frame> frameSet, OBFrameType frameType, std::shared_ptr<Frame> frame);
/**
* @brief Set the system timestamp of the frame.
*
* @param frame The frame object.
* @param systemTimestamp The system timestamp to set in milliseconds.
*/
static void setFrameSystemTimestamp(std::shared_ptr<Frame> frame, uint64_t systemTimestamp);
/**
* @brief Set the device timestamp of the frame.
*
* @param frame The frame object.
* @param deviceTimestamp The device timestamp to set in milliseconds.
*/
static void setFrameDeviceTimestamp(std::shared_ptr<Frame> frame, uint64_t deviceTimestamp);
/**
* @brief Set the device timestamp of the frame.
*
* @param frame The frame object.
* @param deviceTimestampUs The device timestamp to set in microseconds.
*/
static void setFrameDeviceTimestampUs(std::shared_ptr<Frame> frame, uint64_t deviceTimestampUs);
};
// Define the is() template function for the Frame class
template <typename T> bool Frame::is() {
switch(this->type()) {
case OB_FRAME_IR_LEFT: // Follow
case OB_FRAME_IR_RIGHT: // Follow
case OB_FRAME_IR:
return (typeid(T) == typeid(IRFrame) || typeid(T) == typeid(VideoFrame));
case OB_FRAME_DEPTH:
return (typeid(T) == typeid(DepthFrame) || typeid(T) == typeid(VideoFrame));
case OB_FRAME_COLOR:
return (typeid(T) == typeid(ColorFrame) || typeid(T) == typeid(VideoFrame));
case OB_FRAME_GYRO:
return (typeid(T) == typeid(GyroFrame));
case OB_FRAME_ACCEL:
return (typeid(T) == typeid(AccelFrame));
case OB_FRAME_SET:
return (typeid(T) == typeid(FrameSet));
case OB_FRAME_POINTS:
return (typeid(T) == typeid(PointsFrame));
case OB_FRAME_RAW_PHASE:
return (typeid(T) == typeid(RawPhaseFrame) || typeid(T) == typeid(VideoFrame));
default:
std::cout << "ob::Frame::is() did not catch frame type: " << (int)this->type() << std::endl;
break;
}
return false;
}
} // namespace ob
@@ -0,0 +1,335 @@
/**
* @file Pipeline.hpp
* @brief The SDK's advanced API type can quickly implement switching streaming and frame synchronization
* operations.
*/
#pragma once
#include "Types.hpp"
#include <functional>
#include <memory>
struct PipelineImpl;
struct ConfigImpl;
namespace ob {
class FrameSet;
class Frame;
class Device;
class Playback;
class DeviceInfo;
class Config;
class StreamProfile;
class StreamProfileList;
typedef std::function<void(std::shared_ptr<FrameSet> frame)> FrameSetCallback;
class OB_EXTENSION_API Pipeline {
private:
std::unique_ptr<PipelineImpl> impl_;
public:
/**
* @brief Pipeline is a high-level interface for applications, algorithms related RGBD data streams. Pipeline can provide alignment inside and synchronized
* FrameSet. Pipeline() no parameter version, which opens the first device in the list of devices connected to the OS by default. If the application has
* obtained the device through the DeviceList, opening the Pipeline() at this time will throw an exception that the device has been created.
*/
Pipeline();
/**
* @brief
* Pipeline(std::shared_ptr< Device > device ) Function for multi-device operations. Multiple devices need to be obtained through DeviceList, and the device
* and pipeline are bound through this interface.
*/
Pipeline(std::shared_ptr<Device> device);
/**
* @brief Construct a pipeline for playback of recorded stream files
*
* @param filename The file path of the recorded stream file to be played back
*/
Pipeline(const char *filename);
/**
* @brief Destroy the pipeline object
*/
~Pipeline() noexcept;
/**
* @brief Start the pipeline with configuration parameters
*
* @param config The parameter configuration of the pipeline
*/
void start(std::shared_ptr<Config> config);
/**
* @brief Start the pipeline with default configuration parameters
*/
void start();
/**
* @brief Start the pipeline and set the frameset data callback
*
* @param config The configuration of the pipeline
* @param callback The callback to be triggered when all frame data in the frameset arrives
*/
void start(std::shared_ptr<Config> config, FrameSetCallback callback);
/**
* @brief Stop the pipeline
*/
void stop();
/**
* @brief get Enabled Stream Profile List,It must be called after the pipeline is started, otherwise it will return an empty list
*/
std::shared_ptr<StreamProfileList> getEnabledStreamProfileList();
/**
* @brief Get the pipeline configuration parameters
* @brief Returns the default configuration if the user has not configured it
*
* @return std::shared_ptr<Config> The configured parameters
*/
std::shared_ptr<Config> getConfig();
/**
* @brief Wait for frameset data
*
* @param timeout_ms The waiting timeout in milliseconds
* @return std::shared_ptr<FrameSet> The waiting frameset data
*/
std::shared_ptr<FrameSet> waitForFrames(uint32_t timeout_ms = 1000);
/**
* @brief Get the device object
*
* @return std::shared_ptr<Device> The device object
*/
std::shared_ptr<Device> getDevice();
/**
* @brief Get the playback object
*
* @return std::shared_ptr<Playback> The playback object
*/
std::shared_ptr<Playback> getPlayback();
/**
* @brief Get the stream profile of the specified sensor
*
* @param sensorType The type of sensor
* @return std::shared_ptr<StreamProfileList> The stream profile list
*/
std::shared_ptr<StreamProfileList> getStreamProfileList(OBSensorType sensorType);
/**
* @brief Turn on frame synchronization
*/
void enableFrameSync();
/**
* @brief Turn off frame synchronization
*/
void disableFrameSync();
/**
* @brief Get the camera parameters
*
* @note If D2C is enabled, it will return the camera parameters after D2C. If not, it will return the default parameters.
*
* @return OBCameraParam The camera parameters
*/
OBCameraParam getCameraParam();
/**
* @brief Get camera parameters by entering color and depth resolution
* @attention If D2C is enabled, it will return the camera parameters after D2C, if not, it will return to the default parameters
*
* @param colorWidth Width of color resolution
* @param colorHeight High of color resolution
* @param depthWidth Width of depth resolution
* @param depthHeight High of depth resolution
*
* @return OBCameraParam returns camera parameters
*/
OBCameraParam getCameraParamWithProfile(uint32_t colorWidth, uint32_t colorHeight, uint32_t depthWidth, uint32_t depthHeight);
/**
* @brief Get the calibration parameters
*
* @param config The configured parameters
*
* @return OBCalibrationParam The calibration parameters
*/
OBCalibrationParam getCalibrationParam(std::shared_ptr<Config> config);
/**
* @brief Return a list of D2C-enabled depth sensor resolutions corresponding to the input color sensor resolution
*
* @param colorProfile The input color sensor resolution
* @param alignMode The input align mode
* @return std::shared_ptr<StreamProfileList> A list of depth sensor resolutions
*/
std::shared_ptr<StreamProfileList> getD2CDepthProfileList(std::shared_ptr<StreamProfile> colorProfile, OBAlignMode alignMode);
/**
* @brief Get the valid area between the minimum distance and maximum distance after D2C
*
* @param minimumDistance The minimum working distance
* @param maximumDistance The maximum working distance (optional)
* @return OBRect The area information valid after D2C at the working distance
*/
OBRect getD2CValidArea(uint32_t minimumDistance, uint32_t maximumDistance = 0);
/**
* @brief Dynamically switch the corresponding config configuration
*
* @param config The updated config configuration
*/
void switchConfig(std::shared_ptr<Config> config);
/**
* @brief Start recording
*
* @param filename The name of the record file
*/
void startRecord(const char *filename);
/**
* @brief Stop recording
*/
void stopRecord();
};
/**
* @brief Config class for configuring pipeline parameters
*
* The Config class provides an interface for configuring pipeline parameters.
*/
class OB_EXTENSION_API Config {
private:
std::unique_ptr<ConfigImpl> impl_;
public:
/**
* @brief Construct a new Config object
*/
Config();
/**
* @brief Destroy the Config object
*/
~Config() noexcept;
/**
* @brief Enable a stream to be used in the pipeline
*
* @param streamProfile The stream configuration to be enabled
*/
void enableStream(std::shared_ptr<StreamProfile> streamProfile);
/**
* @deprecated Use enableStream(std::shared_ptr<StreamProfile> streamProfile) instead
* @brief Enable all streams to be used in the pipeline
*/
void enableAllStream();
/**
* @brief Enable a video stream to be used in the pipeline.
*
* This function allows users to enable a video stream with customizable parameters.
* If no parameters are specified, the stream will be enabled with default resolution settings.
* Users who wish to set custom resolutions should refer to the product manual, as available resolutions vary by camera model.
*
* @param type The video stream type.
* @param width The video stream width (default is OB_WIDTH_ANY, which selects the default resolution).
* @param height The video stream height (default is OB_HEIGHT_ANY, which selects the default resolution).
* @param fps The video stream frame rate (default is OB_FPS_ANY, which selects the default frame rate).
* @param format The video stream format (default is OB_FORMAT_ANY, which selects the default format).
*/
void enableVideoStream(ob_stream_type type, int width = OB_WIDTH_ANY, int height = OB_HEIGHT_ANY, int fps = OB_FPS_ANY, OBFormat format = OB_FORMAT_ANY);
/**
* @brief Enable an accelerometer stream to be used in the pipeline.
*
* This function allows users to enable an accelerometer stream with customizable parameters.
* If no parameters are specified, the stream will be enabled with default settings.
* Users who wish to set custom full-scale ranges or sample rates should refer to the product manual, as available settings vary by device model.
*
* @param fullScaleRange The full-scale range of the accelerometer (default is OB_ACCEL_FULL_SCALE_RANGE_ANY, which selects the default range).
* @param sampleRate The sample rate of the accelerometer (default is OB_ACCEL_SAMPLE_RATE_ANY, which selects the default rate).
*/
void enableAccelStream(ob_accel_full_scale_range fullScaleRange = OB_ACCEL_FULL_SCALE_RANGE_ANY,
ob_accel_sample_rate sampleRate = OB_ACCEL_SAMPLE_RATE_ANY);
/**
* @brief Enable a gyroscope stream to be used in the pipeline.
*
* This function allows users to enable a gyroscope stream with customizable parameters.
* If no parameters are specified, the stream will be enabled with default settings.
* Users who wish to set custom full-scale ranges or sample rates should refer to the product manual, as available settings vary by device model.
*
* @param fullScaleRange The full-scale range of the gyroscope (default is OB_GYRO_FULL_SCALE_RANGE_ANY, which selects the default range).
* @param sampleRate The sample rate of the gyroscope (default is OB_GYRO_SAMPLE_RATE_ANY, which selects the default rate).
*/
void enableGyroStream(ob_gyro_full_scale_range fullScaleRange = OB_GYRO_FULL_SCALE_RANGE_ANY, ob_gyro_sample_rate sampleRate = OB_GYRO_SAMPLE_RATE_ANY);
/**
* @brief Disable a stream to be used in the pipeline
*
* @param streamType The stream configuration to be disabled
*/
void disableStream(OBStreamType streamType);
/**
* @brief Disable all streams to be used in the pipeline
*/
void disableAllStream();
/**
* @brief Get the Enabled Stream Profile List
*
* @return std::shared_ptr<StreamProfileList>
*/
std::shared_ptr<StreamProfileList> getEnabledStreamProfileList() const;
/**
* @brief Set the alignment mode
*
* @param mode The alignment mode
*/
void setAlignMode(OBAlignMode mode);
/**
* @brief Set whether the depth needs to be scaled after setting D2C
*
* @param enable Whether scaling is required
*/
void setDepthScaleRequire(bool enable);
/**
* @brief Set the D2C target resolution
* @brief The D2C target resolution is applicable to cases where the color stream is not enabled using the OrbbecSDK and the depth needs to be D2C.
*
* @note When you use OrbbecSDK to enable the color stream, you also use this interface to set the D2C target resolution. The configuration of the
* enabled Color stream is preferred for D2C.
*
* @param d2cTargetWidth The D2C target width resolution
* @param d2cTargetHeight The D2C target height resolution
*/
void setD2CTargetResolution(uint32_t d2cTargetWidth, uint32_t d2cTargetHeight);
/**
* @brief Set the frame aggregation output mode for the pipeline configuration
* @brief The processing strategy when the FrameSet generated by the frame aggregation function does not contain the frames of all opened streams (which
* can be caused by different frame rates of each stream, or by the loss of frames of one stream): drop directly or output to the user.
*
* @param mode The frame aggregation output mode to be set (default mode is @ref OB_FRAME_AGGREGATE_OUTPUT_ANY_SITUATION)
*/
void setFrameAggregateOutputMode(OBFrameAggregateOutputMode mode);
friend class Pipeline;
};
} // namespace ob
@@ -0,0 +1,109 @@
/**
* @file RecordPlayback.hpp
* @brief Header file for recording and playback functions.
*/
#pragma once
#include "Types.hpp"
#include <memory>
struct RecorderImpl;
struct PlaybackImpl;
namespace ob {
class Device;
class Frame;
class DeviceInfo;
using PlaybackCallback = std::function<void(std::shared_ptr<Frame> frame)>;
using MediaStateCallback = std::function<void(OBMediaState state)>;
class OB_EXTENSION_API Recorder {
private:
std::unique_ptr<RecorderImpl> impl_;
public:
/**
* @brief Create a recorder for data recording.
*/
Recorder();
Recorder(std::unique_ptr<RecorderImpl> impl);
/**
* @brief Create a recorder for data recording.
* @param device The device for which to record device information.
*/
Recorder(std::shared_ptr<Device> device);
virtual ~Recorder() noexcept;
/**
* @brief Enable the recorder. Throws an exception on failure.
*
* @param filename The name of the recorded file.
* @param async Whether to execute asynchronously.
*/
void start(const char *filename, bool async = false);
/**
* @brief Stop the recorder. Throws an exception on failure.
*/
void stop();
/**
* @brief Write frame data to the recorder.
*
* @param frame The frame data to write.
*/
void write(std::shared_ptr<Frame> frame);
};
class OB_EXTENSION_API Playback {
private:
std::unique_ptr<PlaybackImpl> impl_;
public:
/**
* @brief Create a playback object.
* @param filename The name of the playback file.
*/
Playback(const char *filename);
Playback(std::unique_ptr<PlaybackImpl> impl);
virtual ~Playback() noexcept;
/**
* @brief Start playback. The playback data is returned from the callback. Throws an exception on failure.
* @param callback The callback for playback data.
* @param type The type of playback data.
*/
void start(PlaybackCallback callback, OBMediaType type = OB_MEDIA_ALL);
/**
* @brief Stop playback. Throws an exception on failure.
*/
void stop();
/**
* @brief Set the playback state.
* @param state The playback status callback.
*/
void setPlaybackStateCallback(MediaStateCallback state);
/**
* @brief Get the device information in the recording file.
*
* @return DeviceInfo The device information.
*/
std::shared_ptr<DeviceInfo> getDeviceInfo();
/**
* @brief Get the intrinsic and extrinsic parameter in the recording file.
*
* @return OBCameraParam Camera intrinsic and extrinsic parameter
*/
OBCameraParam getCameraParam();
};
} // namespace ob
@@ -0,0 +1,149 @@
/**
* @file Sensor.hpp
* @brief Defines types related to sensors, which are used to obtain stream configurations, open and close streams, and set and get sensor properties.
*/
#pragma once
#include "Types.hpp"
#include "libobsensor/hpp/Filter.hpp"
#include <functional>
#include <memory>
struct SensorImpl;
struct SensorListImpl;
namespace ob {
class StreamProfile;
class StreamProfileList;
class Device;
class Frame;
class ImuFrame;
class OBFilterList;
/**
* @brief Callback function for frame data.
*
* @param frame The frame data.
*/
using FrameCallback = std::function<void(std::shared_ptr<Frame> frame)>;
class OB_EXTENSION_API Sensor {
protected:
std::unique_ptr<SensorImpl> impl_;
public:
Sensor(std::unique_ptr<SensorImpl> impl);
virtual ~Sensor() noexcept;
/**
* @brief Get the sensor type.
*
* @return OBSensorType The sensor type.
*/
OBSensorType type();
/**
* @brief Get the list of stream profiles.
*
* @return std::shared_ptr<StreamProfileList> The stream profile list.
*/
const std::shared_ptr<StreamProfileList> getStreamProfileList();
/**
* @brief Request recommended filters
* @return OBFilterList list of frame processing block
*/
const std::shared_ptr<OBFilterList> getRecommendedFilters();
/**
* @brief Open a frame data stream and set up a callback.
*
* @param streamProfile The stream configuration.
* @param callback The callback to set when frame data arrives.
*/
void start(std::shared_ptr<StreamProfile> streamProfile, FrameCallback callback);
/**
* @brief Stop the stream.
*/
void stop();
/**
* @brief Dynamically switch resolutions.
*
* @param streamProfile The resolution to switch to.
*/
void switchProfile(std::shared_ptr<StreamProfile> streamProfile);
};
class OB_EXTENSION_API SensorList {
private:
std::unique_ptr<SensorListImpl> impl_;
public:
SensorList(std::unique_ptr<SensorListImpl> impl);
virtual ~SensorList() noexcept;
/**
* @brief Get the number of sensors.
*
* @return uint32_t The number of sensors.
*/
uint32_t count();
/**
* @brief Get the type of the specified sensor.
*
* @param index The sensor index.
* @return OBSensorType The sensor type.
*/
OBSensorType type(uint32_t index);
/**
* @brief Get a sensor by index number.
*
* @param index The sensor index. The range is [0, count-1]. If the index exceeds the range, an exception will be thrown.
* @return std::shared_ptr<Sensor> The sensor object.
*/
std::shared_ptr<Sensor> getSensor(uint32_t index);
/**
* @brief Get a sensor by sensor type.
*
* @param sensorType The sensor type to obtain.
* @return std::shared_ptr<Sensor> A sensor object. If the specified sensor type does not exist, it will return empty.
*/
std::shared_ptr<Sensor> getSensor(OBSensorType sensorType);
};
/**
* @brief Class representing a list of FrameProcessingBlock
*/
class OB_EXTENSION_API OBFilterList {
private:
std::unique_ptr<OBFilterListImpl> impl_;
public:
OBFilterList(std::unique_ptr<OBFilterListImpl> impl_);
~OBFilterList() noexcept;
/**
* @brief Get the number of OBDepthWorkMode FrameProcessingBlock in the list
*
* @return uint32_t the number of FrameProcessingBlock objects in the list
*/
uint32_t count();
/**
* @brief Get the Filter object at the specified index
*
* @param index the index of the target Filter object
* @return the Filter object at the specified index
*/
std::shared_ptr<Filter> getFilter(uint32_t index);
};
} // namespace ob
@@ -0,0 +1,267 @@
/**
* @file StreamProfile.hpp
* @brief The stream profile related type is used to get information such as the width, height, frame rate, and format of the stream.
*/
#pragma once
#include "Types.hpp"
#include <iostream>
#include <memory>
struct StreamProfileImpl;
struct StreamProfileListImpl;
namespace ob {
class VideoStreamProfile;
class GyroStreamProfile;
class AccelStreamProfile;
class Config;
class OB_EXTENSION_API StreamProfile : public std::enable_shared_from_this<StreamProfile> {
protected:
std::unique_ptr<StreamProfileImpl> impl_;
public:
StreamProfile(std::unique_ptr<StreamProfileImpl> impl);
StreamProfile(StreamProfile &streamProfile);
virtual ~StreamProfile() noexcept;
/**
* @brief Get the format of the stream
*
* @return OBFormat return the format of the stream
*/
OBFormat format() const;
/**
* @brief Get the type of stream
*
* @return OBStreamType return the type of the stream
*/
OBStreamType type() const;
/**
* @brief Get the extrinsic parameters from current stream profile to the given target stream profile
*
* @return OBExtrinsic Return the extrinsic parameters.
*/
OBExtrinsic getExtrinsicTo(std::shared_ptr<StreamProfile> target);
/**
* @brief Check if frame object is compatible with the given type
*
* @tparam T Given type
* @return bool return result
*/
template <typename T> bool is();
/**
* @brief Converts object type to target type
*
* @tparam T Target type
* @return std::shared_ptr<T> Return the result. Throws an exception if conversion is not possible.
*/
template <typename T> std::shared_ptr<T> as() {
if(!is<T>()) {
throw std::runtime_error("Unsupported operation. Object's type is not the required type.");
}
return std::static_pointer_cast<T>(std::const_pointer_cast<StreamProfile>(shared_from_this()));
}
friend class Sensor;
friend class Config;
friend class Pipeline;
};
/**
* @brief Class representing a video stream profile.
*/
class OB_EXTENSION_API VideoStreamProfile : public StreamProfile {
public:
explicit VideoStreamProfile(StreamProfile &profile);
explicit VideoStreamProfile(std::unique_ptr<StreamProfileImpl> impl);
~VideoStreamProfile() noexcept override;
/**
* @brief Return the frame rate of the stream.
*
* @return uint32_t Return the frame rate of the stream.
*/
uint32_t fps() const;
/**
* @brief Return the width of the stream.
*
* @return uint32_t Return the width of the stream.
*/
uint32_t width() const;
/**
* @brief Return the height of the stream.
*
* @return uint32_t Return the height of the stream.
*/
uint32_t height() const;
/**
* @brief Get the intrinsic parameters of the stream.
*
* @return OBCameraIntrinsic Return the intrinsic parameters.
*/
OBCameraIntrinsic getIntrinsic();
/**
* @brief Get the distortion parameters of the stream.
* @brief Brown distortion model
*
* @return OBCameraDistortion Return the distortion parameters.
*/
OBCameraDistortion getDistortion();
};
/**
* @brief Class representing an accelerometer stream profile.
*/
class OB_EXTENSION_API AccelStreamProfile : public StreamProfile {
public:
explicit AccelStreamProfile(StreamProfile &profile);
explicit AccelStreamProfile(std::unique_ptr<StreamProfileImpl> impl);
~AccelStreamProfile() noexcept override;
/**
* @brief Return the full scale range.
*
* @return OBAccelFullScaleRange Return the scale range value.
*/
OBAccelFullScaleRange fullScaleRange() const;
/**
* @brief Return the sampling frequency.
*
* @return OBAccelFullScaleRange Return the sampling frequency.
*/
OBAccelSampleRate sampleRate() const;
/**
* @brief get the intrinsic parameters of the stream.
*
* @return OBAccelIntrinsic Return the intrinsic parameters.
*/
OBAccelIntrinsic getIntrinsic();
};
/**
* @brief Class representing a gyroscope stream profile.
*/
class OB_EXTENSION_API GyroStreamProfile : public StreamProfile {
public:
explicit GyroStreamProfile(StreamProfile &profile);
explicit GyroStreamProfile(std::unique_ptr<StreamProfileImpl> impl);
~GyroStreamProfile() noexcept override;
/**
* @brief Return the full scale range.
*
* @return OBAccelFullScaleRange Return the scale range value.
*/
OBGyroFullScaleRange fullScaleRange() const;
/**
* @brief Return the sampling frequency.
*
* @return OBAccelFullScaleRange Return the sampling frequency.
*/
OBGyroSampleRate sampleRate() const;
/**
* @brief get the intrinsic parameters of the stream.
*
* @return OBGyroIntrinsic Return the intrinsic parameters.
*/
OBGyroIntrinsic getIntrinsic();
};
template <typename T> bool StreamProfile::is() {
switch(this->type()) {
case OB_STREAM_VIDEO:
case OB_STREAM_IR:
case OB_STREAM_IR_LEFT:
case OB_STREAM_IR_RIGHT:
case OB_STREAM_COLOR:
case OB_STREAM_DEPTH:
case OB_STREAM_RAW_PHASE:
return typeid(T) == typeid(VideoStreamProfile);
case OB_STREAM_ACCEL:
return typeid(T) == typeid(AccelStreamProfile);
case OB_STREAM_GYRO:
return typeid(T) == typeid(GyroStreamProfile);
default:
break;
}
return false;
}
class OB_EXTENSION_API StreamProfileList {
protected:
std::unique_ptr<StreamProfileListImpl> impl_;
public:
explicit StreamProfileList(std::unique_ptr<StreamProfileListImpl> impl);
~StreamProfileList() noexcept;
/**
* @brief Return the number of StreamProfile objects.
*
* @return uint32_t Return the number of StreamProfile objects.
*/
uint32_t count() const;
/**
* @brief Return the StreamProfile object at the specified index.
*
* @param index The index of the StreamProfile object to be retrieved. Must be in the range [0, count-1]. Throws an exception if the index is out of range.
* @return std::shared_ptr<StreamProfile> Return the StreamProfile object.
*/
const std::shared_ptr<StreamProfile> getProfile(uint32_t index);
/**
* @brief Match the corresponding video stream profile based on the passed-in parameters. If multiple Match are found, the first one in the list is
* returned by default. Throws an exception if no matching profile is found.
*
* @param width The width of the stream. Pass OB_WIDTH_ANY if no matching condition is required.
* @param height The height of the stream. Pass OB_HEIGHT_ANY if no matching condition is required.
* @param format The type of the stream. Pass OB_FORMAT_ANY if no matching condition is required.
* @param fps The frame rate of the stream. Pass OB_FPS_ANY if no matching condition is required.
* @return std::shared_ptr<VideoStreamProfile> Return the matching resolution.
*/
const std::shared_ptr<VideoStreamProfile> getVideoStreamProfile(int width = OB_WIDTH_ANY, int height = OB_HEIGHT_ANY, OBFormat format = OB_FORMAT_ANY,
int fps = OB_FPS_ANY);
/**
* @brief Match the corresponding accelerometer stream profile based on the passed-in parameters. If multiple Match are found, the first one in the list
* is returned by default. Throws an exception if no matching profile is found.
*
* @param fullScaleRange The full scale range. Pass 0 if no matching condition is required.
* @param sampleRate The sampling frequency. Pass 0 if no matching condition is required.
*/
const std::shared_ptr<AccelStreamProfile> getAccelStreamProfile(OBAccelFullScaleRange fullScaleRange, OBAccelSampleRate sampleRate);
/**
* @brief Match the corresponding gyroscope stream profile based on the passed-in parameters. If multiple Match are found, the first one in the list is
* returned by default. Throws an exception if no matching profile is found.
*
* @param fullScaleRange The full scale range. Pass 0 if no matching condition is required.
* @param sampleRate The sampling frequency. Pass 0 if no matching condition is required.
*/
const std::shared_ptr<GyroStreamProfile> getGyroStreamProfile(OBGyroFullScaleRange fullScaleRange, OBGyroSampleRate sampleRate);
};
} // namespace ob
@@ -0,0 +1,60 @@
/**
* @file Types.hpp
* @brief Provides SDK structure and enumeration constant definitions (depending on libobsensor/h/ObTypes.h).
*/
#pragma once
#include "libobsensor/h/ObTypes.h"
#include <functional>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Callback function for file transfer status updates.
*
* @param state The file transfer status.
* @param message Status information.
* @param percent The percentage of the file that has been transferred.
*/
using SendFileCallback = std::function<void(OBFileTranState state, const char *message, uint8_t percent)>;
/**
* @brief Callback function for device upgrade status updates.
*
* @param state The device upgrade status.
* @param message Status information.
* @param percent The percentage of the upgrade that has been completed.
*/
using DeviceUpgradeCallback = std::function<void(OBUpgradeState state, const char *message, uint8_t percent)>;
/**
* @brief Callback function for device status updates.
*
* @param state The device status.
* @param message Status information.
*/
using DeviceStateChangedCallback = std::function<void(OBDeviceState state, const char *message)>;
/**
* @brief Callback function for getting raw data property data when data and progress callbacks are made.
*
* @param dataChunk The data chunk.
* @param state The status of getting the data.
*/
using GetDataCallback = std::function<void(OBDataTranState state, OBDataChunk *dataChunk)>;
/**
* @brief Callback function for setting the raw data property when progress callbacks are made.
*
* @param percent The progress percentage.
* @param state The status of setting the data.
*/
using SetDataCallback = std::function<void(OBDataTranState state, uint8_t percent)>;
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,138 @@
/**
* @file Utils.hpp
* @brief The SDK utils class
*
*/
#pragma once
#include "Types.hpp"
namespace ob {
class Device;
class OB_EXTENSION_API CoordinateTransformHelper {
public:
/**
* @brief Transform a 3d point of a source coordinate system into a 3d point of the target coordinate system.
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sourcePoint3f Source 3d point value
* @param sourceSensorType Source sensor type
* @param targetSensorType Target sensor type
* @param targetPoint3f Target 3d point value
*
* @return bool Transform result
*/
static bool calibration3dTo3d(const OBCalibrationParam calibrationParam, const OBPoint3f sourcePoint3f, const OBSensorType sourceSensorType,
const OBSensorType targetSensorType, OBPoint3f *targetPoint3f);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 3d point of the target coordinate system.
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sourcePoint2f Source 2d point value
* @param sourceDepthPixelValue The depth of sourcePoint2f in millimeters
* @param sourceSensorType Source sensor type
* @param targetSensorType Target sensor type
* @param targetPoint3f Target 3d point value
*
* @return bool Transform result
*/
static bool calibration2dTo3d(const OBCalibrationParam calibrationParam, const OBPoint2f sourcePoint2f, const float sourceDepthPixelValue,
const OBSensorType sourceSensorType, const OBSensorType targetSensorType, OBPoint3f *targetPoint3f);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 3d point of the target coordinate system.
* @brief This function uses undistortion, which may result in longer processing time.
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sourcePoint2f Source 2d point value
* @param sourceDepthPixelValue The depth of sourcePoint2f in millimeters
* @param sourceSensorType Source sensor type
* @param targetSensorType Target sensor type
* @param targetPoint3f Target 3d point value
*
* @return bool Transform result
*/
static bool calibration2dTo3dUndistortion(const OBCalibrationParam calibrationParam, const OBPoint2f sourcePoint2f, const float sourceDepthPixelValue,
const OBSensorType sourceSensorType, const OBSensorType targetSensorType, OBPoint3f *targetPoint3f);
/**
* @brief Transform a 3d point of a source coordinate system into a 2d pixel coordinate of the target camera.
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sourcePoint3f Source 3d point value
* @param sourceSensorType Source sensor type
* @param targetSensorType Target sensor type
* @param targetPoint2f Target 2d point value
*
* @return bool Transform result
*/
static bool calibration3dTo2d(const OBCalibrationParam calibrationParam, const OBPoint3f sourcePoint3f, const OBSensorType sourceSensorType,
const OBSensorType targetSensorType, OBPoint2f *targetPoint2f);
/**
* @brief Transform a 2d pixel coordinate with an associated depth value of the source camera into a 2d pixel coordinate of the target camera
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sourcePoint2f Source 2d point value
* @param sourceDepthPixelValue The depth of sourcePoint2f in millimeters
* @param sourceSensorType Source sensor type
* @param targetSensorType Target sensor type
* @param targetPoint2f Target 2d point value
*
* @return bool Transform result
*/
static bool calibration2dTo2d(const OBCalibrationParam calibrationParam, const OBPoint2f sourcePoint2f, const float sourceDepthPixelValue,
const OBSensorType sourceSensorType, const OBSensorType targetSensorType, OBPoint2f *targetPoint2f);
/**
* @brief Transforms the depth frame into the geometry of the color camera.
*
* @param device Device handle
* @param depthFrame Input depth frame
* @param targetColorCameraWidth Target color camera width
* @param targetColorCameraHeight Target color camera height
*
* @return std::shared_ptr<ob::Frame> Transformed depth frame
*/
static std::shared_ptr<ob::Frame> transformationDepthFrameToColorCamera(std::shared_ptr<ob::Device> device, std::shared_ptr<ob::Frame> depthFrame,
uint32_t targetColorCameraWidth, uint32_t targetColorCameraHeight);
/**
* @brief Init transformation tables
*
* @param calibrationParam Device calibration param,see pipeline::getCalibrationParam
* @param sensorType sensor type
* @param data input data,needs to be allocated externally.During initialization, the external allocation size is 'dataSize', for example, dataSize = 1920 *
* 1080 * 2*sizeof(float) (1920 * 1080 represents the image resolution, and 2 represents two LUTs, one for x-coordinate and one for y-coordinate).
* @param dataSize input data size
* @param xyTables output xy tables
*
* @return bool Transform result
*/
static bool transformationInitXYTables(const OBCalibrationParam calibrationParam, const OBSensorType sensorType, float *data, uint32_t *dataSize,
OBXYTables *xyTables);
/**
* @brief Transform depth image to point cloud data
*
* @param xyTables input xy tables,see CoordinateTransformHelper::transformationInitXYTables
* @param depthImageData input depth image data
* @param pointCloudData output point cloud data
*
*/
static void transformationDepthToPointCloud(OBXYTables *xyTables, const void *depthImageData, void *pointCloudData);
/**
* @brief Transform depth image to RGBD point cloud data
*
* @param xyTables input xy tables,see CoordinateTransformHelper::transformationInitXYTables
* @param depthImageData input depth image data
* @param colorImageData input color image data (only RGB888 support)
* @param pointCloudData output RGBD point cloud data
*
*/
static void transformationDepthToRGBDPointCloud(OBXYTables *xyTables, const void *depthImageData, const void *colorImageData, void *pointCloudData);
};
} // namespace ob
@@ -0,0 +1,45 @@
/**
* @file Version.hpp
* @brief Provides functions to retrieve version information of the SDK.
*/
#pragma once
namespace ob {
class OB_EXTENSION_API Version {
public:
/**
* @brief Get the major version number of the SDK.
*
* @return int The major version number of the SDK.
*/
static int getMajor();
/**
* @brief Get the minor version number of the SDK.
*
* @return int The minor version number of the SDK.
*/
static int getMinor();
/**
* @brief Get the patch version number of the SDK.
*
* @return int The patch version number of the SDK.
*/
static int getPatch();
/**
* @brief Get the full version number of the SDK.
*
* @return int The full version number of the SDK.
*/
static int getVersion();
/**
* @brief Get the stage version of the SDK.
*
* @return char* The stage version string of the SDK.
*/
static char *getStageVersion();
};
} // namespace ob
@@ -0,0 +1 @@
libOrbbecSDK.so.1.10.22
@@ -0,0 +1 @@
libOrbbecSDK.so.1.10.22
@@ -0,0 +1 @@
libOrbbecSDK.so.1.10.22