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

View File

@@ -126,30 +126,6 @@ inline void CBOR_ENC_2D_TYPED_ARRAY(CborEncoder &encoder, const CBORImage& image
cborErr(cbor_encoder_close_container(&encoder, &arrayEncoder));
}
inline void CBOR_ENC_PIXEL_MASK(CborEncoder &encoder, const char* key,
const std::map<std::string, std::vector<uint32_t>> &pixel_mask,
size_t xpixel, size_t ypixel) {
CborEncoder mapEncoder;
cborErr(cbor_encode_text_stringz(&encoder, key));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, pixel_mask.size()));
for (auto &[pixel_mask_key, pixel_mask_array]: pixel_mask) {
CBORImage image{
.data = reinterpret_cast<const uint8_t *>(pixel_mask_array.data()),
.size = pixel_mask_array.size() * sizeof(uint32_t),
.xpixel = xpixel,
.ypixel = ypixel,
.pixel_depth_bytes = sizeof(uint32_t),
.pixel_is_signed = false,
.pixel_is_float = false,
.algorithm = CompressionAlgorithm::NO_COMPRESSION,
.channel = pixel_mask_key
};
CBOR_ENC_2D_TYPED_ARRAY(mapEncoder, image);
}
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
}
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::vector<float>& v) {
CborEncoder arrayEncoder;
@@ -392,7 +368,7 @@ void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message)
CBOR_ENC_GONIOMETER_MAP(mapEncoder, "goniometer", message.goniometer);
CBOR_ENC_USER_DATA(mapEncoder, message);
CBOR_ENC_PIXEL_MASK(mapEncoder, "pixel_mask", message.pixel_mask, message.image_size_x, message.image_size_y);
CBOR_ENC(mapEncoder, "pixel_mask", message.pixel_mask);
CBOR_ENC_CHANNELS(mapEncoder, "channels", message.channels);
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));