Skip to content

Commit 1a53c2d

Browse files
Update AJA SDK to 17.1 (#572)
### Update AJA SDK to 17.1 ### Summarize your change. - [x] Update the SDK version in aja.cmake and fix issues related with OS specific header files that are no longer copied and the addition of the mbedtls library that we need to link against - [x] Replace code related to `ScanHardware()` and `GetDeviceInfoList()` since both functions have been deprecated ### Describe the reason for the change. The SDK needs to be at the latest version. ### Describe what you have tested and on which operating system. Presentation mode with the AJA Io 4K Plus device with HDMI and SDI on MacOS. --------- Signed-off-by: Éloïse Brosseau <[email protected]>
1 parent 73b02c3 commit 1a53c2d

File tree

9 files changed

+202
-249
lines changed

9 files changed

+202
-249
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ jobs:
108108
dnf install -y epel-release
109109
dnf config-manager --set-enabled ${{ matrix.extra_repo }} devel
110110
dnf groupinstall "Development Tools" -y
111-
dnf install -y alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ git libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tcsh tk-devel yasm zip zlib-devel wget
111+
dnf install -y alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ git libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel systemd-devel tcl-devel tcsh tk-devel yasm zip zlib-devel wget
112112
dnf install -y xz-devel mesa-libGLU mesa-libGLU-devel
113113
114114
- name: Install other system dependencies
@@ -577,4 +577,4 @@ jobs:
577577
- name: Install OpenRV
578578
run: |
579579
cmake --install _build --prefix $(pwd)/_install --config ${{ matrix.build-type }}
580-
shell: msys2 {0}
580+
shell: msys2 {0}

cmake/dependencies/aja.cmake

Lines changed: 75 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -7,84 +7,79 @@
77
INCLUDE(ProcessorCount) # require CMake 3.15+
88
PROCESSORCOUNT(_cpu_count)
99

10-
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_AJA" "16.2" "make" "")
10+
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_AJA" "17.1.0" "make" "")
1111
RV_SHOW_STANDARD_DEPS_VARIABLES()
1212

13-
SET(_patch
14-
"bugfix5"
15-
)
13+
STRING(REPLACE "." "_" _version_with_underscore ${_version})
1614

1715
SET(_download_url
18-
"https://github.com/aja-video/ntv2/archive/refs/tags/v${_version}-${_patch}.zip"
16+
"https://github.com/aja-video/libajantv2/archive/refs/tags/ntv2_${_version_with_underscore}.zip"
1917
)
2018

2119
SET(_download_hash
22-
"5ec7f3f7ecfc322ca9307203155a4481"
20+
"b9d189f77e18dbdff7c39a339b1a5dd4"
2321
)
2422

25-
SET(_install_dir
26-
${RV_DEPS_BASE_DIR}/${_target}/install
23+
IF(RV_TARGET_WINDOWS)
24+
RV_MAKE_STANDARD_LIB_NAME(ajantv2_vs143_MT "" "SHARED" "d")
25+
ELSE()
26+
RV_MAKE_STANDARD_LIB_NAME(ajantv2 "" "SHARED" "d")
27+
ENDIF()
28+
29+
SET(_aja_ntv2_include_dir
30+
${_include_dir}/libajantv2/ajantv2/includes
2731
)
28-
SET(_include_dir
29-
${_install_dir}/include
32+
SET(_aja_include_dir
33+
${_include_dir}/libajantv2
3034
)
3135

32-
IF(RV_TARGET_LINUX)
33-
SET(_lib_dir
34-
${_install_dir}/lib64
35-
)
36+
IF(RHEL_VERBOSE)
37+
SET(_mbedtls_lib_dir
38+
${_build_dir}/ajantv2/mbedtls-install/lib64
39+
)
3640
ELSE()
37-
SET(_lib_dir
38-
${_install_dir}/lib
39-
)
41+
SET(_mbedtls_lib_dir
42+
${_build_dir}/ajantv2/mbedtls-install/lib
43+
)
4044
ENDIF()
4145

42-
SET(_make_command
43-
make
44-
)
45-
SET(_configure_command
46-
cmake
47-
)
46+
SET(_mbedtls_lib ${_mbedtls_lib_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}mbedtls${CMAKE_STATIC_LIBRARY_SUFFIX})
47+
SET(_mbedx509_lib ${_mbedtls_lib_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}mbedx509${CMAKE_STATIC_LIBRARY_SUFFIX})
48+
SET(_mbedcrypto_lib ${_mbedtls_lib_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}mbedcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})
4849

49-
IF(${RV_OSX_EMULATION})
50-
SET(_darwin_x86_64
51-
"arch" "${RV_OSX_EMULATION_ARCH}"
52-
)
50+
LIST(APPEND _byproducts ${_mbedtls_lib} ${_mbedx509_lib} ${_mbedcrypto_lib})
5351

54-
SET(_make_command
55-
${_darwin_x86_64} ${_make_command}
52+
# There is an issue with the recent AJA SDK : the OS specific header files are no longer copied to _aja_ntv2_include_dir Adding custom paths here to work around
53+
# this issue
54+
IF(RV_TARGET_LINUX)
55+
SET(_aja_ntv2_os_specific_include_dir
56+
${_include_dir}/libajantv2/ajantv2/src/lin
5657
)
57-
SET(_configure_command
58-
${_darwin_x86_64} ${_configure_command}
58+
ELSEIF(RV_TARGET_DARWIN)
59+
SET(_aja_ntv2_os_specific_include_dir
60+
${_include_dir}/libajantv2/ajantv2/src/mac
5961
)
60-
ENDIF()
61-
62-
IF(RV_TARGET_WINDOWS)
63-
# MSYS2/CMake defaults to Ninja
64-
SET(_make_command
65-
ninja
66-
)
67-
ENDIF()
68-
69-
IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
70-
SET(AJA_DEBUG_POSTFIX
71-
"d"
62+
ELSEIF(RV_TARGET_WINDOWS)
63+
SET(_aja_ntv2_os_specific_include_dir
64+
${_include_dir}/libajantv2/ajantv2/src/win
7265
)
7366
ENDIF()
7467

75-
SET(_aja_ntv2_libname
76-
${CMAKE_STATIC_LIBRARY_PREFIX}ajantv2${AJA_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
68+
LIST(APPEND
69+
_configure_options
70+
"-DAJANTV2_DISABLE_DEMOS=ON"
71+
"-DAJANTV2_DISABLE_TOOLS=ON"
72+
"-DAJANTV2_DISABLE_TESTS=ON"
73+
"-DAJANTV2_BUILD_SHARED=ON"
7774
)
7875

79-
SET(_aja_ntv2_lib
80-
${_lib_dir}/${_aja_ntv2_libname}
81-
)
82-
SET(_aja_ntv2_include_dir
83-
${_include_dir}/ajalibraries/ajantv2/includes
84-
)
85-
SET(_aja_include_dir
86-
${_include_dir}/ajalibraries
87-
)
76+
# In Debug, the MSVC runtime library needs to be set to MultiThreadedDebug. Otherwise, it will be set to MultiThreaded.
77+
IF(RV_TARGET_WINDOWS AND CMAKE_BUILD_TYPE MATCHES "^Debug$")
78+
LIST(APPEND
79+
_configure_options
80+
"-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug"
81+
)
82+
ENDIF()
8883

8984
EXTERNALPROJECT_ADD(
9085
${_target}
@@ -93,34 +88,46 @@ EXTERNALPROJECT_ADD(
9388
DOWNLOAD_NAME ${_target}_${_version}.zip
9489
DOWNLOAD_DIR ${RV_DEPS_DOWNLOAD_DIR}
9590
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
96-
SOURCE_DIR ${RV_DEPS_BASE_DIR}/${_target}/src
91+
SOURCE_DIR ${_source_dir}
92+
BINARY_DIR ${_build_dir}
9793
INSTALL_DIR ${_install_dir}
98-
CONFIGURE_COMMAND ${CMAKE_COMMAND} -G Ninja -DCMAKE_INSTALL_PREFIX=${_install_dir} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
99-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DAJA_BUILD_APPS=OFF ${RV_DEPS_BASE_DIR}/${_target}/src
100-
# Not using _cmake_build_command and _cmake_install_command since the build dir need to change.
101-
BUILD_COMMAND ${CMAKE_COMMAND} --build ${RV_DEPS_BASE_DIR}/${_target}/src --config ${CMAKE_BUILD_TYPE} -j${_cpu_count}
102-
INSTALL_COMMAND ${CMAKE_COMMAND} --install ${RV_DEPS_BASE_DIR}/${_target}/src --prefix ${_install_dir} --config ${CMAKE_BUILD_TYPE}
103-
BUILD_IN_SOURCE TRUE
94+
CONFIGURE_COMMAND ${CMAKE_COMMAND} ${_configure_options}
95+
BUILD_COMMAND ${_cmake_build_command}
96+
INSTALL_COMMAND ${_cmake_install_command} && ${CMAKE_COMMAND} -E copy_directory ${_mbedtls_lib_dir} ${_lib_dir}
97+
BUILD_IN_SOURCE FALSE
10498
BUILD_ALWAYS FALSE
105-
BUILD_BYPRODUCTS ${_aja_ntv2_lib}
99+
BUILD_BYPRODUCTS ${_byproducts}
106100
USES_TERMINAL_BUILD TRUE
107101
)
108102

109-
ADD_LIBRARY(aja::ntv2 STATIC IMPORTED GLOBAL)
103+
RV_COPY_LIB_BIN_FOLDERS()
104+
105+
ADD_LIBRARY(aja::ntv2 SHARED IMPORTED GLOBAL)
110106
ADD_DEPENDENCIES(aja::ntv2 ${_target})
111107
SET_PROPERTY(
112108
TARGET aja::ntv2
113-
PROPERTY IMPORTED_LOCATION ${_aja_ntv2_lib}
109+
PROPERTY IMPORTED_LOCATION ${_libpath}
114110
)
115111
SET_PROPERTY(
116112
TARGET aja::ntv2
117-
PROPERTY IMPORTED_SONAME ${_aja_ntv2_libname}
113+
PROPERTY IMPORTED_SONAME ${_libname}
118114
)
115+
IF(RV_TARGET_WINDOWS)
116+
SET_PROPERTY(
117+
TARGET aja::ntv2
118+
PROPERTY IMPORTED_IMPLIB ${_implibpath}
119+
)
120+
ENDIF()
119121

120-
FILE(MAKE_DIRECTORY ${_aja_include_dir} ${_aja_ntv2_include_dir})
122+
FILE(MAKE_DIRECTORY ${_aja_include_dir} ${_aja_ntv2_include_dir} ${_aja_ntv2_os_specific_include_dir})
121123
TARGET_INCLUDE_DIRECTORIES(
122124
aja::ntv2
123-
INTERFACE ${_aja_include_dir} ${_aja_ntv2_include_dir}
125+
INTERFACE ${_aja_include_dir} ${_aja_ntv2_include_dir} ${_aja_ntv2_os_specific_include_dir}
126+
)
127+
128+
TARGET_LINK_LIBRARIES(
129+
aja::ntv2 INTERFACE
130+
${_mbedtls_lib} ${_mbedx509_lib} ${_mbedcrypto_lib}
124131
)
125132

126133
IF(RV_TARGET_DARWIN)
@@ -140,37 +147,9 @@ SET(RV_DEPS_AJA_COMPILE_OPTIONS
140147

141148
LIST(APPEND RV_DEPS_LIST aja::ntv2)
142149

143-
IF(RV_TARGET_WINDOWS)
144-
FILE(MAKE_DIRECTORY ${_install_dir}/lib)
145-
FILE(MAKE_DIRECTORY ${_install_dir}/bin)
146-
147-
ADD_CUSTOM_COMMAND(
148-
TARGET ${_target}
149-
POST_BUILD
150-
COMMENT "Installing ${_target}'s libs and bin into ${RV_STAGE_LIB_DIR} and ${RV_STAGE_BIN_DIR}"
151-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${_install_dir}/lib ${RV_STAGE_LIB_DIR}
152-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${_install_dir}/bin ${RV_STAGE_BIN_DIR}
153-
)
154-
ADD_CUSTOM_TARGET(
155-
${_target}-stage-target ALL
156-
DEPENDS ${RV_STAGE_LIB_DIR}/${_aja_ntv2_libname}
157-
)
158-
ELSE()
159-
ADD_CUSTOM_COMMAND(
160-
COMMENT "Installing ${_target}'s libs into ${RV_STAGE_LIB_DIR}"
161-
OUTPUT ${RV_STAGE_LIB_DIR}/${_aja_ntv2_libname}
162-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${_lib_dir} ${RV_STAGE_LIB_DIR}
163-
DEPENDS ${_target}
164-
)
165-
ADD_CUSTOM_TARGET(
166-
${_target}-stage-target ALL
167-
DEPENDS ${RV_STAGE_LIB_DIR}/${_aja_ntv2_libname}
168-
)
169-
ENDIF()
170-
171150
ADD_DEPENDENCIES(dependencies ${_target}-stage-target)
172151

173152
SET(RV_DEPS_AJA_VERSION
174153
${_version}
175154
CACHE INTERNAL "" FORCE
176-
)
155+
)

docs/build_system/config_linux_centos7.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
## Summary
44

5-
1. [Install Basics](#install-basics)
6-
1. [Install devtoolset-9](#install-devtoolset-9)
7-
1. [Install tools and build dependencies](#install-tools-and-build-dependencies)
8-
1. [Install CMake](#install-cmake)
9-
1. [Install nasm](#install-nasm)
10-
1. [Install Qt5](#install-qt)
5+
- [Summary](#summary)
6+
- [Install Basics](#install-basics)
7+
- [Install devtoolset-9](#install-devtoolset-9)
8+
- [Install tools and build dependencies](#install-tools-and-build-dependencies)
9+
- [Install the python requirements](#install-the-python-requirements)
10+
- [Install CMake](#install-cmake)
11+
- [Install nasm](#install-nasm)
12+
- [Install Qt](#install-qt)
1113

1214
## Install Basics
1315

@@ -35,7 +37,7 @@ scl enable devtoolset-9 $SHELL
3537
Most of the build requirements can be installed using the following command:
3638

3739
```bash
38-
sudo yum install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex glew-devel libXcomposite libXi-devel libaio-devel libffi-devel ncurses-devel libtool libxkbcommon openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 mesa-libOSMesa mesa-libOSMesa-devel ocl-icd opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tk-devel yasm zlib-devel
40+
sudo yum install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex glew-devel libXcomposite libXi-devel libaio-devel libffi-devel ncurses-devel libtool libudev-devel libxkbcommon openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 mesa-libOSMesa mesa-libOSMesa-devel ocl-icd opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tk-devel yasm zlib-devel
3941
```
4042

4143
### Install the python requirements

docs/build_system/config_linux_rocky8.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Some of the build dependencies come from outside the main AppStream repo. So fir
2525
```bash
2626
sudo dnf install epel-release
2727
sudo dnf config-manager --set-enabled powertools
28-
sudo dnf install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson ninja-build openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tcsh tk-devel yasm zip zlib-devel
28+
sudo dnf install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson ninja-build openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel systemd-devel tcl-devel tcsh tk-devel yasm zip zlib-devel
2929
```
3030

3131
You can disable the devel repo afterwards since dnf will warn about it:
@@ -221,4 +221,4 @@ Container id is the same as the one used in the step [Go into the container](go_
221221

222222
```bash
223223
docker cp <container id>:/home/rv/OpenRV/_build/stage ./openrv_stage
224-
```
224+
```

docs/build_system/config_linux_rocky9.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Some of the build dependencies come from outside the main AppStream repo. So fir
2525
```bash
2626
sudo dnf install epel-release
2727
sudo dnf config-manager --set-enabled crb devel
28-
sudo dnf install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson ninja-build openssl-devel patch perl-FindBin pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tcsh tk-devel yasm zip zlib-devel
28+
sudo dnf install alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson ninja-build openssl-devel patch perl-FindBin pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel systemd-devel tcl-devel tcsh tk-devel yasm zip zlib-devel
2929
```
3030

3131
You can disable the devel repo afterwards since dnf will warn about it:
@@ -229,4 +229,4 @@ Container id is the same as the one used in the step [Go into the container](go_
229229

230230
```bash
231231
docker cp <container id>:/home/rv/OpenRV/_build/stage ./openrv_stage
232-
```
232+
```

src/plugins/output/AJADevices/AJADevices/AJAModule.h

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,19 @@ namespace AJADevices
2828
SimpleMode
2929
};
3030

31-
AJAModule( NativeDisplayPtr, unsigned int app4CC, OperationMode );
32-
virtual ~AJAModule();
31+
AJAModule( NativeDisplayPtr, unsigned int appID, OperationMode );
32+
~AJAModule() override;
3333

34-
virtual std::string name() const;
35-
virtual std::string SDKIdentifier() const;
36-
virtual std::string SDKInfo() const;
37-
virtual void open();
38-
virtual void close();
39-
virtual bool isOpen() const;
40-
41-
void* deviceScan() const
42-
{
43-
return m_devicescan;
44-
}
34+
[[nodiscard]] std::string name() const override;
35+
[[nodiscard]] std::string SDKIdentifier() const override;
36+
[[nodiscard]] std::string SDKInfo() const override;
37+
void open() override;
38+
void close() override;
39+
[[nodiscard]] bool isOpen() const override;
4540

4641
private:
47-
void* m_devicescan{ nullptr };
4842
OperationMode m_mode{ OperationMode::ProMode };
4943
unsigned int m_appID{ 0 };
5044
};
5145

5246
} // namespace AJADevices
53-

0 commit comments

Comments
 (0)