diff options
author | SoundSonic1 | 2018-03-11 08:30:14 +0100 |
---|---|---|
committer | SoundSonic1 | 2018-03-11 08:30:14 +0100 |
commit | 217356132e61bb31cb77c9e659374b32b517cc33 (patch) | |
tree | e0510c24d3fa340de15daa43b540992296857a3c /chromium-vaapi-init-r16.patch | |
parent | e023aec4945d0e8cdf89fc3861fd82e826420b73 (diff) | |
download | aur-217356132e61bb31cb77c9e659374b32b517cc33.tar.gz |
Update to 65.0.3325.146
Diffstat (limited to 'chromium-vaapi-init-r16.patch')
-rw-r--r-- | chromium-vaapi-init-r16.patch | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/chromium-vaapi-init-r16.patch b/chromium-vaapi-init-r16.patch new file mode 100644 index 000000000000..8b49d2a08e04 --- /dev/null +++ b/chromium-vaapi-init-r16.patch @@ -0,0 +1,253 @@ +From 281edc278272f0650fc190c8539d443ac59157bc Mon Sep 17 00:00:00 2001 +From: Daniel Charles <daniel.charles@intel.com> +Date: Thu, 08 Feb 2018 02:36:51 +0000 +Subject: [PATCH] vaapi initialization: move it to vaapi_wrapper + +vaapi loading of libraries happens on the Pre and Post Sandbox +functions. Moving dynamic loading of libaries, i.e. libva,libva-drm +and i965_drv_video shared libraries to vaapi_wrapper. + +When calling PreSandbox function in vaapi_wrapper libva will open +i965_drv_video shared library and both will be available for use + +BUG=785117 +TEST=video initialization of h/w dec/enc, VAVDA/VAVEA/VAJDA subjective + testing and include unittests and autotests + +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: I862bb49f1167d7437e80387882cb9081ad53f54b +Signed-off-by: Daniel Charles <daniel.charles@intel.com> +Reviewed-on: https://chromium-review.googlesource.com/666138 +Commit-Queue: Miguel Casas <mcasas@chromium.org> +Reviewed-by: Kenneth Russell <kbr@chromium.org> +Reviewed-by: Antoine Labour <piman@chromium.org> +Reviewed-by: Dongseong Hwang <dongseong.hwang@intel.com> +Reviewed-by: Pawel Osciak <posciak@chromium.org> +Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org> +Cr-Commit-Position: refs/heads/master@{#535274} +--- + +diff --git a/content/gpu/gpu_sandbox_hook_linux.cc b/content/gpu/gpu_sandbox_hook_linux.cc +index e69e23e..5c4013c 100644 +--- a/content/gpu/gpu_sandbox_hook_linux.cc ++++ b/content/gpu/gpu_sandbox_hook_linux.cc +@@ -29,10 +29,6 @@ + #include "services/service_manager/sandbox/linux/bpf_gpu_policy_linux.h" + #include "services/service_manager/sandbox/linux/sandbox_linux.h" + +-#if BUILDFLAG(USE_VAAPI) +-#include <va/va_version.h> +-#endif +- + using sandbox::bpf_dsl::Policy; + using sandbox::syscall_broker::BrokerFilePermission; + using sandbox::syscall_broker::BrokerProcess; +@@ -48,22 +44,6 @@ + #endif + } + +-inline bool IsArchitectureX86_64() { +-#if defined(__x86_64__) +- return true; +-#else +- return false; +-#endif +-} +- +-inline bool IsArchitectureI386() { +-#if defined(__i386__) +- return true; +-#else +- return false; +-#endif +-} +- + inline bool IsArchitectureArm() { + #if defined(ARCH_CPU_ARM_FAMILY) + return true; +@@ -88,14 +68,6 @@ + #endif + } + +-inline bool IsLibVAVersion2() { +-#if BUILDFLAG(USE_VAAPI) && VA_MAJOR_VERSION == 1 +- return true; +-#else +- return false; +-#endif +-} +- + constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE; + + void AddV4L2GpuWhitelist( +@@ -270,50 +242,6 @@ + } + } + +-void LoadStandardLibraries( +- const service_manager::SandboxSeccompBPF::Options& options) { +- if (IsArchitectureX86_64() || IsArchitectureI386()) { +- // Accelerated video dlopen()'s some shared objects +- // inside the sandbox, so preload them now. +- if (IsAcceleratedVideoEnabled(options)) { +- if (IsLibVAVersion2()) { +- if (IsArchitectureX86_64()) { +- dlopen("/usr/lib64/va/drivers/i965_drv_video.so", dlopen_flag); +- dlopen("/usr/lib64/va/drivers/hybrid_drv_video.so", dlopen_flag); +- } else if (IsArchitectureI386()) { +- dlopen("/usr/lib/va/drivers/i965_drv_video.so", dlopen_flag); +- } +- dlopen("libva.so.2", dlopen_flag); +-#if defined(USE_OZONE) +- dlopen("libva-drm.so.2", dlopen_flag); +-#endif +- } else { +- // If we are linked against libva 1, we have two cases to handle: +- // - the sysroot includes both libva 1 and 2, in which case the drivers +- // are in /usr/lib{64}/va1/ +- // - the sysroot only includes libva 1, in which case the drivers are +- // are in /usr/lib{64}/va/ +- // This is ugly, but temporary until all builds have switched to libva 2. +- if (IsArchitectureX86_64()) { +- if (!dlopen("/usr/lib64/va1/drivers/i965_drv_video.so", dlopen_flag)) +- dlopen("/usr/lib64/va/drivers/i965_drv_video.so", dlopen_flag); +- if (!dlopen("/usr/lib64/va1/drivers/hybrid_drv_video.so", dlopen_flag)) +- dlopen("/usr/lib64/va/drivers/hybrid_drv_video.so", dlopen_flag); +- } else if (IsArchitectureI386()) { +- if (!dlopen("/usr/lib/va1/drivers/i965_drv_video.so", dlopen_flag)) +- dlopen("/usr/lib/va/drivers/i965_drv_video.so", dlopen_flag); +- } +- dlopen("libva.so.1", dlopen_flag); +-#if defined(USE_OZONE) +- dlopen("libva-drm.so.1", dlopen_flag); +-#elif defined(USE_X11) +- dlopen("libva-x11.so.1", dlopen_flag); +-#endif +- } +- } +- } +-} +- + bool LoadLibrariesForGpu( + const service_manager::SandboxSeccompBPF::Options& options) { + if (IsChromeOS()) { +@@ -326,7 +254,6 @@ + if (options.use_amd_specific_policies) + return LoadAmdGpuLibraries(); + } +- LoadStandardLibraries(options); + return true; + } + +diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc +index bc3d735..7421a74 100644 +--- a/media/gpu/vaapi/vaapi_wrapper.cc ++++ b/media/gpu/vaapi/vaapi_wrapper.cc +@@ -48,6 +48,11 @@ + using media_gpu_vaapi::kModuleVa_x11; + #endif + using media_gpu_vaapi::InitializeStubs; ++using media_gpu_vaapi::IsVaInitialized; ++#if defined(USE_X11) ++using media_gpu_vaapi::IsVa_x11Initialized; ++#endif ++using media_gpu_vaapi::IsVa_drmInitialized; + using media_gpu_vaapi::StubPathMap; + + #define LOG_VA_ERROR_AND_REPORT(va_error, err_msg) \ +@@ -166,9 +171,6 @@ + void SetDrmFd(base::PlatformFile fd) { drm_fd_.reset(HANDLE_EINTR(dup(fd))); } + + private: +- // Returns false on init failure. +- static bool PostSandboxInitialization(); +- + // Protected by |va_lock_|. + int refcount_; + +@@ -203,41 +205,17 @@ + VADisplayState::Get()->SetDrmFd(drm_file.GetPlatformFile()); + } + +-// static +-bool VADisplayState::PostSandboxInitialization() { +- const std::string va_suffix(std::to_string(VA_MAJOR_VERSION + 1)); +- StubPathMap paths; +- +- paths[kModuleVa].push_back(std::string("libva.so.") + va_suffix); +- paths[kModuleVa_drm].push_back(std::string("libva-drm.so.") + va_suffix); +-#if defined(USE_X11) +- // libva-x11 does not exist on libva >= 2 +- if (VA_MAJOR_VERSION == 0) +- paths[kModuleVa_x11].push_back("libva-x11.so.1"); +-#endif +- +- const bool success = InitializeStubs(paths); +- if (!success) { +- static const char kErrorMsg[] = "Failed to initialize VAAPI libs"; +-#if defined(OS_CHROMEOS) +- // When Chrome runs on Linux with target_os="chromeos", do not log error +- // message without VAAPI libraries. +- LOG_IF(ERROR, base::SysInfo::IsRunningOnChromeOS()) << kErrorMsg; +-#else +- DVLOG(1) << kErrorMsg; +-#endif +- } +- return success; +-} +- + VADisplayState::VADisplayState() + : refcount_(0), va_display_(nullptr), va_initialized_(false) {} + + bool VADisplayState::Initialize() { + va_lock_.AssertAcquired(); + +- static bool result = PostSandboxInitialization(); +- if (!result) ++ if (!IsVaInitialized() || ++#if defined(USE_X11) ++ !IsVa_x11Initialized() || ++#endif ++ !IsVa_drmInitialized()) + return false; + + if (refcount_++ > 0) +@@ -1169,6 +1147,38 @@ + // static + void VaapiWrapper::PreSandboxInitialization() { + VADisplayState::PreSandboxInitialization(); ++ ++ const std::string va_suffix(std::to_string(VA_MAJOR_VERSION + 1)); ++ StubPathMap paths; ++ ++ paths[kModuleVa].push_back(std::string("libva.so.") + va_suffix); ++ paths[kModuleVa_drm].push_back(std::string("libva-drm.so.") + va_suffix); ++#if defined(USE_X11) ++ paths[kModuleVa_x11].push_back(std::string("libva-x11.so.") + va_suffix); ++#endif ++ ++ // InitializeStubs dlopen() VA-API libraries ++ // libva.so ++ // libva-x11.so (X11) ++ // libva-drm.so (X11 and Ozone). ++ static bool result = InitializeStubs(paths); ++ if (!result) { ++ static const char kErrorMsg[] = "Failed to initialize VAAPI libs"; ++#if defined(OS_CHROMEOS) ++ // When Chrome runs on Linux with target_os="chromeos", do not log error ++ // message without VAAPI libraries. ++ LOG_IF(ERROR, base::SysInfo::IsRunningOnChromeOS()) << kErrorMsg; ++#else ++ DVLOG(1) << kErrorMsg; ++#endif ++ } ++ ++ // VASupportedProfiles::Get creates VADisplayState and in so doing ++ // driver associated libraries are dlopen(), to know: ++ // i965_drv_video.so ++ // hybrid_drv_video.so (platforms that support it) ++ // libcmrt.so (platforms that support it) ++ VASupportedProfiles::Get(); + } + + VaapiWrapper::VaapiWrapper() |