This commit is contained in:
2025-12-18 14:40:00 +08:00
commit 449bee6cc7
378 changed files with 93265 additions and 0 deletions

View File

@@ -0,0 +1,335 @@
// Copyright (c) Orbbec Inc. All Rights Reserved.
// Licensed under the MIT License.
/**
* @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 Pointer to an error object that will be set if an error occurs.
* @return ob_pipeline* return the pipeline object
*/
OB_EXPORT 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 Pointer to an error object that will be set if an error occurs.
* @return ob_pipeline* return the pipeline object
*/
OB_EXPORT ob_pipeline *ob_create_pipeline_with_device(const ob_device *dev, ob_error **error);
/**
* @brief Delete pipeline objects
*
* @param[in] pipeline The pipeline object to be deleted
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_pipeline_start_with_config(ob_pipeline *pipeline, const ob_config *config, ob_error **error);
/**
* @brief Start the pipeline and set the frame collection data callback
*
* @attention After start the pipeline with this interface, the frames will be output to the callback function and cannot be obtained frames by call
* @ob_pipeline_wait_for_frameset
*
* @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 Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_pipeline_start_with_callback(ob_pipeline *pipeline, const ob_config *config, ob_frameset_callback callback, void *user_data,
ob_error **error);
/**
* @brief Stop pipeline
*
* @param[in] pipeline pipeline object
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 Pointer to an error object that will be set if an error occurs.
* @return ob_config* The configuration object
*/
OB_EXPORT ob_config *ob_pipeline_get_config(const ob_pipeline *pipeline, ob_error **error);
/**
* @brief Switch the corresponding configuration
*
* @param[in] pipeline The pipeline object
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
*/
OB_EXPORT void ob_pipeline_switch_config(ob_pipeline *pipeline, ob_config *config, 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 Pointer to an error object that will be set if an error occurs.
* @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_EXPORT 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 Pointer to an error object that will be set if an error occurs.
* @return ob_device* The device object
*/
OB_EXPORT ob_device *ob_pipeline_get_device(const 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 Pointer to an error object that will be set if an error occurs.
* @return ob_stream_profile_list* The stream profile list
*/
OB_EXPORT ob_stream_profile_list *ob_pipeline_get_stream_profile_list(const ob_pipeline *pipeline, ob_sensor_type sensorType, ob_error **error);
/**
* @brief Enable frame synchronization
* @brief Synchronize the frames of different streams by using the timestamp information of the frames.
* @brief Dynamically (when pipeline is started) enable/disable frame synchronization is allowed.
*
* @param[in] pipeline The pipeline object
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_pipeline_disable_frame_sync(ob_pipeline *pipeline, 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 Pointer to an error object that will be set if an error occurs.
* @return ob_stream_profile_list* The list of D2C-enabled depth sensor resolutions
*/
OB_EXPORT ob_stream_profile_list *ob_get_d2c_depth_profile_list(const ob_pipeline *pipeline, const ob_stream_profile *color_profile, ob_align_mode align_mode,
ob_error **error);
/**
* @brief Create the pipeline configuration
*
* @param[out] error Pointer to an error object that will be set if an error occurs.
* @return ob_config* The configuration object
*/
OB_EXPORT ob_config *ob_create_config(ob_error **error);
/**
* @brief Delete the pipeline configuration
*
* @param[in] config The configuration to be deleted
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_delete_config(ob_config *config, ob_error **error);
/**
* @brief Enable a stream with default profile
*
* @param[in] config The pipeline configuration object
* @param[in] stream_type The type of the stream to be enabled
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_enable_stream(ob_config *config, ob_stream_type stream_type, ob_error **error);
/**
* @brief Enable all streams in the pipeline configuration
*
* @param[in] config The pipeline configuration
* @param[out] error Log error messages
*/
OB_EXPORT void ob_config_enable_all_stream(ob_config *config, ob_error **error);
/**
* @brief Enable a stream according to the stream profile
*
* @param[in] config The pipeline configuration object
* @param[in] profile The stream profile to be enabled
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_enable_stream_with_stream_profile(ob_config *config, const ob_stream_profile *profile, ob_error **error);
/**
* @brief Enable video stream with specified parameters
*
* @attention The stream_type should be a video stream type, such as OB_STREAM_IR, OB_STREAM_COLOR, OB_STREAM_DEPTH, etc.
*
* @param[in] config The pipeline configuration object
* @param[in] stream_type The type of the stream to be enabled
* @param[in] width The width of the video stream
* @param[in] height The height of the video stream
* @param[in] fps The frame rate of the video stream
* @param[in] format The format of the video stream
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_enable_video_stream(ob_config *config, ob_stream_type stream_type, uint32_t width, uint32_t height, uint32_t fps, ob_format format,
ob_error **error);
/**
* @brief Enable accelerometer stream with specified parameters
*
* @param[in] config The pipeline configuration object
* @param[in] full_scale_range The full scale range of the accelerometer
* @param[in] sample_rate The sample rate of the accelerometer
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 gyroscope stream with specified parameters
*
* @param[in] config The pipeline configuration object
* @param[in] full_scale_range The full scale range of the gyroscope
* @param[in] sample_rate The sample rate of the gyroscope
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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);
/**
* @brief Get the enabled stream profile list in the pipeline configuration
*
* @param config The pipeline configuration object
* @param error Pointer to an error object that will be set if an error occurs.
* @return ob_stream_profile_list* The enabled stream profile list, should be released by @ref ob_delete_stream_profile_list after use
*/
OB_EXPORT ob_stream_profile_list *ob_config_get_enabled_stream_profile_list(const ob_config *config, ob_error **error);
/**
* @brief Disable a specific stream in the pipeline configuration
*
* @param[in] config The pipeline configuration object
* @param[in] type The type of stream to be disabled
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 object
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT 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 object
* @param[in] mode The alignment mode to be set
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_set_align_mode(ob_config *config, ob_align_mode mode, ob_error **error);
/**
* @brief Set whether depth scaling is required after enable depth to color alignment
* @brief After enabling depth to color alignment, the depth image may need to be scaled to match the color image size.
*
* @param[in] config The pipeline configuration object
* @param[in] enable Whether scaling is required
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_set_depth_scale_after_align_require(ob_config *config, bool enable, 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 object
* @param[in] mode The frame aggregation output mode to be set (default mode is @ref OB_FRAME_AGGREGATE_OUTPUT_ANY_SITUATION)
* @param[out] error Pointer to an error object that will be set if an error occurs.
*/
OB_EXPORT void ob_config_set_frame_aggregate_output_mode(ob_config *config, ob_frame_aggregate_output_mode mode, 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_EXPORT ob_camera_param ob_pipeline_get_camera_param(ob_pipeline *pipeline, 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_EXPORT 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 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_EXPORT ob_calibration_param ob_pipeline_get_calibration_param(ob_pipeline *pipeline, ob_config *config, ob_error **error);
// The following interfaces are deprecated and are retained here for compatibility purposes.
#define ob_config_set_depth_scale_require ob_config_set_depth_scale_after_align_require
#ifdef __cplusplus
}
#endif