From 8c79e76d71b7e0e963de887f9c64229631bec18c Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 17 Jan 2018 14:31:12 +0100 Subject: [PATCH] Dynamically assign dataset type --- src/RingBuffer.hpp | 5 ++++- src/WriterManager.hpp | 3 +-- src/h5_zmq_writer.cpp | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/RingBuffer.hpp b/src/RingBuffer.hpp index ee9ee3e..ec58d0e 100644 --- a/src/RingBuffer.hpp +++ b/src/RingBuffer.hpp @@ -5,6 +5,7 @@ #include #include #include +#include struct FrameMetadata @@ -14,8 +15,10 @@ struct FrameMetadata size_t frame_bytes_size = 0; // Part of the message header. - size_t frame_index = 0; + uint64_t frame_index = 0; size_t frame_shape[2]; + std::string endianness = "little"; + std::string type; }; class RingBuffer diff --git a/src/WriterManager.hpp b/src/WriterManager.hpp index 76b59ca..5e133b6 100644 --- a/src/WriterManager.hpp +++ b/src/WriterManager.hpp @@ -5,7 +5,6 @@ #include #include #include -#include "config.hpp" #include "h5_utils.hpp" class WriterManager @@ -19,7 +18,7 @@ class WriterManager std::atomic_int n_written_frames; public: - WriterManager(uint64_t n_images=0, std::string dataset_name=config::dataset_name); + WriterManager(uint64_t n_images=0, std::string dataset_name="data"); void stop(); std::string get_status(); std::map get_statistics(); diff --git a/src/h5_zmq_writer.cpp b/src/h5_zmq_writer.cpp index 35d2320..7939f32 100644 --- a/src/h5_zmq_writer.cpp +++ b/src/h5_zmq_writer.cpp @@ -33,7 +33,9 @@ void write_h5(WriterManager *manager, RingBuffer *ring_buffer, string output_fil writer.write_data(received_data.first.frame_index, received_data.first.frame_shape, received_data.first.frame_bytes_size, - received_data.second); + received_data.second, + received_data.first.type, + received_data.first.endianness); ring_buffer->release(received_data.first.buffer_slot_index); @@ -71,12 +73,20 @@ void receive_zmq(WriterManager *manager, RingBuffer *ring_buffer, string connect char* header = static_cast(message_data.data()); header_parser.Parse(header); - // Extract frame_index and frame_shape from the message header. + // Extract data from message header. frame_metadata.frame_index = header_parser["frame"].GetUint64(); auto header_shape = header_parser["shape"].GetArray(); frame_metadata.frame_shape[0] = header_shape[0].GetUint64(); frame_metadata.frame_shape[1] = header_shape[1].GetUint64(); + + if (header_parser.HasMember("endianness")) { + if (string("big") == header_parser["endianness"].GetString()) { + frame_metadata.endianness = "big"; + } + } + + frame_metadata.type = header_parser["type"].GetString(); // Get the message data. receiver.recv(&message_data);