RealSense Cross Platform API
RealSense Cross-platform API
rs.hpp
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2017 RealSense, Inc. All Rights Reserved.
3 
4 #ifndef LIBREALSENSE_RS2_HPP
5 #define LIBREALSENSE_RS2_HPP
6 
7 #include "rs.h"
8 #include "hpp/rs_types.hpp"
9 #include "hpp/rs_context.hpp"
10 #include "hpp/rs_device.hpp"
11 #include "hpp/rs_frame.hpp"
12 #include "hpp/rs_processing.hpp"
14 #include "hpp/rs_sensor.hpp"
15 #include "hpp/rs_safety_sensor.hpp"
16 #include "hpp/rs_pipeline.hpp"
17 #include "hpp/rs_eth_config.hpp"
18 #include "hpp/rs_rum.hpp"
19 
20 namespace rs2
21 {
22  inline void log_to_console(rs2_log_severity min_severity)
23  {
24  rs2_error* e = nullptr;
25  rs2_log_to_console(min_severity, &e);
26  error::handle(e);
27  }
28 
29  inline void log_to_file(rs2_log_severity min_severity, const char * file_path = nullptr)
30  {
31  rs2_error* e = nullptr;
32  rs2_log_to_file(min_severity, file_path, &e);
33  error::handle(e);
34  }
35 
36  inline void reset_logger()
37  {
38  rs2_error* e = nullptr;
39  rs2_reset_logger(&e);
40  error::handle(e);
41  }
42 
43  // Enable rolling log file when used with rs2_log_to_file:
44  // Upon reaching (max_size/2) bytes, the log will be renamed with an ".old" suffix and a new log created. Any
45  // previous .old file will be erased.
46  // Must have permissions to remove/rename files in log file directory.
47  //
48  // @param max_size max file size in megabytes
49  //
50  inline void enable_rolling_log_file( unsigned max_size )
51  {
52  rs2_error * e = nullptr;
53  rs2_enable_rolling_log_file( max_size, &e );
54  error::handle( e );
55  }
56 
57  /*
58  Interface to the log message data we expose.
59  */
61  {
62  // Only log_callback should be creating us!
63  friend class log_callback;
64 
65  log_message( rs2_log_message const & msg ) : _msg( msg ) {}
66 
67  public:
68  /* Returns the line-number in the file where the LOG() comment was issued */
69  size_t line_number() const
70  {
71  rs2_error* e = nullptr;
72  size_t ln = rs2_get_log_message_line_number( &_msg, &e );
73  error::handle( e );
74  return ln;
75  }
76  /* Returns the file in which the LOG() command was issued */
77  const char * filename() const
78  {
79  rs2_error* e = nullptr;
80  const char * path = rs2_get_log_message_filename( &_msg, &e );
81  error::handle( e );
82  return path;
83  }
84  /* Returns the raw message, as it was passed to LOG(), before any embelishments like level etc. */
85  const char* raw() const
86  {
87  rs2_error* e = nullptr;
88  const char* r = rs2_get_raw_log_message( &_msg, &e );
89  error::handle( e );
90  return r;
91  }
92  /*
93  Returns a complete log message, as defined by librealsense, with level, timestamp, etc.:
94  11/12 13:49:40,153 INFO [10604] (rs.cpp:2271) Framebuffer size changed to 1552 x 919
95  */
96  const char* full() const
97  {
98  rs2_error* e = nullptr;
99  const char* str = rs2_get_full_log_message( &_msg, &e );
100  error::handle( e );
101  return str;
102  }
103 
104  private:
105  rs2_log_message const & _msg;
106  };
107 
108  /*
109  Wrapper around any callback function that is given to log_to_callback.
110  */
112  {
113  public:
114  typedef std::function< void( rs2_log_severity, rs2::log_message const & ) > log_fn;
115 
116  private:
117  log_fn on_log_function;
118 
119  public:
120  explicit log_callback( log_fn && on_log )
121  : on_log_function( std::move( on_log ) )
122  {
123  }
124 
125  void on_log( rs2_log_severity severity, rs2_log_message const & msg ) noexcept override
126  {
127  on_log_function( severity, log_message( msg ));
128  }
129 
130  void release() override { delete this; }
131  };
132 
133  /*
134  Your callback should look like this, for example:
135  void callback( rs2_log_severity severity, rs2::log_message const & msg ) noexcept
136  {
137  std::cout << msg.build() << std::endl;
138  }
139  and, when initializing rs2:
140  rs2::log_to_callback( callback );
141  or:
142  rs2::log_to_callback(
143  []( rs2_log_severity severity, rs2::log_message const & msg ) noexcept
144  {
145  std::cout << msg.build() << std::endl;
146  })
147  */
148  inline void log_to_callback( rs2_log_severity min_severity, log_callback::log_fn callback )
149  {
150  // We wrap the callback with an interface and pass it to librealsense, who will
151  // now manage its lifetime. Rather than deleting it, though, it will call its
152  // release() function, where (back in our context) it can be safely deleted:
153  rs2_error* e = nullptr;
154  rs2_log_to_callback_cpp( min_severity, new log_callback( std::move( callback )), &e );
155  error::handle( e );
156  }
157 
158  inline void log(rs2_log_severity severity, const char* message)
159  {
160  rs2_error* e = nullptr;
161  rs2_log(severity, message, &e);
162  error::handle(e);
163  }
164 }
165 
166 inline std::ostream & operator << (std::ostream & o, rs2_stream stream) { return o << rs2_stream_to_string(stream); }
167 inline std::ostream & operator << (std::ostream & o, rs2_format format) { return o << rs2_format_to_string(format); }
168 inline std::ostream & operator << (std::ostream & o, rs2_distortion distortion) { return o << rs2_distortion_to_string(distortion); }
169 inline std::ostream & operator << (std::ostream & o, rs2_option option) { return o << rs2_option_to_string(option); } // This function is being deprecated. For existing options it will return option name, but for future API additions the user should call rs2_get_option_name instead.
170 inline std::ostream & operator << (std::ostream & o, rs2_log_severity severity) { return o << rs2_log_severity_to_string(severity); }
171 inline std::ostream & operator << (std::ostream & o, rs2::log_message const & msg ) { return o << msg.raw(); }
172 inline std::ostream & operator << (std::ostream & o, rs2_camera_info camera_info) { return o << rs2_camera_info_to_string(camera_info); }
173 inline std::ostream & operator << (std::ostream & o, rs2_frame_metadata_value metadata) { return o << rs2_frame_metadata_to_string(metadata); }
174 inline std::ostream & operator << (std::ostream & o, rs2_timestamp_domain domain) { return o << rs2_timestamp_domain_to_string(domain); }
175 inline std::ostream & operator << (std::ostream & o, rs2_notification_category notificaton) { return o << rs2_notification_category_to_string(notificaton); }
176 inline std::ostream & operator << (std::ostream & o, rs2_sr300_visual_preset preset) { return o << rs2_sr300_visual_preset_to_string(preset); }
177 inline std::ostream & operator << (std::ostream & o, rs2_exception_type exception_type) { return o << rs2_exception_type_to_string(exception_type); }
178 inline std::ostream & operator << (std::ostream & o, rs2_playback_status status) { return o << rs2_playback_status_to_string(status); }
179 inline std::ostream & operator << (std::ostream & o, rs2_l500_visual_preset preset) {return o << rs2_l500_visual_preset_to_string(preset);}
180 inline std::ostream & operator << (std::ostream & o, rs2_sensor_mode mode) { return o << rs2_sensor_mode_to_string(mode); }
181 inline std::ostream & operator << (std::ostream & o, rs2_calibration_type mode) { return o << rs2_calibration_type_to_string(mode); }
182 inline std::ostream & operator << (std::ostream & o, rs2_calibration_status mode) { return o << rs2_calibration_status_to_string(mode); }
183 inline std::ostream & operator << (std::ostream & o, rs2_eth_link_priority priority) { return o << rs2_eth_link_priority_to_string(priority); }
184 
185 #endif // LIBREALSENSE_RS2_HPP
const char * rs2_sensor_mode_to_string(rs2_sensor_mode preset)
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
const char * rs2_format_to_string(rs2_format format)
rs2_exception_type
Exception types are the different categories of errors that RealSense API might return.
Definition: rs_types.h:32
void release() override
Definition: rs.hpp:130
rs2_calibration_type
Definition: rs_device.h:419
const char * rs2_timestamp_domain_to_string(rs2_timestamp_domain info)
const char * rs2_frame_metadata_to_string(rs2_frame_metadata_value metadata)
void reset_logger()
Definition: rs.hpp:36
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:26
const char * rs2_get_full_log_message(rs2_log_message const *msg, rs2_error **error)
rs2_distortion
Distortion model: defines how pixel coordinates should be mapped to sensor coordinates.
Definition: rs_types.h:47
void rs2_enable_rolling_log_file(unsigned max_size, rs2_error **error)
rs2_sr300_visual_preset
For SR300 devices: provides optimized settings (presets) for specific types of usage.
Definition: rs_option.h:224
const char * rs2_option_to_string(rs2_option option)
void rs2_log_to_callback_cpp(rs2_log_severity min_severity, rs2_log_callback *callback, rs2_error **error)
const char * full() const
Definition: rs.hpp:96
const char * rs2_distortion_to_string(rs2_distortion distortion)
log_callback(log_fn &&on_log)
Definition: rs.hpp:120
void rs2_log_to_file(rs2_log_severity min_severity, const char *file_path, rs2_error **error)
const char * rs2_get_log_message_filename(rs2_log_message const *msg, rs2_error **error)
void log(rs2_log_severity severity, const char *message)
Definition: rs.hpp:158
unsigned rs2_get_log_message_line_number(rs2_log_message const *msg, rs2_error **error)
Definition: rs_context.hpp:11
void rs2_log(rs2_log_severity severity, const char *message, rs2_error **error)
const char * raw() const
Definition: rs.hpp:85
const char * filename() const
Definition: rs.hpp:77
const char * rs2_sr300_visual_preset_to_string(rs2_sr300_visual_preset preset)
Exposes librealsense functionality for C compilers.
Definition: rs_types.hpp:60
Definition: rs.hpp:60
const char * rs2_exception_type_to_string(rs2_exception_type type)
rs2_calibration_status
Definition: rs_device.h:431
const char * rs2_calibration_status_to_string(rs2_calibration_status)
void log_to_callback(rs2_log_severity min_severity, log_callback::log_fn callback)
Definition: rs.hpp:148
Definition: rs.hpp:111
size_t line_number() const
Definition: rs.hpp:69
rs2_playback_status
Definition: rs_record_playback.h:19
struct rs2_log_message rs2_log_message
Definition: rs_types.h:297
void on_log(rs2_log_severity severity, rs2_log_message const &msg) noexcept override
Definition: rs.hpp:125
rs2_format
A stream&#39;s format identifies how binary data is encoded within a frame.
Definition: rs_sensor.h:69
const char * rs2_get_raw_log_message(rs2_log_message const *msg, rs2_error **error)
void log_to_file(rs2_log_severity min_severity, const char *file_path=nullptr)
Definition: rs.hpp:29
static void handle(rs2_error *e)
Definition: rs_types.hpp:162
rs2_stream
Streams are different types of data provided by RealSense devices.
Definition: rs_sensor.h:47
rs2_sensor_mode
DEPRECATED! - For setting the camera_mode option.
Definition: rs_option.h:271
std::function< void(rs2_log_severity, rs2::log_message const &) > log_fn
Definition: rs.hpp:114
void log_to_console(rs2_log_severity min_severity)
Definition: rs.hpp:22
const char * rs2_camera_info_to_string(rs2_camera_info info)
void rs2_log_to_console(rs2_log_severity min_severity, rs2_error **error)
const char * rs2_stream_to_string(rs2_stream stream)
rs2_notification_category
Category of the librealsense notification.
Definition: rs_types.h:19
rs2_eth_link_priority
Ethernet link priority options.
Definition: rs_eth_config.h:20
void enable_rolling_log_file(unsigned max_size)
Definition: rs.hpp:50
const char * rs2_playback_status_to_string(rs2_playback_status status)
std::ostream & operator<<(std::ostream &o, rs2_stream stream)
Definition: rs.hpp:166
const char * rs2_notification_category_to_string(rs2_notification_category category)
const char * rs2_log_severity_to_string(rs2_log_severity info)
const char * rs2_calibration_type_to_string(rs2_calibration_type)
struct rs2_error rs2_error
Definition: rs_types.h:296
rs2_log_severity
Severity of the librealsense logger.
Definition: rs_types.h:139
const char * rs2_l500_visual_preset_to_string(rs2_l500_visual_preset preset)
const char * rs2_eth_link_priority_to_string(rs2_eth_link_priority priority)
void rs2_reset_logger(rs2_error **error)
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
rs2_l500_visual_preset
For L500 devices: provides optimized settings (presets) for specific types of usage.
Definition: rs_option.h:257
rs2_timestamp_domain
Specifies the clock in relation to which the frame timestamp was measured.
Definition: rs_frame.h:19