#6 Enable vaapi support
Closed 6 years ago by hellbangerkarna. Opened 6 years ago by hellbangerkarna.
https://github.com/biswasab/chromium master  into  master

Add html5 video acceleration support
Akarshan Biswas • 6 years ago  
chromium.spec
file modified
+24 -2
@@ -136,7 +136,7 @@

  Name:		chromium%{chromium_channel}

  %endif

  Version:	%{majorversion}.0.3359.139

- Release:	1%{?dist}

+ Release:	2%{?dist}

  Summary:	A WebKit (Blink) powered web browser

  Url:		http://www.chromium.org/Home

  License:	BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
@@ -245,6 +245,12 @@

  # https://chromium.googlesource.com/chromium/src/+/b84682f31dc99b9c90f5a04947075815697c68d9%5E%21/#F0

  Patch97:	chromium-66.0.3359.139-arm-init-fix.patch

  

+ #Add support for html5 video acceleration on Linux from https://chromium-review.googlesource.com/c/chromium/src/+/532294

+ #Can do vp9/vp8 acceleration on Intel skylake or above

+ #Can do h264 acceleration on intel/amdgpu and Nvidia with libva-vdpau-driver or equivalent driver installed

+ #Flag is disabled by default

+ Patch98:	vaapi.patch

+ 

  

  # Use chromium-latest.py to generate clean tarball from released build tarballs, found here:

  # http://build.chromium.org/buildbot/official/
@@ -437,6 +443,10 @@

  BuildRequires: devtoolset-7-toolchain, devtoolset-7-libatomic-devel

  %endif

  

+ #For video acceleration Libva sources are required

+ BuildRequires: 	libva-devel

+ 

+ 

  # There is a hardcoded check for nss 3.26 in the chromium code (crypto/nss_util.cc)

  Requires:	nss%{_isa} >= 3.26

  Requires:	nss-mdns%{_isa}
@@ -453,6 +463,11 @@

  Requires:	u2f-hidraw-policy

  %endif

  

+ #Let's make libva as requirement. Individual drivers can be installed by the user

+ Requires:	libva

+ 

+ 

+ 

  # Once upon a time, we tried to split these out... but that's not worth the effort anymore.

  Provides:	chromium-ffmpegsumo = %{version}-%{release}

  Obsoletes:	chromium-ffmpegsumo <= 35.0.1916.114
@@ -728,6 +743,8 @@

  %patch96 -p1 -b .flatsetfix

  %patch97 -p1 -b .arm-init-fix

  

+ %patch98 -p1 -b .vaapi

+ 

  # Change shebang in all relevant files in this directory and all subdirectories

  # See `man find` for how the `-exec command {} +` syntax works

  find -type f -exec sed -i '1s=^#!/usr/bin/\(python\|env python\)[23]\?=#!%{__python2}=' {} +
@@ -877,6 +894,7 @@

  %else

  CHROMIUM_BROWSER_GN_DEFINES+=' use_gtk3=false'

  %endif

+ CHROMIUM_BROWSER_GN_DEFINES+=' use_vaapi=true'

  export CHROMIUM_BROWSER_GN_DEFINES

  

  CHROMIUM_HEADLESS_GN_DEFINES=""
@@ -885,6 +903,8 @@

  CHROMIUM_HEADLESS_GN_DEFINES+=' enable_nacl=false enable_print_preview=false enable_remoting=false use_alsa=false'

  CHROMIUM_HEADLESS_GN_DEFINES+=' use_cups=false use_dbus=false use_gio=false use_kerberos=false use_libpci=false'

  CHROMIUM_HEADLESS_GN_DEFINES+=' use_pulseaudio=false use_udev=false'

+ 

+ CHROMIUM_HEADLESS_GN_DEFINES+=' use_vaapi=true'

  export CHROMIUM_HEADLESS_GN_DEFINES

  

  mkdir -p third_party/node/linux/node-linux-x64/bin
@@ -1617,6 +1637,9 @@

  

  

  %changelog

+ * Tue May 08 2018 Akarshan Biswas <akarshan.biswas@gmail.com> - 66.0.3359.139-2

+ - Add Video Acceleration support

+ 

  * Tue May  1 2018 Tom Callaway <spot@fedoraproject.org> 66.0.3359.139-1

  - update to 66.0.3359.139

  
@@ -2318,4 +2341,3 @@

  

  * Mon Sep 9 2013 Tomas Popela <tpopela@redhat.com> 29.0.1547.65-1

  - Initial version based on Tom Callaway's <spot@fedoraproject.org> work

- 

vaapi.patch
file added
+536
@@ -0,0 +1,536 @@

+ From e95d904578c265a84f117d7d5eff598423f9283d Mon Sep 17 00:00:00 2001

+ From: Daniel Charles <daniel.charles@intel.com>

+ 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 <daniel.charles@intel.com>

+ ---

+ 

+ --- a/chrome/browser/about_flags.cc

+ +++ b/chrome/browser/about_flags.cc

+ @@ -1234,12 +1234,14 @@ const FeatureEntry kFeatureEntries[] = {

+       flag_descriptions::kUiPartialSwapDescription, kOsAll,

+       SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)},

+  #if BUILDFLAG(ENABLE_WEBRTC)

+ +#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,

+ @@ -1553,6 +1555,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,

+ @@ -1560,6 +1569,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,

+ @@ -2283,12 +2293,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::kDisableDistanceFieldText,

+ @@ -163,7 +169,7 @@ void DeriveCommandLine(const GURL& start

+      ::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

+ --- 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.";

+ @@ -1730,6 +1737,7 @@ const char kWebrtcEchoCanceller3Name[] =

+  const char kWebrtcEchoCanceller3Description[] =

+      "Experimental WebRTC echo canceller (AEC3).";

+  

+ +#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.";

+ @@ -1737,6 +1745,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[] =

+ @@ -2561,14 +2570,16 @@ const char kTabStripKeyboardFocusDescrip

+  

+  // 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[];

+  

+ @@ -1569,13 +1573,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

+ @@ -99,7 +99,11 @@ const GpuFeatureData GetGpuFeatureData(s

+        {"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},

+ --- a/content/browser/gpu/gpu_process_host.cc

+ +++ b/content/browser/gpu/gpu_process_host.cc

+ @@ -132,7 +132,7 @@ static const char* const kSwitchNames[]

+      switches::kDisableGLExtensions,

+      switches::kDisableLogging,

+      switches::kDisableShaderNameHashing,

+ -#if BUILDFLAG(ENABLE_WEBRTC)

+ +#if BUILDFLAG(ENABLE_WEBRTC) && !defined(OS_LINUX)

+      switches::kDisableWebRtcHWEncoding,

+  #endif

+  #if defined(OS_WIN)

+ --- a/content/browser/renderer_host/media/video_capture_browsertest.cc

+ +++ b/content/browser/renderer_host/media/video_capture_browsertest.cc

+ @@ -163,8 +163,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/media/video_capture_gpu_jpeg_decoder.cc

+ +++ b/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc

+ @@ -65,15 +65,21 @@ void VideoCaptureGpuJpegDecoder::Initial

+    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;

+ --- a/content/browser/renderer_host/render_process_host_impl.cc

+ +++ b/content/browser/renderer_host/render_process_host_impl.cc

+ @@ -2524,7 +2524,11 @@ void RenderProcessHostImpl::PropagateBro

+      switches::kDefaultTileHeight,

+      switches::kDisable2dCanvasImageChromium,

+      switches::kDisableAcceleratedJpegDecoding,

+ +#if defined(OS_LINUX) && !defined(OS_CHROMEOS)

+ +    switches::kEnableAcceleratedVideo,

+ +#else

+      switches::kDisableAcceleratedVideoDecode,

+ +#endif

+      switches::kDisableBackgroundTimerThrottling,

+      switches::kDisableBreakpad,

+      switches::kDisableCompositorUkmForTests,

+ @@ -2658,8 +2662,10 @@ void RenderProcessHostImpl::PropagateBro

+      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,

+ --- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc

+ +++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc

+ @@ -58,7 +58,12 @@ class 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

+ @@ -130,4 +130,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

+ @@ -286,7 +286,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

+ @@ -315,7 +315,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

+ @@ -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"

+ @@ -55,9 +56,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

+ @@ -78,12 +78,21 @@ const char kDisable3DAPIs[]

+  

+  // 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";

+ @@ -859,11 +868,13 @@ const char kZygoteProcess[]

+  // 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

+ @@ -33,7 +33,11 @@ CONTENT_EXPORT extern const char kDisabl

+  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 kDisableAcceleratedVideoEncode[];

+  CONTENT_EXPORT extern const char kDisableAudioSupportForDesktopShare[];

+ @@ -106,6 +110,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 kEnableAggressiveDOMStorageFlushing[];

+  CONTENT_EXPORT extern const char kEnableAutomation[];

+  CONTENT_EXPORT extern const char kEnablePreferCompositingToLCDText[];

+ @@ -240,8 +247,10 @@ CONTENT_EXPORT extern const char kZygote

+  

+  #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[];

+ --- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc

+ +++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc

+ @@ -282,10 +282,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

+ @@ -1581,7 +1581,11 @@ media::GpuVideoAcceleratorFactories* Ren

+    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

+        (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

+ @@ -373,17 +373,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

+ @@ -482,6 +482,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_vaapi) {

+    test("jpeg_encode_accelerator_unittest") {

+      deps = [

+ @@ -542,6 +550,10 @@ if (use_v4l2_codec || use_vaapi) {

+      if (use_ozone) {

+        deps += [ "//ui/ozone" ]

+      }

+ +

+ +    if (is_desktop_linux) {

+ +      public_configs = [ ":libva_config" ]

+ +    }

+    }

+  }

+  

no initial comment

I am not comfortable adding something like this which is not part of the upstream chromium tree. vaapi patches have been bouncing around for months now, but none have been merged.

Me and some others are trying hard to get Google accept this patch upstream. But unfortunately Google doesn't seem interested. That's why some distro's are including this patch already in their official builds. If you don't want to enable vaapi now then no problem but atleast turn off swiftshader(for now). We amdgpu users are having a very hard time with Fedora's chromium. https://bugzilla.redhat.com/show_bug.cgi?id=1576909
Upstream bug: https://bugs.chromium.org/p/chromium/issues/detail?id=719213

Should I generate a new PR?

Pull-Request has been closed by hellbangerkarna

6 years ago