JFJochFrameSerializer: Using CBORImage for mask and calibration + writing calibration in HDF5 file

This commit is contained in:
2023-06-28 17:14:09 +02:00
parent e472047839
commit 0904e1f198
8 changed files with 142 additions and 57 deletions
+57 -11
View File
@@ -62,7 +62,6 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") {
.rad_int_bin_to_q = {0.1, 0.2, 0.3, 0.5},
.rad_int_solid_angle_corr = {10, 20, 30, 50}
};
message.pixel_mask["sc0"] = std::vector<uint32_t>(456*457, 15);
REQUIRE_NOTHROW(serializer.SerializeSequenceStart(message));
@@ -72,7 +71,6 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") {
StartMessage output_message;
REQUIRE_NOTHROW(output_message = deserializer.GetStartMessage());
REQUIRE(output_message.pixel_mask.contains("sc0"));
CHECK(output_message.data_file_count == message.data_file_count);
CHECK(output_message.detector_distance == Approx(message.detector_distance));
CHECK(output_message.beam_center_x == Approx(message.beam_center_x));
@@ -91,7 +89,6 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") {
CHECK(output_message.pixel_size_y == Approx(message.pixel_size_y));
CHECK(output_message.sensor_thickness == Approx(message.sensor_thickness));
CHECK(output_message.sensor_material == message.sensor_material);
CHECK(output_message.pixel_mask == message.pixel_mask);
CHECK(output_message.pixel_mask_enabled == message.pixel_mask_enabled);
CHECK(output_message.compression_algorithm == message.compression_algorithm);
CHECK(output_message.compression_block_size == message.compression_block_size);
@@ -127,6 +124,42 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") {
}
TEST_CASE("CBORSerialize_Start_PixelMask", "[CBOR]") {
std::vector<uint8_t> buffer(8*1024*1024);
JFJochFrameSerializer serializer(buffer.data(), buffer.size());
std::vector<uint32_t> mask(456*457, 15);
CBORImage image_mask {
.data = reinterpret_cast<uint8_t *>(mask.data()),
.size = 456 * 457 * sizeof(uint32_t),
.xpixel = 456,
.ypixel = 457,
.pixel_depth_bytes = 4,
.pixel_is_signed = false,
.pixel_is_float = false,
.algorithm = CompressionAlgorithm::NO_COMPRESSION,
.channel = "sc0"
};
StartMessage message {};
message.AddPixelMask(image_mask);
REQUIRE_NOTHROW(serializer.SerializeSequenceStart(message));
JFJochFrameDeserializer deserializer;
REQUIRE_NOTHROW(deserializer.Process(buffer.data(), serializer.GetBufferSize()));
REQUIRE(deserializer.GetType() == JFJochFrameDeserializer::Type::START);
StartMessage output_message;
REQUIRE_NOTHROW(output_message = deserializer.GetStartMessage());
REQUIRE(output_message.pixel_mask.size() == 1);
CHECK(!output_message.pixel_mask[0].pixel_is_float);
CHECK(output_message.pixel_mask[0].xpixel == 456);
CHECK(output_message.pixel_mask[0].ypixel == 457);
CHECK(output_message.pixel_mask[0].channel == "sc0");
CHECK(memcmp(output_message.pixel_mask[0].data, mask.data(), mask.size() * sizeof(float)) == 0);
}
TEST_CASE("CBORSerialize_Start_Calibration", "[CBOR]") {
std::vector<uint8_t> buffer(8*1024*1024);
@@ -152,7 +185,6 @@ TEST_CASE("CBORSerialize_Start_Calibration", "[CBOR]") {
.channel = "calib1"
};
CBORImage image2 {
.data = reinterpret_cast<uint8_t *>(calib2.data()),
.size = 16 * 16 * sizeof(float),
@@ -165,10 +197,10 @@ TEST_CASE("CBORSerialize_Start_Calibration", "[CBOR]") {
.channel = "calib2"
};
StartMessage message {
.calibration = {image2, image1}
};
StartMessage message {};
message.AddCalibration(image2);
message.AddCalibration(image1);
REQUIRE_NOTHROW(serializer.SerializeSequenceStart(message));
JFJochFrameDeserializer deserializer;
@@ -615,7 +647,21 @@ inline bool CmpString(const char *str1, const std::string& str2) {
TEST_CASE("CBORSerialize_Start_stream2", "[CBOR]") {
std::vector<uint8_t> buffer(8*1024*1024);
JFJochFrameSerializer serializer(buffer.data(), buffer.size());
JFJochFrameSerializer serializer(buffer.data(), buffer.size());
std::vector<uint32_t> mask(456*457, 15);
CBORImage image_mask {
.data = reinterpret_cast<uint8_t *>(mask.data()),
.size = 456 * 457 * sizeof(uint32_t),
.xpixel = 456,
.ypixel = 457,
.pixel_depth_bytes = 4,
.pixel_is_signed = false,
.pixel_is_float = false,
.algorithm = CompressionAlgorithm::NO_COMPRESSION,
.channel = "sc0"
};
StartMessage message {
.data_file_count = 3,
@@ -664,7 +710,8 @@ JFJochFrameSerializer serializer(buffer.data(), buffer.size());
.rad_int_bin_number = 35,
.summation = 567
};
message.pixel_mask["sc0"] = std::vector<uint32_t>(456*457, 15);
message.AddPixelMask(image_mask);
REQUIRE_NOTHROW(serializer.SerializeSequenceStart(message));
@@ -693,8 +740,7 @@ JFJochFrameSerializer serializer(buffer.data(), buffer.size());
CHECK(msg2->pixel_mask.ptr[0].pixel_mask.dim[0] == 457);
CHECK(msg2->pixel_mask.ptr[0].pixel_mask.dim[1] == 456);
CHECK(msg2->pixel_mask.ptr[0].pixel_mask.array.data.len == 456 * 457 * sizeof(uint32_t));
CHECK(memcmp(msg2->pixel_mask.ptr[0].pixel_mask.array.data.ptr, message.pixel_mask["sc0"].data(),
456 * 457 * sizeof(uint32_t)) == 0);
CHECK(memcmp(msg2->pixel_mask.ptr[0].pixel_mask.array.data.ptr, mask.data(), 456 * 457 * sizeof(uint32_t)) == 0);
CHECK(msg2->pixel_mask.ptr[0].pixel_mask.array.tag == TagUnsignedInt32BitLE);
stream2_free_msg(msg);
}