From 496031e8c891c0b53ef2fc335ae1f8828bd7d56f Mon Sep 17 00:00:00 2001 From: Skyler Lipthay Date: Wed, 18 Feb 2015 15:21:30 -0800 Subject: [PATCH] decklink: Add Mac DeckLink project The code specific to Mac OS X helps convert `CFString` instances to `std::string`s. --- plugins/CMakeLists.txt | 1 + plugins/decklink/mac/CMakeLists.txt | 50 +++++++++++++++++++++++++++++ plugins/decklink/mac/platform.cpp | 22 +++++++++++++ plugins/decklink/platform.hpp | 4 ++- 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 plugins/decklink/mac/CMakeLists.txt create mode 100644 plugins/decklink/mac/platform.cpp diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 66a45ca0c..b6c8cc2e2 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -7,6 +7,7 @@ elseif(APPLE) add_subdirectory(mac-avcapture) add_subdirectory(mac-capture) add_subdirectory(mac-syphon) + add_subdirectory(decklink/mac) elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") add_subdirectory(linux-capture) add_subdirectory(linux-pulseaudio) diff --git a/plugins/decklink/mac/CMakeLists.txt b/plugins/decklink/mac/CMakeLists.txt new file mode 100644 index 000000000..ce0b9bdf2 --- /dev/null +++ b/plugins/decklink/mac/CMakeLists.txt @@ -0,0 +1,50 @@ +project(mac-decklink) + +find_library(COREFOUNDATION CoreFoundation) + +include_directories(${COREFOUNDATION}) + +set(mac-decklink-sdk_HEADERS + decklink-sdk/DeckLinkAPI.h + decklink-sdk/DeckLinkAPIConfiguration.h + decklink-sdk/DeckLinkAPIDeckControl.h + decklink-sdk/DeckLinkAPIDiscovery.h + decklink-sdk/DeckLinkAPIModes.h + decklink-sdk/DeckLinkAPIStreaming.h + decklink-sdk/DeckLinkAPITypes.h + decklink-sdk/DeckLinkAPIVersion.h + ) + +set(mac-decklink-sdk_SOURCES + decklink-sdk/DeckLinkAPIDispatch.cpp + ) + +set(mac-decklink_HEADERS + ../platform.hpp + ../decklink.hpp + ../decklink-device-instance.hpp + ../decklink-device-discovery.hpp + ../decklink-device.hpp + ../decklink-device-mode.hpp + ) + +set(mac-decklink_SOURCES + ../plugin-main.cpp + ../decklink.cpp + ../decklink-device-instance.cpp + ../decklink-device-discovery.cpp + ../decklink-device.cpp + ../decklink-device-mode.cpp + platform.cpp) + +add_library(mac-decklink MODULE + ${mac-decklink_SOURCES} + ${mac-decklink_HEADERS} + ${mac-decklink-sdk_HEADERS} + ${mac-decklink-sdk_SOURCES}) + +target_link_libraries(mac-decklink + libobs + ${COREFOUNDATION}) + +install_obs_plugin_with_data(mac-decklink ../data) diff --git a/plugins/decklink/mac/platform.cpp b/plugins/decklink/mac/platform.cpp new file mode 100644 index 000000000..02e8a59ba --- /dev/null +++ b/plugins/decklink/mac/platform.cpp @@ -0,0 +1,22 @@ +#include "../platform.hpp" + +bool DeckLinkStringToStdString(decklink_string_t input, std::string& output) +{ + const CFStringRef string = static_cast(input); + const CFIndex length = CFStringGetLength(string); + const CFIndex maxLength = CFStringGetMaximumSizeForEncoding(length, + kCFStringEncodingASCII) + 1; + + char * const buffer = new char[maxLength]; + + const bool result = CFStringGetCString(string, buffer, maxLength, + kCFStringEncodingASCII); + + if (result) + output = std::string(buffer); + + delete[] buffer; + CFRelease(string); + + return result; +} diff --git a/plugins/decklink/platform.hpp b/plugins/decklink/platform.hpp index 178612ed1..99f7dab66 100644 --- a/plugins/decklink/platform.hpp +++ b/plugins/decklink/platform.hpp @@ -3,7 +3,9 @@ #if defined(_WIN32) // TODO: Windows support #elif defined(__APPLE__) -// TODO: Mac support +#include "mac/decklink-sdk/DeckLinkAPI.h" +#include +typedef CFStringRef decklink_string_t; #elif defined(__linux__) // TODO: Linux support #endif