diff --git a/services/capture/decklink-bridge/main.cpp b/services/capture/decklink-bridge/main.cpp index 1aa4263..f46cd5d 100644 --- a/services/capture/decklink-bridge/main.cpp +++ b/services/capture/decklink-bridge/main.cpp @@ -268,12 +268,16 @@ public: /* ── Write video frame ──────────────────────────────────────── */ void *bytes = nullptr; - /* Some SDK versions require casting to the base IDeckLinkVideoFrame - * to access GetBytes() from an IDeckLinkVideoInputFrame. */ - IDeckLinkVideoFrame *baseFrame = static_cast(videoFrame); - // SDK has changed: GetBytes() is no longer directly on IDeckLinkVideoFrame. - // Use GetFrameInternalBufferBytes() which is more robust. - videoFrame->GetFrameInternalBufferBytes(&bytes); + + IDeckLinkVideoBuffer *videoBuffer = nullptr; + if (videoFrame->QueryInterface(IID_IDeckLinkVideoBuffer, (void**)&videoBuffer) == S_OK) { + videoBuffer->GetBytes(&bytes); + videoBuffer->Release(); + } else { + fprintf(stderr, "[decklink:%d] ERROR: Failed to get IDeckLinkVideoBuffer interface\n", m_ds->device_idx); + return S_OK; + } + uint32_t sz = (uint32_t)(videoFrame->GetRowBytes() * videoFrame->GetHeight()); uint32_t frame_bytes_expected = (uint32_t)m_ds->width * (uint32_t)m_ds->height * 2;