35 uint32_t last_timestamp;
36 mutable uint64_t counter;
37 mutable std::recursive_mutex _mtx;
43 std::lock_guard<std::recursive_mutex> lock(_mtx);
52 std::lock_guard<std::recursive_mutex> lock(_mtx);
54 uint32_t rolling_timestamp = *
reinterpret_cast<const uint32_t *
>(fo.
pixels);
57 total = last_timestamp = rolling_timestamp;
58 last_timestamp = rolling_timestamp;
62 const int delta = rolling_timestamp - last_timestamp;
63 last_timestamp = rolling_timestamp;
66 return total * 0.00001;
71 std::lock_guard<std::recursive_mutex> lock(_mtx);
86 std::unique_ptr<sr300_timestamp_reader> _backup_timestamp_reader;
88 mutable std::recursive_mutex _mtx;
96 const bool has_md_ts = [&]{ std::lock_guard<std::recursive_mutex> lock(_mtx);
106 const bool has_md_frame_counter = [&] { std::lock_guard<std::recursive_mutex> lock(_mtx);
110 return has_md_frame_counter;
124 void reset()
override;
132 std::shared_ptr<device_interface> create(std::shared_ptr<context> ctx,
133 bool register_device_notifications)
const override;
140 _depth(
std::move(depth)), _hwm(
std::move(hwm)) {}
142 static std::vector<std::shared_ptr<device_info>> pick_sr300_devices(
143 std::shared_ptr<context> ctx,
144 std::vector<platform::uvc_device_info>& platform,
145 std::vector<platform::usb_device_info>& usb);
166 if (!is_valid(
value))
169 _owner.rs2_apply_ivcam_preset(static_cast<int>(
value));
171 _recording_function(*
this);
174 float query()
const override {
return last_value; }
180 return "Recommended sets of options optimized for different visual use-cases";
186 static_cast<rs2_sr300_visual_preset>(
187 static_cast<int>(val)));
204 std::unique_ptr<frame_timestamp_reader> timestamp_reader,
205 std::shared_ptr<context> ctx)
206 :
uvc_sensor(
"RGB Camera", uvc_device, move(timestamp_reader), owner), _owner(owner)
211 return make_color_intrinsics(*_owner->_camer_calib_params, { int(profile.width), int(profile.height) });
220 for (
auto p : results)
225 assign_stream(_owner->_color_stream, p);
232 if (video->get_width() == 1920 && video->get_height() == 1080 && video->get_format() ==
RS2_FORMAT_RGB8 && video->get_framerate() == 30)
236 std::weak_ptr<sr300_color_sensor> wp =
238 video->set_intrinsics([profile, wp]()
242 return sp->get_intrinsics(profile);
258 std::unique_ptr<frame_timestamp_reader> timestamp_reader,
259 std::shared_ptr<context> ctx)
260 :
uvc_sensor(
"Coded-Light Depth Sensor", uvc_device, move(timestamp_reader), owner), _owner(owner)
265 return make_depth_intrinsics(*_owner->_camer_calib_params, { int(profile.width), int(profile.height) });
274 for (
auto p : results)
279 assign_stream(_owner->_depth_stream, p);
283 assign_stream(_owner->_ir_stream, p);
290 if (video->get_width() == 640 && video->get_height() == 480 && video->get_format() ==
RS2_FORMAT_Z16 && video->get_framerate() == 30)
294 std::weak_ptr<sr300_depth_sensor> wp =
297 video->set_intrinsics([profile, wp]()
301 return sp->get_intrinsics(profile);
314 snapshot = std::make_shared<depth_sensor_snapshot>(get_depth_scale());
319 recording_function(*
this);
329 auto color_ep = std::make_shared<sr300_color_sensor>(
this, ctx->get_backend().create_uvc_device(color),
332 color_ep->register_pixel_format(
pf_yuy2);
333 color_ep->register_pixel_format(
pf_yuyv);
349 std::make_shared<auto_disabling_control>(
350 white_balance_option,
351 auto_white_balance_option));
358 std::make_shared<auto_disabling_control>(
360 auto_exposure_option));
379 using namespace ivcam;
381 auto&& backend = ctx->get_backend();
384 auto depth_ep = std::make_shared<sr300_depth_sensor>(
this, backend.create_uvc_device(depth),
388 depth_ep->register_pixel_format(
pf_invz);
389 depth_ep->register_pixel_format(
pf_y8);
394 "Power of the SR300 projector, with 0 meaning projector off");
396 "Set the number of patterns projected per frame.\nThe higher the accuracy value the more patterns projected.\nIncreasing the number of patterns help to achieve better accuracy.\nNote that this control is affecting the Depth FPS");
398 "Motion vs. Range trade-off, with lower values allowing for better motion\nsensitivity and higher values allowing for better depth range");
400 "The confidence level threshold used by the Depth algorithm pipe to set whether\na pixel will get a valid range or will be marked with invalid range");
402 "Set the filter to apply to each depth frame.\nEach one of the filter is optimized per the application requirements");
421 return _hw_monitor->send(input);
426 force_hardware_reset();
437 bool register_device_notifications);
441 const auto DEPTH_CONTROLS = 5;
442 const rs2_option arr_options[DEPTH_CONTROLS] = {
473 { 1, -1, -1, -1, -1 },
477 { 1, -1, -1, -1, - 1 }
485 for (
auto opt : arr_options)
487 auto&& o = get_depth_sensor().get_option(opt);
488 o.set(o.get_range().def);
493 for (
auto i = 0; i < DEPTH_CONTROLS; i++)
495 if (arr_values[preset][i] >= 0)
497 auto&& o = get_depth_sensor().get_option(arr_options[i]);
498 o.set(arr_values[preset][i]);
505 void create_snapshot(std::shared_ptr<debug_interface>& snapshot)
const override;
506 void enable_recording(std::function<
void(
const debug_interface&)> record_action)
override;
509 virtual std::shared_ptr<matcher> create_matcher(
const frame_holder&
frame)
const override;
511 const uint8_t _depth_device_idx;
512 const uint8_t _color_device_idx;
513 std::shared_ptr<hw_monitor> _hw_monitor;
522 id, std::move(desc)));
525 void register_autorange_options()
527 auto arr = std::make_shared<ivcam::cam_auto_range_request>();
528 auto arr_reader_writer = make_struct_interface<ivcam::cam_auto_range_request>(
529 [arr]() {
return *arr; },
543 float read_mems_temp()
const;
544 int read_ir_temp()
const;
546 void force_hardware_reset()
const;
547 void enable_timestamp(
bool colorEnable,
bool depthEnable)
const;
552 std::shared_ptr<stream_interface> _depth_stream;
553 std::shared_ptr<stream_interface> _ir_stream;
554 std::shared_ptr<stream_interface> _color_stream;
555 std::shared_ptr<lazy<rs2_extrinsics>> _depth_to_color_extrinsics;
Definition: ivcam-private.h:57
stream_profiles init_stream_profiles() override
Definition: sr300.h:214
Definition: rs_frame.h:33
Definition: rs_frame.h:32
Definition: rs_option.h:33
sr300_color_sensor(sr300_camera *owner, std::shared_ptr< platform::uvc_device > uvc_device, std::unique_ptr< frame_timestamp_reader > timestamp_reader, std::shared_ptr< context > ctx)
Definition: sr300.h:203
stream_profiles init_stream_profiles() override
uint16_t actual_fps
Definition: metadata.h:238
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
unsigned char byte
Definition: types.h:33
void hardware_reset() override
Definition: sr300.h:424
Definition: rs_frame.h:21
const char * get_value_description(float val) const override
Definition: sr300.h:183
std::shared_ptr< uvc_sensor > create_color_device(std::shared_ptr< context > ctx, const platform::uvc_device_info &color)
Definition: sr300.h:326
Definition: rs_option.h:41
const native_pixel_format pf_y8
Definition: rs_sensor.h:57
const platform::extension_unit depth_xu
Definition: ivcam-private.h:25
Definition: rs_option.h:31
Definition: rs_option.h:39
virtual void make_default()=0
float query() const override
Definition: sr300.h:174
Definition: rs_option.h:26
const char * rs2_sr300_visual_preset_to_string(rs2_sr300_visual_preset preset)
Definition: rs_option.h:52
uint16_t frame_latency
Definition: metadata.h:204
Definition: rs_option.h:30
unsigned long long get_frame_counter(const request_mapping &, const platform::frame_object &fo) const override
Definition: sr300.h:69
rs2_intrinsics get_intrinsics(const stream_profile &profile) const override
Definition: sr300.h:209
uint32_t frame_counter
Definition: metadata.h:176
uvc_sensor & get_depth_sensor()
Definition: sr300.h:429
void register_option(rs2_option id, std::shared_ptr< option > option)
Definition: options.h:75
Definition: rs_sensor.h:41
Definition: rs_sensor.h:61
Definition: rs_frame.h:36
Definition: rs_option.h:37
uint16_t actual_exposure
Definition: metadata.h:234
Definition: rs_option.h:24
sr300_info(std::shared_ptr< context > ctx, platform::uvc_device_info color, platform::uvc_device_info depth, platform::usb_device_info hwm)
Definition: sr300.h:135
preset_option(sr300_camera &owner, const option_range &opt_range)
Definition: sr300.h:190
std::shared_ptr< uvc_sensor > create_depth_device(std::shared_ptr< context > ctx, const platform::uvc_device_info &depth)
Definition: sr300.h:376
Definition: rs_frame.h:30
sr300_timestamp_reader()
Definition: sr300.h:39
Definition: rs_option.h:81
const double TIMESTAMP_10NSEC_TO_MSEC
Definition: sr300.h:26
uint16_t actual_fps
Definition: metadata.h:200
const native_pixel_format pf_yuy2
uint8_t gain
Definition: metadata.h:191
const uint8_t IVCAM_DEPTH_FILTER_OPTION
Definition: ivcam-private.h:15
void rs2_apply_ivcam_preset(int preset)
Definition: sr300.h:439
uint16_t actual_exposure
Definition: metadata.h:202
sr300_depth_sensor(sr300_camera *owner, std::shared_ptr< platform::uvc_device > uvc_device, std::unique_ptr< frame_timestamp_reader > timestamp_reader, std::shared_ptr< context > ctx)
Definition: sr300.h:257
const uint8_t IVCAM_DEPTH_MOTION_RANGE
Definition: ivcam-private.h:13
Definition: rs_option.h:29
Definition: rs_frame.h:37
Definition: rs_option.h:28
rs2_timestamp_domain get_frame_timestamp_domain(const request_mapping &mode, const platform::frame_object &fo) const override
Definition: sr300.h:75
std::vector< uint8_t > send_receive_raw_data(const std::vector< uint8_t > &input) override
Definition: sr300.h:419
std::shared_ptr< md_attribute_parser_base > make_uvc_header_parser(Attribute St::*attribute, attrib_modifyer mod=nullptr)
A utility function to create UVC metadata header parser.
Definition: metadata-parser.h:162
void enable_recording(std::function< void(const depth_sensor &)> recording_function) override
Definition: sr300.h:316
platform::backend_device_group get_device_data() const override
Definition: sr300.h:147
Definition: rs_frame.h:34
const platform::extension_unit depth_xu
Definition: ds5-private.h:80
std::vector< std::shared_ptr< stream_profile_interface >> stream_profiles
Definition: streaming.h:104
const uint8_t IVCAM_DEPTH_CONFIDENCE_THRESH
Definition: ivcam-private.h:16
const char * get_description() const override
Definition: sr300.h:178
Definition: rs_sensor.h:40
Definition: rs_frame.h:41
Definition: ivcam-private.h:28
Definition: rs_frame.h:31
Definition: rs_sensor.h:42
rs2_intrinsics get_intrinsics(const stream_profile &profile) const override
Definition: sr300.h:263
void reset() override
Definition: sr300.h:41
extrinsics_graph & get_extrinsics_graph()
bool is_enabled() const override
Definition: sr300.h:176
const uint8_t IVCAM_DEPTH_LASER_POWER
Definition: ivcam-private.h:11
double get_frame_timestamp(const request_mapping &, const platform::frame_object &fo) override
Definition: sr300.h:50
stream_profile to_profile(const stream_profile_interface *sp)
Definition: stream.h:170
long long rs2_metadata_type
Definition: rs_types.h:180
stream_profiles init_stream_profiles() override
Definition: sr300.h:268
const native_pixel_format pf_yuyv
Definition: rs_option.h:27
const uint8_t IVCAM_DEPTH_ACCURACY
Definition: ivcam-private.h:12
Video stream intrinsics.
Definition: rs_types.h:55
Definition: rs_option.h:34
const native_pixel_format pf_sr300_invi
Definition: rs_option.h:35
Definition: streaming.h:158
const uint16_t SR300_PID
Definition: sr300.h:24
uint16_t color_temperature
Definition: metadata.h:203
double rs2_time_t
Definition: rs_types.h:179
void create_snapshot(std::shared_ptr< depth_sensor > &snapshot) const override
Definition: sr300.h:312
Definition: rs_option.h:32
const native_pixel_format pf_sr300_inzi
std::shared_ptr< md_attribute_parser_base > make_sr300_attribute_parser(Attribute S::*attribute, unsigned long long offset, attrib_modifyer mod=nullptr)
A helper function to create a specialized attribute parser. Return it as a pointer to a base-class...
Definition: metadata-parser.h:359
const native_pixel_format pf_invz
static environment & get_instance()
Definition: rs_frame.h:22
Definition: rs_option.h:38
Definition: rs_option.h:36
Definition: rs_option.h:84
Definition: rs_option.h:25
Definition: rs_option.h:40
uint32_t frame_counter
Definition: metadata.h:214
uint8_t auto_exp_mode
Definition: metadata.h:189
float get_depth_scale() const override
Definition: sr300.h:310
rs2_timestamp_domain
Specifies the clock in relation to which the frame timestamp was measured.
Definition: rs_frame.h:19