From be6b774d68cd25658020a8c5a15a7698a7dafaa2 Mon Sep 17 00:00:00 2001 From: Babicaa Date: Tue, 2 Apr 2019 14:38:47 +0200 Subject: [PATCH] Implement the receive frame correctly --- lib/src/WriterManager.cpp | 26 +++++++++----------------- lib/src/WriterManager.hpp | 17 +++++++---------- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/lib/src/WriterManager.cpp b/lib/src/WriterManager.cpp index 5ed1ce1..036945d 100644 --- a/lib/src/WriterManager.cpp +++ b/lib/src/WriterManager.cpp @@ -50,8 +50,8 @@ void writer_utils::create_destination_folder(const string& output_file) WriterManager::WriterManager(const unordered_map& parameters_type): parameters_type(parameters_type), logs(10), - receiving_flag(false), writing_flag(false), killed_flag(false), - n_received_frames(0), n_written_frames(0), n_expected_frames(0) + writing_flag(false), killed_flag(false), + n_frames_to_receive(0), n_frames_to_write(0) { #ifdef DEBUG_OUTPUT using namespace date; @@ -152,21 +152,6 @@ bool WriterManager::is_killed() const return killed_flag.load(); } -void WriterManager::received_frame(size_t frame_index) -{ - n_received_frames++; -} - -void WriterManager::written_frame(size_t frame_index) -{ - n_written_frames++; -} - -void WriterManager::lost_frame(size_t frame_index) -{ - n_lost_frames++; -} - bool WriterManager::are_all_parameters_set() { for (const auto& parameter : parameters_type) { @@ -186,3 +171,10 @@ bool WriterManager::are_all_parameters_set() return true; } +bool WriterManager::receive_frame() { + if (n_frames_to_receive > 0) { + return (n_frames_to_receive.fetch_sub(1) >= 0); + } + + return false; +} diff --git a/lib/src/WriterManager.hpp b/lib/src/WriterManager.hpp index 7bce9e5..a48aacd 100644 --- a/lib/src/WriterManager.hpp +++ b/lib/src/WriterManager.hpp @@ -32,13 +32,11 @@ class WriterManager const std::unordered_map& parameters_type; const std::deque logs; - std::atomic receiving_flag; std::atomic writing_flag; std::atomic killed_flag; - std::atomic n_received_frames; - std::atomic n_written_frames; - std::atomic n_expected_frames; + std::atomic n_frames_to_receive; + std::atomic n_frames_to_write; public: WriterManager(const std::unordered_map& parameters_type); @@ -53,15 +51,14 @@ class WriterManager std::unordered_map get_parameters(); const std::unordered_map& get_parameters_type() const; - bool is_running(); + // Return True if the frame is to be received, False if is to be dropped. + bool receive_frame(); + // True if the writer process should conitnue. + bool is_running() const; + bool is_killed() const; bool are_all_parameters_set(); std::string get_output_file() const; - - - void received_frame(size_t frame_index); - void written_frame(size_t frame_index); - void lost_frame(size_t frame_index); }; #endif