JFJochFrameSerializer: add functions to append image to buffer

This commit is contained in:
2023-05-01 21:09:03 +02:00
parent af2ed525a0
commit dce186f9f9
3 changed files with 80 additions and 2 deletions

View File

@@ -82,8 +82,8 @@ inline void CBOR_ENC_MULTIDIM_TYPED_ARRAY(CborEncoder &encoder, const char* key,
const void *image, size_t image_size,
size_t xpixel, size_t ypixel, CompressionAlgorithm algorithm,
size_t elem_size, bool elem_sign) {
if ((algorithm == CompressionAlgorithm::NO_COMPRESSION) && (xpixel * ypixel != image_size / elem_size))
throw JFJochException(JFJochExceptionCategory::CBORError, "Mismatch in array size");
//if ((algorithm == CompressionAlgorithm::NO_COMPRESSION) && (xpixel * ypixel != image_size / elem_size))
// throw JFJochException(JFJochExceptionCategory::CBORError, "Mismatch in array size");
CborEncoder arrayEncoder, arrayEncoder_2;
cborErr(cbor_encode_text_stringz(&encoder, key));
@@ -296,10 +296,35 @@ const uint8_t *JFJochFrameSerializer::GetBuffer() const {
return buffer.data();
}
uint8_t *JFJochFrameSerializer::GetImageAppendLocation() {
return buffer.data() + curr_size + sizeof(size_t);
}
size_t JFJochFrameSerializer::GetBufferSize() const {
return curr_size;
}
size_t JFJochFrameSerializer::GetRemainingBuffer() const {
return max_buffer_size - curr_size;
}
void JFJochFrameSerializer::AppendImage(size_t image_size) {
if (curr_size + image_size + sizeof(size_t) >= max_buffer_size)
throw JFJochException(JFJochExceptionCategory::CBORError, "No space to extend the image");
curr_size--;
buffer[curr_size] = 0x40 | 27;
curr_size++;
#ifdef LITTLE_ENDIAN
size_t image_size_be = __builtin_bswap64(image_size);
#else
size_t image_size_be = image_size;
#endif
memcpy(buffer.data() + curr_size, &image_size_be, sizeof(size_t));
curr_size += sizeof(size_t);
curr_size += image_size;
}
void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message) {
CborEncoder encoder, mapEncoder;
@@ -397,3 +422,4 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) {
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data());
}