Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
record_sensor.h
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 #pragma once
5 #include "core/roi.h"
6 #include "core/extension.h"
7 #include "core/serialization.h"
8 #include "core/streaming.h"
9 #include "archive.h"
10 #include "concurrency.h"
11 #include "sensor.h"
12 
13 namespace librealsense
14 {
16  public extendable_interface, //Allows extension for any of the given device's extensions
17  public info_container,
18  public options_container
19  {
20  public:
22  sensor_interface& sensor);
23  virtual ~record_sensor();
24  void init();
25  stream_profiles get_stream_profiles() const override;
26  void open(const stream_profiles& requests) override;
27  void close() override;
28  option& get_option(rs2_option id) override;
29  const option& get_option(rs2_option id) const override;
30  const std::string& get_info(rs2_camera_info info) const override;
31  bool supports_info(rs2_camera_info info) const override;
32  bool supports_option(rs2_option id) const override;
35  void start(frame_callback_ptr callback) override;
36  void stop() override;
37  bool is_streaming() const override;
38  bool extend_to(rs2_extension extension_type, void** ext) override;
39  const device_interface& get_device() override;
40  frame_callback_ptr get_frames_callback() const override;
41  void set_frames_callback(frame_callback_ptr callback) override;
42  stream_profiles get_active_streams() const override;
43  int register_before_streaming_changes_callback(std::function<void(bool)> callback) override;
44  void unregister_before_start_callback(int token) override;
48  void stop_with_error(const std::string& message);
49  void disable_recording();
50  private /*methods*/:
51  template <typename T> void record_snapshot(rs2_extension extension_type, const recordable<T>& snapshot);
52  template <rs2_extension E, typename P> bool extend_to_aux(P* p, void** ext);
53  void record_frame(frame_holder holder);
54  void enable_sensor_hooks();
55  void disable_sensor_hooks();
56  void hook_sensor_callbacks();
61  void wrap_streams();
62 
63  private /*members*/:
64  sensor_interface& m_sensor;
65  std::set<int> m_recorded_streams_ids;
66  std::set<rs2_option> m_recording_options;
68  std::atomic_bool m_is_recording;
74  std::mutex m_mutex;
75  };
76 
78  {
79  std::function<void(rs2_notification*)> on_notification_function;
80  public:
81  notification_callback(std::function<void(rs2_notification*)> on_notification) : on_notification_function(on_notification) {}
82 
83  void on_notification(rs2_notification* _notification) override
84  {
85  on_notification_function(_notification);
86  }
87  void release() override { delete this; }
88  };
90  {
91  std::function<void(frame_holder)> on_frame_function;
92  public:
93  explicit frame_holder_callback(std::function<void(frame_holder)> on_frame) : on_frame_function(on_frame) {}
94 
95  void on_frame(rs2_frame * fref) override
96  {
97  on_frame_function({ (frame_interface*)fref });
98  }
99 
100  void release() override { delete this; }
101  };
102 
103 }
private const recordable< T > & snapshot
Definition: record_sensor.h:51
rs2_camera_info
Read-only strings that can be queried from the device. Not all information attributes are available o...
Definition: rs_sensor.h:22
Definition: options.h:48
Definition: rs_types.hpp:27
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
Definition: streaming.h:63
Definition: info.h:22
Definition: rs_types.hpp:41
void record_frame(frame_holder holder)
std::shared_ptr< rs2_frame_callback > frame_callback_ptr
Definition: types.h:896
int m_before_start_callback_token
Definition: record_sensor.h:71
frame_callback_ptr m_frame_callback
Definition: record_sensor.h:69
Definition: options.h:20
Definition: record_sensor.h:15
void start(frame_callback_ptr callback) override
frame_callback_ptr get_frames_callback() const override
stream_profiles get_active_streams() const override
std::function< void(frame_interface *)> on_frame
Definition: streaming.h:103
librealsense::notifications_callback_ptr m_user_notification_callback
Definition: record_sensor.h:67
void on_frame(rs2_frame *fref) override
Definition: record_sensor.h:95
bool m_is_sensor_hooked
Definition: record_sensor.h:73
Definition: streaming.h:131
Definition: types.h:1414
void open(const stream_profiles &requests) override
void set_frames_callback(frame_callback_ptr callback) override
Definition: algo.h:16
stream_profiles get_stream_profiles() const override
frame_callback_ptr m_original_callback
Definition: record_sensor.h:70
notifications_callback_ptr get_notifications_callback() const override
Definition: record_sensor.h:77
std::atomic_bool m_is_recording
Definition: record_sensor.h:68
bool supports_option(rs2_option id) const override
void release() override
Definition: record_sensor.h:87
const std::string & get_info(rs2_camera_info info) const override
Definition: record_sensor.h:89
std::shared_ptr< rs2_notifications_callback > notifications_callback_ptr
Definition: types.h:898
Definition: extension.h:22
bool extend_to_aux(P *p, void **ext)
signal< record_sensor, frame_holder > on_frame
Definition: record_sensor.h:46
bool is_streaming() const override
frame_callback_ptr wrap_frame_callback(frame_callback_ptr callback)
void release() override
Definition: record_sensor.h:100
void register_notifications_callback(notifications_callback_ptr callback) override
signal< record_sensor, rs2_extension, std::shared_ptr< extension_snapshot > > on_extension_change
Definition: record_sensor.h:47
void on_notification(rs2_notification *_notification) override
Definition: record_sensor.h:83
signal< record_sensor, const notification & > on_notification
Definition: record_sensor.h:45
std::vector< std::shared_ptr< stream_profile_interface >> stream_profiles
Definition: streaming.h:104
const device_interface & get_device() override
record_sensor(const device_interface &device, sensor_interface &sensor)
std::mutex m_mutex
Definition: record_sensor.h:74
void stop_with_error(const std::string &message)
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
Definition: rs_types.h:94
Definition: types.h:637
bool extend_to(rs2_extension extension_type, void **ext) override
Definition: streaming.h:106
const device_interface & m_parent_device
Definition: record_sensor.h:72
frame_holder_callback(std::function< void(frame_holder)> on_frame)
Definition: record_sensor.h:93
option & get_option(rs2_option id) override
Definition: extension.h:46
Definition: api.h:26
int register_before_streaming_changes_callback(std::function< void(bool)> callback) override
std::set< int > m_recorded_streams_ids
Definition: record_sensor.h:65
notification_callback(std::function< void(rs2_notification *)> on_notification)
Definition: record_sensor.h:81
bool supports_info(rs2_camera_info info) const override
std::set< rs2_option > m_recording_options
Definition: record_sensor.h:66
Definition: device.h:43
void unregister_before_start_callback(int token) override
struct rs2_frame rs2_frame
Definition: rs_types.h:151