Browse Source

decklink: Add Mac DeckLink project

The code specific to Mac OS X helps convert `CFString` instances to
`std::string`s.
Skyler Lipthay 10 years ago
parent
commit
496031e8c8

+ 1 - 0
plugins/CMakeLists.txt

@@ -7,6 +7,7 @@ elseif(APPLE)
 	add_subdirectory(mac-avcapture)
 	add_subdirectory(mac-avcapture)
 	add_subdirectory(mac-capture)
 	add_subdirectory(mac-capture)
 	add_subdirectory(mac-syphon)
 	add_subdirectory(mac-syphon)
+	add_subdirectory(decklink/mac)
 elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
 elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
 	add_subdirectory(linux-capture)
 	add_subdirectory(linux-capture)
 	add_subdirectory(linux-pulseaudio)
 	add_subdirectory(linux-pulseaudio)

+ 50 - 0
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)

+ 22 - 0
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<CFStringRef>(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;
+}

+ 3 - 1
plugins/decklink/platform.hpp

@@ -3,7 +3,9 @@
 #if defined(_WIN32)
 #if defined(_WIN32)
 // TODO: Windows support
 // TODO: Windows support
 #elif defined(__APPLE__)
 #elif defined(__APPLE__)
-// TODO: Mac support
+#include "mac/decklink-sdk/DeckLinkAPI.h"
+#include <CoreFoundation/CoreFoundation.h>
+typedef CFStringRef decklink_string_t;
 #elif defined(__linux__)
 #elif defined(__linux__)
 // TODO: Linux support
 // TODO: Linux support
 #endif
 #endif