Frame-accurate correlation across several capture streams. More...
Detailed Description
Frame-accurate correlation across several capture streams.
A multi-sensor rig (a 360 pair, a multi-channel SDI card) produces one frame per sensor per capture. The renderer must bind frames that belong to the SAME capture, or a stitch shows one eye a frame ahead of the other.
The default capture path cannot promise that. Each capture node owns a private ring and latches "whatever was published last", independently: if stream A published this tick and stream B did not, A binds a new frame and B silently re-uses the texture it bound last tick. Nothing reports it.
This closes both halves of that:
producer side – publish() takes the whole set at once. There is no state in which half a capture is visible, so "A published, B did not" stops being representable rather than being detected after the fact.
consumer side – take() pins one generation per render pass. Members are updated sequentially inside RenderList::render(), so without a pin a set published between two members' updates would split them across generations. The window is microseconds, which is exactly how a one-frame skew ships: rare, unreproducible, and only visible in the stitch.
Only COMPLETE sets are handed out. A capture where a sensor dropped its frame holds the previous complete set rather than compositing a mismatch, and counts it, so a rig that is quietly tearing shows up as a number.
Threading: publish() is called from one producer thread. take() is called from the render thread only, so the pin is plain data; only the published ring crosses threads.
Vendor-neutral: it serves any backend that can hand over N slots belonging to one capture.
Go to the source code of this file.
Classes | |
| struct | score::gfx::interop::CaptureFrameSet |
| One capture: the slot each member filled, and when the frame was exposed. More... | |
| struct | score::gfx::interop::CaptureRingEntry |
| class | score::gfx::interop::CaptureSyncGroup |
| struct | score::gfx::interop::CaptureSyncGroup::Latched |
Namespaces | |
| namespace | score |
| Base toolkit upon which the software is built. | |
| namespace | score::gfx |
| Graphics rendering pipeline for ossia score. | |