Skip to content

Commit 673210d

Browse files
committed
Use LargeBinary in MCAP loader
1 parent 6da6e13 commit 673210d

File tree

3 files changed

+15
-37
lines changed

3 files changed

+15
-37
lines changed

crates/utils/re_mcap/src/layers/raw.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
use arrow::array::{ListBuilder, UInt8Builder};
1+
use arrow::array::LargeBinaryBuilder;
22
use re_chunk::{ChunkId, external::arrow::array::FixedSizeListBuilder};
33
use re_types::{
44
Component as _, ComponentDescriptor, components, reflection::ComponentDescriptorExt as _,
55
};
66

77
use crate::{
88
Error, LayerIdentifier, MessageLayer,
9-
parsers::{MessageParser, ParserContext, util::blob_list_builder},
9+
parsers::{MessageParser, ParserContext, util::fixed_size_list_builder},
1010
};
1111

1212
struct RawMcapMessageParser {
13-
data: FixedSizeListBuilder<ListBuilder<UInt8Builder>>,
13+
data: FixedSizeListBuilder<LargeBinaryBuilder>,
1414
}
1515

1616
impl RawMcapMessageParser {
1717
const ARCHETYPE_NAME: &str = "rerun.mcap.Message";
1818

1919
fn new(num_rows: usize) -> Self {
2020
Self {
21-
data: blob_list_builder(num_rows),
21+
data: fixed_size_list_builder(1, num_rows),
2222
}
2323
}
2424
}
@@ -30,8 +30,7 @@ impl MessageParser for RawMcapMessageParser {
3030
msg: &::mcap::Message<'_>,
3131
) -> anyhow::Result<()> {
3232
re_tracing::profile_function!();
33-
self.data.values().values().append_slice(&msg.data);
34-
self.data.values().append(true);
33+
self.data.values().append_value(&msg.data);
3534
self.data.append(true);
3635
Ok(())
3736
}

crates/utils/re_mcap/src/parsers/mod.rs

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,12 @@ pub use decode::{ChannelId, MessageParser, ParserContext};
77

88
/// Defines utility functions shared across parsers.
99
pub(crate) mod util {
10-
use arrow::{
11-
array::{FixedSizeListBuilder, ListBuilder, UInt8Builder},
12-
datatypes::{DataType, Field},
13-
};
14-
use re_types::{Loggable as _, components};
15-
use std::sync::Arc;
10+
use arrow::array::{ArrayBuilder, FixedSizeListBuilder};
1611

17-
pub(crate) fn fixed_size_list_builder<T: arrow::array::ArrayBuilder + Default>(
12+
pub(crate) fn fixed_size_list_builder<T: ArrayBuilder + Default>(
1813
value_length: i32,
1914
capacity: usize,
20-
) -> arrow::array::FixedSizeListBuilder<T> {
21-
arrow::array::FixedSizeListBuilder::with_capacity(
22-
Default::default(),
23-
value_length,
24-
capacity,
25-
)
26-
}
27-
28-
pub(crate) fn blob_list_builder(
29-
capacity: usize,
30-
) -> FixedSizeListBuilder<ListBuilder<UInt8Builder>> {
31-
let list_builder = ListBuilder::<UInt8Builder>::default()
32-
.with_field(Arc::new(Field::new_list_field(DataType::UInt8, false)));
33-
34-
FixedSizeListBuilder::with_capacity(list_builder, 1, capacity).with_field(Arc::new(
35-
Field::new_list_field(components::Blob::arrow_datatype(), false),
36-
))
15+
) -> FixedSizeListBuilder<T> {
16+
FixedSizeListBuilder::with_capacity(Default::default(), value_length, capacity)
3717
}
3818
}

crates/utils/re_mcap/src/parsers/ros2msg/sensor_msgs/point_cloud_2.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use std::io::Cursor;
33
use super::super::definitions::sensor_msgs::{self, PointField, PointFieldDatatype};
44
use arrow::{
55
array::{
6-
BooleanBuilder, FixedSizeListBuilder, ListBuilder, StringBuilder, StructBuilder,
7-
UInt8Builder, UInt32Builder,
6+
BooleanBuilder, FixedSizeListBuilder, LargeBinaryBuilder, ListBuilder, StringBuilder,
7+
StructBuilder, UInt8Builder, UInt32Builder,
88
},
99
datatypes::{DataType, Field, Fields},
1010
};
@@ -22,7 +22,7 @@ use crate::{
2222
parsers::{
2323
cdr,
2424
decode::{MessageParser, ParserContext},
25-
util::{blob_list_builder, fixed_size_list_builder},
25+
util::fixed_size_list_builder,
2626
},
2727
};
2828

@@ -35,7 +35,7 @@ pub struct PointCloud2MessageParser {
3535
is_bigendian: FixedSizeListBuilder<BooleanBuilder>,
3636
point_step: FixedSizeListBuilder<UInt32Builder>,
3737
row_step: FixedSizeListBuilder<UInt32Builder>,
38-
data: FixedSizeListBuilder<ListBuilder<UInt8Builder>>,
38+
data: FixedSizeListBuilder<LargeBinaryBuilder>,
3939
is_dense: FixedSizeListBuilder<BooleanBuilder>,
4040

4141
// We lazily create this, only if we can interpret the point cloud semantically.
@@ -75,7 +75,7 @@ impl PointCloud2MessageParser {
7575
is_bigendian: fixed_size_list_builder(1, num_rows),
7676
point_step: fixed_size_list_builder(1, num_rows),
7777
row_step: fixed_size_list_builder(1, num_rows),
78-
data: blob_list_builder(num_rows),
78+
data: fixed_size_list_builder(1, num_rows),
7979
is_dense: fixed_size_list_builder(1, num_rows),
8080

8181
points_3ds: None,
@@ -257,7 +257,7 @@ impl MessageParser for PointCloud2MessageParser {
257257
point_step.values().append_slice(&[point_cloud.point_step]);
258258
row_step.values().append_slice(&[point_cloud.row_step]);
259259

260-
data.values().values().append_slice(&point_cloud.data);
260+
data.values().append_value(&point_cloud.data);
261261
is_dense.values().append_slice(&[point_cloud.is_dense]);
262262

263263
height.append(true);
@@ -267,7 +267,6 @@ impl MessageParser for PointCloud2MessageParser {
267267
row_step.append(true);
268268
is_dense.append(true);
269269

270-
data.values().append(true);
271270
data.append(true);
272271

273272
Ok(())

0 commit comments

Comments
 (0)