ReadonlykindReadonlykeepReadonlyturntablePrivate ReadonlyscenePrivate ReadonlyanimationPrivate ReadonlyhooksPrivatestartTime-based turntable rotation for the real-time MediaRecorder path. Quaternion-based orbit rotation (same math as auto-rotate), driven by wall-clock time so the rotation completes after the correct duration regardless of GPU FPS.
Note: OfflineCaptureStrategy uses its own frame-index-based stepping and does NOT use this method.
Tear down the whole capture SOURCE: stop every track on the
captureStream, drop the reference, and detach the live overlay
compositor if this recording had one.
mediaRecorder.stop() does NOT stop the underlying tracks, so
without this call canvas-capture media tracks accumulate across
repeated recordings.
The overlay compositor is unwound HERE rather than at each call site
precisely because its lifetime is the captureStream's: every path
that ends a recording (onstop's unwind, onstop's disposed branch, the
setup catch, dispose) already routes through this one method, so a
per-frame frame-end listener cannot outlive the recording that
installed it.
Non-private so Panel can route panel.cleanupCaptureStream() through.
Synchronous stop request. The async onstop handler does the unwind.