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.
This commit is contained in:
Paul Hindt 2023-10-11 21:57:44 -07:00 committed by Ryan Foster
parent 649c62cfac
commit 182410cf6c
5 changed files with 102 additions and 41 deletions

View file

@ -43,14 +43,6 @@ target_link_libraries(
OBS::ui-support
Qt::Widgets
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>:Qt::GuiPrivate>)

View file

@ -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")

View file

@ -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 $<$<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(
TARGET AJA::LibAJANTV2
APPEND

View file

@ -58,19 +58,7 @@ target_compile_options(
aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-Wno-deprecated-declarations>
$<$<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)
configure_file(cmake/windows/obs-module.rc.in win-aja.rc)

View file

@ -1,6 +1,7 @@
#include "aja-widget-io.hpp"
#include "aja-common.hpp"
#include <ajantv2/includes/ntv2enums.h>
#include <ajantv2/includes/ntv2utils.h>
#include <ajantv2/includes/ntv2signalrouter.h>
@ -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},