Loading...
Searching...
No Matches
CaptureSyncGroup.hpp File Reference

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.