JFJochReceiverFPGA: compression and total processing time are lost due to order of operations
Build Packages / build:rpm (rocky8_nocuda) (push) Has been cancelled
Build Packages / build:rpm (rocky9_nocuda) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Has been cancelled
Build Packages / build:rpm (rocky8_sls9) (push) Has been cancelled
Build Packages / build:rpm (rocky9_sls9) (push) Has been cancelled
Build Packages / build:rpm (rocky8) (push) Has been cancelled
Build Packages / build:rpm (rocky9) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2204) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2404) (push) Has been cancelled
Build Packages / DIALS test (push) Has been cancelled
Build Packages / XDS test (durin plugin) (push) Has been cancelled
Build Packages / XDS test (JFJoch plugin) (push) Has been cancelled
Build Packages / XDS test (neggia plugin) (push) Has been cancelled
Build Packages / Generate python client (push) Has been cancelled
Build Packages / Build documentation (push) Has been cancelled
Build Packages / Unit tests (push) Has been cancelled
Build Packages / Create release (push) Has been cancelled
Build Packages / build:rpm (rocky8_nocuda) (pull_request) Has been cancelled
Build Packages / build:rpm (rocky9_nocuda) (pull_request) Has been cancelled
Build Packages / build:rpm (ubuntu2204_nocuda) (pull_request) Has been cancelled
Build Packages / build:rpm (ubuntu2404_nocuda) (pull_request) Has been cancelled
Build Packages / build:rpm (rocky8_sls9) (pull_request) Has been cancelled
Build Packages / build:rpm (rocky9_sls9) (pull_request) Has been cancelled
Build Packages / build:rpm (rocky8) (pull_request) Has been cancelled
Build Packages / build:rpm (rocky9) (pull_request) Has been cancelled
Build Packages / build:rpm (ubuntu2204) (pull_request) Has been cancelled
Build Packages / build:rpm (ubuntu2404) (pull_request) Has been cancelled
Build Packages / DIALS test (pull_request) Has been cancelled
Build Packages / XDS test (durin plugin) (pull_request) Has been cancelled
Build Packages / XDS test (JFJoch plugin) (pull_request) Has been cancelled
Build Packages / XDS test (neggia plugin) (pull_request) Has been cancelled
Build Packages / Generate python client (pull_request) Has been cancelled
Build Packages / Build documentation (pull_request) Has been cancelled
Build Packages / Unit tests (pull_request) Has been cancelled
Build Packages / Create release (pull_request) Has been cancelled

This commit is contained in:
2026-04-28 16:17:51 +02:00
parent 162eab63b7
commit 994c0f96fa
+41 -42
View File
@@ -439,7 +439,6 @@ void JFJochReceiverFPGA::FrameTransformationThread(uint32_t threadid) {
message.az_int_profile = az_int_profile_image.GetResult();
message.bkg_estimate = az_int_profile_image.GetBkgEstimate(experiment.GetAzimuthalIntegrationSettings());
plots.Add(message, az_int_profile_image);
scan_result.Add(message);
auto image_end_time = std::chrono::high_resolution_clock::now();
@@ -468,52 +467,52 @@ void JFJochReceiverFPGA::FrameTransformationThread(uint32_t threadid) {
if (loc == nullptr) {
// No free buffer locations - continue
writer_queue_full = true;
continue;
} else {
auto writer_buffer = (uint8_t *) loc->GetImage();
CBORStream2Serializer serializer(writer_buffer, experiment.GetImageBufferLocationSize());
message.image = CompressedImage(nullptr, 0,
experiment.GetXPixelsNum(),
experiment.GetYPixelsNum(),
experiment.GetImageMode(),
experiment.GetCompressionAlgorithm());
serializer.SerializeImage(message);
if (experiment.GetImageBufferLocationSize() - serializer.GetImageAppendOffset()
< experiment.GetMaxCompressedSize())
throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds,
"Not enough memory to save image");
const auto compression_start_time = std::chrono::steady_clock::now();
size_t image_size = transformation.CompressImage(writer_buffer + serializer.GetImageAppendOffset());
const auto compression_end_time = std::chrono::steady_clock::now();
message.compression_time_s = std::chrono::duration<float>(compression_end_time - compression_start_time).count();
serializer.AppendImage(image_size);
compressed_size += image_size;
loc->SetImageNumber(image_number);
loc->SetImageSize(serializer.GetBufferSize());
loc->SetIndexed(message.indexing_result.value_or(false));
loc->ReadyToSend();
if (zmq_preview_socket != nullptr)
zmq_preview_socket->SendImage(writer_buffer, serializer.GetBufferSize());
if (zmq_metadata_socket != nullptr)
zmq_metadata_socket->AddDataMessage(message);
if (push_images_to_writer) {
image_pusher.SendImage(*loc);
++images_sent; // Handle case when image not sent properly
} else
loc->release();
UpdateMaxImageSent(message.number);
}
auto writer_buffer = (uint8_t *) loc->GetImage();
CBORStream2Serializer serializer(writer_buffer, experiment.GetImageBufferLocationSize());
message.image = CompressedImage(nullptr, 0,
experiment.GetXPixelsNum(),
experiment.GetYPixelsNum(),
experiment.GetImageMode(),
experiment.GetCompressionAlgorithm());
serializer.SerializeImage(message);
if (experiment.GetImageBufferLocationSize() - serializer.GetImageAppendOffset()
< experiment.GetMaxCompressedSize())
throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds,
"Not enough memory to save image");
const auto compression_start_time = std::chrono::steady_clock::now();
size_t image_size = transformation.CompressImage(writer_buffer + serializer.GetImageAppendOffset());
const auto compression_end_time = std::chrono::steady_clock::now();
message.compression_time_s = std::chrono::duration<float>(compression_end_time - compression_start_time).count();
serializer.AppendImage(image_size);
compressed_size += image_size;
loc->SetImageNumber(image_number);
loc->SetImageSize(serializer.GetBufferSize());
loc->SetIndexed(message.indexing_result.value_or(false));
loc->ReadyToSend();
if (zmq_preview_socket != nullptr)
zmq_preview_socket->SendImage(writer_buffer, serializer.GetBufferSize());
if (zmq_metadata_socket != nullptr)
zmq_metadata_socket->AddDataMessage(message);
if (push_images_to_writer) {
image_pusher.SendImage(*loc);
++images_sent; // Handle case when image not sent properly
} else
loc->release();
UpdateMaxImageSent(message.number);
}
logger.Debug("Frame transformation thread - done sending image {} / {}", image_number, message.number);
plots.Add(message, az_int_profile_image);
current_status.SetProgress(GetProgress());
current_status.SetStatus(GetStatus());
} catch (const JFJochException &e) {