Update SDK to g2r temp version

This commit is contained in:
Joe Dong
2024-03-15 10:23:58 +08:00
parent f3f5cb8df9
commit e5db48d03a
13 changed files with 838 additions and 117 deletions
+82 -18
View File
@@ -102,6 +102,78 @@ void *ob_frame_data(ob_frame *frame, ob_error **error);
*/
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
*
@@ -120,24 +192,6 @@ uint32_t ob_video_frame_width(ob_frame *frame, ob_error **error);
*/
uint32_t ob_video_frame_height(ob_frame *frame, ob_error **error);
/**
* @brief Get the metadata of the frame
*
* @param[in] frame Video frame object
* @param[out] error Log error messages
* @return void* return the metadata pointer of the frame
*/
void *ob_video_frame_metadata(ob_frame *frame, ob_error **error);
/**
* @brief Get the metadata size of the frame
*
* @param[in] frame Video frame object
* @param[out] error Log error messages
* @return uint32_t return the metadata size of the frame
*/
uint32_t ob_video_frame_metadata_size(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
@@ -239,6 +293,16 @@ ob_frame *ob_frameset_points_frame(ob_frame *frameset, ob_error **error);
*/
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.
*
+359 -27
View File
@@ -213,11 +213,11 @@ typedef enum {
OB_FORMAT_MJPG = 5, /**< MJPEG encoding format */
OB_FORMAT_H264 = 6, /**< H.264 encoding format */
OB_FORMAT_H265 = 7, /**< H.265 encoding format */
OB_FORMAT_Y16 = 8, /**< Y16 format, single channel 16-bit depth */
OB_FORMAT_Y8 = 9, /**< Y8 format, single channel 8-bit depth */
OB_FORMAT_Y10 = 10, /**< Y10 format, single channel 10-bit depth (SDK will unpack into Y16 by default) */
OB_FORMAT_Y11 = 11, /**< Y11 format, single channel 11-bit depth (SDK will unpack into Y16 by default) */
OB_FORMAT_Y12 = 12, /**< Y12 format, single channel 12-bit depth (SDK will unpack into Y16 by default) */
OB_FORMAT_Y16 = 8, /**< Y16 format, 16-bit per pixel, single-channel*/
OB_FORMAT_Y8 = 9, /**< Y8 format, 8-bit per pixel, single-channel */
OB_FORMAT_Y10 = 10, /**< Y10 format, 10-bit per pixel, single-channel(SDK will unpack into Y16 by default) */
OB_FORMAT_Y11 = 11, /**< Y11 format, 11-bit per pixel, single-channel (SDK will unpack into Y16 by default) */
OB_FORMAT_Y12 = 12, /**< Y12 format, 12-bit per pixel, single-channel(SDK will unpack into Y16 by default) */
OB_FORMAT_GRAY = 13, /**< GRAY (the actual format is the same as YUYV) */
OB_FORMAT_HEVC = 14, /**< HEVC encoding format (the actual format is the same as H265) */
OB_FORMAT_I420 = 15, /**< I420 format */
@@ -228,10 +228,14 @@ typedef enum {
OB_FORMAT_RLE = 21, /**< RLE pressure test format (SDK will be unpacked into Y16 by default) */
OB_FORMAT_RGB = 22, /**< RGB format (actual RGB888) */
OB_FORMAT_BGR = 23, /**< BGR format (actual BGR888) */
OB_FORMAT_Y14 = 24, /**< Y14 format, single channel 14-bit depth (SDK will unpack into Y16 by default) */
OB_FORMAT_Y14 = 24, /**< Y14 format, 14-bit per pixel, single-channel (SDK will unpack into Y16 by default) */
OB_FORMAT_BGRA = 25, /**< BGRA format */
OB_FORMAT_COMPRESSED = 26, /**< Compression format */
OB_FORMAT_RVL = 27, /**< RVL pressure test format (SDK will be unpacked into Y16 by default) */
OB_FORMAT_Z16 = 28, /**< Is same as Y16*/
OB_FORMAT_YV12 = 29, /**< Is same as Y12, using for right ir stream*/
OB_FORMAT_BA81 = 30, /**< Is same as Y8, using for right ir stream*/
OB_FORMAT_RGBA = 31, /**< RGBA format */
OB_FORMAT_UNKNOWN = 0xff, /**< unknown format */
} OBFormat,
ob_format;
@@ -325,6 +329,28 @@ typedef struct {
float def; ///< Default value
} OBFloatPropertyRange, ob_float_property_range;
/**
* @brief Structure for float range
*/
typedef struct {
uint16_t cur; ///< Current value
uint16_t max; ///< Maximum value
uint16_t min; ///< Minimum value
uint16_t step; ///< Step value
uint16_t def; ///< Default value
} OBUint16PropertyRange, ob_uint16_property_range;
/**
* @brief Structure for float range
*/
typedef struct {
uint8_t cur; ///< Current value
uint8_t max; ///< Maximum value
uint8_t min; ///< Minimum value
uint8_t step; ///< Step value
uint8_t def; ///< Default value
} OBUint8PropertyRange, ob_uint8_property_range;
/**
* @brief Structure for boolean range
*/
@@ -337,7 +363,7 @@ typedef struct {
} OBBoolPropertyRange, ob_bool_property_range;
/**
* @brief Structure for camera internal parameters
* @brief Structure for camera intrinsic parameters
*/
typedef struct {
float fx; ///< Focal length in x direction
@@ -348,6 +374,31 @@ typedef struct {
int16_t height; ///< Image height
} OBCameraIntrinsic, ob_camera_intrinsic;
/**
* @brief Structure for accelerometer intrinsic parameters
*/
typedef struct {
double noiseDensity; ///< In-run bias instability
double randomWalk; ///< random walk
double referenceTemp; ///< reference temperature
double bias[3]; ///< bias for x, y, z axis
double gravity[3]; ///< gravity direction for x, y, z axis
double scaleMisalignment[9]; ///< scale factor and three-axis non-orthogonal error
double tempSlope[9]; ///< linear temperature drift coefficient
} OBAccelIntrinsic, ob_accel_intrinsic;
/**
* @brief Structure for gyroscope intrinsic parameters
*/
typedef struct {
double noiseDensity; ///< In-run bias instability
double randomWalk; ///< random walk
double referenceTemp; ///< reference temperature
double bias[3]; ///< bias for x, y, z axis
double scaleMisalignment[9]; ///< scale factor and three-axis non-orthogonal error
double tempSlope[9]; ///< linear temperature drift coefficient
} OBGyroIntrinsic, ob_gyro_intrinsic;
/**
* @brief Structure for distortion parameters
*/
@@ -362,13 +413,33 @@ typedef struct {
float p2; ///< Tangential distortion factor 2
} OBCameraDistortion, ob_camera_distortion;
/** \brief Distortion model: defines how pixel coordinates should be mapped to sensor coordinates. */
typedef enum {
OB_DISTORTION_NONE, /**< Rectilinear images. No distortion compensation required. */
OB_DISTORTION_INVERSE_BROWN_CONRADY, /**< Equivalent to Brown-Conrady distortion, except undistorts image instead of distorting it */
OB_DISTORTION_BROWN_CONRADY, /**< Unmodified Brown-Conrady distortion model */
} OBCameraDistortionModel, ob_camera_distortion_model;
/** \brief Video stream intrinsics. */
typedef struct {
int width; /**< Width of the image in pixels */
int height; /**< Height of the image in pixels */
float ppx; /**< Horizontal coordinate of the principal point of the image, as a pixel offset from the left edge */
float ppy; /**< Vertical coordinate of the principal point of the image, as a pixel offset from the top edge */
float fx; /**< Focal length of the image plane, as a multiple of pixel width */
float fy; /**< Focal length of the image plane, as a multiple of pixel height */
OBCameraDistortionModel model; /**< Distortion model of the image */
float coeffs[5]; /**< Distortion coefficients. Order for Brown-Conrady: [k1, k2, p1, p2, k3]. Order for F-Theta Fish-eye: [k1, k2, k3, k4, 0]. Other models
are subject to their own interpretations */
} OBCameraAlignIntrinsic, ob_camera_align_intrinsic;
/**
* @brief Structure for rotation/transformation
*/
typedef struct {
float rot[9]; ///< Rotation matrix
float trans[3]; ///< Transformation matrix
} OBD2CTransform, ob_d2c_transform, OBTransform, ob_transform;
float trans[3]; ///< Transformation matrix in millimeters
} OBD2CTransform, ob_d2c_transform, OBTransform, ob_transform, OBExtrinsic, ob_extrinsic;
/**
* @brief Structure for camera parameters
@@ -400,7 +471,7 @@ typedef struct {
typedef struct {
OBCameraIntrinsic intrinsics[OB_SENSOR_COUNT]; ///< Sensor internal parameters
OBCameraDistortion distortion[OB_SENSOR_COUNT]; ///< Sensor distortion
OBTransform extrinsics[OB_SENSOR_COUNT][OB_SENSOR_COUNT]; ///< The extrinsic parameters allow 3D coordinate conversions between sensor.To transform from a
OBExtrinsic extrinsics[OB_SENSOR_COUNT][OB_SENSOR_COUNT]; ///< The extrinsic parameters allow 3D coordinate conversions between sensor.To transform from a
///< source to a target 3D coordinate system,under extrinsics[source][target].
} OBCalibrationParam, ob_calibration_param;
@@ -456,28 +527,41 @@ typedef struct {
* @brief Enumeration of format conversion types
*/
typedef enum {
FORMAT_YUYV_TO_RGB888 = 0, /**< YUYV to RGB888 */
FORMAT_I420_TO_RGB888, /**< I420 to RGB888 */
FORMAT_NV21_TO_RGB888, /**< NV21 to RGB888 */
FORMAT_NV12_TO_RGB888, /**< NV12 to RGB888 */
FORMAT_MJPG_TO_I420, /**< MJPG to I420 */
FORMAT_RGB888_TO_BGR, /**< RGB888 to BGR */
FORMAT_MJPG_TO_NV21, /**< MJPG to NV21 */
FORMAT_MJPG_TO_RGB888, /**< MJPG to RGB888 */
FORMAT_MJPG_TO_BGR888, /**< MJPG to BGR888 */
FORMAT_MJPG_TO_BGRA, /**< MJPG to BGRA */
FORMAT_UYVY_TO_RGB888, /**< UYVY to RGB888 */
FORMAT_BGR_TO_RGB, /**< BGR to RGB */
FORMAT_MJPG_TO_NV12, /**< MJPG to NV12 */
FORMAT_YUYV_TO_RGB = 0, /**< YUYV to RGB */
FORMAT_I420_TO_RGB, /**< I420 to RGB */
FORMAT_NV21_TO_RGB, /**< NV21 to RGB */
FORMAT_NV12_TO_RGB, /**< NV12 to RGB */
FORMAT_MJPG_TO_I420, /**< MJPG to I420 */
FORMAT_RGB_TO_BGR, /**< RGB888 to BGR */
FORMAT_MJPG_TO_NV21, /**< MJPG to NV21 */
FORMAT_MJPG_TO_RGB, /**< MJPG to RGB */
FORMAT_MJPG_TO_BGR, /**< MJPG to BGR */
FORMAT_MJPG_TO_BGRA, /**< MJPG to BGRA */
FORMAT_UYVY_TO_RGB, /**< UYVY to RGB */
FORMAT_BGR_TO_RGB, /**< BGR to RGB */
FORMAT_MJPG_TO_NV12, /**< MJPG to NV12 */
FORMAT_YUYV_TO_BGR, /**< YUYV to BGR */
FORMAT_YUYV_TO_RGBA, /**< YUYV to RGBA */
FORMAT_YUYV_TO_BGRA, /**< YUYV to BGRA */
FORMAT_YUYV_TO_Y16, /**< YUYV to Y16 */
FORMAT_YUYV_TO_Y8, /**< YUYV to Y8 */
} OBConvertFormat,
ob_convert_format;
// DEPRECATED: Only used for old version program compatibility, will be completely deleted in subsequent iterative versions
#define FORMAT_MJPEG_TO_I420 FORMAT_MJPG_TO_I420
#define FORMAT_MJPEG_TO_NV21 FORMAT_MJPG_TO_NV21
#define FORMAT_MJPEG_TO_RGB888 FORMAT_MJPG_TO_RGB888
#define FORMAT_MJPEG_TO_BGR888 FORMAT_MJPG_TO_BGR888
#define FORMAT_MJPEG_TO_BGRA FORMAT_MJPG_TO_BGRA
#define FORMAT_YUYV_TO_RGB888 FORMAT_YUYV_TO_RGB
#define FORMAT_I420_TO_RGB888 FORMAT_I420_TO_RGB
#define FORMAT_NV21_TO_RGB888 FORMAT_NV21_TO_RGB
#define FORMAT_NV12_TO_RGB888 FORMAT_NV12_TO_RGB
#define FORMAT_UYVY_TO_RGB888 FORMAT_UYVY_TO_RGB
#define FORMAT_MJPG_TO_RGB888 FORMAT_MJPG_TO_RGB
#define FORMAT_MJPG_TO_BGR888 FORMAT_MJPG_TO_BGR
#define FORMAT_MJPEG_TO_RGB888 FORMAT_MJPG_TO_RGB
#define FORMAT_MJPEG_TO_BGR888 FORMAT_MJPG_TO_BGR
#define FORMAT_RGB888_TO_BGR FORMAT_RGB_TO_BGR
/**
* @brief Enumeration of IMU sample rate values (gyroscope or accelerometer)
@@ -848,6 +932,37 @@ typedef struct {
char name[32];
} OBDepthWorkMode, ob_depth_work_mode;
/**
* @brief Hole fillig mode
*/
typedef enum {
OB_HOLE_FILL_TOP = 0,
OB_HOLE_FILL_NEAREST = 1, // "max" means farest for depth, and nearest for disparity; FILL_NEAREST
OB_HOLE_FILL_FAREST = 2, // FILL_FAREST
} OBHoleFillingMode, ob_hole_filling_mode;
typedef struct {
uint8_t magnitude; // magnitude
float alpha; // smooth_alpha
uint16_t disp_diff; // smooth_delta
uint16_t radius; // hole_fill
} OBSpatialAdvancedFilterParams, ob_spatial_advanced_filter_params;
/**
* @brief 去噪方式
*/
typedef enum OB_DDO_NOISE_REMOVAL_TYPE {
OB_NR_LUT = 0, // SPLIT
OB_NR_OVERALL = 1, // NON_SPLIT
} OBDDONoiseRemovalType, ob_ddo_noise_removal_type;
typedef struct {
uint16_t size;
uint16_t disp_diff;
OBDDONoiseRemovalType type;
} OBNoiseRemovalFilterParams, ob_noise_removal_filter_params;
;
/**
* @brief Control command protocol version number
*/
@@ -1254,6 +1369,225 @@ typedef struct {
float zpd;
} BASELINE_CALIBRATION_PARAM, ob_baseline_calibration_param, OBBaselineCalibrationParam;
/**
* @brief HDR Configuration
*/
typedef struct {
/**
* @brief Enable/disable HDR, after enabling HDR, the exposure_1 and gain_1 will be used as the first exposure and gain, and the exposure_2 and gain_2 will
* be used as the second exposure and gain. The output image will be alternately exposed and gain between the first and second
* exposure and gain.
*
* @attention After enabling HDR, the auto exposure will be disabled.
*/
uint8_t enable;
uint8_t sequence_name; ///< Sequence name
uint32_t exposure_1; ///< Exposure time 1
uint32_t gain_1; ///< Gain 1
uint32_t exposure_2; ///< Exposure time 2
uint32_t gain_2; ///< Gain 2
} HDR_CONFIG, ob_hdr_config, OBHdrConfig;
/**
* @brief The rect of the region of interest
*/
typedef struct {
int16_t x0_left;
int16_t y0_top;
int16_t x1_right;
int16_t y1_bottom;
} AE_ROI, ob_region_of_interest, OBRegionOfInterest;
/**
* @brief Frame metadata types
* @brief The frame metadata is a set of meta info generated by the device for current individual frame.
*/
typedef enum {
/**
* @brief Timestamp when the frame is captured.
* @attention Different device models may have different units. It is recommended to use the timestamp related functions to get the timestamp in the
* correct units.
*/
OB_FRAME_METADATA_TYPE_TIMESTAMP = 0,
/**
* @brief Timestamp in the middle of the capture.
* @brief Usually is the middle of the exposure time.
*
* @attention Different device models may have different units.
*/
OB_FRAME_METADATA_TYPE_SENSOR_TIMESTAMP = 1,
/**
* @brief The number of current frame.
*/
OB_FRAME_METADATA_TYPE_FRAME_NUMBER = 2,
/**
* @brief Auto exposure status
* @brief If the value is 0, it means the auto exposure is disabled. Otherwise, it means the auto exposure is enabled.
*/
OB_FRAME_METADATA_TYPE_AUTO_EXPOSURE = 3,
/**
* @brief Exposure time
*
* @attention Different sensor may have different units. Usually, it is 100us for color sensor and 1us for depth/infrared sensor.
*/
OB_FRAME_METADATA_TYPE_EXPOSURE = 4,
/**
* @brief Gain
*
* @attention For some device models, the gain value represents the gain level, not the multiplier.
*/
OB_FRAME_METADATA_TYPE_GAIN = 5,
/**
* @brief Auto white balance status
* @brief If the value is 0, it means the auto white balance is disabled. Otherwise, it means the auto white balance is enabled.
*/
OB_FRAME_METADATA_TYPE_AUTO_WHITE_BALANCE = 6,
/**
* @brief White balance
*/
OB_FRAME_METADATA_TYPE_WHITE_BALANCE = 7,
/**
* @brief Brightness
*/
OB_FRAME_METADATA_TYPE_BRIGHTNESS = 8,
/**
* @brief Contrast
*/
OB_FRAME_METADATA_TYPE_CONTRAST = 9,
/**
* @brief Saturation
*/
OB_FRAME_METADATA_TYPE_SATURATION = 10,
/**
* @brief Sharpness
*/
OB_FRAME_METADATA_TYPE_SHARPNESS = 11,
/**
* @brief Backlight compensation
*/
OB_FRAME_METADATA_TYPE_BACKLIGHT_COMPENSATION = 12,
/**
* @brief Hue
*/
OB_FRAME_METADATA_TYPE_HUE = 13,
/**
* @brief Gamma
*/
OB_FRAME_METADATA_TYPE_GAMMA = 14,
/**
* @brief Power line frequency
* @brief For anti-flickering 0Close 1 50Hz 2 60Hz 3 Auto
*/
OB_FRAME_METADATA_TYPE_POWER_LINE_FREQUENCY = 15,
/**
* @brief Low light compensation
*
* @attention The low light compensation is a feature inside the deviceand can not manually control it.
*/
OB_FRAME_METADATA_TYPE_LOW_LIGHT_COMPENSATION = 16,
/**
* @brief Manual white balance setting
*/
OB_FRAME_METADATA_TYPE_MANUAL_WHITE_BALANCE = 17,
/**
* @brief Actual frame rate
* @brief The actual frame rate will be calculated according to the exposure time and other parameters.
*/
OB_FRAME_METADATA_TYPE_ACTUAL_FRAME_RATE = 18,
/**
* @brief Frame rate
*/
OB_FRAME_METADATA_TYPE_FRAME_RATE = 19,
/**
* @brief Left region of interest for the auto exposure Algorithm.
*/
OB_FRAME_METADATA_TYPE_AE_ROI_LEFT = 20,
/**
* @brief Top region of interest for the auto exposure Algorithm.
*/
OB_FRAME_METADATA_TYPE_AE_ROI_TOP = 21,
/**
* @brief Right region of interest for the auto exposure Algorithm.
*/
OB_FRAME_METADATA_TYPE_AE_ROI_RIGHT = 22,
/**
* @brief Bottom region of interest for the auto exposure Algorithm.
*/
OB_FRAME_METADATA_TYPE_AE_ROI_BOTTOM = 23,
/**
* @brief Exposure priority
*/
OB_FRAME_METADATA_TYPE_EXPOSURE_PRIORITY = 24,
/**
* @brief HDR sequence name
*/
OB_FRAME_METADATA_TYPE_HDR_SEQUENCE_NAME = 25,
/**
* @brief HDR sequence size
*/
OB_FRAME_METADATA_TYPE_HDR_SEQUENCE_SIZE = 26,
/**
* @brief HDR sequence index
*/
OB_FRAME_METADATA_TYPE_HDR_SEQUENCE_INDEX = 27,
/**
* @brief Laser power value in mW
*/
OB_FRAME_METADATA_TYPE_LASER_POWER = 28,
/**
* @brief Laser power mode
* @brief 0: Laser off, 1: Laser on
*/
OB_FRAME_METADATA_TYPE_LASER_POWER_MODE = 29,
/**
* @brief Emitter mode
* @brief 0: Laser off, 1: Laser on, 2: auto
*/
OB_FRAME_METADATA_TYPE_EMITTER_MODE = 30,
/**
* @brief GPIO input data
*/
OB_FRAME_METADATA_TYPE_GPIO_INPUT_DATA = 31,
/**
* @brief The number of frame metadata types, using for types iterating
*/
OB_FRAME_METADATA_TYPE_COUNT,
} ob_frame_metadata_type,
OBFrameMetadataType;
/**
* @brief Callback for file transfer
*
@@ -1356,8 +1690,6 @@ typedef void(ob_frame_destroy_callback)(void *buffer, void *user_data);
*/
typedef void(ob_log_callback)(ob_log_severity severity, const char *message, void *user_data);
typedef void(ob_get_imu_data_callback)(const uint8_t *data, uint32_t dataLen);
/**
* @brief Check if sensor_type is an IR sensor
*
@@ -84,6 +84,7 @@ 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
@@ -262,6 +263,7 @@ void ob_delete_config(ob_config *config, ob_error **error);
void ob_config_enable_stream(ob_config *config, ob_stream_profile *profile, 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
@@ -269,6 +271,15 @@ void ob_config_enable_stream(ob_config *config, ob_stream_profile *profile, ob_e
*/
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
*
@@ -384,6 +384,29 @@ typedef enum {
*/
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_MODE_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 Baseline calibration parameters
*/
@@ -442,6 +465,32 @@ typedef enum {
*/
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
*/
@@ -592,6 +641,11 @@ typedef enum {
*/
OB_PROP_SKIP_FRAME_BOOL = 2036,
/**
* @brief Depth HDR merge, true: on, false: off.
*/
OB_PROP_HDR_MERGE_BOOL = 2037,
/**
* @brief Software disparity to depth
*/
@@ -14,7 +14,7 @@ extern "C" {
/**
* @brief Get stream profile format
*
* @param[in] profile Stream configuration object
* @param[in] profile Stream profile object
* @param[out] error Log error messages
* @return ob_format return the format of the stream
*/
@@ -23,42 +23,71 @@ ob_format ob_stream_profile_format(ob_stream_profile *profile, ob_error **error)
/**
* @brief Get stream profile type
*
* @param[in] profile Stream configuration object
* @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 frame rate of the video stream configuration
* @brief Get the extrinsic for source stream to target stream
*
* @param[in] profile Stream configuration object
* @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 configuration
* @brief Get the width of the video stream
*
* @param[in] profile Stream configuration object, if the configuration is not a video stream configuration, an error will be returned
* @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 configuration
* @brief Get the height of the video stream
*
* @param[in] profile Stream configuration object, if the configuration is not a video stream configuration, an error will be returned
* @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 configuration object. If the configuration is not for the accelerometer stream, an error will be returned.
* @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.
*/
@@ -67,25 +96,43 @@ ob_accel_full_scale_range ob_accel_stream_profile_full_scale_range(ob_stream_pro
/**
* @brief Get the sampling frequency of the accelerometer frame.
*
* @param[in] profile Stream configuration object. If the configuration is not for the accelerometer stream, an error will be returned.
* @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 configuration object. If the configuration is not for the gyroscope stream, an error will be returned.
* @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 configuration object. If the configuration is not for the gyroscope stream, an error will be returned.
* @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.
*/
@@ -162,7 +209,7 @@ void ob_delete_stream_profile_list(ob_stream_profile_list *profile_list, ob_erro
/**
* @brief Delete the stream configuration.
*
* @param[in] profile Stream configuration object.
* @param[in] profile Stream profile object .
* @param[out] error Log error messages.
*/
void ob_delete_stream_profile(ob_stream_profile *profile, ob_error **error);
@@ -37,23 +37,6 @@ bool ob_calibration_3d_to_3d(const ob_calibration_param calibration_param, const
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.
*
@@ -105,7 +88,7 @@ ob_frame *transformation_depth_frame_to_color_camera(ob_device *device, ob_frame
* @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).
* * 1080 * 2 (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
@@ -125,18 +108,6 @@ bool transformation_init_xy_tables(const ob_calibration_param calibration_param,
*/
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
@@ -8,6 +8,7 @@
#include "Types.hpp"
#include <functional>
#include <memory>
#include <map>
namespace ob {
class Frame;
@@ -150,4 +151,172 @@ public:
DecompressionFilter();
};
/**
* @brief Hole filling filter
*/
class OB_EXTENSION_API HoleFillingFilter : public Filter {
public:
HoleFillingFilter();
void enable(bool enable);
bool isEnabled();
void setFilterMode(OBHoleFillingMode mode);
};
/**
* @brief Temporal filter
*/
class OB_EXTENSION_API TemporalFilter : public Filter {
public:
TemporalFilter();
void enable(bool enable);
bool isEnabled();
OBFloatPropertyRange getDiffScaleRange();
void setDiffScale(float value);
OBFloatPropertyRange getWeightRange();
void setWeight(float value);
};
/**
* @brief Spatial advanced filter
*/
class OB_EXTENSION_API SpatialAdvancedFilter : public Filter {
public:
SpatialAdvancedFilter();
void enable(bool enable);
bool isEnabled();
OBFloatPropertyRange getAlphaRange();
OBUint16PropertyRange getDispDiffRange();
OBUint16PropertyRange getRadiusRange();
OBIntPropertyRange getMagnitudeRange();
OBSpatialAdvancedFilterParams getFilterParams();
void setFilterParams(OBSpatialAdvancedFilterParams params);
};
/**
* @brief Depth to disparity or disparity to depth
*/
class OB_EXTENSION_API DisparityTransform : public Filter {
public:
DisparityTransform();
DisparityTransform(bool depth_to_disparity);
void enable(bool enable);
bool isEnabled();
};
/**
* @brief Depth HDR merge
*/
class OB_EXTENSION_API HdrMerge : public Filter {
public:
HdrMerge();
void enable(bool enable);
bool isEnabled();
};
/**
* @brief Align for depth to other or other to depth.
*/
class OB_EXTENSION_API Align : public Filter {
public:
Align(OBStreamType align_to_stream, OBFrameType align_to_frame);
void enable(bool enable);
bool isEnabled();
};
/**
* @brief Creates depth Thresholding filter
* By controlling min and max options on the block
*/
class OB_EXTENSION_API ThresholdFilter : public Filter {
public:
ThresholdFilter();
void enable(bool enable);
bool isEnabled();
OBIntPropertyRange getMinRange();
OBIntPropertyRange getMaxRange();
void setValueRange(uint16_t min, uint16_t max);
};
/**
* @brief
*/
class OB_EXTENSION_API SequenceIdFilter : public Filter {
public:
SequenceIdFilter();
void enable(bool enable);
bool isEnabled();
void selectSequenceId(float sequence_id);
float getSelectSequenceId();
std::map<float, std::string> getSequenceIdList();
};
/**
* @brief
*/
class OB_EXTENSION_API NoiseRemovalFilter : public Filter {
public:
NoiseRemovalFilter();
void enable(bool enable);
bool isEnabled();
void setNoiseRemovalFilterParams(OBNoiseRemovalFilterParams *filterParams);
OBUint16PropertyRange getDispDiffRange();
OBUint16PropertyRange getSizeRange();
};
/**
* @brief
*/
class OB_EXTENSION_API DecimationFilter : public Filter {
public:
DecimationFilter();
void enable(bool enable);
bool isEnabled();
void setScaleValue(uint8_t value);
OBUint8PropertyRange getScaleRange();
};
} // namespace ob
@@ -31,6 +31,8 @@
struct FrameImpl;
namespace ob {
class Device;
class Sensor;
class StreamProfile;
class Filter;
class FrameHelper;
@@ -120,6 +122,57 @@ public:
*/
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.
*
@@ -171,20 +224,6 @@ public:
*/
uint32_t height();
/**
* @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 Get the effective number of pixels in the frame.
* @attention Only valid for Y8/Y10/Y11/Y12/Y14/Y16 format.
@@ -66,7 +66,7 @@ public:
/**
* @brief Start the pipeline and set the frameset data callback
*
* @param config The parameter configuration of the pipeline
* @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);
@@ -78,6 +78,7 @@ public:
/**
* @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
*/
@@ -220,6 +221,7 @@ public:
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();
@@ -236,6 +238,13 @@ public:
*/
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
*
@@ -267,7 +276,7 @@ public:
* @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)
* @param mode The frame aggregation output mode to be set (default mode is @ref OB_FRAME_AGGREGATE_OUTPUT_FULL_FRAME_REQUIRE)
*/
void setFrameAggregateOutputMode(OBFrameAggregateOutputMode mode);
@@ -42,6 +42,13 @@ public:
*/
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
*
@@ -100,6 +107,21 @@ public:
* @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();
};
/**
@@ -126,6 +148,13 @@ public:
* @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();
};
/**
@@ -151,6 +180,13 @@ public:
* @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() {
@@ -105,7 +105,7 @@ public:
* @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).
* 1080 * 2 (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
*
@@ -123,16 +123,5 @@ public:
*
*/
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
@@ -1 +1 @@
libOrbbecSDK.so.1.9.4
libOrbbecSDK.so.1.9.2