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