Compare commits
4 commits
d908c0c056
...
fffff1c016
| Author | SHA1 | Date | |
|---|---|---|---|
| fffff1c016 | |||
| 549ca6c73f | |||
| ea615c8c76 | |||
| f2d5f5aa16 |
66 changed files with 8013 additions and 50 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -27,8 +27,8 @@ services/editor/**/node_modules
|
|||
services/editor/**/dist
|
||||
services/editor/.pnpm-store
|
||||
|
||||
# Blackmagic DeckLink SDK + runtime libs (operator-supplied; see services/capture/build-with-decklink.sh)
|
||||
services/capture/sdk/
|
||||
# Blackmagic DeckLink SDK headers are now committed (private/internal repo) under services/capture/sdk/.
|
||||
# Runtime .so libs (libDeckLinkAPI.so) come from the DesktopVideo driver install and are not committed.
|
||||
services/capture/lib/
|
||||
|
||||
# Editor backups
|
||||
|
|
|
|||
297
deploy/install-driver.sh
Normal file
297
deploy/install-driver.sh
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# install-driver.sh <vendor>
|
||||
# ----------------------------------------------------------------------------
|
||||
# Idempotent HOST installer for capture-card runtime drivers / SDKs.
|
||||
#
|
||||
# Runs ON the cluster node's HOST kernel. The node-agent invokes it inside a
|
||||
# one-shot PRIVILEGED ubuntu container that bind-mounts this repo plus the host
|
||||
# paths needed to affect the host kernel (/lib/modules, /usr/src, /boot, /dev,
|
||||
# and the host apt/dpkg via the mounted root). dkms / modprobe / ldconfig
|
||||
# therefore operate against the running host kernel.
|
||||
#
|
||||
# Reads the proprietary vendor file(s) from sdk/<vendor>/ (in this repo).
|
||||
# NO binaries are committed — if the expected file is missing the script exits
|
||||
# non-zero with a clear message telling the operator what to drop in.
|
||||
#
|
||||
# Vendors (ALLOWLIST — nothing else is accepted):
|
||||
# blackmagic Desktop Video .deb (DKMS kernel module)
|
||||
# aja NTV2 driver source/SDK (built kernel module)
|
||||
# deltacast VideoMaster installer (kernel module)
|
||||
# ndi redistributable runtime libs (user-space only, no module)
|
||||
#
|
||||
# Exit codes:
|
||||
# 0 installed (or already present / up to date)
|
||||
# 2 bad usage / unknown vendor
|
||||
# 3 expected vendor file missing in sdk/<vendor>/
|
||||
# 4 missing kernel headers (cannot build DKMS / module)
|
||||
# 5 build / install / module-load failure
|
||||
#
|
||||
# `bash -n` must pass. set -euo pipefail with `|| true` guarding every probe.
|
||||
# ============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Resolve our own repo dir (deploy/ -> repo root), regardless of CWD.
|
||||
# ---------------------------------------------------------------------------
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
REPO_DIR="$(cd "$SCRIPT_DIR/.." >/dev/null 2>&1 && pwd)"
|
||||
SDK_ROOT="$REPO_DIR/sdk"
|
||||
|
||||
VENDOR="${1:-}"
|
||||
KVER="$(uname -r 2>/dev/null || echo unknown)"
|
||||
REBOOT_REQUIRED=0
|
||||
|
||||
log() { echo "[install-driver] $*"; }
|
||||
warn() { echo "[install-driver] WARN: $*" >&2; }
|
||||
die() { echo "[install-driver] ERROR: $*" >&2; exit "${2:-5}"; }
|
||||
|
||||
usage() {
|
||||
echo "Usage: install-driver.sh <blackmagic|aja|deltacast|ndi>" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
[ -n "$VENDOR" ] || usage
|
||||
case "$VENDOR" in
|
||||
blackmagic|aja|deltacast|ndi) : ;;
|
||||
*) echo "[install-driver] ERROR: unknown vendor '$VENDOR' (allowed: blackmagic aja deltacast ndi)" >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
VENDOR_DIR="$SDK_ROOT/$VENDOR"
|
||||
log "vendor=$VENDOR kernel=$KVER repo=$REPO_DIR"
|
||||
log "reading vendor files from $VENDOR_DIR"
|
||||
[ -d "$VENDOR_DIR" ] || die "vendor dir $VENDOR_DIR does not exist (repo not mounted?)" 3
|
||||
|
||||
# Pick the newest file matching a glob; echo its path or empty.
|
||||
newest_match() {
|
||||
# shellcheck disable=SC2012
|
||||
ls -1t $1 2>/dev/null | head -n1 || true
|
||||
}
|
||||
|
||||
ensure_headers() {
|
||||
if [ -d "/lib/modules/$KVER/build" ] || dpkg -s "linux-headers-$KVER" >/dev/null 2>&1; then
|
||||
log "kernel headers for $KVER present"
|
||||
return 0
|
||||
fi
|
||||
log "installing linux-headers-$KVER ..."
|
||||
apt-get update -y >/dev/null 2>&1 || true
|
||||
if ! apt-get install -y "linux-headers-$KVER" >/dev/null 2>&1; then
|
||||
# Fall back to the generic meta-package; still may not match a custom kernel.
|
||||
apt-get install -y linux-headers-generic >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ -d "/lib/modules/$KVER/build" ] || dpkg -s "linux-headers-$KVER" >/dev/null 2>&1; then
|
||||
log "kernel headers ready"
|
||||
return 0
|
||||
fi
|
||||
die "kernel headers for $KVER unavailable — cannot build module. Install linux-headers-$KVER on the host." 4
|
||||
}
|
||||
|
||||
# ===========================================================================
|
||||
# blackmagic — Desktop Video .deb (DKMS) + modprobe + restart desktopvideo
|
||||
# ===========================================================================
|
||||
install_blackmagic() {
|
||||
# Detect existing state first (idempotent skip).
|
||||
if lsmod 2>/dev/null | grep -q '^blackmagic' && [ -e /dev/blackmagic ]; then
|
||||
log "blackmagic module loaded and /dev/blackmagic present — already installed"
|
||||
if command -v dkms >/dev/null 2>&1; then dkms status 2>/dev/null | grep -i blackmagic || true; fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
local deb
|
||||
deb="$(newest_match "$VENDOR_DIR/desktopvideo_*_amd64.deb")"
|
||||
[ -n "$deb" ] && [ -f "$deb" ] || die \
|
||||
"no desktopvideo_*_amd64.deb in $VENDOR_DIR — download Desktop Video for Ubuntu 22.04 and drop the .deb there (see sdk/blackmagic/README.md)." 3
|
||||
log "using package: $(basename "$deb")"
|
||||
|
||||
ensure_headers
|
||||
|
||||
log "apt-get install (DKMS build) ..."
|
||||
apt-get update -y >/dev/null 2>&1 || true
|
||||
apt-get install -y "$deb" || die "apt-get install of $(basename "$deb") failed (DKMS build?)" 5
|
||||
|
||||
log "depmod + modprobe blackmagic ..."
|
||||
depmod -a "$KVER" 2>/dev/null || true
|
||||
if ! modprobe blackmagic 2>/dev/null; then
|
||||
warn "modprobe blackmagic failed — a reboot may be required for the DKMS module to bind"
|
||||
REBOOT_REQUIRED=1
|
||||
fi
|
||||
|
||||
# Restart the DesktopVideoHelper daemon if present.
|
||||
if command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl restart desktopvideo 2>/dev/null \
|
||||
|| systemctl restart DesktopVideoHelper 2>/dev/null || true
|
||||
fi
|
||||
|
||||
if lsmod 2>/dev/null | grep -q '^blackmagic' || [ -e /dev/blackmagic ]; then
|
||||
log "blackmagic installed (module loaded / device present)"
|
||||
else
|
||||
warn "blackmagic installed but module not yet loaded — reboot required"
|
||||
REBOOT_REQUIRED=1
|
||||
fi
|
||||
}
|
||||
|
||||
# ===========================================================================
|
||||
# aja — build ntv2 kernel module from source archive + modprobe
|
||||
# ===========================================================================
|
||||
install_aja() {
|
||||
if lsmod 2>/dev/null | grep -q 'ajantv2'; then
|
||||
log "ajantv2 module already loaded — already installed"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local src
|
||||
src="$(newest_match "$VENDOR_DIR/ntv2sdk*.zip")"
|
||||
[ -n "$src" ] || src="$(newest_match "$VENDOR_DIR/libajantv2*.tar.gz")"
|
||||
[ -n "$src" ] && [ -f "$src" ] || die \
|
||||
"no ntv2sdk*.zip / libajantv2*.tar.gz in $VENDOR_DIR — download the AJA NTV2 Linux SDK and drop it there (see sdk/aja/README.md)." 3
|
||||
log "using source: $(basename "$src")"
|
||||
|
||||
ensure_headers
|
||||
apt-get install -y build-essential unzip >/dev/null 2>&1 || true
|
||||
|
||||
local work; work="$(mktemp -d)"
|
||||
log "extracting into $work ..."
|
||||
case "$src" in
|
||||
*.zip) unzip -q -o "$src" -d "$work" || die "failed to unzip $(basename "$src")" 5 ;;
|
||||
*.tar.gz) tar -xzf "$src" -C "$work" || die "failed to untar $(basename "$src")" 5 ;;
|
||||
esac
|
||||
|
||||
# Find the linux driver dir (contains a Makefile producing ajantv2.ko).
|
||||
local drvdir
|
||||
drvdir="$(dirname "$(find "$work" -type d -path '*driver/linux' -print -quit 2>/dev/null || true)/." 2>/dev/null)"
|
||||
[ -d "$drvdir" ] || drvdir="$(dirname "$(find "$work" -name 'ajantv2.c' -print -quit 2>/dev/null || true)" 2>/dev/null)"
|
||||
[ -n "$drvdir" ] && [ -d "$drvdir" ] || die "could not locate AJA driver/linux source inside the archive" 5
|
||||
log "building module in $drvdir ..."
|
||||
make -C "$drvdir" >/dev/null 2>&1 || die "AJA module build failed" 5
|
||||
|
||||
local ko
|
||||
ko="$(find "$drvdir" -name 'ajantv2.ko' -print -quit 2>/dev/null || true)"
|
||||
if [ -n "$ko" ]; then
|
||||
install -D -m 0644 "$ko" "/lib/modules/$KVER/extra/ajantv2.ko" 2>/dev/null || true
|
||||
depmod -a "$KVER" 2>/dev/null || true
|
||||
fi
|
||||
if ! modprobe ajantv2 2>/dev/null; then
|
||||
# Fall back to the SDK's own load script if shipped.
|
||||
local loader; loader="$(find "$work" -name 'load_ajantv2' -print -quit 2>/dev/null || true)"
|
||||
if [ -n "$loader" ]; then bash "$loader" 2>/dev/null || true; fi
|
||||
fi
|
||||
|
||||
rm -rf "$work" 2>/dev/null || true
|
||||
|
||||
if lsmod 2>/dev/null | grep -q 'ajantv2'; then
|
||||
log "ajantv2 installed and loaded"
|
||||
else
|
||||
warn "ajantv2 built but not loaded — a reboot may be required (old in-tree module wedged?)"
|
||||
REBOOT_REQUIRED=1
|
||||
fi
|
||||
}
|
||||
|
||||
# ===========================================================================
|
||||
# deltacast — VideoMaster installer + module load
|
||||
# ===========================================================================
|
||||
install_deltacast() {
|
||||
if lsmod 2>/dev/null | grep -q 'videomaster' || ls /dev/deltacast* >/dev/null 2>&1; then
|
||||
log "Deltacast module loaded / device present — already installed"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local pkg
|
||||
pkg="$(newest_match "$VENDOR_DIR/VideoMaster*.run")"
|
||||
[ -n "$pkg" ] || pkg="$(newest_match "$VENDOR_DIR/VideoMaster*.tar.gz")"
|
||||
[ -n "$pkg" ] && [ -f "$pkg" ] || die \
|
||||
"no VideoMaster*.run / VideoMaster*.tar.gz in $VENDOR_DIR — obtain the Deltacast VideoMaster Linux installer and drop it there (see sdk/deltacast/README.md)." 3
|
||||
log "using installer: $(basename "$pkg")"
|
||||
|
||||
ensure_headers
|
||||
apt-get install -y build-essential dkms >/dev/null 2>&1 || true
|
||||
|
||||
local work; work="$(mktemp -d)"
|
||||
case "$pkg" in
|
||||
*.run)
|
||||
log "extracting self-extractor ..."
|
||||
chmod +x "$pkg" 2>/dev/null || true
|
||||
"$pkg" --noexec --target "$work" >/dev/null 2>&1 \
|
||||
|| cp "$pkg" "$work/installer.run"
|
||||
;;
|
||||
*.tar.gz)
|
||||
tar -xzf "$pkg" -C "$work" || die "failed to untar $(basename "$pkg")" 5
|
||||
;;
|
||||
esac
|
||||
|
||||
local installer
|
||||
installer="$(find "$work" -name 'install.sh' -print -quit 2>/dev/null || true)"
|
||||
[ -n "$installer" ] || installer="$(find "$work" -name 'installer.run' -print -quit 2>/dev/null || true)"
|
||||
[ -n "$installer" ] && [ -f "$installer" ] || die "Deltacast installer (install.sh) not found inside the package" 5
|
||||
log "running vendor installer: $(basename "$installer") ..."
|
||||
chmod +x "$installer" 2>/dev/null || true
|
||||
( cd "$(dirname "$installer")" && bash "$installer" ) || die "Deltacast VideoMaster installer failed" 5
|
||||
|
||||
depmod -a "$KVER" 2>/dev/null || true
|
||||
modprobe videomasterhd 2>/dev/null || modprobe videomaster 2>/dev/null || true
|
||||
|
||||
rm -rf "$work" 2>/dev/null || true
|
||||
|
||||
if lsmod 2>/dev/null | grep -q 'videomaster' || ls /dev/deltacast* >/dev/null 2>&1; then
|
||||
log "Deltacast VideoMaster installed"
|
||||
fi
|
||||
# First-time VideoMaster installs lay down udev rules + firmware that need a reboot.
|
||||
warn "Deltacast: a REBOOT is recommended after a first-time VideoMaster install (udev + firmware)"
|
||||
REBOOT_REQUIRED=1
|
||||
}
|
||||
|
||||
# ===========================================================================
|
||||
# ndi — copy redistributable runtime libs to /usr/local/lib + ldconfig
|
||||
# ===========================================================================
|
||||
install_ndi() {
|
||||
local target="/opt/ndi-lib"
|
||||
local found=0
|
||||
# shellcheck disable=SC2231
|
||||
for f in "$VENDOR_DIR"/libndi*.so*; do
|
||||
[ -e "$f" ] || continue
|
||||
found=1
|
||||
break
|
||||
done
|
||||
[ "$found" = 1 ] || die \
|
||||
"no libndi*.so* in $VENDOR_DIR — drop the NDI runtime redistributable libs there (see sdk/ndi/README.md)." 3
|
||||
|
||||
log "copying NDI runtime libs to $target ..."
|
||||
mkdir -p "$target"
|
||||
cp -av "$VENDOR_DIR"/libndi*.so* "$target"/ 2>/dev/null || die "failed copying NDI libs" 5
|
||||
|
||||
# Recreate the libndi.so dev symlink if only versioned libs were shipped.
|
||||
if [ ! -e "$target/libndi.so" ]; then
|
||||
local versioned
|
||||
versioned="$(newest_match "$target/libndi.so.*")"
|
||||
if [ -n "$versioned" ]; then
|
||||
ln -sf "$(basename "$versioned")" "$target/libndi.so" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$target" > /etc/ld.so.conf.d/ndi.conf
|
||||
ldconfig 2>/dev/null || true
|
||||
|
||||
if ldconfig -p 2>/dev/null | grep -q 'libndi'; then
|
||||
log "NDI runtime registered with the dynamic linker"
|
||||
else
|
||||
die "NDI libs copied but ldconfig did not resolve libndi" 5
|
||||
fi
|
||||
log "NDI: no kernel module and no reboot required."
|
||||
log "NDI: restart any process that already loaded an older libndi to pick up the new version."
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
case "$VENDOR" in
|
||||
blackmagic) install_blackmagic ;;
|
||||
aja) install_aja ;;
|
||||
deltacast) install_deltacast ;;
|
||||
ndi) install_ndi ;;
|
||||
esac
|
||||
|
||||
if [ "$REBOOT_REQUIRED" = 1 ]; then
|
||||
log "RESULT: $VENDOR install completed — REBOOT REQUIRED"
|
||||
echo "[install-driver] REBOOT_REQUIRED=1"
|
||||
else
|
||||
log "RESULT: $VENDOR install completed — no reboot required"
|
||||
echo "[install-driver] REBOOT_REQUIRED=0"
|
||||
fi
|
||||
exit 0
|
||||
|
|
@ -16,11 +16,12 @@
|
|||
# Environment variables:
|
||||
# MAM_API_URL REQUIRED Primary MAM API base URL
|
||||
# NODE_TOKEN API bearer token (required if AUTH_ENABLED=true)
|
||||
# NODE_ROLE Role tag reported to the cluster (default: worker)
|
||||
# NODE_ROLE Role tag reported to the cluster (default: auto-detect)
|
||||
# NODE_IP Override the LAN IP reported back (default: auto-detect)
|
||||
# AGENT_PORT Host port for the node agent (default: 7436)
|
||||
# INSTALL_DIR Where to clone/find the repo (default: /opt/wild-dragon)
|
||||
# PROFILES Extra compose profiles, space-sep e.g. "worker capture"
|
||||
# PROFILES Compose profiles, space-sep (default: auto-detect from hardware)
|
||||
# Override only to force, e.g. "worker capture"
|
||||
# BMD_MODEL DeckLink card model name (e.g. "DeckLink Duo 2")
|
||||
# REPO_URL Override the Forgejo clone URL
|
||||
# =============================================================================
|
||||
|
|
@ -32,6 +33,9 @@ REPO_URL="${REPO_URL:-https://forge.wilddragon.net/zgaetano/wild-dragon.git}"
|
|||
INSTALL_DIR="${INSTALL_DIR:-/opt/wild-dragon}"
|
||||
MAM_API_URL="${MAM_API_URL:-}"
|
||||
NODE_TOKEN="${NODE_TOKEN:-}"
|
||||
# Track whether the caller pinned NODE_ROLE explicitly (manual override) vs.
|
||||
# us defaulting it — so auto-detection only fills in an *unset* role.
|
||||
[[ -n "${NODE_ROLE:-}" ]] && NODE_ROLE_EXPLICIT=1 || NODE_ROLE_EXPLICIT=""
|
||||
NODE_ROLE="${NODE_ROLE:-worker}"
|
||||
NODE_IP="${NODE_IP:-}"
|
||||
AGENT_PORT="${AGENT_PORT:-7436}"
|
||||
|
|
@ -65,6 +69,37 @@ detect_lan_ip() {
|
|||
echo "$ip"
|
||||
}
|
||||
|
||||
# ── Auto-detect hardware ─────────────────────────────────────────────────────
|
||||
# Mirror detect_lan_ip's style: best-effort, guard every probe with `|| true`
|
||||
# so a missing nvidia-smi/lspci never aborts under `set -euo pipefail`. The
|
||||
# node self-describes its hardware here so the operator never has to pick a
|
||||
# role — the right compose profiles are enabled automatically.
|
||||
|
||||
# GPU present? nvidia-smi is the strong signal; fall back to an lspci scan for
|
||||
# NVIDIA or AMD VGA controllers (covers nodes where the driver isn't installed
|
||||
# yet but the card is physically present).
|
||||
detect_gpu() {
|
||||
if command -v nvidia-smi &>/dev/null && nvidia-smi -L &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
if command -v lspci &>/dev/null; then
|
||||
if lspci 2>/dev/null | grep -iE 'nvidia|vga.*amd' &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# SDI capture card present? Blackmagic DeckLink or Deltacast, via lspci.
|
||||
detect_sdi() {
|
||||
if command -v lspci &>/dev/null; then
|
||||
if lspci 2>/dev/null | grep -iE 'blackmagic|deltacast' &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# ── Preflight ────────────────────────────────────────────────────────────────
|
||||
echo -e "\n${BLD}${CYN}Wild Dragon MAM — Cluster Node Onboarding${NC}\n"
|
||||
|
||||
|
|
@ -79,6 +114,36 @@ if [[ -z "$NODE_IP" ]]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
# ── Auto-assign compose profiles from detected hardware ──────────────────────
|
||||
# Operator never picks a role: the worker profile always runs, and we add the
|
||||
# gpu / capture profiles only when the matching hardware is present. Explicit
|
||||
# PROFILES / NODE_ROLE env vars are honoured as a manual override escape hatch.
|
||||
HAS_GPU=false; HAS_SDI=false
|
||||
detect_gpu && HAS_GPU=true || true
|
||||
detect_sdi && HAS_SDI=true || true
|
||||
|
||||
DETECTED_DESC="CPU"
|
||||
[[ "$HAS_GPU" == true ]] && DETECTED_DESC="$DETECTED_DESC, GPU"
|
||||
[[ "$HAS_SDI" == true ]] && DETECTED_DESC="$DETECTED_DESC, SDI capture card"
|
||||
|
||||
if [[ -z "$PROFILES" ]]; then
|
||||
AUTO_PROFILES="worker"
|
||||
[[ "$HAS_GPU" == true ]] && AUTO_PROFILES="$AUTO_PROFILES gpu"
|
||||
[[ "$HAS_SDI" == true ]] && AUTO_PROFILES="$AUTO_PROFILES capture"
|
||||
PROFILES="$AUTO_PROFILES"
|
||||
info "Detected: $DETECTED_DESC → profiles: $PROFILES"
|
||||
else
|
||||
info "Detected: $DETECTED_DESC (profiles overridden by env: $PROFILES)"
|
||||
fi
|
||||
|
||||
# Derive a human-friendly role tag from detected hardware when not pinned.
|
||||
# Capture cards win over GPU (an SDI ingest node is the more specific role).
|
||||
if [[ -z "$NODE_ROLE_EXPLICIT" ]]; then
|
||||
if [[ "$HAS_SDI" == true ]]; then NODE_ROLE="capture"
|
||||
elif [[ "$HAS_GPU" == true ]]; then NODE_ROLE="gpu"
|
||||
else NODE_ROLE="worker"; fi
|
||||
fi
|
||||
|
||||
info "Primary API : $MAM_API_URL"
|
||||
info "Role : $NODE_ROLE"
|
||||
info "Agent port : $AGENT_PORT"
|
||||
|
|
|
|||
|
|
@ -55,10 +55,25 @@ services:
|
|||
BMD_MODEL: ${BMD_MODEL:-}
|
||||
BMD_DEVICE_PREFIX: ${BMD_DEVICE_PREFIX:-dv}
|
||||
LIVE_DIR: ${LIVE_DIR:-/mnt/NVME/MAM/wild-dragon-live}
|
||||
# REPO_DIR: host path to the checked-out repo. The agent passes this to the
|
||||
# one-shot driver-install container so install-driver.sh can read
|
||||
# sdk/<vendor>/ and run deploy/install-driver.sh. Must match the host path
|
||||
# bind-mounted below (onboard-node.sh clones to /opt/wild-dragon).
|
||||
REPO_DIR: ${REPO_DIR:-/opt/wild-dragon}
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /dev:/dev:ro
|
||||
- /mnt/NVME/MAM/wild-dragon-live:/mnt/NVME/MAM/wild-dragon-live:ro
|
||||
# Capture-driver deployment ("Capture Drivers / SDKs" in the Cluster admin
|
||||
# screen): the agent itself does NOT run dkms/modprobe — it spawns a
|
||||
# separate privileged ubuntu container that bind-mounts these host paths.
|
||||
# The agent only needs to *see* the repo path so it can pass it through as
|
||||
# a bind to that container; no extra privileges are granted to the agent.
|
||||
# /opt/wild-dragon → repo (sdk/<vendor>/ + deploy/install-driver.sh)
|
||||
# The install container additionally mounts /lib/modules,/usr/src,/boot,
|
||||
# /dev and /opt from the host (handled in the agent, not here) so DKMS /
|
||||
# modprobe / ldconfig affect the host kernel.
|
||||
- ${REPO_DIR:-/opt/wild-dragon}:${REPO_DIR:-/opt/wild-dragon}:ro
|
||||
devices:
|
||||
- /dev/blackmagic:/dev/blackmagic
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ services:
|
|||
DOCKER_NETWORK: wild-dragon_wild-dragon
|
||||
NODE_IP: ${NODE_IP}
|
||||
NODE_HOSTNAME: ${NODE_HOSTNAME:-}
|
||||
# Bearer mam-api forwards to a node-agent when installing capture drivers
|
||||
# ("Capture Drivers / SDKs" panel). Set to the same value as the agents'
|
||||
# NODE_TOKEN. If empty, agents with an empty NODE_TOKEN accept the call
|
||||
# (dev); agents with a token will reject it (401).
|
||||
NODE_AGENT_TOKEN: ${NODE_AGENT_TOKEN:-}
|
||||
CAPTURE_TOKEN: ${CAPTURE_TOKEN}
|
||||
PLAYOUT_IMAGE: ${PLAYOUT_IMAGE:-wild-dragon-playout:latest}
|
||||
PLAYOUT_AMCP_BASE_PORT: ${PLAYOUT_AMCP_BASE_PORT:-5250}
|
||||
|
|
|
|||
42
sdk/README.md
Normal file
42
sdk/README.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# Capture-card SDK / driver file store
|
||||
|
||||
This directory holds the **proprietary, non-redistributable** vendor SDKs and
|
||||
drivers used to enable SDI / NDI capture cards on cluster nodes.
|
||||
|
||||
> **INTERNAL ONLY.** These files are licensed by their respective vendors and
|
||||
> must **not** be published, redistributed, or committed to any public mirror.
|
||||
> This repository is private. Do not change that.
|
||||
|
||||
## Why these live in the repo
|
||||
|
||||
The cluster admin screen lets an operator install/update capture-card drivers on
|
||||
a node from the web UI (no SSH). The node-agent spawns a one-shot privileged
|
||||
container that bind-mounts this repository and runs
|
||||
[`deploy/install-driver.sh <vendor>`](../deploy/install-driver.sh), which reads
|
||||
the vendor files from `sdk/<vendor>/`. Because the install must work offline on
|
||||
an isolated broadcast LAN, the binaries ship in-repo rather than being fetched at
|
||||
install time.
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
sdk/
|
||||
README.md ← this file
|
||||
blackmagic/ ← Blackmagic Desktop Video (DeckLink) .deb
|
||||
aja/ ← AJA ntv2 driver source / installer
|
||||
deltacast/ ← Deltacast VideoMaster installer
|
||||
ndi/ ← NDI redistributable runtime libs
|
||||
```
|
||||
|
||||
Each vendor directory has its own `README.md` listing **exactly** which files an
|
||||
admin must drop in. A `.gitkeep` keeps the empty directory committed.
|
||||
|
||||
## Important
|
||||
|
||||
- **No binaries are committed by default.** The directory structure + READMEs
|
||||
are the deliverable. An admin downloads the proprietary files from the vendor
|
||||
(per their licence) and drops them in the matching `sdk/<vendor>/` directory.
|
||||
- The install script **fails gracefully** with a clear message if the expected
|
||||
file is absent — it never fabricates or downloads binaries.
|
||||
- Target host OS for all install paths is **Ubuntu 22.04 LTS (jammy), x86_64**,
|
||||
matching the cluster worker nodes.
|
||||
0
sdk/aja/.gitkeep
Normal file
0
sdk/aja/.gitkeep
Normal file
31
sdk/aja/README.md
Normal file
31
sdk/aja/README.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# AJA NTV2 driver
|
||||
|
||||
Drop the **AJA NTV2** driver source/SDK archive for Linux into this directory.
|
||||
|
||||
## Required file
|
||||
|
||||
| File | Notes |
|
||||
|------|-------|
|
||||
| `ntv2sdk*linux*.zip` **or** `libajantv2*.tar.gz` | The NTV2 SDK / open-source `libajantv2` source tree containing `driver/linux/` with the kernel-module `Makefile` and `load_ajantv2` / `unload_ajantv2` scripts. |
|
||||
|
||||
Example names: `ntv2sdklinux_17.0.1.zip`, `libajantv2-17.0.1.tar.gz`
|
||||
|
||||
The installer reads the **newest** matching archive.
|
||||
|
||||
## Where to get it
|
||||
|
||||
AJA → Support → Software & firmware → *NTV2 SDK* (Linux), or the public
|
||||
`aja-video/libajantv2` source release. Download the Linux SDK zip / source
|
||||
tarball and copy it here unmodified.
|
||||
|
||||
## What the install script does
|
||||
|
||||
1. Ensures `linux-headers-$(uname -r)`, `build-essential` are present.
|
||||
2. Extracts the archive into a scratch build dir.
|
||||
3. Builds the `ajantv2` kernel module from `driver/linux` (`make`).
|
||||
4. Installs the module under `/lib/modules/$(uname -r)/extra`, runs `depmod`,
|
||||
`modprobe ajantv2` (falls back to the SDK's `load_ajantv2` script).
|
||||
5. Verifies the `ajantv2` module is loaded.
|
||||
|
||||
A **reboot is not normally required**; the module loads immediately after build.
|
||||
The script reports if a reboot is needed (e.g. an old in-tree module is wedged).
|
||||
0
sdk/blackmagic/.gitkeep
Normal file
0
sdk/blackmagic/.gitkeep
Normal file
35
sdk/blackmagic/README.md
Normal file
35
sdk/blackmagic/README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Blackmagic Desktop Video (DeckLink) driver
|
||||
|
||||
Drop the **Blackmagic Desktop Video** Debian package for **Ubuntu 22.04 (x86_64)**
|
||||
into this directory.
|
||||
|
||||
## Required file
|
||||
|
||||
| File | Notes |
|
||||
|------|-------|
|
||||
| `desktopvideo_*_amd64.deb` | The `desktopvideo` package from the Desktop Video installer archive. Provides the `blackmagic` kernel module (built via DKMS) and the `DesktopVideoHelper` daemon. |
|
||||
|
||||
Example name: `desktopvideo_14.4.1a4_amd64.deb`
|
||||
|
||||
The installer reads the **newest** matching `desktopvideo_*_amd64.deb` if more
|
||||
than one is present.
|
||||
|
||||
## Where to get it
|
||||
|
||||
Blackmagic Design → Support → *Desktop Video* (Linux). Download the
|
||||
"Desktop Video x.y.z Linux" tarball, extract it, and copy the
|
||||
`deb/<arch>/desktopvideo_*_amd64.deb` file here.
|
||||
|
||||
> Optional: `desktopvideo-gui_*_amd64.deb` is **not** required for headless
|
||||
> capture and is not installed.
|
||||
|
||||
## What the install script does
|
||||
|
||||
1. Ensures `linux-headers-$(uname -r)` is present (needed for the DKMS build).
|
||||
2. `apt-get install -y ./desktopvideo_*_amd64.deb` (pulls DKMS deps).
|
||||
3. Triggers the DKMS build, `depmod`, `modprobe blackmagic`.
|
||||
4. Restarts the `DesktopVideoHelper` daemon.
|
||||
5. Verifies `/dev/blackmagic` appears.
|
||||
|
||||
A **reboot is usually not required** but a DKMS rebuild against a freshly
|
||||
installed kernel may need one — the script reports this.
|
||||
0
sdk/deltacast/.gitkeep
Normal file
0
sdk/deltacast/.gitkeep
Normal file
31
sdk/deltacast/README.md
Normal file
31
sdk/deltacast/README.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Deltacast VideoMaster driver / SDK
|
||||
|
||||
Drop the **Deltacast VideoMaster** Linux installer into this directory.
|
||||
|
||||
## Required file
|
||||
|
||||
| File | Notes |
|
||||
|------|-------|
|
||||
| `VideoMaster*.run` **or** `VideoMaster*linux*.tar.gz` | The VideoMaster SDK + driver installer for Linux. Contains the `videomasterhd` kernel module sources and the `install.sh` driver installer. |
|
||||
|
||||
Example names: `VideoMaster-6.25.0.run`, `VideoMaster_6_25_Linux.tar.gz`
|
||||
|
||||
The installer reads the **newest** matching file.
|
||||
|
||||
## Where to get it
|
||||
|
||||
Deltacast → Products → *SDK* (<https://www.deltacast.tv/products/sdk>). Request
|
||||
the VideoMaster Linux package (licence-gated) and copy the `.run` self-extractor
|
||||
or the `.tar.gz` here unmodified.
|
||||
|
||||
## What the install script does
|
||||
|
||||
1. Ensures `linux-headers-$(uname -r)`, `build-essential`, `dkms` are present.
|
||||
2. Runs the vendor installer:
|
||||
- `.run` → executed with `--noexec --target <dir>` then its `install.sh`,
|
||||
- `.tar.gz` → extracted, then its bundled `install.sh` is run.
|
||||
3. Loads the Deltacast module (`modprobe videomasterhd` / vendor load script).
|
||||
4. Verifies a `/dev/deltacast*` device node appears.
|
||||
|
||||
A **reboot may be required** after a first-time VideoMaster install (udev rules
|
||||
+ firmware). The script reports this explicitly.
|
||||
0
sdk/ndi/.gitkeep
Normal file
0
sdk/ndi/.gitkeep
Normal file
35
sdk/ndi/README.md
Normal file
35
sdk/ndi/README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# NDI redistributable runtime
|
||||
|
||||
Drop the **NDI runtime redistributable** shared libraries into this directory.
|
||||
NDI has **no kernel module** — it is purely user-space shared libraries, so this
|
||||
is the lowest-risk install (no DKMS, no reboot).
|
||||
|
||||
## Required files
|
||||
|
||||
| File | Notes |
|
||||
|------|-------|
|
||||
| `libndi.so.*` | The versioned NDI runtime shared object, e.g. `libndi.so.6`. **Required.** |
|
||||
| `libndi.so` *(optional)* | Dev symlink. The installer recreates it if absent. |
|
||||
|
||||
You may instead drop the whole **NDI SDK / Advanced SDK** `lib/x86_64-linux-gnu/`
|
||||
directory contents here; the installer copies every `libndi*.so*` it finds.
|
||||
|
||||
Example name: `libndi.so.6.1.1`
|
||||
|
||||
## Where to get it
|
||||
|
||||
NDI → Tools / SDK download (NDI 6 SDK or NDI Advanced SDK for Linux). The
|
||||
runtime libs live under `lib/x86_64-linux-gnu/` in the SDK. Per the NDI licence
|
||||
the runtime is redistributable **within your own product** only — keep it in this
|
||||
private repo, do not publish it.
|
||||
|
||||
## What the install script does
|
||||
|
||||
1. Copies every `libndi*.so*` from here into `/opt/ndi-lib`.
|
||||
2. Writes `/etc/ld.so.conf.d/ndi.conf` pointing at `/opt/ndi-lib` and runs
|
||||
`ldconfig`.
|
||||
3. Recreates the `libndi.so` → `libndi.so.<N>` dev symlink if missing.
|
||||
4. Verifies `ldconfig -p | grep libndi` resolves.
|
||||
|
||||
**No reboot required.** Running processes that already loaded an old `libndi`
|
||||
must be restarted to pick up the new version — the script notes this.
|
||||
1692
services/capture/sdk/DeckLinkAPI.h
Normal file
1692
services/capture/sdk/DeckLinkAPI.h
Normal file
File diff suppressed because it is too large
Load diff
338
services/capture/sdk/DeckLinkAPIConfiguration.h
Normal file
338
services/capture/sdk/DeckLinkAPIConfiguration.h
Normal file
|
|
@ -0,0 +1,338 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/*
|
||||
* -- AUTOMATICALLY GENERATED - DO NOT EDIT ---
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* 5A68FFD4-1C12-4EDE-A6D2-45451D385FC1 */ { 0x5A,0x68,0xFF,0xD4,0x1C,0x12,0x4E,0xDE,0xA6,0xD2,0x45,0x45,0x1D,0x38,0x5F,0xC1 };
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ { 0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E };
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID;
|
||||
enum _BMDDeckLinkConfigurationID {
|
||||
|
||||
/* Serial port Flags */
|
||||
|
||||
bmdDeckLinkConfigSwapSerialRxTx = /* 'ssrt' */ 0x73737274,
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
|
||||
bmdDeckLinkConfigBypass = /* 'byps' */ 0x62797073,
|
||||
bmdDeckLinkConfigClockTimingAdjustment = /* 'ctad' */ 0x63746164,
|
||||
bmdDeckLinkConfigAudioMeterType = /* 'aumt' */ 0x61756D74,
|
||||
|
||||
/* Audio Input/Output Flags */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioConsumerLevels = /* 'aacl' */ 0x6161636C,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput = /* 'hi34' */ 0x68693334,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput = /* 'ho34' */ 0x686F3334,
|
||||
bmdDeckLinkConfigAnalogAudioOutputChannelsMutedByHeadphone = /* 'amhp' */ 0x616D6870,
|
||||
bmdDeckLinkConfigAnalogAudioOutputChannelsMutedBySpeaker = /* 'amsp' */ 0x616D7370,
|
||||
|
||||
/* Video Output Flags */
|
||||
|
||||
bmdDeckLinkConfigFieldFlickerRemoval = /* 'fdfr' */ 0x66646672,
|
||||
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = /* 'to59' */ 0x746F3539,
|
||||
bmdDeckLinkConfig444SDIVideoOutput = /* '444o' */ 0x3434346F,
|
||||
bmdDeckLinkConfigBlackVideoOutputDuringCapture = /* 'bvoc' */ 0x62766F63,
|
||||
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
|
||||
bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
|
||||
bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
|
||||
bmdDeckLinkConfigRec2020Output = /* 'rec2' */ 0x72656332, // Ensure output is Rec.2020 colorspace
|
||||
bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = /* 'SDQS' */ 0x53445153,
|
||||
bmdDeckLinkConfigOutput1080pAsPsF = /* 'pfpr' */ 0x70667072,
|
||||
bmdDeckLinkConfigOutputValidateEDIDForDolbyVision = /* 'pred' */ 0x70726564,
|
||||
bmdDeckLinkConfigExtendedDesktop = /* 'exdt' */ 0x65786474,
|
||||
bmdDeckLinkConfigEthernetVideoOutputIP10 = /* 'IP10' */ 0x49503130,
|
||||
|
||||
/* Video Output Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputConnection = /* 'vocn' */ 0x766F636E,
|
||||
bmdDeckLinkConfigVideoOutputConversionMode = /* 'vocm' */ 0x766F636D,
|
||||
bmdDeckLinkConfigVideoOutputConversionColorspaceDestination = /* 'vccd' */ 0x76636364, // Parameter is of type BMDColorspace
|
||||
bmdDeckLinkConfigVideoOutputConversionColorspaceSource = /* 'vccs' */ 0x76636373, // Parameter is of type BMDColorspace
|
||||
bmdDeckLinkConfigAnalogVideoOutputFlags = /* 'avof' */ 0x61766F66,
|
||||
bmdDeckLinkConfigReferenceInputTimingOffset = /* 'glot' */ 0x676C6F74,
|
||||
bmdDeckLinkConfigReferenceOutputMode = /* 'glOm' */ 0x676C4F6D,
|
||||
bmdDeckLinkConfigVideoOutputIdleOperation = /* 'voio' */ 0x766F696F,
|
||||
bmdDeckLinkConfigDefaultVideoOutputMode = /* 'dvom' */ 0x64766F6D,
|
||||
bmdDeckLinkConfigDefaultVideoOutputModeFlags = /* 'dvof' */ 0x64766F66,
|
||||
bmdDeckLinkConfigSDIOutputLinkConfiguration = /* 'solc' */ 0x736F6C63,
|
||||
bmdDeckLinkConfigHDMITimecodePacking = /* 'htpk' */ 0x6874706B,
|
||||
bmdDeckLinkConfigPlaybackGroup = /* 'plgr' */ 0x706C6772,
|
||||
|
||||
/* Video Output Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputComponentLumaGain = /* 'oclg' */ 0x6F636C67,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaBlueGain = /* 'occb' */ 0x6F636362,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaRedGain = /* 'occr' */ 0x6F636372,
|
||||
bmdDeckLinkConfigVideoOutputCompositeLumaGain = /* 'oilg' */ 0x6F696C67,
|
||||
bmdDeckLinkConfigVideoOutputCompositeChromaGain = /* 'oicg' */ 0x6F696367,
|
||||
bmdDeckLinkConfigVideoOutputSVideoLumaGain = /* 'oslg' */ 0x6F736C67,
|
||||
bmdDeckLinkConfigVideoOutputSVideoChromaGain = /* 'oscg' */ 0x6F736367,
|
||||
bmdDeckLinkConfigDolbyVisionCMVersion = /* 'dvvr' */ 0x64767672,
|
||||
bmdDeckLinkConfigDolbyVisionMasterMinimumNits = /* 'mnnt' */ 0x6D6E6E74,
|
||||
bmdDeckLinkConfigDolbyVisionMasterMaximumNits = /* 'mxnt' */ 0x6D786E74,
|
||||
|
||||
/* Video Input Flags */
|
||||
|
||||
bmdDeckLinkConfigVideoInputScanning = /* 'visc' */ 0x76697363, // Applicable to H264 Pro Recorder only
|
||||
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
|
||||
bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
|
||||
bmdDeckLinkConfigCapture1080pAsPsF = /* 'cfpr' */ 0x63667072,
|
||||
|
||||
/* Video Input Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoInputConnection = /* 'vicn' */ 0x7669636E,
|
||||
bmdDeckLinkConfigAnalogVideoInputFlags = /* 'avif' */ 0x61766966,
|
||||
bmdDeckLinkConfigVideoInputConversionMode = /* 'vicm' */ 0x7669636D,
|
||||
bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame = /* 'pdif' */ 0x70646966,
|
||||
bmdDeckLinkConfigVANCSourceLine1Mapping = /* 'vsl1' */ 0x76736C31,
|
||||
bmdDeckLinkConfigVANCSourceLine2Mapping = /* 'vsl2' */ 0x76736C32,
|
||||
bmdDeckLinkConfigVANCSourceLine3Mapping = /* 'vsl3' */ 0x76736C33,
|
||||
bmdDeckLinkConfigCapturePassThroughMode = /* 'cptm' */ 0x6370746D,
|
||||
bmdDeckLinkConfigCaptureGroup = /* 'cpgr' */ 0x63706772,
|
||||
bmdDeckLinkConfigHANCInputFilter1 = /* 'hif1' */ 0x68696631,
|
||||
bmdDeckLinkConfigHANCInputFilter2 = /* 'hif2' */ 0x68696632,
|
||||
bmdDeckLinkConfigHANCInputFilter3 = /* 'hif3' */ 0x68696633,
|
||||
bmdDeckLinkConfigHANCInputFilter4 = /* 'hif4' */ 0x68696634,
|
||||
|
||||
/* Video Input Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoInputComponentLumaGain = /* 'iclg' */ 0x69636C67,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaBlueGain = /* 'iccb' */ 0x69636362,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaRedGain = /* 'iccr' */ 0x69636372,
|
||||
bmdDeckLinkConfigVideoInputCompositeLumaGain = /* 'iilg' */ 0x69696C67,
|
||||
bmdDeckLinkConfigVideoInputCompositeChromaGain = /* 'iicg' */ 0x69696367,
|
||||
bmdDeckLinkConfigVideoInputSVideoLumaGain = /* 'islg' */ 0x69736C67,
|
||||
bmdDeckLinkConfigVideoInputSVideoChromaGain = /* 'iscg' */ 0x69736367,
|
||||
|
||||
/* Keying Integers */
|
||||
|
||||
bmdDeckLinkConfigInternalKeyingAncillaryDataSource = /* 'ikas' */ 0x696B6173,
|
||||
|
||||
/* Audio Input Flags */
|
||||
|
||||
bmdDeckLinkConfigMicrophonePhantomPower = /* 'mphp' */ 0x6D706870,
|
||||
|
||||
/* Audio Input Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioInputConnection = /* 'aicn' */ 0x6169636E,
|
||||
|
||||
/* Audio Input Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel1 = /* 'ais1' */ 0x61697331,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel2 = /* 'ais2' */ 0x61697332,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = /* 'ais3' */ 0x61697333,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = /* 'ais4' */ 0x61697334,
|
||||
bmdDeckLinkConfigDigitalAudioInputScale = /* 'dais' */ 0x64616973,
|
||||
bmdDeckLinkConfigMicrophoneInputGain = /* 'micg' */ 0x6D696367,
|
||||
bmdDeckLinkConfigAudioOutputXLRDelayFrames = /* 'xdfr' */ 0x78646672,
|
||||
|
||||
/* Audio Output Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioOutputAESAnalogSwitch = /* 'aoaa' */ 0x616F6161,
|
||||
bmdDeckLinkConfigAudioOutputXLRDelayTime = /* 'xdms' */ 0x78646D73,
|
||||
bmdDeckLinkConfigAudioOutputXLRDelayType = /* 'xdty' */ 0x78647479,
|
||||
|
||||
/* Audio Output Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel1 = /* 'aos1' */ 0x616F7331,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = /* 'aos2' */ 0x616F7332,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = /* 'aos3' */ 0x616F7333,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = /* 'aos4' */ 0x616F7334,
|
||||
bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73,
|
||||
bmdDeckLinkConfigHeadphoneVolume = /* 'hvol' */ 0x68766F6C,
|
||||
bmdDeckLinkConfigSpeakerVolume = /* 'svol' */ 0x73766F6C,
|
||||
|
||||
/* Ethernet Flags */
|
||||
|
||||
bmdDeckLinkConfigEthernetPTPFollowerOnly = /* 'PTPf' */ 0x50545066,
|
||||
bmdDeckLinkConfigEthernetPTPUseUDPEncapsulation = /* 'PTPU' */ 0x50545055,
|
||||
bmdDeckLinkConfigEthernetUseManualNMOSRegistry = /* 'nmrp' */ 0x6E6D7270,
|
||||
|
||||
/* Ethernet Integers */
|
||||
|
||||
bmdDeckLinkConfigEthernetPTPPriority1 = /* 'PTP1' */ 0x50545031,
|
||||
bmdDeckLinkConfigEthernetPTPPriority2 = /* 'PTP2' */ 0x50545032,
|
||||
bmdDeckLinkConfigEthernetPTPDomain = /* 'PTPD' */ 0x50545044,
|
||||
bmdDeckLinkConfigEthernetPTPLogAnnounceInterval = /* 'PTPA' */ 0x50545041,
|
||||
|
||||
/* Ethernet Strings */
|
||||
|
||||
bmdDeckLinkConfigEthernetAudioOutputChannelOrder = /* 'caco' */ 0x6361636F,
|
||||
bmdDeckLinkConfigEthernetNMOSRegistryAddress = /* 'nmre' */ 0x6E6D7265,
|
||||
|
||||
/* Parameterized Ethernet Flags */
|
||||
|
||||
bmdDeckLinkConfigParamEthernetUseDHCP = /* 'DHCP' */ 0x44484350,
|
||||
|
||||
/* Parameterized Ethernet Strings */
|
||||
|
||||
bmdDeckLinkConfigParamEthernetStaticLocalIPAddress = /* 'nsip' */ 0x6E736970,
|
||||
bmdDeckLinkConfigParamEthernetStaticSubnetMask = /* 'nssm' */ 0x6E73736D,
|
||||
bmdDeckLinkConfigParamEthernetStaticGatewayIPAddress = /* 'nsgw' */ 0x6E736777,
|
||||
bmdDeckLinkConfigParamEthernetStaticPrimaryDNS = /* 'nspd' */ 0x6E737064,
|
||||
bmdDeckLinkConfigParamEthernetStaticSecondaryDNS = /* 'nssd' */ 0x6E737364,
|
||||
bmdDeckLinkConfigParamEthernetVideoOutputAddress = /* 'noav' */ 0x6E6F6176,
|
||||
bmdDeckLinkConfigParamEthernetAudioOutputAddress = /* 'noaa' */ 0x6E6F6161,
|
||||
bmdDeckLinkConfigParamEthernetAncillaryOutputAddress = /* 'noaA' */ 0x6E6F6141,
|
||||
|
||||
/* Device Information Strings */
|
||||
|
||||
bmdDeckLinkConfigDeviceInformationLabel = /* 'dila' */ 0x64696C61,
|
||||
bmdDeckLinkConfigDeviceInformationSerialNumber = /* 'disn' */ 0x6469736E,
|
||||
bmdDeckLinkConfigDeviceInformationCompany = /* 'dico' */ 0x6469636F,
|
||||
bmdDeckLinkConfigDeviceInformationPhone = /* 'diph' */ 0x64697068,
|
||||
bmdDeckLinkConfigDeviceInformationEmail = /* 'diem' */ 0x6469656D,
|
||||
bmdDeckLinkConfigDeviceInformationDate = /* 'dida' */ 0x64696461,
|
||||
|
||||
/* Deck Control Integers */
|
||||
|
||||
bmdDeckLinkConfigDeckControlConnection = /* 'dcco' */ 0x6463636F,
|
||||
|
||||
/* UI/UX Integers */
|
||||
|
||||
bmdDeckLinkConfigDisplayLanguage = /* 'lang' */ 0x6C616E67
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkEncoderConfigurationID;
|
||||
enum _BMDDeckLinkEncoderConfigurationID {
|
||||
|
||||
/* Video Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigPreferredBitDepth = /* 'epbr' */ 0x65706272,
|
||||
bmdDeckLinkEncoderConfigFrameCodingMode = /* 'efcm' */ 0x6566636D,
|
||||
|
||||
/* HEVC/H.265 Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigH265TargetBitrate = /* 'htbr' */ 0x68746272,
|
||||
|
||||
/* DNxHR/DNxHD Compression ID */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRCompressionID = /* 'dcid' */ 0x64636964,
|
||||
|
||||
/* DNxHR/DNxHD Level */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRLevel = /* 'dlev' */ 0x646C6576,
|
||||
|
||||
/* Encoded Sample Decriptions */
|
||||
|
||||
bmdDeckLinkEncoderConfigMPEG4SampleDescription = /* 'stsE' */ 0x73747345, // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
|
||||
bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration;
|
||||
class IDeckLinkEncoderConfiguration;
|
||||
|
||||
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char** value) = 0;
|
||||
virtual HRESULT SetFlagWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlagWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetIntWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetIntWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloatWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloatWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetStringWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetStringWithParam (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ uint64_t param, /* out */ const char** value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char** value) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_H) */
|
||||
84
services/capture/sdk/DeckLinkAPIConfiguration_v10_11.h
Normal file
84
services/capture/sdk/DeckLinkAPIConfiguration_v10_11.h
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_11 = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID_v10_11 - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_11;
|
||||
enum _BMDDeckLinkConfigurationID_v10_11 {
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigDuplexMode_v10_11 = /* 'dupx' */ 0x64757078,
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_11;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_11_H) */
|
||||
73
services/capture/sdk/DeckLinkAPIConfiguration_v10_2.h
Normal file
73
services/capture/sdk/DeckLinkAPIConfiguration_v10_2.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_2 = /* C679A35B-610C-4D09-B748-1D0478100FC0 */ {0xC6,0x79,0xA3,0x5B,0x61,0x0C,0x4D,0x09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_2;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_2_H) */
|
||||
76
services/capture/sdk/DeckLinkAPIConfiguration_v10_4.h
Normal file
76
services/capture/sdk/DeckLinkAPIConfiguration_v10_4.h
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_4 = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
|
||||
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_4;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_4_H) */
|
||||
73
services/capture/sdk/DeckLinkAPIConfiguration_v10_5.h
Normal file
73
services/capture/sdk/DeckLinkAPIConfiguration_v10_5.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration_v10_5 = /* 67455668-0848-45DF-8D8E-350A77C9A028 */ {0x67,0x45,0x56,0x68,0x08,0x48,0x45,0xDF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkEncoderConfiguration_v10_5;
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT GetDecoderConfigurationInfo (/* out */ void *buffer, /* in */ long bufferSize, /* out */ long *returnedSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration_v10_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_5_H) */
|
||||
75
services/capture/sdk/DeckLinkAPIConfiguration_v10_9.h
Normal file
75
services/capture/sdk/DeckLinkAPIConfiguration_v10_9.h
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_9 = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_9;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_9 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_9 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_9_H) */
|
||||
84
services/capture/sdk/DeckLinkAPIConfiguration_v15_3_1.h
Normal file
84
services/capture/sdk/DeckLinkAPIConfiguration_v15_3_1.h
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID_v15_3_1 - DeckLink Configuration ID */
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v15_3_1;
|
||||
enum _BMDDeckLinkConfigurationID_v15_3_1
|
||||
{
|
||||
/* Network Flags */
|
||||
bmdDeckLinkConfigEthernetUseDHCP_v15_3_1 = /* 'DHCP' */ 0x44484350,
|
||||
|
||||
/* Network Strings */
|
||||
bmdDeckLinkConfigEthernetStaticLocalIPAddress_v15_3_1 = /* 'nsip' */ 0x6E736970,
|
||||
bmdDeckLinkConfigEthernetStaticSubnetMask_v15_3_1 = /* 'nssm' */ 0x6E73736D,
|
||||
bmdDeckLinkConfigEthernetStaticGatewayIPAddress_v15_3_1 = /* 'nsgw' */ 0x6E736777,
|
||||
bmdDeckLinkConfigEthernetStaticPrimaryDNS_v15_3_1 = /* 'nspd' */ 0x6E737064,
|
||||
bmdDeckLinkConfigEthernetStaticSecondaryDNS_v15_3_1 = /* 'nssd' */ 0x6E737364,
|
||||
bmdDeckLinkConfigEthernetVideoOutputAddress_v15_3_1 = /* 'noav' */ 0x6E6F6176,
|
||||
bmdDeckLinkConfigEthernetAudioOutputAddress_v15_3_1 = /* 'noaa' */ 0x6E6F6161,
|
||||
bmdDeckLinkConfigEthernetAncillaryOutputAddress_v15_3_1 = /* 'noaA' */ 0x6E6F6141,
|
||||
};
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v15_3_1 = /* 912F634B-2D4E-40A4-8AAB-8D80B73F1289 */ {0x91,0x2F,0x63,0x4B,0x2D,0x4E,0x40,0xA4,0x8A,0xAB,0x8D,0x80,0xB7,0x3F,0x12,0x89};
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v15_3_1 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char* *value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
227
services/capture/sdk/DeckLinkAPIDeckControl.h
Normal file
227
services/capture/sdk/DeckLinkAPIDeckControl.h
Normal file
|
|
@ -0,0 +1,227 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/*
|
||||
* -- AUTOMATICALLY GENERATED - DO NOT EDIT ---
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDECKCONTROL_H
|
||||
#define BMD_DECKLINKAPIDECKCONTROL_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ { 0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF };
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControl = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ { 0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE };
|
||||
|
||||
/* Enum BMDDeckControlMode - DeckControl mode */
|
||||
|
||||
typedef uint32_t BMDDeckControlMode;
|
||||
enum _BMDDeckControlMode {
|
||||
bmdDeckControlNotOpened = /* 'ntop' */ 0x6E746F70,
|
||||
bmdDeckControlVTRControlMode = /* 'vtrc' */ 0x76747263,
|
||||
bmdDeckControlExportMode = /* 'expm' */ 0x6578706D,
|
||||
bmdDeckControlCaptureMode = /* 'capm' */ 0x6361706D
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlEvent - DeckControl event */
|
||||
|
||||
typedef uint32_t BMDDeckControlEvent;
|
||||
enum _BMDDeckControlEvent {
|
||||
bmdDeckControlAbortedEvent = /* 'abte' */ 0x61627465, // This event is triggered when a capture or edit-to-tape operation is aborted.
|
||||
|
||||
/* Export-To-Tape events */
|
||||
|
||||
bmdDeckControlPrepareForExportEvent = /* 'pfee' */ 0x70666565, // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
|
||||
bmdDeckControlExportCompleteEvent = /* 'exce' */ 0x65786365, // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
|
||||
/* Capture events */
|
||||
|
||||
bmdDeckControlPrepareForCaptureEvent = /* 'pfce' */ 0x70666365, // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
|
||||
bmdDeckControlCaptureCompleteEvent = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlVTRControlState - VTR Control state */
|
||||
|
||||
typedef uint32_t BMDDeckControlVTRControlState;
|
||||
enum _BMDDeckControlVTRControlState {
|
||||
bmdDeckControlNotInVTRControlMode = /* 'nvcm' */ 0x6E76636D,
|
||||
bmdDeckControlVTRControlPlaying = /* 'vtrp' */ 0x76747270,
|
||||
bmdDeckControlVTRControlRecording = /* 'vtrr' */ 0x76747272,
|
||||
bmdDeckControlVTRControlStill = /* 'vtra' */ 0x76747261,
|
||||
bmdDeckControlVTRControlShuttleForward = /* 'vtsf' */ 0x76747366,
|
||||
bmdDeckControlVTRControlShuttleReverse = /* 'vtsr' */ 0x76747372,
|
||||
bmdDeckControlVTRControlJogForward = /* 'vtjf' */ 0x76746A66,
|
||||
bmdDeckControlVTRControlJogReverse = /* 'vtjr' */ 0x76746A72,
|
||||
bmdDeckControlVTRControlStopped = /* 'vtro' */ 0x7674726F
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlStatusFlags - Deck Control status flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlStatusFlags;
|
||||
enum _BMDDeckControlStatusFlags {
|
||||
bmdDeckControlStatusDeckConnected = 1 << 0,
|
||||
bmdDeckControlStatusRemoteMode = 1 << 1,
|
||||
bmdDeckControlStatusRecordInhibited = 1 << 2,
|
||||
bmdDeckControlStatusCassetteOut = 1 << 3
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlExportModeOpsFlags - Export mode flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlExportModeOpsFlags;
|
||||
enum _BMDDeckControlExportModeOpsFlags {
|
||||
bmdDeckControlExportModeInsertVideo = 1 << 0,
|
||||
bmdDeckControlExportModeInsertAudio1 = 1 << 1,
|
||||
bmdDeckControlExportModeInsertAudio2 = 1 << 2,
|
||||
bmdDeckControlExportModeInsertAudio3 = 1 << 3,
|
||||
bmdDeckControlExportModeInsertAudio4 = 1 << 4,
|
||||
bmdDeckControlExportModeInsertAudio5 = 1 << 5,
|
||||
bmdDeckControlExportModeInsertAudio6 = 1 << 6,
|
||||
bmdDeckControlExportModeInsertAudio7 = 1 << 7,
|
||||
bmdDeckControlExportModeInsertAudio8 = 1 << 8,
|
||||
bmdDeckControlExportModeInsertAudio9 = 1 << 9,
|
||||
bmdDeckControlExportModeInsertAudio10 = 1 << 10,
|
||||
bmdDeckControlExportModeInsertAudio11 = 1 << 11,
|
||||
bmdDeckControlExportModeInsertAudio12 = 1 << 12,
|
||||
bmdDeckControlExportModeInsertTimeCode = 1 << 13,
|
||||
bmdDeckControlExportModeInsertAssemble = 1 << 14,
|
||||
bmdDeckControlExportModeInsertPreview = 1 << 15,
|
||||
bmdDeckControlUseManualExport = 1 << 16
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlError - Deck Control error */
|
||||
|
||||
typedef uint32_t BMDDeckControlError;
|
||||
enum _BMDDeckControlError {
|
||||
bmdDeckControlNoError = /* 'noer' */ 0x6E6F6572,
|
||||
bmdDeckControlModeError = /* 'moer' */ 0x6D6F6572,
|
||||
bmdDeckControlMissedInPointError = /* 'mier' */ 0x6D696572,
|
||||
bmdDeckControlDeckTimeoutError = /* 'dter' */ 0x64746572,
|
||||
bmdDeckControlCommandFailedError = /* 'cfer' */ 0x63666572,
|
||||
bmdDeckControlDeviceAlreadyOpenedError = /* 'dalo' */ 0x64616C6F,
|
||||
bmdDeckControlFailedToOpenDeviceError = /* 'fder' */ 0x66646572,
|
||||
bmdDeckControlInLocalModeError = /* 'lmer' */ 0x6C6D6572,
|
||||
bmdDeckControlEndOfTapeError = /* 'eter' */ 0x65746572,
|
||||
bmdDeckControlUserAbortError = /* 'uaer' */ 0x75616572,
|
||||
bmdDeckControlNoTapeInDeckError = /* 'nter' */ 0x6E746572,
|
||||
bmdDeckControlNoVideoFromCardError = /* 'nvfc' */ 0x6E766663,
|
||||
bmdDeckControlNoCommunicationError = /* 'ncom' */ 0x6E636F6D,
|
||||
bmdDeckControlBufferTooSmallError = /* 'btsm' */ 0x6274736D,
|
||||
bmdDeckControlBadChecksumError = /* 'chks' */ 0x63686B73,
|
||||
bmdDeckControlUnknownError = /* 'uner' */ 0x756E6572
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback;
|
||||
class IDeckLinkDeckControl;
|
||||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState newState, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControlStatusCallback () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDeckControl - Deck Control main interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode* mode, /* out */ BMDDeckControlVTRControlState* vtrControlState, /* out */ BMDDeckControlStatusFlags* flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT SendCommand (/* in */ uint8_t* inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t* outBuffer, /* out */ uint32_t* outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ const char** currentTimeCode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode** currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD* currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t* prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t* exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t* deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t* captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t* deviceId, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback* callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDECKCONTROL_H) */
|
||||
83
services/capture/sdk/DeckLinkAPIDiscovery.h
Normal file
83
services/capture/sdk/DeckLinkAPIDiscovery.h
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/*
|
||||
* -- AUTOMATICALLY GENERATED - DO NOT EDIT ---
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDISCOVERY_H
|
||||
#define BMD_DECKLINKAPIDISCOVERY_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLink = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ { 0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91 };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLink;
|
||||
|
||||
/* Interface IDeckLink - Represents a DeckLink device */
|
||||
|
||||
class BMD_PUBLIC IDeckLink : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ const char** modelName) = 0;
|
||||
virtual HRESULT GetDisplayName (/* out */ const char** displayName) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLink () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDISCOVERY_H) */
|
||||
188
services/capture/sdk/DeckLinkAPIDispatch.cpp
Normal file
188
services/capture/sdk/DeckLinkAPIDispatch.cpp
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0003");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0002");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGL3ScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGL3PreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
173
services/capture/sdk/DeckLinkAPIDispatch_v10_11.cpp
Normal file
173
services/capture/sdk/DeckLinkAPIDispatch_v10_11.cpp
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0002");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent_v10_11 (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
159
services/capture/sdk/DeckLinkAPIDispatch_v10_8.cpp
Normal file
159
services/capture/sdk/DeckLinkAPIDispatch_v10_8.cpp
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI(void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0002");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0001");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI(void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent(void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
188
services/capture/sdk/DeckLinkAPIDispatch_v14_2_1.cpp
Normal file
188
services/capture/sdk/DeckLinkAPIDispatch_v14_2_1.cpp
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v14_2_1.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper_v14_2_1* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper_v14_2_1* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion_v14_2_1* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGL3ScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGL3PreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent_v14_2_1 (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper_v14_2_1* CreateOpenGLScreenPreviewHelper_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper_v14_2_1* CreateOpenGL3ScreenPreviewHelper_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion_v14_2_1* CreateVideoConversionInstance_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v14_2_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
188
services/capture/sdk/DeckLinkAPIDispatch_v15_2.cpp
Normal file
188
services/capture/sdk/DeckLinkAPIDispatch_v15_2.cpp
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v15_2.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets_v15_2* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0002");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGL3ScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGL3PreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent_v15_2 (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets_v15_2* CreateVideoFrameAncillaryPacketsInstance_v15_2 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
188
services/capture/sdk/DeckLinkAPIDispatch_v15_3_1.cpp
Normal file
188
services/capture/sdk/DeckLinkAPIDispatch_v15_3_1.cpp
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v15_3_1.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion_v15_3_1* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0002");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGL3ScreenPreviewHelper_0002");
|
||||
if (!gCreateOpenGL3PreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion_v15_3_1* CreateVideoConversionInstance_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v15_3_1 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
68
services/capture/sdk/DeckLinkAPIGLScreenPreview_v14_2_1.h
Normal file
68
services/capture/sdk/DeckLinkAPIGLScreenPreview_v14_2_1.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIGLSCREENPREVIEW_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIGLSCREENPREVIEW_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper_v14_2_1 = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ { 0x50, 0x4E, 0x22, 0x09, 0xCA, 0xC7, 0x4C, 0x1A, 0x9F, 0xB4, 0xC5, 0xBB, 0x62, 0x74, 0xD2, 0x2F };
|
||||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper/CreateOpenGL3ScreenPreviewHelper on other platforms. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
/* Methods must be called with OpenGL context set */
|
||||
|
||||
virtual HRESULT InitializeGL (void) = 0;
|
||||
virtual HRESULT PaintGL (void) = 0;
|
||||
virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame) = 0;
|
||||
virtual HRESULT Set3DPreviewFormat (/* in */ BMD3DPreviewFormat previewFormat) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkGLScreenPreviewHelper_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif
|
||||
61
services/capture/sdk/DeckLinkAPIMemoryAllocator_v14_2_1.h
Normal file
61
services/capture/sdk/DeckLinkAPIMemoryAllocator_v14_2_1.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIMEMORYALLOCATOR_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIMEMORYALLOCATOR_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkMemoryAllocator_v14_2_1 = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ { 0xB3, 0x6E, 0xB6, 0xE7, 0x9D, 0x29, 0x4A, 0xA8, 0x92, 0xEF, 0x84, 0x3B, 0x87, 0xA2, 0x89, 0xE8 };
|
||||
|
||||
/* Interface IDeckLinkMemoryAllocator_v14_2_1 - Created with CoCreateInstance. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkMemoryAllocator_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void** allocatedBuffer) = 0;
|
||||
virtual HRESULT ReleaseBuffer (/* in */ void* buffer) = 0;
|
||||
virtual HRESULT Commit (void) = 0;
|
||||
virtual HRESULT Decommit (void) = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
65
services/capture/sdk/DeckLinkAPIMetalScreenPreview_v14_2_1.h
Normal file
65
services/capture/sdk/DeckLinkAPIMetalScreenPreview_v14_2_1.h
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIMETALSCREENPREVIEW_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIMETALSCREENPREVIEW_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkMetalScreenPreviewHelper_v14_2_1 = /* 1AB252C5-DACB-4AE8-A58B-5320DE9CE373 */ { 0x1A, 0xB2, 0x52, 0xC5, 0xDA, 0xCB, 0x4A, 0xE8, 0xA5, 0x8B, 0x53, 0x20, 0xDE, 0x9C, 0xE3, 0x73 };
|
||||
|
||||
/* Interface IDeckLinkMetalScreenPreviewHelper - Created with CreateMetalScreenPreviewHelper(). */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkMetalScreenPreviewHelper_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Initialize (/* in */ void* device) = 0;
|
||||
virtual HRESULT Draw (/* in */ void* cmdBuffer, /* in */ void* renderPassDescriptor, /* in */ void* viewport) = 0;
|
||||
virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame) = 0;
|
||||
virtual HRESULT Set3DPreviewFormat (/* in */ BMD3DPreviewFormat previewFormat) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkMetalScreenPreviewHelper_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif
|
||||
291
services/capture/sdk/DeckLinkAPIModes.h
Normal file
291
services/capture/sdk/DeckLinkAPIModes.h
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/*
|
||||
* -- AUTOMATICALLY GENERATED - DO NOT EDIT ---
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIMODES_H
|
||||
#define BMD_DECKLINKAPIMODES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ { 0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35 };
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayMode = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ { 0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78 };
|
||||
|
||||
/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
|
||||
|
||||
typedef uint32_t BMDDisplayMode;
|
||||
enum _BMDDisplayMode {
|
||||
|
||||
/* SD Modes */
|
||||
|
||||
bmdModeNTSC = /* 'ntsc' */ 0x6E747363,
|
||||
bmdModeNTSC2398 = /* 'nt23' */ 0x6E743233, // 3:2 pulldown
|
||||
bmdModePAL = /* 'pal ' */ 0x70616C20,
|
||||
bmdModeNTSCp = /* 'ntsp' */ 0x6E747370,
|
||||
bmdModePALp = /* 'palp' */ 0x70616C70,
|
||||
|
||||
/* HD 1080 Modes */
|
||||
|
||||
bmdModeHD1080p2398 = /* '23ps' */ 0x32337073,
|
||||
bmdModeHD1080p24 = /* '24ps' */ 0x32347073,
|
||||
bmdModeHD1080p25 = /* 'Hp25' */ 0x48703235,
|
||||
bmdModeHD1080p2997 = /* 'Hp29' */ 0x48703239,
|
||||
bmdModeHD1080p30 = /* 'Hp30' */ 0x48703330,
|
||||
bmdModeHD1080p4795 = /* 'Hp47' */ 0x48703437,
|
||||
bmdModeHD1080p48 = /* 'Hp48' */ 0x48703438,
|
||||
bmdModeHD1080p50 = /* 'Hp50' */ 0x48703530,
|
||||
bmdModeHD1080p5994 = /* 'Hp59' */ 0x48703539,
|
||||
bmdModeHD1080p6000 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080p9590 = /* 'Hp95' */ 0x48703935,
|
||||
bmdModeHD1080p96 = /* 'Hp96' */ 0x48703936,
|
||||
bmdModeHD1080p100 = /* 'Hp10' */ 0x48703130,
|
||||
bmdModeHD1080p11988 = /* 'Hp11' */ 0x48703131,
|
||||
bmdModeHD1080p120 = /* 'Hp12' */ 0x48703132,
|
||||
bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530,
|
||||
bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539,
|
||||
bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
|
||||
|
||||
/* HD 720 Modes */
|
||||
|
||||
bmdModeHD720p50 = /* 'hp50' */ 0x68703530,
|
||||
bmdModeHD720p5994 = /* 'hp59' */ 0x68703539,
|
||||
bmdModeHD720p60 = /* 'hp60' */ 0x68703630,
|
||||
|
||||
/* 2K Modes */
|
||||
|
||||
bmdMode2k2398 = /* '2k23' */ 0x326B3233,
|
||||
bmdMode2k24 = /* '2k24' */ 0x326B3234,
|
||||
bmdMode2k25 = /* '2k25' */ 0x326B3235,
|
||||
|
||||
/* 2K DCI Modes */
|
||||
|
||||
bmdMode2kDCI2398 = /* '2d23' */ 0x32643233,
|
||||
bmdMode2kDCI24 = /* '2d24' */ 0x32643234,
|
||||
bmdMode2kDCI25 = /* '2d25' */ 0x32643235,
|
||||
bmdMode2kDCI2997 = /* '2d29' */ 0x32643239,
|
||||
bmdMode2kDCI30 = /* '2d30' */ 0x32643330,
|
||||
bmdMode2kDCI4795 = /* '2d47' */ 0x32643437,
|
||||
bmdMode2kDCI48 = /* '2d48' */ 0x32643438,
|
||||
bmdMode2kDCI50 = /* '2d50' */ 0x32643530,
|
||||
bmdMode2kDCI5994 = /* '2d59' */ 0x32643539,
|
||||
bmdMode2kDCI60 = /* '2d60' */ 0x32643630,
|
||||
bmdMode2kDCI9590 = /* '2d95' */ 0x32643935,
|
||||
bmdMode2kDCI96 = /* '2d96' */ 0x32643936,
|
||||
bmdMode2kDCI100 = /* '2d10' */ 0x32643130,
|
||||
bmdMode2kDCI11988 = /* '2d11' */ 0x32643131,
|
||||
bmdMode2kDCI120 = /* '2d12' */ 0x32643132,
|
||||
|
||||
/* 4K UHD Modes */
|
||||
|
||||
bmdMode4K2160p2398 = /* '4k23' */ 0x346B3233,
|
||||
bmdMode4K2160p24 = /* '4k24' */ 0x346B3234,
|
||||
bmdMode4K2160p25 = /* '4k25' */ 0x346B3235,
|
||||
bmdMode4K2160p2997 = /* '4k29' */ 0x346B3239,
|
||||
bmdMode4K2160p30 = /* '4k30' */ 0x346B3330,
|
||||
bmdMode4K2160p4795 = /* '4k47' */ 0x346B3437,
|
||||
bmdMode4K2160p48 = /* '4k48' */ 0x346B3438,
|
||||
bmdMode4K2160p50 = /* '4k50' */ 0x346B3530,
|
||||
bmdMode4K2160p5994 = /* '4k59' */ 0x346B3539,
|
||||
bmdMode4K2160p60 = /* '4k60' */ 0x346B3630,
|
||||
bmdMode4K2160p9590 = /* '4k95' */ 0x346B3935,
|
||||
bmdMode4K2160p96 = /* '4k96' */ 0x346B3936,
|
||||
bmdMode4K2160p100 = /* '4k10' */ 0x346B3130,
|
||||
bmdMode4K2160p11988 = /* '4k11' */ 0x346B3131,
|
||||
bmdMode4K2160p120 = /* '4k12' */ 0x346B3132,
|
||||
|
||||
/* 4K DCI Modes */
|
||||
|
||||
bmdMode4kDCI2398 = /* '4d23' */ 0x34643233,
|
||||
bmdMode4kDCI24 = /* '4d24' */ 0x34643234,
|
||||
bmdMode4kDCI25 = /* '4d25' */ 0x34643235,
|
||||
bmdMode4kDCI2997 = /* '4d29' */ 0x34643239,
|
||||
bmdMode4kDCI30 = /* '4d30' */ 0x34643330,
|
||||
bmdMode4kDCI4795 = /* '4d47' */ 0x34643437,
|
||||
bmdMode4kDCI48 = /* '4d48' */ 0x34643438,
|
||||
bmdMode4kDCI50 = /* '4d50' */ 0x34643530,
|
||||
bmdMode4kDCI5994 = /* '4d59' */ 0x34643539,
|
||||
bmdMode4kDCI60 = /* '4d60' */ 0x34643630,
|
||||
bmdMode4kDCI9590 = /* '4d95' */ 0x34643935,
|
||||
bmdMode4kDCI96 = /* '4d96' */ 0x34643936,
|
||||
bmdMode4kDCI100 = /* '4d10' */ 0x34643130,
|
||||
bmdMode4kDCI11988 = /* '4d11' */ 0x34643131,
|
||||
bmdMode4kDCI120 = /* '4d12' */ 0x34643132,
|
||||
|
||||
/* 8K UHD Modes */
|
||||
|
||||
bmdMode8K4320p2398 = /* '8k23' */ 0x386B3233,
|
||||
bmdMode8K4320p24 = /* '8k24' */ 0x386B3234,
|
||||
bmdMode8K4320p25 = /* '8k25' */ 0x386B3235,
|
||||
bmdMode8K4320p2997 = /* '8k29' */ 0x386B3239,
|
||||
bmdMode8K4320p30 = /* '8k30' */ 0x386B3330,
|
||||
bmdMode8K4320p4795 = /* '8k47' */ 0x386B3437,
|
||||
bmdMode8K4320p48 = /* '8k48' */ 0x386B3438,
|
||||
bmdMode8K4320p50 = /* '8k50' */ 0x386B3530,
|
||||
bmdMode8K4320p5994 = /* '8k59' */ 0x386B3539,
|
||||
bmdMode8K4320p60 = /* '8k60' */ 0x386B3630,
|
||||
|
||||
/* 8K DCI Modes */
|
||||
|
||||
bmdMode8kDCI2398 = /* '8d23' */ 0x38643233,
|
||||
bmdMode8kDCI24 = /* '8d24' */ 0x38643234,
|
||||
bmdMode8kDCI25 = /* '8d25' */ 0x38643235,
|
||||
bmdMode8kDCI2997 = /* '8d29' */ 0x38643239,
|
||||
bmdMode8kDCI30 = /* '8d30' */ 0x38643330,
|
||||
bmdMode8kDCI4795 = /* '8d47' */ 0x38643437,
|
||||
bmdMode8kDCI48 = /* '8d48' */ 0x38643438,
|
||||
bmdMode8kDCI50 = /* '8d50' */ 0x38643530,
|
||||
bmdMode8kDCI5994 = /* '8d59' */ 0x38643539,
|
||||
bmdMode8kDCI60 = /* '8d60' */ 0x38643630,
|
||||
|
||||
/* PC Modes */
|
||||
|
||||
bmdMode640x480p60 = /* 'vga6' */ 0x76676136,
|
||||
bmdMode800x600p60 = /* 'svg6' */ 0x73766736,
|
||||
bmdMode1440x900p50 = /* 'wxg5' */ 0x77786735,
|
||||
bmdMode1440x900p60 = /* 'wxg6' */ 0x77786736,
|
||||
bmdMode1440x1080p50 = /* 'sxg5' */ 0x73786735,
|
||||
bmdMode1440x1080p60 = /* 'sxg6' */ 0x73786736,
|
||||
bmdMode1600x1200p50 = /* 'uxg5' */ 0x75786735,
|
||||
bmdMode1600x1200p60 = /* 'uxg6' */ 0x75786736,
|
||||
bmdMode1920x1200p50 = /* 'wux5' */ 0x77757835,
|
||||
bmdMode1920x1200p60 = /* 'wux6' */ 0x77757836,
|
||||
bmdMode1920x1440p50 = /* '1945' */ 0x31393435,
|
||||
bmdMode1920x1440p60 = /* '1946' */ 0x31393436,
|
||||
bmdMode2560x1440p50 = /* 'wqh5' */ 0x77716835,
|
||||
bmdMode2560x1440p60 = /* 'wqh6' */ 0x77716836,
|
||||
bmdMode2560x1600p50 = /* 'wqx5' */ 0x77717835,
|
||||
bmdMode2560x1600p60 = /* 'wqx6' */ 0x77717836,
|
||||
bmdModeUnknown = /* 'iunk' */ 0x69756E6B
|
||||
};
|
||||
|
||||
/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
|
||||
|
||||
typedef uint32_t BMDFieldDominance;
|
||||
enum _BMDFieldDominance {
|
||||
bmdUnknownFieldDominance = 0,
|
||||
bmdLowerFieldFirst = /* 'lowr' */ 0x6C6F7772,
|
||||
bmdUpperFieldFirst = /* 'uppr' */ 0x75707072,
|
||||
bmdProgressiveFrame = /* 'prog' */ 0x70726F67,
|
||||
bmdProgressiveSegmentedFrame = /* 'psf ' */ 0x70736620
|
||||
};
|
||||
|
||||
/* Enum BMDPixelFormat - Video pixel formats supported for output/input */
|
||||
|
||||
typedef uint32_t BMDPixelFormat;
|
||||
enum _BMDPixelFormat {
|
||||
bmdFormatUnspecified = 0,
|
||||
bmdFormat8BitYUV = /* '2vuy' */ 0x32767579,
|
||||
bmdFormat10BitYUV = /* 'v210' */ 0x76323130,
|
||||
bmdFormat10BitYUVA = /* 'Ay10' */ 0x41793130, // Big-endian YUVA 10 bit per component with SMPTE video levels (64-940) for YUV but full range alpha
|
||||
bmdFormat8BitARGB = 32,
|
||||
bmdFormat8BitBGRA = /* 'BGRA' */ 0x42475241,
|
||||
bmdFormat10BitRGB = /* 'r210' */ 0x72323130, // Big-endian RGB 10-bit per component with SMPTE video levels (64-940). Packed as 2:10:10:10
|
||||
bmdFormat12BitRGB = /* 'R12B' */ 0x52313242, // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat12BitRGBLE = /* 'R12L' */ 0x5231324C, // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat10BitRGBXLE = /* 'R10l' */ 0x5231306C, // Little-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062, // Big-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
|
||||
/* Formats supported only by devices that can be queried for an IDeckLinkEncoderInput */
|
||||
|
||||
bmdFormatH265 = /* 'hev1' */ 0x68657631,
|
||||
bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
|
||||
|
||||
typedef uint32_t BMDDisplayModeFlags;
|
||||
enum _BMDDisplayModeFlags {
|
||||
bmdDisplayModeSupports3D = 1 << 0,
|
||||
bmdDisplayModeColorspaceRec601 = 1 << 1,
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2,
|
||||
bmdDisplayModeColorspaceRec2020 = 1 << 3
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDisplayModeIterator;
|
||||
class IDeckLinkDisplayMode;
|
||||
|
||||
/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode** deckLinkDisplayMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayModeIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDisplayMode - Represents a display mode */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ const char** name) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual HRESULT GetFrameRate (/* out */ BMDTimeValue* frameDuration, /* out */ BMDTimeScale* timeScale) = 0;
|
||||
virtual BMDFieldDominance GetFieldDominance (void) = 0;
|
||||
virtual BMDDisplayModeFlags GetFlags (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayMode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIMODES_H) */
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPISCREENPREVIEWCALLBACK_v14_2_1_H
|
||||
#define BMD_DECKLINKAPISCREENPREVIEWCALLBACK_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback_v14_2_1 = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ { 0xB1, 0xD3, 0xF4, 0x9A, 0x85, 0xFE, 0x4C, 0x5D, 0x95, 0xC8, 0x0B, 0x5D, 0x5D, 0xCC, 0xD4, 0x38 };
|
||||
|
||||
/* Interface IDeckLinkScreenPreviewCallback_v14_2_1 - Screen preview callback */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkScreenPreviewCallback_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkScreenPreviewCallback_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPISCREENPREVIEWCALLBACK_v14_2_1_H) */
|
||||
140
services/capture/sdk/DeckLinkAPITypes.h
Normal file
140
services/capture/sdk/DeckLinkAPITypes.h
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2026 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/*
|
||||
* -- AUTOMATICALLY GENERATED - DO NOT EDIT ---
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPITYPES_H
|
||||
#define BMD_DECKLINKAPITYPES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
typedef int64_t BMDTimeValue;
|
||||
typedef int64_t BMDTimeScale;
|
||||
typedef uint32_t BMDTimecodeBCD;
|
||||
typedef uint32_t BMDTimecodeUserBits;
|
||||
typedef int64_t BMDIPFlowID;
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkTimecode = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ { 0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40 };
|
||||
|
||||
/* Enum BMDTimecodeFlags - Timecode flags */
|
||||
|
||||
typedef uint32_t BMDTimecodeFlags;
|
||||
enum _BMDTimecodeFlags {
|
||||
bmdTimecodeFlagDefault = 0,
|
||||
bmdTimecodeIsDropFrame = 1 << 0,
|
||||
bmdTimecodeFieldMark = 1 << 1,
|
||||
bmdTimecodeColorFrame = 1 << 2,
|
||||
bmdTimecodeEmbedRecordingTrigger = 1 << 3, // On SDI recording trigger utilises a user-bit.
|
||||
bmdTimecodeRecordingTriggered = 1 << 4
|
||||
};
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
||||
typedef uint32_t BMDVideoConnection;
|
||||
enum _BMDVideoConnection {
|
||||
bmdVideoConnectionUnspecified = 0,
|
||||
bmdVideoConnectionSDI = 1 << 0,
|
||||
bmdVideoConnectionHDMI = 1 << 1,
|
||||
bmdVideoConnectionOpticalSDI = 1 << 2,
|
||||
bmdVideoConnectionComponent = 1 << 3,
|
||||
bmdVideoConnectionComposite = 1 << 4,
|
||||
bmdVideoConnectionSVideo = 1 << 5,
|
||||
bmdVideoConnectionEthernet = 1 << 6,
|
||||
bmdVideoConnectionOpticalEthernet = 1 << 7,
|
||||
bmdVideoConnectionInternal = 1 << 8
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection;
|
||||
enum _BMDAudioConnection {
|
||||
bmdAudioConnectionEmbedded = 1 << 0,
|
||||
bmdAudioConnectionAESEBU = 1 << 1,
|
||||
bmdAudioConnectionAnalog = 1 << 2,
|
||||
bmdAudioConnectionAnalogXLR = 1 << 3,
|
||||
bmdAudioConnectionAnalogRCA = 1 << 4,
|
||||
bmdAudioConnectionMicrophone = 1 << 5,
|
||||
bmdAudioConnectionHeadphones = 1 << 6
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlConnection - Deck control connections */
|
||||
|
||||
typedef uint32_t BMDDeckControlConnection;
|
||||
enum _BMDDeckControlConnection {
|
||||
bmdDeckControlConnectionRS422Remote1 = 1 << 0,
|
||||
bmdDeckControlConnectionRS422Remote2 = 1 << 1
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkTimecode;
|
||||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkTimecode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
virtual HRESULT GetComponents (/* out */ uint8_t* hours, /* out */ uint8_t* minutes, /* out */ uint8_t* seconds, /* out */ uint8_t* frames) = 0;
|
||||
virtual HRESULT GetString (/* out */ const char** timecode) = 0;
|
||||
virtual BMDTimecodeFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits* userBits) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkTimecode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPITYPES_H) */
|
||||
50
services/capture/sdk/DeckLinkAPIVersion.h
Normal file
50
services/capture/sdk/DeckLinkAPIVersion.h
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/* -LICENSE-START-
|
||||
* ** Copyright (c) 2014 Blackmagic Design
|
||||
* **
|
||||
* ** Permission is hereby granted, free of charge, to any person or organization
|
||||
* ** obtaining a copy of the software and accompanying documentation (the
|
||||
* ** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
* ** and transmit the Software, and to prepare derivative works of the Software,
|
||||
* ** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
* ** accordance with:
|
||||
* **
|
||||
* ** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
* ** Agreement for the Software Development Kit ("EULA") available at
|
||||
* ** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
* **
|
||||
* ** (2) if the Software is obtained from any third party, such licensing terms
|
||||
* ** as notified by that third party,
|
||||
* **
|
||||
* ** and all subject to the following:
|
||||
* **
|
||||
* ** (3) the copyright notices in the Software and this entire statement,
|
||||
* ** including the above license grant, this restriction and the following
|
||||
* ** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
* ** part, and all derivative works of the Software, unless such copies or
|
||||
* ** derivative works are solely in the form of machine-executable object code
|
||||
* ** generated by a source language processor.
|
||||
* **
|
||||
* ** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* ** DEALINGS IN THE SOFTWARE.
|
||||
* **
|
||||
* ** A copy of the Software is available free of charge at
|
||||
* ** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
* **
|
||||
* ** -LICENSE-END-
|
||||
* */
|
||||
|
||||
/* DeckLinkAPIVersion.h */
|
||||
|
||||
#ifndef __DeckLink_API_Version_h__
|
||||
#define __DeckLink_API_Version_h__
|
||||
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x10000000
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "16.0"
|
||||
|
||||
#endif // __DeckLink_API_Version_h__
|
||||
|
||||
62
services/capture/sdk/DeckLinkAPIVideoConversion_v14_2_1.h
Normal file
62
services/capture/sdk/DeckLinkAPIVideoConversion_v14_2_1.h
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOCONVERSION_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOCONVERSION_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoConversion_v14_2_1 = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ { 0x3B, 0xBC, 0xB8, 0xA2, 0xDA, 0x2C, 0x42, 0xD9, 0xB5, 0xD8, 0x88, 0x08, 0x36, 0x44, 0xE9, 0x9A };
|
||||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* srcFrame, /* in */ IDeckLinkVideoFrame_v14_2_1* dstFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoConversion_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif
|
||||
88
services/capture/sdk/DeckLinkAPIVideoEncoderInput_v10_11.h
Normal file
88
services/capture/sdk/DeckLinkAPIVideoEncoderInput_v10_11.h
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIMemoryAllocator_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput_v10_11 = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
|
||||
|
||||
/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkEncoderInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
|
||||
virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1 *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H) */
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOFRAME3DEXTENSIONS_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOFRAME3DEXTENSIONS_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions_v14_2_1 = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ { 0xDA, 0x0F, 0x7E, 0x4A, 0xED, 0xC7, 0x48, 0xA8, 0x9C, 0xDD, 0x2D, 0xB5, 0x1C, 0x72, 0x9C, 0xD7 };
|
||||
|
||||
/* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame3DExtensions_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
|
||||
virtual HRESULT GetFrameForRightEye (/* out */ IDeckLinkVideoFrame_v14_2_1** rightEyeFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame3DExtensions_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOFRAME3DEXTENSIONS_v14_2_1_H) */
|
||||
68
services/capture/sdk/DeckLinkAPIVideoFrame_v14_2_1.h
Normal file
68
services/capture/sdk/DeckLinkAPIVideoFrame_v14_2_1.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOFRAME_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOFRAME_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame_v14_2_1 = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ { 0x3F, 0x71, 0x6F, 0xE0, 0xF0, 0x23, 0x41, 0x11, 0xBE, 0x5D, 0xEF, 0x44, 0x14, 0xC0, 0x5B, 0x17 };
|
||||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual long GetRowBytes (void) = 0;
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
virtual BMDFrameFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
|
||||
virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode** timecode) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary** ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOFRAME_v14_2_1_H) */
|
||||
91
services/capture/sdk/DeckLinkAPIVideoInput_v10_11.h
Normal file
91
services/capture/sdk/DeckLinkAPIVideoInput_v10_11.h
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIMemoryAllocator_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v10_11 = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
|
||||
|
||||
/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
|
||||
|
||||
class IDeckLinkInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1 *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1 *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v10_11_H) */
|
||||
90
services/capture/sdk/DeckLinkAPIVideoInput_v11_4.h
Normal file
90
services/capture/sdk/DeckLinkAPIVideoInput_v11_4.h
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIMemoryAllocator_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_4 = /* 2A88CF76-F494-4216-A7EF-DC74EEB83882 */ { 0x2A,0x88,0xCF,0x76,0xF4,0x94,0x42,0x16,0xA7,0xEF,0xDC,0x74,0xEE,0xB8,0x38,0x82 };
|
||||
|
||||
/* Interface IDeckLinkInput_v11_4 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_4_H) */
|
||||
103
services/capture/sdk/DeckLinkAPIVideoInput_v11_5_1.h
Normal file
103
services/capture/sdk/DeckLinkAPIVideoInput_v11_5_1.h
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoInput_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInputCallback_v11_5_1 = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ { 0xDD, 0x04, 0xE5, 0xEC, 0x74, 0x15, 0x42, 0xAB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A };
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_5_1 = /* 9434C6E4-B15D-4B1C-979E-661E3DDCB4B9 */ { 0x94, 0x34, 0xC6, 0xE4, 0xB1, 0x5D, 0x4B, 0x1C, 0x97, 0x9E, 0x66, 0x1E, 0x3D, 0xDC, 0xB4, 0xB9 };
|
||||
|
||||
/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v14_2_1* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H) */
|
||||
118
services/capture/sdk/DeckLinkAPIVideoInput_v14_2_1.h
Normal file
118
services/capture/sdk/DeckLinkAPIVideoInput_v14_2_1.h
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIMemoryAllocator_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
#include "DeckLinkAPIScreenPreviewCallback_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoInputFrame_v14_2_1 = /* 05CFE374-537C-4094-9A57-680525118F44 */ { 0x05, 0xCF, 0xE3, 0x74, 0x53, 0x7C, 0x40, 0x94, 0x9A, 0x57, 0x68, 0x05, 0x25, 0x11, 0x8F, 0x44 };
|
||||
BMD_CONST REFIID IID_IDeckLinkInputCallback_v14_2_1 = /* C6FCE4C9-C4E4-4047-82FB-5D238232A902 */ { 0xC6, 0xFC, 0xE4, 0xC9, 0xC4, 0xE4, 0x40, 0x47, 0x82, 0xFB, 0x5D, 0x23, 0x82, 0x32, 0xA9, 0x02 };
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v14_2_1 = /* C21CDB6E-F414-46E4-A636-80A566E0ED37 */ { 0xC2, 0x1C, 0xDB, 0x6E, 0xF4, 0x14, 0x46, 0xE4, 0xA6, 0x36, 0x80, 0xA5, 0x66, 0xE0, 0xED, 0x37 };
|
||||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v14_2_1 : public IDeckLinkVideoFrame_v14_2_1
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoInputFrame_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkInputCallback_v14_2_1 - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v14_2_1* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v14_2_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v14_2_1_H) */
|
||||
86
services/capture/sdk/DeckLinkAPIVideoInput_v15_3_1.h
Normal file
86
services/capture/sdk/DeckLinkAPIVideoInput_v15_3_1.h
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2025 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "DeckLinkAPI_v15_3_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v15_3_1 = /* 4095DB82-E294-4B8C-AAA8-3B9E80C49336 */ { 0x40,0x95,0xDB,0x82,0xE2,0x94,0x4B,0x8C,0xAA,0xA8,0x3B,0x9E,0x80,0xC4,0x93,0x36 };
|
||||
|
||||
/* Interface IDeckLinkInput_v15_3_1 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT EnableVideoInputWithAllocatorProvider (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* in */ IDeckLinkVideoBufferAllocatorProvider_v15_3_1* allocatorProvider) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
109
services/capture/sdk/DeckLinkAPIVideoOutput_v10_11.h
Normal file
109
services/capture/sdk/DeckLinkAPIVideoOutput_v10_11.h
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIVideoInput_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoOutput_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v10_11 = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
|
||||
|
||||
/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
|
||||
|
||||
class IDeckLinkOutput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1 *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1 *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v14_2_1 **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v14_2_1 *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v14_2_1 *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v14_2_1 *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame_v14_2_1 *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H) */
|
||||
101
services/capture/sdk/DeckLinkAPIVideoOutput_v11_4.h
Normal file
101
services/capture/sdk/DeckLinkAPIVideoOutput_v11_4.h
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoOutput_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v11_4 = /* 065A0F6C-C508-4D0D-B919-F5EB0EBFC96B */ { 0x06,0x5A,0x0F,0x6C,0xC5,0x08,0x4D,0x0D,0xB9,0x19,0xF5,0xEB,0x0E,0xBF,0xC9,0x6B };
|
||||
|
||||
/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1* previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v14_2_1** outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v14_2_1* theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H) */
|
||||
133
services/capture/sdk/DeckLinkAPIVideoOutput_v14_2_1.h
Normal file
133
services/capture/sdk/DeckLinkAPIVideoOutput_v14_2_1.h
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v14_2_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIMemoryAllocator_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoFrame_v14_2_1.h"
|
||||
#include "DeckLinkAPIScreenPreviewCallback_v14_2_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame_v14_2_1 = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ { 0x69, 0xE2, 0x63, 0x9F, 0x40, 0xDA, 0x4E, 0x19, 0xB6, 0xF2, 0x20, 0xAC, 0xE8, 0x15, 0xC3, 0x90 };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback_v14_2_1 = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ { 0x20, 0xAA, 0x52, 0x25, 0x19, 0x58, 0x47, 0xCB, 0x82, 0x0B, 0x80, 0xA8, 0xD5, 0x21, 0xA6, 0xEE };
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v14_2_1 = /* BE2D9020-461E-442F-84B7-E949CB953B9D */ { 0xBE, 0x2D, 0x90, 0x20, 0x46, 0x1E, 0x44, 0x2F, 0x84, 0xB7, 0xE9, 0x49, 0xCB, 0x95, 0x3B, 0x9D };
|
||||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkMutableVideoFrame_v14_2_1 : public IDeckLinkVideoFrame_v14_2_1
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
|
||||
virtual HRESULT SetTimecode (/* in */ BMDTimecodeFormat format, /* in */ IDeckLinkTimecode* timecode) = 0;
|
||||
virtual HRESULT SetTimecodeFromComponents (/* in */ BMDTimecodeFormat format, /* in */ uint8_t hours, /* in */ uint8_t minutes, /* in */ uint8_t seconds, /* in */ uint8_t frames, /* in */ BMDTimecodeFlags flags) = 0;
|
||||
virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary* ancillary) = 0;
|
||||
virtual HRESULT SetTimecodeUserBits (/* in */ BMDTimecodeFormat format, /* in */ BMDTimecodeUserBits userBits) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkMutableVideoFrame_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v14_2_1* completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoOutputCallback_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoOutputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v14_2_1* previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v14_2_1** outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v14_2_1* theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame_v14_2_1* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif
|
||||
103
services/capture/sdk/DeckLinkAPIVideoOutput_v15_3_1.h
Normal file
103
services/capture/sdk/DeckLinkAPIVideoOutput_v15_3_1.h
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2025 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "DeckLinkAPI_v15_3_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v15_3_1 = /* 1A8077F1-9FE2-4533-8147-2294305E253F */ { 0x1A,0x80,0x77,0xF1,0x9F,0xE2,0x45,0x33,0x81,0x47,0x22,0x94,0x30,0x5E,0x25,0x3F };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoOutputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
|
||||
virtual HRESULT CreateVideoFrameWithBuffer (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* in */ IDeckLinkVideoBuffer_v15_3_1* buffer, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
|
||||
virtual HRESULT RowBytesForPixelFormat (/* in */ BMDPixelFormat pixelFormat, /* in */ int32_t width, /* out */ int32_t* rowBytes) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
134
services/capture/sdk/DeckLinkAPI_v10_11.h
Normal file
134
services/capture/sdk/DeckLinkAPI_v10_11.h
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2018 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_11_H
|
||||
#define BMD_DECKLINKAPI_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkAttributes_v10_11 = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
|
||||
BMD_CONST REFIID IID_IDeckLinkNotification_v10_11 = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
|
||||
|
||||
/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
|
||||
|
||||
typedef uint32_t BMDDisplayModeSupport_v10_11;
|
||||
enum _BMDDisplayModeSupport_v10_11 {
|
||||
bmdDisplayModeNotSupported_v10_11 = 0,
|
||||
bmdDisplayModeSupported_v10_11,
|
||||
bmdDisplayModeSupportedWithConversion_v10_11
|
||||
};
|
||||
|
||||
/* Enum BMDDuplexMode_v10_11 - Duplex for configurable ports */
|
||||
|
||||
typedef uint32_t BMDDuplexMode_v10_11;
|
||||
enum _BMDDuplexMode_v10_11 {
|
||||
bmdDuplexModeFull_v10_11 = /* 'fdup' */ 0x66647570,
|
||||
bmdDuplexModeHalf_v10_11 = /* 'hdup' */ 0x68647570
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID_v10_11 - DeckLink Attribute ID */
|
||||
|
||||
enum _BMDDeckLinkAttributeID_v10_11 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration_v10_11 = 'dupx',
|
||||
BMDDeckLinkSupportsHDKeying_v10_11 = 'keyh',
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkPairedDevicePersistentID_v10_11 = 'ppid',
|
||||
BMDDeckLinkSupportsFullDuplex_v10_11 = 'fdup',
|
||||
};
|
||||
|
||||
enum _BMDDeckLinkStatusID_v10_11 {
|
||||
bmdDeckLinkStatusDuplexMode_v10_11 = 'dupx',
|
||||
};
|
||||
|
||||
typedef uint32_t BMDDuplexStatus_v10_11;
|
||||
enum _BMDDuplexStatus_v10_11 {
|
||||
bmdDuplexFullDuplex_v10_11 = 'fdup',
|
||||
bmdDuplexHalfDuplex_v10_11 = 'hdup',
|
||||
bmdDuplexSimplex_v10_11 = 'splx',
|
||||
bmdDuplexInactive_v10_11 = 'inac',
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAttributes_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char **value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAttributes_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkNotification_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
BMD_PUBLIC IDeckLinkIterator* CreateDeckLinkIteratorInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
|
||||
}
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_11_H) */
|
||||
68
services/capture/sdk/DeckLinkAPI_v10_2.h
Normal file
68
services/capture/sdk/DeckLinkAPI_v10_2.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_2_H
|
||||
#define BMD_DECKLINKAPI_v10_2_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
|
||||
enum _BMDDeckLinkConfigurationID_v10_2 {
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection_v10_2 - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection_v10_2;
|
||||
enum _BMDAudioConnection_v10_2 {
|
||||
bmdAudioConnectionEmbedded_v10_2 = /* 'embd' */ 0x656D6264,
|
||||
bmdAudioConnectionAESEBU_v10_2 = /* 'aes ' */ 0x61657320,
|
||||
bmdAudioConnectionAnalog_v10_2 = /* 'anlg' */ 0x616E6C67,
|
||||
bmdAudioConnectionAnalogXLR_v10_2 = /* 'axlr' */ 0x61786C72,
|
||||
bmdAudioConnectionAnalogRCA_v10_2 = /* 'arca' */ 0x61726361
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_2_H) */
|
||||
58
services/capture/sdk/DeckLinkAPI_v10_4.h
Normal file
58
services/capture/sdk/DeckLinkAPI_v10_4.h
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_4_H
|
||||
#define BMD_DECKLINKAPI_v10_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_4;
|
||||
enum _BMDDeckLinkConfigurationID_v10_4 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_4_H) */
|
||||
59
services/capture/sdk/DeckLinkAPI_v10_5.h
Normal file
59
services/capture/sdk/DeckLinkAPI_v10_5.h
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_5_H
|
||||
#define BMD_DECKLINKAPI_v10_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_v10_5;
|
||||
enum _BMDDeckLinkAttributeID_v10_5 {
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_5_H) */
|
||||
|
||||
63
services/capture/sdk/DeckLinkAPI_v10_6.h
Normal file
63
services/capture/sdk/DeckLinkAPI_v10_6.h
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_6_H
|
||||
#define BMD_DECKLINKAPI_v10_6_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_c10_6;
|
||||
enum _BMDDeckLinkAttributeID_v10_6 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDesktopDisplay_v10_6 = /* 'extd' */ 0x65787464,
|
||||
};
|
||||
|
||||
typedef uint32_t BMDIdleVideoOutputOperation_v10_6;
|
||||
enum _BMDIdleVideoOutputOperation_v10_6 {
|
||||
bmdIdleVideoOutputDesktop_v10_6 = /* 'desk' */ 0x6465736B
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_6_H) */
|
||||
58
services/capture/sdk/DeckLinkAPI_v10_9.h
Normal file
58
services/capture/sdk/DeckLinkAPI_v10_9.h
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_9_H
|
||||
#define BMD_DECKLINKAPI_v10_9_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_9;
|
||||
enum _BMDDeckLinkConfigurationID_v10_9 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
bmdDeckLinkConfig1080pNotPsF_v10_9 = 'fpro',
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_9_H) */
|
||||
113
services/capture/sdk/DeckLinkAPI_v11_5.h
Normal file
113
services/capture/sdk/DeckLinkAPI_v11_5.h
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_H
|
||||
#define BMD_DECKLINKAPI_v11_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions_v11_5 = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
|
||||
|
||||
/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkFrameMetadataID_v11_5;
|
||||
enum _BMDDeckLinkFrameMetadataID_v11_5 {
|
||||
bmdDeckLinkFrameMetadataCintelFilmType_v11_5 = /* 'cfty' */ 0x63667479, // Current film type
|
||||
bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5 = /* 'cfga' */ 0x63666761, // Current film gauge
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5 = /* 'ckkl' */ 0x636B6B6C, // Raw keykode value - low 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5 = /* 'ckkh' */ 0x636B6B68, // Raw keykode value - high 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelTile1Size_v11_5 = /* 'ct1s' */ 0x63743173, // Size in bytes of compressed raw tile 1
|
||||
bmdDeckLinkFrameMetadataCintelTile2Size_v11_5 = /* 'ct2s' */ 0x63743273, // Size in bytes of compressed raw tile 2
|
||||
bmdDeckLinkFrameMetadataCintelTile3Size_v11_5 = /* 'ct3s' */ 0x63743373, // Size in bytes of compressed raw tile 3
|
||||
bmdDeckLinkFrameMetadataCintelTile4Size_v11_5 = /* 'ct4s' */ 0x63743473, // Size in bytes of compressed raw tile 4
|
||||
bmdDeckLinkFrameMetadataCintelImageWidth_v11_5 = /* 'IWPx' */ 0x49575078, // Width in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelImageHeight_v11_5 = /* 'IHPx' */ 0x49485078, // Height in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5 = /* 'mrir' */ 0x6D726972, // Red in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5 = /* 'mgir' */ 0x6D676972, // Green in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5 = /* 'mbir' */ 0x6D626972, // Blue in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5 = /* 'mrig' */ 0x6D726967, // Red in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5 = /* 'mgig' */ 0x6D676967, // Green in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5 = /* 'mbig' */ 0x6D626967, // Blue in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5 = /* 'mrib' */ 0x6D726962, // Red in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5 = /* 'mgib' */ 0x6D676962, // Green in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5 = /* 'mbib' */ 0x6D626962, // Blue in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5 = /* 'mlrr' */ 0x6D6C7272, // Red in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5 = /* 'mlgr' */ 0x6D6C6772, // Green in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5 = /* 'mlbr' */ 0x6D6C6272, // Blue in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5 = /* 'mlrg' */ 0x6D6C7267, // Red in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5 = /* 'mlgg' */ 0x6D6C6767, // Green in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5 = /* 'mlbg' */ 0x6D6C6267, // Blue in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5 = /* 'mlrb' */ 0x6D6C7262, // Red in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5 = /* 'mlgb' */ 0x6D6C6762, // Green in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5 = /* 'mlbb' */ 0x6D6C6262, // Blue in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5 = /* 'cffr' */ 0x63666672, // Film frame rate
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5 = /* 'otah' */ 0x6F746168, // Horizontal offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5 = /* 'otav' */ 0x6F746176, // Vertical offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelGainRed_v11_5 = /* 'LfRd' */ 0x4C665264, // Red gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainGreen_v11_5 = /* 'LfGr' */ 0x4C664772, // Green gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainBlue_v11_5 = /* 'LfBl' */ 0x4C66426C, // Blue gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelLiftRed_v11_5 = /* 'GnRd' */ 0x476E5264, // Red lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5 = /* 'GnGr' */ 0x476E4772, // Green lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5 = /* 'GnBl' */ 0x476E426C, // Blue lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5 = /* 'HGRd' */ 0x48475264, // Red gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5 = /* 'HGGr' */ 0x48474772, // Green gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5 = /* 'HGBl' */ 0x4847426C, // Blue gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5 = /* 'c16c' */ 0x63313663, // The image should be cropped to 16mm size
|
||||
bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5 = /* 'cinv' */ 0x63696E76, // The image should be colour inverted
|
||||
bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5 = /* 'cflr' */ 0x63666C72, // The image should be flipped horizontally
|
||||
bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5 = /* 'cfae' */ 0x63666165, // Focus Assist is currently enabled
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5 = /* 'kkii' */ 0x6B6B6969 // The keykode for this frame is interpolated from nearby keykodes
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions_v11_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ const char **value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameMetadataExtensions_v11_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_H) */
|
||||
57
services/capture/sdk/DeckLinkAPI_v11_5_1.h
Normal file
57
services/capture/sdk/DeckLinkAPI_v11_5_1.h
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_1_H
|
||||
#define BMD_DECKLINKAPI_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkStatusID_v11_5_1;
|
||||
enum _BMDDeckLinkStatusID_v11_5_1 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1 = /* 'dvif' */ 0x64766966,
|
||||
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_1_H) */
|
||||
110
services/capture/sdk/DeckLinkAPI_v14_2_1.h
Normal file
110
services/capture/sdk/DeckLinkAPI_v14_2_1.h
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2018 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v14_2_1_H
|
||||
#define BMD_DECKLINKAPI_v14_2_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoConversion_v14_2_1.h"
|
||||
#include "DeckLinkAPIGLScreenPreview_v14_2_1.h"
|
||||
#include "DeckLinkAPIMetalScreenPreview_v14_2_1.h"
|
||||
#include "DeckLinkAPIScreenPreviewCallback_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoOutput_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoInput_v14_2_1.h"
|
||||
#include "DeckLinkAPIVideoFrame3DExtensions_v14_2_1.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput_v14_2_1 = /* F222551D-13DF-4FD8-B587-9D4F19EC12C9 */ { 0xF2,0x22,0x55,0x1D,0x13,0xDF,0x4F,0xD8,0xB5,0x87,0x9D,0x4F,0x19,0xEC,0x12,0xC9 };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderInput_v14_2_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedCodec, /* in */ uint32_t requestedCodecProfile, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t* availablePacketsCount) = 0;
|
||||
virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator_v14_2_1* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderInput_v14_2_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
BMD_PUBLIC IDeckLinkIterator* CreateDeckLinkIteratorInstance_v14_2_1(void);
|
||||
BMD_PUBLIC IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v14_2_1(void);
|
||||
BMD_PUBLIC IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v14_2_1(void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v14_2_1* CreateOpenGLScreenPreviewHelper_v14_2_1(void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v14_2_1* CreateOpenGL3ScreenPreviewHelper_v14_2_1(void); // Requires OpenGL 3.2 support and provides improved performance and color handling
|
||||
BMD_PUBLIC IDeckLinkVideoConversion_v14_2_1* CreateVideoConversionInstance_v14_2_1(void);
|
||||
BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v14_2_1(void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
}
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif /* defined(BMD_DECKLINKAPI_v14_2_1_H) */
|
||||
96
services/capture/sdk/DeckLinkAPI_v15_2.h
Normal file
96
services/capture/sdk/DeckLinkAPI_v15_2.h
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2025 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v15_2_H
|
||||
#define BMD_DECKLINKAPI_v15_2_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacket_v15_2 = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ { 0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70 };
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator_v15_2 = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ { 0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7 };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets_v15_2 = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ { 0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68 };
|
||||
|
||||
/* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacket_v15_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void** data /* Optional */, /* out */ uint32_t* size /* Optional */) = 0;
|
||||
virtual uint8_t GetDID (void) = 0;
|
||||
virtual uint8_t GetSDID (void) = 0;
|
||||
virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
|
||||
virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacket_v15_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacketIterator_v15_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket_v15_2** packet) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacketIterator_v15_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets_v15_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator_v15_2** iterator) = 0;
|
||||
virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket_v15_2** packet) = 0;
|
||||
virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket_v15_2* packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
|
||||
virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket_v15_2* packet) = 0;
|
||||
virtual HRESULT DetachAllPackets (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameAncillaryPackets_v15_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPI_H) */
|
||||
189
services/capture/sdk/DeckLinkAPI_v15_3_1.h
Normal file
189
services/capture/sdk/DeckLinkAPI_v15_3_1.h
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2025 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkStatus_v15_3_1 = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ { 0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46 };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoBuffer_v15_3_1 = /* CCB4B64A-5C86-4E02-B778-885D352709FE */ { 0xCC,0xB4,0xB6,0x4A,0x5C,0x86,0x4E,0x02,0xB7,0x78,0x88,0x5D,0x35,0x27,0x09,0xFE };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoBufferAllocator_v15_3_1 = /* 3481A4DF-2B11-4E55-AC61-836B87985E9A */ { 0x34,0x81,0xA4,0xDF,0x2B,0x11,0x4E,0x55,0xAC,0x61,0x83,0x6B,0x87,0x98,0x5E,0x9A };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoBufferAllocatorProvider_v15_3_1 = /* 08B80403-BFF2-49D0-B448-8C908B9E9FC9 */ { 0x08,0xB8,0x04,0x03,0xBF,0xF2,0x49,0xD0,0xB4,0x48,0x8C,0x90,0x8B,0x9E,0x9F,0xC9 };
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoConversion_v15_3_1 = /* A48755D9-8BD5-4727-A1E9-069FDEDBA6E9 */ { 0xA4,0x87,0x55,0xD9,0x8B,0xD5,0x47,0x27,0xA1,0xE9,0x06,0x9F,0xDE,0xDB,0xA6,0xE9 };
|
||||
BMD_CONST REFIID IID_IDeckLinkProfileAttributes_v15_3_1 = /* 17D4BF8E-4911-473A-80A0-731CF6FF345B */ { 0x17,0xD4,0xBF,0x8E,0x49,0x11,0x47,0x3A,0x80,0xA0,0x73,0x1C,0xF6,0xFF,0x34,0x5B };
|
||||
BMD_CONST REFIID IID_IDeckLinkNotification_v15_3_1 = /* B85DF4C8-BDF5-47C1-8064-28162EBDD4EB */ { 0xB8,0x5D,0xF4,0xC8,0xBD,0xF5,0x47,0xC1,0x80,0x64,0x28,0x16,0x2E,0xBD,0xD4,0xEB };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Enum BMDDeckLinkStatusID_v15_3_1 - DeckLink Status ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkStatusID_v15_3_1;
|
||||
enum _BMDDeckLinkStatusID_v15_3_1
|
||||
{
|
||||
/* Integers */
|
||||
bmdDeckLinkStatusDeviceTemperature_v15_3_1 = /* 'dtmp' */ 0x64746D70,
|
||||
|
||||
bmdDeckLinkStatusEthernetLink_v15_3_1 = /* 'sels' */ 0x73656C73,
|
||||
bmdDeckLinkStatusEthernetLinkMbps_v15_3_1 = /* 'sesp' */ 0x73657370,
|
||||
|
||||
/* Strings */
|
||||
bmdDeckLinkStatusEthernetLocalIPAddress_v15_3_1 = /* 'seip' */ 0x73656970,
|
||||
bmdDeckLinkStatusEthernetSubnetMask_v15_3_1 = /* 'sesm' */ 0x7365736D,
|
||||
bmdDeckLinkStatusEthernetGatewayIPAddress_v15_3_1 = /* 'segw' */ 0x73656777,
|
||||
bmdDeckLinkStatusEthernetPrimaryDNS_v15_3_1 = /* 'sepd' */ 0x73657064,
|
||||
bmdDeckLinkStatusEthernetSecondaryDNS_v15_3_1 = /* 'sesd' */ 0x73657364,
|
||||
bmdDeckLinkStatusEthernetVideoOutputAddress_v15_3_1 = /* 'soav' */ 0x736F6176,
|
||||
bmdDeckLinkStatusEthernetAudioOutputAddress_v15_3_1 = /* 'soaa' */ 0x736F6161,
|
||||
bmdDeckLinkStatusEthernetAncillaryOutputAddress_v15_3_1 = /* 'soaA' */ 0x736F6141,
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_v15_3_1;
|
||||
enum _BMDDeckLinkAttributeID_v15_3_1
|
||||
{
|
||||
/* Strings */
|
||||
BMDDeckLinkEthernetMACAddress_v15_3_1 = /* 'eMAC' */ 0x654D4143,
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkStatus_v15_3_1 - DeckLink Status interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkStatus_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ const char** value) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void* buffer, /* in, out */ uint32_t* bufferSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkStatus_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoBuffer_v15_3_1 - Interface to encapsulate a video frame buffer; can be caller-implemented. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoBuffer_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
|
||||
virtual HRESULT StartAccess (/* in */ BMDBufferAccessFlags flags) = 0;
|
||||
virtual HRESULT EndAccess (/* in */ BMDBufferAccessFlags flags) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoBuffer_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoBufferAllocator_v15_3_1 - Buffer allocator for video. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoBufferAllocator_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT AllocateVideoBuffer (/* out */ IDeckLinkVideoBuffer_v15_3_1** allocatedBuffer) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoBufferAllocator_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoBufferAllocatorProvider_v15_3_1 - Allows EnableVideoInputWithAllocatorProvider to obtain allocators */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoBufferAllocatorProvider_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetVideoBufferAllocator (/* in */ uint32_t bufferSize, /* in */ uint32_t width, /* in */ uint32_t height, /* in */ uint32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoBufferAllocator_v15_3_1** allocator) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoBufferAllocatorProvider_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoConversion_v15_3_1 */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame* srcFrame, /* in */ IDeckLinkVideoFrame* dstFrame) = 0;
|
||||
virtual HRESULT ConvertNewFrame (/* in */ IDeckLinkVideoFrame* srcFrame, /* in */ BMDPixelFormat dstPixelFormat, /* in */ BMDColorspace dstColorspace, /* in */ IDeckLinkVideoBuffer_v15_3_1* dstBuffer, /* out */ IDeckLinkVideoFrame** dstFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoConversion_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkProfileAttributes_v15_3_1 - Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkProfileAttributes_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char** value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkProfileAttributes_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkNotification_v15_3_1 - DeckLink Notification interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkNotification_v15_3_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkNotification_v15_3_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C"
|
||||
{
|
||||
BMD_PUBLIC IDeckLinkIterator* CreateDeckLinkIteratorInstance_v15_3_1(void);
|
||||
BMD_PUBLIC IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v15_3_1(void);
|
||||
BMD_PUBLIC IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v15_3_1(void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v15_3_1(void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper_v15_3_1(void); // Requires OpenGL 3.2 support and provides improved performance and color handling
|
||||
BMD_PUBLIC IDeckLinkVideoConversion_v15_3_1* CreateVideoConversionInstance_v15_3_1(void);
|
||||
BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v15_3_1(void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
}
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
116
services/capture/sdk/LinuxCOM.h
Normal file
116
services/capture/sdk/LinuxCOM.h
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit ("EULA") available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_COM_H_
|
||||
#define __LINUX_COM_H_
|
||||
|
||||
struct REFIID
|
||||
{
|
||||
unsigned char byte0;
|
||||
unsigned char byte1;
|
||||
unsigned char byte2;
|
||||
unsigned char byte3;
|
||||
unsigned char byte4;
|
||||
unsigned char byte5;
|
||||
unsigned char byte6;
|
||||
unsigned char byte7;
|
||||
unsigned char byte8;
|
||||
unsigned char byte9;
|
||||
unsigned char byte10;
|
||||
unsigned char byte11;
|
||||
unsigned char byte12;
|
||||
unsigned char byte13;
|
||||
unsigned char byte14;
|
||||
unsigned char byte15;
|
||||
};
|
||||
|
||||
typedef REFIID CFUUIDBytes;
|
||||
#define CFUUIDGetUUIDBytes(x) x
|
||||
|
||||
typedef int HRESULT;
|
||||
typedef unsigned long ULONG;
|
||||
typedef void *LPVOID;
|
||||
|
||||
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
|
||||
#define FAILED(Status) ((HRESULT)(Status)<0)
|
||||
|
||||
#define IS_ERROR(Status) ((unsigned long)(Status) >> 31 == SEVERITY_ERROR)
|
||||
#define HRESULT_CODE(hr) ((hr) & 0xFFFF)
|
||||
#define HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1fff)
|
||||
#define HRESULT_SEVERITY(hr) (((hr) >> 31) & 0x1)
|
||||
#define SEVERITY_SUCCESS 0
|
||||
#define SEVERITY_ERROR 1
|
||||
|
||||
#define MAKE_HRESULT(sev,fac,code) ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
|
||||
|
||||
#define S_OK ((HRESULT)0x00000000L)
|
||||
#define S_FALSE ((HRESULT)0x00000001L)
|
||||
#define E_UNEXPECTED ((HRESULT)0x8000FFFFL)
|
||||
#define E_NOTIMPL ((HRESULT)0x80000001L)
|
||||
#define E_OUTOFMEMORY ((HRESULT)0x80000002L)
|
||||
#define E_INVALIDARG ((HRESULT)0x80000003L)
|
||||
#define E_NOINTERFACE ((HRESULT)0x80000004L)
|
||||
#define E_POINTER ((HRESULT)0x80000005L)
|
||||
#define E_HANDLE ((HRESULT)0x80000006L)
|
||||
#define E_ABORT ((HRESULT)0x80000007L)
|
||||
#define E_FAIL ((HRESULT)0x80000008L)
|
||||
#define E_ACCESSDENIED ((HRESULT)0x80000009L)
|
||||
|
||||
#define STDMETHODCALLTYPE
|
||||
|
||||
#define IID_IUnknown (REFIID){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}
|
||||
#define IUnknownUUID IID_IUnknown
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
class BMD_PUBLIC IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { spawn, execFileSync } from 'child_process';
|
||||
import { mkdirSync, writeFileSync } from 'node:fs';
|
||||
import { mkdirSync, writeFileSync, createReadStream, statSync, unlinkSync } from 'node:fs';
|
||||
import { dirname } from 'node:path';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { createUploadStream } from './s3/client.js';
|
||||
|
|
@ -159,6 +159,7 @@ function buildEncodeArgs({
|
|||
codec, videoBitrate, framerate,
|
||||
audioCodec, audioBitrate, audioChannels,
|
||||
container, isNetwork, isProxy = false,
|
||||
growing = false,
|
||||
}) {
|
||||
const v = VIDEO_CODECS[codec] || (isProxy ? VIDEO_CODECS.h264 : VIDEO_CODECS.prores_hq);
|
||||
const a = AUDIO_CODECS[audioCodec] || (isProxy ? AUDIO_CODECS.aac : AUDIO_CODECS.pcm_s24le);
|
||||
|
|
@ -176,9 +177,24 @@ function buildEncodeArgs({
|
|||
if (a.bitrateControl && audioBitrate) args.push('-b:a', audioBitrate);
|
||||
if (audioChannels) args.push('-ac', String(audioChannels));
|
||||
|
||||
// moov-atom placement is the difference between a Premiere-openable master and
|
||||
// a "file cannot be opened" error.
|
||||
//
|
||||
// - Growing-file masters (edit-while-record on the SMB share) MUST be
|
||||
// fragmented so a moov/mvex is present from the first frame and the file is
|
||||
// decodable while still being written. The samples live in moof/trun boxes.
|
||||
//
|
||||
// - Finalized masters (the S3-piped recording that stops cleanly) must NOT be
|
||||
// fragmented. Adobe Premiere's QuickTime/MOV importer reads the classic
|
||||
// stco/stsz/stts sample tables in a single top-level moov; a fragmented MOV
|
||||
// (moof/trun, empty sample tables) makes Premiere report "file cannot be
|
||||
// opened." We write a clean, non-fragmented MOV instead.
|
||||
// `+faststart` puts the moov before mdat on the second pass so the file is
|
||||
// instantly seekable/streamable too.
|
||||
if (fmt === 'mov' || fmt === 'mp4') {
|
||||
args.push('-movflags', '+frag_keyframe+empty_moov');
|
||||
args.push('-movflags', growing ? '+frag_keyframe+empty_moov+default_base_moof' : '+faststart');
|
||||
}
|
||||
// ProRes-in-MOV must carry a QuickTime brand or some importers reject the tag.
|
||||
args.push('-f', fmt);
|
||||
|
||||
return args;
|
||||
|
|
@ -399,17 +415,39 @@ class CaptureManager {
|
|||
container,
|
||||
isNetwork,
|
||||
isProxy: false,
|
||||
// Only the growing-file master (written to the SMB share for
|
||||
// edit-while-record) needs a fragmented MOV. The finalized, S3-piped
|
||||
// master must be a clean non-fragmented MOV so Premiere can open it.
|
||||
growing: !!growingPath,
|
||||
});
|
||||
|
||||
console.log('[capture] hires ffmpeg args:', hiresCodecArgs.join(' '));
|
||||
|
||||
const sdiFilterArgs = (sourceType === 'sdi') ? ['-vf', 'yadif=mode=1:deint=1'] : [];
|
||||
|
||||
// When growing-files is on, write directly to the SMB share so Premier
|
||||
// can mount and edit the live file. Promotion worker uploads to S3 on EOF.
|
||||
// Otherwise, stream the master to S3 via stdout pipe (legacy behavior).
|
||||
const hiresOutput = growingPath ? growingPath : 'pipe:1';
|
||||
const hiresStdio = growingPath ? ['ignore', 'ignore', 'pipe'] : ['ignore', 'pipe', 'pipe'];
|
||||
// Master output destination.
|
||||
//
|
||||
// - Growing-files on → write directly to the SMB share (fragmented MOV) so
|
||||
// Premiere can mount and edit the live file; promotion worker uploads on EOF.
|
||||
//
|
||||
// - Growing-files off → write to a LOCAL SEEKABLE temp file, then upload to
|
||||
// S3 on stop. We must NOT pipe the MOV muxer to S3 directly: the MOV/MP4
|
||||
// muxer cannot write to a non-seekable pipe without `empty_moov`, and an
|
||||
// empty_moov/fragmented MOV is exactly what makes Adobe Premiere report
|
||||
// "file cannot be opened" (no classic stco/stsz sample tables — samples
|
||||
// live in moof/trun). A seekable file lets ffmpeg write a single
|
||||
// contiguous moov with full sample tables and `+faststart` moves it to the
|
||||
// front, producing a master Premiere opens natively.
|
||||
const localMasterPath = growingPath
|
||||
? null
|
||||
: `/tmp/capture/${sessionId}.${hiresExt}`;
|
||||
if (localMasterPath) {
|
||||
try { mkdirSync(dirname(localMasterPath), { recursive: true }); }
|
||||
catch (err) { console.error('[capture] could not create temp master dir:', err.message); }
|
||||
}
|
||||
const hiresOutput = growingPath ? growingPath : localMasterPath;
|
||||
// ffmpeg now writes a file (not stdout) in both modes → stdout is unused.
|
||||
const hiresStdio = ['ignore', 'ignore', 'pipe'];
|
||||
|
||||
// For SDI we cannot open the DeckLink device a second time for a preview
|
||||
// tee, so the live HLS preview is produced as a SECOND OUTPUT of the hires
|
||||
|
|
@ -444,12 +482,12 @@ class CaptureManager {
|
|||
|
||||
const hiresProcess = spawn('ffmpeg', hiresArgs, { stdio: hiresStdio });
|
||||
|
||||
const hiresUpload = growingPath
|
||||
? Promise.resolve({ growingPath })
|
||||
: createUploadStream(S3_BUCKET, hiresKey, hiresProcess.stdout);
|
||||
|
||||
// Growing-files: nothing to upload here (promotion worker handles S3).
|
||||
// Non-growing: the master is uploaded from the finalized local file in
|
||||
// stop(), once ffmpeg has written the moov and exited cleanly — we can't
|
||||
// upload while recording because the file isn't a valid MOV until finalize.
|
||||
const processes = { hires: hiresProcess };
|
||||
const uploads = { hires: hiresUpload };
|
||||
const uploads = { hires: growingPath ? Promise.resolve({ growingPath }) : null };
|
||||
|
||||
// ── HLS tee for network sources (live preview in the UI) ──────────
|
||||
let hlsProcess = null;
|
||||
|
|
@ -515,6 +553,7 @@ class CaptureManager {
|
|||
hiresKey,
|
||||
proxyKey,
|
||||
growingPath,
|
||||
localMasterPath,
|
||||
startedAt,
|
||||
duration: 0,
|
||||
uploads,
|
||||
|
|
@ -536,17 +575,56 @@ class CaptureManager {
|
|||
|
||||
const { processes, currentSession } = this.state;
|
||||
|
||||
// Send SIGINT and WAIT for ffmpeg to exit. This is what flushes the MOV
|
||||
// trailer (writes the moov atom with the full sample tables). If we uploaded
|
||||
// before ffmpeg finalized, the object would have no moov → "moov atom not
|
||||
// found" / "file cannot be opened" in Premiere.
|
||||
const waitExit = (proc) => new Promise((resolve) => {
|
||||
if (!proc || proc.exitCode !== null || proc.signalCode !== null) return resolve();
|
||||
let done = false;
|
||||
const finish = () => { if (!done) { done = true; resolve(); } };
|
||||
proc.once('exit', finish);
|
||||
// Safety net: don't hang stop() forever if ffmpeg refuses to exit.
|
||||
setTimeout(() => { try { proc.kill('SIGKILL'); } catch (_) {} finish(); }, 15000);
|
||||
});
|
||||
|
||||
if (processes.hires) processes.hires.kill('SIGINT');
|
||||
if (processes.proxy) processes.proxy.kill('SIGINT');
|
||||
if (processes.hls) { try { processes.hls.kill('SIGINT'); } catch (_) {} }
|
||||
|
||||
// Wait for the master writer to finalize before we read/upload the file.
|
||||
await waitExit(processes.hires);
|
||||
|
||||
// Release the CIFS mount (best-effort) once the ffmpeg writers are done with
|
||||
// it. The promotion worker reads the staged file from the host/S3 side, not
|
||||
// through this container's mount, so unmounting here is safe.
|
||||
unmountGrowingShare();
|
||||
|
||||
try {
|
||||
const uploadPromises = [currentSession.uploads.hires];
|
||||
const uploadPromises = [];
|
||||
|
||||
// Non-growing: upload the finalized local master file to S3 now that the
|
||||
// moov has been written. Growing: the promotion worker handles S3.
|
||||
if (currentSession.localMasterPath) {
|
||||
let size = 0;
|
||||
try { size = statSync(currentSession.localMasterPath).size; } catch (_) {}
|
||||
if (size > 0) {
|
||||
uploadPromises.push(
|
||||
createUploadStream(
|
||||
S3_BUCKET,
|
||||
currentSession.hiresKey,
|
||||
createReadStream(currentSession.localMasterPath),
|
||||
).then(() => {
|
||||
try { unlinkSync(currentSession.localMasterPath); } catch (_) {}
|
||||
})
|
||||
);
|
||||
} else {
|
||||
console.warn('[capture] local master is 0 bytes — skipping upload:', currentSession.localMasterPath);
|
||||
}
|
||||
} else if (currentSession.uploads.hires) {
|
||||
uploadPromises.push(currentSession.uploads.hires);
|
||||
}
|
||||
|
||||
if (currentSession.uploads.proxy) uploadPromises.push(currentSession.uploads.proxy);
|
||||
await Promise.all(uploadPromises);
|
||||
} catch (error) {
|
||||
|
|
|
|||
|
|
@ -350,6 +350,83 @@ router.get('/:id/ping', async (req, res, next) => {
|
|||
} catch (err) { next(err); }
|
||||
});
|
||||
|
||||
// ── Capture-driver / SDK deployment ────────────────────────────────────────
|
||||
// Admins install/update vendor capture-card drivers on a node from the UI.
|
||||
// We resolve the node's api_url (like /:id/ping) and forward to its node-agent,
|
||||
// which runs deploy/install-driver.sh <vendor> in a privileged one-shot
|
||||
// container against the host kernel. Vendor is allowlisted here AND on the
|
||||
// agent. We never echo the agent token or proprietary paths back to the client.
|
||||
const DRIVER_VENDORS = ['blackmagic', 'aja', 'deltacast', 'ndi'];
|
||||
|
||||
// Bearer the agent expects (its NODE_TOKEN). Configured server-side; never
|
||||
// derived from client input and never returned to the browser.
|
||||
function agentAuthHeaders() {
|
||||
const tok = process.env.NODE_AGENT_TOKEN || '';
|
||||
return tok ? { Authorization: `Bearer ${tok}` } : {};
|
||||
}
|
||||
|
||||
async function resolveNode(id) {
|
||||
const r = await pool.query('SELECT id, hostname, api_url, capabilities FROM cluster_nodes WHERE id = $1', [id]);
|
||||
return r.rowCount === 0 ? null : r.rows[0];
|
||||
}
|
||||
|
||||
router.get('/:id/driver-status', requireAdmin, async (req, res, next) => {
|
||||
try {
|
||||
const node = await resolveNode(req.params.id);
|
||||
if (!node) return res.status(404).json({ error: 'Node not found' });
|
||||
if (!node.api_url) return res.status(409).json({ error: 'Node has no api_url registered' });
|
||||
try {
|
||||
const upstream = await fetch(`${node.api_url}/driver/status`, {
|
||||
headers: agentAuthHeaders(),
|
||||
signal: AbortSignal.timeout(6000),
|
||||
});
|
||||
const body = await upstream.json().catch(() => ({}));
|
||||
if (!upstream.ok) {
|
||||
return res.status(502).json({ error: 'Agent driver-status failed', status: upstream.status });
|
||||
}
|
||||
res.json(body);
|
||||
} catch (err) {
|
||||
res.status(502).json({ error: 'Node unreachable', reason: err.message });
|
||||
}
|
||||
} catch (err) { next(err); }
|
||||
});
|
||||
|
||||
router.post('/:id/install-driver', requireAdmin, async (req, res, next) => {
|
||||
try {
|
||||
const vendor = String(req.body?.vendor || '').toLowerCase();
|
||||
if (!DRIVER_VENDORS.includes(vendor)) {
|
||||
return res.status(400).json({ error: `Invalid vendor (allowed: ${DRIVER_VENDORS.join(', ')})` });
|
||||
}
|
||||
const node = await resolveNode(req.params.id);
|
||||
if (!node) return res.status(404).json({ error: 'Node not found' });
|
||||
if (!node.api_url) return res.status(409).json({ error: 'Node has no api_url registered' });
|
||||
|
||||
try {
|
||||
// DKMS builds can take minutes — generous timeout.
|
||||
const upstream = await fetch(`${node.api_url}/driver/install`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json', ...agentAuthHeaders() },
|
||||
body: JSON.stringify({ vendor }),
|
||||
signal: AbortSignal.timeout(600000),
|
||||
});
|
||||
const body = await upstream.json().catch(() => ({}));
|
||||
// Relay logs/result. install-driver.sh never echoes secrets; the agent
|
||||
// returns only its structured [install-driver] log lines + status.
|
||||
res.status(upstream.ok ? 200 : 502).json({
|
||||
ok: !!body.ok,
|
||||
vendor,
|
||||
exitCode: body.exitCode ?? null,
|
||||
rebootRequired: !!body.rebootRequired,
|
||||
status: body.status ?? null,
|
||||
logs: typeof body.logs === 'string' ? body.logs : '',
|
||||
error: body.ok ? undefined : (body.error || 'Install failed — see logs'),
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(502).json({ error: 'Node unreachable or install timed out', reason: err.message });
|
||||
}
|
||||
} catch (err) { next(err); }
|
||||
});
|
||||
|
||||
router.get('/metrics', async (req, res, next) => {
|
||||
try {
|
||||
const r = await pool.query(
|
||||
|
|
|
|||
|
|
@ -8,7 +8,16 @@ const NODE_ROLE = process.env.NODE_ROLE || 'worker';
|
|||
const AGENT_PORT = parseInt(process.env.AGENT_PORT || '7436', 10);
|
||||
const HEARTBEAT_MS = parseInt(process.env.HEARTBEAT_MS || '30000', 10);
|
||||
const LIVE_DIR = process.env.LIVE_DIR || '/mnt/NVME/MAM/wild-dragon-live';
|
||||
const VERSION = '1.3.0';
|
||||
// Host path to the checked-out repo (onboard-node.sh clones to /opt/wild-dragon).
|
||||
// The driver-install container bind-mounts this so install-driver.sh can read
|
||||
// sdk/<vendor>/ and run from deploy/. Overridable for non-standard layouts.
|
||||
const REPO_DIR = process.env.REPO_DIR || '/opt/wild-dragon';
|
||||
const VERSION = '1.4.0';
|
||||
|
||||
// Capture-driver vendor allowlist. NOTHING outside this set is ever passed to
|
||||
// the host installer — the value is only ever used to pick a script arg, never
|
||||
// interpolated into a shell string.
|
||||
const DRIVER_VENDORS = ['blackmagic', 'aja', 'deltacast', 'ndi'];
|
||||
|
||||
// Pick the host's LAN IP. Inside a bridge-mode container,
|
||||
// os.networkInterfaces() returns the container's docker-bridge IP (172.x),
|
||||
|
|
@ -227,6 +236,147 @@ async function handleSidecarStatus(containerId, res) {
|
|||
}
|
||||
}
|
||||
|
||||
// ── Agent auth ────────────────────────────────────────────────────────────
|
||||
// When NODE_TOKEN is configured, privileged control endpoints (driver install)
|
||||
// require a matching `Authorization: Bearer <NODE_TOKEN>`. mam-api forwards the
|
||||
// node's stored token. If NODE_TOKEN is empty (dev), auth is not enforced.
|
||||
function checkAgentAuth(req) {
|
||||
if (!NODE_TOKEN) return true;
|
||||
const hdr = req.headers['authorization'] || '';
|
||||
const m = /^Bearer\s+(.+)$/i.exec(hdr);
|
||||
return !!m && m[1] === NODE_TOKEN;
|
||||
}
|
||||
|
||||
// ── Driver/SDK install ────────────────────────────────────────────────────
|
||||
// Probe host presence of each capture-driver vendor. Mirrors the detection the
|
||||
// install script uses, so the UI can show "installed / not installed" without
|
||||
// running the installer. Best-effort: every probe is guarded.
|
||||
function probeDriverStatus() {
|
||||
const out = {};
|
||||
|
||||
// blackmagic — kernel module + /dev/blackmagic device tree.
|
||||
let bmLoaded = false;
|
||||
try { bmLoaded = fs.readFileSync('/proc/modules', 'utf8').split('\n').some(l => /^blackmagic\b/.test(l)); } catch (_) {}
|
||||
let bmDev = false;
|
||||
try { bmDev = fs.existsSync('/dev/blackmagic') && fs.readdirSync('/dev/blackmagic').length > 0; } catch (_) {}
|
||||
out.blackmagic = { installed: bmLoaded || bmDev, module_loaded: bmLoaded, device_present: bmDev };
|
||||
|
||||
// aja — ajantv2 kernel module.
|
||||
let ajaLoaded = false;
|
||||
try { ajaLoaded = fs.readFileSync('/proc/modules', 'utf8').split('\n').some(l => /ajantv2/.test(l)); } catch (_) {}
|
||||
out.aja = { installed: ajaLoaded, module_loaded: ajaLoaded };
|
||||
|
||||
// deltacast — videomaster module or /dev/deltacast* node.
|
||||
let dcLoaded = false;
|
||||
try { dcLoaded = fs.readFileSync('/proc/modules', 'utf8').split('\n').some(l => /videomaster/.test(l)); } catch (_) {}
|
||||
let dcDev = false;
|
||||
try { dcDev = fs.readdirSync('/dev').some(n => /^deltacast\d+$/.test(n)); } catch (_) {}
|
||||
out.deltacast = { installed: dcLoaded || dcDev, module_loaded: dcLoaded, device_present: dcDev };
|
||||
|
||||
// ndi — user-space libs only. Look in the install target + common lib dirs.
|
||||
let ndiPresent = false;
|
||||
try {
|
||||
for (const dir of ['/opt/ndi-lib', '/usr/local/lib', '/usr/lib/x86_64-linux-gnu']) {
|
||||
let entries = [];
|
||||
try { entries = fs.readdirSync(dir); } catch (_) { continue; }
|
||||
if (entries.some(n => /^libndi\.so/.test(n))) { ndiPresent = true; break; }
|
||||
}
|
||||
} catch (_) {}
|
||||
out.ndi = { installed: ndiPresent, libs_present: ndiPresent };
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
async function handleDriverStatus(res) {
|
||||
try {
|
||||
jsonResponse(res, 200, { kernel: os.release(), vendors: probeDriverStatus() });
|
||||
} catch (err) {
|
||||
jsonResponse(res, 500, { error: err.message });
|
||||
}
|
||||
}
|
||||
|
||||
// Run install-driver.sh <vendor> inside a one-shot PRIVILEGED ubuntu container.
|
||||
// The repo is bind-mounted read-only at /repo; host kernel paths are mounted so
|
||||
// dkms/modprobe/ldconfig affect the host. Logs are streamed back to the caller.
|
||||
async function handleDriverInstall(body, res) {
|
||||
const vendor = String(body?.vendor || '').toLowerCase();
|
||||
if (!DRIVER_VENDORS.includes(vendor)) {
|
||||
return jsonResponse(res, 400, { error: `Invalid vendor (allowed: ${DRIVER_VENDORS.join(', ')})` });
|
||||
}
|
||||
|
||||
let containerId;
|
||||
try {
|
||||
// Host paths the installer needs to reach the host kernel:
|
||||
// /lib/modules,/usr/src,/boot → DKMS / module build + install
|
||||
// /dev → device-node visibility + udev
|
||||
// The repo (sdk/<vendor>/ + deploy/install-driver.sh) is mounted read-only.
|
||||
const binds = [
|
||||
`${REPO_DIR}:/repo:ro`,
|
||||
'/lib/modules:/lib/modules',
|
||||
'/usr/src:/usr/src',
|
||||
'/boot:/boot',
|
||||
'/dev:/dev',
|
||||
// NDI install target lives under /opt; expose host /opt so libs land on host.
|
||||
'/opt:/opt',
|
||||
];
|
||||
|
||||
const spec = {
|
||||
Image: 'ubuntu:22.04',
|
||||
// NOTE: vendor is a value from DRIVER_VENDORS only — never arbitrary input.
|
||||
// Passed as a distinct argv element (Cmd array), not a shell string.
|
||||
Cmd: ['bash', '/repo/deploy/install-driver.sh', vendor],
|
||||
Env: [`REPO_DIR=/repo`],
|
||||
WorkingDir: '/repo',
|
||||
HostConfig: {
|
||||
Privileged: true,
|
||||
NetworkMode: 'host',
|
||||
Binds: binds,
|
||||
AutoRemove: false,
|
||||
},
|
||||
};
|
||||
|
||||
const createRes = await dockerApi('POST', '/containers/create', spec);
|
||||
if (createRes.status !== 201) {
|
||||
return jsonResponse(res, 502, { error: 'Failed to create install container', details: createRes.data });
|
||||
}
|
||||
containerId = createRes.data.Id;
|
||||
console.log(`[driver-install] ${containerId} vendor=${vendor}`);
|
||||
|
||||
const startRes = await dockerApi('POST', `/containers/${containerId}/start`);
|
||||
if (startRes.status !== 204) {
|
||||
await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {});
|
||||
return jsonResponse(res, 502, { error: 'Failed to start install container', details: startRes.data });
|
||||
}
|
||||
|
||||
// Wait for the install to finish (DKMS builds can take a minute+).
|
||||
let exitCode = null;
|
||||
for (let i = 0; i < 600; i++) {
|
||||
await new Promise(r => setTimeout(r, 1000));
|
||||
const inspect = await dockerApi('GET', `/containers/${containerId}/json`);
|
||||
const state = inspect.data?.State;
|
||||
if (state && !state.Running) { exitCode = state.ExitCode; break; }
|
||||
}
|
||||
|
||||
const logs = await fetchContainerLogs(containerId);
|
||||
const rebootRequired = /REBOOT_REQUIRED=1/.test(logs);
|
||||
const ok = exitCode === 0;
|
||||
jsonResponse(res, ok ? 200 : 500, {
|
||||
ok,
|
||||
vendor,
|
||||
exitCode,
|
||||
rebootRequired,
|
||||
logs,
|
||||
status: probeDriverStatus()[vendor] || null,
|
||||
});
|
||||
} catch (err) {
|
||||
jsonResponse(res, 500, { error: err.message });
|
||||
} finally {
|
||||
if (containerId) {
|
||||
await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ── CPU sampling (500ms window) ───────────────────────────────────────────
|
||||
function sampleCpu() {
|
||||
return new Promise(resolve => {
|
||||
|
|
@ -572,6 +722,16 @@ const server = http.createServer((req, res) => {
|
|||
const id = pathname.slice('/sidecar/'.length, -'/status'.length);
|
||||
handleSidecarStatus(id, res);
|
||||
|
||||
} else if (req.method === 'GET' && pathname === '/driver/status') {
|
||||
if (!checkAgentAuth(req)) return jsonResponse(res, 401, { error: 'Unauthorized' });
|
||||
handleDriverStatus(res);
|
||||
|
||||
} else if (req.method === 'POST' && pathname === '/driver/install') {
|
||||
if (!checkAgentAuth(req)) return jsonResponse(res, 401, { error: 'Unauthorized' });
|
||||
readBody(req)
|
||||
.then(body => handleDriverInstall(body, res))
|
||||
.catch(() => jsonResponse(res, 400, { error: 'Invalid request body' }));
|
||||
|
||||
} else if (req.method === 'GET' && pathname.startsWith('/live/')) {
|
||||
serveLiveFile(pathname, res);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,13 @@ function _normalizeNode(n, x, y) {
|
|||
online: b.online !== false,
|
||||
}));
|
||||
|
||||
// Deltacast ports — used by the Capture Drivers panel as a secondary
|
||||
// "driver present?" signal (heartbeat only reports a port if the card is seen).
|
||||
const deltacastPorts = (cap.deltacast || []).map(d => ({
|
||||
index: d.index ?? 0,
|
||||
device: d.device || null,
|
||||
}));
|
||||
|
||||
const memUsedMb = n.mem_used_mb || n.memory_used_mb || (n.mem && n.mem < 1000 ? n.mem * 1024 : n.mem || 0);
|
||||
const memTotalMb = n.mem_total_mb || n.memory_total_mb || (n.memTotal && n.memTotal < 1000 ? n.memTotal * 1024 : n.memTotal || 0);
|
||||
|
||||
|
|
@ -38,6 +45,7 @@ function _normalizeNode(n, x, y) {
|
|||
// Raw capabilities for the hardware panel
|
||||
gpus,
|
||||
bmdPorts,
|
||||
deltacastPorts,
|
||||
// Legacy flat arrays kept for the stat-row summary cards
|
||||
gpuCount: gpus.length,
|
||||
bmdCount: bmdPorts.length,
|
||||
|
|
@ -1169,6 +1177,148 @@ function Containers() {
|
|||
}
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// DriverPanel - "Capture Drivers / SDKs" section inside the node detail panel.
|
||||
// Per vendor (Blackmagic / AJA / Deltacast / NDI): shows detected status from
|
||||
// GET /cluster/:id/driver-status (host probe) cross-checked with heartbeat
|
||||
// capabilities, plus an "Install / Update" button that POSTs
|
||||
// /cluster/:id/install-driver {vendor} and streams the agent log into a live
|
||||
// output area, surfacing success/failure + "reboot required".
|
||||
const DRIVER_VENDORS = [
|
||||
{ key: 'blackmagic', label: 'Blackmagic', hint: 'Desktop Video driver (.deb)' },
|
||||
{ key: 'aja', label: 'AJA', hint: 'NTV2 driver / SDK' },
|
||||
{ key: 'deltacast', label: 'Deltacast', hint: 'VideoMaster installer' },
|
||||
{ key: 'ndi', label: 'NDI', hint: 'Redistributable runtime libs' },
|
||||
];
|
||||
|
||||
function DriverPanel({ sel }) {
|
||||
const [status, setStatus] = React.useState(null); // { kernel, vendors:{...} }
|
||||
const [loading, setLoading] = React.useState(true);
|
||||
const [statusErr, setStatusErr] = React.useState(null);
|
||||
const [busy, setBusy] = React.useState(null); // vendor key currently installing
|
||||
const [log, setLog] = React.useState(null); // { vendor, text, ok, rebootRequired }
|
||||
|
||||
const loadStatus = React.useCallback(() => {
|
||||
if (!sel.dbId) return;
|
||||
setLoading(true); setStatusErr(null);
|
||||
window.ZAMPP_API.fetch(`/cluster/${sel.dbId}/driver-status`)
|
||||
.then(d => { setStatus(d); setLoading(false); })
|
||||
.catch(e => { setStatusErr(e.message || 'unreachable'); setLoading(false); });
|
||||
}, [sel.dbId]);
|
||||
|
||||
React.useEffect(() => { loadStatus(); }, [loadStatus]);
|
||||
|
||||
// Heartbeat-reported capabilities give a second signal for the two card types
|
||||
// the cluster already enumerates (Blackmagic ports, Deltacast ports).
|
||||
const capPresent = (vendor) => {
|
||||
if (vendor === 'blackmagic') return (sel.bmdPorts || []).length > 0;
|
||||
if (vendor === 'deltacast') return (sel.deltacastPorts || []).length > 0;
|
||||
return false;
|
||||
};
|
||||
|
||||
const isInstalled = (vendor) => {
|
||||
const v = status && status.vendors && status.vendors[vendor];
|
||||
return (v && v.installed) || capPresent(vendor);
|
||||
};
|
||||
|
||||
const install = (vendor) => {
|
||||
setBusy(vendor);
|
||||
setLog({ vendor, text: `[ui] requesting install of ${vendor} on ${sel.id}…\n`, ok: null, rebootRequired: false });
|
||||
// Raw fetch: we need the JSON body (logs) even on a non-2xx response.
|
||||
fetch(`/api/v1/cluster/${sel.dbId}/install-driver`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'dragonflight-ui' },
|
||||
body: JSON.stringify({ vendor }),
|
||||
})
|
||||
.then(async (res) => {
|
||||
let body = {};
|
||||
try { body = await res.json(); } catch (_) {}
|
||||
const text = (body.logs && body.logs.trim())
|
||||
? body.logs
|
||||
: (body.error || `Install ${res.ok ? 'completed' : 'failed'} (HTTP ${res.status})`);
|
||||
setLog({ vendor, text, ok: !!body.ok, rebootRequired: !!body.rebootRequired });
|
||||
setBusy(null);
|
||||
loadStatus();
|
||||
})
|
||||
.catch((e) => {
|
||||
setLog({ vendor, text: `[ui] request failed: ${e.message}`, ok: false, rebootRequired: false });
|
||||
setBusy(null);
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ marginTop: 10 }}>
|
||||
<div style={{ fontSize: 11, color: "var(--text-3)", marginBottom: 6, display: "flex", alignItems: "center", gap: 6 }}>
|
||||
<Icon name="download" size={11} />
|
||||
Capture Drivers / SDKs
|
||||
{status && status.kernel && (
|
||||
<span style={{ marginLeft: "auto", fontSize: 10, color: "var(--text-4)", fontFamily: "var(--font-mono)" }}>
|
||||
kernel {status.kernel}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{statusErr && (
|
||||
<div style={{ fontSize: 11, color: "var(--danger)", marginBottom: 6 }}>
|
||||
Driver status unavailable: {statusErr}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div style={{ display: "flex", flexDirection: "column", gap: 4 }}>
|
||||
{DRIVER_VENDORS.map(v => {
|
||||
const installed = isInstalled(v.key);
|
||||
const installing = busy === v.key;
|
||||
return (
|
||||
<div key={v.key} style={{
|
||||
display: "flex", alignItems: "center", gap: 8,
|
||||
padding: "6px 10px", background: "var(--bg-2)", borderRadius: 5,
|
||||
border: "1px solid var(--border)",
|
||||
}}>
|
||||
<div style={{ minWidth: 0 }}>
|
||||
<div style={{ fontSize: 12, fontWeight: 600, color: "var(--text-1)" }}>{v.label}</div>
|
||||
<div style={{ fontSize: 10.5, color: "var(--text-4)" }}>{v.hint}</div>
|
||||
</div>
|
||||
<span style={{
|
||||
marginLeft: "auto", fontSize: 10, fontWeight: 600, padding: "2px 6px", borderRadius: 3,
|
||||
background: installed ? "rgba(91,250,138,0.15)" : "rgba(255,255,255,0.05)",
|
||||
color: installed ? "var(--success)" : "var(--text-3)",
|
||||
}}>
|
||||
{loading ? "…" : (installed ? "INSTALLED" : "NOT INSTALLED")}
|
||||
</span>
|
||||
<button className="btn ghost sm" disabled={installing || !!busy}
|
||||
onClick={() => install(v.key)}>
|
||||
{installing ? "Installing…" : (installed ? "Update" : "Install")}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
{log && (
|
||||
<div style={{ marginTop: 8 }}>
|
||||
<div style={{ fontSize: 10.5, marginBottom: 4, display: "flex", alignItems: "center", gap: 6 }}>
|
||||
<span style={{ color: "var(--text-3)" }}>{log.vendor} install output</span>
|
||||
{log.ok === true && <span style={{ color: "var(--success)", fontWeight: 700 }}>SUCCESS</span>}
|
||||
{log.ok === false && <span style={{ color: "var(--danger)", fontWeight: 700 }}>FAILED</span>}
|
||||
{log.rebootRequired && (
|
||||
<span style={{ marginLeft: "auto", fontSize: 10, fontWeight: 700, color: "var(--warning, #f0a500)" }}>
|
||||
⚠ REBOOT REQUIRED
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<pre style={{
|
||||
margin: 0, maxHeight: 180, overflow: "auto",
|
||||
fontSize: 10.5, lineHeight: 1.4, fontFamily: "var(--font-mono)",
|
||||
color: "var(--text-2)", background: "var(--bg-1)",
|
||||
border: "1px solid var(--border)", borderRadius: 4, padding: "6px 8px",
|
||||
whiteSpace: "pre-wrap", wordBreak: "break-word",
|
||||
}}>{log.text}</pre>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// BmdCardPanel - capture-card section inside the Cluster node detail panel.
|
||||
// Shows port chips with live video-presence dots AND the BMD SVG card diagram.
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
|
@ -1556,6 +1706,9 @@ function Cluster() {
|
|||
|
||||
{/* ── Capture cards ── */}
|
||||
<BmdCardPanel sel={sel} portSignals={portSignals} />
|
||||
|
||||
{/* ── Capture Drivers / SDKs ── */}
|
||||
<DriverPanel sel={sel} />
|
||||
<div style={{ display: "flex", gap: 6, marginTop: 6 }}>
|
||||
<button className="btn ghost sm" onClick={() => nodeLogsHint(sel)}>Logs</button>
|
||||
<button className="btn ghost sm" onClick={() => drainNode(sel)}>Drain</button>
|
||||
|
|
@ -1597,23 +1750,15 @@ function Cluster() {
|
|||
);
|
||||
}
|
||||
|
||||
// AddNodeModal — Approach A onboarding wizard. Collects a node name + role,
|
||||
// mints a one-time auth token via /auth/tokens, and renders a ready-to-paste
|
||||
// AddNodeModal — Approach A onboarding wizard. Collects a node name, mints a
|
||||
// one-time auth token via /auth/tokens, and renders a ready-to-paste
|
||||
// `curl … | bash` command that provisions the machine via deploy/onboard-node.sh.
|
||||
//
|
||||
// Role → compose PROFILES mapping (see docker-compose.worker.yml):
|
||||
// Worker → "worker"
|
||||
// Capture → "worker capture"
|
||||
// GPU → "worker gpu" (worker-l4 service, profiles: [gpu])
|
||||
const ADD_NODE_ROLES = [
|
||||
{ id: 'worker', label: 'Worker', profiles: 'worker', desc: 'CPU transcode / general jobs' },
|
||||
{ id: 'capture', label: 'Capture', profiles: 'worker capture', desc: 'SDI / DeckLink ingest' },
|
||||
{ id: 'gpu', label: 'GPU', profiles: 'worker gpu', desc: 'NVENC-accelerated transcode' },
|
||||
];
|
||||
|
||||
// No role picker: the new node self-detects its hardware (GPU / DeckLink /
|
||||
// Deltacast) in onboard-node.sh and auto-enables the matching compose profiles
|
||||
// (worker always; + gpu / + capture when present). Zero manual choice.
|
||||
function AddNodeModal({ onClose }) {
|
||||
const [nodeName, setNodeName] = React.useState('');
|
||||
const [role, setRole] = React.useState('worker');
|
||||
const [apiUrl, setApiUrl] = React.useState('');
|
||||
const [info, setInfo] = React.useState(null); // { scriptUrl, branch }
|
||||
const [command, setCommand] = React.useState(null); // generated string
|
||||
|
|
@ -1631,8 +1776,6 @@ function AddNodeModal({ onClose }) {
|
|||
.catch(() => {}); // leave apiUrl empty → user must fill it before Generate
|
||||
}, []);
|
||||
|
||||
const roleDef = ADD_NODE_ROLES.find(r => r.id === role) || ADD_NODE_ROLES[0];
|
||||
|
||||
const generate = async () => {
|
||||
setError(null);
|
||||
if (!nodeName.trim()) { setError('Node name is required.'); return; }
|
||||
|
|
@ -1654,8 +1797,7 @@ function AddNodeModal({ onClose }) {
|
|||
const scriptUrl = (info && info.scriptUrl)
|
||||
|| 'https://forge.wilddragon.net/zgaetano/wild-dragon/raw/branch/main/deploy/onboard-node.sh';
|
||||
const cmd =
|
||||
`curl -sL ${scriptUrl} | NODE_TOKEN=${token} MAM_API_URL=${apiUrl.trim()} ` +
|
||||
`NODE_ROLE=${role} PROFILES="${roleDef.profiles}" bash`;
|
||||
`curl -sL ${scriptUrl} | NODE_TOKEN=${token} MAM_API_URL=${apiUrl.trim()} bash`;
|
||||
setCommand(cmd);
|
||||
} catch (e) {
|
||||
setError(e.message || 'Network error');
|
||||
|
|
@ -1688,21 +1830,6 @@ function AddNodeModal({ onClose }) {
|
|||
value={nodeName} onChange={e => setNodeName(e.target.value)} />
|
||||
</div>
|
||||
|
||||
<div style={{ marginBottom: 14 }}>
|
||||
<label style={{ display: 'block', fontSize: 11.5, color: 'var(--text-3)', marginBottom: 5 }}>Role</label>
|
||||
<div style={{ display: 'flex', gap: 6 }}>
|
||||
{ADD_NODE_ROLES.map(rd => (
|
||||
<button key={rd.id}
|
||||
className={'btn sm' + (role === rd.id ? ' primary' : ' ghost')}
|
||||
style={{ flex: 1, flexDirection: 'column', alignItems: 'flex-start', gap: 2, padding: '8px 10px' }}
|
||||
onClick={() => setRole(rd.id)}>
|
||||
<span style={{ fontWeight: 600 }}>{rd.label}</span>
|
||||
<span style={{ fontSize: 10, opacity: 0.8 }}>{rd.desc}</span>
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ marginBottom: 4 }}>
|
||||
<label style={{ display: 'block', fontSize: 11.5, color: 'var(--text-3)', marginBottom: 5 }}>Primary API URL</label>
|
||||
<input className="field-input mono" style={{ width: '100%', fontSize: 12 }}
|
||||
|
|
@ -1723,6 +1850,9 @@ function AddNodeModal({ onClose }) {
|
|||
</div>
|
||||
</div>
|
||||
<code className="mono" style={{ display: 'block', background: 'var(--bg-2)', padding: 12, borderRadius: 6, fontSize: 11.5, lineHeight: 1.5, wordBreak: 'break-all', whiteSpace: 'pre-wrap' }}>{command}</code>
|
||||
<div style={{ fontSize: 11, color: 'var(--text-4)', marginTop: 8, lineHeight: 1.5 }}>
|
||||
Profiles (worker / capture / GPU) are auto-selected from the new machine's detected hardware — no need to choose.
|
||||
</div>
|
||||
<ol style={{ margin: '12px 0 0', paddingLeft: 18, fontSize: 12, color: 'var(--text-2)', lineHeight: 1.6 }}>
|
||||
<li>SSH into the fresh Ubuntu machine.</li>
|
||||
<li>Paste and run this command.</li>
|
||||
|
|
|
|||
Loading…
Reference in a new issue