mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-28 13:12:23 +02:00
Initialization is internal RingBuffer logic
This commit is contained in:
@@ -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
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user