Big refactoring code

* Removal of unnecessary files
* Optimized multi-camera launch
* Explicitly list the parameters in the launch file
This commit is contained in:
默存
2023-02-06 17:26:10 +08:00
parent 04e4d4151e
commit 202719bd8c
59 changed files with 4931 additions and 806 deletions
@@ -444,6 +444,49 @@ void ob_device_set_structured_data(ob_device *device, ob_property_id property_id
*/
void ob_device_get_structured_data(ob_device *device, ob_property_id property_id, void *data, uint32_t *data_size, ob_error **error);
/**
* \if English
* @brief Set property struct data.
*
* @param[in] device Device object
* @param[in] property_id Id of the property
* @param[in] data_bundle Target data to set
* @param[in] Set data callback
* @param[in] user_data User-defined data will be returned in the callback
* @param[out] error Log error messages
* \else
* @brief 设置结构体类型的设备属性
* @param[in] device 设备对象
* @param[in] property_id 要设置的属性id
* @param[in] data_bundle
要设置的数据内容,注意data_bundle指针为OrbbecSDK外部构建,所以自行释放指针资源,禁止调用ob_delete_data_bundle释放资源,会造成不可预知的错误;
* @param[in] cb 设置进度回调
* @param[in] user_data 用户自定义数据,会在回调中返回
* @param[out] error 记录错误信息
* @return void 无返回值
* \endif
*/
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);
/**
* \if English
* @brief Get property struct data.
* @param[in] device Device object
* @param[in] property_id Id of the property
* @param[out] error Log error messages
* @return ob_data_dundle, NOTE: ob_data_dundle must free by ob_delete_data_bundle() because it come from OrbbecSDK's API
* \else
* @brief 获取结构体类型的设备属性
* @param[in] device 设备对象
* @param[in] property_id 要获取的属性id
* @param[out] error 记录错误信息
* @return 返回ob_data_dundle 结构体对象指针,返回的必须调用ob_delete_data_bundle()函数释放资源,否则会造成内存泄漏
* \endif
*/
ob_data_bundle *ob_device_get_structured_data_ext(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* \if English
* @brief Set raw data type of device property
@@ -495,6 +538,44 @@ void ob_device_set_raw_data(ob_device *device, ob_property_id property_id, void
*/
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);
/**
* \if English
* @brief Get the property protocol version
*
* @param[in] device Device object
* @param[out] error Log error messages
* @return ob_protocol_version
*
* \else
*
* @brief 获取设备的控制命令协议版本
*
* @param[in] device 设备对象
* @param[out] error 记录错误信息
* @return ob_protocol_version
* \endif
*/
ob_protocol_version ob_device_get_protocol_version(ob_device *device, ob_error **error);
/**
* \if English
* @brief Get cmdVersion of property
*
* @param[in] device Device object
* @param[in] propertyId Property id
* @param[out] error Log error messages
* @return ob_cmd_version
* \else
* @brief 获取控制命令的版本号
*
* @param[in] device 设备对象
* @param[in] propertyId 属性id
* @param[out] error 记录错误信息
* @return ob_cmd_version
* \endif
*/
ob_cmd_version ob_device_get_cmd_version(ob_device *device, ob_property_id property_id, ob_error **error);
/**
* \if English
* @brief Get supported device properties count
@@ -903,6 +984,72 @@ void ob_device_write_authorization_code(ob_device *device, const char *auth_code
*/
ob_camera_param_list *ob_device_get_calibration_camera_param_list(ob_device *device, ob_error **error);
/**
* \if English
* @brief Get current depth work mode
* @param[in] device Device object
* @param[out] error Log error messages
* @return ob_depth_work_mode Current depth work mode
* \else
* @brief 查询当前相机深度模式
* @param[in] device 设备对象
* @param[out] error 记录错误信息
* @return ob_depth_work_mode 当前深度工作模式
* \endif
*/
ob_depth_work_mode ob_device_get_current_depth_work_mode(ob_device *device, ob_error **error);
/**
* \if English
* @brief Switch depth work mode by ob_depth_work_mode. Prefer invoke ob_device_switch_depth_work_mode_by_name to switch depth mode
* when known the complete name of depth work mode.
* @param[in] device Device object
* @param[in] work_mode Depth work mode come from ob_depth_work_mode_list which return by ob_device_get_depth_work_mode_list
* @param[out] error Log error messages
* @return Return switch result. OB_STATUS_OK: success, other failed.
* \else
* @brief 切换相机深度模式(根据深度工作模式对象),如果知道设备支持的深度工作模式名称,那么推荐用ob_device_switch_depth_work_mode_by_name
* @param[in] device 设备对象
* @param[in] work_mode 深度工作模式,从深度工作模式列表ob_depth_work_mode_list获取的模式对象(ob_device_get_depth_work_mode_list返回的对象)
* @param[out] error 记录错误信息
* @return ob_status 设置设置结果,OB_STATUS_OK成功,其他:设置失败
* \endif
*/
ob_status ob_device_switch_depth_work_mode(ob_device *device, const ob_depth_work_mode *work_mode, ob_error **error);
/**
* \if English
* @brief Switch depth work mode by work mode name.
* @param[in] device Device object
* @param[in] mode name Depth work mode name which equals to ob_depth_work_mode.name
* @param[out] error Log error messages
*
* @return Return switch result. OB_STATUS_OK: success, other failed.
* \else
* @brief 切换相机深度模式(根据深度工作模式名称)
* @param[in] device 设备对象
* @param[in] mode_name 深度工作模式名称,模式名称必须与ob_depth_work_mode.name一致
* @param[out] error 记录错误信息
* @return ob_status 设置设置结果,OB_STATUS_OK成功,其他:设置失败
* \endif
*/
ob_status ob_device_switch_depth_work_mode_by_name(ob_device *device, const char *mode_name, ob_error **error);
/**
* \if English
* @brief Request support depth work mode list
* @param[in] device Device object
* @param[out] error Log error messages
* @return ob_depth_work_mode_list list of ob_depth_work_mode
* \else
* @brief 查询当前相机深度模式的列表
* @param[in] device 设备对象
* @param[out] error 记录错误信息
* @return ob_depth_work_mode_list 深度模式列表。注意:返回对象要用ob_delete_depth_work_mode_list()释放资源,否者会内存泄漏
* \endif
*/
ob_depth_work_mode_list *ob_device_get_depth_work_mode_list(ob_device *device, ob_error **error);
/**
* \if English
* @brief Device reboot
@@ -922,6 +1069,28 @@ ob_camera_param_list *ob_device_get_calibration_camera_param_list(ob_device *dev
*/
void ob_device_reboot(ob_device *device, ob_error **error);
/**
* @brief 获取当前设备同步配置
* @brief 设备同步:包括单机内的不同 Sensor 的曝光同步功能 和 多机同步功能
*
* @param[in] device 设备对象
* @param[out] error 记录错误信息
* @return ob_device_sync_config 返回设备同步配置
*/
ob_device_sync_config ob_device_get_sync_config(ob_device *device, ob_error **error);
/**
* @brief 设置设备同步配置
* @brief 用于配置 单机内的不同 Sensor 的曝光同步功能 和 多机同步功能
*
* @attention 调用本函数会直接将配置写入设备Flash,设备重启后依然会生效。为了避免影响Flash寿命,不要频繁更新配置。
*
* @param[in] device 设备对象
* @param[out] device_sync_config 设备同步配置
* @param[out] error 记录错误信息
*/
void ob_device_set_sync_config(ob_device *device, ob_device_sync_config device_sync_config, ob_error **error);
/**
* \if English
* @brief Get device name
@@ -1171,6 +1340,68 @@ ob_camera_param ob_camera_param_list_get_param(ob_camera_param_list *param_list,
*/
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 contain in ob_depth_work_mode_list
* \else
* @brief 获取深度工作模式列表的元素数量
* @param[in] work_mode_list 工作模式列表对象
* @param[in] index 下标,从0开始
* @return work_mode_list包含的深度模式总数
* \endif
*
*/
uint32_t ob_depth_work_mode_list_count(ob_depth_work_mode_list *work_mode_list, ob_error **error);
/**
* \if English
* @brief Get the index target of ob_depth_work_mode from work_mode_list
* @param[in] work_mode_list data struct contain list of ob_depth_work_mode
* @param[in] index index of target ob_depth_work_mode
* @param[out] error Log error messages
* @return ob_depth_work_mode
* \else
* @brief 从深度工作模式列表获取第N个对象
* @param[in] work_mode_list 工作模式列表对象
* @param[in] index 下标,从0开始
* @param[out] error 记录错误信息
* @return 深度工作模式对象
* \endif
*
*/
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);
/**
* \if English
* @brief Free resource of ob_depth_work_mode_list
* @param[in] work_mode_list data struct contain list of ob_depth_work_mode
* @param[out] error Log error messages
* \else
* @brief 删除深度工作模式列表对象,释放资源
* @param[in] work_mode_list 工作模式列表对象
* @param[out] error 记录错误信息
* \endif
*
*/
void ob_delete_depth_work_mode_list(ob_depth_work_mode_list *work_mode_list, ob_error **error);
/**
* \if English
* @brief Free resource of data_bundle which come from OrbbecSDK's API
* @param data_bundle Data bundle
* @param[out] error Log error messages
* \else
* @brief 删除ob_data_bundle对象,释放资源;
* 注意:只能释放OrbbecSDK库返回的ob_data_bundle对象,非OrbbecSDK构建的对象不能调用该接口,否则会造成意想不到的错误
* @param[in] data_bundle 数据集
* @param[out] error 记录错误信息
* \endif
*/
void ob_delete_data_bundle(ob_data_bundle *data_bundle, ob_error **error);
#ifdef __cplusplus
}
#endif
@@ -84,12 +84,18 @@ void ob_pointcloud_filter_set_frame_align_state(ob_filter *filter, bool state, o
/**
* \if English
* @brief Set point cloud position data scale ratio
* @param[in] filter pointcloud_filter object
* @param[in] scale scale ratio
* @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 @ref ob_points_frame_get_position_value_scale function
* @param[in] filter object
* @param[in] scale Set the point cloud coordinate data zoom factor
* @param[out] error Log error messages
* \else
* @brief 设置点云数据缩放比例
*
* @attention 调用该函数设置缩放比例会改变输出点云帧的点坐标缩放系数:posScale = posScale / scale;
* 输出点云帧的点坐标缩放系数可通过 @ref ob_points_frame_get_position_value_scale 函数获取
*
* @param[in] filter pointcloud_filter对象
* @param[in] scale 设置点云坐标数据缩放比例
* @param[out] error 记录错误信息
@@ -100,8 +106,8 @@ void ob_pointcloud_filter_set_position_data_scale(ob_filter *filter, float scale
/**
* \if English
* @brief Set point cloud color data normalization
* @param[in] filter pointcloud_filter object
* @param[in] state Whether to normalize
* @param[in] filter object
* @param[in] state Sets whether the point cloud color data is normalized
* @param[out] error Log error messages
* \else
* @brief 设置点云颜色数据归一化
@@ -146,6 +152,60 @@ ob_filter *ob_create_format_convert_filter(ob_error **error);
*/
void ob_format_convert_filter_set_format(ob_filter *filter, ob_convert_format type, ob_error **error);
/**
* \if English
* @brief Create compression Filter
*
* @param[out] error Log error messages
*
* @return filter depth_filter object
* \else
* @brief 创建compression Filter
*
* @param[out] error 记录错误信息
*
* @return filter depth_filter 对象
* \endif
*/
ob_filter *ob_create_compression_filter(ob_error **error);
/**
* \if English
* @brief Set compression parameters
*
* @param[in] filter 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
* \else
* @brief 设置压缩类型
*
* @param[in] filter compression_filter对象
* @param[in] mode 压缩模式 OB_COMPRESSION_LOSSLESS or OB_COMPRESSION_LOSSY
* @param[in] params 压缩参数,结构体 ob_compression_params,当mode为OB_COMPRESSION_LOSSLESS时,params为NULL
* @param[out] error 记录错误信息
* \endif
*/
void ob_compression_filter_set_compression_params(ob_filter *filter, ob_compression_mode mode, void *params, ob_error **error);
/**
* \if English
* @brief Create decompression Filter
*
* @param[out] error Log error messages
*
* @return filter decompression Filter object
* \else
* @brief 创建decompressionr Filter
*
* @param[out] error 记录错误信息
*
* @return filter decompression Filter 对象
* \endif
*/
ob_filter *ob_create_decompression_filter(ob_error **error);
/**
* \if English
* @brief Filter reset, cache clear, state reset. If the asynchronous interface is used, the processing thread will also be stopped and the pending cache
@@ -234,4 +294,4 @@ void ob_delete_filter(ob_filter *filter, ob_error **error);
#ifdef __cplusplus
}
#endif
#endif
@@ -241,27 +241,53 @@ uint32_t ob_video_frame_metadata_size(ob_frame *frame, ob_error **error);
*/
uint8_t ob_video_frame_pixel_available_bit_size(ob_frame *frame, ob_error **error);
/* @brief 查询IR frame的最原始数据来源(即使回放视频,其原始的数据源也是sensor)
* @param[in] frame 视频帧对象
* @param[out] error 记录错误信息
* @return uint8_t 返回
* \endif
*/
ob_sensor_type ob_ir_frame_get_source_sensor_type(ob_frame *frame, ob_error **ob_error);
/**
* \if English
* @brief Get the value scale of the depth frame, the unit is mm/step,
* such as valueScale=0.1, and a certain coordinate pixel value is pixelValue=10000,
* then the depth value = pixelValue*valueScale = 10000*0.1=1000mm。
* @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 millimeter.
* such as 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 value scale
* \else
* @brief 获取深度帧的值刻度,单位为 mm/step,
* 如valueScale=0.1, 某坐标像素值为pixelValue=10000,
* @brief 获取深度帧的值缩放系数,深度像素值乘以缩放系数后,可以得到单位为毫米的深度值; 如valueScale=0.1, 某坐标像素值为pixelValue=10000,
* 则表示深度值value = pixelValue*valueScale = 10000*0.1=1000mm。
*
* @param[in] frame 帧对象
* @param[out] error 记录错误信息
* @return float 值刻度
* @return float 缩放系数
* \endif
*/
float ob_depth_frame_get_value_scale(ob_frame *frame, ob_error **error);
/**
* \if English
* @brief Get the point position value scale of the points frame. the point position value of points frame is multiplied by the scale to give a position value
* in millimeter. such as 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 position value scale
* \else
* @brief 获取点云帧的点坐标值缩放系数,点坐标值乘以缩放系数后,可以得到单位为毫米的坐标值; 如scale=0.1, 某个点的x坐标值为x=10000,
* 则表示实际x坐标value = x*scale = 10000*0.1=1000mm。
*
* @param[in] frame 点云帧对象
* @param[out] error 记录错误信息
* @return float 缩放系数
* \endif
*/
float ob_points_frame_get_position_value_scale(ob_frame *frame, ob_error **error);
/**
* \if English
* @brief Delete frame
@@ -362,6 +388,11 @@ ob_frame *ob_frameset_ir_frame(ob_frame *frameset, ob_error **error);
*/
ob_frame *ob_frameset_points_frame(ob_frame *frameset, ob_error **error);
/**
* 获取指定类型的frame
*/
ob_frame *ob_frameset_get_frame(ob_frame *frameset, ob_frame_type frame_type, ob_error **error);
/**
* \if English
* @brief Get accelerometer frame data
File diff suppressed because it is too large Load Diff
@@ -366,7 +366,7 @@ ob_rect ob_get_d2c_valid_area(ob_pipeline *pipeline, uint32_t distance, ob_error
* @return ob_rect 返回在工作距离下D2C后有效的区域信息
* \endif
*/
ob_rect ob_get_d2c_range_valid_area(ob_pipeline *pipeline, uint32_t minimum_distance,uint32_t maximum_distance, ob_error **error);
ob_rect ob_get_d2c_range_valid_area(ob_pipeline *pipeline, uint32_t minimum_distance, uint32_t maximum_distance, ob_error **error);
/**
* \if English
@@ -398,6 +398,7 @@ void ob_pipeline_start_record(ob_pipeline *pipeline, const char *file_name, ob_e
* @param[out] error 记录错误信息
* \endif
*/
void ob_pipeline_stop_record(ob_pipeline *pipeline, ob_error **error);
/**
@@ -511,13 +512,12 @@ void ob_config_disable_all_stream(ob_config *config, ob_error **error);
*/
void ob_config_set_align_mode(ob_config *config, ob_align_mode mode, ob_error **error);
/**
* \if English
* @brief Whether scale depth frame after D2C
* @brief Whether the depth needs to be scaled after setting D2C
*
* @param[in] config config object
* @param[in] enable Scale or not
* @param[in] enable Whether scaling is required
* @param[out] error Log error messages
* \else
* @brief 设置D2C后是否需要缩放深度
@@ -527,15 +527,17 @@ void ob_config_set_align_mode(ob_config *config, ob_align_mode mode, ob_error **
* @param[out] error 记录错误信息
* \endif
*/
void ob_config_set_depth_scale_require(ob_config *config,bool enable,ob_error **error);
void ob_config_set_depth_scale_require(ob_config *config, bool enable, ob_error **error);
/**
* \if English
* @brief
* @brief Set the D2C target resolution, which 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[in] config config object
* @param[in] d2c_target_width D2C target width
* @param[in] d2c_target_height D2C target height
* @param[in] d2c_target_width The D2C target has a wide resolution
* @param[in] d2c_target_height The D2C targets has a high resolution
* @param[out] error Log error messages
* \else
* @brief 设置D2C目标分辨率,适用于未使用OrbbecSDK开启Color流,且需要对深度进行D2C的情况
@@ -547,8 +549,8 @@ void ob_config_set_depth_scale_require(ob_config *config,bool enable,ob_error **
* @param[out] error 记录错误信息
* \endif
*/
void ob_config_set_d2c_target_resolution(ob_config *config,uint32_t d2c_target_width,uint32_t d2c_target_height,ob_error **error);
void ob_config_set_d2c_target_resolution(ob_config *config, uint32_t d2c_target_width, uint32_t d2c_target_height, ob_error **error);
#ifdef __cplusplus
}
#endif
#endif
@@ -11,6 +11,9 @@
* \endif
*/
#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_
@@ -78,9 +81,26 @@ typedef enum {
91, /**< \if English D2C preprocessing switch (such as RGB cropping), 0: off, 1: on \else D2C前处理开关(如RGB裁剪),0:关闭,1:打开 \endif */
OB_PROP_RGB_CUSTOM_CROP_BOOL = 94, /**< \if English Custom RGB cropping switch, 0 is off, 1 is on custom cropping, and the ROI cropping area is issued \else
自定义RGB裁剪开关,0为关闭,1为开启自定义裁剪,下发ROI裁剪区域\endif */
OB_PROP_DEVICE_WORK_MODE_INT = 95, /**< \if English Device operating mode (power consumption) \else 设备工作模式(功耗) \endif */
OB_PROP_DEVICE_COMMUNICATION_TYPE_INT = 97, /**< 设备通信方式 0: USB; 1: Ethernet(RTSP)*/
OB_PROP_SWITCH_IR_MODE_INT = 98, /**< 切换IR模式,0为主动IR模式,1为被动IR模式*/
OB_PROP_DEVICE_WORK_MODE_INT = 95, /**< \if English Device operating mode (power consumption) \else 设备工作模式(功耗) \endif */
OB_PROP_DEVICE_COMMUNICATION_TYPE_INT = 97, /**< 设备通信方式 0: USB; 1: Ethernet(RTSP)*/
OB_PROP_SWITCH_IR_MODE_INT = 98, /**< 切换IR模式,0为主动IR模式,1为被动IR模式*/
OB_PROP_LASER_ENERGY_LEVEL_INT = 99, /**< 激光能量层级 */
OB_PROP_TIMER_RESET_SIGNAL_BOOL = 104, /**< 触发设备时间归零 */
OB_PROP_TIMER_RESET_TRIGGLE_OUT_ENABLE_BOOL = 105, /**< 向外发送时间归零信号开关, true:打开, false: 关闭; 默认为true */
OB_PROP_TIMER_RESET_DELAY_US_INT = 106, /**< 设置硬件时间归零延迟时间, 单位: 微妙 */
OB_PROP_CAPTURE_IMAGE_SIGNAL_BOOL = 107, /**< 软触发信号, 触发抓拍图片 */
OB_PROP_IR_RIGHT_MIRROR_BOOL = 112, /**< 右IR的镜像 */
OB_PROP_CAPTURE_IMAGE_FRAME_NUMBER_INT = 113, /** 单次软触发抓拍的帧数, 范围:[1, 255] */
OB_PROP_IR_RIGHT_FLIP_BOOL = 114, /**< 右IR的翻转, true:翻转,false:不翻转;默认为false */
OB_PROP_COLOR_ROTATE_INT = 115, /**< 彩色旋转, 翻转角度范围{0, 90, 180, 270}, 默认为0 */
OB_PROP_IR_ROTATE_INT = 116, /**< IR旋转, 翻转角度范围{0, 90, 180, 270}, 默认为0 */
OB_PROP_IR_RIGHT_ROTATE_INT = 117, /**< 右IR旋转, 翻转角度范围{0, 90, 180, 270}, 默认为0 */
OB_PROP_DEPTH_ROTATE_INT = 118, /**< 深度旋转, 翻转角度范围{0, 90, 180, 270}, 默认为0 */
OB_PROP_LASER_HW_ENERGY_LEVEL_INT =
119, /**< 查询激光硬件的实际能量层级, OB_PROP_LASER_ENERGY_LEVEL_INT(99)指令用于设置能级,该指令用于查询设置后硬件实际能级 */
OB_PROP_USB_POWER_STATE_INT = 121, /**< USB供电状态,状态值枚举: OBUSBPowerState */
OB_PROP_DC_POWER_STATE_INT = 122, /**< DC供电状态,状态值枚举: OBDCPowerState */
OB_STRUCT_BASELINE_CALIBRATION_PARAM = 1002, /**< \if English Baseline calibration parameters \else 基线标定参数 \endif */
OB_STRUCT_DEVICE_TEMPERATURE = 1003, /**< \if English Device temperature information \else 设备温度信息 \endif */
@@ -89,8 +109,10 @@ typedef enum {
OB_STRUCT_DEVICE_TIME = 1037, /**< \if English get/set device time \else 获取/设置设备时间 \endif */
OB_STRUCT_MULTI_DEVICE_SYNC_CONFIG =
1038, /**< \if English Multi-device synchronization mode and parameter configuration \else 多设备同步模式和参数配置 \endif */
OB_STRUCT_RGB_CROP_ROI = 1040, /**< \if English RGB cropping ROI \else RGB裁剪ROI \endif */
OB_STRUCT_DEVICE_IP_ADDR_CONFIG = 1041, /**< 设备ip地址配置 */
OB_STRUCT_RGB_CROP_ROI = 1040, /**< \if English RGB cropping ROI \else RGB裁剪ROI \endif */
OB_STRUCT_DEVICE_IP_ADDR_CONFIG = 1041, /**< 设备ip地址配置 */
OB_STRUCT_CURRENT_DEPTH_ALG_MODE = 1043, /**< 当前的相机深度模式 */
OB_STRUCT_DEPTH_PRECISION_SUPPORT_LIST = 1045, /**< 深度精度等级列表,返回uin16_t数组,对应精度等级的枚举定义 */
OB_PROP_COLOR_AUTO_EXPOSURE_BOOL = 2000, /**< \if English Color camera auto exposure \else 彩色相机自动曝光 \endif */
OB_PROP_COLOR_EXPOSURE_INT = 2001, /**< \if English Color camera exposure adjustment \else 彩色相机曝光调节 \endif */
@@ -119,17 +141,21 @@ typedef enum {
红外相机曝光调节(某些型号设备下会同步设置深度相机) \endif */
OB_PROP_IR_GAIN_INT = 2027, /**< \if English Infrared camera gain adjustment (the depth camera will be set synchronously under some models of devices) \else
红外相机增益调节(某些型号设备下会同步设置深度相机) \endif */
OB_PROP_IR_SWITCH_INT = 2028,
/**< 双目红外相机左右IR切换 */ // todo: id有冲突@千手修罗
OB_PROP_IR_CHANNEL_DATA_SOURCE_INT = 2028, /**< \if English Select Infrared camera data source channel. If not support throw exception. 0 : IR stream from IR Left sensor; 1 : IR stream from IR Left sensor; \else 读写IR通道的输出目标sensor,不支持时返回错误。0: 左侧IR sensor,1: 右侧IR sensor; \endif */
OB_PROP_DEPTH_RM_FILTER_BOOL = 2029, /**< 深度效果去畸变, true:打开,false:关闭, 与D2C功能互斥。软硬件D2C开启时,不能使用mask功能 */
OB_PROP_SDK_DISPARITY_TO_DEPTH_BOOL = 3004, /**< 视差转深度 */
OB_PROP_SDK_DEPTH_FRAME_UNPACK_BOOL = 3007, /**< Depth数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) */
OB_PROP_SDK_IR_FRAME_UNPACK_BOOL = 3008, /**< Ir数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) */
OB_RAW_DATA_CAMERA_CALIB_JSON_FILE = 4029, /**< 从设备端读取的标定Json文件(Femto Mega, read only)*/
OB_RAW_DATA_D2C_ROT_LUT_FILE = 4030, /**< D2C初始化表文件(Femto Mega)*/
OB_STRUCT_DEBUG_SENSOR_EXPOSURE_TIME = 5504, /**< \if English LDP status \else 曝光时间读写 \endif */
OB_PROP_SDK_DEPTH_FRAME_UNPACK_BOOL =
3007, /**< \if English Depth data unpacking function switch (each open stream will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format) \else
Depth数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) \endif */
OB_PROP_SDK_IR_FRAME_UNPACK_BOOL =
3008, /**< \if English IR data unpacking function switch (each current will be turned on by default, support RLE/Y10/Y11/Y12/Y14 format) \else
Ir数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) \endif */
OB_PROP_SDK_ACCEL_FRAME_TRANSFORMED_BOOL = 3009, /**< Accel数据转换功能开关(默认打开) */
OB_PROP_SDK_GYRO_FRAME_TRANSFORMED_BOOL = 3010, /**< Gyro数据转换功能开关(默认打开) */
OB_PROP_SDK_IR_LEFT_FRAME_UNPACK_BOOL = 3011, /**< [左]Ir数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) */
OB_PROP_SDK_IR_RIGHT_FRAME_UNPACK_BOOL = 3012, /**< [右]Ir数据解包功能开关(每次开流都会默认打开,支持RLE/Y10/Y11/Y12/Y14格式) */
OB_RAW_DATA_CAMERA_CALIB_JSON_FILE = 4029, /**< 从设备端读取的标定Json文件(Femto Mega, read only)*/
} OBPropertyID,
ob_property_id;
@@ -167,3 +193,4 @@ typedef struct OBPropertyItem {
#endif
#endif // _OB_PROPERTY_H_
#endif // OB_SENSOR_SDK_DEVELOPER
@@ -15,6 +15,7 @@
#include <memory>
#include <string>
#include <vector>
struct DeviceImpl;
struct DeviceInfoImpl;
@@ -27,6 +28,7 @@ class Context;
class DeviceInfo;
class Sensor;
class CameraParamList;
class OBDepthWorkModeList;
class OB_EXTENSION_API Device {
private:
@@ -407,6 +409,66 @@ public:
*/
void getStructuredData(OBPropertyID propertyId, void *data, uint32_t *dataSize);
/**
* \if English
* @brief Get structured data type of device property
*
* @param propertyId Property id
* @param dataBundle Target data
* @param callback Callback of setting
* \else
* @brief Set the Structured Data Ext object
*
* @param propertyId 属性id
* @param dataBundle 设置的目标数据
* @param callback 设置数据回调
* \endif
*/
void setStructuredDataExt(OBPropertyID propertyId, std::shared_ptr<OBDataBundle> dataBundle, SetDataCallback callback);
/**
* \if English
* @brief Get structured data type of device property
*
* @param propertyId Property id
* @return Data bundle
* \else
* @brief 获取structured data类型的数据
*
* @param propertyId 属性id
* @return std::shared_ptr<OBDataBundle> 数据集
* \endif
*/
std::shared_ptr<OBDataBundle> getStructuredDataExt(OBPropertyID propertyId);
/**
* \if English
* @brief Get the property protocol version
*
* @return OBProtocolVersion
* \else
* @brief 获取设备的控制命令协议版本
*
* @return OBProtocolVersion
* \endif
*/
OBProtocolVersion getProtocolVersion();
/**
* \if English
* @brief Get cmdVersion of property
*
* @param propertyId Property id
* @return OBCmdVersion
* \else
* @brief 获取控制命令的版本号
*
* @param propertyId 属性id
* @return OBCmdVersion
* \endif
*/
OBCmdVersion getCmdVersion(OBPropertyID propertyId);
/**
* \if English
* @brief Get number of devices supported property
@@ -563,6 +625,61 @@ public:
*/
std::shared_ptr<CameraParamList> getCalibrationCameraParamList();
/**
* \if English
* @brief Get current depth work mode
*
* @return ob_depth_work_mode Current depth work mode
* \else
* @brief 查询当前的相机深度模式
*
* @return 返回当前的相机深度模式
* \endif
*/
OBDepthWorkMode getCurrentDepthWorkMode();
/**
* \if English
* @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
* \else
* @brief 切换相机深度模式(根据深度工作模式对象),如果知道设备支持的深度工作模式名称,那么推荐用switchDepthWorkMode(const char *modeName)
*
* @param workMode 要切换的相机深度模式
*
* @return 返回指令是否切换成功
* \endif
*/
OBStatus switchDepthWorkMode(const OBDepthWorkMode &workMode);
/**
* \if English
* @brief Switch depth work mode by work mode name.
*
* @param[in] mode name Depth work mode name which equals to ob_depth_work_mode.name
* \else
* @brief 切换相机深度模式(根据深度工作模式名称)
*
* @param workMode
*
* @return ob_status 设置设置结果,OB_STATUS_OK成功,其他:设置失败
* \endif
*/
OBStatus switchDepthWorkMode(const char *modeName);
/**
* \if English
* @brief Request support depth work mode list
* @return OBDepthWorkModeList list of ob_depth_work_mode
* \else
* @brief 查询相机深度模式列表
*
* @return 相机深度模式列表
* \endif
*/
std::shared_ptr<OBDepthWorkModeList> getDepthWorkModeList();
/**
* \if English
* @brief Device restart
@@ -576,6 +693,24 @@ public:
*/
void reboot();
/**
* @brief 获取当前设备同步配置
* @brief 设备同步:包括单机内的不同 Sensor 的曝光同步功能 和 多机同步功能
*
* @return OBDeviceSyncConfig 返回设备同步配置
*/
OBDeviceSyncConfig getSyncConfig();
/**
* @brief 设置设备同步配置
* @brief 用于配置 单机内的不同 Sensor 的曝光同步功能 和 多机同步功能
*
* @attention 调用本函数会直接将配置写入设备Flash,设备重启后依然会生效。为了避免影响Flash寿命,不要频繁更新配置。
*
* @param[out] deviceSyncConfig 设备同步配置
*/
void setSyncConfig(const OBDeviceSyncConfig &deviceSyncConfig);
friend class Pipeline;
friend class Recorder;
};
@@ -934,4 +1069,79 @@ public:
OBCameraParam getCameraParam(uint32_t index);
};
/**
* \if English
* @brief Type contain list of OBDepthWorkMode
* \else
* @brief 相机深度模式列表
* \endif
*
*/
class OB_EXTENSION_API OBDepthWorkModeList {
private:
std::unique_ptr<OBDepthWorkModeListImpl> impl_;
public:
OBDepthWorkModeList(std::unique_ptr<OBDepthWorkModeListImpl> impl_);
~OBDepthWorkModeList();
/**
* \if English
* @brief Get the count of OBDepthWorkMode
*
* @return Count of OBDepthWorkMode
* \else
* @brief 获取相机深度模式的数量
*
* @return 列表中的相机深度模式数量
* \endif
*/
uint32_t count();
/**
* \if English
* @brief Get OBDepthWorkMode at index in OBDepthWorkModeList
*
* @param[in] index Target OBDepthWorkMode's index
*
* @return OBDepthWorkMode at index
* \else
* @brief 根据下标获取相机深度模式
*
* @param index 对应模式列表的下标
* @return 相机深度模式
* \endif
*/
OBDepthWorkMode getOBDepthWorkMode(uint32_t index);
/**
* \if English
* @brief Get depth work mode name at index
*
* @return Depth work mode name
* \else
* @brief 模式名称
*
* @param index 对应模式列表的下标
* @return 模式名称
* \endif
*/
std::string getName(uint32_t index);
/**
* \if English
* @brief Get OBDepthWorkMode at index in OBDepthWorkModeList
*
* @param[in] index Target OBDepthWorkMode's index
*
* @return OBDepthWorkMode at index
* \else
* @brief 运算符重载,根据下标获取相机深度模式
*
* @param index 对应模式列表的下标
* @return 相机深度模式
* \endif
*/
OBDepthWorkMode operator[](uint32_t index);
};
} // namespace ob
@@ -123,28 +123,34 @@ public:
void setFrameAlignState(bool state);
/**
* \if English
* @brief Set point cloud position data scale ratio
* \if English
* @brief Set the point cloud coordinate data zoom factor
*
* @param scale scale ratio
* \else
* @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 Zoom factor
* \else
* @brief 设置点云坐标数据缩放比例
*
* @attention 调用该函数设置缩放比例会改变输出点云帧的点坐标缩放系数:posScale = posScale / scale;
* 输出点云帧的点坐标缩放系数可通过 @ref PointsFrame::getPositionValueScale 函数获取
*
* @param scale 缩放比例
* \endif
* \endif
*/
void setPositionDataScaled(float scale);
/**
* \if English
* @brief Set point cloud color data normalization
* \if English
* @brief Set point cloud color data normalization
*
* @param state Whether to normalize
* \else
* @param state Whether normalization is required
* \else
* @brief 设置点云颜色数据归一化
*
* @param state 是否需要归一化
* \endif
* \endif
*/
void setColorDataNormalization(bool state);
};
@@ -165,4 +171,29 @@ public:
*/
void setFormatConvertType(OBConvertFormat type);
};
} // namespace ob
class OB_EXTENSION_API CompressionFilter : public Filter {
public:
CompressionFilter();
/**
* \if English
* @brief Set compression params
*
* @param mode Compression mode OB_COMPRESSION_LOSSLESS or OB_COMPRESSION_LOSSY
* @param params Compression params, when mode is OB_COMPRESSION_LOSSLESS, params is NULL
* \else
* @brief 设置压缩参数
*
* @param mode 压缩模式 OB_COMPRESSION_LOSSLESS or OB_COMPRESSION_LOSSY
* @param params 压缩参数, 当mode为OB_COMPRESSION_LOSSLESS时,params为NULL
* \endif
*/
void setCompressionParams(OBCompressionMode mode, void *params);
};
class OB_EXTENSION_API DecompressionFilter : public Filter {
public:
DecompressionFilter();
};
} // namespace ob
@@ -13,6 +13,7 @@
#include "Types.hpp"
#include <memory>
#include <iostream>
#include <typeinfo>
/**
@@ -26,7 +27,10 @@
* +--+------+---------+
* | | |
* ColorFrame DepthFrame IRFrame
*
* |
* +-----+-----+
* | |
* IRLeftFrame IRRightFrame
*/
struct FrameImpl;
@@ -280,17 +284,15 @@ public:
/**
* \if English
* @brief Get the value scale of the depth frame, the unit is mm/step,
* such as valueScale=0.1, and a certain coordinate pixel value is pixelValue=10000,
* then the depth value value = pixelValue*valueScale = 10000*0.1=1000mm.
* @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 millimeter.
* such as valueScale=0.1, and a certain coordinate pixel value is pixelValue=10000, then the depth value = pixelValue*valueScale = 10000*0.1=1000mm。
*
* @return float
* @return float scale
* \else
* @brief 获取深度帧的值刻度,单位为 mm/step,
* 如valueScale=0.1, 某坐标像素值为pixelValue=10000,
* @brief 获取深度帧的值缩放系数,深度像素值乘以缩放系数后,可以得到单位为毫米的深度值; 如valueScale=0.1, 某坐标像素值为pixelValue=10000,
* 则表示深度值value = pixelValue*valueScale = 10000*0.1=1000mm。
*
* @return float
* @return float 缩放系数
* \endif
*/
float getValueScale();
@@ -300,12 +302,33 @@ class OB_EXTENSION_API IRFrame : public VideoFrame {
public:
IRFrame(Frame &frame);
virtual ~IRFrame() noexcept {};
public:
OBSensorType getDataSource();
};
class OB_EXTENSION_API PointsFrame : public Frame {
public:
PointsFrame(Frame &frame);
~PointsFrame() noexcept {};
/**
* \if English
* @brief Get the point position value scale of the points frame. the point position value of points frame is multiplied by the scale to give a position
* value in millimeter. such as 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 position value scale
* \else
* @brief 获取点云帧的点坐标值缩放系数,点坐标值乘以缩放系数后,可以得到单位为毫米的坐标值; 如scale=0.1, 某个点的x坐标值为x=10000,
* 则表示实际x坐标value = x*scale = 10000*0.1=1000mm。
*
* @return float 缩放系数
* \endif
*/
float getPositionValueScale();
};
class OB_EXTENSION_API FrameSet : public Frame {
@@ -393,7 +416,7 @@ public:
* @return std::shared_ptr<Frame> 返回相应类型的帧
* \endif
*/
std::shared_ptr<Frame> getFrame(OBSensorType sensorType);
std::shared_ptr<Frame> getFrame(OBFrameType frameType);
friend class Pipeline;
friend class Filter;
@@ -523,6 +546,8 @@ public:
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:
@@ -538,6 +563,7 @@ template <typename T> bool Frame::is() {
case OB_FRAME_POINTS:
return (typeid(T) == typeid(PointsFrame));
default:
std::cout << "ob::Frame::is() not catch frame type: " << (int)this->type() << std::endl;
break;
}
return false;
@@ -230,13 +230,13 @@ public:
std::shared_ptr<StreamProfileList> getD2CDepthProfileList(std::shared_ptr<StreamProfile> colorProfile, OBAlignMode alignMode);
/**
* \if English
* @brief Get valid area between minimum distance and maximum distance after D2C
* \if English
* @brief Get valid area between minimum distance and maximum distance after D2C
*
* @param minimumDistance minimum working distance
* @param maximumDistance maximum working distance
* @return OBRect returns the area information valid after D2C at the working distance
* \else
* \else
* @brief 获取D2C后给定工作范围的有效区域
* 如果需要获取指定距离D2C后的ROI区域,将minimum_distance与maximum_distance设置成一样或者将maximum_distance设置成0
*
@@ -245,7 +245,7 @@ public:
* @return OBRect 返回在工作距离下D2C后有效的区域信息
* \endif
*/
OBRect getD2CValidArea(uint32_t minimumDistance,uint32_t maximumDistance = 0);
OBRect getD2CValidArea(uint32_t minimumDistance, uint32_t maximumDistance = 0);
/**
* \if English
@@ -346,33 +346,34 @@ public:
void setAlignMode(OBAlignMode mode);
/**
* \if English
* @brief Whether scale depth frame after D2C
* \if English
* @brief Whether the depth needs to be scaled after setting D2C
*
* @param enable Scale or not
* \else
* @param enable Whether scaling is required
* \else
* @brief 设置D2C后是否需要缩放深度
*
* @param enable 是否需要缩放
* \endif
* \endif
*/
void setDepthScaleRequire(bool enable);
/**
* \if English
* @brief
*
* @param d2cTargetWidth D2C target width
* @param d2cTargetHeight D2C target height
* \else
* \if English
* @brief Set the D2C target resolution, which 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 has a wide resolution
* @param d2cTargetHeight The D2C target has a high resolutio
* \else
* @brief 设置D2C目标分辨率,适用于未使用OrbbecSDK开启Color流,且需要对深度进行D2C的情况
* 注意:当使用OrbbecSDK开启Color流时,同时使用了此接口设置了D2C目标分辨率时。优先使用开启的Color流的配置进行D2C。
*
* @param d2cTargetWidth D2C目标分辨率宽
* @param d2cTargetHeight D2C目标分辨率高
* \endif
* \endif
*/
void setD2CTargetResolution(uint32_t d2cTargetWidth,uint32_t d2cTargetHeight);
void setD2CTargetResolution(uint32_t d2cTargetWidth, uint32_t d2cTargetHeight);
friend class Pipeline;
};
@@ -1,5 +1,6 @@
/**
* \if English
*
* @file RecordPlayback.hpp
* @brief For recording and playback functions
* \else
@@ -11,6 +11,7 @@
#include "Types.hpp"
#include <iostream>
#include <memory>
struct StreamProfileImpl;
@@ -43,7 +44,7 @@ public:
* @return OBFormat 返回流的格式
* \endif
*/
OBFormat format();
OBFormat format() const;
/**
* \if English
* @brief Get the type of stream
@@ -55,7 +56,7 @@ public:
* @return OBStreamType 返回流的类型
* \endif
*/
OBStreamType type();
OBStreamType type() const;
/**
* \if English
@@ -113,7 +114,7 @@ public:
* @return uint32_t 返回流的帧率
* \endif
*/
uint32_t fps();
uint32_t fps() const;
/**
* \if English
* @brief Get stream width
@@ -125,7 +126,7 @@ public:
* @return uint32_t 返回流的宽
* \endif
*/
uint32_t width();
uint32_t width() const;
/**
* \if English
* @brief Get stream height
@@ -137,7 +138,7 @@ public:
* @return uint32_t 返回流的高
* \endif
*/
uint32_t height();
uint32_t height() const;
};
class OB_EXTENSION_API AccelStreamProfile : public StreamProfile {
@@ -156,7 +157,7 @@ public:
* @return OBAccelFullScaleRange 返回量程范围值
* \endif
*/
OBAccelFullScaleRange fullScaleRange();
OBAccelFullScaleRange fullScaleRange() const;
/**
* \if English
@@ -169,7 +170,7 @@ public:
* @return OBAccelFullScaleRange 返回采样频率
* \endif
*/
OBAccelSampleRate sampleRate();
OBAccelSampleRate sampleRate() const;
};
class OB_EXTENSION_API GyroStreamProfile : public StreamProfile {
@@ -188,7 +189,7 @@ public:
* @return OBAccelFullScaleRange 返回量程范围值
* \endif
*/
OBGyroFullScaleRange fullScaleRange();
OBGyroFullScaleRange fullScaleRange() const;
/**
* \if English
@@ -201,13 +202,15 @@ public:
* @return OBAccelFullScaleRange 返回采样频率
* \endif
*/
OBGyroSampleRate sampleRate();
OBGyroSampleRate sampleRate() const;
};
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:
return typeid(T) == typeid(VideoStreamProfile);
@@ -240,7 +243,7 @@ public:
* @return uint32_t 返回StreamProfile的数量
* \endif
*/
uint32_t count();
uint32_t count() const;
/**
* \if English
@@ -280,4 +283,4 @@ public:
const std::shared_ptr<VideoStreamProfile> getVideoStreamProfile(int width = 0, int height = 0, OBFormat format = OB_FORMAT_UNKNOWN, int fps = 0);
};
} // namespace ob
} // namespace ob
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b4db8103740dd48a22d9025115f7d3a43f147676945464a51ff03c688a18d11
size 64682616
oid sha256:8bd285bf5f9989a9431fd9806761c1bdcb7e898e2053864db8184f801178cf2f
size 84978856
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b4db8103740dd48a22d9025115f7d3a43f147676945464a51ff03c688a18d11
size 64682616
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b4db8103740dd48a22d9025115f7d3a43f147676945464a51ff03c688a18d11
size 64682616