PR #25507 opened by Jake (jakefineman) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25507 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25507.patch
Since 0cd75dbfa0 and 27e94281d1 added QueryInterface() implementations that compare against IID_IUnknown, building with --enable-decklink on macOS fails: ``` libavdevice/decklink_dec.cpp:138:43: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_dec.cpp:603:43: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_enc.cpp:120:39: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_enc.cpp:181:39: error: use of undeclared identifier 'IID_IUnknown' ``` The Linux SDK defines IID_IUnknown in LinuxCOM.h and Windows gets it from the platform COM headers. The macOS SDK uses CoreFoundation's COM types from CFPlugInCOM.h, which only provide IUnknownUUID. This defines IID_IUnknown from it with CFUUIDGetUUIDBytes(), the same definition the macOS samples in the DeckLink SDK use (Examples/Mac/platform.h), so the GUID bytes are not duplicated. The definition is limited to __APPLE__, so Linux and Windows are unchanged. This affects every release since n8.1. Tested on macOS arm64 with Apple clang 21 and DeckLink SDK 16.0: all five libavdevice/decklink_* objects fail to compile before the patch and compile after it, and `ffmpeg -devices` lists decklink. I could not test capture or playback with a device. >From f217768644d5775393c368fdc45b60ee4df8c684 Mon Sep 17 00:00:00 2001 From: Jake Fineman <[email protected]> Date: Mon, 26 Oct 2026 22:39:23 -0400 Subject: [PATCH] avdevice/decklink: fix build on macOS by defining IID_IUnknown Commits 0cd75dbfa0 and 27e94281d1 added QueryInterface() implementations that compare the requested interface against IID_IUnknown. The Linux SDK defines it in LinuxCOM.h and the Windows SDK gets it from the platform COM headers, but the macOS SDK uses CoreFoundation's COM types from <CoreFoundation/CFPlugInCOM.h>, which only provide IUnknownUUID as a CFUUIDRef. Since then, building with --enable-decklink on macOS fails: libavdevice/decklink_dec.cpp:138:43: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_dec.cpp:603:43: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_enc.cpp:120:39: error: use of undeclared identifier 'IID_IUnknown' libavdevice/decklink_enc.cpp:181:39: error: use of undeclared identifier 'IID_IUnknown' On macOS, REFIID is CFUUIDBytes, so derive IID_IUnknown from IUnknownUUID with CFUUIDGetUUIDBytes(), the same definition used by the macOS samples shipped with the DeckLink SDK. This avoids duplicating the GUID bytes, and CFUUIDGetConstantUUIDWithBytes() returns a constant that must not be released. The definition is limited to __APPLE__, so Linux and Windows builds are unchanged. Tested with DeckLink SDK 16.0 and Apple clang 21 on macOS arm64. Signed-off-by: Jake Fineman <[email protected]> --- libavdevice/decklink_common.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavdevice/decklink_common.h b/libavdevice/decklink_common.h index 11430787ced..011c32dce49 100644 --- a/libavdevice/decklink_common.h +++ b/libavdevice/decklink_common.h @@ -103,6 +103,13 @@ static inline bool DECKLINK_IsEqualIID(const REFIID& riid1, const REFIID& riid2) } #endif +#ifdef __APPLE__ +/* The macOS SDK uses CoreFoundation's COM types (CFPlugInCOM.h), which + * only provide IUnknownUUID as a CFUUIDRef, not IID_IUnknown as a REFIID + * like the Linux and Windows SDKs do. */ +#define IID_IUnknown CFUUIDGetUUIDBytes(IUnknownUUID) +#endif + class decklink_output_callback; class decklink_input_callback; -- 2.54.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
