From c15f7d52aa4f360eba2344449baa418b7608ac7c Mon Sep 17 00:00:00 2001 From: James Ward Date: Wed, 7 Dec 2022 15:38:01 +0000 Subject: Schema changes for CLAMP, PAD float attributes * Float attributes now serialized as uint8 vectors, but treated as floats at input/output to serialization Signed-off-by: James Ward Change-Id: I417b0fabe0ef11fea263fe937b57d49bbfdb00da --- include/attribute.h | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'include/attribute.h') diff --git a/include/attribute.h b/include/attribute.h index 1178ee4..5371130 100644 --- a/include/attribute.h +++ b/include/attribute.h @@ -40,11 +40,39 @@ public: {} }; +inline int convertFlatbuffersU8toF32(const flatbuffers::Vector& in, uint32_t out_size, std::vector& out) +{ + out.clear(); + if (in.size() < out_size * sizeof(float)) + { + printf("convertFlatbuffersU8toF32(): uint8 Flatbuffers buffer size %u must be >= target size %ld\n", in.size(), + out_size * sizeof(float)); + return 1; + } + for (uint32_t i = 0; i < out_size; i++) + { + uint32_t byte0 = in[i * sizeof(float)]; + uint32_t byte1 = in[i * sizeof(float) + 1]; + uint32_t byte2 = in[i * sizeof(float) + 2]; + uint32_t byte3 = in[i * sizeof(float) + 3]; + uint32_t val_u32 = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24); + float* val_fp32 = reinterpret_cast(&val_u32); + out.push_back(*val_fp32); + } + return 0; +} + #define DEF_ARGS_VER0_S_STR(V) _##V = p->V()->str(); #define DEF_ARGS_VER0_S_DEFAULT(V) _##V = p->V(); +#define DEF_ARGS_VER0_S_float_as_bytes(V) \ + { \ + std::vector attr_vec; \ + assert(!convertFlatbuffersU8toF32(*(p->V()), 1, attr_vec)); \ + _##V = attr_vec[0]; \ + } #define DEF_ARGS_VER0_S_int32_t(V) DEF_ARGS_VER0_S_DEFAULT(V) -#define DEF_ARGS_VER0_S_float(V) DEF_ARGS_VER0_S_DEFAULT(V) +#define DEF_ARGS_VER0_S_float(V) DEF_ARGS_VER0_S_float_as_bytes(V) #define DEF_ARGS_VER0_S_bool(V) DEF_ARGS_VER0_S_DEFAULT(V) #define DEF_ARGS_VER0_S_ResizeMode(V) DEF_ARGS_VER0_S_DEFAULT(V) #define DEF_ARGS_VER0_S_DType(V) DEF_ARGS_VER0_S_DEFAULT(V) -- cgit v1.2.1