From 0ebea895518328b58d169c27860433d5594f4823 Mon Sep 17 00:00:00 2001 From: Kevin Puetz Date: Thu, 9 Nov 2023 21:15:19 -0600 Subject: [PATCH 1/4] qt6.qtmultimedia: Enable Spatial Audio (Quick3D) This was Tech Preview in Qt 6.4, released in 6.5 --- pkgs/development/libraries/qt-6/modules/qtmultimedia.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix index 538687dce58a..d92f7157b80b 100644 --- a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix +++ b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix @@ -3,6 +3,7 @@ , stdenv , qtbase , qtdeclarative +, qtquick3d , qtshadertools , qtsvg , pkg-config @@ -25,7 +26,7 @@ qtModule { nativeBuildInputs = [ pkg-config ]; buildInputs = [ libunwind orc ] ++ lib.optionals stdenv.isLinux [ libpulseaudio elfutils alsa-lib wayland ]; - propagatedBuildInputs = [ qtbase qtdeclarative qtsvg qtshadertools ] + propagatedBuildInputs = [ qtbase qtdeclarative qtsvg qtshadertools qtquick3d ] ++ lib.optionals stdenv.isLinux [ gstreamer gst-plugins-base gst-plugins-good gst-libav gst-vaapi ] ++ lib.optionals stdenv.isDarwin [ VideoToolbox ]; From 91b8e472a5b7661bcc2f930a1abe14881f335a73 Mon Sep 17 00:00:00 2001 From: Kevin Puetz Date: Wed, 8 Nov 2023 00:05:37 -0600 Subject: [PATCH 2/4] qt6.qtmultimedia: Compile ffmpeg multimedia plugin This is now the default recommendation upstream for linux platforms > https://doc.qt.io/qt-6.6/qtmultimedia-index.html#ffmpeg-as-the-default-backend > In this release the FFmpeg framework is set as the default backend on > Windows, macOS, Android, and Linux except Yocto distribution. > The version shipped with Qt binary packages is FFmpeg 6.0 > and is tested by the maintainers. libXrandr is required to compile support QT_WINDOW_CAPTURE_BACKEND=x11 --- nixos/doc/manual/release-notes/rl-2405.section.md | 2 ++ pkgs/development/libraries/qt-6/modules/qtmultimedia.nix | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index 15696e802c12..9191a204a7a1 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -53,3 +53,5 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m - The `hardware.pulseaudio` module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes [issue 114399](https://github.com/NixOS/nixpkgs/issues/114399). +- QtMultimedia has changed its default backend to `QT_MEDIA_BACKEND=ffmpeg` (previously `gstreamer` on Linux or `darwin` on MacOS). + The previous native backends remain available but are now minimally maintained. Refer to [upstream documentation](https://doc.qt.io/qt-6/qtmultimedia-index.html#ffmpeg-as-the-default-backend) for further details about each platform. diff --git a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix index d92f7157b80b..20c7f8fcf195 100644 --- a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix +++ b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix @@ -13,8 +13,10 @@ , gst-plugins-good , gst-libav , gst-vaapi +, ffmpeg_6 , libpulseaudio , wayland +, libXrandr , elfutils , libunwind , orc @@ -24,8 +26,8 @@ qtModule { pname = "qtmultimedia"; nativeBuildInputs = [ pkg-config ]; - buildInputs = [ libunwind orc ] - ++ lib.optionals stdenv.isLinux [ libpulseaudio elfutils alsa-lib wayland ]; + buildInputs = [ libunwind orc ffmpeg_6 ] + ++ lib.optionals stdenv.isLinux [ libpulseaudio elfutils alsa-lib wayland libXrandr ]; propagatedBuildInputs = [ qtbase qtdeclarative qtsvg qtshadertools qtquick3d ] ++ lib.optionals stdenv.isLinux [ gstreamer gst-plugins-base gst-plugins-good gst-libav gst-vaapi ] ++ lib.optionals stdenv.isDarwin [ VideoToolbox ]; From d3de574b8ccc0e98b4490197265f60b03b36c0e9 Mon Sep 17 00:00:00 2001 From: Kevin Puetz Date: Sun, 3 Dec 2023 11:30:42 -0600 Subject: [PATCH 3/4] qt6.qtmultimedia: Compile hardware-accelerated VAAPI --- pkgs/development/libraries/qt-6/modules/qtmultimedia.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix index 20c7f8fcf195..2545ee1a740c 100644 --- a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix +++ b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix @@ -14,6 +14,7 @@ , gst-libav , gst-vaapi , ffmpeg_6 +, libva , libpulseaudio , wayland , libXrandr @@ -27,7 +28,7 @@ qtModule { pname = "qtmultimedia"; nativeBuildInputs = [ pkg-config ]; buildInputs = [ libunwind orc ffmpeg_6 ] - ++ lib.optionals stdenv.isLinux [ libpulseaudio elfutils alsa-lib wayland libXrandr ]; + ++ lib.optionals stdenv.isLinux [ libpulseaudio elfutils alsa-lib wayland libXrandr libva ]; propagatedBuildInputs = [ qtbase qtdeclarative qtsvg qtshadertools qtquick3d ] ++ lib.optionals stdenv.isLinux [ gstreamer gst-plugins-base gst-plugins-good gst-libav gst-vaapi ] ++ lib.optionals stdenv.isDarwin [ VideoToolbox ]; From 7e886531a2b9be8ca3fd43bde8e82cbae9b9e4a0 Mon Sep 17 00:00:00 2001 From: Kevin Puetz Date: Sun, 3 Dec 2023 12:58:38 -0600 Subject: [PATCH 4/4] qt6.qtmultimedia: Fix failure to load libva.so QtMultimedia 6.6.0 would select dynamic VAAPI on linux, then warns during build (even though it chose this on purpose): > QT_FEATURE_vaapi is found but ffmpeg doesn't include vaapi, > however dynamic symbols resolve is possible The nuisance warning was fixed for 6.7 and backported to 6.6.1: https://codereview.qt-project.org/c/qt/qtmultimedia/+/517333 However, tracing it helped me figure out why vaapi actually wasn't working: nix doesn't end up with an rpath such that dlopen("va") can actually find libva.so in the nix store, thus failing at runtime: > qt.multimedia.plugin: loading backend "ffmpeg" > qt.core.library: "/nix/store/i9fkjks6dfjj1p9qvj5633sxbrf5rbd8-qtmultimedia-6.6.1/lib/qt-6/plugins/multimedia/libffmpegmediaplugin.so" loaded library > qt.multimedia.ffmpeg.libsymbolsresolver: Start VAAPI symbols resolving: 39 symbols > qt.core.library: "va" cannot load: Cannot load library va: (va: cannot open shared object file: No such file or directory) > qt.multimedia.ffmpeg.libsymbolsresolver: Couldn't load VAAPI library --- pkgs/development/libraries/qt-6/modules/qtmultimedia.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix index 2545ee1a740c..f77fdac059ce 100644 --- a/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix +++ b/pkgs/development/libraries/qt-6/modules/qtmultimedia.nix @@ -33,6 +33,8 @@ qtModule { ++ lib.optionals stdenv.isLinux [ gstreamer gst-plugins-base gst-plugins-good gst-libav gst-vaapi ] ++ lib.optionals stdenv.isDarwin [ VideoToolbox ]; + cmakeFlags = [ "-DENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS=0" ]; + env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-include AudioToolbox/AudioToolbox.h"; NIX_LDFLAGS = lib.optionalString stdenv.isDarwin