From 32fe6aa22a1ac1302db540289e03da6cee445700 Mon Sep 17 00:00:00 2001 From: JohannesItten Date: Tue, 7 Jul 2026 19:58:46 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20DeckLink=20macOS=20build=20=E2=80=94=20C?= =?UTF-8?q?FStringRef=20and=20CoreFoundation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetDisplayName returns CFStringRef on macOS (not const char*). Add #ifdef __APPLE__ handling in DeckLinkSender.hpp and DeckLinkReceiver.hpp, and link -framework CoreFoundation in decklinkin/decklinkout CMakeLists. Co-Authored-By: Claude Sonnet 4.6 --- nodes/decklinkin/CMakeLists.txt | 3 +++ nodes/decklinkout/CMakeLists.txt | 3 +++ shared/DeckLinkReceiver.hpp | 20 +++++++++++++++++--- shared/DeckLinkSender.hpp | 20 +++++++++++++++++--- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/nodes/decklinkin/CMakeLists.txt b/nodes/decklinkin/CMakeLists.txt index 4f3a9b4..51f7741 100644 --- a/nodes/decklinkin/CMakeLists.txt +++ b/nodes/decklinkin/CMakeLists.txt @@ -8,4 +8,7 @@ add_executable(dmf-node-decklinkin target_compile_features(dmf-node-decklinkin PRIVATE cxx_std_20) target_include_directories(dmf-node-decklinkin PRIVATE "${DECKLINK_INCLUDE}") target_link_libraries(dmf-node-decklinkin PRIVATE dmf-shared ${CMAKE_DL_LIBS}) +if(APPLE) + target_link_libraries(dmf-node-decklinkin PRIVATE "-framework CoreFoundation") +endif() install(TARGETS dmf-node-decklinkin RUNTIME DESTINATION bin) diff --git a/nodes/decklinkout/CMakeLists.txt b/nodes/decklinkout/CMakeLists.txt index f447411..efb5245 100644 --- a/nodes/decklinkout/CMakeLists.txt +++ b/nodes/decklinkout/CMakeLists.txt @@ -8,4 +8,7 @@ add_executable(dmf-node-decklinkout target_compile_features(dmf-node-decklinkout PRIVATE cxx_std_20) target_include_directories(dmf-node-decklinkout PRIVATE "${DECKLINK_INCLUDE}") target_link_libraries(dmf-node-decklinkout PRIVATE dmf-shared ${CMAKE_DL_LIBS}) +if(APPLE) + target_link_libraries(dmf-node-decklinkout PRIVATE "-framework CoreFoundation") +endif() install(TARGETS dmf-node-decklinkout RUNTIME DESTINATION bin) diff --git a/shared/DeckLinkReceiver.hpp b/shared/DeckLinkReceiver.hpp index 0aeafce..0bc04fd 100644 --- a/shared/DeckLinkReceiver.hpp +++ b/shared/DeckLinkReceiver.hpp @@ -11,6 +11,9 @@ #include #include #include +#ifdef __APPLE__ +#include +#endif #include "Signal.hpp" namespace dmf { @@ -268,9 +271,20 @@ private: IDeckLinkInput* inp = nullptr; if (device->QueryInterface(IID_IDeckLinkInput, (void**)&inp) == S_OK) { inp->Release(); - const char* name = nullptr; - device->GetDisplayName(&name); - devices.push_back({index, name ? name : "?"}); + std::string name = "?"; +#ifdef __APPLE__ + CFStringRef cfName = nullptr; + if (device->GetDisplayName(&cfName) == S_OK && cfName) { + char buf[256] = {}; + CFStringGetCString(cfName, buf, sizeof(buf), kCFStringEncodingUTF8); + name = buf; + CFRelease(cfName); + } +#else + const char* cname = nullptr; + if (device->GetDisplayName(&cname) == S_OK && cname) name = cname; +#endif + devices.push_back({index, name}); raw_devices.push_back(device); index++; } else { diff --git a/shared/DeckLinkSender.hpp b/shared/DeckLinkSender.hpp index 75d3aff..cb7f5d0 100644 --- a/shared/DeckLinkSender.hpp +++ b/shared/DeckLinkSender.hpp @@ -10,6 +10,9 @@ #include #include #include +#ifdef __APPLE__ +#include +#endif #include "Signal.hpp" #include "V210.hpp" @@ -263,9 +266,20 @@ private: IDeckLinkOutput* out = nullptr; if (device->QueryInterface(IID_IDeckLinkOutput, (void**)&out) == S_OK) { out->Release(); - const char* name = nullptr; - device->GetDisplayName(&name); - devices.push_back({index, name ? name : "?"}); + std::string name = "?"; +#ifdef __APPLE__ + CFStringRef cfName = nullptr; + if (device->GetDisplayName(&cfName) == S_OK && cfName) { + char buf[256] = {}; + CFStringGetCString(cfName, buf, sizeof(buf), kCFStringEncodingUTF8); + name = buf; + CFRelease(cfName); + } +#else + const char* cname = nullptr; + if (device->GetDisplayName(&cname) == S_OK && cname) name = cname; +#endif + devices.push_back({index, name}); raw_devices.push_back(device); index++; } else {