Accelerated Video Playback: Difference between revisions

From NixOS Wiki
imported>Blitz
Add kcmp hint for amdgpu
Unabomberlive (talk | contribs)
No edit summary
(19 intermediate revisions by 9 users not shown)
Line 1: Line 1:
This page is meant to help with techniques for getting accelerated video playback working in NixOS. This is generally done via libva and vaapi (and sometimes vdpau).
<languages/>
<translate>
<!--T:1-->
Accelerated video playback in NixOS is generally done by adding relevant packages to {{nixos:option|hardware.opengl.extraPackages}}.
</translate>


This is done by adding relevant <code>libva</code>-related packages to the <code>hardware.opengl.extraPackages</code> option.
<translate>
 
== Installation ==
Additionally, the <code>vaapiIntel</code> package can be overriden to enable [https://github.com/01org/intel-hybrid-driver Intel's Hybrid Driver].
</translate>
 
<translate>
Intel users also can enable <code>intel-media-driver</code>. It can be used at runtime with <code>LIBVA_DRIVER_NAME=iHD mpv ...</code> for example, if you use Mic92's mpv settings below.
=== Intel ===
 
</translate>
Sample configuration:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
<syntaxHighlight lang=nix>
{
{
   ...
   hardware.graphics = { # hardware.opengl in 24.05 and older
  nixpkgs.config.packageOverrides = pkgs: {
    vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
  };
  hardware.opengl = {
     enable = true;
     enable = true;
     extraPackages = with pkgs; [
     extraPackages = with pkgs; [
       intel-media-driver # LIBVA_DRIVER_NAME=iHD
       intel-media-driver # For Broadwell (2014) or newer processors. LIBVA_DRIVER_NAME=iHD
       vaapiIntel        # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
       intel-vaapi-driver # For older processors. LIBVA_DRIVER_NAME=i965
      vaapiVdpau
      libvdpau-va-gl
     ];
     ];
   };
   };
   ...
   environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; # Optionally, set the environment variable
}
}
</syntaxHighlight>
</nowiki>}}
<translate>
<!--T:2-->
Note, <code>intel-vaapi-driver</code> still performs better for browsers (gecko/chromium based) on newer Skylake (2015) processors.<ref>https://github.com/intel/media-driver/issues/1024</ref>
</translate>


32 bit example:
<translate>
<syntaxhighlight lang="nix">
<!--T:3-->
hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ vaapiIntel ];
For 32-bit support, use
</syntaxhighlight>
</translate> {{nixos:option|hardware.graphics.extraPackages32}}:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  # hardware.opengl.extraPackages32 in 24.05
  hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
}
</nowiki>}}
<translate>
=== AMD === <!--T:4-->


== Prepared Hardware configuration ==
<!--T:5-->
Sometimes different opengl packages are required to achieve full performance. You can check different configuration repositories for similar hardware configuration:
AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:
* [https://github.com/NixOS/nixos-hardware The NixOS-Hardware Repository]
</translate>
 
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
== Testing your configuration ==
{
  hardware.opengl.enable = true;
}
</nowiki>}}
<translate>
== Testing your configuration == <!--T:6-->


<!--T:7-->
You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
</translate>
<translate>
<!--T:8-->
See [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Verification Arch Linux wiki#Hardware video acceleration] for more information.
</translate>
<translate>
== Applications == <!--T:9-->
</translate>
<translate>
=== Chromium === <!--T:10-->
See [[Chromium#Accelerated_video_playback]].
</translate>
<translate>
=== Firefox === <!--T:11-->


See [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Verification Hardware video acceleration: Verification (Arch Wiki)] for more information.
<!--T:12-->
 
See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Arch Linux wiki#Firefox].
== Applications ==
</translate>
 
<!--T:13-->
===Chromium===
<translate>
 
=== MPV ===
See [https://nixos.wiki/wiki/Chromium#Enable_GPU_accelerated_video_decoding_.28VA-API.29 Chromium].
</translate>
 
<translate>
=== Firefox ===
You can place the following configuration in {{ic|~/.config/mpv/mpv.conf}}:
 
</translate>
See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Firefox#Hardware_video_acceleration (ArchWiki)].
<!--T:14-->
 
Mesa requires the kcmp system call to be available. If this is not there, video acceleration will not work (for at least amdgpu users). You can modify the kernel config like this to provide the system call.
 
<syntaxHighlight lang=nix>
  boot.kernelPatches = [ {
    name = "amdgpu-mesa-fix";
    patch = null;
    # https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration
    extraConfig = ''
      CHECKPOINT_RESTORE y
    '';
  } ];
</syntaxHighlight>
 
===[[MPV]]===
You can place the following configuration in <code>~/.config/mpv/mpv.conf</code>
for mpv to use hardware acceleration for VP9 on Intel Broadwell (and probably later):
 
<syntaxHighlight lang=ini>
<syntaxHighlight lang=ini>
hwdec=auto-safe
hwdec=auto-safe
vo=gpu
vo=gpu
profile=gpu-hq
profile=gpu-hq
gpu-context=wayland ; On wayland only
</syntaxHighlight>
</syntaxHighlight>


With Wayland, you need to nudge mpv to do the right thing:
<!--T:15-->
 
<translate>
<syntaxHighlight lang=ini>
See [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux wiki#mpv].
gpu-context=wayland
</translate>
</syntaxHighlight>
<translate>
 
<!--T:16-->
This is based on the [https://wiki.archlinux.org/index.php/Mpv#Hardware_decoding archlinux MPV article].
== Also see ==
* [https://wiki.archlinux.org/index.php/Hardware_video_acceleration Arch Linux wiki#Hardware video acceleration].
* [https://github.com/NixOS/nixos-hardware nixos-hardware] has example configurations for various types of hardware.
</translate>


===Other===
[[Category:Video]]
See the [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Application_support Arch Linux wiki].

Revision as of 13:54, 21 July 2024

Accelerated video playback in NixOS is generally done by adding relevant packages to hardware.opengl.extraPackages.

Installation

Intel

/etc/nixos/configuration.nix
{
  hardware.graphics = { # hardware.opengl in 24.05 and older 
    enable = true;
    extraPackages = with pkgs; [
      intel-media-driver # For Broadwell (2014) or newer processors. LIBVA_DRIVER_NAME=iHD
      intel-vaapi-driver # For older processors. LIBVA_DRIVER_NAME=i965
    ];
  };
  environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; # Optionally, set the environment variable
}

Note, intel-vaapi-driver still performs better for browsers (gecko/chromium based) on newer Skylake (2015) processors.[1]

For 32-bit support, use hardware.graphics.extraPackages32:

/etc/nixos/configuration.nix
{
  # hardware.opengl.extraPackages32 in 24.05
  hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
}

AMD

AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:

/etc/nixos/configuration.nix
{
  hardware.opengl.enable = true;
}

Testing your configuration

You can test your configuration by running: nix-shell -p libva-utils --run vainfo See Arch Linux wiki#Hardware video acceleration for more information.

Applications

Chromium

See Chromium#Accelerated_video_playback.

Firefox

See Arch Linux wiki#Firefox.

MPV

You can place the following configuration in ~/.config/mpv/mpv.conf:

hwdec=auto-safe
vo=gpu
profile=gpu-hq
gpu-context=wayland ; On wayland only

See Arch Linux wiki#mpv.

Also see