ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
RSBagReader.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <IJsonConvertible.h>
11 
12 #include <atomic>
13 #include <condition_variable>
14 #include <string>
15 #include <thread>
16 #include <unordered_map>
17 #include <vector>
18 
21 
22 // Forward declarations for librealsense classes
23 namespace rs2 {
24 class pipeline;
25 } // namespace rs2
26 
27 namespace cloudViewer {
28 namespace t {
29 namespace io {
30 
49 class RSBagReader : public RGBDVideoReader {
50 public:
51  static const size_t DEFAULT_BUFFER_SIZE = 32;
52 
57  explicit RSBagReader(size_t buffer_size = DEFAULT_BUFFER_SIZE);
58 
59  RSBagReader(const RSBagReader &) = delete;
60  RSBagReader &operator=(const RSBagReader &) = delete;
61  virtual ~RSBagReader();
62 
64  virtual bool IsOpened() const override { return is_opened_; }
65 
67  virtual bool IsEOF() const override;
68 
72  virtual bool Open(const std::string &filename) override;
73 
75  virtual void Close() override;
76 
78  virtual const RGBDVideoMetadata &GetMetadata() const override {
79  return metadata_;
80  }
81 
83  virtual RGBDVideoMetadata &GetMetadata() override { return metadata_; }
84 
88  virtual bool SeekTimestamp(uint64_t timestamp) override;
89 
91  virtual uint64_t GetTimestamp() const override;
92 
94  virtual t::geometry::RGBDImage NextFrame() override;
95 
97  virtual std::string GetFilename() const override { return filename_; };
98 
101 
102 private:
103  std::string filename_;
104  RGBDVideoMetadata metadata_;
105 
106  std::atomic<bool> is_eof_{false}; // Write by frame_reader_thread.
107  std::atomic<bool> is_opened_{false}; // Read by frame_reader_thread.
117  std::vector<t::geometry::RGBDImage> frame_buffer_;
118  std::vector<uint64_t>
119  frame_position_us_;
120  static const size_t BUFFER_REFILL_FACTOR =
121  4;
122  std::atomic<uint64_t> head_fid_{
123  0};
124  std::atomic<uint64_t> tail_fid_{0};
125  std::atomic<uint64_t> seek_to_{UINT64_MAX};
126  std::condition_variable need_frames_;
132  void fill_frame_buffer();
133  std::thread frame_reader_thread_;
134 
135  std::unique_ptr<rs2::pipeline> pipe_;
136 
137  Json::Value GetMetadataJson();
138  std::string GetTagInMetadata(const std::string &tag_name);
139 };
140 } // namespace io
141 } // namespace t
142 } // namespace cloudViewer
std::string filename
RGBDImage A pair of color and depth images.
Definition: RGBDImage.h:21
virtual void SaveFrames(const std::string &frame_path, uint64_t start_time_us=0, uint64_t end_time_us=UINT64_MAX)
virtual std::string ToString() const
Text description.
virtual bool SeekTimestamp(uint64_t timestamp) override
static const size_t DEFAULT_BUFFER_SIZE
Definition: RSBagReader.h:51
RSBagReader(size_t buffer_size=DEFAULT_BUFFER_SIZE)
Definition: RSBagReader.cpp:35
virtual RGBDVideoMetadata & GetMetadata() override
Get reference to the metadata of the RGBD video playback.
Definition: RSBagReader.h:83
virtual std::string GetFilename() const override
Return filename being read.
Definition: RSBagReader.h:97
RSBagReader(const RSBagReader &)=delete
virtual bool IsEOF() const override
Check if the RSBag file is all read.
virtual bool IsOpened() const override
Check If the RSBag file is opened.
Definition: RSBagReader.h:64
virtual uint64_t GetTimestamp() const override
Get current timestamp (in us).
RSBagReader & operator=(const RSBagReader &)=delete
virtual bool Open(const std::string &filename) override
Definition: RSBagReader.cpp:44
virtual t::geometry::RGBDImage NextFrame() override
Copy next frame from the bag file and return the RGBDImage object.
virtual const RGBDVideoMetadata & GetMetadata() const override
Get (read-only) metadata of the playback.
Definition: RSBagReader.h:78
virtual void Close() override
Close the opened RSBag playback.
Definition: RSBagReader.cpp:77
Generic file read and write utility for python interface.