Browse Source

aja: Prepare plugins for new libajantv2 repo

Support building AJA plugins with either the new libajantv2 library, or
the deprecated ntv2 library.

Finder scripts updated to search for libajantv2 and fall back to ntv2 if
not found. This allows this PR to be merged without requiring a
corresponding update to the pre-built obs-deps packages.
Paul Hindt 2 years ago
parent
commit
182410cf6c

+ 0 - 8
UI/frontend-plugins/aja-output-ui/CMakeLists.txt

@@ -43,14 +43,6 @@ target_link_libraries(
           OBS::ui-support
           OBS::ui-support
           Qt::Widgets
           Qt::Widgets
           AJA::LibAJANTV2
           AJA::LibAJANTV2
-          $<$<PLATFORM_ID:Windows>:ws2_32.lib>
-          $<$<PLATFORM_ID:Windows>:setupapi.lib>
-          $<$<PLATFORM_ID:Windows>:Winmm.lib>
-          $<$<PLATFORM_ID:Windows>:netapi32.lib>
-          $<$<PLATFORM_ID:Windows>:Shlwapi.lib>
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>>"
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>"
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,IOKit.framework>>"
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:X11::X11>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Qt::GuiPrivate>)
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Qt::GuiPrivate>)
 
 

+ 42 - 3
cmake/Modules/FindLibAJANTV2.cmake

@@ -14,8 +14,8 @@ else()
 endif()
 endif()
 
 
 find_path(
 find_path(
-  AJA_LIBRARIES_INCLUDE_DIR
-  NAMES ajalibraries
+  _LIBAJANTV2_NEW_INCLUDE_DIR
+  NAMES libajantv2
   HINTS ENV
   HINTS ENV
         AJASDKPath${_lib_suffix}
         AJASDKPath${_lib_suffix}
         ENV
         ENV
@@ -32,6 +32,38 @@ find_path(
   PATHS /usr/include /usr/local/include /opt/local/include /sw/include
   PATHS /usr/include /usr/local/include /opt/local/include /sw/include
   PATH_SUFFIXES include)
   PATH_SUFFIXES include)
 
 
+if(${_LIBAJANTV2_NEW_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_NEW_INCLUDE_DIR-NOTFOUND")
+  find_path(
+    _LIBAJANTV2_OLD_INCLUDE_DIR
+    NAMES libajantv2
+    HINTS ENV
+          AJASDKPath${_lib_suffix}
+          ENV
+          AJASDKPath
+          ENV
+          DepsPath${_lib_suffix}
+          ENV
+          DepsPath
+          ${AJASDKPath${_lib_suffix}}
+          ${AJASDKPath}
+          ${DepsPath${_lib_suffix}}
+          ${DepsPath}
+          ${_AJA_NTV2_INCLUDE_DIRS}
+    PATHS /usr/include /usr/local/include /opt/local/include /sw/include
+    PATH_SUFFIXES include)
+  if(${_LIBAJANTV2_OLD_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_OLD_INCLUDE_DIR-NOTFOUND")
+    set(AJA_LIBRARIES_INCLUDE_DIR ${_LIBAJANTV2_OLD_INCLUDE_DIR}/ajalibraries)
+    if(NOT LibAJANTV2_FIND_QUIETLY)
+      message(DEPRECATION "aja: Using old ntv2 library")
+    endif()
+  endif()
+else()
+  set(AJA_LIBRARIES_INCLUDE_DIR ${_LIBAJANTV2_NEW_INCLUDE_DIR}/libajantv2)
+  if(NOT LibAJANTV2_FIND_QUIETLY)
+    message(STATUS "aja: Using new libajantv2 library")
+  endif()
+endif()
+
 find_library(
 find_library(
   AJA_NTV2_LIB
   AJA_NTV2_LIB
   NAMES ${_AJA_NTV2_LIBRARIES} ajantv2 libajantv2
   NAMES ${_AJA_NTV2_LIBRARIES} ajantv2 libajantv2
@@ -99,10 +131,17 @@ find_package_handle_standard_args(LibAJANTV2 DEFAULT_MSG AJA_LIBRARIES_INCLUDE_D
 mark_as_advanced(AJA_LIBRARIES_INCLUDE_DIR AJA_NTV2_LIB)
 mark_as_advanced(AJA_LIBRARIES_INCLUDE_DIR AJA_NTV2_LIB)
 
 
 if(LIBAJANTV2_FOUND)
 if(LIBAJANTV2_FOUND)
-  set(AJA_LIBRARIES_INCLUDE_DIR ${AJA_LIBRARIES_INCLUDE_DIR}/ajalibraries)
+  set(AJA_LIBRARIES_INCLUDE_DIR ${AJA_LIBRARIES_INCLUDE_DIR})
   set(AJA_LIBRARIES_INCLUDE_DIRS
   set(AJA_LIBRARIES_INCLUDE_DIRS
       ${AJA_LIBRARIES_INCLUDE_DIR} ${AJA_LIBRARIES_INCLUDE_DIR}/ajaanc ${AJA_LIBRARIES_INCLUDE_DIR}/ajabase
       ${AJA_LIBRARIES_INCLUDE_DIR} ${AJA_LIBRARIES_INCLUDE_DIR}/ajaanc ${AJA_LIBRARIES_INCLUDE_DIR}/ajabase
       ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2 ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2/includes)
       ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2 ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2/includes)
+  if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2/src/win)
+  elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2/src/mac)
+  elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${AJA_LIBRARIES_INCLUDE_DIR}/ajantv2/src/lin)
+  endif()
 
 
   set(LIBAJANTV2_LIBRARIES ${AJA_NTV2_LIB})
   set(LIBAJANTV2_LIBRARIES ${AJA_NTV2_LIB})
   if(AJA_NTV2_DEBUG_LIB STREQUAL "AJA_NTV2_DEBUG_LIB-NOTFOUND")
   if(AJA_NTV2_DEBUG_LIB STREQUAL "AJA_NTV2_DEBUG_LIB-NOTFOUND")

+ 50 - 9
cmake/finders/FindLibAJANTV2.cmake

@@ -56,11 +56,30 @@ if(PKG_CONFIG_FOUND)
 endif()
 endif()
 
 
 find_path(
 find_path(
-  LibAJANTV2_INCLUDE_DIR
-  NAMES ajalibraries
+  _LIBAJANTV2_NEW_INCLUDE_DIR
+  NAMES libajantv2
   HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
   HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
   PATHS /usr/include /usr/local/include
   PATHS /usr/include /usr/local/include
-  DOC "LibAJANTV2 include directory")
+  DOC "LibAJANTV2 (new) include directory")
+if(${_LIBAJANTV2_NEW_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_NEW_INCLUDE_DIR-NOTFOUND")
+  find_path(
+    _LIBAJANTV2_OLD_INCLUDE_DIR
+    NAMES ajalibraries
+    HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
+    PATHS /usr/include /usr/local/include
+    DOC "LibAJANTV2 (old) include directory")
+  if(NOT ${_LIBAJANTV2_OLD_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_OLD_INCLUDE_DIR-NOTFOUND")
+    set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_OLD_INCLUDE_DIR}/ajalibraries)
+    if(NOT LibAJANTV2_FIND_QUIETLY)
+      message(DEPRECATION "aja: Using old ntv2 library")
+    endif()
+  endif()
+else()
+  set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_NEW_INCLUDE_DIR}/libajantv2)
+  if(NOT LibAJANTV2_FIND_QUIETLY)
+    message(STATUS "aja: Using new libajantv2 library")
+  endif()
+endif()
 
 
 find_library(
 find_library(
   LibAJANTV2_LIBRARY_RELEASE
   LibAJANTV2_LIBRARY_RELEASE
@@ -97,7 +116,7 @@ endif()
 find_package_handle_standard_args(
 find_package_handle_standard_args(
   LibAJANTV2
   LibAJANTV2
   REQUIRED_VARS LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR
   REQUIRED_VARS LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR
-  VERSION_VAR LibAJANTV2_VERSION REASON_FAILURE_MESSAGE LibAJANTV2_ERROR_REASON)
+  VERSION_VAR LibAJANTV2_VERSION REASON_FAILURE_MESSAGE ${LibAJANTV2_ERROR_REASON})
 mark_as_advanced(LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR)
 mark_as_advanced(LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR)
 unset(LibAJANTV2_ERROR_REASON)
 unset(LibAJANTV2_ERROR_REASON)
 
 
@@ -105,11 +124,19 @@ if(LibAJANTV2_FOUND)
   list(
   list(
     APPEND
     APPEND
     LibAJANTV2_INCLUDE_DIRS
     LibAJANTV2_INCLUDE_DIRS
-    ${LibAJANTV2_INCLUDE_DIR}/ajalibraries
-    ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajaanc
-    ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajabase
-    ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajantv2
-    ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajantv2/includes)
+    ${LibAJANTV2_INCLUDE_DIR}
+    ${LibAJANTV2_INCLUDE_DIR}/ajaanc
+    ${LibAJANTV2_INCLUDE_DIR}/ajabase
+    ${LibAJANTV2_INCLUDE_DIR}/ajantv2
+    ${LibAJANTV2_INCLUDE_DIR}/ajantv2/includes)
+  if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/win)
+  elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/mac)
+  elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
+    list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/lin)
+  endif()
+
   set(LibAJANTV2_LIBRARIES ${LibAJANTV2_LIBRARY})
   set(LibAJANTV2_LIBRARIES ${LibAJANTV2_LIBRARY})
   mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY)
   mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY)
 
 
@@ -142,6 +169,20 @@ if(LibAJANTV2_FOUND)
     endif()
     endif()
 
 
     set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}")
     set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}")
+    set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_LINK_OPTIONS $<$<PLATFORM_ID:Windows>:/IGNORE:4099>)
+    set_property(
+      TARGET AJA::LibAJANTV2
+      APPEND
+      PROPERTY INTERFACE_LINK_LIBRARIES
+               $<$<PLATFORM_ID:Windows>:netapi32.lib>
+               $<$<PLATFORM_ID:Windows>:setupapi.lib>
+               $<$<PLATFORM_ID:Windows>:shlwapi.lib>
+               $<$<PLATFORM_ID:Windows>:wbemuuid.lib>
+               $<$<PLATFORM_ID:Windows>:winmm.lib>
+               $<$<PLATFORM_ID:Windows>:ws2_32.lib>
+               "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>>"
+               "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>"
+               "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,IOKit.framework>>")
     set_property(
     set_property(
       TARGET AJA::LibAJANTV2
       TARGET AJA::LibAJANTV2
       APPEND
       APPEND

+ 1 - 13
plugins/aja/CMakeLists.txt

@@ -58,19 +58,7 @@ target_compile_options(
   aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-Wno-deprecated-declarations>
   aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-Wno-deprecated-declarations>
                      $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:-Wno-unused-variable>)
                      $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:-Wno-unused-variable>)
 
 
-target_link_libraries(
-  aja
-  PRIVATE OBS::aja-support
-          $<$<PLATFORM_ID:Windows>:netapi32.lib>
-          $<$<PLATFORM_ID:Windows>:setupapi.lib>
-          $<$<PLATFORM_ID:Windows>:shlwapi.lib>
-          $<$<PLATFORM_ID:Windows>:winmm.lib>
-          $<$<PLATFORM_ID:Windows>:ws2_32.lib>
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>>"
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>"
-          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,IOKit.framework>>")
-
-target_link_options(aja PRIVATE $<$<PLATFORM_ID:Windows>:/IGNORE:4099>)
+target_link_libraries(aja PRIVATE OBS::aja-support)
 
 
 if(OS_WINDOWS)
 if(OS_WINDOWS)
   configure_file(cmake/windows/obs-module.rc.in win-aja.rc)
   configure_file(cmake/windows/obs-module.rc.in win-aja.rc)

+ 9 - 8
plugins/aja/aja-widget-io.cpp

@@ -1,6 +1,7 @@
 #include "aja-widget-io.hpp"
 #include "aja-widget-io.hpp"
 #include "aja-common.hpp"
 #include "aja-common.hpp"
 
 
+#include <ajantv2/includes/ntv2enums.h>
 #include <ajantv2/includes/ntv2utils.h>
 #include <ajantv2/includes/ntv2utils.h>
 #include <ajantv2/includes/ntv2signalrouter.h>
 #include <ajantv2/includes/ntv2signalrouter.h>
 
 
@@ -35,21 +36,21 @@ static const WidgetInputSocket kWidgetInputSockets[] = {
 	//NTV2InputCrosspointID        | NTV2WidgetID                | Name | DatastreamIndex
 	//NTV2InputCrosspointID        | NTV2WidgetID                | Name | DatastreamIndex
 	{ NTV2_INPUT_CROSSPOINT_INVALID, NTV2_WIDGET_INVALID,          "",                    -1},
 	{ NTV2_INPUT_CROSSPOINT_INVALID, NTV2_WIDGET_INVALID,          "",                    -1},
 	{ NTV2_XptFrameBuffer1Input,     NTV2_WgtFrameBuffer1,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer1Input,     NTV2_WgtFrameBuffer1,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer1BInput,    NTV2_WgtFrameBuffer1,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer1DS2Input,  NTV2_WgtFrameBuffer1,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer2Input,     NTV2_WgtFrameBuffer2,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer2Input,     NTV2_WgtFrameBuffer2,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer2BInput,    NTV2_WgtFrameBuffer2,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer2DS2Input,  NTV2_WgtFrameBuffer2,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer3Input,     NTV2_WgtFrameBuffer3,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer3Input,     NTV2_WgtFrameBuffer3,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer3BInput,    NTV2_WgtFrameBuffer3,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer3DS2Input,  NTV2_WgtFrameBuffer3,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer4Input,     NTV2_WgtFrameBuffer4,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer4Input,     NTV2_WgtFrameBuffer4,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer4BInput,    NTV2_WgtFrameBuffer4,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer4DS2Input,  NTV2_WgtFrameBuffer4,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer5Input,     NTV2_WgtFrameBuffer5,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer5Input,     NTV2_WgtFrameBuffer5,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer5BInput,    NTV2_WgtFrameBuffer5,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer5DS2Input,  NTV2_WgtFrameBuffer5,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer6Input,     NTV2_WgtFrameBuffer6,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer6Input,     NTV2_WgtFrameBuffer6,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer6BInput,    NTV2_WgtFrameBuffer6,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer6DS2Input,  NTV2_WgtFrameBuffer6,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer7Input,     NTV2_WgtFrameBuffer7,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer7Input,     NTV2_WgtFrameBuffer7,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer7BInput,    NTV2_WgtFrameBuffer7,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer7DS2Input,  NTV2_WgtFrameBuffer7,                kFramebufferNickname,   1},
 	{ NTV2_XptFrameBuffer8Input,     NTV2_WgtFrameBuffer8,                kFramebufferNickname,   0},
 	{ NTV2_XptFrameBuffer8Input,     NTV2_WgtFrameBuffer8,                kFramebufferNickname,   0},
-	{ NTV2_XptFrameBuffer8BInput,    NTV2_WgtFrameBuffer8,                kFramebufferNickname,   1},
+	{ NTV2_XptFrameBuffer8DS2Input,  NTV2_WgtFrameBuffer8,                kFramebufferNickname,   1},
 	{ NTV2_XptCSC1VidInput,          NTV2_WgtCSC1,                        kCSCNickname,           0},
 	{ NTV2_XptCSC1VidInput,          NTV2_WgtCSC1,                        kCSCNickname,           0},
 	{ NTV2_XptCSC1KeyInput,          NTV2_WgtCSC1,                        kCSCNickname,           1},
 	{ NTV2_XptCSC1KeyInput,          NTV2_WgtCSC1,                        kCSCNickname,           1},
 	{ NTV2_XptCSC2VidInput,          NTV2_WgtCSC2,                        kCSCNickname,           0},
 	{ NTV2_XptCSC2VidInput,          NTV2_WgtCSC2,                        kCSCNickname,           0},