add typed Arrow payloads and a dora-image-view dataflow
dora-image-view takes std/media/v1/Image, and dora's compatibility graph has no edge from std/core/v1/UInt8 to it, so wiring the two failed `dora validate` whatever the node actually sent. Its flat-buffer fallback would not have decoded these frames either: it reads width/height metadata, and this node only published shape. image and depth now go out as the Image struct, camera_info and point_cloud as Float32 arrays and camera_state as a string, all built against the Arrow C data interface in src/arrow so the node still links no Arrow C++. Shape, dtype and encoding metadata are dropped where the payload describes itself; intrinsics, frame_id and both timestamps are unchanged. tests/run.sh covers the packing without a camera or the SDK, round-tripping each array through pyarrow and rebuilding it under the sanitizers. Breaking: image_bgr is renamed to image and every payload changes shape. dataflow_plot.yml is replaced by dataflow_view.yml, which wires the viewer from a tag and repeats its contract in input_types so validate checks both sides of the wiring.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// C entry points for tests/test_arrow.py.
|
||||
//
|
||||
// The Python side cannot call the C++ builders, so each one is wrapped here and
|
||||
// the payload is passed in from the test rather than fixed in this file.
|
||||
|
||||
#include "arrow/array.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
namespace {
|
||||
|
||||
void hand_over(void* array, void* schema, const arrow_c::Exported& exported) {
|
||||
// The caller owns the two structs, exactly as dora does: it reads them and
|
||||
// is then responsible for releasing what they point at.
|
||||
std::memcpy(array, &exported.array, sizeof(exported.array));
|
||||
std::memcpy(schema, &exported.schema, sizeof(exported.schema));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
void zed_export_image(void* array, void* schema, uint32_t width, uint32_t height,
|
||||
const char* encoding, const uint8_t* data, size_t size) {
|
||||
hand_over(array, schema, arrow_c::image(width, height, encoding, data, size));
|
||||
}
|
||||
|
||||
void zed_export_float32(void* array, void* schema, const float* values, size_t count) {
|
||||
hand_over(array, schema, arrow_c::float32(values, count));
|
||||
}
|
||||
|
||||
void zed_export_string(void* array, void* schema, const char* text, size_t size) {
|
||||
hand_over(array, schema, arrow_c::string(text, size));
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
Reference in New Issue
Block a user