You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(pj_base): align VideoFrame proto to Foxglove + zero-copy view decode (#111)
* refactor(data_source_protocol)!: consolidate the push API on a single push_message slot
Rename the runtime-host vtable tail slot push_message_v2 -> push_message and
remove the now-redundant eager push_raw_message slot, leaving one definitive
push entry point. The C++ SDK wrapper pushMessage is unchanged, so plugin
sources that go through it are unaffected; only code that wires the vtable slot
by name needs the new name. Dropping a slot reduces the vtable, so this is an
ABI-breaking change and the layout sentinel asserts are updated accordingly.
Contents:
- data_source_protocol.h: rename push_message_v2 -> push_message; drop the push_raw_message slot
- sdk/data_source_host_views.hpp: align the guard/call/strings with push_message; drop the raw-message path
- sdk/data_source_patterns.hpp: update the slot reference
- pj_base/CMakeLists.txt + rename push_message_v2_test.cpp -> push_message_test.cpp
- abi_layout_sentinels_test.cpp: update the tail-slot asserts for the reduced vtable
- docs (USER_GUIDE, ARCHITECTURE, data-source-guide, message-parser-guide), mock_data_source, and the affected library/file-source tests
* feat(pj_base): align VideoFrame proto to Foxglove + add zero-copy view decode
Swap PJ.VideoFrame field numbers to match foxglove.CompressedVideo
(timestamp=1, frame_id=2, data=3, format=4) so a single decoder serves both
the canonical and Foxglove video schemas. Add deserializeVideoFrameView(),
which returns a frame whose `data` aliases the input buffer (no copy of the
H.264/H.265 bitstream) and carries the caller-supplied anchor; the owning
deserializeVideoFrame() is unchanged.
BREAKING (wire format): canonical PJ.VideoFrame payloads written before this
change (format=3, data=4) are no longer read correctly and must be regenerated.
The C++ sdk::VideoFrame struct layout is unchanged, so abidiff stays clean. Per
the versioning policy a canonical-schema wire-format change is a MAJOR; the
maintainer should cut the corresponding release on merge.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Pablo Iñigo Blasco <pablo.inigo@ibrobotics.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: pj_base/proto/pj/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,7 +40,7 @@ rationale.
40
40
-`OccupancyGridUpdate`
41
41
-**`Log.proto`** — a single textual log message (severity level + text + originating name) for a log/console panel; mirrors the core of Foxglove's `Log` (file/line omitted).
42
42
-`Log`
43
-
-**`VideoFrame.proto`** — one frame of an inter-frame-coded video stream (`h264`, `h265`, `vp9`, `av1`) when per-frame `Image` messages would be wasteful.
43
+
-**`VideoFrame.proto`** — one frame of an inter-frame-coded video stream (`h264`, `h265`, `vp9`, `av1`) when per-frame `Image` messages would be wasteful. Field layout is wire-identical to `foxglove.CompressedVideo` (timestamp=1, frame_id=2, data=3, format=4), so one decoder parses both.
44
44
-`VideoFrame`
45
45
-**`AssetVideo.proto`** — reference to a file-backed video plus typed playback metadata (path, MIME type, dimensions, frame rate) so consumers can size playback windows without opening the file.
0 commit comments