diff --git a/pkgs/by-name/li/libajantv2/device-info-list.patch b/pkgs/by-name/li/libajantv2/device-info-list.patch new file mode 100644 index 000000000000..c4351ecee00c --- /dev/null +++ b/pkgs/by-name/li/libajantv2/device-info-list.patch @@ -0,0 +1,13 @@ +diff --git a/ajantv2/src/ntv2devicescanner.cpp b/ajantv2/src/ntv2devicescanner.cpp +index 448e48d372..6b46f9f69d 100644 +--- a/ajantv2/src/ntv2devicescanner.cpp ++++ b/ajantv2/src/ntv2devicescanner.cpp +@@ -137,7 +137,7 @@ + } + #endif // !defined(NTV2_DEPRECATE_16_3) + +-NTV2DeviceInfoList GetDeviceInfoList (void) ++NTV2DeviceInfoList CNTV2DeviceScanner::GetDeviceInfoList (void) + { + AJAAutoLock tmpLock(&sDevInfoListLock); + return sDevInfoList; diff --git a/pkgs/by-name/li/libajantv2/package.nix b/pkgs/by-name/li/libajantv2/package.nix index 4b0366d20c52..781166e6002f 100644 --- a/pkgs/by-name/li/libajantv2/package.nix +++ b/pkgs/by-name/li/libajantv2/package.nix @@ -5,21 +5,25 @@ cmake, ninja, pkg-config, + mbedtls, + udev, + linuxPackages, }: -# Warning: We are aware that the upstream changed and there are new releases, -# this got initally packaged for obs-studio which appears to fail to build even upstream with the new version. -# https://github.com/NixOS/nixpkgs/pull/296191 / https://github.com/obsproject/obs-studio/pull/10037 stdenv.mkDerivation rec { pname = "libajantv2"; - version = "16.2-bugfix5"; + version = "17.1.0"; src = fetchFromGitHub { owner = "aja-video"; - repo = "ntv2"; - rev = "v${version}"; - sha256 = "sha256-h5PKWMwqTeI5/EaTWkjYojuvDU0FyMpzIjWB98UOJwc="; + repo = "libajantv2"; + rev = "ntv2_${builtins.replaceStrings [ "." ] [ "_" ] version}"; + hash = "sha256-n9j98r1E9E0hv5gA8jCg/eQyqGuyU9JlZYm/zlcTQOo="; }; + patches = [ + ./use-system-mbedtls.patch + ./device-info-list.patch + ]; outputs = [ "out" @@ -31,27 +35,39 @@ stdenv.mkDerivation rec { ninja pkg-config ]; + buildInputs = [ + mbedtls + udev + ]; + + cmakeFlags = [ + (lib.cmakeBool "AJANTV2_BUILD_SHARED" true) + ]; postInstall = '' mkdir -p "$out/lib/pkgconfig" cat >"$out/lib/pkgconfig/libajantv2.pc" < (2024-12-20 18:03:16) +Committer: Luke Granger-Brown (2024-12-20 18:03:25) + + Use system mbedtls, rather than downloading from a random Git branch... + +diff --git a/ajantv2/CMakeLists.txt b/ajantv2/CMakeLists.txt +index ffa572e9c8..74c23e8e4e 100644 +--- a/ajantv2/CMakeLists.txt ++++ b/ajantv2/CMakeLists.txt +@@ -52,49 +52,13 @@ + else() + message(STATUS "NTV2 SDK will load signed 3rd-party plugins") + +- set(MBEDTLS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/mbedtls-install) +- set(MBEDTLS_INCLUDE_DIR ${MBEDTLS_INSTALL_DIR}/include) +- set(MBEDTLS_LIBRARY_DIR ${MBEDTLS_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}) +- +- if(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- set(MBEDTLS_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedtls.lib) +- set(MBEDX509_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedx509.lib) +- set(MBEDCRYPTO_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedcrypto.lib) +- set(MBEDTLS_EXTRA_CONFIG_FLAGS +- "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +- "-DMSVC_STATIC_RUNTIME=ON" +- "-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}") +- elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin)$") +- set(MBEDTLS_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedtls.a) +- set(MBEDX509_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedx509.a) +- set(MBEDCRYPTO_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedcrypto.a) +- set(MBEDTLS_C_FLAGS -fPIC) +- endif() +- +- # BUILD_BYPRODUCTS informing CMake where the .a files are located is required to make Ninja build work +- ExternalProject_Add( +- mbedtls +- GIT_REPOSITORY https://github.com/aja-video/mbedtls.git +- GIT_TAG fix-win-dll-cmake +- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${MBEDTLS_INSTALL_DIR} +- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} +- -DENABLE_TESTING=OFF +- -DENABLE_PROGRAMS=OFF +- -DCMAKE_C_FLAGS=${MBEDTLS_C_FLAGS} +- -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} +- -DUSE_STATIC_MBEDTLS_LIBRARY=ON +- -DUSE_SHARED_MBEDTLS_LIBRARY=OFF +- ${MBEDTLS_EXTRA_CONFIG_FLAGS} +- BUILD_ALWAYS TRUE +- BUILD_BYPRODUCTS ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY} +- ) ++ find_package(PkgConfig REQUIRED) ++ pkg_check_modules(MBEDTLS REQUIRED mbedtls mbedcrypto mbedx509) + + list(APPEND TARGET_INCLUDE_DIRS + ${MBEDTLS_INCLUDE_DIR}) + list(APPEND MBEDTLS_LINK_LIBS +- ${MBEDTLS_LIBRARY} +- ${MBEDCRYPTO_LIBRARY} +- ${MBEDX509_LIBRARY}) ++ ${MBEDTLS_LIBRARIES}) + endif() + + +@@ -668,10 +632,6 @@ + aja_ntv2_log_build_info() + + add_library(${PROJECT_NAME} SHARED ${TARGET_SOURCES}) +- +- if (NOT AJANTV2_DISABLE_PLUGIN_LOAD) +- add_dependencies(${PROJECT_NAME} mbedtls) +- endif() + + target_compile_definitions(${PROJECT_NAME} PUBLIC + ${TARGET_COMPILE_DEFS_DYNAMIC} +@@ -687,10 +647,6 @@ + + add_library(${PROJECT_NAME} STATIC ${TARGET_SOURCES}) + +- if (NOT AJANTV2_DISABLE_PLUGIN_LOAD) +- add_dependencies(${PROJECT_NAME} mbedtls) +- endif() +- + target_compile_definitions(${PROJECT_NAME} PUBLIC + ${TARGET_COMPILE_DEFS_STATIC} + ${AJANTV2_TARGET_COMPILE_DEFS}) diff --git a/pkgs/development/libraries/gstreamer/bad/default.nix b/pkgs/development/libraries/gstreamer/bad/default.nix index e1df48dd95bb..3231bb6c649f 100644 --- a/pkgs/development/libraries/gstreamer/bad/default.nix +++ b/pkgs/development/libraries/gstreamer/bad/default.nix @@ -1,6 +1,7 @@ { lib , stdenv , fetchurl +, fetchpatch , substituteAll , meson , ninja @@ -46,6 +47,7 @@ , flite , gsm , json-glib +, ajaSupport ? lib.meta.availableOn stdenv.hostPlatform libajantv2 , libajantv2 , libaom , libdc1394 @@ -129,6 +131,12 @@ stdenv.mkDerivation rec { src = ./fix-paths.patch; inherit (addDriverRunpath) driverLink; }) + # Add support for newer AJA SDK from next GStreamer release + (fetchpatch { + url = "https://github.com/GStreamer/gstreamer/commit/d68ac0db571f44cae42b57c876436b3b09df616b.patch"; + hash = "sha256-ZXwlHzuPT8kUKt5+HkqFH5tzL9l5NusDXImabj4fBbI="; + relative = "subprojects/${pname}"; + }) ]; nativeBuildInputs = [ @@ -214,6 +222,8 @@ stdenv.mkDerivation rec { libmicrodns ] ++ lib.optionals openh264Support [ openh264 + ] ++ lib.optionals ajaSupport [ + libajantv2 ] ++ lib.optionals (gst-plugins-base.waylandEnabled && stdenv.hostPlatform.isLinux) [ libva # vaapi requires libva -> libdrm -> libpciaccess, which is Linux-only in nixpkgs wayland @@ -224,7 +234,6 @@ stdenv.mkDerivation rec { chromaprint flite - libajantv2 libdrm libgudev sbc @@ -300,7 +309,7 @@ stdenv.mkDerivation rec { "-Donnx=disabled" # depends on `libonnxruntime` not packaged in nixpkgs as of writing "-Dopenaptx=enabled" # since gstreamer-1.20.1 `libfreeaptx` is supported for circumventing the dubious license conflict with `libopenaptx` "-Dopencv=${if opencvSupport then "enabled" else "disabled"}" # Reduces rebuild size when `config.cudaSupport = true` - "-Daja=disabled" # should pass libajantv2 via aja-sdk-dir instead + "-Daja=${if ajaSupport then "enabled" else "disabled"}" "-Dmicrodns=${if microdnsSupport then "enabled" else "disabled"}" "-Dbluez=${if bluezSupport then "enabled" else "disabled"}" (lib.mesonEnable "openh264" openh264Support) diff --git a/pkgs/os-specific/linux/ajantv2/default.nix b/pkgs/os-specific/linux/ajantv2/default.nix new file mode 100644 index 000000000000..b3c38b7da971 --- /dev/null +++ b/pkgs/os-specific/linux/ajantv2/default.nix @@ -0,0 +1,41 @@ +{ + lib, + stdenv, + fetchFromGitHub, + kernel, + libajantv2, +}: +stdenv.mkDerivation { + name = "ajantv2-module-${libajantv2.version}-${kernel.version}"; + + inherit (libajantv2) src; + sourceRoot = "source/driver/linux"; + + hardeningDisable = [ "pic" ]; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + preBuild = '' + chmod -R +w ../../ + ''; + + enableParallelBuilding = true; + + buildFlags = [ + "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + ]; + + installPhase = '' + install -D ajantv2.ko $out/lib/modules/${kernel.modDirVersion}/misc/ajantv2.ko + install -D ajardma.ko $out/lib/modules/${kernel.modDirVersion}/misc/ajardma.ko + ''; + + meta = { + inherit (libajantv2.meta) license homepage maintainers; + platforms = [ + "x86_64-linux" + "aarch64-linux" + ]; + description = "AJA video driver"; + }; +} diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 0eed40c970a8..3b236f741eee 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -322,6 +322,8 @@ in { acpi_call = callPackage ../os-specific/linux/acpi-call {}; + ajantv2 = callPackage ../os-specific/linux/ajantv2 { }; + akvcam = callPackage ../os-specific/linux/akvcam { }; amneziawg = callPackage ../os-specific/linux/amneziawg { };