Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
record_device.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 #include "record_sensor.h"
13 
14 namespace librealsense
15 {
17  public extendable_interface,
18  public info_container
19  {
20  public:
21  static const uint64_t MAX_CACHED_DATA_SIZE = 1920 * 1080 * 4 * 30; // ~1 sec of HD video @ 30 FPS
22 
23  record_device(std::shared_ptr<device_interface> device, std::shared_ptr<device_serializer::writer> serializer);
24  virtual ~record_device();
25 
26  std::shared_ptr<context> get_context() const override;
27 
28  sensor_interface& get_sensor(size_t i) override;
29  size_t get_sensors_count() 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  const sensor_interface& get_sensor(size_t i) const override;
33  void hardware_reset() override;
34 
35 
36  bool extend_to(rs2_extension extension_type, void** ext) override;
37  virtual std::shared_ptr<matcher> create_matcher(const frame_holder& frame) const override;
38 
39  void pause_recording();
40  void resume_recording();
41  const std::string& get_filename() const;
43  std::pair<uint32_t, rs2_extrinsics> get_extrinsics(const stream_interface& stream) const override;
44  bool is_valid() const override;
45 
46  private:
47  template <typename T> void write_device_extension_changes(const T& ext);
48  template <rs2_extension E, typename P> bool extend_to_aux(std::shared_ptr<P> p, void** ext);
49 
50  void write_header();
51  std::chrono::nanoseconds get_capture_time() const;
52  void write_data(size_t sensor_index, frame_holder f, std::function<void(std::string const&)> on_error);
53  void write_sensor_extension_snapshot(size_t sensor_index, rs2_extension ext, std::shared_ptr<extension_snapshot> snapshot, std::function<void(std::string const&)> on_error);
54  void write_notification(size_t sensor_index, const notification& n);
55  std::vector<std::shared_ptr<record_sensor>> create_record_sensors(std::shared_ptr<device_interface> m_device);
56  template <typename T> device_serializer::snapshot_collection get_extensions_snapshots(T* extendable);
57  template <typename T, typename Ext> void try_add_snapshot(T* extendable, device_serializer::snapshot_collection& snapshots);
58  std::shared_ptr<device_interface> m_device;
59  std::vector<std::shared_ptr<record_sensor>> m_sensors;
60 
61  lazy<std::shared_ptr<dispatcher>> m_write_thread;
62  std::shared_ptr<device_serializer::writer> m_ros_writer;
63 
64  std::chrono::high_resolution_clock::time_point m_capture_time_base;
65  std::chrono::high_resolution_clock::duration m_record_pause_time;
66  std::chrono::high_resolution_clock::time_point m_time_of_pause;
67 
68  std::mutex m_mutex;
69  bool m_is_recording;
70  std::once_flag m_first_frame_flag;
71  int m_on_notification_token;
72  int m_on_frame_token;
73  int m_on_extension_change_token;
74  uint64_t m_cached_data_size;
75  std::once_flag m_first_call_flag;
76  void initialize_recording();
77  void stop_gracefully(to_string error_msg);
78  };
79 
81 }
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 std::string & get_info(rs2_camera_info info) const override
std::shared_ptr< context > get_context() const override
sensor_interface & get_sensor(size_t i) override
Definition: info.h:22
std::pair< uint32_t, rs2_extrinsics > get_extrinsics(const stream_interface &stream) const override
Definition: types.h:268
void hardware_reset() override
platform::backend_device_group get_device_data() const override
Definition: streaming.h:131
Definition: record_device.h:16
Definition: archive.h:63
bool extend_to(rs2_extension extension_type, void **ext) override
Definition: algo.h:16
Definition: streaming.h:31
size_t get_sensors_count() const override
Definition: extension.h:22
Definition: rs_types.h:109
bool supports_info(rs2_camera_info info) const override
virtual std::shared_ptr< matcher > create_matcher(const frame_holder &frame) const override
std::chrono::duration< uint64_t, std::nano > nanoseconds
Definition: serialization.h:46
Definition: types.h:54
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
Definition: rs_types.h:93
bool is_valid() const override
Definition: stream.h:14
Definition: types.h:587
record_device(std::shared_ptr< device_interface > device, std::shared_ptr< device_serializer::writer > serializer)
Definition: streaming.h:106
Definition: types.h:846
const std::string & get_filename() const
Definition: device.h:43
MAP_EXTENSION(RS2_EXTENSION_POINTS, librealsense::points)
static const uint64_t MAX_CACHED_DATA_SIZE
Definition: record_device.h:21