ZMQPreviewPublisher: Stream CBOR data

This commit is contained in:
2023-11-08 19:19:32 +01:00
parent cc34a9801e
commit 56476e3e5f
7 changed files with 157 additions and 279 deletions
+21 -47
View File
@@ -648,36 +648,24 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview", "[JFJochReceiver]") {
std::string s;
JFJochFrameDeserializer deserializer;
// Pixel mask
REQUIRE(rcv_preview_socket.Receive(s, false) > 0);
JFJochProtoBuf::PreviewFrame frame;
REQUIRE_NOTHROW(frame = jsonToGrpc<JFJochProtoBuf::PreviewFrame>(s));
// Check header
REQUIRE(frame.image_number() == -1);
REQUIRE(frame.width() == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(frame.height() == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
REQUIRE(frame.pixel_depth() == 4);
deserializer.Process((uint8_t *) s.data(), s.size());
REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::START);
auto start_msg = deserializer.GetStartMessage();
REQUIRE(start_msg.image_size_x == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(start_msg.image_size_y == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
// First frame
REQUIRE(rcv_preview_socket.Receive(s, false) > 0);
REQUIRE_NOTHROW(frame = jsonToGrpc<JFJochProtoBuf::PreviewFrame>(s));
deserializer.Process((uint8_t *) s.data(), s.size());
REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE);
auto image_msg = deserializer.GetDataMessage();
// Check header
REQUIRE(frame.image_number() == 0);
REQUIRE(frame.beam_x_pxl() == Approx(setup.beam_x_pxl()));
REQUIRE(frame.beam_y_pxl() == Approx(setup.beam_y_pxl()));
REQUIRE(frame.width() == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(frame.height() == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
REQUIRE(frame.pixel_depth() == 2);
// Check compressed image
size_t npixel = state_machine.NotThreadSafe_Experiment().GetPixelsNum();
std::vector<char> rcv_image(frame.data().size());
rcv_image = {frame.data().begin(), frame.data().end()};
REQUIRE(rcv_image.size() == state_machine.NotThreadSafe_Experiment().GetPixelsNum() * sizeof(int16_t));
REQUIRE(image_msg.number == 0);
// Check no more frames waiting
REQUIRE(rcv_preview_socket.Receive(s, false) == -1);
@@ -694,7 +682,6 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview", "[JFJochReceiver]") {
writer_server->Shutdown();
}
TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview_no_writer", "[JFJochReceiver]") {
Logger logger("JFJochIntegrationTest_ZMQ_with_preview_no_writer");
@@ -767,37 +754,24 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview_no_writer", "[JFJochReceiver]"
logger.Info("Stopped measurement");
std::string s;
JFJochFrameDeserializer deserializer;
// Pixel mask
REQUIRE(rcv_preview_socket.Receive(s, false) > 0);
JFJochProtoBuf::PreviewFrame frame;
REQUIRE_NOTHROW(frame = jsonToGrpc<JFJochProtoBuf::PreviewFrame>(s));
// Check header
REQUIRE(frame.image_number() == -1);
REQUIRE(frame.width() == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(frame.height() == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
REQUIRE(frame.pixel_depth() == 4);
deserializer.Process((uint8_t *) s.data(), s.size());
REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::START);
auto start_msg = deserializer.GetStartMessage();
REQUIRE(start_msg.image_size_x == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(start_msg.image_size_y == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
// First frame
REQUIRE(rcv_preview_socket.Receive(s, false) > 0);
REQUIRE_NOTHROW(frame = jsonToGrpc<JFJochProtoBuf::PreviewFrame>(s));
deserializer.Process((uint8_t *) s.data(), s.size());
REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::IMAGE);
auto image_msg = deserializer.GetDataMessage();
// Check header
REQUIRE(frame.image_number() == 0);
REQUIRE(frame.beam_x_pxl() == Approx(setup.beam_x_pxl()));
REQUIRE(frame.beam_y_pxl() == Approx(setup.beam_y_pxl()));
REQUIRE(frame.width() == state_machine.NotThreadSafe_Experiment().GetXPixelsNum());
REQUIRE(frame.height() == state_machine.NotThreadSafe_Experiment().GetYPixelsNum());
REQUIRE(frame.pixel_depth() == 2);
// Check compressed image
size_t npixel = state_machine.NotThreadSafe_Experiment().GetPixelsNum();
std::vector<char> rcv_image(frame.data().size());
rcv_image = {frame.data().begin(), frame.data().end()};
REQUIRE(rcv_image.size() == state_machine.NotThreadSafe_Experiment().GetPixelsNum() * sizeof(int16_t));
REQUIRE(image_msg.number == 0);
// Check no more frames waiting
REQUIRE(rcv_preview_socket.Receive(s, false) == -1);