Program Listing for File mcap_sink.hpp

Return to documentation for file (/tmp/ws/src/data_tamer/data_tamer_cpp/include/data_tamer/sinks/mcap_sink.hpp)

#pragma once

#include "data_tamer/data_sink.hpp"

#include <atomic>
#include <condition_variable>
#include <deque>
#include <mutex>
#include <thread>
#include <unordered_map>

// Forward declaration
namespace mcap
{
class McapWriter;
}

namespace DataTamer
{

class MCAPSink : public DataSinkBase
{
public:
  explicit MCAPSink(std::string const& filepath, bool do_compression = false);

  ~MCAPSink() override;

  void addChannel(std::string const& channel_name, Schema const& schema) override;

  bool storeSnapshot(const Snapshot& snapshot) override;

  void setMaxTimeBeforeReset(std::chrono::seconds reset_time);

  void stopRecording();

  void restartRecording(std::string const& filepath, bool do_compression = false);

private:
  std::string filepath_;
  bool compression_ = false;
  std::unique_ptr<mcap::McapWriter> writer_;

  std::unordered_map<uint64_t, uint16_t> hash_to_channel_id_;
  std::unordered_map<std::string, Schema> schemas_;

  std::chrono::seconds reset_time_ = std::chrono::seconds(60 * 10);
  std::chrono::system_clock::time_point start_time_;

  bool forced_stop_recording_ = false;
  std::recursive_mutex mutex_;

  void openFile(std::string const& filepath);
};

}   // namespace DataTamer