From 46cbb8453afa5b74612ffd795cfbcab71e3d141a Mon Sep 17 00:00:00 2001 From: Ivan Kozik Date: Fri, 30 Aug 2019 19:54:08 +0000 Subject: mpv, ffmpeg: use addOpenGLRunpath to fix CUDA-accelerated playback This fixes #67780. Currently, using `mpv --hwdec=nvdec --msg-level=vd=debug` on NVIDIA results in: ``` [vd] Opening decoder hevc [vd] Looking at hwdec hevc-nvdec... Cannot load libcuda.so.1 [vd] Could not create device. [vd] No hardware decoding available for this codec. ``` With just mpv patched, ffmpeg cannot load libnvcuvid.so.1: ``` [vd] Opening decoder hevc [vd] Looking at hwdec hevc-nvdec... [vd] Trying hardware decoding via hevc-nvdec. [vd] Selected codec: hevc (HEVC (High Efficiency Video Coding)) [vd] Pixel formats supported by decoder: vaapi_vld cuda yuv420p10le [vd] Codec profile: Main 10 (0x2) [vd] Requesting pixfmt 'cuda' from decoder. [ffmpeg/video] hevc: Cannot load libnvcuvid.so.1 [ffmpeg/video] hevc: Failed loading nvcuvid. [ffmpeg/video] hevc: Failed setup for format cuda: hwaccel initialisation returned error. ``` With both mpv and ffmpeg patched, it works: ``` [vd] Opening decoder hevc [vd] Looking at hwdec hevc-nvdec... [vd] Trying hardware decoding via hevc-nvdec. [vd] Selected codec: hevc (HEVC (High Efficiency Video Coding)) [vd] Pixel formats supported by decoder: vaapi_vld cuda yuv420p10le [vd] Codec profile: Main 10 (0x2) [vd] Requesting pixfmt 'cuda' from decoder. Using hardware decoding (nvdec). [vd] Decoder format: 3840x2160 cuda[p010] bt.2020-ncl/bt.2020/pq/limited/auto SP=10.000000 CL=unknown (auto 0.000000/0.000000/0.000000) ``` --- pkgs/development/libraries/ffmpeg/generic.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'pkgs/development/libraries/ffmpeg') diff --git a/pkgs/development/libraries/ffmpeg/generic.nix b/pkgs/development/libraries/ffmpeg/generic.nix index 4c0ca0210cc..b3310e44ae0 100644 --- a/pkgs/development/libraries/ffmpeg/generic.nix +++ b/pkgs/development/libraries/ffmpeg/generic.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, perl, texinfo, yasm +{ stdenv, fetchurl, pkgconfig, addOpenGLRunpath, perl, texinfo, yasm , alsaLib, bzip2, fontconfig, freetype, gnutls, libiconv, lame, libass, libogg , libssh, libtheora, libva, libdrm, libvorbis, libvpx, lzma, libpulseaudio, soxr , x264, x265, xvidcore, zlib, libopus, speex, nv-codec-headers, dav1d @@ -42,7 +42,7 @@ let inherit (stdenv) isDarwin isFreeBSD isLinux isAarch32; - inherit (stdenv.lib) optional optionals enableFeature; + inherit (stdenv.lib) optional optionals optionalString enableFeature; cmpVer = builtins.compareVersions; reqMin = requiredVersion: (cmpVer requiredVersion branch != 1); @@ -157,7 +157,7 @@ stdenv.mkDerivation rec { "--enable-cross-compile" ] ++ optional stdenv.cc.isClang "--cc=clang"; - nativeBuildInputs = [ perl pkgconfig texinfo yasm ]; + nativeBuildInputs = [ addOpenGLRunpath perl pkgconfig texinfo yasm ]; buildInputs = [ bzip2 fontconfig freetype gnutls libiconv lame libass libogg libssh libtheora @@ -186,6 +186,10 @@ stdenv.mkDerivation rec { substituteInPlace $pc \ --replace "includedir=$out" "includedir=''${!outputInclude}" done + '' + optionalString stdenv.isLinux '' + # Set RUNPATH so that libnvcuvid in /run/opengl-driver(-32)/lib can be found. + # See the explanation in addOpenGLRunpath. + addOpenGLRunpath $out/lib/libavcodec.so* ''; installFlags = [ "install-man" ]; -- cgit 1.4.1