13 #include "../include/librealsense2/hpp/rs_processing.hpp" 15 #define STRCASE(T, X) case RS2_##T##_##X: {\ 16 static const std::string s##T##_##X##_str = make_less_screamy(#X);\ 17 return s##T##_##X##_str.c_str(); } 28 float const meters_to_milimeters = 1000;
41 float const milimeters_to_meters = 0.001f;
57 for (
auto i = 0;
i < res.size();
i++)
61 if (!first) res[
i] = tolower(res[
i]);
78 LOG_DEBUG(
"recoverable_exception: " << msg);
83 std::ifstream
f(filename);
98 other.frame =
nullptr;
115 #define CASE(X) STRCASE(EXCEPTION_TYPE, X) 119 CASE(CAMERA_DISCONNECTED)
122 CASE(WRONG_API_CALL_SEQUENCE)
123 CASE(NOT_IMPLEMENTED)
124 CASE(DEVICE_IN_RECOVERY_MODE)
133 #define CASE(X) STRCASE(STREAM, X) 153 #define CASE(X) STRCASE(SR300_VISUAL_PRESET, X) 158 CASE(BACKGROUND_SEGMENTATION)
159 CASE(GESTURE_RECOGNITION)
160 CASE(OBJECT_SCANNING)
174 #define CASE(X) STRCASE(SENSOR_MODE, X) 187 #define CASE(X) STRCASE(CALIBRATION, X) 190 CASE( AUTO_DEPTH_TO_RGB )
191 CASE( MANUAL_DEPTH_TO_RGB )
200 #define CASE(X) STRCASE(CALIBRATION, X) 204 CASE( SPECIAL_FRAME )
209 CASE( BAD_CONDITIONS )
211 CASE( SCENE_INVALID )
221 #define CASE(X) STRCASE(AMBIENT_LIGHT, X) 233 #define CASE(X) STRCASE(DIGITAL_GAIN, X) 245 #define CASE(X) STRCASE(CAH_TRIGGER, X) 258 #define CASE(X) STRCASE(HOST_PERF, X) 271 #define CASE(X) STRCASE(EXTENSION, X) 284 CASE(COMPOSITE_FRAME)
291 CASE(DEPTH_STEREO_SENSOR)
292 CASE(DISPARITY_FRAME)
297 CASE(SOFTWARE_DEVICE)
298 CASE(SOFTWARE_SENSOR)
299 CASE(DECIMATION_FILTER)
300 CASE(THRESHOLD_FILTER)
301 CASE(DISPARITY_FILTER)
303 CASE(TEMPORAL_FILTER)
304 CASE(HOLE_FILLING_FILTER)
305 CASE(ZERO_ORDER_FILTER)
306 CASE(RECOMMENDED_FILTERS)
313 CASE(L500_DEPTH_SENSOR)
315 CASE(AUTO_CALIBRATED_DEVICE)
319 CASE(DEPTH_HUFFMAN_DECODER)
322 CASE(AUTO_CALIBRATION_FILTER)
323 CASE(DEVICE_CALIBRATION)
324 CASE(CALIBRATED_SENSOR)
325 CASE(SEQUENCE_ID_FILTER)
327 CASE(MAX_USABLE_RANGE_SENSOR)
328 CASE(DEBUG_STREAM_SENSOR)
329 CASE(CALIBRATION_CHANGE_DEVICE)
337 #define CASE(X) STRCASE(PLAYBACK_STATUS, X) 351 #define CASE(X) STRCASE(LOG_SEVERITY, X) 367 #define CASE(X) STRCASE(OPTION, X) 465 #define CASE(X) case RS2_FORMAT_##X: return #X; 505 #define CASE(X) STRCASE(DISTORTION, X) 509 CASE(MODIFIED_BROWN_CONRADY)
510 CASE(INVERSE_BROWN_CONRADY)
513 CASE(KANNALA_BRANDT4)
521 #define CASE(X) STRCASE(CAMERA_INFO, X) 526 CASE(FIRMWARE_VERSION)
527 CASE(RECOMMENDED_FIRMWARE_VERSION)
534 CASE(USB_TYPE_DESCRIPTOR)
535 CASE(ASIC_SERIAL_NUMBER)
536 CASE(FIRMWARE_UPDATE_ID)
545 #define CASE(X) STRCASE(FRAME_METADATA, X) 549 CASE(FRAME_TIMESTAMP)
550 CASE(SENSOR_TIMESTAMP)
551 CASE(ACTUAL_EXPOSURE)
555 CASE(TIME_OF_ARRIVAL)
557 CASE(BACKEND_TIMESTAMP)
559 CASE(FRAME_LASER_POWER)
560 CASE(FRAME_LASER_POWER_MODE)
561 CASE(EXPOSURE_PRIORITY)
562 CASE(EXPOSURE_ROI_LEFT)
563 CASE(EXPOSURE_ROI_RIGHT)
564 CASE(EXPOSURE_ROI_TOP)
565 CASE(EXPOSURE_ROI_BOTTOM)
570 CASE(AUTO_WHITE_BALANCE_TEMPERATURE)
574 CASE(MANUAL_WHITE_BALANCE)
576 CASE(LOW_LIGHT_COMPENSATION)
577 CASE(FRAME_EMITTER_MODE)
578 CASE(FRAME_LED_POWER)
580 CASE(GPIO_INPUT_DATA)
591 #define CASE(X) STRCASE(TIMESTAMP_DOMAIN, X) 604 #define CASE(X) STRCASE(CALIB_TARGET, X) 607 CASE(RECT_GAUSSIAN_DOT_VERTICES)
615 #define CASE(X) STRCASE(NOTIFICATION_CATEGORY, X) 619 CASE(FRAME_CORRUPTED)
623 CASE(FIRMWARE_UPDATE_RECOMMENDED)
624 CASE(POSE_RELOCALIZATION)
631 #define CASE(X) STRCASE(MATCHER, X) 647 #define CASE(X) STRCASE(L500_VISUAL_PRESET, X) 666 if (is_any)
return "any";
669 s << std::setfill(
'0') << std::setw(2) << m_major <<
"." 670 << std::setfill(
'0') << std::setw(2) << m_minor <<
"." 671 << std::setfill(
'0') << std::setw(2) << m_patch <<
"." 672 << std::setfill(
'0') << std::setw(2) << m_build;
678 std::vector<std::string>
result;
680 auto i = str.begin();
682 i = find_if_not(
i,
e, [](
char c) {
return c ==
'.'; });
685 result.emplace_back(
i,
j);
693 return atoi(
split(name)[part].c_str());
703 double theta = sqrt(std::inner_product(rot.begin(), rot.end(), rot.begin(), 0.0));
704 double r1 = rot[0], r2 = rot[1], r3 = rot[2];
707 rot_mat(0, 0) = rot_mat(1, 1) = rot_mat(2, 2) = 1.0;
708 rot_mat(0, 1) = rot_mat(0, 2) = rot_mat(1, 0) = rot_mat(1, 2) = rot_mat(2, 0) = rot_mat(2, 1) = 0.0;
716 double c = cos(theta);
717 double s = sin(theta);
720 rot_mat(0, 0) = float(c + g * r1 * r1);
721 rot_mat(0, 1) = float(g * r1 * r2 - s * r3);
722 rot_mat(0, 2) = float(g * r1 * r3 + s * r2);
723 rot_mat(1, 0) = float(g * r2 * r1 + s * r3);
724 rot_mat(1, 1) = float(c + g * r2 * r2);
725 rot_mat(1, 2) = float(g * r2 * r3 - s * r1);
726 rot_mat(2, 0) = float(g * r3 * r1 - s * r2);
727 rot_mat(2, 1) = float(g * r3 * r2 + s * r1);
728 rot_mat(2, 2) = float(c + g * r3 * r3);
735 : extrinsic_validator(extrinsic_validator), intrinsic_validator(intrinsic_validator)
754 #define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8)) 757 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
758 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
759 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
760 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
761 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
762 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
763 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
764 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
765 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
766 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
767 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
768 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
769 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
770 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
771 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
772 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
773 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
774 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
775 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
776 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
777 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
778 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
779 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
780 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
781 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
782 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
783 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
784 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
785 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
786 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
787 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
788 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
789 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
790 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
791 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
792 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
793 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
794 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
795 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
796 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
797 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
798 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
799 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
807 oldcrc32 =
UPDC32(*buf, oldcrc32);
838 auto from =
reinterpret_cast<uint8_t const*
>(
src);
839 std::copy(from, from + size, reinterpret_cast<uint8_t*>(dst));
844 snapshot = std::make_shared<color_sensor_snapshot>();
static const textual_icon lock
rs2_camera_info
Read-only strings that can be queried from the device. Not all information attributes are available o...
std::function< bool(rs2_stream from_stream, rs2_stream to_stream)> extrinsic_validator
rs2_exception_type
Exception types are the different categories of errors that RealSense API might return.
const char * get_string(rs2_rs400_visual_preset value)
GLuint const GLchar * name
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
std::vector< uint32_t > split(const std::string &s, char delim)
std::string to_string() const
rs2_distortion
Distortion model: defines how pixel coordinates should be mapped to sensor coordinates.
std::string make_less_screamy(const char *str)
rs2_sr300_visual_preset
For SR300 devices: provides optimized settings (presets) for specific types of usage.
rs2_calib_target_type
Calibration target type.
static const float THERMAL
notifications_callback_ptr _callback
GLenum GLuint GLsizei bufsize
frame_holder clone() const
std::mutex _callback_mutex
GLsizei const GLchar *const * string
rs2_host_perf_mode
values for RS2_OPTION_HOST_PERFORMANCE option.
#define UPDC32(octet, crc)
rs2_cah_trigger
values for RS2_OPTION_TRIGGER_CAMERA_ACCURACY_HEALTH option.
bool validate_extrinsics(rs2_stream from_stream, rs2_stream to_stream) const
bool is_valid(const plane_3d &p)
GLenum GLuint GLenum GLsizei const GLchar * buf
bool validate_intrinsics(rs2_stream stream) const
recoverable_exception(const std::string &msg, rs2_exception_type exception_type) noexcept
rs2_extrinsics to_raw_extrinsics(rs2_extrinsics extr)
rs2_extrinsics from_raw_extrinsics(rs2_extrinsics extr)
const double SQRT_DBL_EPSILON
rs2_matchers
Specifies types of different matchers.
bool file_exists(const char *filename)
std::shared_ptr< rs2_notifications_callback > notifications_callback_ptr
static std::vector< std::string > split(const std::string &str)
rs2_format
A stream's format identifies how binary data is encoded within a frame.
void create_snapshot(std::shared_ptr< color_sensor > &snapshot) const override
void swap(nlohmann::json &j1, nlohmann::json &j2) noexcept(is_nothrow_move_constructible< nlohmann::json >::value andis_nothrow_move_assignable< nlohmann::json >::value)
exchanges the values of two JSON objects
rs2_stream
Streams are different types of data provided by RealSense devices.
rs2_sensor_mode
For setting the camera_mode option.
Cross-stream extrinsics: encodes the topology describing how the different devices are oriented...
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
rs2_notification_category
Category of the librealsense notification.
void set_callback(notifications_callback_ptr callback)
typename::boost::move_detail::remove_reference< T >::type && move(T &&t) BOOST_NOEXCEPT
rs2_ambient_light
DEPRECATED! - Use RS2_OPTION_DIGITAL_GAIN instead.
~notifications_processor()
notifications_processor()
rs2_digital_gain
digital gain for RS2_OPTION_DIGITAL_GAIN option.
static int parse_part(const std::string &name, int part)
static const uint32_t crc_32_tab[]
std::function< bool(rs2_stream stream)> intrinsic_validator
rs2_log_severity
Severity of the librealsense logger.
notifications_callback_ptr get_callback() const
frame_holder & operator=(frame_holder &&other)
float3x3 calc_rotation_from_rodrigues_angles(const std::vector< double > rot)
rs2_frame_metadata_value
Per-Frame-Metadata is the set of read-only properties that might be exposed for each individual frame...
void copy(void *dst, void const *src, size_t size)
uint32_t calc_crc32(const uint8_t *buf, size_t bufsize)
Calculate CRC code for arbitrary characters buffer.
rs2_l500_visual_preset
For L500 devices: provides optimized settings (presets) for specific types of usage.
rs2_timestamp_domain
Specifies the clock in relation to which the frame timestamp was measured.