From 2c62d0175923895dbd7a03170718e90532ace5a6 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 9 May 2023 15:36:56 +0200 Subject: [PATCH] JFJochFrameSerializer: Serializer buffer is managed externally --- common/ZMQImagePusher.cpp | 10 ++-- frame_serialize/JFJochFrameSerializer.cpp | 27 ++++----- frame_serialize/JFJochFrameSerializer.h | 7 +-- receiver/JFJochReceiver.cpp | 8 +-- tests/CBORTest.cpp | 69 ++++++++++++++--------- tests/ZMQImagePusherTest.cpp | 15 +++-- 6 files changed, 74 insertions(+), 62 deletions(-) diff --git a/common/ZMQImagePusher.cpp b/common/ZMQImagePusher.cpp index 922a3525d..681c7a428 100644 --- a/common/ZMQImagePusher.cpp +++ b/common/ZMQImagePusher.cpp @@ -56,7 +56,8 @@ void ZMQImagePusher::SendImage(const uint8_t *image_data, size_t image_size, int } void ZMQImagePusher::StartDataCollection(const StartMessage& message) { - JFJochFrameSerializer serializer(80*1024*1024); // 80 MiB should be safe even for 16M + std::vector serialization_buffer(80*1024*1024); + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); // 80 MiB should be safe even for 16M if (message.data_file_count < 1) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, @@ -66,18 +67,19 @@ void ZMQImagePusher::StartDataCollection(const StartMessage& message) { serializer.SerializeSequenceStart(message); for (const auto &s: sockets) - s->Send(serializer.GetBuffer(), serializer.GetBufferSize(), true); + s->Send(serialization_buffer.data(), serializer.GetBufferSize(), true); } void ZMQImagePusher::EndDataCollection(const EndMessage& message) { - JFJochFrameSerializer serializer(1024*1024); + std::vector serialization_buffer(80*1024*1024); + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); EndMessage end_message = message; for (const auto &s: sockets) { serializer.SerializeSequenceEnd(end_message); - s->Send(serializer.GetBuffer(), serializer.GetBufferSize(), true); + s->Send(serialization_buffer.data(), serializer.GetBufferSize(), true); end_message.write_master_file = false; } } \ No newline at end of file diff --git a/frame_serialize/JFJochFrameSerializer.cpp b/frame_serialize/JFJochFrameSerializer.cpp index 058ef616a..451645b7a 100644 --- a/frame_serialize/JFJochFrameSerializer.cpp +++ b/frame_serialize/JFJochFrameSerializer.cpp @@ -298,17 +298,12 @@ inline void CBOR_ENC_USER_DATA(CborEncoder &encoder, const StartMessage& message cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } -JFJochFrameSerializer::JFJochFrameSerializer(size_t in_max_buffer_size) : -max_buffer_size(in_max_buffer_size), curr_size(0) { - buffer.resize(max_buffer_size); -} +JFJochFrameSerializer::JFJochFrameSerializer(uint8_t *in_buffer, size_t buffer_size) : +buffer(in_buffer), max_buffer_size(buffer_size), curr_size(0) {} -const uint8_t *JFJochFrameSerializer::GetBuffer() const { - return buffer.data(); -} -uint8_t *JFJochFrameSerializer::GetImageAppendLocation() { - return buffer.data() + curr_size + sizeof(size_t); +size_t JFJochFrameSerializer::GetImageAppendOffset() { + return curr_size + sizeof(size_t); } size_t JFJochFrameSerializer::GetBufferSize() const { @@ -330,7 +325,7 @@ void JFJochFrameSerializer::AppendImage(size_t image_size) { #else size_t image_size_be = image_size; #endif - memcpy(buffer.data() + curr_size, &image_size_be, sizeof(size_t)); + memcpy(buffer + curr_size, &image_size_be, sizeof(size_t)); curr_size += sizeof(size_t); curr_size += image_size; } @@ -339,7 +334,7 @@ void JFJochFrameSerializer::AppendImage(size_t image_size) { void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message) { CborEncoder encoder, mapEncoder; - cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0); + cbor_encoder_init(&encoder, buffer, max_buffer_size, 0); cborErr(cbor_encode_tag(&encoder, CborSignatureTag )); size_t elements = 27; @@ -381,12 +376,12 @@ void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message) CBOR_ENC_CHANNELS(mapEncoder, "channels", message.channels); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); - curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data()); + curr_size = cbor_encoder_get_buffer_size(&encoder, buffer); } void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) { CborEncoder encoder, mapEncoder; - cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0); + cbor_encoder_init(&encoder, buffer, max_buffer_size, 0); cborErr(cbor_encode_tag(&encoder,CborSignatureTag )); cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 9)); @@ -401,12 +396,12 @@ void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) { CBOR_ENC_RAD_INT_RESULT(mapEncoder, "rad_int_result", message.rad_int_result); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); - curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data()); + curr_size = cbor_encoder_get_buffer_size(&encoder, buffer); } void JFJochFrameSerializer::SerializeImage(const DataMessage& message) { CborEncoder encoder, mapEncoder, userDataMapEncoder; - cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0); + cbor_encoder_init(&encoder, buffer, max_buffer_size, 0); cborErr(cbor_encode_tag(&encoder, CborSignatureTag )); cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 6)); @@ -431,6 +426,6 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) { cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); - curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data()); + curr_size = cbor_encoder_get_buffer_size(&encoder, buffer); } diff --git a/frame_serialize/JFJochFrameSerializer.h b/frame_serialize/JFJochFrameSerializer.h index f69e756a7..8ecc5472d 100644 --- a/frame_serialize/JFJochFrameSerializer.h +++ b/frame_serialize/JFJochFrameSerializer.h @@ -13,13 +13,12 @@ #include "ImageMessage.h" class JFJochFrameSerializer { - std::vector buffer; + uint8_t *buffer = nullptr; size_t max_buffer_size; size_t curr_size; public: - explicit JFJochFrameSerializer(size_t buffer_size); - [[nodiscard]] const uint8_t *GetBuffer() const; - [[nodiscard]] uint8_t *GetImageAppendLocation(); + explicit JFJochFrameSerializer(uint8_t *buffer, size_t buffer_size); + [[nodiscard]] size_t GetImageAppendOffset(); [[nodiscard]] size_t GetBufferSize() const; [[nodiscard]] size_t GetRemainingBuffer() const; void SerializeSequenceStart(const StartMessage& message); diff --git a/receiver/JFJochReceiver.cpp b/receiver/JFJochReceiver.cpp index 1fc85b44a..3e385106b 100644 --- a/receiver/JFJochReceiver.cpp +++ b/receiver/JFJochReceiver.cpp @@ -291,7 +291,7 @@ int64_t JFJochReceiver::MiniSummationThread(int d, int m, size_t image_number, b int64_t JFJochReceiver::FrameTransformationThread() { FrameTransformation transformation(experiment); - JFJochFrameSerializer serializer(serializer_buffer_size); + std::vector serialization_buffer(serializer_buffer_size); std::unique_ptr spot_finder; @@ -461,15 +461,15 @@ int64_t JFJochReceiver::FrameTransformationThread() { } if (push_images_to_writer) { + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); PrepareCBORImage(message, experiment, nullptr, 0); serializer.SerializeImage(message); if (serializer.GetRemainingBuffer() < experiment.GetMaxCompressedSize()) throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds, "Not enough memory to save image"); - size_t image_size = transformation.SaveCompressedImage(serializer.GetImageAppendLocation()); + size_t image_size = transformation.SaveCompressedImage(serialization_buffer.data() + serializer.GetImageAppendOffset()); serializer.AppendImage(image_size); - image_pusher.SendImage(const_cast(serializer.GetBuffer()), serializer.GetBufferSize(), - image_number); + image_pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), image_number); compressed_size += image_size; } diff --git a/tests/CBORTest.cpp b/tests/CBORTest.cpp index 1e6e2bb02..2d99eef85 100644 --- a/tests/CBORTest.cpp +++ b/tests/CBORTest.cpp @@ -10,7 +10,8 @@ #include "../frame_serialize/CborUtil.h" TEST_CASE("CBORSerialize_Start", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); + JFJochFrameSerializer serializer(buffer.data(), buffer.size()); StartMessage message { .data_file_count = 3, @@ -65,7 +66,7 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeSequenceStart(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::START); StartMessage output_message; @@ -125,7 +126,8 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") { } TEST_CASE("CBORSerialize_End", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); + JFJochFrameSerializer serializer(buffer.data(), buffer.size()); EndMessage message { .number_of_images = 57789, @@ -140,7 +142,7 @@ TEST_CASE("CBORSerialize_End", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeSequenceEnd(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::END); EndMessage output_message{}; @@ -156,7 +158,8 @@ TEST_CASE("CBORSerialize_End", "[CBOR]") { } TEST_CASE("CBORSerialize_End_RadIntResult", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); EndMessage message { .number_of_images = 57789, @@ -174,7 +177,7 @@ TEST_CASE("CBORSerialize_End_RadIntResult", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeSequenceEnd(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::END); EndMessage output_message{}; @@ -187,7 +190,8 @@ TEST_CASE("CBORSerialize_End_RadIntResult", "[CBOR]") { } TEST_CASE("CBORSerialize_Image", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -221,7 +225,7 @@ TEST_CASE("CBORSerialize_Image", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeImage(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -244,7 +248,8 @@ TEST_CASE("CBORSerialize_Image", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_2", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -273,7 +278,7 @@ TEST_CASE("CBORSerialize_Image_2", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeImage(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -290,7 +295,8 @@ TEST_CASE("CBORSerialize_Image_2", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_Append", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -317,11 +323,11 @@ TEST_CASE("CBORSerialize_Image_Append", "[CBOR]") { }; REQUIRE_NOTHROW(serializer.SerializeImage(message)); - memcpy(serializer.GetImageAppendLocation(), test.data(), 512*1024); + memcpy(buffer.data() + serializer.GetImageAppendOffset(), test.data(), 512*1024); REQUIRE_NOTHROW(serializer.AppendImage(512*1024)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -338,7 +344,8 @@ TEST_CASE("CBORSerialize_Image_Append", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_Compressed", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -366,7 +373,7 @@ TEST_CASE("CBORSerialize_Image_Compressed", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeImage(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -382,7 +389,8 @@ TEST_CASE("CBORSerialize_Image_Compressed", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_Rad_Int_Profile", "[CBOR]") { - JFJochFrameSerializer serializer(8 * 1024 * 1024); + std::vector buffer(8 * 1024 * 1024); + JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector test(1024); for (int i = 0; i < test.size(); i++) @@ -407,7 +415,7 @@ TEST_CASE("CBORSerialize_Image_Rad_Int_Profile", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeImage(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -419,7 +427,8 @@ TEST_CASE("CBORSerialize_Image_Rad_Int_Profile", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_Spots", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; spots.push_back(SpotToSave{.x = 7, .y = 8, .intensity = 34}); @@ -448,7 +457,7 @@ TEST_CASE("CBORSerialize_Image_Spots", "[CBOR]") { REQUIRE_NOTHROW(serializer.SerializeImage(message)); JFJochFrameDeserializer deserializer; - REQUIRE_NOTHROW(deserializer.Process(serializer.GetBuffer(), serializer.GetBufferSize())); + REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize())); REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE); auto image_array = deserializer.GetDataMessage(); @@ -470,7 +479,8 @@ inline bool CmpString(const char *str1, const std::string& str2) { } TEST_CASE("CBORSerialize_Start_stream2", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); StartMessage message { .data_file_count = 3, @@ -525,7 +535,7 @@ TEST_CASE("CBORSerialize_Start_stream2", "[CBOR]") { stream2_msg *msg; - auto ret = stream2_parse_msg(serializer.GetBuffer(), serializer.GetBufferSize(), &msg); + auto ret = stream2_parse_msg(buffer.data(), serializer.GetBufferSize(), &msg); REQUIRE(ret == STREAM2_OK); CHECK(msg->type == STREAM2_MSG_START); auto msg2 = (stream2_start_msg *) msg; @@ -555,7 +565,8 @@ TEST_CASE("CBORSerialize_Start_stream2", "[CBOR]") { } TEST_CASE("CBORSerialize_End_stream2", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); EndMessage message { .number_of_images = 57789, @@ -571,7 +582,7 @@ TEST_CASE("CBORSerialize_End_stream2", "[CBOR]") { stream2_msg *msg; - auto ret = stream2_parse_msg(serializer.GetBuffer(), serializer.GetBufferSize(), &msg); + auto ret = stream2_parse_msg(buffer.data(), serializer.GetBufferSize(), &msg); REQUIRE(ret == STREAM2_OK); CHECK(msg->type == STREAM2_MSG_END); auto msg2 = (stream2_end_msg *) msg; @@ -584,7 +595,8 @@ TEST_CASE("CBORSerialize_End_stream2", "[CBOR]") { TEST_CASE("CBORSerialize_Image_compressed_stream2", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -618,7 +630,7 @@ TEST_CASE("CBORSerialize_Image_compressed_stream2", "[CBOR]") { stream2_msg *msg; - auto ret = stream2_parse_msg(serializer.GetBuffer(), serializer.GetBufferSize(), &msg); + auto ret = stream2_parse_msg(buffer.data(), serializer.GetBufferSize(), &msg); REQUIRE(ret == STREAM2_OK); CHECK(msg->type == STREAM2_MSG_IMAGE); auto msg2 = (stream2_image_msg *) msg; @@ -639,7 +651,8 @@ TEST_CASE("CBORSerialize_Image_compressed_stream2", "[CBOR]") { } TEST_CASE("CBORSerialize_Image_uncompressed_stream2", "[CBOR]") { - JFJochFrameSerializer serializer(8*1024*1024); + std::vector buffer(8*1024*1024); +JFJochFrameSerializer serializer(buffer.data(), buffer.size()); std::vector spots; @@ -665,11 +678,11 @@ TEST_CASE("CBORSerialize_Image_uncompressed_stream2", "[CBOR]") { }; REQUIRE_NOTHROW(serializer.SerializeImage(message)); - auto cbor_image = serializer.GetBuffer(); + auto cbor_image = buffer.data(); stream2_msg *msg; - auto ret = stream2_parse_msg(serializer.GetBuffer(), serializer.GetBufferSize(), &msg); + auto ret = stream2_parse_msg(buffer.data(), serializer.GetBufferSize(), &msg); REQUIRE(ret == STREAM2_OK); CHECK(msg->type == STREAM2_MSG_IMAGE); auto msg2 = (stream2_image_msg *) msg; diff --git a/tests/ZMQImagePusherTest.cpp b/tests/ZMQImagePusherTest.cpp index 68d080d85..0a4efc901 100644 --- a/tests/ZMQImagePusherTest.cpp +++ b/tests/ZMQImagePusherTest.cpp @@ -84,7 +84,8 @@ TEST_CASE("ZMQImageCommTest_1Writer","[ZeroMQ]") { puller.Connect(zmq_addr); std::thread sender_thread = std::thread([&] { - JFJochFrameSerializer serializer(16*1024*1024); + std::vector serialization_buffer(16*1024*1024); + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); StartMessage message { .data_file_count = 16 }; @@ -97,7 +98,7 @@ TEST_CASE("ZMQImageCommTest_1Writer","[ZeroMQ]") { data_message.number = i; PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t)); serializer.SerializeImage(data_message); - pusher.SendImage(serializer.GetBuffer(), serializer.GetBufferSize(), i); + pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i); } pusher.EndDataCollection(end_message); @@ -159,7 +160,8 @@ TEST_CASE("ZMQImageCommTest_2Writers","[ZeroMQ]") { std::vector diff_size(npullers), diff_content(npullers), diff_split(npullers), nimages(npullers); std::thread sender_thread = std::thread([&] { - JFJochFrameSerializer serializer(16*1024*1024); + std::vector serialization_buffer(16*1024*1024); + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); StartMessage message { .data_file_count = 16 }; @@ -172,7 +174,7 @@ TEST_CASE("ZMQImageCommTest_2Writers","[ZeroMQ]") { data_message.number = i; PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t)); serializer.SerializeImage(data_message); - pusher.SendImage(serializer.GetBuffer(), serializer.GetBufferSize(), i); + pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i); } pusher.EndDataCollection(end_message); @@ -247,7 +249,8 @@ TEST_CASE("ZMQImageCommTest_4Writers","[ZeroMQ]") { std::vector diff_size(npullers), diff_content(npullers), diff_split(npullers), nimages(npullers); std::thread sender_thread = std::thread([&] { - JFJochFrameSerializer serializer(16*1024*1024); + std::vector serialization_buffer(16*1024*1024); + JFJochFrameSerializer serializer(serialization_buffer.data(), serialization_buffer.size()); StartMessage message { .data_file_count = 16 }; @@ -260,7 +263,7 @@ TEST_CASE("ZMQImageCommTest_4Writers","[ZeroMQ]") { data_message.number = i; PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t)); serializer.SerializeImage(data_message); - pusher.SendImage(serializer.GetBuffer(), serializer.GetBufferSize(), i); + pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i); } pusher.EndDataCollection(end_message);