Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
rs_internal.hpp
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2017 Intel Corporation. All Rights Reserved.
3 
4 #ifndef LIBREALSENSE_RS2_INTERNAL_HPP
5 #define LIBREALSENSE_RS2_INTERNAL_HPP
6 
7 #include "rs_types.hpp"
8 #include "rs_device.hpp"
9 #include "rs_context.hpp"
10 #include "../h/rs_internal.h"
11 
12 namespace rs2
13 {
14  class recording_context : public context
15  {
16  public:
21  recording_context(const std::string& filename,
22  const std::string& section = "",
24  {
25  rs2_error* e = nullptr;
26  _context = std::shared_ptr<rs2_context>(
27  rs2_create_recording_context(RS2_API_VERSION, filename.c_str(), section.c_str(), mode, &e),
29  error::handle(e);
30  }
31 
32  recording_context() = delete;
33  };
34 
35  class mock_context : public context
36  {
37  public:
43  mock_context(const std::string& filename,
44  const std::string& section = "",
45  const std::string& min_api_version = "0.0.0")
46  {
47  rs2_error* e = nullptr;
48  _context = std::shared_ptr<rs2_context>(
49  rs2_create_mock_context_versioned(RS2_API_VERSION, filename.c_str(), section.c_str(), min_api_version.c_str(), &e),
51  error::handle(e);
52  }
53 
54  mock_context() = delete;
55  };
56 
57  namespace internal
58  {
62  inline double get_time()
63  {
64  rs2_error* e = nullptr;
65  auto time = rs2_get_time( &e);
66 
67  error::handle(e);
68 
69  return time;
70  }
71  }
72 
73  class software_sensor : public sensor
74  {
75  public:
82  {
83  rs2_error* e = nullptr;
84 
85  stream_profile stream(rs2_software_sensor_add_video_stream(_sensor.get(),video_stream, &e));
86  error::handle(e);
87 
88  return stream;
89  }
90 
97  {
98  rs2_error* e = nullptr;
99 
100  stream_profile stream(rs2_software_sensor_add_motion_stream(_sensor.get(), motion_stream, &e));
101  error::handle(e);
102 
103  return stream;
104  }
105 
112  {
113  rs2_error* e = nullptr;
114 
115  stream_profile stream(rs2_software_sensor_add_pose_stream(_sensor.get(), pose_stream, &e));
116  error::handle(e);
117 
118  return stream;
119  }
120 
127  {
128  rs2_error* e = nullptr;
130  error::handle(e);
131  }
132 
139  {
140  rs2_error* e = nullptr;
142  error::handle(e);
143  }
144 
151  {
152  rs2_error* e = nullptr;
154  error::handle(e);
155  }
156 
163  {
164  rs2_error* e = nullptr;
165  rs2_software_sensor_set_metadata(_sensor.get(), value, type, &e);
166  error::handle(e);
167  }
168 
175  void add_read_only_option(rs2_option option, float val)
176  {
177  rs2_error* e = nullptr;
178  rs2_software_sensor_add_read_only_option(_sensor.get(), option, val, &e);
179  error::handle(e);
180  }
181 
188  void set_read_only_option(rs2_option option, float val)
189  {
190  rs2_error* e = nullptr;
192  error::handle(e);
193  }
194  private:
195  friend class software_device;
196 
197  software_sensor(std::shared_ptr<rs2_sensor> s)
198  : rs2::sensor(s)
199  {
200  rs2_error* e = nullptr;
202  {
203  _sensor = nullptr;
204  }
206  }
207  };
208 
209 
210  class software_device : public device
211  {
212  std::shared_ptr<rs2_device> create_device_ptr()
213  {
214  rs2_error* e = nullptr;
215  std::shared_ptr<rs2_device> dev(
218  error::handle(e);
219  return dev;
220  }
221 
222  public:
224  : device(create_device_ptr())
225  {}
226 
232  software_sensor add_sensor(std::string name)
233  {
234  rs2_error* e = nullptr;
235  std::shared_ptr<rs2_sensor> sensor(
236  rs2_software_device_add_sensor(_dev.get(), name.c_str(), &e),
238  error::handle(e);
239 
240  return software_sensor(sensor);
241  }
242 
251  void add_to(context& ctx)
252  {
253  rs2_error* e = nullptr;
254  rs2_context_add_software_device(ctx._context.get(), _dev.get(), &e);
255  error::handle(e);
256  }
257 
263  {
264  rs2_error* e = nullptr;
265  rs2_software_device_create_matcher(_dev.get(), matcher, &e);
266  error::handle(e);
267  }
268  };
269 
270 }
271 #endif // LIBREALSENSE_RS2_INTERNAL_HPP
void rs2_software_sensor_set_metadata(rs2_sensor *sensor, rs2_frame_metadata_value value, rs2_metadata_type type, rs2_error **error)
Definition: rs_frame.hpp:21
recording_context(const std::string &filename, const std::string &section="", rs2_recording_mode mode=RS2_RECORDING_MODE_BLANK_FRAMES)
Definition: rs_internal.hpp:21
Definition: rs_sensor.hpp:103
Definition: rs_frame.hpp:313
#define RS2_API_VERSION
Definition: rs.h:41
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
rs2_stream_profile * rs2_software_sensor_add_pose_stream(rs2_sensor *sensor, rs2_pose_stream pose_stream, rs2_error **error)
rs2_recording_mode
Definition: rs_internal.h:25
void rs2_delete_device(rs2_device *device)
void rs2_delete_context(rs2_context *context)
Frees the relevant context object.
void on_video_frame(rs2_software_video_frame frame)
Definition: rs_internal.hpp:126
All the parameters are required to define video stream.
Definition: rs_internal.h:34
void set_metadata(rs2_frame_metadata_value value, rs2_metadata_type type)
Definition: rs_internal.hpp:162
All the parameters are required to define pose frame.
Definition: rs_internal.h:93
software_device()
Definition: rs_internal.hpp:223
Definition: rs_context.hpp:11
void on_motion_frame(rs2_software_motion_frame frame)
Definition: rs_internal.hpp:138
software_sensor add_sensor(std::string name)
Definition: rs_internal.hpp:232
Definition: rs_context.hpp:96
void set_read_only_option(rs2_option option, float val)
Definition: rs_internal.hpp:188
Definition: rs_internal.hpp:35
rs2_context * rs2_create_recording_context(int api_version, const char *filename, const char *section, rs2_recording_mode mode, rs2_error **error)
stream_profile add_video_stream(rs2_video_stream video_stream)
Definition: rs_internal.hpp:81
Definition: rs_types.h:158
stream_profile add_motion_stream(rs2_motion_stream motion_stream)
Definition: rs_internal.hpp:96
rs2_stream_profile * rs2_software_sensor_add_motion_stream(rs2_sensor *sensor, rs2_motion_stream motion_stream, rs2_error **error)
rs2_time_t rs2_get_time(rs2_error **error)
stream_profile add_pose_stream(rs2_pose_stream pose_stream)
Definition: rs_internal.hpp:111
std::shared_ptr< rs2_sensor > _sensor
Definition: rs_sensor.hpp:327
Definition: rs_internal.hpp:14
std::shared_ptr< rs2_context > _context
Definition: rs_context.hpp:218
All the parameters are required to define pose stream.
Definition: rs_internal.h:59
Definition: rs_internal.hpp:73
void rs2_delete_sensor(rs2_sensor *sensor)
rs2_matchers
Specifies types of different matchers.
Definition: rs_types.h:177
void rs2_software_sensor_on_pose_frame(rs2_sensor *sensor, rs2_software_pose_frame frame, rs2_error **error)
std::shared_ptr< rs2_device > _dev
Definition: rs_device.hpp:146
rs2_device * rs2_create_software_device(rs2_error **error)
void rs2_software_sensor_add_read_only_option(rs2_sensor *sensor, rs2_option option, float val, rs2_error **error)
mock_context()=delete
void create_matcher(rs2_matchers matcher)
Definition: rs_internal.hpp:262
All the parameters are required to define motion stream.
Definition: rs_internal.h:48
Definition: rs_internal.hpp:210
static void handle(rs2_error *e)
Definition: rs_types.hpp:121
rs2_sensor * rs2_software_device_add_sensor(rs2_device *dev, const char *sensor_name, rs2_error **error)
void rs2_software_sensor_update_read_only_option(rs2_sensor *sensor, rs2_option option, float val, rs2_error **error)
Definition: rs_internal.h:27
rs2_stream_profile * rs2_software_sensor_add_video_stream(rs2_sensor *sensor, rs2_video_stream video_stream, rs2_error **error)
void add_to(context &ctx)
Definition: rs_internal.hpp:251
void rs2_software_device_create_matcher(rs2_device *dev, rs2_matchers matcher, rs2_error **error)
int rs2_is_sensor_extendable_to(const rs2_sensor *sensor, rs2_extension extension, rs2_error **error)
long long rs2_metadata_type
Definition: rs_types.h:239
rs2_context * rs2_create_mock_context_versioned(int api_version, const char *filename, const char *section, const char *min_api_version, rs2_error **error)
void on_pose_frame(rs2_software_pose_frame frame)
Definition: rs_internal.hpp:150
void rs2_context_add_software_device(rs2_context *ctx, rs2_device *dev, rs2_error **error)
All the parameters are required to define motion frame.
Definition: rs_internal.h:82
void rs2_software_sensor_on_motion_frame(rs2_sensor *sensor, rs2_software_motion_frame frame, rs2_error **error)
void add_read_only_option(rs2_option option, float val)
Definition: rs_internal.hpp:175
void rs2_software_sensor_on_video_frame(rs2_sensor *sensor, rs2_software_video_frame frame, rs2_error **error)
All the parameters are required to define video frame.
Definition: rs_internal.h:69
struct rs2_error rs2_error
Definition: rs_types.h:205
Definition: rs_device.hpp:18
double get_time()
Definition: rs_internal.hpp:62
rs2_frame_metadata_value
Per-Frame-Metadata is the set of read-only properties that might be exposed for each individual frame...
Definition: rs_frame.h:29
mock_context(const std::string &filename, const std::string &section="", const std::string &min_api_version="0.0.0")
Definition: rs_internal.hpp:43