From 277be12554a630781e267d76726aa720277a3e79 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Mon, 12 Feb 2018 13:30:20 +0100 Subject: [PATCH] Allow writing header attributes --- src/ProcessManager.cpp | 21 +++++++++++++++++++-- src/ProcessManager.hpp | 3 ++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ProcessManager.cpp b/src/ProcessManager.cpp index dc5d7cb..0c88104 100644 --- a/src/ProcessManager.cpp +++ b/src/ProcessManager.cpp @@ -29,7 +29,7 @@ void ProcessManager::run_writer(WriterManager& manager, const H5Format& format, boost::thread receiver_thread(receive_zmq, boost::ref(manager), boost::ref(ring_buffer), boost::ref(receiver), boost::ref(format)); boost::thread writer_thread(write_h5, boost::ref(manager), - boost::ref(format), boost::ref(ring_buffer)); + boost::ref(format), boost::ref(ring_buffer), boost::ref(*receiver.get_header_values_type())); RestApi::start_rest_api(manager, rest_port); @@ -86,7 +86,8 @@ void ProcessManager::receive_zmq(WriterManager& manager, RingBuffer& ring_buffer #endif } -void ProcessManager::write_h5(WriterManager& manager, const H5Format& format, RingBuffer& ring_buffer) +void ProcessManager::write_h5(WriterManager& manager, const H5Format& format, RingBuffer& ring_buffer, + const unordered_map& header_values_type) { H5Writer writer(manager.get_output_file()); auto raw_frames_dataset_name = format.get_raw_frames_dataset_name(); @@ -117,6 +118,22 @@ void ProcessManager::write_h5(WriterManager& manager, const H5Format& format, Ri ring_buffer.release(received_data.first->buffer_slot_index); + // Write image metadata. + for (const auto& header_type : header_values_type) { + auto& name = header_type.first; + auto& type = header_type.second; + + auto value = received_data.first->header_values.at(name); + + writer.write_data(name, + received_data.first->frame_index, + value.get(), + {1}, + 4, + type, + "little"); + } + manager.written_frame(received_data.first->frame_index); } diff --git a/src/ProcessManager.hpp b/src/ProcessManager.hpp index 74c3a6f..9ae83d9 100644 --- a/src/ProcessManager.hpp +++ b/src/ProcessManager.hpp @@ -12,7 +12,8 @@ namespace ProcessManager void receive_zmq(WriterManager& manager, RingBuffer& ring_buffer, ZmqReceiver& receiver, const H5Format& format); - void write_h5(WriterManager& manager, const H5Format& format, RingBuffer& ring_buffer); + void write_h5(WriterManager& manager, const H5Format& format, RingBuffer& ring_buffer, + const std::unordered_map& header_values_type); }; #endif \ No newline at end of file