Files
cvmmap-streamer/docs/mcap_legacy_single_camera_layout.md
crosstyan d0f3dc5cf1 docs(mcap): split legacy single-camera layout reference
Move the legacy /camera/* contract into its own reference page so the main MCAP layout doc can stay focused on current bundled and copy-layout behavior.

Document the compatibility model explicitly: legacy single-camera is operationally equivalent to one-camera copy when the effective camera label is treated as the literal `camera`.

Update the mcap_rgbd_example helper and recipe docs to accept legacy /camera/* inputs under that compatibility rule instead of rejecting them.
2026-03-24 18:56:52 +08:00

2.6 KiB

Legacy Single-Camera MCAP Layout

This page is the reference for the older /camera/* MCAP wire shape.

It is still used by some generic sink/tester paths in the repository, but it is no longer the default shape written by zed_svo_to_mcap for a single .svo or .svo2 input.

Compatibility With Copy Layout

In practice, this layout is very close to the one-camera copy shape:

  • legacy single-camera uses /camera/video, /camera/depth, and related /camera/* topics
  • one-camera copy uses /{label}/video, /{label}/depth, and related /{label}/* topics

So the compatibility mental model is:

  • treat the camera label as the literal camera
  • replace /{label}/... with /camera/...
  • there is still no /bundle
  • timestamps remain per-camera sample timestamps

That is why legacy single-camera is conceptually compatible with copy, even though the topic paths are not namespaced the same way.

Topics

Topic Schema / Encoding Notes
/camera/video foxglove.CompressedVideo H.264 or H.265 Annex B access units
/camera/depth cvmmap_streamer.DepthMap RVL-compressed depth payload
/camera/calibration foxglove.CameraCalibration Video intrinsics
/camera/depth_calibration foxglove.CameraCalibration Written only when depth resolution differs from video
/camera/pose foxglove.PoseInFrame Optional; only when pose export is enabled and tracking is valid
/camera/body raw cvmmap.body_tracking.v1 Optional raw body-tracking packets; see mcap_body_tracking.md

Timestamp Semantics

Legacy single-camera export preserves the original per-frame source timestamp on video, depth, and pose messages.

Like copy, there is no separate bundle time:

  • /camera/video, /camera/depth, and /camera/pose use the original camera sample timestamp
  • calibration and depth-calibration messages use the timestamp of the first emitted sample

Corruption Behavior

Like copy, this layout has no manifest or placeholder contract:

  • unreadable tail frames are treated as end-of-stream
  • mid-stream corruption is skipped until a readable frame is found
  • the topic stream simply resumes at the recovered readable frame

Validation Expectations

The current validation contract is:

  • /camera/video must exist and contain at least one message
  • /camera/depth must exist and contain at least one message
  • /camera/calibration must exist exactly once
  • /camera/video and /camera/depth message counts must match
  • /camera/depth_calibration may appear zero or one time
  • /camera/pose is optional, but it may not outnumber /camera/video