context.h
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2015 Intel Corporation. All Rights Reserved.
3 
4 #pragma once
5 
6 #include "types.h"
7 #include "backend.h"
8 #include "mock/recorder.h"
9 #include "core/streaming.h"
10 
11 #include <vector>
13 
14 namespace librealsense
15 {
16  class context;
17  class device_info;
18 }
19 
21 {
22  std::shared_ptr<librealsense::context> ctx;
23  std::shared_ptr<librealsense::device_info> info;
24 };
25 
27 {
28  std::shared_ptr<librealsense::context> ctx;
29  std::vector<rs2_device_info> list;
30 };
31 
33 {
35  std::shared_ptr<librealsense::stream_profile_interface> clone;
36 };
37 
38 namespace librealsense
39 {
40  class device;
41  class context;
42 
44  {
45  public:
46  virtual std::shared_ptr<device_interface> create_device() const
47  {
48  return create(_ctx, true);
49  }
50 
51  virtual ~device_info() = default;
52 
54 
55  virtual bool operator==(const device_info& other) const
56  {
57  return other.get_device_data() == get_device_data();
58  }
59 
60  protected:
61  explicit device_info(std::shared_ptr<context> backend)
62  : _ctx(move(backend))
63  {}
64 
65  virtual std::shared_ptr<device_interface> create(std::shared_ptr<context> ctx,
66  bool register_device_notifications) const = 0;
67 
68  std::shared_ptr<context> _ctx;
69  };
70 
71  enum class backend_type
72  {
73  standard,
74  record,
75  playback
76  };
77 
78 
80  {
81  std::shared_ptr<playback_device> _dev;
82  public:
83  explicit playback_device_info(std::shared_ptr<playback_device> dev)
84  : device_info(nullptr), _dev(dev)
85  {
86 
87  }
88 
89  std::shared_ptr<device_interface> create_device() const override
90  {
91  return _dev;
92  }
94  {
96  }
97 
98  std::shared_ptr<device_interface> create(std::shared_ptr<context>, bool) const override
99  {
100  return _dev;
101  }
102  };
103 
104  typedef std::vector<std::shared_ptr<device_info>> devices_info;
105 
106  class context : public std::enable_shared_from_this<context>
107  {
108  public:
109  explicit context(backend_type type,
110  const char* filename = nullptr,
111  const char* section = nullptr,
113  std::string min_api_version = "0.0.0");
114 
115  void stop() { _device_watcher->stop(); }
116  ~context();
117  std::vector<std::shared_ptr<device_info>> query_devices(int mask) const;
118  const platform::backend& get_backend() const { return *_backend; }
119 
123 
124  std::vector<std::shared_ptr<device_info>> create_devices(platform::backend_device_group devices,
125  const std::map<std::string, std::weak_ptr<device_info>>& playback_devices, int mask) const;
126 
127  std::shared_ptr<playback_device_info> add_device(const std::string& file);
128  void remove_device(const std::string& file);
129 
130  void add_software_device(std::shared_ptr<device_info> software_device);
131 
132 #if WITH_TRACKING
133  void unload_tracking_module();
134 #endif
135 
136  private:
139  const std::map<std::string, std::weak_ptr<device_info>>& old_playback_devices,
140  const std::map<std::string, std::weak_ptr<device_info>>& new_playback_devices);
141  void raise_devices_changed(const std::vector<rs2_device_info>& removed, const std::vector<rs2_device_info>& added);
142  void start_device_watcher();
143 
144  std::shared_ptr<platform::backend> _backend;
145  std::shared_ptr<platform::device_watcher> _device_watcher;
146 
147  std::map<std::string, std::weak_ptr<device_info>> _playback_devices;
148  std::map<uint64_t, devices_changed_callback_ptr> _devices_changed_callbacks;
149 
151  std::map<int, std::weak_ptr<const stream_interface>> _streams;
152  std::map<int, std::map<int, std::weak_ptr<lazy<rs2_extrinsics>>>> _extrinsics;
154  };
155 
157  {
158  public:
159  readonly_device_info(std::shared_ptr<device_interface> dev) : device_info(dev->get_context()), _dev(dev) {}
160  std::shared_ptr<device_interface> create(std::shared_ptr<context> ctx, bool register_device_notifications) const override
161  {
162  return _dev;
163  }
164 
166  {
167  return _dev->get_device_data();
168  }
169  private:
170  std::shared_ptr<device_interface> _dev;
171  };
172 
173  // Helper functions for device list manipulation:
174  std::vector<platform::uvc_device_info> filter_by_product(const std::vector<platform::uvc_device_info>& devices, const std::set<uint16_t>& pid_list);
175  std::vector<std::pair<std::vector<platform::uvc_device_info>, std::vector<platform::hid_device_info>>> group_devices_and_hids_by_unique_id(
176  const std::vector<std::vector<platform::uvc_device_info>>& devices,
177  const std::vector<platform::hid_device_info>& hids);
178  std::vector<std::vector<platform::uvc_device_info>> group_devices_by_unique_id(const std::vector<platform::uvc_device_info>& devices);
179  void trim_device_list(std::vector<platform::uvc_device_info>& devices, const std::vector<platform::uvc_device_info>& chosen);
180  bool mi_present(const std::vector<platform::uvc_device_info>& devices, uint32_t mi);
181  platform::uvc_device_info get_mi(const std::vector<platform::uvc_device_info>& devices, uint32_t mi);
182  std::vector<platform::uvc_device_info> filter_by_mi(const std::vector<platform::uvc_device_info>& devices, uint32_t mi);
183 
184  std::vector<platform::usb_device_info> filter_by_product(const std::vector<platform::usb_device_info>& devices, const std::set<uint16_t>& pid_list);
185  void trim_device_list(std::vector<platform::usb_device_info>& devices, const std::vector<platform::usb_device_info>& chosen);
186 }
librealsense::device_info::create_device
virtual std::shared_ptr< device_interface > create_device() const
Definition: context.h:46
Catch::Generators::map
GeneratorWrapper< T > map(Func &&function, GeneratorWrapper< U > &&generator)
Definition: catch.hpp:4271
rs2_device_list::ctx
std::shared_ptr< librealsense::context > ctx
Definition: context.h:28
librealsense::playback_device_info
Definition: context.h:79
librealsense
Definition: calibration-model.h:9
device
auto device
Definition: pyrs_net.cpp:17
rs2_device_info::info
std::shared_ptr< librealsense::device_info > info
Definition: context.h:23
librealsense::platform::playback_device_info
Definition: backend.h:248
librealsense::context::unregister_internal_device_callback
void unregister_internal_device_callback(uint64_t cb_id)
Definition: context.cpp:475
librealsense::group_devices_and_hids_by_unique_id
std::vector< std::pair< std::vector< platform::uvc_device_info >, std::vector< platform::hid_device_info > > > group_devices_and_hids_by_unique_id(const std::vector< std::vector< platform::uvc_device_info >> &devices, const std::vector< platform::hid_device_info > &hids)
Definition: context.cpp:520
librealsense::context::_devices_changed_callback
devices_changed_callback_ptr _devices_changed_callback
Definition: context.h:150
test-d405-calibration-stream.dev
dev
Definition: test-d405-calibration-stream.py:11
librealsense::device_info
Definition: context.h:43
recorder.h
librealsense::context::set_devices_changed_callback
void set_devices_changed_callback(devices_changed_callback_ptr callback)
Definition: context.cpp:486
librealsense::stream_profile_interface
Definition: streaming.h:61
streaming.h
rspy.test.context
context
Definition: test.py:30
librealsense::filter_by_mi
std::vector< platform::uvc_device_info > filter_by_mi(const std::vector< platform::uvc_device_info > &devices, uint32_t mi)
Definition: context.cpp:663
test-non-realtime.filename
filename
Definition: test-non-realtime.py:20
mode
GLenum mode
Definition: glad/glad/glad.h:1385
boost::move
typename ::boost::move_detail::remove_reference< T >::type && move(T &&t) BOOST_NOEXCEPT
Definition: utility_core.hpp:191
librealsense::context::_extrinsics
std::map< int, std::map< int, std::weak_ptr< lazy< rs2_extrinsics > > > > _extrinsics
Definition: context.h:152
librealsense::context::stop
void stop()
Definition: context.h:115
librealsense::context::create_devices
std::vector< std::shared_ptr< device_info > > create_devices(platform::backend_device_group devices, const std::map< std::string, std::weak_ptr< device_info >> &playback_devices, int mask) const
Definition: context.cpp:327
librealsense::device_info::get_device_data
virtual platform::backend_device_group get_device_data() const =0
librealsense::context::_streams
std::map< int, std::weak_ptr< const stream_interface > > _streams
Definition: context.h:151
librealsense::platform::backend_device_group
Definition: backend.h:518
rs2_device_info
Definition: context.h:20
librealsense::backend_type
backend_type
Definition: context.h:71
librealsense::context::query_devices
std::vector< std::shared_ptr< device_info > > query_devices(int mask) const
Definition: context.cpp:320
librealsense::playback_device_info::get_device_data
platform::backend_device_group get_device_data() const override
Definition: context.h:93
librealsense::devices_info
std::vector< std::shared_ptr< device_info > > devices_info
Definition: context.h:104
librealsense::filter_by_product
std::vector< platform::uvc_device_info > filter_by_product(const std::vector< platform::uvc_device_info > &devices, const std::set< uint16_t > &pid_list)
Definition: context.cpp:497
librealsense::context
Definition: context.h:106
librealsense::device_info::_ctx
std::shared_ptr< context > _ctx
Definition: context.h:68
type
GLenum type
Definition: glad/glad/glad.h:135
librealsense::context::remove_device
void remove_device(const std::string &file)
Definition: context.cpp:583
librealsense::readonly_device_info::readonly_device_info
readonly_device_info(std::shared_ptr< device_interface > dev)
Definition: context.h:159
librealsense::backend_type::playback
@ playback
mask
GLint GLuint mask
Definition: glad/glad/glad.h:1460
librealsense::playback_device_info::playback_device_info
playback_device_info(std::shared_ptr< playback_device > dev)
Definition: context.h:83
uint32_t
unsigned int uint32_t
Definition: stdint.h:80
test-d405-calibration-stream.ctx
ctx
Definition: test-d405-calibration-stream.py:10
librealsense::readonly_device_info::_dev
std::shared_ptr< device_interface > _dev
Definition: context.h:170
uint64_t
unsigned __int64 uint64_t
Definition: stdint.h:90
librealsense::playback_device_info::create_device
std::shared_ptr< device_interface > create_device() const override
Definition: context.h:89
rs2_stream_profile::profile
librealsense::stream_profile_interface * profile
Definition: context.h:34
librealsense::readonly_device_info::get_device_data
platform::backend_device_group get_device_data() const override
Definition: context.h:165
t265_stereo.callback
def callback(frame)
Definition: t265_stereo.py:91
test-fg.devices
devices
Definition: test-fg.py:9
rs2_stream_profile::clone
std::shared_ptr< librealsense::stream_profile_interface > clone
Definition: context.h:35
librealsense::playback_device_info::_dev
std::shared_ptr< playback_device > _dev
Definition: context.h:81
librealsense::context::~context
~context()
Definition: context.cpp:315
backend.h
librealsense::context::_device_watcher
std::shared_ptr< platform::device_watcher > _device_watcher
Definition: context.h:145
librealsense::group_devices_by_unique_id
std::vector< std::vector< platform::uvc_device_info > > group_devices_by_unique_id(const std::vector< platform::uvc_device_info > &devices)
Definition: context.cpp:602
librealsense::context::_streams_mutex
std::mutex _streams_mutex
Definition: context.h:153
librealsense::devices_changed_callback_ptr
std::shared_ptr< rs2_devices_changed_callback > devices_changed_callback_ptr
Definition: src/types.h:884
section
Definition: parser.hpp:144
librealsense::backend_type::record
@ record
librealsense::context::get_backend
const platform::backend & get_backend() const
Definition: context.h:118
librealsense::playback_device_info::create
std::shared_ptr< device_interface > create(std::shared_ptr< context >, bool) const override
Definition: context.h:98
librealsense::mi_present
bool mi_present(const std::vector< platform::uvc_device_info > &devices, uint32_t mi)
Definition: context.cpp:643
rs2_device_list
Definition: context.h:26
librealsense::device_info::~device_info
virtual ~device_info()=default
librealsense::platform::backend
Definition: backend.h:584
playback_device.h
RS2_RECORDING_MODE_COUNT
@ RS2_RECORDING_MODE_COUNT
Definition: rs_internal.h:39
librealsense::device_info::create
virtual std::shared_ptr< device_interface > create(std::shared_ptr< context > ctx, bool register_device_notifications) const =0
librealsense::backend_type::standard
@ standard
rs2_device_list::list
std::vector< rs2_device_info > list
Definition: context.h:29
librealsense::readonly_device_info
Definition: context.h:156
librealsense::context::_devices_changed_callbacks_mtx
std::mutex _devices_changed_callbacks_mtx
Definition: context.h:153
librealsense::context::on_device_changed
void on_device_changed(platform::backend_device_group old, platform::backend_device_group curr, const std::map< std::string, std::weak_ptr< device_info >> &old_playback_devices, const std::map< std::string, std::weak_ptr< device_info >> &new_playback_devices)
Definition: context.cpp:387
librealsense::readonly_device_info::create
std::shared_ptr< device_interface > create(std::shared_ptr< context > ctx, bool register_device_notifications) const override
Definition: context.h:160
librealsense::context::register_internal_device_callback
uint64_t register_internal_device_callback(devices_changed_callback_ptr callback)
Definition: context.cpp:461
rs2_device_info::ctx
std::shared_ptr< librealsense::context > ctx
Definition: context.h:22
librealsense::context::_playback_devices
std::map< std::string, std::weak_ptr< device_info > > _playback_devices
Definition: context.h:147
rs2_stream_profile
Definition: context.h:32
rs2_recording_mode
rs2_recording_mode
Definition: rs_internal.h:34
librealsense::context::_devices_changed_callbacks
std::map< uint64_t, devices_changed_callback_ptr > _devices_changed_callbacks
Definition: context.h:148
librealsense::software_device
Definition: software-device.h:14
librealsense::context::add_software_device
void add_software_device(std::shared_ptr< device_info > software_device)
Definition: context.cpp:568
librealsense::device_info::operator==
virtual bool operator==(const device_info &other) const
Definition: context.h:55
librealsense::context::raise_devices_changed
void raise_devices_changed(const std::vector< rs2_device_info > &removed, const std::vector< rs2_device_info > &added)
Definition: context.cpp:437
librealsense::get_mi
platform::uvc_device_info get_mi(const std::vector< platform::uvc_device_info > &devices, uint32_t mi)
Definition: context.cpp:653
librealsense::context::add_device
std::shared_ptr< playback_device_info > add_device(const std::string &file)
Definition: context.cpp:552
librealsense::context::_backend
std::shared_ptr< platform::backend > _backend
Definition: context.h:144
librealsense::platform::uvc_device_info
Definition: backend.h:186
librealsense::context::start_device_watcher
void start_device_watcher()
Definition: context.cpp:453
types.h
librealsense::device_info::device_info
device_info(std::shared_ptr< context > backend)
Definition: context.h:61
librealsense::context::context
context(backend_type type, const char *filename=nullptr, const char *section=nullptr, rs2_recording_mode mode=RS2_RECORDING_MODE_COUNT, std::string min_api_version="0.0.0")
Definition: context.cpp:98
librealsense::trim_device_list
void trim_device_list(std::vector< platform::usb_device_info > &devices, const std::vector< platform::usb_device_info > &chosen)
Definition: context.cpp:619


librealsense2
Author(s): LibRealSense ROS Team
autogenerated on Thu Dec 22 2022 03:13:15