Skip to content

fix issue#6#7

Merged
DuinoDu merged 3 commits into
mainfrom
fix/extrinsics_access_error
Nov 6, 2025
Merged

fix issue#6#7
DuinoDu merged 3 commits into
mainfrom
fix/extrinsics_access_error

Conversation

@DuinoDu

@DuinoDu DuinoDu commented Nov 5, 2025

Copy link
Copy Markdown
Collaborator

Summary

Fix #6.

Details

The root cause was that the Python bindings exposed SpatialML::camera_extrinsics::extrinsics directly (see the old implementation around bindings/spatialmp4.cpp:175), and that field is a cv::Matx<double,4,4>. Pybind11 doesn’t know
how to convert cv::Matx (a fixed-size OpenCV matrix) into a Python object out of the box, so whenever CameraExtrinsics.extrinsics or CameraExtrinsics.as_cvmat() ran, pybind11 couldn’t turn the C++ return value into something Python
understands and raised TypeError: Unregistered type : cv::Matx<double, 4, 4>. Switching the binding to return Eigen matrices—which pybind11 does support—resolved the conversion error.

@DuinoDu DuinoDu merged commit 8f6091f into main Nov 6, 2025
17 checks passed
@DuinoDu DuinoDu deleted the fix/extrinsics_access_error branch December 25, 2025 05:36
DuinoDu added a commit that referenced this pull request Jun 7, 2026
Two FFmpeg patch changes that together let downstream tools recover the
mp4 writer's first_pts_us_writer_ anchor from any stream's metadata,
without consulting any sidecar file.

* read patch -- libavformat/mov.c::mov_parse_stsd_data:
  Replace the mett branch's blanket avio_skip(pb, size) with a proper
  walk of the child atoms. The original code read at most 20 bytes of
  mime via avio_get_str, which truncated the in-buffer copy but only
  advanced the cursor by 20 -- the rest of the mime string + the tbtm
  child box were treated as garbage. Now the parser consumes the full
  ContentEncoding and MimeFormat null-terminated strings (buffers grown
  to 256), then hands the remaining bytes to mov_read_default so any
  registered child parser (tbtm, the new tbgt, anything we add later)
  fires for mett tracks too. Net effect: every mett stream now surfaces
  the `timebase` (= track_base_unix_us) tag, where previously only RGB
  / depth carried it.

* enc patch -- libavformat/movenc.c:
  Add `mov_write_tbgt_tag`, a sibling of the existing tbtm writer that
  emits the writer's track_base_godot_ticks_us (== first_pts_us_writer_)
  as a 16-byte box (fourcc 'tbgt' + big-endian i64). Call it everywhere
  tbtm is currently written: the raw1 / FFV1 / HEVC video sample entry
  blocks, and inside mov_write_mett_tag. The read patch registers a
  matching mov_read_tbgt that surfaces the value as a
  `track_base_godot_ticks_us` stream tag.

Verified on a fresh Quest 3 capture (Stage 6 muxer + Stage 6 reader):
  #0 mett (left_controller):  tb=...242  tbgt=1870352
  #1 mett (right_controller): tb=...242  tbgt=1870352
  #2 mett (left_hand):        tb=...242  tbgt=1870352
  #3 mett (left_input):       tb=...242  tbgt=1870352
  #4 mett (right_input):      tb=...242  tbgt=1870352
  #5 mett (head):             tb=...242  tbgt=1870352
  #6 hev1:                    tb=...242  tbgt=1870352
  #7 FFV1:                    tb=...242  tbgt=1870352

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

pybind of CameraExtrinsics.extrinsics

2 participants