Repository navigation
chore(moq): pin moq with the encoder-free texture readback - #69
Conversation
Quest-Claim: d396efc2d6ee81f2
Bump the moq submodule to moq-dev/moq@d01819803, which includes moq-video's encoder-free texture readback (moq-dev/moq#8056). moq-tokio dropped its aws-lc-rs feature when native cryptography moved to rind (moq-dev/moq#7873), so the studio asks only for `net`. Finishes quest/m0/pin-readback.md, unblocking the Linux virtual camera. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pinned moq replaces publications with one `origin::Route` handle, announcements with a present/absent listing, and `moq_mux::follow::Instances` with `origin::Consumer::follow`; async wrappers are opt-in per crate. Viewer feedback now follows each viewer's path, so a viewer that restarts under a new instance is read from it afresh, as the old Restart event did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A closed origin answers every later follow at once, so retrying spun. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 20 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head b4237a2 against base c929c40.
No actionable findings in the studio migration. Retaining Route handles preserves announcement ownership under the pinned API; hidden construction still lets tracks/catalogs be prepared before announcing. The program now reads the route's minted instance consistently. Prefix request handling, direct Following use, and first-available expectations match the pinned moq-net migration contract.
The feedback reader follows each viewer across instance changes, resets report history when a new broadcast arrives, and terminates on a closed origin rather than retrying an immediately-ready error. The restart and closed-origin tests cover those important migration paths. The pinned moq-video source includes the encoder-free Readback API, while this change correctly leaves virtual-camera adoption to its separate work.
Direction: the focused pin-and-consumer migration is consistent with the upstream ownership model; no code changes requested.
Verification limits: GitHub-only static review of the studio diff, repository guidance, pinned migration documentation, and readback API. I did not exhaustively audit all 232 upstream commits, execute quest context, build, run tests, verify reported CI, or measure frame time/GPU copies/encoder load. This is not a claim of runtime or platform validation.
(Written by review (OpenAI))
Adapts the virtual camera to main: it reads the main canvas back through moq-video's render::readback (pinned by #69) instead of a copy here, and reopens when the canvas changes size or frame rate. The Devices panel leaves out the camera while it is on. quest/m0/vcam/linux.md keeps what remains: a camera per published scene. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Bumps the
moqsubmodule from moq-dev/moq@ffcb7cd97 to moq-dev/moq@d01819803, which includesmoq_video::render::readback, the encoder-free texture readback from moq-dev/moq#8056. Finishesquest/m0/pin-readback.mdand removes its links, which unblocks moq-dev/studio#9, the Linux virtual camera; that PR adopts the readback. This PR doesn't switch the camera to it.Changes
The pin covers 232 moq commits. These breaking changes needed fixes in the studio:
aws-lc-rsfeature (moq-dev/moq#7873): native crypto now uses rind, somoq-studioenables onlynet.origin::RoutereplacesPublication(moq-dev/moq#7806). Code that calledcreate_broadcastand thenannounce(Route)now callsroute(path, RouteOptions::hidden())and thenannounce().close()becomesbroadcast().close(), andunannounce()becomeswithdraw().publication.instance(), which the route mints at creation.with_instance(Instance::random(), 0)was the default, so they now announce with the default instance.origin.requests(PROGRAM)becomesroute_prefix(PROGRAM, ..)withrequested().Following::available()now returns anOption, andmoq_mux::follow::Instances::newis gone.moq-scene) and per-source recording now callorigin.follow(path, None)directly.SomereplacesEvent::StartandNonereplacesEvent::End.health.rs) used to restart a viewer's reader onRestart. Each reader now follows its viewer's path, so a viewer that restarts under a new instance is read again from scratch. A refusal is recorded, and the reader waits for the route to change instead of stopping. A closed origin ends the reader, since a closed follow returns at once on every call. The newa_restarted_viewer_is_read_afreshanda_reader_stops_with_its_origintests cover both cases.moq-studioenablesasynconmoq-jsonandmoq-room, the crates it awaits.moq_json::snapshot::Consumer::newnow takes the track and subscribes to it itself.origin::Consumer::routes()stream, which moq's migration guide names for that use. The join page'srenew.test.tsmoves toorigin.route(path, { hidden: true }).Public API and wire impact
moq-scene's exports are unchanged, and the studio's flags, scene file, and outputs are unchanged.Choices made without asking
routes()stream in production code. The listing then decides only whether a viewer is present, as moq's migration guide recommends.available()calls, whose first result is neverNone, call.expect("the first change is an instance"), as moq's migration guide does.Validation
just ci(thejust checklints, including every feature in clippy, plusjust test): passed on b4e69b9. 265 Rust tests passed, and the 5 join-page tests passed.cargo check --locked -p moq-scene, with and without--all-targets: passed, so the crate builds on its own without the workspace's feature unification.quest check --base origin/main: passed.Review
Codex (
quest review), gpt-6.1-sol, medium effort. Round 2 reviewed headb4e69b9d9dc4d970da678f419243ba6ae1b692ccand found nothing. The current headb4237a2adds only a conflict-free merge ofmainthat touches quest files.deae79c(medium),rs/moq-studio/src/health.rs: once the origin closed, the feedback reader spun onFollowing::available()returningError::Closed. Fixed in b4e69b9:Closednow ends the reader.a_reader_stops_with_its_originreproduced the bug as a 60s nextest TIMEOUT before the fix and passes after it.(Written by Claude Opus 5.5)