Initialization is internal RingBuffer logic

This commit is contained in:
2018-01-09 16:41:35 +01:00
parent cf065c3a1f
commit db0c3e88e0
2 changed files with 17 additions and 7 deletions
+14
View File
@@ -1,4 +1,11 @@
#include "RingBuffer.hpp"
#include <stdexcept>
#include <chrono>
#include <thread>
#include <sstream>
#include <cstring>
#include <iostream>
#include <cstddef>
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<FrameMetadata, char*> RingBuffer::read()
if (frame_metadata_queue.empty()) {
frame_metadata_queue_mutex.unlock();
continue;
} else {
+3 -7
View File
@@ -1,16 +1,11 @@
#ifndef RINGBUFFER_H
#define RINGBUFFER_H
#include <cstddef>
#include <list>
#include <thread>
#include <vector>
#include <map>
#include <stdexcept>
#include <mutex>
#include <sstream>
#include <cstring>
#include <iostream>
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<FrameMetadata> 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<FrameMetadata, char*> read();
std::pair<FrameMetadata, char*> read();
void release(size_t buffer_slot_index);
bool is_empty();