- Depth linearity enhancement - Mitigate the half-pixel disparity issue by adjusting the Amplitude factor in the modulation funciton ()
- Adding getter/setter for the Half-disparity modulation function control rs2_set_amp_factor/rs2_get_amp_factor into the Advanced-mode parameters block.
- Adding a new temperature sensor
- Enumerating Global Timer-supported sensors with explicit extension type
- Global Camera Timestamp:
rs2_timestamp_domain::RS2_TIMESTAMP_DOMAIN_GLOBAL_TIMEenumeration type that will be used as default when the HW timestamp is available via the appropriate metadata attribute.
- Depth units transformation - Processing block
rs2_format::RS2_FORMAT_DISTANCEsynthetic stream format
rs2_error * rs2_create_errorfunctionality
pose_stream_profileclass to handle T265 pose sensor.
- GLSL Processing Blocks Module:
- New header files with new API for GLSL-supported modules are added to include/librealsense2-gl directory
New IR format introduced to D415 -
- Rectified, 10 bit per-pixels (packed) IR stream
- FullHD configuration only 30 fps
- Can be configured for use in conjunction with Depth stream (which is limited to 720p)
- Available as:
rs2_send_wheel_odometry - Wheel odometer API velocity type updated from angular to linear.
No API changes
rs2_get_recommended_processing_blocksRetrieving an ordered list of processing blocks/filters that are recommended to be used for a specific sensor. For instance, for the Depth sensor the list may include (Decimation->Disparity->Spatial->Temporal->HoleFilling->Disparity``) sequence.
rs2_get_recommended_processing_blocks_countRetrieving the number of elements on the processing blocks list
rs2_get_processing_blockExtracting a specific processing block from the list
rs2_delete_recommended_processing_blocksDeleting the processing blocks list. The function shall be used in conjunction with
rs2_get_recommended_processing_blocksmentioned above to explicitly release the allocated resources.
rs2_supports_processing_block_infoTest for attribute availbility without throwing exception
rs2_get_processing_block_infoRetrieve processing block attribute
rs2_is_processing_block_extendable_toCheck API extension support
rs2_create_zero_order_invalidation_blockAdding zero order invalidation processing block
rs2_get_options_listDynamic discovery of the options supported by a librealsense entity (sensor/processing_block/etc`).
rs2_get_options_list_sizeRetrieve the number of elements in the options list.
rs2_get_option_nameReturn human-readable option's name attribute.
rs2_get_option_from_listReturn an indexed element from the lsit
rs2_delete_options_listDeleting the processing blocks list. The function shall be used in conjunction with
rs2_get_options_listto explicitly release previously allocated resources.
- Extending RS2_OPTIONS enumeration list with:
rs2_get_stereo_baselineRetrieve Stereo-based Depth sensor baseline
rs2_context_add_software_deviceInject a software (mockup) device into the SDK's context to be discoverable via
rs2_context_unload_tracking_moduleUnload all perviously acquired tracking device instances. A device query for T265 will automatically take ownership of the connected device. This new API allows to explicitly release the devices so that they will be available for use by external processes.
rs2_export_localization_mapAdvanced feature that allows to export the localization map for later reuse.
rs2_import_localization_mapImport previously-obtained localization map into device.
rs2_set_static_nodeAdd a positional bookmark (name&location) for positional referencing.
rs2_get_static_nodeRetrieve previously stored bookmark position.
rs2_load_wheel_odometry_configLoad the robot platform configuration and calibration data into device. The data includes the rigid body transformation as well as calibration parameters.
rs2_send_wheel_odometryFeed odometer data generated by a third-party sensor into the tracking device.
To be deprecated
rs2_option_to_string- For existing options it will return option name, but for future API additions the user should call rs2_get_option_name instead
rs2_create_yuy_decoderAdding YUY2 to RGB processing block #3056 :
rs2_create_errorExposing librealsense error to avoid cross-boundary new/delete operations:
rs2_create_thresholdAdding depth min/max clamp filter (processing block):
RS2_OPTION_EMITTER_ON_OFFto options enumeration
rs2_processing_block_register_simple_option- adding ability to register custom processing block options
save_single_framesetprocessing blocks to C++ headers only (staging to be added to the API) under rs_export.hpp.
- set_devices_changed_callback - was removed from C++ header files
#2773 introduced asynchronous pipeline API (recommended for high frequency data such as IMU). This change is limited to adding new overloads to
rs2_pipeline_start_with_callback - pipeline start with C function pointer and user data, similar to
rs2_pipeline_start_with_callback_cpp - pipeline start with C++ frame callback object, similar to
- rs2_pipeline_start_with_config_and_callback - pipeline start with callback and config
- rs2_pipeline_start_with_config_and_callback_cpp - pipeline start with callback and config (C++ frame callback object)
- #2687 introduces new API to control recording compression:
- rs2_create_record_device_ex - create recorder and explicitly enable or disable compression. By default, compression will be enabled based on device type. D435i and T265 devices that provide high FPS streams disable compression by default to avoid frame drops during recording.
#2673 adds API to generate IMU and pose data with
Added support for IMU stream and recording IMU frames in software sensor:
- stream_profile add_motion_stream(rs2_motion_stream motion_stream)
- rs2_stream_profile* rs2_software_sensor_add_motion_stream(rs2_sensor* sensor, rs2_motion_stream motion_stream, rs2_error** error);
- void on_motion_frame(rs2_software_motion_frame frame)
- void rs2_software_sensor_on_motion_frame(rs2_sensor* sensor, rs2_software_motion_frame frame, rs2_error** error);
Added support for pose stream and recording pose frames in software sensor:
- stream_profile add_pose_stream(rs2_pose_stream pose_stream)
- rs2_stream_profile* rs2_software_sensor_add_pose_stream(rs2_sensor* sensor, rs2_pose_stream pose_stream, rs2_error** error);
- void on_pose_frame(rs2_software_pose_frame frame)
- void rs2_software_sensor_on_pose_frame(rs2_sensor* sensor, rs2_software_pose_frame frame, rs2_error** error);
#2757 is splitting C++
filterbeing derived from
invokeoperations and does not guaranty results will be immediately available (
processing_blockcan chose to delay frames).
filteris special type of processing block that performs its operation immediately. This lets users compose filters using
rs2_project_color_pixel_to_depth_pixel - map pixel in the color image to pixel in depth image
rs2_allocate_points - allows the user to write custom processing block that outputs frame of type points
frame::apply_filter - this method allows unified application of processing blocks, regardless of processing or frame type. This allows easy composition of processing blocks.
processing_block::operator()(frame f) constwas removed to reduce the overall ways processing block can be invoked. All processing blocks still contain
invokemethod for async processing (that sends the results to callback), and can be applied using added
apply_filtermethod, in addition to helper methods like
calculatespecific to each block.
- rs2_query_devices_ex - provide a list of connected devices with user-specified mask. This allows to cherry-pick specific types (e.g D400/SR300) during device acquisition stage.
rs2_option::RS2_OPTION_INTER_CAM_SYNC_MODE - Master/Slave control for multi-cam setup synchronization.
rs2_frame_metadata_value - Extending available attributes:
- Depth Sensor:
- Laser Power, Laser Power Mode, Exposure Priority, Exposure ROI.
- RGB Sensor:
- Brightness, Contrast, Saturation, Sharpness, Backlight_Compensation, Hue, Gamma, White_Balance_Mode & Temperature, Powerline Frequency and Low Light Compensation.
- Depth Sensor:
- rs2_camera_info::RS2_CAMERA_INFO_RECOMMENDED_FIRMWARE_VERSION - Field was moved next to RS2_CAMERA_INFO_FIRMWARE_VERSION.
- rs2_create_processing_block_fptr - Allows to create custom processing blocks using C-bindings (C, LabView, .NET)
- rs2_start_processing_fptr - Allows to start a processing block with a callback
- rs2_config_enable_device_from_file_repeat_option - Allows to configure pipeline to play from recording while controlling playback-repeat behavior
rs2_create_hole_filling_filter_block - Hole-Filling filter supports three modes of operation:
- Fill from left - fill the hole by the value from an immediate left neighbor
- Fill from Far - select one of the up/down/left/right pixel neighbors farthest away from the camera
- Fill from Near - select one of the up/down/left/right neighbors closest to the camera.
It is recommended to use this post-processing block last in the filters chain. The functionality is integrated and can be reviewed in realsense-viewer/post-processing section
No API changes
RS2_CAMERA_INFO_USB_TYPE_DESCRIPTOR enumeration to detect USB2 vs USB3 mode (when supported by the firmware).
RS2_OPTION_AUTO_EXPOSURE_CONVERGE_STEP enumeration to control the FishEye Auto-Exposure algorithm
The option is available for TM1-enabled devices only.
No API changes
rs2::frameset::get_infrared_frame() - Simpler way for users to get infrared frames from a
void** userparameter were added.
- Change the 'Holes Filling' control for Temporal Post-Processing filter to be activated with
- rs2_keep_frame - this function can be used to preserve specific frame for longer processing. Calling it signals the intention to not return this frame to the pool within next 100ms.
rs2_create_disparity_transform_block A depth data conversion class that transforms depth data info/from disparity domain for stereo-based depth sensors (D400 series). This functionality allows to run post-processing filters in disparity domain to enhance the filtered outcome.
rs2_depth_stereo_frame_get_baseline Retrieve the stereoscopic baseline in mm for stereo-based depth camera.
- rs2_log - Usability function that allows the user to add logs to librealsense internal logger. The feature is useful in debugging and profiling scenarios.
Post-processing depth filters:
- rs2_create_decimation_filter_block - Down-sampling filter that effectively reduces the depth map resolution.
- rs2_create_spatial_filter_block - Spatial edge-preserving depth filter.
- rs2_create_temporal_filter_block - Temporal filter that rectifies depth values based on previously-available frames.
The filters have been integrated into the realsense-viewer and depth-quality tools.
No API changes introduced
- rs2_start_processing_queue - convenience function that lets the user target the output of a processing block (for example align) directly into a frame_queue. This helps in languages where function pointers are not available, such as LabView
Signature of rs2_is_option_read_only, rs2_get_option, rs2_set_option, rs2_supports_option, rs2_get_option_description and rs2_get_option_value_description was changed. First parameter used to be pointer to rs2_sensor and now is pointer to rs2_options. However, it is 100% safe to cast pointer to rs2_sensor to pointer to rs2_options.
See Pipeline Changes pull-request for explanation
- rs2_stop_pipeline is now available as rs2_pipeline_stop
- rs2_start_pipeline is now available as rs2_pipeline_start
- rs2_pipeline_get_device is now available as rs2_pipeline_profile_get_device
- rs2_pipeline_get_active_streams is now available as rs2_pipeline_profile_get_streams
- rs2_enable_pipeline_stream is now available as rs2_config_enable_stream
- rs2_enable_pipeline_device is now available as rs2_config_enable_device
- rs2_disable_stream_pipeline is now available as rs2_config_disable_stream
- rs2_disable_all_streams_pipeline is now available as rs2_config_disable_all_streams
- rs2_get_stream_profile_size - This function was intended to offer an estimate of USB bandwidth, however USB3 performance is affect by factors other then bytes/second, rendering this method useless
- rs2_open_pipeline - This function was offered to force pipeline configuration prior to streaming. This can be more effectively achieved by rs2_config_resolve and rs2_config_can_resolve
- rs2_start_pipeline_with_callback - and rs2_start_pipeline_with_callback_cpp - Pipeline is always performing synchronization at the moment. If you wish to get minimum latency you can use callback API of the individual sensors
- rs2_pipeline_get_selection_count, rs2_pipeline_get_stream_selection, rs2_pipeline_get_stream_type_selection, rs2_pipeline_delete_selection - These methods were redundant
- rs2_get_context_time is now available as rs2_get_time
- rs2_create_pipeline_with_device is now available as rs2_enable_pipeline_device
- rs2_enable_stream_pipeline is now available as rs2_enable_pipeline_stream
- rs2_pipeline_get_selection is now available as rs2_pipeline_get_active_streams
- rs2_can_enable_stream_pipeline - This method, while useful, was not 100% clearly defined. The same goal was more cleanly achieved in a later release - rs2_config_can_resolve
- rs2_pipeline_get_extrinsics - Extrinsics can be queried between stream profiles, and don't require the pipeline or context.
- rs2_pipeline_get_context - Context can be passed to pipeline constructor for dependency injection, but should not be required for anything useful later on.