From 2a0e90bd920fc7ff6bbb62d53df2a7321f21f1a7 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 2 Jun 2020 13:22:40 +0200 Subject: [PATCH] Image assembly process improvements --- sf-writer/src/ImageAssembler.cpp | 42 +++++++++++--------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/sf-writer/src/ImageAssembler.cpp b/sf-writer/src/ImageAssembler.cpp index 81abff9..cb1eb14 100644 --- a/sf-writer/src/ImageAssembler.cpp +++ b/sf-writer/src/ImageAssembler.cpp @@ -11,7 +11,7 @@ ImageAssembler::ImageAssembler(const size_t n_modules) : image_buffer_ = new char[IA_N_SLOTS * image_buffer_slot_n_bytes_]; image_metadata_buffer_ = new ImageMetadataBlock[IA_N_SLOTS]; frame_metadata_buffer_ = - new ModuleFrame[IA_N_SLOTS * BUFFER_BLOCK_SIZE * n_modules]; + new ModuleFrame[IA_N_SLOTS * n_modules * BUFFER_BLOCK_SIZE]; buffer_status_ = new atomic_int[IA_N_SLOTS]; for (size_t i=0; iframe[0].metadata.pulse_id; - image_metadata_buffer_[slot_id].block_stop_pulse_id = - block_buffer->frame[BUFFER_BLOCK_SIZE-1].metadata.pulse_id; - } + size_t slot_i_offset = slot_id * image_buffer_slot_n_bytes_; + size_t module_i_offset = i_module * MODULE_N_BYTES; - auto metadata_offset = - frame_metadata_buffer_[metadata_offset] = 0; - - size_t slot_offset = slot_id * image_buffer_slot_n_bytes_; - size_t module_image_offset = i_module * MODULE_N_BYTES; + size_t slot_m_offset = slot_id * n_modules_ * BUFFER_BLOCK_SIZE; + size_t module_m_offset = i_module * n_modules_; for (size_t i_pulse=0; i_pulse < BUFFER_BLOCK_SIZE; i_pulse++) { - size_t image_offset = i_pulse * MODULE_N_BYTES * n_modules_; - + size_t metadata_offset = slot_m_offset + module_m_offset + i_pulse; memcpy( - image_buffer_ + slot_offset + image_offset + module_image_offset, + &(frame_metadata_buffer_[metadata_offset]), + &(block_buffer->frame[i_pulse].metadata), + sizeof(ModuleFrame)); + + size_t image_offset = slot_i_offset + module_i_offset; + image_offset += i_pulse * MODULE_N_BYTES * n_modules_; + memcpy( + image_buffer_ + image_offset, &(block_buffer->frame[i_pulse].data[0]), MODULE_N_BYTES); - - // TODO: Temp workaround. We need to synchronize this access. - if (i_module == 0) { - image_metadata_buffer_[slot_id].pulse_id[i_pulse] = - block_buffer->frame[i_pulse].metadata.pulse_id; - image_metadata_buffer_[slot_id].frame_index[i_pulse] = - block_buffer->frame[i_pulse].metadata.frame_index; - image_metadata_buffer_[slot_id].daq_rec[i_pulse] = - block_buffer->frame[i_pulse].metadata.daq_rec; -// metadata_buffer_[slot_id].is_good_image[i_pulse] = -// block_buffer->frame[i_pulse].is_good_image.pulse_id; - } } buffer_status_[slot_id].fetch_sub(1);