From 182410cf6cf45ac02b2c871e9fd67c856d67e25d Mon Sep 17 00:00:00 2001 From: Paul Hindt Date: Wed, 11 Oct 2023 21:57:44 -0700 Subject: [PATCH] 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. --- .../aja-output-ui/CMakeLists.txt | 8 --- cmake/Modules/FindLibAJANTV2.cmake | 45 +++++++++++++- cmake/finders/FindLibAJANTV2.cmake | 59 ++++++++++++++++--- plugins/aja/CMakeLists.txt | 14 +---- plugins/aja/aja-widget-io.cpp | 17 +++--- 5 files changed, 102 insertions(+), 41 deletions(-) diff --git a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt index 3bed6ee56..56c4be21e 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -43,14 +43,6 @@ target_link_libraries( OBS::ui-support Qt::Widgets AJA::LibAJANTV2 - $<$:ws2_32.lib> - $<$:setupapi.lib> - $<$:Winmm.lib> - $<$:netapi32.lib> - $<$:Shlwapi.lib> - "$<$:$>" - "$<$:$>" - "$<$:$>" $<$:X11::X11> $<$:Qt::GuiPrivate>) diff --git a/cmake/Modules/FindLibAJANTV2.cmake b/cmake/Modules/FindLibAJANTV2.cmake index 3ce91deed..2ae1801ff 100644 --- a/cmake/Modules/FindLibAJANTV2.cmake +++ b/cmake/Modules/FindLibAJANTV2.cmake @@ -14,8 +14,8 @@ else() endif() find_path( - AJA_LIBRARIES_INCLUDE_DIR - NAMES ajalibraries + _LIBAJANTV2_NEW_INCLUDE_DIR + NAMES libajantv2 HINTS ENV AJASDKPath${_lib_suffix} ENV @@ -32,6 +32,38 @@ find_path( PATHS /usr/include /usr/local/include /opt/local/include /sw/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( AJA_NTV2_LIB 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) 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 ${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) + 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}) if(AJA_NTV2_DEBUG_LIB STREQUAL "AJA_NTV2_DEBUG_LIB-NOTFOUND") diff --git a/cmake/finders/FindLibAJANTV2.cmake b/cmake/finders/FindLibAJANTV2.cmake index 333ecb6b9..8a667a5d7 100644 --- a/cmake/finders/FindLibAJANTV2.cmake +++ b/cmake/finders/FindLibAJANTV2.cmake @@ -56,11 +56,30 @@ if(PKG_CONFIG_FOUND) endif() find_path( - LibAJANTV2_INCLUDE_DIR - NAMES ajalibraries + _LIBAJANTV2_NEW_INCLUDE_DIR + NAMES libajantv2 HINTS ${PC_LibAJANTV2_INCLUDE_DIRS} 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( LibAJANTV2_LIBRARY_RELEASE @@ -97,7 +116,7 @@ endif() find_package_handle_standard_args( LibAJANTV2 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) unset(LibAJANTV2_ERROR_REASON) @@ -105,11 +124,19 @@ if(LibAJANTV2_FOUND) list( APPEND 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}) mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY) @@ -142,6 +169,20 @@ if(LibAJANTV2_FOUND) endif() set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}") + set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_LINK_OPTIONS $<$:/IGNORE:4099>) + set_property( + TARGET AJA::LibAJANTV2 + APPEND + PROPERTY INTERFACE_LINK_LIBRARIES + $<$:netapi32.lib> + $<$:setupapi.lib> + $<$:shlwapi.lib> + $<$:wbemuuid.lib> + $<$:winmm.lib> + $<$:ws2_32.lib> + "$<$:$>" + "$<$:$>" + "$<$:$>") set_property( TARGET AJA::LibAJANTV2 APPEND diff --git a/plugins/aja/CMakeLists.txt b/plugins/aja/CMakeLists.txt index ffdfdf8e0..ae170e6f5 100644 --- a/plugins/aja/CMakeLists.txt +++ b/plugins/aja/CMakeLists.txt @@ -58,19 +58,7 @@ target_compile_options( aja-support PUBLIC $<$:-Wno-deprecated-declarations> $<$:-Wno-unused-variable>) -target_link_libraries( - aja - PRIVATE OBS::aja-support - $<$:netapi32.lib> - $<$:setupapi.lib> - $<$:shlwapi.lib> - $<$:winmm.lib> - $<$:ws2_32.lib> - "$<$:$>" - "$<$:$>" - "$<$:$>") - -target_link_options(aja PRIVATE $<$:/IGNORE:4099>) +target_link_libraries(aja PRIVATE OBS::aja-support) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in win-aja.rc) diff --git a/plugins/aja/aja-widget-io.cpp b/plugins/aja/aja-widget-io.cpp index 18e571dfe..c7d01c0ac 100644 --- a/plugins/aja/aja-widget-io.cpp +++ b/plugins/aja/aja-widget-io.cpp @@ -1,6 +1,7 @@ #include "aja-widget-io.hpp" #include "aja-common.hpp" +#include #include #include @@ -35,21 +36,21 @@ static const WidgetInputSocket kWidgetInputSockets[] = { //NTV2InputCrosspointID | NTV2WidgetID | Name | DatastreamIndex { NTV2_INPUT_CROSSPOINT_INVALID, NTV2_WIDGET_INVALID, "", -1}, { 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_XptFrameBuffer2BInput, NTV2_WgtFrameBuffer2, kFramebufferNickname, 1}, + { NTV2_XptFrameBuffer2DS2Input, NTV2_WgtFrameBuffer2, kFramebufferNickname, 1}, { 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_XptFrameBuffer4BInput, NTV2_WgtFrameBuffer4, kFramebufferNickname, 1}, + { NTV2_XptFrameBuffer4DS2Input, NTV2_WgtFrameBuffer4, kFramebufferNickname, 1}, { 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_XptFrameBuffer6BInput, NTV2_WgtFrameBuffer6, kFramebufferNickname, 1}, + { NTV2_XptFrameBuffer6DS2Input, NTV2_WgtFrameBuffer6, kFramebufferNickname, 1}, { 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_XptFrameBuffer8BInput, NTV2_WgtFrameBuffer8, kFramebufferNickname, 1}, + { NTV2_XptFrameBuffer8DS2Input, NTV2_WgtFrameBuffer8, kFramebufferNickname, 1}, { NTV2_XptCSC1VidInput, NTV2_WgtCSC1, kCSCNickname, 0}, { NTV2_XptCSC1KeyInput, NTV2_WgtCSC1, kCSCNickname, 1}, { NTV2_XptCSC2VidInput, NTV2_WgtCSC2, kCSCNickname, 0},