소스 검색

decklink: Log decklink API version on plugin load

Colin Edwards 5 년 전
부모
커밋
8090ebffb1
3개의 변경된 파일48개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      plugins/decklink/platform.hpp
  2. 35 0
      plugins/decklink/plugin-main.cpp
  3. 9 0
      plugins/decklink/win/platform.cpp

+ 4 - 0
plugins/decklink/platform.hpp

@@ -2,19 +2,23 @@
 
 #if defined(_WIN32)
 #include <DeckLinkAPI.h>
+#include "win/decklink-sdk/DeckLinkAPIVersion.h"
 typedef BOOL decklink_bool_t;
 typedef BSTR decklink_string_t;
 IDeckLinkDiscovery *CreateDeckLinkDiscoveryInstance(void);
+IDeckLinkIterator *CreateDeckLinkIteratorInstance(void);
 #define IUnknownUUID IID_IUnknown
 typedef REFIID CFUUIDBytes;
 #define CFUUIDGetUUIDBytes(x) x
 #elif defined(__APPLE__)
 #include "mac/decklink-sdk/DeckLinkAPI.h"
+#include "mac/decklink-sdk/DeckLinkAPIVersion.h"
 #include <CoreFoundation/CoreFoundation.h>
 typedef bool decklink_bool_t;
 typedef CFStringRef decklink_string_t;
 #elif defined(__linux__)
 #include "linux/decklink-sdk/DeckLinkAPI.h"
+#include "linux/decklink-sdk/DeckLinkAPIVersion.h"
 typedef bool decklink_bool_t;
 typedef const char *decklink_string_t;
 #endif

+ 35 - 0
plugins/decklink/plugin-main.cpp

@@ -14,8 +14,43 @@ struct obs_source_info decklink_source_info;
 extern struct obs_output_info create_decklink_output_info();
 struct obs_output_info decklink_output_info;
 
+void log_sdk_version()
+{
+	IDeckLinkIterator *deckLinkIterator;
+	IDeckLinkAPIInformation *deckLinkAPIInformation;
+	HRESULT result;
+
+	deckLinkIterator = CreateDeckLinkIteratorInstance();
+	if (deckLinkIterator == NULL) {
+		blog(LOG_WARNING,
+		     "A DeckLink iterator could not be created.  The DeckLink drivers may not be installed");
+		return;
+	}
+
+	result = deckLinkIterator->QueryInterface(
+		IID_IDeckLinkAPIInformation, (void **)&deckLinkAPIInformation);
+	if (result == S_OK) {
+		decklink_string_t deckLinkVersion;
+		deckLinkAPIInformation->GetString(BMDDeckLinkAPIVersion,
+						  &deckLinkVersion);
+
+		blog(LOG_INFO, "Decklink API Compiled version %s",
+		     BLACKMAGIC_DECKLINK_API_VERSION_STRING);
+
+		std::string versionString;
+		DeckLinkStringToStdString(deckLinkVersion, versionString);
+
+		blog(LOG_INFO, "Decklink API Installed version %s",
+		     versionString.c_str());
+
+		deckLinkAPIInformation->Release();
+	}
+}
+
 bool obs_module_load(void)
 {
+	log_sdk_version();
+
 	deviceEnum = new DeckLinkDeviceDiscovery();
 	if (!deviceEnum->Init())
 		return true;

+ 9 - 0
plugins/decklink/win/platform.cpp

@@ -11,6 +11,15 @@ IDeckLinkDiscovery *CreateDeckLinkDiscoveryInstance(void)
 	return result == S_OK ? instance : nullptr;
 }
 
+IDeckLinkIterator *CreateDeckLinkIteratorInstance(void)
+{
+	IDeckLinkIterator *iterator;
+	const HRESULT result =
+			CoCreateInstance(CLSID_CDeckLinkIterator, nullptr, CLSCTX_ALL,
+					IID_IDeckLinkIterator, (void **)&iterator);
+	return result == S_OK ? iterator : nullptr;
+}
+
 bool DeckLinkStringToStdString(decklink_string_t input, std::string &output)
 {
 	if (input == nullptr)