Skip to content

feat(pj_base)!: carry frame_id through the canonical Image schema#118

Closed
Copilot wants to merge 4 commits into
mainfrom
copilot/feat-pj-base-carry-frame-id
Closed

feat(pj_base)!: carry frame_id through the canonical Image schema#118
Copilot wants to merge 4 commits into
mainfrom
copilot/feat-pj-base-carry-frame-id

Conversation

Copilot AI commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Image was the only canonical builtin not carrying frame_id: a producer could not tell a
consumer which CameraInfo (calibration / native resolution / rectification) an image belongs to,
nor place it in 3D via the TF tree. Every sibling codec already serializes frame_id; Image
silently dropped it on any serialized path.

Change

  • Image.proto: append field 10 (string frame_id).
  • image_codec: serialize / deserialize frame_id.
  • image_codec_test: populated round-trip + empty default.

Compatibility / version

The wire change alone is forward/backward compatible (an old reader skips the unknown field). The
break is the struct: sdk::Image gains a member, and Image crosses the plugin↔host boundary
by value inside BuiltinObject (std::any), so an old-built plugin and a new host disagree on
layout. abi/baseline.abi is unchanged (a header struct field exports no ELF symbols).

This PR does not change SDK package/version numbers; versioning is handled in a separate PR.

Alvvalencia and others added 2 commits June 9, 2026 08:56
Image was the only canonical builtin lacking frame_id: a producer could not
tell a consumer which CameraInfo (calibration / native resolution /
rectification) an image belongs to. Every sibling codec already serializes
frame_id; Image silently dropped it on any serialized path.

- Image.proto: append field 10 (string frame_id).
- image_codec: serialize/deserialize frame_id.
- image_codec_test: populated round-trip + empty default.

The wire change alone is forward/backward compatible (an old reader skips
the unknown field). The break is the struct: sdk::Image gains a member, so
its layout changes, and Image crosses the plugin/host boundary by value
inside BuiltinObject (std::any) -- an old-built plugin and a new host then
disagree on its layout. That is an ABI break => MAJOR per the SDK
versioning policy; the first break since pre-1.0, so bump 0.6.0 -> 1.0.0.
baseline.abi is unchanged: a header struct field exports no ELF symbols.

BREAKING CHANGE: plotjuggler_sdk 1.0.0; consumers pin [>=1.0.0 <2.0.0].

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI changed the title [WIP] feat(pj_base)!: carry frame_id through the canonical Image schema feat(pj_base)!: carry frame_id through the canonical Image schema Jun 9, 2026
Copilot AI requested a review from facontidavide June 9, 2026 07:41
@Alvvalencia Alvvalencia marked this pull request as ready for review June 9, 2026 08:14
Base automatically changed from alvvm/image-frame-id to main June 9, 2026 08:27
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.

3 participants