fix(decklink): cast videoFrame to base type for GetBytes, re-enable build

This commit is contained in:
Wild Dragon Dev 2026-06-03 18:45:15 +00:00
parent 522faacdcc
commit ccaef50c09
2 changed files with 22 additions and 21 deletions

View file

@ -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

View file

@ -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<IDeckLinkVideoFrame *>(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;
}