diff --git a/core-writer/include/ZmqRecvModule.hpp b/core-writer/include/ZmqRecvModule.hpp index e8e845c..58192a3 100644 --- a/core-writer/include/ZmqRecvModule.hpp +++ b/core-writer/include/ZmqRecvModule.hpp @@ -12,7 +12,7 @@ class ZmqRecvModule RingBuffer& ring_buffer_; const header_map& header_values_; std::atomic_bool is_receiving_; - std::atomic_bool is_saving_; + std::atomic_int n_frames_to_save_; std::vector receiving_threads_; protected: @@ -24,12 +24,14 @@ public: RingBuffer& ring_buffer, const header_map& header_values); - void start_recv(const std::string& connect_address, - const uint8_t n_receiving_threads); + void start_recv( + const std::string& connect_address, + const uint8_t n_receiving_threads); void stop_recv(); - void start_saving(); + void start_saving(const int n_frames = -1); void stop_saving(); + bool is_saving(); }; #endif \ No newline at end of file diff --git a/core-writer/src/module/ZmqRecvModule.cpp b/core-writer/src/module/ZmqRecvModule.cpp index 600dcb1..9f15287 100644 --- a/core-writer/src/module/ZmqRecvModule.cpp +++ b/core-writer/src/module/ZmqRecvModule.cpp @@ -84,17 +84,18 @@ void ZmqRecvModule::stop_recv() receiving_threads_.clear(); } -void ZmqRecvModule::start_saving() +void ZmqRecvModule::start_saving(const int n_frames_to_save) { #ifdef DEBUG_OUTPUT using namespace date; using namespace chrono; cout << "[" << system_clock::now() << "]"; cout << "[ZmqRecvModule::start_saving]"; - cout << " Enable saving." << endl; + cout << " n_frames_to_save " << n_frames_to_save; + cout << endl; #endif - is_saving_ = true; + n_frames_to_save_ = n_frames_to_save; } void ZmqRecvModule::stop_saving() @@ -107,7 +108,12 @@ void ZmqRecvModule::stop_saving() cout << " Disable saving." << endl; #endif - is_saving_ = false; + n_frames_to_save_ = 0; +} + +bool ZmqRecvModule::is_saving() +{ + return n_frames_to_save_ != 0; } void ZmqRecvModule::receive_thread(const string& connect_address) @@ -128,10 +134,12 @@ void ZmqRecvModule::receive_thread(const string& connect_address) continue; } - if (!is_saving_.load(memory_order_relaxed)) { + if (!is_saving()) { continue; } + n_frames_to_save_--; + auto frame_metadata = frame.first; auto frame_data = frame.second;