Skip to content

Instantly share code, notes, and snippets.

@kureta
Created January 31, 2019 19:44
Show Gist options
  • Save kureta/bbb57d4230b710cb9f4e9ecc0e9d0530 to your computer and use it in GitHub Desktop.
Save kureta/bbb57d4230b710cb9f4e9ecc0e9d0530 to your computer and use it in GitHub Desktop.
diff --git a/.SRCINFO b/.SRCINFO
index 19ddc83..c04f1eb 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = chromium-vaapi
pkgdesc = Chromium with VA-API support to enable hardware acceleration
pkgver = 72.0.3626.81
- pkgrel = 1
+ pkgrel = 2
url = https://www.chromium.org/Home
install = chromium.install
arch = x86_64
@@ -63,14 +63,14 @@ pkgbase = chromium-vaapi
source = chromium-webrtc-missing-header.patch
source = chromium-widevine.patch
source = chromium-skia-harmony.patch
- source = chromium-vaapi-r21.patch
+ source = enable-vaapi.patch
sha256sums = dfe89fe389008e6d2098099948d10774989d2f3e8dca6ace78ea4ec636dd8006
sha256sums = 04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1
sha256sums = e2d284311f49c529ea45083438a768db390bde52949995534034d2a814beab89
sha256sums = 63cbed7d7af327c17878a2066c303f106ff08636372721845131f7ff13d87b44
sha256sums = d081f2ef8793544685aad35dea75a7e6264a2cb987ff3541e6377f4a3650a28b
sha256sums = 5887f78b55c4ecbbcba5930f3f0bb7bc0117c2a41c2f761805fcf7f46f1ca2b3
- sha256sums = f3fffc4c053077b0a2cb584c42882b0d38473bb2762e2daf86bbacc2fe0a7f77
+ sha256sums = 561151f381db44908ab5649f3579049e4cbce04cbed76e32d767b156bf83944d
pkgname = chromium-vaapi
diff --git a/PKGBUILD b/PKGBUILD
index ee886df..0c870f1 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -11,7 +11,7 @@
pkgname=chromium-vaapi
pkgver=72.0.3626.81
-pkgrel=1
+pkgrel=2
_launcher_ver=6
pkgdesc="Chromium with VA-API support to enable hardware acceleration"
arch=('x86_64')
@@ -38,14 +38,14 @@ source=(https://commondatastorage.googleapis.com/chromium-browser-official/chrom
chromium-webrtc-missing-header.patch
chromium-widevine.patch
chromium-skia-harmony.patch
- chromium-vaapi-r21.patch)
+ enable-vaapi.patch)
sha256sums=('dfe89fe389008e6d2098099948d10774989d2f3e8dca6ace78ea4ec636dd8006'
'04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1'
'e2d284311f49c529ea45083438a768db390bde52949995534034d2a814beab89'
'63cbed7d7af327c17878a2066c303f106ff08636372721845131f7ff13d87b44'
'd081f2ef8793544685aad35dea75a7e6264a2cb987ff3541e6377f4a3650a28b'
'5887f78b55c4ecbbcba5930f3f0bb7bc0117c2a41c2f761805fcf7f46f1ca2b3'
- 'f3fffc4c053077b0a2cb584c42882b0d38473bb2762e2daf86bbacc2fe0a7f77')
+ '561151f381db44908ab5649f3579049e4cbce04cbed76e32d767b156bf83944d')
# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py
# Keys are the names in the above script; values are the dependencies in Arch
@@ -120,7 +120,8 @@ prepare() {
ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
msg2 'Applying VA-API patches'
- patch -Np1 -i ../chromium-vaapi-r21.patch
+ # https://src.fedoraproject.org/rpms/chromium/pull-request/18#
+ patch -Np1 -i ../enable-vaapi.patch
# Remove bundled libraries for which we will use the system copies; this
# *should* do what the remove_bundled_libraries.py script does, with the
diff --git a/chromium-vaapi-r21.patch b/chromium-vaapi-r21.patch
deleted file mode 100644
index cf5fe37..0000000
--- a/chromium-vaapi-r21.patch
+++ /dev/null
@@ -1,554 +0,0 @@
-From e95d904578c265a84f117d7d5eff598423f9283d Mon Sep 17 00:00:00 2001
-From: Daniel Charles
-Date: Fri, 09 Feb 2018 14:39:27 -0800
-Subject: [PATCH] Enable VAVDA, VAVEA and VAJDA on linux with VAAPI only
-
-This patch contains all the changes necessary to use VA-API along with
-vaapi-driver to run all media use cases supported with hardware acceleration.
-
-It is intended to remain as experimental accessible from chrome://flags on linux.
-It requires libva/intel-vaapi-driver to be installed on the system path where
-chrome is executed. Other drivers could be tested if available. Flags are
-kept independent for linux, where this feature has to be enabled before
-actually using it. This should not change how other OSes use the flags
-already, the new flags will show at the buttom on the section of unavailable
-experiments
-
-The changes cover a range of compiler pre-processor flags to enable the stack.
-It moves the presandbox operations to the vaapi_wrapper class as the hook function
-is available there. vaInit will open driver on the correct installed folder.
-
-chrome flags consolidtation into only two flags for linux. Mjpeg and accelerated
-video are used. The other flags are kept for ChromeOS and other OSes.
-
-Developer testing was made on skylake hardware, ChromeOS and Ubuntu.
-
-BUG=NONE
-TEST=subjective testing with VAVDA,VAVEA and VAJDA, autotest for encoder
- and decoder hardware accelerated
- have libva/intel-vaapi-driver installed and not installed in the system
- repeat on different hardware families
-
-Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
-Change-Id: Ifbbf5c9e5221a8b5733fc6d4d0cf984a1f103171
-Signed-off-by: Daniel Charles
----
-
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -1429,12 +1429,14 @@ const FeatureEntry kFeatureEntries[] = {
- {"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName,
- flag_descriptions::kUiPartialSwapDescription, kOsAll,
- SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)},
-+#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
- {"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName,
- flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS,
- SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)},
- {"disable-webrtc-hw-encoding", flag_descriptions::kWebrtcHwEncodingName,
- flag_descriptions::kWebrtcHwEncodingDescription, kOsAndroid | kOsCrOS,
- SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWEncoding)},
-+#endif
- {"enable-webrtc-hw-h264-encoding",
- flag_descriptions::kWebrtcHwH264EncodingName,
- flag_descriptions::kWebrtcHwH264EncodingDescription, kOsAndroid | kOsCrOS,
-@@ -1815,6 +1817,13 @@ const FeatureEntry kFeatureEntries[] = {
- flag_descriptions::kShowTouchHudDescription, kOsCrOS,
- SINGLE_VALUE_TYPE(ash::switches::kAshTouchHud)},
- #endif // OS_CHROMEOS
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ {
-+ "enable-accelerated-video", flag_descriptions::kAcceleratedVideoName,
-+ flag_descriptions::kAcceleratedVideoDescription, kOsLinux,
-+ SINGLE_VALUE_TYPE(switches::kEnableAcceleratedVideo),
-+ },
-+#else
- {
- "disable-accelerated-video-decode",
- flag_descriptions::kAcceleratedVideoDecodeName,
-@@ -1822,6 +1831,7 @@ const FeatureEntry kFeatureEntries[] = {
- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
- SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
- },
-+#endif
- #if defined(OS_WIN)
- {"enable-hdr", flag_descriptions::kEnableHDRName,
- flag_descriptions::kEnableHDRDescription, kOsWin,
-@@ -2501,12 +2511,17 @@ const FeatureEntry kFeatureEntries[] = {
- FEATURE_VALUE_TYPE(features::kOpenVR)},
- #endif // ENABLE_OPENVR
- #endif // ENABLE_VR
--#if defined(OS_CHROMEOS)
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ {"enable-accelerated-mjpeg-decode",
-+ flag_descriptions::kAcceleratedMjpegDecodeName,
-+ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsLinux,
-+ SINGLE_VALUE_TYPE(switches::kEnableAcceleratedMjpegDecode)},
-+#elif defined(OS_CHROMEOS)
- {"disable-accelerated-mjpeg-decode",
- flag_descriptions::kAcceleratedMjpegDecodeName,
- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
- SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
--#endif // OS_CHROMEOS
-+#endif
- {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
- flag_descriptions::kV8CacheOptionsDescription, kOsAll,
- MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
---- a/chrome/browser/chromeos/login/chrome_restart_request.cc
-+++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
-@@ -19,6 +19,7 @@
- #include "base/sys_info.h"
- #include "base/timer/timer.h"
- #include "base/values.h"
-+#include "build/build_config.h"
- #include "cc/base/switches.h"
- #include "chrome/browser/browser_process.h"
- #include "chrome/browser/chromeos/boot_times_recorder.h"
-@@ -84,9 +85,14 @@ void DeriveCommandLine(const GURL& start
- ::switches::kDisable2dCanvasImageChromium,
- ::switches::kDisableAccelerated2dCanvas,
- ::switches::kDisableAcceleratedJpegDecoding,
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ ::switches::kEnableAcceleratedMjpegDecode,
-+ ::switches::kEnableAcceleratedVideo,
-+#else
- ::switches::kDisableAcceleratedMjpegDecode,
- ::switches::kDisableAcceleratedVideoDecode,
- ::switches::kDisableAcceleratedVideoEncode,
-+#endif
- ::switches::kDisableBlinkFeatures,
- ::switches::kDisableCastStreamingHWEncoding,
- ::switches::kDisableGpu,
-@@ -160,8 +166,10 @@ void DeriveCommandLine(const GURL& start
- ::switches::kEnableWebGLImageChromium,
- ::switches::kEnableWebVR,
- ::switches::kEnableUnsafeWebGPU,
-+#if (defined(OS_CHROMEOS) || defined(OS_ANDROID))
- ::switches::kDisableWebRtcHWDecoding,
- ::switches::kDisableWebRtcHWEncoding,
-+#endif
- ::switches::kOzonePlatform,
- ash::switches::kAshEnableTabletMode,
- ash::switches::kAshEnableWaylandServer,
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -14,6 +14,13 @@ const char kAccelerated2dCanvasDescripti
- "Enables the use of the GPU to perform 2d canvas rendering instead of "
- "using software rendering.";
-
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+const char kAcceleratedVideoName[] = "Hardware-accelerated video";
-+const char kAcceleratedVideoDescription[] =
-+ "Hardware-accelerated video where VA-API driver is installed on the"
-+ "system.";
-+#endif
-+
- const char kAcceleratedVideoDecodeName[] = "Hardware-accelerated video decode";
- const char kAcceleratedVideoDecodeDescription[] =
- "Hardware-accelerated video decode where available.";
-@@ -2121,6 +2128,7 @@ const char kWebrtcHybridAgcName[] = "Web
- const char kWebrtcHybridAgcDescription[] =
- "WebRTC Agc2 digital adaptation with Agc1 analog adaptation.";
-
-+#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
- const char kWebrtcHwDecodingName[] = "WebRTC hardware video decoding";
- const char kWebrtcHwDecodingDescription[] =
- "Support in WebRTC for decoding video streams using platform hardware.";
-@@ -2128,6 +2136,7 @@ const char kWebrtcHwDecodingDescription[
- const char kWebrtcHwEncodingName[] = "WebRTC hardware video encoding";
- const char kWebrtcHwEncodingDescription[] =
- "Support in WebRTC for encoding video streams using platform hardware.";
-+#endif
-
- const char kWebrtcHwH264EncodingName[] = "WebRTC hardware h264 video encoding";
- const char kWebrtcHwH264EncodingDescription[] =
-@@ -3059,14 +3068,16 @@ const char kTextSuggestionsTouchBarDescr
-
- // Chrome OS -------------------------------------------------------------------
-
--#if defined(OS_CHROMEOS)
-+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
-
- const char kAcceleratedMjpegDecodeName[] =
- "Hardware-accelerated mjpeg decode for captured frame";
- const char kAcceleratedMjpegDecodeDescription[] =
- "Enable hardware-accelerated mjpeg decode for captured frame where "
- "available.";
-+#endif
-
-+#if defined(OS_CHROMEOS)
- const char kAllowTouchpadThreeFingerClickName[] = "Touchpad three-finger-click";
- const char kAllowTouchpadThreeFingerClickDescription[] =
- "Enables touchpad three-finger-click as middle button.";
---- a/chrome/browser/flag_descriptions.h
-+++ b/chrome/browser/flag_descriptions.h
-@@ -37,6 +37,10 @@ namespace flag_descriptions {
- extern const char kAccelerated2dCanvasName[];
- extern const char kAccelerated2dCanvasDescription[];
-
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+extern const char kAcceleratedVideoName[];
-+extern const char kAcceleratedVideoDescription[];
-+#endif
- extern const char kAcceleratedVideoDecodeName[];
- extern const char kAcceleratedVideoDecodeDescription[];
-
-@@ -1849,13 +1853,17 @@ extern const char kPermissionPromptPersi
-
- #endif // defined(OS_MACOSX)
-
--// Chrome OS ------------------------------------------------------------------
--
--#if defined(OS_CHROMEOS)
-+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
-
- extern const char kAcceleratedMjpegDecodeName[];
- extern const char kAcceleratedMjpegDecodeDescription[];
-
-+#endif
-+
-+// Chrome OS ------------------------------------------------------------------
-+
-+#if defined(OS_CHROMEOS)
-+
- extern const char kAllowTouchpadThreeFingerClickName[];
- extern const char kAllowTouchpadThreeFingerClickDescription[];
-
---- a/content/browser/gpu/compositor_util.cc
-+++ b/content/browser/gpu/compositor_util.cc
-@@ -150,7 +150,11 @@ const GpuFeatureData GetGpuFeatureData(
- {"video_decode",
- SafeGetFeatureStatus(gpu_feature_info,
- gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE),
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ !command_line.HasSwitch(switches::kEnableAcceleratedVideo),
-+#else
- command_line.HasSwitch(switches::kDisableAcceleratedVideoDecode),
-+#endif
- "Accelerated video decode has been disabled, either via blacklist, "
- "about:flags or the command line.",
- true, true},
---- a/content/browser/gpu/gpu_process_host.cc
-+++ b/content/browser/gpu/gpu_process_host.cc
-@@ -210,7 +210,9 @@ static const char* const kSwitchNames[]
- switches::kDisableLogging,
- switches::kDisableShaderNameHashing,
- switches::kDisableSkiaRuntimeOpts,
-+#if !defined(OS_LINUX)
- switches::kDisableWebRtcHWEncoding,
-+#endif
- #if defined(OS_WIN)
- switches::kEnableAcceleratedVpxDecode,
- #endif
---- a/content/browser/renderer_host/media/video_capture_browsertest.cc
-+++ b/content/browser/renderer_host/media/video_capture_browsertest.cc
-@@ -166,8 +166,13 @@ class VideoCaptureBrowserTest : public C
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kUseFakeJpegDecodeAccelerator);
- } else {
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
-+ switches::kEnableAcceleratedMjpegDecode);
-+#else
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kDisableAcceleratedMjpegDecode);
-+#endif
- }
- }
-
---- a/content/browser/renderer_host/render_process_host_impl.cc
-+++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -2932,7 +2932,11 @@ void RenderProcessHostImpl::PropagateBro
- switches::kDefaultTileHeight,
- switches::kDisable2dCanvasImageChromium,
- switches::kDisableAcceleratedJpegDecoding,
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ switches::kEnableAcceleratedVideo,
-+#else
- switches::kDisableAcceleratedVideoDecode,
-+#endif
- switches::kDisableBackgroundTasks,
- switches::kDisableBackgroundTimerThrottling,
- switches::kDisableBreakpad,
-@@ -3072,8 +3076,10 @@ void RenderProcessHostImpl::PropagateBro
- #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
- switches::kDisableMojoRenderer,
- #endif
-+#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
- switches::kDisableWebRtcHWDecoding,
- switches::kDisableWebRtcHWEncoding,
-+#endif
- switches::kEnableWebRtcSrtpAesGcm,
- switches::kEnableWebRtcSrtpEncryptedHeaders,
- switches::kEnableWebRtcStunOrigin,
---- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
-+++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
-@@ -66,7 +66,12 @@ class MAYBE_WebRtcMediaRecorderTest
- return;
- // This flag is also used for encoding, https://crbug.com/616640.
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
-- switches::kDisableAcceleratedVideoDecode);
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ switches::kEnableAcceleratedVideo
-+#else
-+ switches::kDisableAcceleratedVideoDecode
-+#endif
-+ );
- }
-
- private:
---- a/content/gpu/BUILD.gn
-+++ b/content/gpu/BUILD.gn
-@@ -134,4 +134,8 @@ target(link_target_type, "gpu_sources")
- (!is_chromecast || is_cast_desktop_build)) {
- configs += [ "//build/config/linux/dri" ]
- }
-+
-+ if (is_desktop_linux) {
-+ public_configs = [ "//media/gpu:libva_config" ]
-+ }
- }
---- a/content/gpu/gpu_main.cc
-+++ b/content/gpu/gpu_main.cc
-@@ -283,7 +283,7 @@ int GpuMain(const MainFunctionParams& pa
-
- base::PlatformThread::SetName("CrGpuMain");
-
--#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
-+#if defined(OS_LINUX)
- // Set thread priority before sandbox initialization.
- base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY);
- #endif
-@@ -316,7 +316,7 @@ int GpuMain(const MainFunctionParams& pa
- GetContentClient()->SetGpuInfo(gpu_init->gpu_info());
-
- base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL;
--#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
-+#if defined(OS_LINUX)
- io_thread_priority = base::ThreadPriority::DISPLAY;
- #endif
-
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -58,9 +58,17 @@ const gpu::GpuPreferences GetGpuPreferen
- gpu_preferences.in_process_gpu =
- command_line->HasSwitch(switches::kInProcessGPU);
- gpu_preferences.disable_accelerated_video_decode =
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo);
-+#else
- command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode);
-+#endif
- gpu_preferences.disable_accelerated_video_encode =
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo);
-+#else
- command_line->HasSwitch(switches::kDisableAcceleratedVideoEncode);
-+#endif
- #if defined(OS_WIN)
- uint32_t enable_accelerated_vpx_decode_val =
- gpu::GpuPreferences::VPX_VENDOR_MICROSOFT;
---- a/content/public/common/content_switches.cc
-+++ b/content/public/common/content_switches.cc
-@@ -64,6 +64,11 @@ const char kDisable3DAPIs[]
- // Disable gpu-accelerated 2d canvas.
- const char kDisableAccelerated2dCanvas[] = "disable-accelerated-2d-canvas";
-
-+#if defined(OS_LINUX)
-+// Enables hardware acceleration of video for Linux only. VA-API driver
-+// is required to be present on the system installation.
-+const char kEnableAcceleratedVideo[] = "enable-accelerated-video";
-+#endif
- // Disables hardware acceleration of video decode, where available.
- const char kDisableAcceleratedVideoDecode[] =
- "disable-accelerated-video-decode";
-@@ -853,11 +858,13 @@ const char kWaitForDebuggerChildren[]
- // ignores this switch on its stable and beta channels.
- const char kDisableWebRtcEncryption[] = "disable-webrtc-encryption";
-
-+#if defined(OS_CHROMEOS)
- // Disables HW decode acceleration for WebRTC.
- const char kDisableWebRtcHWDecoding[] = "disable-webrtc-hw-decoding";
-
- // Disables HW encode acceleration for WebRTC.
- const char kDisableWebRtcHWEncoding[] = "disable-webrtc-hw-encoding";
-+#endif
-
- // Enables negotiation of GCM cipher suites from RFC 7714 for SRTP in WebRTC.
- // See https://tools.ietf.org/html/rfc7714 for further information.
---- a/content/public/common/content_switches.h
-+++ b/content/public/common/content_switches.h
-@@ -102,6 +102,9 @@ CONTENT_EXPORT extern const char kDisabl
- CONTENT_EXPORT extern const char kDomAutomationController[];
- extern const char kDisable2dCanvasClipAntialiasing[];
- CONTENT_EXPORT extern const char kDumpBlinkRuntimeCallStats[];
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+CONTENT_EXPORT extern const char kEnableAcceleratedVideo[];
-+#endif
- CONTENT_EXPORT extern const char kEnableAccessibilityObjectModel[];
- CONTENT_EXPORT extern const char kEnableAggressiveDOMStorageFlushing[];
- CONTENT_EXPORT extern const char kEnableAutomation[];
-@@ -239,8 +242,10 @@ CONTENT_EXPORT extern const char kValida
- CONTENT_EXPORT extern const char kWaitForDebuggerChildren[];
-
- CONTENT_EXPORT extern const char kDisableWebRtcEncryption[];
-+#if defined(OS_CHROMEOS)
- CONTENT_EXPORT extern const char kDisableWebRtcHWDecoding[];
- CONTENT_EXPORT extern const char kDisableWebRtcHWEncoding[];
-+#endif
- CONTENT_EXPORT extern const char kEnableWebRtcSrtpAesGcm[];
- CONTENT_EXPORT extern const char kEnableWebRtcSrtpEncryptedHeaders[];
- CONTENT_EXPORT extern const char kEnableWebRtcStunOrigin[];
---- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
-+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
-@@ -276,10 +276,18 @@ void PeerConnectionDependencyFactory::In
-
- const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
- if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) {
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ if (cmd_line->HasSwitch(switches::kEnableAcceleratedVideo))
-+#else
- if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding))
-+#endif
- decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories));
-
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ if (cmd_line->HasSwitch(switches::kEnableAcceleratedVideo))
-+#else
- if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding))
-+#endif
- encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories));
- }
-
---- a/content/renderer/render_thread_impl.cc
-+++ b/content/renderer/render_thread_impl.cc
-@@ -1415,7 +1415,11 @@ media::GpuVideoAcceleratorFactories* Ren
- kGpuStreamPriorityMedia);
-
- const bool enable_video_accelerator =
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+ cmd_line->HasSwitch(switches::kEnableAcceleratedVideo) &&
-+#else
- !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) &&
-+#endif
- (gpu_channel_host->gpu_feature_info()
- .status_values[gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE] ==
- gpu::kGpuFeatureStatusEnabled);
---- a/gpu/config/software_rendering_list.json
-+++ b/gpu/config/software_rendering_list.json
-@@ -374,17 +374,6 @@
- ]
- },
- {
-- "id": 48,
-- "description": "Accelerated video decode is unavailable on Linux",
-- "cr_bugs": [137247],
-- "os": {
-- "type": "linux"
-- },
-- "features": [
-- "accelerated_video_decode"
-- ]
-- },
-- {
- "id": 50,
- "description": "Disable VMware software renderer on older Mesa",
- "cr_bugs": [145531, 332596, 571899, 629434],
---- a/media/gpu/BUILD.gn
-+++ b/media/gpu/BUILD.gn
-@@ -501,6 +501,14 @@ if (use_v4l2_codec || use_vaapi || is_ma
- }
- }
-
-+if (is_desktop_linux && use_vaapi) {
-+ import("//build/config/linux/pkg_config.gni")
-+
-+ pkg_config("libva_config") {
-+ packages = [ "libva" ]
-+ }
-+}
-+
- if (use_v4l2_codec || use_vaapi) {
- test("jpeg_encode_accelerator_unittest") {
- deps = [
-@@ -571,6 +579,10 @@ if (use_v4l2_codec || use_vaapi) {
- if (use_ozone) {
- deps += [ "//ui/ozone" ]
- }
-+
-+ if (is_desktop_linux) {
-+ public_configs = [ ":libva_config" ]
-+ }
- }
- }
-
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -108,10 +108,15 @@ const char kUseFileForFakeAudioCapture[]
- // accelerator hardware to be present.
- const char kUseFakeJpegDecodeAccelerator[] = "use-fake-jpeg-decode-accelerator";
-
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+// Enable hardware accelerated mjpeg decode on linux
-+const char kEnableAcceleratedMjpegDecode[] = "enable-accelerated-mjpeg-decode";
-+#else
- // Disable hardware acceleration of mjpeg decode for captured frame, where
- // available.
- const char kDisableAcceleratedMjpegDecode[] =
- "disable-accelerated-mjpeg-decode";
-+#endif
-
- // When running tests on a system without the required hardware or libraries,
- // this flag will cause the tests to fail. Otherwise, they silently succeed.
-@@ -460,15 +465,22 @@ const base::Feature kPreloadMediaEngagem
- #endif
-
- bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
-+
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
-+ switches::kEnableAcceleratedMjpegDecode)
-+#else
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-- switches::kDisableAcceleratedMjpegDecode)) {
-+ switches::kDisableAcceleratedMjpegDecode)
-+#endif
-+ ) {
- return false;
- }
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kUseFakeJpegDecodeAccelerator)) {
- return true;
- }
--#if defined(OS_CHROMEOS)
-+#if !defined(OS_ANDROID) && defined(OS_LINUX)
- return true;
- #endif
- return false;
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -64,7 +64,11 @@ MEDIA_EXPORT extern const char kUseFakeD
- MEDIA_EXPORT extern const char kUseFileForFakeVideoCapture[];
- MEDIA_EXPORT extern const char kUseFileForFakeAudioCapture[];
- MEDIA_EXPORT extern const char kUseFakeJpegDecodeAccelerator[];
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-+MEDIA_EXPORT extern const char kEnableAcceleratedMjpegDecode[];
-+#else
- MEDIA_EXPORT extern const char kDisableAcceleratedMjpegDecode[];
-+#endif
-
- MEDIA_EXPORT extern const char kRequireAudioHardwareForTesting[];
- MEDIA_EXPORT extern const char kMuteAudio[];
---- a/content/browser/utility_process_host.cc
-+++ b/content/browser/utility_process_host.cc
-@@ -304,7 +304,11 @@ bool UtilityProcessHost::StartProcess()
- switches::kOverrideUseSoftwareGLForTests,
- switches::kOverrideEnabledCdmInterfaceVersion,
- switches::kProxyServer,
-+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
-+ switches::kEnableAcceleratedMjpegDecode,
-+#else
- switches::kDisableAcceleratedMjpegDecode,
-+#endif
- switches::kUseFakeDeviceForMediaStream,
- switches::kUseFakeJpegDecodeAccelerator,
- switches::kUseFileForFakeVideoCapture,
diff --git a/enable-vaapi.patch b/enable-vaapi.patch
new file mode 100644
index 0000000..3ee3a0d
--- /dev/null
+++ b/enable-vaapi.patch
@@ -0,0 +1,172 @@
+From abc7295ca1653c85472916909f0eb76e28e79a58 Mon Sep 17 00:00:00 2001
+From: Akarshan Biswas <akarshan.biswas@gmail.com>
+Date: Thu, 24 Jan 2019 12:45:29 +0530
+Subject: [PATCH] Enable mojo with VDA2 on Linux
+
+---
+ chrome/browser/about_flags.cc | 8 ++++----
+ chrome/browser/flag_descriptions.cc | 9 +++++++--
+ chrome/browser/flag_descriptions.h | 10 ++++++++--
+ gpu/config/software_rendering_list.json | 3 ++-
+ media/media_options.gni | 9 ++++++---
+ media/mojo/services/gpu_mojo_media_client.cc | 4 ++--
+ 6 files changed, 29 insertions(+), 14 deletions(-)
+
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 0a84c6ac1..be2aa1d8b 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1714,7 +1714,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ #if defined(OS_WIN)
+@@ -2345,12 +2345,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // ENABLE_ISOLATED_XR_SERVICE
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS // OS_LINUX
+ {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
+ flag_descriptions::kV8CacheOptionsDescription, kOsAll,
+ MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 62637e092..86f89fc6e 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3085,15 +3085,20 @@ const char kTextSuggestionsTouchBarDescription[] =
+
+ #endif
+
+-// Chrome OS -------------------------------------------------------------------
++// Chrome OS Linux-------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++#endif
++
++// Chrome OS --------------------------------------------------
++
++#if defined(OS_CHROMEOS)
+
+ const char kAllowTouchpadThreeFingerClickName[] = "Touchpad three-finger-click";
+ const char kAllowTouchpadThreeFingerClickDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 5dac660bb..6cc4115da 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1846,13 +1846,19 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ #endif // defined(OS_MACOSX)
+
+-// Chrome OS ------------------------------------------------------------------
++// Chrome OS and Linux ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
++
++// Chrome OS ------------------------------------------------------------------------
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAllowTouchpadThreeFingerClickName[];
+ extern const char kAllowTouchpadThreeFingerClickDescription[];
+
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 65f37b3f1..ae8a1718f 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -371,11 +371,12 @@
+ },
+ {
+ "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
++ "description": "Accelerated VA-API video decode is not supported on NVIDIA platforms",
+ "cr_bugs": [137247],
+ "os": {
+ "type": "linux"
+ },
++ "vendor_id": "0x10de",
+ "features": [
+ "accelerated_video_decode"
+ ]
+diff --git a/media/media_options.gni b/media/media_options.gni
+index 46eaa5818..6e338f651 100644
+--- a/media/media_options.gni
++++ b/media/media_options.gni
+@@ -5,6 +5,7 @@
+ import("//build/config/chrome_build.gni")
+ import("//build/config/chromecast_build.gni")
+ import("//build/config/features.gni")
++import("//media/gpu/args.gni")
+ import("//testing/libfuzzer/fuzzer_test.gni")
+
+ # Do not expand this list without double-checking with OWNERS, this is a list of
+@@ -129,8 +130,9 @@ declare_args() {
+ # |mojo_media_services|). When enabled, selected mojo paths will be enabled in
+ # the media pipeline and corresponding services will hosted in the selected
+ # remote process (e.g. "utility" process, see |mojo_media_host|).
+- enable_mojo_media = is_android || is_chromecast || is_chromeos || is_mac ||
+- is_win || enable_library_cdms
++ enable_mojo_media =
++ is_android || is_chromecast || is_chromeos || is_mac || is_win ||
++ enable_library_cdms || (is_desktop_linux && use_vaapi)
+
+ # Enable the TestMojoMediaClient to be used in mojo MediaService. This is for
+ # testing only and will override the default platform MojoMediaClient, if any.
+@@ -200,7 +202,8 @@ if (enable_mojo_media) {
+ ]
+ _default_mojo_media_host = "gpu"
+ }
+- } else if (is_chromeos || is_mac || is_win) {
++ } else if (is_chromeos || is_mac || is_win ||
++ (is_desktop_linux && use_vaapi)) {
+ _default_mojo_media_services = [ "video_decoder" ]
+ _default_mojo_media_host = "gpu"
+ }
+diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc
+index 75f5e611c..09a8fef92 100644
+--- a/media/mojo/services/gpu_mojo_media_client.cc
++++ b/media/mojo/services/gpu_mojo_media_client.cc
+@@ -54,7 +54,7 @@ namespace media {
+ namespace {
+
+ #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
+- defined(OS_WIN)
++ defined(OS_WIN) || defined(OS_LINUX)
+ gpu::CommandBufferStub* GetCommandBufferStub(
+ base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
+ base::UnguessableToken channel_token,
+@@ -148,7 +148,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::CreateVideoDecoder(
+ android_overlay_factory_cb_, std::move(request_overlay_info_cb),
+ std::make_unique<VideoFrameFactoryImpl>(gpu_task_runner_,
+ std::move(get_stub_cb)));
+-#elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN)
++#elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
+ std::unique_ptr<VideoDecoder> vda_video_decoder = VdaVideoDecoder::Create(
+ task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
+ gpu_preferences_, gpu_workarounds_,
+--
+2.20.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment