From ccaef50c099d69831d173abe98f0c64624785c8d Mon Sep 17 00:00:00 2001 From: Wild Dragon Dev Date: Wed, 3 Jun 2026 18:45:15 +0000 Subject: [PATCH] fix(decklink): cast videoFrame to base type for GetBytes, re-enable build --- services/capture/Dockerfile | 32 +++++++++++------------ services/capture/decklink-bridge/main.cpp | 11 +++++--- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/services/capture/Dockerfile b/services/capture/Dockerfile index 7c2a2f9..afedb64 100644 --- a/services/capture/Dockerfile +++ b/services/capture/Dockerfile @@ -29,23 +29,21 @@ RUN rm -rf /fc-src/build && cmake -S /fc-src -B /fc-src/build \ && cmake --build /fc-src/build --target fc_pipe -j$(nproc) # ── Stage 1c: Build decklink-bridge binary ─────────────────────────────── -# DISABLED for now -# -# FROM debian:bookworm AS decklink-bridge-builder -# RUN apt-get update && apt-get install -y --no-install-recommends \ -# build-essential cmake ca-certificates g++ \ -# && rm -rf /var/lib/apt/lists/* -# # DeckLink SDK headers (for IDeckLinkInput etc.) -# COPY services/capture/sdk/ /decklink-sdk/ -# # Shared fc_writer module from deltacast-bridge -# COPY services/capture/deltacast-bridge/ /fc_writer/ -# # decklink-bridge source -# COPY services/capture/decklink-bridge/ /decklink-bridge/ -# RUN rm -rf /decklink-bridge/build && cmake -S /decklink-bridge -B /decklink-bridge/build \ -# -DCMAKE_BUILD_TYPE=Release \ -# -DDECKLINK_SDK_DIR=/decklink-sdk \ -# -DDELTACAST_BRIDGE_DIR=/fc_writer \ -# && cmake --build /decklink-bridge/build -j$(nproc) +FROM debian:bookworm AS decklink-bridge-builder +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential cmake ca-certificates g++ \ + && rm -rf /var/lib/apt/lists/* +# DeckLink SDK headers (for IDeckLinkInput etc.) +COPY services/capture/sdk/ /decklink-sdk/ +# Shared fc_writer module from deltacast-bridge +COPY services/capture/deltacast-bridge/ /fc_writer/ +# decklink-bridge source +COPY services/capture/decklink-bridge/ /decklink-bridge/ +RUN rm -rf /decklink-bridge/build && cmake -S /decklink-bridge -B /decklink-bridge/build \ + -DCMAKE_BUILD_TYPE=Release \ + -DDECKLINK_SDK_DIR=/decklink-sdk \ + -DDELTACAST_BRIDGE_DIR=/fc_writer \ + && cmake --build /decklink-bridge/build -j$(nproc) # ── Stage 2: Build FFmpeg with DeckLink + NVENC (HEVC/H264) support ───────── # All-Intra HEVC NVENC is the master codec for growing-file ingest (see diff --git a/services/capture/decklink-bridge/main.cpp b/services/capture/decklink-bridge/main.cpp index 63f3e09..bc1e163 100644 --- a/services/capture/decklink-bridge/main.cpp +++ b/services/capture/decklink-bridge/main.cpp @@ -268,13 +268,16 @@ public: /* ── Write video frame ──────────────────────────────────────── */ void *bytes = nullptr; - videoFrame->GetBytes(&bytes); + /* Some SDK versions require casting to the base IDeckLinkVideoFrame + * to access GetBytes() from an IDeckLinkVideoInputFrame. */ + IDeckLinkVideoFrame *baseFrame = static_cast(videoFrame); + baseFrame->GetBytes(&bytes); uint32_t sz = (uint32_t)(videoFrame->GetRowBytes() * videoFrame->GetHeight()); - uint32_t expected = (uint32_t)m_ds->width * (uint32_t)m_ds->height * 2; - if (sz != expected) { + uint32_t frame_bytes_expected = (uint32_t)m_ds->width * (uint32_t)m_ds->height * 2; + if (sz != frame_bytes_expected) { fprintf(stderr, "[decklink:%d] WARN: frame sz=%u != expected %u — skipping\n", - m_ds->device_idx, sz, expected); + m_ds->device_idx, sz, frame_bytes_expected); return S_OK; }