Skip to content

feat(parser_protobuf,parser_ros): classify + decode canonical video objects#125

Merged
facontidavide merged 4 commits into
mainfrom
feat/videoframe-parsers
Jun 2, 2026
Merged

feat(parser_protobuf,parser_ros): classify + decode canonical video objects#125
facontidavide merged 4 commits into
mainfrom
feat/videoframe-parsers

Conversation

@facontidavide

Copy link
Copy Markdown
Contributor

What

Recognize compressed-video schemas as kVideoFrame ObjectTopics so PlotJuggler 4 renders them as scene2D.

  • parser_protobuf: register a kVideoFrame handler for PJ.VideoFrame and foxglove.CompressedVideo (now wire-identical). parse_object decodes zero-copy via deserializeVideoFrameView (the data span aliases the payload, anchor forwarded). The slim scalar route (frame_id/format/data_size) uses the owning decode and honours use_embedded_timestamp_.
  • parser_ros: foxglove_msgs/CompressedVideo CDR handler → sdk::VideoFrame (zero-copy uint8[] via deserializeByteSequence + payload anchor).
  • Tests for both protobuf schema names, the ROS CDR path, and anchor propagation.

Depends on

PlotJuggler/plotjuggler_sdk#111 (Foxglove-aligned VideoFrame schema + deserializeVideoFrameView, data=3, format=4). CI will go green only after a plotjuggler_core release carrying that change (the Conan range resolves the published core). Merge order: core #111 → release → this PR.

Test

./build.sh parser_protobuf && ./build.sh parser_ros; both test binaries green (built against a locally conan created core #111).

🤖 Generated with Claude Code

facontidavide and others added 4 commits June 1, 2026 23:50
…bjects

Recognize compressed-video schemas as kVideoFrame ObjectTopics so PlotJuggler 4
renders them as scene2D:

- parser_protobuf: register a kVideoFrame handler for "PJ.VideoFrame" and
  "foxglove.CompressedVideo" (now wire-identical). parse_object decodes zero-copy
  via deserializeVideoFrameView (the data span aliases the payload, anchor
  forwarded); the slim scalar route (frame_id/format/data_size) uses the owning
  decode and honours use_embedded_timestamp_.
- parser_ros: foxglove_msgs/CompressedVideo CDR handler -> sdk::VideoFrame
  (zero-copy uint8[] via deserializeByteSequence + payload anchor).
- Tests for both protobuf schema names, the ROS CDR path, and anchor propagation.

Requires a plotjuggler_core release carrying the Foxglove-aligned VideoFrame
schema + deserializeVideoFrameView (data=3, format=4).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… any_casts

pj_emit_plugin_manifest sets CXX_VISIBILITY_PRESET=hidden on every plugin .so.
On macOS that hides the concrete builtin structs' RTTI inside the dylib, so
libc++ assigns sdk::VideoFrame a distinct type_info from the host/test
executable's copy and std::any_cast<VideoFrame>(&record.object) returns null --
even though parseObject() returned the correct object. The protobuf VideoFrame
object-route tests therefore failed only on macOS (Linux/libstdc++ compares
type_info by name, so it is immune).

parser_ros already carries this exact APPLE-only default-visibility override for
the same reason; mirror it on parser_protobuf_plugin. The if(APPLE) guard keeps
the hidden-visibility ELF isolation defaults on Linux untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread parser_protobuf/protobuf_parser.cpp
@facontidavide facontidavide merged commit 18134f9 into main Jun 2, 2026
28 checks passed
@facontidavide facontidavide deleted the feat/videoframe-parsers branch June 2, 2026 17:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants