BlackMagic DeckLink Capture v3
BlackMagic DeckLink Capture v3 input properties for Script Engine. Captures live video and audio from a Blackmagic DeckLink card connected over SDI or HDMI — cameras, switchers, players, or any other source the card can receive. Supports either stereo (2-channel) or multi-channel (8-channel) audio capture, useful for multi-language programmes, surround sound, and split-feed workflows. Pick the desired device, channel, and audio channel count, and the input feeds the source into Composer's pipeline. Includes auto-start on load, freeze-frame on pause or lost input, automatic black-video detection with a script callback, an on-board still store for reference frames or fallback graphics, and a rich set of capture statistics for diagnostics.
| Property | Type | Access | Description |
|---|---|---|---|
ShowAdvancedOptions |
bool |
get/set |
Show or hide the input's advanced settings in the editor UI. [default=false]. |
DecklinkCaptureChannel |
DecklinkCaptureChannel |
get/set |
Which physical Decklink input port to capture from. Picks one of the Decklink input channels detected on the system. A card may expose multiple channels (e.g. SDI 1, SDI 2, HDMI), and only one input instance can capture from each channel at a time. Must be set before capture can start. If no Decklink card is found on startup, this is empty — make sure the BMD drivers are installed and the card is recognised by the system. |
DeviceName |
string |
get |
Friendly name of the Decklink device currently in use (read-only). Reflects the model/identifier reported by the Decklink driver for the selected DecklinkCaptureChannel (for example "DeckLink 8K Pro (1)"). Useful from scripts to confirm the right card was picked when more than one Decklink device is installed. |
AudioChannels |
AudioNumberOfChannels |
get/set |
Number of audio channels to capture from the source. [default=Two]. Two (stereo) is the standard choice for most workflows. Eight enables 8-channel capture, used for multi-language programmes (each language pair on its own channel pair), surround sound, or split-feed productions. The selected count must be supported by both the DeckLink card and the upstream source. |
PlaybackState |
PlaybackState |
get |
Current playback state of the input (read-only). Reflects whether the input is Stopped, Running, Paused, or in an error state. Driven indirectly by StartCommand, StopCommand, PauseCommand, and by AutostartCapture at load time. Read this from a script to decide whether the source is live; the value also drives the running indicator and the enabled state of the capture buttons. |
StartCommand |
Command |
get |
Start capturing from the selected Decklink input. |
StopCommand |
Command |
get |
Stop capturing from the Decklink input. |
PauseCommand |
Command |
get |
Pause or resume capture, freezing on the last frame while paused. |
CapturedTimeCode |
TimeCode |
get |
Embedded timecode (RP188/VITC) read from the most recently captured frame, formatted "HH:MM:SS:FFf" (read-only). Null when the source carries no embedded timecode or no signal is present. |
AutostartCapture |
bool |
get/set |
Whether capture starts automatically as soon as the project loads. [default=true]. When true, the input invokes its start logic immediately on load (equivalent to running StartCommand). Disable to require an explicit start, useful when the source should only come live on operator action or via a script trigger. |
IsGenLockedToSyncSource |
bool |
get/set |
Whether the source is genlocked to a shared sync reference. [default=false]. In multi-camera productions where every camera is locked to a common sync generator (genlock), enabling this lets Composer take advantage of that shared timing for tighter inter-camera sync. Leave off when the source is free-running. |
KeepLastFrameOnLostInput |
bool |
get/set |
Whether to keep showing the last good frame when the input signal is lost. [default=true]. When true, a dropped or disconnected source freezes the picture on the most recent frame instead of going black — useful for productions where a brief signal glitch shouldn't be visible on air. Disable to show a clear "no signal" indication instead. |
FreezeFrameOnPause |
bool |
get/set |
Whether the picture freezes on the last frame when capture is paused. [default=true]. When true, PauseCommand holds the most recent frame on screen until capture resumes. Disable to go to black on pause instead. |
DecklinkCaptureMode |
DecklinkCaptureMode |
get/set |
How captured frames are transferred from the card into the pipeline. [default=Optimized]. Optimized uses a zero-copy path that is lighter on memory and CPU and is the default. Classic uses a copy-based path that works reliably across every Desktop Video driver version — switch to it if the installed driver misbehaves with the zero-copy path (e.g. allocator pointer-mismatch warnings or dropped frames). Changing this takes effect on the next capture start. |
UseSwrConverter |
bool |
get/set |
Whether to convert audio using the FFmpeg audio resampler. [default=false, debug]. Internal toggle that switches between the default audio converter and an alternative path. Leave off unless instructed otherwise during troubleshooting. |
NumVideoTransferTargets |
int |
get/set |
Capacity of the retained capture queue and in-use frames. [min=5, max=64, default=10, debug]. Classic uses pinned host copies; Optimized retains SDK buffers from its pinned host allocator, which also reserves eight buffers of SDK headroom. This is not a count of GPU render targets. |
CaptureBufferDepth |
DecklinkCaptureBufferDepth |
get/set |
How many captured frames to keep buffered ahead of the render loop when this input is NOT the sync source. The default (2 frames) keeps latency minimal; selecting 3 frames adds one frame of jitter tolerance, reducing frame duplication/skipping on systems where the capture timing varies (e.g. several Blackmagic inputs contending for CPU), at the cost of one extra frame of latency. Has no effect when this input is the sync source (it then renders 1:1). |
ComponentLog |
ComponentLog |
get |
Recent log lines from the input — capture events and status messages (read-only). A short history of the most recent events, useful for diagnosing why capture failed to start, why the signal dropped, or why a black-video event fired. |
BlackVideoDetectionAction |
BlackVideoDetectionAction |
get/set |
What to do when the captured picture is detected as black (more than 99% black pixels). Choose how Composer reacts to a fully black input — for example logging a warning, raising an error indicator, or doing nothing. Useful for catching a disconnected camera or a misrouted feed that's still sending a valid signal but no actual picture. |
OnBlackVideoEventFunction |
string |
get/set |
Name of a Script Engine function to call when black video is detected or recovered. The function receives a single boolean argument — true when the picture has just gone black, false when a real picture has come back. Useful for triggering automatic follow-up actions (switch to a backup feed, send an alert, log the event). Leave blank to skip the callback. |
BlackVideoActive |
bool |
get |
True while the captured picture is currently detected as black (read-only). true when more than 99% of the picture is black, false when a real picture is present. Useful from a script to react to the live state directly, in addition to or instead of OnBlackVideoEventFunction. |
StillStoreMode |
BMDCaptureStillStoreMode |
get/set |
How the still store image is used in relation to the live capture. Choose between disabling the still store entirely, falling back to the still image only when input is lost, or always showing the still image instead of the live capture. Useful for keeping a clean reference frame on screen during cable swaps or rehearsals. |
StillStoreInputSelector |
StringCollectionEnum |
get/set |
Picker for which Still Image input feeds the still store. Lists all Still Image inputs in the project plus a "None" option. Selecting one copies its image into the still store, where it's used according to StillStoreMode. Selecting "None" clears the still store input link. |
StillStoreImageCount |
int |
get |
Number of snapshots currently saved in the still store on disk (read-only). Counts the saved images in the project's Snapshots folder. Increases each time StoreCommand runs. |
NewestStillStoreImageString |
string |
get |
File name of the most recent snapshot saved to the still store (read-only). |
LoadedStillStoreImageInfoString |
string |
get |
Information about the still store image currently loaded into memory (read-only). Typically the file name and basic dimensions. Useful for confirming which still image is actually being used right now. |
StillStoreImageActive |
bool |
get |
True when the still store image is currently being shown instead of the live capture (read-only). Reflects the runtime effect of StillStoreMode — for example, true when the source has dropped and the still store is filling in. Useful from a script to react to fallback behaviour. |
StoreCommand |
Command |
get |
Save the current captured frame as a snapshot in the still store. Writes the live frame to the project's Snapshots folder so it can be reused as a reference image or fallback graphic. |
RefreshStillStoreInputCommand |
Command |
get |
Reload the still store image from the input selected in StillStoreInputSelector. Useful when the source still image has changed since it was last copied in. |
Width |
int |
get |
Width of the video frames currently being captured, in pixels (read-only). |
Height |
int |
get |
Height of the video frames currently being captured, in pixels (read-only). |
CapturedFrames |
int |
get |
Total number of frames the input has captured since it was started (read-only). Should grow steadily at the source's frame rate during healthy capture. A counter that stops moving while the input is Running is a clear sign the source has gone silent or the cable has dropped. |
LastFrameCaptureDateTime |
DateTime |
get |
Local timestamp of the most recently captured frame (read-only). Updates continuously during capture. Useful for detecting "no frames in N seconds" type stalls. |
NumBlackPixels |
int |
get |
Number of black pixels detected in the most recently analysed frame (read-only, debug). Used internally by the black-video detection logic. |
OnVideoFrameArriveCounter |
int |
get |
Total number of "frame arrived" events the Decklink card has fired (read-only, debug). Counts every video frame the card delivers to Composer, including frames discarded before reaching the rendered output. |
PlaybackFrames |
int |
get |
Compatibility alias for LiveVideoRenderIterations, saturated at Int32.MaxValue. Now counts only newly selected live video; excludes still-store substitution, intentional holds and empty output, rather than counting calls that reach the end of rendering. |
LastVideoFormatChange |
string |
get |
Description of the most recent automatic video-format change detected on the input (read-only, debug). Updated when the Decklink card detects that the source has switched resolution or frame rate. Useful for diagnosing surprise format changes mid-production. |
AudioVideoQueueSize |
int |
get |
Compatibility alias for the current QueuedCaptureFrames value. |
NumZeroDataFramesCaptured |
int |
get |
Number of frames the card delivered with no actual picture data (read-only, debug). A non-zero value usually indicates a problem at the source — for example a camera that dropped its signal mid-stream. |
NumInputlessFramesCapturedWhileWaitingForCorrectFormat |
int |
get |
Number of frames received before the input had locked on to a stable video format (read-only, debug). Counts the warm-up frames before the card finalises the source format. Normal during startup; a growing count later indicates repeated format changes. |
NumInputlessFramesCapturedWhileFormatDetected |
int |
get |
Number of empty frames received after the source format was locked in (read-only, debug). A growing value while the input is Running is a strong signal of source dropouts — the format is known but no real picture is arriving. |
NumSyncEventsSkipped |
int |
get |
Number of frames skipped because the source frame rate didn't match the project's frame rate (read-only, debug). Composer expects the source frame rate to match the project's master frame rate; frames that don't fit are dropped. A non-zero value points to a frame-rate mismatch on the cable. |
NumSampleZeroAudioFramesCaptured |
int |
get |
Number of audio frames received with zero samples (read-only, debug). Indicates moments where the card delivered an audio frame but it contained no samples — usually a sign of an upstream audio glitch. |
NumSampleErrorCountAudioFramesCaptured |
int |
get |
Number of audio frames received with an unexpected sample count (read-only, debug). Indicates moments where the card delivered an audio frame whose sample count didn't match what was expected for the running frame rate. |
NumAudioVideoFramesClearedOnFirstFrameRender |
int |
get |
Compatibility alias for startup/alignment discards; part of DiscardedVideoFrames. |
CapturePerformance |
string |
get |
Time spent on the capture thread per frame, formatted as a millisecond string (read-only, debug). Shows how long the input takes to receive each frame from the card. Persistently high values indicate the system or driver is under pressure. |
CaptureTimeDelta |
string |
get |
Time between successive captured frames on the capture thread, formatted as a millisecond string (read-only, debug). Should hover near the source's frame interval (e.g. ~20 ms at 50 fps). Spikes indicate the source is delivering frames irregularly. |
CaptureTimeWarningThreshold |
int |
get |
How much capture-time variation, in milliseconds, counts as a warning. [default=2, debug]. When the actual CaptureTimeDelta differs from the expected frame interval by more than this many milliseconds, NumCaptureTimeWarnings is incremented. Read-only diagnostic. |
NumCaptureTimeWarnings |
int |
get |
Number of capture-time deltas that exceeded CaptureTimeWarningThreshold (read-only, debug). A growing value indicates persistent capture-thread jitter. |
ColorSpaceConversionPerformance |
string |
get |
Time spent converting captured frames to Composer's internal format, formatted as a millisecond string (read-only, debug). Should be a small fraction of the frame interval. Persistently high values indicate the conversion step is becoming a bottleneck. |
NumAudioVideoFramesRepeated |
int |
get |
Compatibility alias for RepeatedVideoRenderIterations; intentional holds and empty output are excluded. |
NumAudioVideoFramesFlushed |
int |
get |
Compatibility alias for DiscardedVideoFrames, saturated at Int32.MaxValue. Counts pictures, not flush operations. |
TimeSinceStart |
string |
get |
Time elapsed since capture was last started, formatted "HH:MM:SS" (read-only, debug). Hours accumulate beyond 24 for long-running captures (e.g. "50:12:30"). Resets each time the input is started. |
DuplicatedOrSkippedFramesPercent |
string |
get |
Legacy ratio retained for script compatibility. It combines different populations and may exceed 100 percent; use the separate discard and render-outcome counters instead. |
FirstCorrectFrameArrived |
bool |
get |
True once the first valid captured frame has been rendered after starting (read-only, debug). Useful to gate behaviour that should only fire after the input has actually started producing real output. |
Temperature |
int |
get |
Reported operating temperature of the Decklink card, in degrees Celsius (read-only, debug). Useful for monitoring long-running productions where thermal pressure can cause instability. |
PciLinkWidth |
int |
get |
PCI Express link width the Decklink card is currently negotiated at (read-only, debug). Reflects the number of PCIe lanes in use (e.g. x4, x8, x16). A lower value than the card's maximum can indicate it's running below its rated bandwidth. |
PciLinkSpeed |
int |
get |
PCI Express link speed the Decklink card is currently negotiated at (read-only, debug). Reflects the PCIe generation in use (1, 2, 3, 4). A lower value than the card's maximum can indicate motherboard or slot limitations. |
DiscardedVideoFrames |
long |
get |
Actual captured pictures rejected or released without being selected as live video, since capture started. Includes startup, stop and intentional still-store discards. |
RepeatedVideoRenderIterations |
long |
get |
Input render calls retaining an existing image without new live video, excluding intentional holds and calls with no image. |
HeldVideoRenderIterations |
long |
get |
Input render calls using still-store or intentionally holding video while paused or rendering is disabled. |
LiveVideoRenderIterations |
long |
get |
Input render calls that selected a newly captured live video image. Excludes still-store output. |
VideoRenderIterations |
long |
get |
Calls to this input's rendering method, including every early return. Excludes worker iterations that never render inputs. |
EmptyVideoRenderIterations |
long |
get |
Input render calls that finish without a video image; these are not repeated frames. |
AdmittedVideoFrames |
long |
get |
Pictures successfully retained for playback. At rest, equals published pictures plus discarded retained pictures plus retained ownership. |
RejectedVideoFrames |
long |
get |
Valid SDK pictures refused before gaining a retained lease; included in DiscardedVideoFrames. |
PublishedVideoFrames |
long |
get |
Retired capture leases whose video was selected for live input output. Does not measure target presentation. |
DiscardedVideoFramesByReason |
string |
get |
Breakdown of the discarded-video total. Recovery includes ordered-group capacity evictions and resets; ordinary capacity, startup and stop are separate reasons. |
Inherits from: AbstractInput, AbstractAudioProcessing, AbstractAudioMetering, NamedModel.
See also: BlackMagic DeckLink Capture v3 in Inputs — user-facing introduction, screenshots, and section summaries.