diff --git a/sdk/src/vtx_reader/src/vtx/reader/formatters/flatbuffer_reader_policy.cpp b/sdk/src/vtx_reader/src/vtx/reader/formatters/flatbuffer_reader_policy.cpp index c0879d3..d1b6c4f 100644 --- a/sdk/src/vtx_reader/src/vtx/reader/formatters/flatbuffer_reader_policy.cpp +++ b/sdk/src/vtx_reader/src/vtx/reader/formatters/flatbuffer_reader_policy.cpp @@ -53,10 +53,16 @@ void VTX::FlatBuffersReaderPolicy::ProcessChunkData(int chunk_index, const std:: for (size_t i = 0; i < num_frames; ++i) { if (st.stop_requested()) return; - VTX::Serialization::FromFlat(chunk->frames()->Get(i), out_native_frames[i]); + const auto* frame_fb = chunk->frames()->Get(i); + VTX::Serialization::FromFlat(frame_fb, out_native_frames[i]); - //pack for differ - auto* data_obj = chunk->frames()->Get(i)->data()->Get(0); + //pack bucket 0 for the differ; a frame with no buckets contributes an empty span + const auto* frame_buckets = frame_fb->data(); + if (!frame_buckets || frame_buckets->size() == 0) { + frame_sizes.push_back(0); + continue; + } + auto* data_obj = frame_buckets->Get(0); std::unique_ptr dataT(data_obj->UnPack()); fbb.Clear(); diff --git a/sdk/src/vtx_reader/src/vtx/reader/formatters/protobuff_reader_policy.cpp b/sdk/src/vtx_reader/src/vtx/reader/formatters/protobuff_reader_policy.cpp index 2af17ee..e575ce5 100644 --- a/sdk/src/vtx_reader/src/vtx/reader/formatters/protobuff_reader_policy.cpp +++ b/sdk/src/vtx_reader/src/vtx/reader/formatters/protobuff_reader_policy.cpp @@ -42,7 +42,9 @@ void VTX::ProtobufReaderPolicy::ProcessChunkData(int chunk_index, const std::str //precalculate data size size_t total_raw_size = 0; for (int i = 0; i < num_frames; ++i) { - total_raw_size += proto.frames(i).data(0).ByteSizeLong(); + if (proto.frames(i).data_size() > 0) { + total_raw_size += proto.frames(i).data(0).ByteSizeLong(); + } } out_decompressed_blob.reserve(total_raw_size); @@ -55,8 +57,11 @@ void VTX::ProtobufReaderPolicy::ProcessChunkData(int chunk_index, const std::str return; Serialization::FromProto(proto.frames(i), out_native_frames[i]); - // Eextract root for the differ - std::string rawBytes = proto.frames(i).data(0).SerializeAsString(); + // Extract bucket 0 for the differ; a frame with no buckets contributes an empty span + std::string rawBytes; + if (proto.frames(i).data_size() > 0) { + rawBytes = proto.frames(i).data(0).SerializeAsString(); + } out_decompressed_blob.insert(out_decompressed_blob.end(), rawBytes.begin(), rawBytes.end()); frame_sizes.push_back(rawBytes.size()); }