chromium: enable mojo + vaapi + allow hw accel

fixes https://github.com/NixOS/nixpkgs/pull/57837
closes https://github.com/NixOS/nixpkgs/pull/56973

authored by colemickens.tngl.sh and committed by

Herwig Hochleitner 60e2d2ce 5a9eaf02

+134
+8
pkgs/applications/networking/browsers/chromium/common.nix
··· 20 20 21 21 # optional dependencies 22 22 , libgcrypt ? null # gnomeSupport || cupsSupport 23 + , libva ? null # useVaapi 23 24 24 25 # package customization 25 26 , enableNaCl ? false 26 27 , enableWideVine ? false 28 + , useVaapi ? true 27 29 , gnomeSupport ? false, gnome ? null 28 30 , gnomeKeyringSupport ? false, libgnome-keyring3 ? null 29 31 , proprietaryCodecs ? true ··· 126 128 ] ++ optional gnomeKeyringSupport libgnome-keyring3 127 129 ++ optionals gnomeSupport [ gnome.GConf libgcrypt ] 128 130 ++ optionals cupsSupport [ libgcrypt cups ] 131 + ++ optional useVaapi libva 129 132 ++ optional pulseSupport libpulseaudio 130 133 ++ optional (versionAtLeast version "72") jdk.jre; 131 134 ··· 143 146 # - https://github.com/chromium/chromium/search?q=GCC&s=committer-date&type=Commits 144 147 # 145 148 # ++ optional (versionRange "68" "72") ( githubPatch "<patch>" "0000000000000000000000000000000000000000000000000000000000000000" ) 149 + ] ++ optionals (useVaapi) [ 150 + # source: https://aur.archlinux.org/cgit/aur.git/plain/chromium-vaapi.patch?h=chromium-vaapi 151 + ./patches/chromium-vaapi.patch 146 152 ] ++ optionals (!stdenv.cc.isClang && (versionRange "71" "72")) [ 147 153 ( githubPatch "65be571f6ac2f7942b4df9e50b24da517f829eec" "1sqv0aba0mpdi4x4f21zdkxz2cf8ji55ffgbfcr88c5gcg0qn2jh" ) 148 154 ] ++ optional stdenv.isAarch64 ··· 260 266 proprietary_codecs = true; 261 267 enable_hangout_services_extension = true; 262 268 ffmpeg_branding = "Chrome"; 269 + } // optionalAttrs useVaapi { 270 + use_vaapi = true; 263 271 } // optionalAttrs pulseSupport { 264 272 use_pulseaudio = true; 265 273 link_pulseaudio = true;
+9
pkgs/applications/networking/browsers/chromium/default.nix
··· 1 1 { newScope, config, stdenv, llvmPackages, gcc8Stdenv, llvmPackages_7 2 2 , makeWrapper, makeDesktopItem, ed 3 3 , glib, gtk3, gnome3, gsettings-desktop-schemas 4 + , libva ? null 4 5 5 6 # package customization 6 7 , channel ? "stable" ··· 10 11 , proprietaryCodecs ? true 11 12 , enablePepperFlash ? false 12 13 , enableWideVine ? false 14 + , useVaapi ? true 13 15 , cupsSupport ? true 14 16 , pulseSupport ? config.pulseaudio or stdenv.isLinux 15 17 , commandLineArgs ? "" ··· 32 34 mkChromiumDerivation = callPackage ./common.nix { 33 35 inherit enableNaCl gnomeSupport gnome 34 36 gnomeKeyringSupport proprietaryCodecs cupsSupport pulseSupport 37 + useVaapi 35 38 enableWideVine; 36 39 }; 37 40 ··· 92 95 buildCommand = let 93 96 browserBinary = "${chromium.browser}/libexec/chromium/chromium"; 94 97 getWrapperFlags = plugin: "$(< \"${plugin}/nix-support/wrapper-flags\")"; 98 + libPath = stdenv.lib.makeLibraryPath ([] 99 + ++ stdenv.lib.optional useVaapi libva 100 + ); 101 + 95 102 in with stdenv.lib; '' 96 103 mkdir -p "$out/bin" 97 104 ··· 108 115 else 109 116 export CHROME_DEVEL_SANDBOX="$sandbox/bin/${sandboxExecutableName}" 110 117 fi 118 + 119 + export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH:${libPath}" 111 120 112 121 # libredirect causes chromium to deadlock on startup 113 122 export LD_PRELOAD="\$(echo -n "\$LD_PRELOAD" | tr ':' '\n' | grep -v /lib/libredirect\\\\.so$ | tr '\n' ':')"
+117
pkgs/applications/networking/browsers/chromium/patches/chromium-vaapi.patch
··· 1 + From abc7295ca1653c85472916909f0eb76e28e79a58 Mon Sep 17 00:00:00 2001 2 + From: Akarshan Biswas <akarshan.biswas@gmail.com> 3 + Date: Thu, 24 Jan 2019 12:45:29 +0530 4 + Subject: [PATCH] Enable mojo with VDA2 on Linux 5 + 6 + --- 7 + chrome/browser/about_flags.cc | 8 ++++---- 8 + chrome/browser/flag_descriptions.cc | 9 +++++++-- 9 + chrome/browser/flag_descriptions.h | 10 ++++++++-- 10 + gpu/config/software_rendering_list.json | 3 ++- 11 + media/media_options.gni | 9 ++++++--- 12 + media/mojo/services/gpu_mojo_media_client.cc | 4 ++-- 13 + 6 files changed, 29 insertions(+), 14 deletions(-) 14 + 15 + diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc 16 + index 0a84c6ac1..be2aa1d8b 100644 17 + --- a/chrome/browser/about_flags.cc 18 + +++ b/chrome/browser/about_flags.cc 19 + @@ -1714,7 +1714,7 @@ const FeatureEntry kFeatureEntries[] = { 20 + "disable-accelerated-video-decode", 21 + flag_descriptions::kAcceleratedVideoDecodeName, 22 + flag_descriptions::kAcceleratedVideoDecodeDescription, 23 + - kOsMac | kOsWin | kOsCrOS | kOsAndroid, 24 + + kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux, 25 + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), 26 + }, 27 + #if defined(OS_WIN) 28 + @@ -2345,12 +2345,12 @@ const FeatureEntry kFeatureEntries[] = { 29 + FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)}, 30 + #endif // ENABLE_ISOLATED_XR_SERVICE 31 + #endif // ENABLE_VR 32 + -#if defined(OS_CHROMEOS) 33 + +#if defined(OS_CHROMEOS) || defined(OS_LINUX) 34 + {"disable-accelerated-mjpeg-decode", 35 + flag_descriptions::kAcceleratedMjpegDecodeName, 36 + - flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS, 37 + + flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux, 38 + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)}, 39 + -#endif // OS_CHROMEOS 40 + +#endif // OS_CHROMEOS // OS_LINUX 41 + {"v8-cache-options", flag_descriptions::kV8CacheOptionsName, 42 + flag_descriptions::kV8CacheOptionsDescription, kOsAll, 43 + MULTI_VALUE_TYPE(kV8CacheOptionsChoices)}, 44 + diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc 45 + index 62637e092..86f89fc6e 100644 46 + --- a/chrome/browser/flag_descriptions.cc 47 + +++ b/chrome/browser/flag_descriptions.cc 48 + @@ -3085,15 +3085,20 @@ const char kTextSuggestionsTouchBarDescription[] = 49 + 50 + #endif 51 + 52 + -// Chrome OS ------------------------------------------------------------------- 53 + +// Chrome OS Linux------------------------------------------------------------------- 54 + 55 + -#if defined(OS_CHROMEOS) 56 + +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) 57 + 58 + const char kAcceleratedMjpegDecodeName[] = 59 + "Hardware-accelerated mjpeg decode for captured frame"; 60 + const char kAcceleratedMjpegDecodeDescription[] = 61 + "Enable hardware-accelerated mjpeg decode for captured frame where " 62 + "available."; 63 + +#endif 64 + + 65 + +// Chrome OS -------------------------------------------------- 66 + + 67 + +#if defined(OS_CHROMEOS) 68 + 69 + const char kAllowTouchpadThreeFingerClickName[] = "Touchpad three-finger-click"; 70 + const char kAllowTouchpadThreeFingerClickDescription[] = 71 + diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h 72 + index 5dac660bb..6cc4115da 100644 73 + --- a/chrome/browser/flag_descriptions.h 74 + +++ b/chrome/browser/flag_descriptions.h 75 + @@ -1846,13 +1846,19 @@ extern const char kPermissionPromptPersistenceToggleDescription[]; 76 + 77 + #endif // defined(OS_MACOSX) 78 + 79 + -// Chrome OS ------------------------------------------------------------------ 80 + +// Chrome OS and Linux ------------------------------------------------------------------ 81 + 82 + -#if defined(OS_CHROMEOS) 83 + +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) 84 + 85 + extern const char kAcceleratedMjpegDecodeName[]; 86 + extern const char kAcceleratedMjpegDecodeDescription[]; 87 + 88 + +#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) 89 + + 90 + +// Chrome OS ------------------------------------------------------------------------ 91 + + 92 + +#if defined(OS_CHROMEOS) 93 + + 94 + extern const char kAllowTouchpadThreeFingerClickName[]; 95 + extern const char kAllowTouchpadThreeFingerClickDescription[]; 96 + 97 + diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json 98 + index 65f37b3f1..ae8a1718f 100644 99 + --- a/gpu/config/software_rendering_list.json 100 + +++ b/gpu/config/software_rendering_list.json 101 + @@ -371,11 +371,12 @@ 102 + }, 103 + { 104 + "id": 48, 105 + - "description": "Accelerated video decode is unavailable on Linux", 106 + + "description": "Accelerated VA-API video decode is not supported on NVIDIA platforms", 107 + "cr_bugs": [137247], 108 + "os": { 109 + "type": "linux" 110 + }, 111 + + "vendor_id": "0x10de", 112 + "features": [ 113 + "accelerated_video_decode" 114 + ] 115 + -- 116 + 2.20.1 117 +