bugfix gap pixels eiger assembler

This commit is contained in:
lhdamiani
2021-07-23 14:01:43 +02:00
parent 72bf793cfc
commit 06c230c048
14 changed files with 106 additions and 3594 deletions
+41 -39
View File
@@ -14,6 +14,7 @@ using namespace buffer_config;
EigerAssembler::EigerAssembler(const int n_modules, const int bit_depth):
n_modules_(n_modules),
n_rows_(n_modules/2),
n_eiger_modules_(n_modules/4),
bit_depth_(bit_depth),
n_bytes_per_frame_(MODULE_N_PIXELS * bit_depth / 8),
@@ -23,9 +24,9 @@ EigerAssembler::EigerAssembler(const int n_modules, const int bit_depth):
n_bytes_per_y_gap_(GAP_Y_MODULE_PIXELS * bit_depth / 8),
n_bytes_per_eiger_x_gap_(GAP_X_EIGERMOD_PIXELS * bit_depth / 8),
n_bytes_per_eiger_y_gap_(GAP_Y_EIGERMOD_PIXELS * bit_depth / 8),
n_bytes_per_image_line_(n_bytes_per_frame_line_ * 2 + n_bytes_per_x_gap_),
n_lines_per_frame_(DATA_BYTES_PER_PACKET / n_bytes_per_frame_line_ * n_packets_per_frame_),
image_bytes_((n_modules_ * n_bytes_per_frame_) + (2 * (MODULE_Y_SIZE * 2) * bit_depth_ / 8) + ((n_eiger_modules_) * (2 * n_bytes_per_image_line_)))
n_bytes_per_image_line_((n_bytes_per_frame_line_ + EXTEND_X_PIXELS * bit_depth / 8) * n_rows_),
n_lines_per_frame_(DATA_BYTES_PER_PACKET / n_bytes_per_frame_line_ * n_packets_per_frame_ + EXTEND_Y_PIXELS),
image_bytes_(n_bytes_per_image_line_ * n_lines_per_frame_ * n_rows_)
{
}
@@ -63,8 +64,8 @@ void EigerAssembler::assemble_image(const char* src_meta,
// init good image status = 0
image_meta->status = 0;
image_meta->id = frame_meta->id;
image_meta->height = n_modules_ / 2 * MODULE_Y_SIZE + GAP_Y_MODULE_PIXELS;
image_meta->width = n_modules_ / 2 * MODULE_X_SIZE + GAP_X_MODULE_PIXELS;
image_meta->height = n_rows_ * (MODULE_Y_SIZE + EXTEND_Y_PIXELS);
image_meta->width = n_rows_ * (MODULE_X_SIZE + EXTEND_X_PIXELS);
image_meta->dtype = (bit_depth_ <= 8) ? 1 : bit_depth_ / 8;
image_meta->encoding = 0;
image_meta->source_id = 0;
@@ -103,7 +104,7 @@ void EigerAssembler::assemble_image(const char* src_meta,
line_number = MODULE_Y_SIZE + GAP_Y_MODULE_PIXELS;
reverse_factor = MODULE_Y_SIZE - 1;
dest_offset += n_bytes_per_image_line_ *
(MODULE_Y_SIZE + GAP_Y_MODULE_PIXELS);
(MODULE_X_SIZE+EXTEND_X_PIXELS);
source_offset = (MODULE_Y_SIZE-1) * n_bytes_per_frame_line_;
}
@@ -114,41 +115,9 @@ void EigerAssembler::assemble_image(const char* src_meta,
uint32_t dest_module_line = line_number;
if (i_module_column == 1) {
dest_offset += n_bytes_per_frame_line_ + n_bytes_per_x_gap_;
dest_offset += n_bytes_per_frame_line_ + EXTEND_X_PIXELS * bit_depth_ / 8 ;
}
int counter = 0;
for (uint32_t frame_line = 0;
frame_line < n_lines_per_frame_; frame_line++) {
// void * destination, const void * source, size_t num
memcpy (
(char*)(dst_data + dest_offset),
(char*)(src_data + source_offset),
n_bytes_per_frame_line_
);
#ifdef DEBUG_OUTPUT
using namespace date;
// verifies the addresses for
// beginning and end of each frame
if (counter < 5 || counter > 508){
cout << " [" << std::chrono::system_clock::now();
cout << "] [MODULE " << i_module;
cout << "] (row " << i_module_row;
cout << ",column " << i_module_column;
cout << ") source_offset" << source_offset;
cout << " || dest_offset " << dest_offset;
cout << " || frame_line " << frame_line;
cout << " || COUNTER " << counter;
cout << endl;
}
#endif
counter += 1;
source_offset += reverse * n_bytes_per_frame_line_;
dest_offset += reverse * n_bytes_per_image_line_;
}
line_number += n_lines_per_frame_;
dest_module_line = line_number + n_lines_per_frame_ - 1;
#ifdef DEBUG_OUTPUT
using namespace date;
// if (i_module == 0){
@@ -163,6 +132,39 @@ void EigerAssembler::assemble_image(const char* src_meta,
// }
#endif
int counter = 0;
for (uint32_t frame_line = 0;
frame_line < n_lines_per_frame_ - 1; frame_line++) {
// void * destination, const void * source, size_t num
memcpy (
(char*)(dst_data + dest_offset),
(char*)(src_data + source_offset),
n_bytes_per_frame_line_
);
#ifdef DEBUG_OUTPUT
using namespace date;
// verifies the addresses for
// beginning and end of each frame
if (counter < 3 || frame_line > n_lines_per_frame_ - 3){
cout << " [" << std::chrono::system_clock::now();
cout << "] [MODULE " << i_module;
cout << "] (row " << i_module_row;
cout << " , column " << i_module_column;
cout << ") source_offset" << source_offset;
cout << " || dest_offset " << dest_offset;
cout << " || frame_line " << frame_line;
cout << " || COUNTER " << counter;
cout << endl;
}
#endif
counter += 1;
source_offset += reverse * n_bytes_per_frame_line_;
dest_offset += reverse * n_bytes_per_image_line_;
}
line_number += n_lines_per_frame_;
dest_module_line = line_number + n_lines_per_frame_ - 1;
// last module sets the last_image_status_
if (i_module == n_modules_ - 1){
last_image_status_ = image_meta->status;