diff options
Diffstat (limited to 'chromium-intel-vaapi_r16.diff.patch')
-rw-r--r-- | chromium-intel-vaapi_r16.diff.patch | 673 |
1 files changed, 0 insertions, 673 deletions
diff --git a/chromium-intel-vaapi_r16.diff.patch b/chromium-intel-vaapi_r16.diff.patch deleted file mode 100644 index e3e935decda3..000000000000 --- a/chromium-intel-vaapi_r16.diff.patch +++ /dev/null @@ -1,673 +0,0 @@ -From 7f29b44224439377592be2b75da0b86d82d8ad6d Mon Sep 17 00:00:00 2001 -From: Daniel Charles <daniel.charles@intel.com> -Date: Wed, 18 Oct 2017 17:27:42 -0700 -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" -TEST="and decoder hardware accelerated" -TEST="have libva/intel-vaapi-driver installed and not installed in the system" -TEST="repeat on different hardware families" -R=posciak@chromium.org -R=kcwu@chromium.org - -Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel -Change-Id: Ifbbf5c9e5221a8b5733fc6d4d0cf984a1f103171 -Signed-off-by: Daniel Charles <daniel.charles@intel.com> ---- - -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 3555293..4c3115f 100644 ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -1246,12 +1246,14 @@ - flag_descriptions::kUiPartialSwapDescription, kOsAll, - SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, - #if BUILDFLAG(ENABLE_WEBRTC) -+#if !defined(OS_LINUX) || 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, -@@ -1557,6 +1559,13 @@ - flag_descriptions::kSpuriousPowerButtonLidAngleChangeDescription, kOsCrOS, - MULTI_VALUE_TYPE(kSpuriousPowerButtonLidAngleChangeChoices)}, - #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, -@@ -1564,6 +1573,7 @@ - kOsMac | kOsWin | kOsCrOS | kOsAndroid, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), - }, -+#endif - {"mojo-video-encode-accelerator", - flag_descriptions::kMojoVideoEncodeAcceleratorName, - flag_descriptions::kMojoVideoEncodeAcceleratorDescription, -@@ -2229,12 +2239,17 @@ - FEATURE_VALUE_TYPE(features::kWebVrVsyncAlign)}, - #endif // OS_ANDROID - #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)}, -diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc -index 3815e79..d5d3712 100644 ---- 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" -@@ -79,8 +80,13 @@ - ::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, -+#endif - ::switches::kDisableBlinkFeatures, - ::switches::kDisableCastStreamingHWEncoding, - ::switches::kDisableDistanceFieldText, -@@ -166,7 +172,7 @@ - ::switches::kDisableWebGLImageChromium, - ::switches::kEnableWebGLImageChromium, - ::switches::kEnableWebVR, --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && (defined(OS_CHROMEOS) || defined(OS_ANDROID)) - ::switches::kDisableWebRtcHWDecoding, - ::switches::kDisableWebRtcHWEncoding, - #endif -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 74e6bc7..ab184a5 100644 ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -14,6 +14,13 @@ - "Enables the use of the GPU to perform 2d canvas rendering instead of " - "using software rendering."; - -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+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."; -@@ -1478,6 +1485,7 @@ - const char kWebrtcEchoCanceller3Description[] = - "Experimental WebRTC echo canceller (AEC3)."; - -+#if !defined(OS_LINUX) || !defined(OS_CHROMEOS) - const char kWebrtcHwDecodingName[] = "WebRTC hardware video decoding"; - const char kWebrtcHwDecodingDescription[] = - "Support in WebRTC for decoding video streams using platform hardware."; -@@ -1485,6 +1493,7 @@ - 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[] = -@@ -2283,14 +2292,16 @@ - - // 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."; -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 54a4950..5ace5e0 100644 ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -37,6 +37,10 @@ - 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[]; - -@@ -1401,13 +1405,17 @@ - - #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[]; - -diff --git a/content/browser/gpu/compositor_util.cc b/content/browser/gpu/compositor_util.cc -index 122282d..bc102a3 100644 ---- a/content/browser/gpu/compositor_util.cc -+++ b/content/browser/gpu/compositor_util.cc -@@ -105,7 +105,11 @@ - true}, - {"video_decode", - manager->GetFeatureStatus(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}, -diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc -index 51aa672..963da85 100644 ---- a/content/browser/gpu/gpu_data_manager_impl_private.cc -+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc -@@ -717,7 +717,11 @@ - DCHECK(command_line); - - if (ShouldDisableAcceleratedVideoDecode(command_line)) -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ command_line->AppendSwitch(switches::kEnableAcceleratedVideo); -+#else - command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); -+#endif - - #if defined(USE_AURA) - if (!CanUseGpuBrowserCompositor()) -@@ -826,7 +834,12 @@ - const base::CommandLine* command_line = - base::CommandLine::ForCurrentProcess(); - if (!ShouldDisableAcceleratedVideoDecode(command_line) && -- !command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode)) { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ command_line->HasSwitch(switches::kEnableAcceleratedVideo) -+#else -+ !command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) -+#endif -+ ) { - prefs->pepper_accelerated_video_decode_enabled = true; - } - } -@@ -1016,7 +1029,13 @@ - - bool GpuDataManagerImplPrivate::ShouldDisableAcceleratedVideoDecode( - const base::CommandLine* command_line) const { -- if (command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode)) { -+ if ( -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo) -+#else -+ command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) -+#endif -+ ) { - // It was already disabled on the command line. - return false; - } -diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc -index 95d4dff..9b26d3f 100644 ---- a/content/browser/gpu/gpu_process_host.cc -+++ b/content/browser/gpu/gpu_process_host.cc -@@ -120,7 +124,7 @@ - switches::kDisableLogging, - switches::kDisableSeccompFilterSandbox, - switches::kDisableShaderNameHashing, --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && !defined(OS_LINUX) - switches::kDisableWebRtcHWEncoding, - #endif - #if defined(OS_WIN) -diff --git a/content/browser/renderer_host/media/video_capture_browsertest.cc b/content/browser/renderer_host/media/video_capture_browsertest.cc -index 8ca0ad0..8c489d0 100644 ---- a/content/browser/renderer_host/media/video_capture_browsertest.cc -+++ b/content/browser/renderer_host/media/video_capture_browsertest.cc -@@ -155,8 +155,13 @@ - 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 - } - if (params_.use_mojo_service) { - base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( -diff --git a/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc b/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -index 34afec23..ad77490 100644 ---- a/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -+++ b/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -@@ -56,15 +56,21 @@ - bool is_platform_supported = - base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kUseFakeJpegDecodeAccelerator); --#if defined(OS_CHROMEOS) -- // Non-ChromeOS platforms do not support HW JPEG decode now. Do not establish -- // gpu channel to avoid introducing overhead. -+#if !defined(OS_ANDROID) && defined(OS_LINUX) -+ // Non-ChromeOS or Non-Linux platforms do not support HW JPEG decode now. Do -+ // not establish gpu channel to avoid introducing overhead. - is_platform_supported = true; - #endif - - if (!is_platform_supported || -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !base::CommandLine::ForCurrentProcess()->HasSwitch( -+ switches::kEnableAcceleratedMjpegDecode) -+#else - base::CommandLine::ForCurrentProcess()->HasSwitch( -- switches::kDisableAcceleratedMjpegDecode)) { -+ switches::kDisableAcceleratedMjpegDecode) -+#endif -+ ) { - decoder_status_ = FAILED; - RecordInitDecodeUMA_Locked(); - return; -diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index fbe4d21..1be295e 100644 ---- a/content/browser/renderer_host/render_process_host_impl.cc -+++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -2506,7 +2506,11 @@ - switches::kDefaultTileHeight, - switches::kDisable2dCanvasImageChromium, - switches::kDisableAcceleratedJpegDecoding, -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ switches::kEnableAcceleratedVideo, -+#else - switches::kDisableAcceleratedVideoDecode, -+#endif - switches::kDisableBackgroundTimerThrottling, - switches::kDisableBreakpad, - switches::kDisableBrowserSideNavigation, -@@ -2660,8 +2664,10 @@ - switches::kDisableMojoRenderer, - #endif - #if BUILDFLAG(ENABLE_WEBRTC) -+#if !defined(OS_LINUX) || defined(OS_CHROMEOS) - switches::kDisableWebRtcHWDecoding, - switches::kDisableWebRtcHWEncoding, -+#endif - switches::kEnableWebRtcSrtpAesGcm, - switches::kEnableWebRtcSrtpEncryptedHeaders, - switches::kEnableWebRtcStunOrigin, -diff --git a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -index 3d815a2..2c96048 100644 ---- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -+++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -@@ -58,7 +58,12 @@ - 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: -diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn -index a5424bb..b68b802 100644 ---- a/content/gpu/BUILD.gn -+++ b/content/gpu/BUILD.gn -@@ -45,7 +45,6 @@ - ] - - configs += [ "//content:content_implementation" ] -- - deps = [ - "//base", - "//base/third_party/dynamic_annotations", -@@ -114,4 +113,8 @@ - if (enable_vulkan) { - deps += [ "//gpu/vulkan" ] - } -+ -+ if (is_desktop_linux) { -+ public_configs = [ "//media/gpu:libva_config" ] -+ } - } -diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc -index 556cf00..730f4ae 100644 ---- a/content/gpu/gpu_main.cc -+++ b/content/gpu/gpu_main.cc -@@ -254,7 +254,7 @@ - // Initializes StatisticsRecorder which tracks UMA histograms. - base::StatisticsRecorder::Initialize(); - --#if defined(OS_ANDROID) || defined(OS_CHROMEOS) -+#if defined(OS_LINUX) - // Set thread priority before sandbox initialization. - base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY); - #endif -@@ -283,7 +283,7 @@ - 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 - -diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc -index 6aafb06..d4ddd8d 100644 ---- a/content/public/browser/gpu_utils.cc -+++ b/content/public/browser/gpu_utils.cc -@@ -7,6 +7,7 @@ - #include "base/command_line.h" - #include "base/single_thread_task_runner.h" - #include "base/strings/string_number_conversions.h" -+#include "build/build_config.h" - #include "content/browser/gpu/gpu_process_host.h" - #include "content/public/common/content_features.h" - #include "content/public/common/content_switches.h" -@@ -57,12 +58,19 @@ - gpu_preferences.ui_prioritize_in_gpu_process = - command_line->HasSwitch(switches::kUIPrioritizeInGpuProcess); - gpu_preferences.disable_accelerated_video_decode = -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#else - command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); --#if defined(OS_CHROMEOS) -+#endif -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ gpu_preferences.disable_vaapi_accelerated_video_encode = -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#elif defined(OS_CHROMEOS) - gpu_preferences.disable_vaapi_accelerated_video_encode = - command_line->HasSwitch(switches::kDisableVaapiAcceleratedVideoEncode); - #endif --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && (!defined(OS_LINUX) || defined(OS_CHROMEOS)) - gpu_preferences.disable_web_rtc_hw_encoding = - command_line->HasSwitch(switches::kDisableWebRtcHWEncoding); - #endif -diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc -index 4e699d1..3a7a2b7 100644 ---- a/content/public/common/content_switches.cc -+++ b/content/public/common/content_switches.cc -@@ -89,12 +89,21 @@ - - // Disable gpu-accelerated 2d canvas. - const char kDisableAccelerated2dCanvas[] = "disable-accelerated-2d-canvas"; -- -+#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 - -+#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"; -@@ -932,11 +941,13 @@ - // 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. -diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h -index 2704924..67d00bb 100644 ---- a/content/public/common/content_switches.h -+++ b/content/public/common/content_switches.h -@@ -35,7 +35,11 @@ - CONTENT_EXPORT extern const char kDisable3DAPIs[]; - CONTENT_EXPORT extern const char kDisableAccelerated2dCanvas[]; - CONTENT_EXPORT extern const char kDisableAcceleratedJpegDecoding[]; -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+CONTENT_EXPORT extern const char kEnableAcceleratedMjpegDecode[]; -+#else - CONTENT_EXPORT extern const char kDisableAcceleratedMjpegDecode[]; -+#endif - CONTENT_EXPORT extern const char kDisableAcceleratedVideoDecode[]; - CONTENT_EXPORT extern const char kDisableAudioSupportForDesktopShare[]; - extern const char kDisableBackingStoreLimit[]; -@@ -109,6 +113,9 @@ - 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 kEnableAggressiveDOMStorageFlushing[]; - CONTENT_EXPORT extern const char kEnableAutomation[]; - CONTENT_EXPORT extern const char kEnablePreferCompositingToLCDText[]; -@@ -256,8 +263,10 @@ - - #if BUILDFLAG(ENABLE_WEBRTC) - 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[]; -diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -index 017056c..825bdce 100644 ---- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -@@ -239,10 +239,19 @@ - - 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 (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) { -+#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)); - } - } -diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index dc01117..2f9ee03 100644 ---- a/content/renderer/render_thread_impl.cc -+++ b/content/renderer/render_thread_impl.cc -@@ -1456,7 +1456,11 @@ - scoped_refptr<base::SingleThreadTaskRunner> media_task_runner = - GetMediaThreadTaskRunner(); - const bool enable_video_accelerator = -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ cmd_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#else - !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); -+#endif - const bool enable_gpu_memory_buffer_video_frames = - #if defined(OS_MACOSX) || defined(OS_LINUX) - !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && -diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json -index 1289a55..22e11e5 100644 ---- 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], -diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn -index 490722c..1cda2fb 100644 ---- a/media/filters/BUILD.gn -+++ b/media/filters/BUILD.gn -@@ -189,7 +189,7 @@ - deps += [ "//media/base/android" ] - } - -- if (current_cpu != "arm" && is_chromeos) { -+ if (current_cpu != "arm" && (is_chromeos || is_desktop_linux)) { - sources += [ - "h264_bitstream_buffer.cc", - "h264_bitstream_buffer.h", -diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn -index 729c6fa..4878251 100644 ---- a/media/gpu/BUILD.gn -+++ b/media/gpu/BUILD.gn -@@ -24,6 +24,14 @@ - import("//build/config/mac/mac_sdk.gni") - } - -+if (is_desktop_linux && use_vaapi) { -+ import("//build/config/linux/pkg_config.gni") -+ -+ pkg_config("libva_config") { -+ packages = [ "libva" ] -+ } -+} -+ - if (use_vaapi) { - action("libva_generate_stubs") { - extra_header = "va_stub_header.fragment" -@@ -334,6 +342,9 @@ - "vaapi_drm_picture.h", - ] - } -+ if (is_desktop_linux) { -+ public_configs = [ ":libva_config" ] -+ } - } - - if (is_win) { -diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc -index 2cee490..de02414 100644 ---- a/media/gpu/gpu_video_decode_accelerator_factory.cc -+++ b/media/gpu/gpu_video_decode_accelerator_factory.cc -@@ -87,6 +87,7 @@ - // profile (instead of calculating a superset). - // TODO(posciak,henryhsu): improve this so that we choose a superset of - // resolutions and other supported profile parameters. -+ DVLOG(1) << "Get Supported profiles"; - #if defined(OS_WIN) - capabilities.supported_profiles = - DXVAVideoDecodeAccelerator::GetSupportedProfiles(gpu_preferences, -diff --git a/media/gpu/vaapi_wrapper.cc b/media/gpu/vaapi_wrapper.cc -index 1e72893..6495642 100644 ---- a/media/gpu/vaapi_wrapper.cc -+++ b/media/gpu/vaapi_wrapper.cc -@@ -1117,6 +1117,7 @@ - if (drm_file.IsValid()) - GetDisplayState()->SetDrmFd(drm_file.GetPlatformFile()); - #endif -+ GetProfileInfos(); // dlopen all necessary libraries - } - - // static |