Skip to content

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

Merged
facontidavide merged 1 commit into
mainfrom
alvvm/image-frame-id
Jun 9, 2026
Merged

feat(pj_base)!: carry frame_id through the canonical Image schema#117
facontidavide merged 1 commit into
mainfrom
alvvm/image-frame-id

Conversation

@Alvvalencia

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. Per the SDK versioning policy that is an ABI break → MAJOR, and since it is the first
break leaving pre-1.0, it bumps 0.6.0 → 1.0.0. abi/baseline.abi is unchanged (a header struct
field exports no ELF symbols). Consumers pin [>=1.0.0 <2.0.0].

Note for the maintainer: this declares the SDK 1.0.0 — leaving the pre-1.0 line is your call;
flagging it explicitly.

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>
@Alvvalencia Alvvalencia force-pushed the alvvm/image-frame-id branch from 4bb4d29 to bbbc0fe Compare June 9, 2026 06:56
@Alvvalencia Alvvalencia requested a review from facontidavide June 9, 2026 07:12
@facontidavide

Copy link
Copy Markdown
Contributor

@copilot remove the version number increment, I will do it in a separate PR

Copilot AI commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

@facontidavide I've opened a new pull request, #118, to work on those changes. Once the pull request is ready, I'll request review from you.

@Alvvalencia Alvvalencia marked this pull request as ready for review June 9, 2026 08:14
@facontidavide facontidavide merged commit a90a969 into main Jun 9, 2026
8 checks passed
@facontidavide facontidavide deleted the alvvm/image-frame-id branch June 9, 2026 08:27
pabloinigoblasco added a commit that referenced this pull request Jun 11, 2026
Brings:
- 9003e55 feat(dialog): WidgetData setListItemColors / listItemColors (#119)
- 0c3aa51 chore: bump version to 0.7.0
- 5ee9eee feat(pj_plugins): expose DataSourceHandle::libraryOwner() (#116)
- a90a969 feat(pj_base)!: carry frame_id through canonical Image schema (#117)
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