A/V Sync Receiver

A/V Sync Receiver operator properties for Script Engine. Measures how far apart audio and video are, in frames, on a layer fed by an A/V Sync Sender somewhere upstream. Put it on the layer whose input carries the test signal - after a round trip through a target and back in, or straight off the sender for a local baseline - and read MeasuredOffsetFrames. Positive means the picture is ahead of the sound. The operator only measures; the picture passes through untouched. Each frame carries a state number on both media, so a single frame is already a complete measurement. The window of readings exists only to shrug off the occasional frame that a codec mangles: check Locked before believing MeasuredOffsetFrames, because a receiver that is decoding nothing at all reports an unlocked zero rather than a confident one.

Property Type Access Description
ShowAdvancedOptions bool get/set Show or hide the operator's advanced settings in the editor UI. [default=false]. The tolerances only need touching when a lossy transport starts refusing to decode, so they are out of the way until asked for.
AvStatus AvSyncStatus get The headline verdict: in sync, out of sync, or no usable signal (read-only). Three states rather than two on purpose. NoSignal covers everything the receiver cannot draw a conclusion from - nothing arriving, a frozen feed, a stopped sender, or simply not enough frames yet - and is deliberately distinct from OutOfSync, which is a real fault in a signal that is genuinely being measured. Equivalent to reading Locked and then MeasuredOffsetFrames, in one value.
MeasuredOffsetFrames int get Measured offset between picture and sound, in frames (read-only). Positive means video is ahead of audio, negative means audio is ahead. Only meaningful while Locked is true. The nine-state cycle can express -4 to +4 frames; a larger error wraps around and cannot be told from a smaller one of the opposite sign.
MeasuredOffsetMs int get The same offset expressed in milliseconds (read-only). Derived from the frame's own audio length, so it follows the project frame rate without having to be told what it is.
Locked bool get Whether the reading can be believed (read-only). True once enough of the window has decoded, enough of it agrees, and the signal was moving while it did so. Always test this before acting on MeasuredOffsetFrames - an unlocked reading of 0 means "no idea", not "in sync". A frozen picture, a stopped sender or a lost input all decode perfectly well and all keep yielding the same offset, so movement is checked separately: see Signal moving.
Confidence int get How much of the window agreed with the reported offset, as a percentage (read-only).
VideoDecodeRate int get Percentage of recent frames whose picture could be identified (read-only). A low figure over an otherwise healthy link usually means frames are being dropped or repeated, or that something is composited over the test picture.
AudioDecodeRate int get Percentage of recent frames whose sound could be identified (read-only).
SignalMoving bool get Whether the test signal is actually moving (read-only). False when the picture and the sound have stopped changing - a frozen feed, a lost input, or a sender that has been stopped. Such a signal still decodes, and still agrees with itself, so this is what stops it being reported as a confident measurement.
StateAdvanceRate int get Percentage of recent frames on which the signal moved on (read-only).
DecodedVideoState int get State number read from the current frame's picture, or -1 if it could not be identified (read-only).
DecodedAudioState int get State number read from the current frame's sound, or -1 if it could not be identified (read-only).
Status FormattedMessage get Status message describing what the receiver is currently able to see (read-only).
AnalysisRegionPercent int get/set Size of the measured region, as a percentage of the frame, centred. [min=10, max=100, default=50]. Measuring the middle rather than the whole frame keeps letterbox bars, overlays and safe-area furniture out of the average - they would drag every reading towards black and shift all nine states together.
ColorTolerance int get/set How far a measured colour may sit from a known state and still match. [min=4, max=160, default=48]. Distance is in RGB units, where the closest two states are about 220 apart, so there is a lot of room. Raise it for a heavily compressed or level-shifted path.
MatchMarginPercent int get/set How much closer the best colour match must be than the next best, as a percentage. [min=100, max=400, default=150]. Guards against frames caught mid-transition, which can sit plausibly near a state while being near another too. Such frames are refused rather than guessed at.
ToneDominancePercent int get/set How much stronger the winning tone must be than the other, as a percentage. [min=110, max=1000, default=300].
SilenceThresholdDb int get/set Level below which a channel counts as silent, in dBFS. [min=-80, max=-10, default=-34].
WindowFrames int get/set How many recent frames the reading is drawn from. [min=9, max=300, default=60]. Longer is steadier but slower to notice a change. Below one full nine-state cycle the level reference has nothing to calibrate against, so nine is the floor.
RequiredAgreementPercent int get/set How much of the window must agree before the reading counts as locked. [min=50, max=100, default=80].

Inherits from: AbstractOperator, AbstractAudioMetering, NamedModel.

See also: A/V Sync Receiver in Operators — user-facing introduction, screenshots, and section summaries.