Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
playback_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 <atomic>
6 #include <core/roi.h>
7 #include <core/extension.h>
8 #include <core/serialization.h>
9 #include "core/streaming.h"
10 #include "archive.h"
11 #include "concurrency.h"
12 #include "sensor.h"
13 #include "playback_sensor.h"
14 
15 namespace librealsense
16 {
18  public extendable_interface,
19  public info_container
20  {
21  public:
22  playback_device(std::shared_ptr<context> context, std::shared_ptr<device_serializer::reader> serializer);
23  virtual ~playback_device();
24 
25  std::shared_ptr<context> get_context() const override;
26 
27  sensor_interface& get_sensor(size_t i) override;
28  size_t get_sensors_count() const override;
29  const sensor_interface& get_sensor(size_t i) const override;
30  void hardware_reset() override;
31  bool extend_to(rs2_extension extension_type, void** ext) override;
32  std::shared_ptr<matcher> create_matcher(const frame_holder& frame) const override;
33 
34  void set_frame_rate(double rate);
37  uint64_t get_duration() const;
38  void pause();
39  void resume();
40  void stop();
41  void set_real_time(bool real_time);
42  bool is_real_time() const;
43  const std::string& get_file_name() const;
44  uint64_t get_position() const;
47  std::pair<uint32_t, rs2_extrinsics> get_extrinsics(const stream_interface& stream) const override;
48  static bool try_extend_snapshot(std::shared_ptr<extension_snapshot>& e, rs2_extension extension_type, void** ext);
49  bool is_valid() const override;
50 
51  private:
52  void update_time_base(device_serializer::nanoseconds base_timestamp);
53  device_serializer::nanoseconds calc_sleep_time(device_serializer::nanoseconds timestamp) const;
54  void start();
55  void stop_internal();
56  void try_looping();
57  template <typename T> void do_loop(T op);
58  std::map<uint32_t, std::shared_ptr<playback_sensor>> create_playback_sensors(const device_serializer::device_snapshot& device_description);
59  std::shared_ptr<stream_profile_interface> get_stream(const std::map<unsigned, std::shared_ptr<playback_sensor>>& sensors_map, device_serializer::stream_identifier stream_id);
60  rs2_extrinsics calc_extrinsic(const rs2_extrinsics& from, const rs2_extrinsics& to);
61  void catch_up();
62  void register_device_info(const device_serializer::device_snapshot& device_description);
63  void register_extrinsics(const device_serializer::device_snapshot& device_description);
64  void update_extensions(const device_serializer::device_snapshot& device_description);
65 
66  private:
67  lazy<std::shared_ptr<dispatcher>> m_read_thread;
68  std::shared_ptr<device_serializer::reader> m_reader;
69  device_serializer::device_snapshot m_device_description;
70  std::atomic_bool m_is_started;
71  std::atomic_bool m_is_paused;
72  std::chrono::high_resolution_clock::time_point m_base_sys_time; // !< System time when reading began (first frame was read)
73  device_serializer::nanoseconds m_base_timestamp; // !< Timestamp of the first frame that has a real timestamp (different than 0)
74  std::map<uint32_t, std::shared_ptr<playback_sensor>> m_sensors;
75  std::map<uint32_t, std::shared_ptr<playback_sensor>> m_active_sensors;
76  std::atomic<double> m_sample_rate;
77  std::atomic_bool m_real_time;
78  device_serializer::nanoseconds m_prev_timestamp;
79  std::shared_ptr<context> m_context;
80  std::vector<std::shared_ptr<lazy<rs2_extrinsics>>> m_extrinsics_fetchers;
81  std::map<int, std::pair<uint32_t, rs2_extrinsics>> m_extrinsics_map;
82 
83  };
84 
86 }
Definition: info.h:22
Definition: types.h:269
Definition: context.h:109
std::shared_ptr< matcher > create_matcher(const frame_holder &frame) const override
size_t get_sensors_count() const override
void hardware_reset() override
std::pair< uint32_t, rs2_extrinsics > get_extrinsics(const stream_interface &stream) const override
signal< playback_device, rs2_playback_status > playback_status_changed
Definition: playback_device.h:45
Definition: streaming.h:131
Definition: types.h:1414
Definition: archive.h:63
void seek_to_time(std::chrono::nanoseconds time)
Definition: algo.h:16
Definition: streaming.h:31
sensor_interface & get_sensor(size_t i) override
void set_frame_rate(double rate)
std::shared_ptr< context > get_context() const override
playback_device(std::shared_ptr< context > context, std::shared_ptr< device_serializer::reader > serializer)
Definition: extension.h:22
bool extend_to(rs2_extension extension_type, void **ext) override
rs2_playback_status
Definition: rs_record_playback.h:19
uint64_t get_position() const
platform::backend_device_group get_device_data() const override
std::chrono::duration< uint64_t, std::nano > nanoseconds
Definition: serialization.h:46
Cross-stream extrinsics: encode the topology describing how the different devices are connected...
Definition: rs_sensor.h:82
rs2_playback_status get_current_status() const
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
Definition: rs_types.h:94
int stream_id
Definition: sync.h:17
static bool try_extend_snapshot(std::shared_ptr< extension_snapshot > &e, rs2_extension extension_type, void **ext)
Definition: stream.h:14
Definition: types.h:637
Definition: streaming.h:106
const std::string & get_file_name() const
void set_real_time(bool real_time)
Definition: rs_types.h:112
bool is_valid() const override
MAP_EXTENSION(RS2_EXTENSION_POINTS, librealsense::points)
uint64_t get_duration() const
Definition: playback_device.h:17