From db0c3e88e023d3bf8108c36f62f2c5ca4c0cd97d Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 9 Jan 2018 16:41:35 +0100 Subject: [PATCH] Initialization is internal RingBuffer logic --- src/RingBuffer.cpp | 14 ++++++++++++++ src/RingBuffer.hpp | 10 +++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/RingBuffer.cpp b/src/RingBuffer.cpp index 77b7327..77d44e7 100644 --- a/src/RingBuffer.cpp +++ b/src/RingBuffer.cpp @@ -1,4 +1,11 @@ #include "RingBuffer.hpp" +#include +#include +#include +#include +#include +#include +#include RingBuffer::RingBuffer(size_t n_slots) : n_slots(n_slots), ringbuffer_slots(n_slots, 0){ #ifdef DEBUG @@ -33,6 +40,7 @@ void RingBuffer::initialize(size_t slot_size) this->buffer_size = slot_size * n_slots; this->frame_data_buffer = new char[buffer_size]; this->buffer_used_slots = 0; + this->ring_buffer_initialized = true; #ifdef DEBUG std::cout << "[RingBuffer::initialize] Total buffer_size " << buffer_size << std::endl; @@ -41,6 +49,11 @@ void RingBuffer::initialize(size_t slot_size) void RingBuffer::write(FrameMetadata &metadata, char* data) { + // Initialize the buffer on the first write. + if (!ring_buffer_initialized) { + initialize(metadata.frame_bytes_size); + } + // All images must fit in the ring buffer. if (metadata.frame_bytes_size > slot_size) { std::stringstream error_message; @@ -126,6 +139,7 @@ std::pair RingBuffer::read() if (frame_metadata_queue.empty()) { frame_metadata_queue_mutex.unlock(); + continue; } else { diff --git a/src/RingBuffer.hpp b/src/RingBuffer.hpp index 425b32a..ad207d1 100644 --- a/src/RingBuffer.hpp +++ b/src/RingBuffer.hpp @@ -1,16 +1,11 @@ #ifndef RINGBUFFER_H #define RINGBUFFER_H -#include #include -#include #include #include -#include #include -#include -#include -#include + struct FrameMetadata { @@ -35,6 +30,7 @@ class RingBuffer char* frame_data_buffer = NULL; size_t write_index = 0; size_t buffer_used_slots; + bool ring_buffer_initialized = false; std::list frame_metadata_queue; std::mutex frame_metadata_queue_mutex; @@ -47,7 +43,7 @@ class RingBuffer ~RingBuffer(); void initialize(size_t slot_size); void write(FrameMetadata &metadata, char* data); - std::pair read(); + std::pair read(); void release(size_t buffer_slot_index); bool is_empty();