Compare commits

...
Sign in to create a new pull request.

41 commits

Author SHA1 Message Date
Jan Grulich
eba7bec474 Fix Quick popup window positioning under X11 2026-01-13 12:24:12 +01:00
Yaakov Selkowitz
225a761a31 Apply glibc 2.42 patch on ELN 2026-01-12 14:01:37 -05:00
Jan Grulich
b4cecbae28 Apply the "Move GPU info logging into the GPU thread" patch 2026-01-11 15:44:08 +01:00
Jan Grulich
29c1b9692b Fix build against GCC16 2026-01-08 15:49:51 +01:00
Jan Grulich
5cba9df9f5 Move GPU info logging into the GPU thread 2026-01-08 08:39:35 +01:00
Jan Grulich
2933153067 Apply glib patchc only on F43+ 2025-11-21 11:16:01 +01:00
Jan Grulich
fe6ef1ccdf Rebuild for Koji infra issue 2025-11-21 07:59:29 +01:00
Jan Grulich
586037da1b Rebase PipeWire patch 2025-11-20 22:42:58 +01:00
Jan Grulich
bce7c7ba94 6.10.1 2025-11-20 18:33:32 +01:00
Dominik 'Rathann' Mierzejewski
5ebad15d9b Rebuilt for FFmpeg 8 2025-10-30 12:38:03 +01:00
Jan Grulich
0b9b2b1bb9 Fix FTBS in rawhide due to glib and PipeWire updates 2025-10-30 10:27:44 +01:00
Jan Grulich
05d82bf6b0 Add missing PipeWire headers 2025-10-25 12:56:09 +02:00
Jan Grulich
c55df45eea Drop already upstream patch 2025-10-07 19:06:47 +02:00
Jan Grulich
100d0a81a6 6.10.0 2025-10-07 15:13:30 +02:00
Jan Grulich
bb1b6240de Fix build 2025-09-29 20:47:35 +02:00
Dan Horák
3fd432b7b3 rebased to 6.10 - WIP 2025-09-28 19:34:10 +02:00
Jan Grulich
386d409055 6.10.0 RC 2025-09-26 15:01:07 +02:00
Sandro Mani
46ec64d60c Fix broken GPU rendering 2025-09-09 07:58:35 +02:00
Dan Horák
c0ac8d3ecb update chromium ppc64 patch 2025-08-29 10:54:02 +02:00
Jan Grulich
7b9f8de56a 6.9.2 2025-08-29 08:51:34 +02:00
František Zatloukal
cd9aef0eb3 Rebuilt for icu 77.1 2025-08-06 09:57:34 +02:00
Fedora Release Engineering
725e7ac366 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 11:37:09 +00:00
Dan Horák
cfe1645245 add pthread stack patch and refresh the generated patchset 2025-06-30 09:16:37 +02:00
Marie Loise Nolden
bdd79b9a00 rhel10 build fix
To build on RHEL 10, using system zlib-ng must currently be disabled (or the error patched out)

Error message on RHEL 10 build:

[13653/22150] /usr/bin/g++ -MD -MF obj/third_party/zlib/google/zip/zip_internal.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE -D_GLIBCXX_ASSERTIONS=1 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DUSING_SYSTEM_ICU=1 -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC -Igen -I../../../../../src/3rdparty/chromium -I../../../../../src/3rdparty/chromium/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -I../../../../../src/3rdparty/chromium/base/allocator/partition_allocator/src -Igen/base/allocator/partition_allocator/src -I../../../../../src/3rdparty/chromium/third_party/abseil-cpp -I../../../../../src/3rdparty/chromium/third_party/boringssl/src/include -I../../../../../src/3rdparty/chromium/third_party/protobuf/src -Igen/protoc_out -I../../../../../src/3rdparty/chromium/third_party/ced/src -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-misleading-indentation -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -fno-ident -fno-strict-aliasing -fstack-protector -Wno-unknown-pragmas -Wno-address -Wno-parentheses -Wno-sign-compare -Wno-stringop-overflow -Wno-stringop-overread -Wno-psabi -Wno-multichar -Wno-format-zero-length -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -m64 -msse3 -O2 -fdata-sections -ffunction-sections -fno-math-errno -fno-omit-frame-pointer -gdwarf-4 -g1 -fvisibility=hidden -Wno-narrowing -Wno-class-memaccess -Wno-attributes -Wno-class-memaccess -Wno-subobject-linkage -Wno-invalid-offsetof -Wno-return-type -Wno-deprecated-copy -Wno-invalid-offsetof -Wno-deprecated-copy -Wno-expansion-to-defined -std=gnu++20 -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -c ../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc -o obj/third_party/zlib/google/zip/zip_internal.o
FAILED: obj/third_party/zlib/google/zip/zip_internal.o 
/usr/bin/g++ -MD -MF obj/third_party/zlib/google/zip/zip_internal.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE -D_GLIBCXX_ASSERTIONS=1 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DUSING_SYSTEM_ICU=1 -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC -Igen -I../../../../../src/3rdparty/chromium -I../../../../../src/3rdparty/chromium/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -I../../../../../src/3rdparty/chromium/base/allocator/partition_allocator/src -Igen/base/allocator/partition_allocator/src -I../../../../../src/3rdparty/chromium/third_party/abseil-cpp -I../../../../../src/3rdparty/chromium/third_party/boringssl/src/include -I../../../../../src/3rdparty/chromium/third_party/protobuf/src -Igen/protoc_out -I../../../../../src/3rdparty/chromium/third_party/ced/src -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-misleading-indentation -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -fno-ident -fno-strict-aliasing -fstack-protector -Wno-unknown-pragmas -Wno-address -Wno-parentheses -Wno-sign-compare -Wno-stringop-overflow -Wno-stringop-overread -Wno-psabi -Wno-multichar -Wno-format-zero-length -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -m64 -msse3 -O2 -fdata-sections -ffunction-sections -fno-math-errno -fno-omit-frame-pointer -gdwarf-4 -g1 -fvisibility=hidden -Wno-narrowing -Wno-class-memaccess -Wno-attributes -Wno-class-memaccess -Wno-subobject-linkage -Wno-invalid-offsetof -Wno-return-type -Wno-deprecated-copy -Wno-invalid-offsetof -Wno-deprecated-copy -Wno-expansion-to-defined -std=gnu++20 -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -c ../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc -o obj/third_party/zlib/google/zip/zip_internal.o
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:180:1: error: ‘uLong’ does not name a type; did you mean ‘ulong’?
  180 | uLong ReadZipBuffer(void* opaque, void* /*stream*/, void* buf, uLong size) {
      | ^~~~~
      | ulong
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:195:1: error: ‘uLong’ does not name a type; did you mean ‘ulong’?
  195 | uLong WriteZipBuffer(void* /*opaque*/,
      | ^~~~~
      | ulong
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc: In function ‘void* zip::internal::PrepareMemoryForUnzipping(const std::string&)’:
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:323:30: error: ‘ReadZipBuffer’ was not declared in this scope
  323 |   zip_functions.zread_file = ReadZipBuffer;
      |                              ^~~~~~~~~~~~~
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:324:31: error: ‘WriteZipBuffer’ was not declared in this scope
  324 |   zip_functions.zwrite_file = WriteZipBuffer;
      |                               ^~~~~~~~~~~~~~
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc: In function ‘bool zip::internal::ZipOpenNewFileInZip(zipFile, const std::string&, base::Time, Compression)’:
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:360:9: error: ‘uLong’ does not name a type; did you mean ‘ulong’?
  360 |   const uLong LANGUAGE_ENCODING_FLAG = 0x1 << 11;
      |         ^~~~~
      |         ulong
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:373:17: error: ‘Z_DEFAULT_COMPRESSION’ was not declared in this scope
  373 |       /*level=*/Z_DEFAULT_COMPRESSION,
      |                 ^~~~~~~~~~~~~~~~~~~~~
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:377:20: error: ‘Z_DEFAULT_STRATEGY’ was not declared in this scope
  377 |       /*strategy=*/Z_DEFAULT_STRATEGY,
      |                    ^~~~~~~~~~~~~~~~~~
../../../../../src/3rdparty/chromium/third_party/zlib/google/zip_internal.cc:381:20: error: ‘LANGUAGE_ENCODING_FLAG’ was not declared in this scope
  381 |       /*flagBase=*/LANGUAGE_ENCODING_FLAG,
      |
2025-06-07 05:52:10 +00:00
Dan Horák
4d8326672e update ppc64le chromium patchset to qtwebengine specific change 2025-06-05 06:20:37 +00:00
Jan Grulich
fe1af83b4e 6.9.1 2025-06-04 22:50:12 +02:00
Marie Loise Nolden
1729aaf5cf more cleanup 2025-04-24 11:22:49 +02:00
Marie Loise Nolden
1b504add43 global define all optional system libs, enable XFA 2025-04-22 18:27:15 +02:00
Marie Loise Nolden
b90081532b undo last commit 2025-04-19 15:50:54 +00:00
Marie Loise Nolden
08ba518990 libva only for fedora 2025-04-19 15:48:33 +00:00
Dan Horák
6c0aac4537 fix build on ppc64le with gcc-15.0.1-0.11+ 2025-04-02 17:07:14 +00:00
Jan Grulich
79e1887050 6.9.0 2025-04-02 14:50:20 +02:00
Jan Grulich
971c884e11 6.9.0 RC 2025-03-26 10:02:36 +01:00
Fabio Valentini
0719e09c44
Rebuild for noopenh264 2.6.0 2025-03-13 18:48:46 +01:00
Jan Grulich
28d2f47751 Unbundle libxml and libxslt 2025-03-04 09:46:43 +01:00
Jan Grulich
e9dd0ece9c Rework OpenH264 support following Chromium package
Backport upstream change for ffmpeg codec selection issues.
2025-03-03 18:58:01 +01:00
Jan Grulich
5c1a69815b Bump build for ppc64le enablement 2025-02-17 19:23:30 +01:00
Dan Horák
89f26d9039 enable ppc64le 2025-02-14 12:26:12 +01:00
Jan Grulich
44d23d4ca3 List SBOM for QtPdf in the files section 2025-02-01 07:53:10 +01:00
Jan Grulich
f0bccee935 6.8.2 2025-01-31 18:46:13 +01:00
Fedora Release Engineering
241b88a584 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 21:45:24 +00:00
21 changed files with 29425 additions and 1125 deletions

8
.gitignore vendored
View file

@ -13,3 +13,11 @@
/qtwebengine-everywhere-src-6.7.2-clean.tar.xz
/qtwebengine-everywhere-src-6.8.0-clean.tar.xz
/qtwebengine-everywhere-src-6.8.1-clean.tar.xz
/qtwebengine-everywhere-src-6.8.2-clean.tar.xz
/qtwebengine-everywhere-src-6.9.0-rc-clean.tar.xz
/qtwebengine-everywhere-src-6.9.0-clean.tar.xz
/qtwebengine-everywhere-src-6.9.1-clean.tar.xz
/qtwebengine-everywhere-src-6.9.2-clean.tar.xz
/qtwebengine-everywhere-src-6.10.0-rc-clean.tar.xz
/qtwebengine-everywhere-src-6.10.0-clean.tar.xz
/qtwebengine-everywhere-src-6.10.1-clean.tar.xz

View file

@ -21,7 +21,7 @@
if [ -z "$1" ] ; then
echo "usage: ./clean_qtwebengine.sh VERSION"
echo "e.g.: ./clean_qtwebengine.sh 6.8.0"
echo "e.g.: ./clean_qtwebengine.sh 6.10.0"
exit 1
fi

52
prepare-ppc64.sh Normal file
View file

@ -0,0 +1,52 @@
#! /bin/bash
#
# Prepare ppc64le patchset for qtwebengine from Chromium patches using
# - https://quickbuild.io/~raptor-engineering-public/+archive/ubuntu/chromium/ or
# - https://gitlab.raptorengineering.com/raptor-engineering-public/chromium/openpower-patches
#
# Usage
# - check the base Chromium release in CHROMIUM_VERSION
# - get the patches from the URLs above
# - run "prepare-ppc64.sh <path_to_chromium_patches>"
#
patch_cleanup ()
{
file=$1
patch=$2
[ -f $file ] || { echo "File $file doesn't exist"; exit 1; }
remove=$(echo $patch | sed -e 's@\/@\\\/@g')
echo "Removing changes for $patch from $file ..."
sed -i -e "/Index: chromium-[0-9\.]*\/${remove}/,/^Index:/ {
/Index: chromium-[0-9\.]*\/${remove}/d;
/^[-@=+ ]/d;
/^$/d;
}" $file
}
dir=$1
[ -d $dir/ppc64le ] || { echo "Path $dir/ppc64le doesn't exist"; exit 1; }
# remove patches for files not included in the bundled chromium
patch_cleanup $dir/ppc64le/third_party/0001-Add-PPC64-support-for-boringssl.patch third_party/boringssl/src/crypto/test/abi_test.h
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/minidump/test/minidump_context_test_util.cc
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/minidump/test/minidump_context_test_util.h
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/snapshot/test/test_cpu_context.cc
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/snapshot/test/test_cpu_context.h
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/test/linux/get_tls.cc
patch_cleanup $dir/ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch third_party/crashpad/crashpad/test/multiprocess_posix.cc
# concatenate the patches from the series file to a single patchset
echo "Creating patchset ..."
cat series.ppc64 | while read line; do
case $line in
\#*) ;;
*) [ -z "$line" ] && continue; cat $dir/$line ;;
esac
done > qtwebengine-chromium-ppc64.patch

View file

@ -5,12 +5,46 @@
# package-notes causes FTBFS (#2043178)
%undefine _package_note_file
%global use_system_libwebp 1
%global use_system_jsoncpp 1
%if 0%{?rhel} && 0%{?rhel} == 9
%global use_system_libicu 0
%else
# defines for Optional system libraries:
%global use_system_re2 1
%global use_system_libicu 1
%global use_system_libwebp 1
%global use_system_opus 1
%global use_system_ffmpeg 1
# libvpx is exclusive with VA-API support (libva) which is enabled by default
%global use_system_libvpx 0
%global use_system_snappy 1
%global use_system_glib 1
%global use_system_zlib 1
%global use_system_minizip 1
%global use_system_libevent 1
%global use_system_libxml 1
%global use_system_lcms2 1
%global use_system_libpng 1
%global use_system_libtiff 1
%global use_system_libjpeg 1
%global use_system_libopenjpeg2 1
%global use_system_harfbuzz 1
%global use_system_freetype 1
%global use_system_libpci 1
%global use_system_libudev 1
%if 0%{?rhel} && 0%{?rhel} == 9
%global use_system_re2 0
%global use_system_libicu 0
%global use_system_minizip 0
%global use_system_harfbuzz 0
%endif
%if 0%{?rhel} && 0%{?rhel} == 10
%global use_system_zlib 0
%endif
# ppc64le builds currently fail with V8/XFA enabled (qt 6.9.0)
%ifarch ppc64le
%global enable_pdf_v8 0
%else
%global enable_pdf_v8 1
%endif
%if 0%{?fedora} && 0%{?fedora} >= 39
@ -18,8 +52,6 @@
%global use_system_py_six 1
%endif
%global use_system_re2 0
# NEON support on ARM (detected at runtime) - disable this if you are hitting
# FTBFS due to e.g. GCC bug https://bugzilla.redhat.com/show_bug.cgi?id=1282495
#global arm_neon 1
@ -36,8 +68,6 @@
# webcore_debug v8base_debug
%endif
#global prerelease rc
# spellchecking dictionary directory
%global _qtwebengine_dictionaries_dir %{_qt6_datadir}/qtwebengine_dictionaries
@ -46,22 +76,36 @@
# and designer plugins
%global __provides_exclude_from ^%{_qt6_plugindir}/.*\\.so$
# FIXME: we cannot use any ~rc or similar suffix as the build
# would fail for having too long filename
#global unstable 1
%if 0%{?unstable}
%global prerelease rc
%endif
%global examples 1
Summary: Qt6 - QtWebEngine components
Name: qt6-qtwebengine
Version: 6.8.1
Release: 3%{?dist}
Version: 6.10.1
Release: 5%{?dist}
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
# See also http://qt-project.org/doc/qt-5.0/qtdoc/licensing.html
# The other licenses are from Chromium and the code it bundles
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
URL: http://www.qt.io
%global majmin %(echo %{version} | cut -d. -f1-2)
%global qt_version %(echo %{version} | cut -d~ -f1)
# cleaned tarball with patent-encumbered codecs removed from the bundled FFmpeg
# ./qtwebengine-release.sh
# ./clean_qtwebengine.sh 6.4.1
Source0: qtwebengine-everywhere-src-%{version}-clean.tar.xz
# ./clean_qtwebengine.sh 6.9.0
%if 0%{?unstable}
Source0: %{qt_module}-everywhere-src-%{qt_version}-%{prerelease}-clean.tar.xz
%else
Source0: %{qt_module}-everywhere-src-%{version}-clean.tar.xz
%endif
# cleanup scripts used above
Source2: clean_qtwebengine.sh
@ -74,34 +118,72 @@ Source10: macros.qt6-qtwebengine
Source20: pulseaudio-12.2-headers.tar.gz
# workaround FTBFS against kernel-headers-5.2.0+
Patch1: qtwebengine-SIOCGSTAMP.patch
Patch2: qtwebengine-link-pipewire.patch
Patch1: qtwebengine-SIOCGSTAMP.patch
Patch2: qtwebengine-link-pipewire.patch
# Fix/workaround FTBFS on aarch64 with newer glibc
Patch3: qtwebengine-aarch64-new-stat.patch
Patch3: qtwebengine-aarch64-new-stat.patch
# FTBS warning: elaborated-type-specifier for a scoped enum must not
# use the 'class' keyword
Patch50: qtwebengine-fix-build.patch
# Enable OpenH264
Patch4: qtwebengine-use-openh264.patch
# FTBFS - /usr/include/bits/siginfo-consts.h:219:3: error: expected identifier
# 219 | SYS_SECCOMP = 1, /* Seccomp triggered. */
Patch5: qtwebengine-chromium-141-glibc-2.42-SYS_SECCOMP.patch
## Upstream patches:
# https://bugreports.qt.io/browse/QTBUG-129985
Patch80: qtwebengine-fix-arm-build.patch
# Remove with Qt 6.10.2
# https://codereview.qt-project.org/c/qt/qtwebengine/+/702597
Patch81: qtwebengine-move-gpu-info-logging-to-gpu-thread.patch
# https://qt-project.atlassian.net/browse/QTBUG-142823
Patch82: qtwebengine-fix-quick-popup-window-positioning-under-x11.patch
## Upstreamable patches:
Patch110: qtwebengine-webrtc-system-openh264.patch
Patch111: qtwebengine-blink-system-openh264.patch
Patch112: qtwebengine-media-system-openh264.patch
Patch100: qtwebengine-add-missing-pipewire-headers.patch
Patch101: qtwebengine-fix-build-against-gcc16.patch
## ppc64le port
Patch200: qtwebengine-6.9-ppc64.patch
Patch201: qtwebengine-chromium-ppc64.patch
# https://github.com/google/highway/commit/dcc0ca1cd4245ecff9e5ba50818e47d5e2ccf699
Patch202: qtwebengine-chromium-ppc64-highway.patch
# handled by qt6-srpm-macros, which defines %%qt6_qtwebengine_arches
# FIXME use/update qt6_qtwebengine_arches
# 32-bit arches not supported (https://bugreports.qt.io/browse/QTBUG-102143)
ExclusiveArch: aarch64 x86_64
ExclusiveArch: aarch64 x86_64 ppc64le
BuildRequires: cmake
BuildRequires: ninja-build >= 1.7.2
BuildRequires: make
%if 0%{?rhel} && 0%{?rhel} < 10
BuildRequires: gcc-toolset-13
BuildRequires: gcc-toolset-13-libatomic-devel
%else
BuildRequires: gcc-c++
%endif
# gn links statically (for now)
BuildRequires: libstdc++-static
BuildRequires: libatomic
BuildRequires: %{__python3}
BuildRequires: python3-html5lib
BuildRequires: gperf
BuildRequires: bison
BuildRequires: flex
BuildRequires: perl-interpreter
BuildRequires: nodejs >= 14.9
BuildRequires: krb5-devel
BuildRequires: git-core
BuildRequires: qt6-srpm-macros
BuildRequires: qt6-qtbase-devel
BuildRequires: qt6-qtbase-private-devel
%{?_qt6_version:Requires: qt6-qtbase%{?_isa} = %{_qt6_version}}
# TODO: check of = is really needed or if >= would be good enough -- rex
%{?_qt6:Requires: %{_qt6}%{?_isa} = %{_qt6_version}}
BuildRequires: qt6-qtdeclarative-devel
@ -112,94 +194,126 @@ BuildRequires: qt6-qttools-static
BuildRequires: qt6-qtquickcontrols2-devel
BuildRequires: qt6-qtwebchannel-devel
BuildRequires: qt6-qtwebsockets-devel
# for examples?
BuildRequires: ninja-build
BuildRequires: cmake
BuildRequires: bison
BuildRequires: flex
BuildRequires: gcc-c++
%if 0%{?rhel} && 0%{?rhel} < 10
BuildRequires: gcc-toolset-13
BuildRequires: gcc-toolset-13-libatomic-devel
%endif
# gn links statically (for now)
BuildRequires: libstdc++-static
BuildRequires: git-core
BuildRequires: gperf
BuildRequires: krb5-devel
%if 0%{?use_system_libicu}
BuildRequires: libicu-devel >= 68
%endif
BuildRequires: libatomic
BuildRequires: libjpeg-devel
BuildRequires: nodejs
BuildRequires: qt6-qthttpserver-devel
# optional system libraries in the order of the -- Configure summary: listing
%if 0%{?use_system_re2}
BuildRequires: re2-devel
BuildRequires: pkgconfig(re2) >= 11.0.0
%else
Provides: bundled(re2)
%endif
BuildRequires: snappy-devel
BuildConflicts: minizip-devel
%if 0%{?use_system_libicu}
BuildRequires: libicu-devel >= 70
%endif
%if 0%{?use_system_libwebp}
BuildRequires: pkgconfig(libwebp) >= 0.6.0
%endif
%if 0%{?use_system_opus}
BuildRequires: pkgconfig(opus) >= 1.3.1
%endif
%if %{?use_system_ffmpeg}
BuildRequires: pkgconfig(libavutil) >= 58.29.100
BuildRequires: pkgconfig(libavcodec) >= 60.31.102
BuildRequires: pkgconfig(libavformat) >= 60.16.100
BuildRequires: pkgconfig(openh264)
%endif
%if %{?use_system_libvpx}
BuildRequires: pkgconfig(vpx) >= 1.10.0
%endif
%if 0%{?use_system_snappy}
BuildRequires: pkgconfig(snappy)
%endif
%if 0%{?use_system_glib}
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gobject-2.0)
BuildRequires: pkgconfig(gio-2.0)
%endif
%if %{?use_system_zlib}
BuildRequires: pkgconfig(zlib)
%endif
%if 0%{?use_system_minizip}
BuildRequires: pkgconfig(minizip)
%else
Provides: bundled(minizip) = 2.8.1
%endif
%if 0%{?use_system_libevent}
BuildRequires: pkgconfig(libevent)
%endif
%if %{?use_system_libxml}
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libxslt)
%else
# bundled as "libxml"
# see src/3rdparty/chromium/third_party/libxml/linux/include/libxml/xmlversion.h
Provides: bundled(libxml2) = 2.9.13
# see src/3rdparty/chromium/third_party/libxslt/linux/config.h for version
Provides: bundled(libxslt) = 1.1.3
%endif
%if 0%{?use_system_lcms2}
BuildRequires: pkgconfig(lcms2)
%endif
%if 0%{?use_system_libpng}
BuildRequires: pkgconfig(libpng) >= 1.6.0
%endif
%if 0%{?use_system_libtiff}
BuildRequires: pkgconfig(libtiff-4) >= 4.2.0
%endif
%if 0%{?use_system_libjpeg}
BuildRequires: pkgconfig(libjpeg)
%endif
%if 0%{?use_system_libopenjpeg2}
BuildRequires: pkgconfig(libopenjp2)
%endif
%if 0%{?use_system_harfbuzz}
BuildRequires: pkgconfig(harfbuzz) >= 4.3.0
%endif
%if 0%{?use_system_freetype}
BuildRequires: pkgconfig(freetype2) >= 2.4.2
BuildRequires: pkgconfig(fontconfig)
%endif
%if 0%{?use_system_libpci}
BuildRequires: pkgconfig(libpci)
%endif
%if 0%{?use_system_libudev}
BuildRequires: pkgconfig(libudev)
%endif
# qpa-xcb support libraries
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xproto)
BuildRequires: pkgconfig(xshmfence)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(xkbfile)
BuildRequires: pkgconfig(xcb)
# required for webrtc
BuildRequires: pkgconfig(xdamage)
# required for alsa
BuildRequires: pkgconfig(alsa)
# required for pulseaudio
BuildRequires: pkgconfig(libpulse)
# required for vaapi
BuildRequires: pkgconfig(libva)
# required for pipewire
BuildRequires: pkgconfig(libpipewire-0.3)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(epoxy)
BuildRequires: pkgconfig(expat)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(gbm)
BuildRequires: pkgconfig(gio-2.0)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gobject-2.0)
BuildRequires: pkgconfig(harfbuzz)
%if 0%{?use_system_jsoncpp}
BuildRequires: pkgconfig(jsoncpp)
%endif
BuildRequires: pkgconfig(lcms2)
BuildRequires: pkgconfig(libcap)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libevent)
BuildRequires: pkgconfig(libpci)
BuildRequires: pkgconfig(libpipewire-0.3)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libudev)
%if 0%{?use_system_libwebp}
BuildRequires: pkgconfig(libwebp) >= 0.6.0
%endif
BuildRequires: pkgconfig(nss)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(nss) >= 3.26
BuildRequires: pkgconfig(poppler-cpp)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(xkbfile)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xrender)
%if ! (0%{?rhel} >= 10)
BuildRequires: pkgconfig(xscrnsaver)
%endif
BuildRequires: pkgconfig(xshmfence)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(zlib)
## https://bugreports.qt.io/browse/QTBUG-59094
## requires libxml2 built with icu support
#BuildRequires: pkgconfig(libxslt) pkgconfig(libxml-2.0)
BuildRequires: perl-interpreter
BuildRequires: %{__python3}
BuildRequires: python3-html5lib
BuildRequires: pkgconfig(vpx) >= 1.8.0
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(openh264)
BuildRequires: pkgconfig(libva)
%if 0%{?fedora} && 0%{?fedora} >= 39
BuildRequires: python3-zombie-imp
@ -263,15 +377,9 @@ Provides: bundled(leveldb) = 1.23
Provides: bundled(libjingle)
# see src/3rdparty/chromium/third_party/libsrtp/CHANGES for the version number
Provides: bundled(libsrtp) = 2.4.0
# bundled as "libxml"
# see src/3rdparty/chromium/third_party/libxml/linux/include/libxml/xmlversion.h
Provides: bundled(libxml2) = 2.9.13
# see src/3rdparty/chromium/third_party/libxslt/linux/config.h for version
Provides: bundled(libxslt) = 1.1.3
Provides: bundled(libyuv) = 1819
Provides: bundled(modp_b64)
Provides: bundled(ots)
Provides: bundled(re2)
# see src/3rdparty/chromium/third_party/protobuf/CHANGES.txt for the version
Provides: bundled(protobuf) = 3.13.0.1
Provides: bundled(qcms) = 4
@ -321,8 +429,6 @@ Provides: bundled(v8) = 11.8.172.18
# http://www.netlib.org/fdlibm/readme
Provides: bundled(fdlibm) = 5.3
%{?_qt6_version:Requires: qt6-qtbase%{?_isa} = %{_qt6_version}}
%description
%{summary}.
@ -365,12 +471,12 @@ Requires: qt6-qtdeclarative-devel%{?_isa}
%package -n qt6-qtpdf-examples
Summary: Example files for qt6-qtpdf
Requires: qt6-qtsvg%{?_isa}
%description -n qt6-qtpdf-examples
%{summary}.
%prep
%setup -q -n %{qt_module}-everywhere-src-%{version}%{?prerelease:-%{prerelease}} -a20
%setup -q -n %{qt_module}-everywhere-src-%{qt_version}%{?prerelease:-%{prerelease}} -a20
mv pulse src/3rdparty/chromium/
@ -380,16 +486,29 @@ popd
%patch -P1 -p1 -b .SIOCGSTAMP
%patch -P2 -p1 -b .link-pipewire
%patch -P3 -p1 -b .aarch64-new-stat
%patch -P50 -p1 -b .fix-build.patch
%patch -P4 -p1 -b .use-openh264
%if 0%{?fedora} > 43 || 0%{?rhel} > 10
%patch -P5 -p1 -b .chromium-141-glibc-2.42-SYS_SECCOMP
%endif
## upstream patches
%patch -P80 -p1 -b .fix-arm-build
%patch -P81 -p1 -b .move-gpu-info-logging-to-gpu-thread
%patch -P82 -p1 -b .fix-quick-popup-window-positioning-under-x11
## upstreamable patches
%patch -P110 -p1 -b .webrtc-system-openh264
%patch -P111 -p1 -b .blink-system-openh264
%patch -P112 -p1 -b .media-system-openh264
%patch -P100 -p1 -b .add-missing-pipewire-headers
%patch -P101 -p1 -b .fix-build-against-gcc16
# ppc64le support
%patch -P200 -p1
pushd src/3rdparty/chromium
%patch -P201 -p1
pushd third_party/highway/src
%patch -P202 -p1
popd
popd
# delete all "toolprefix = " lines from build/toolchain/linux/BUILD.gn, as we
# never cross-compile in native Fedora RPMs, fixes ARM and aarch64 FTBFS
@ -406,15 +525,25 @@ ln -s /usr/lib/python%{python3_version}/site-packages/six.py src/3rdparty/chromi
ln -s /usr/lib/python%{python3_version}/site-packages/six.py src/3rdparty/chromium/third_party/wpt_tools/wpt/tools/third_party/six/six.py
%endif
%if 0%{?use_system_re2}
#%%if 0%{?use_system_re2}
# http://bugzilla.redhat.com/1337585
# can't just delete, but we'll overwrite with system headers to be on the safe side
cp -bv /usr/include/re2/*.h src/3rdparty/chromium/third_party/re2/src/re2/
%endif
#cp -bv /usr/include/re2/*.h src/3rdparty/chromium/third_party/re2/src/re2/
#%%endif
# copy the Chromium license so it is installed with the appropriate name
cp -p src/3rdparty/chromium/LICENSE LICENSE.Chromium
# use system libraries not handled by cmake options correctly
system_libs=()
%if %{?use_system_ffmpeg}
system_libs+=(ffmpeg)
system_libs+=(openh264)
%endif
# Use system libraries
src/3rdparty/chromium/build/linux/unbundle/replace_gn_files.py --system-libraries ${system_libs[@]}
# consider doing this as part of the tarball creation step instead? rdieter
# fix/workaround
# fatal error: QtWebEngineCore/qtwebenginecoreglobal.h: No such file or directory
@ -434,21 +563,61 @@ export STRIP=strip
export NINJAFLAGS="%{__ninja_common_opts}"
export NINJA_PATH=%{__ninja}
# this follows the logic of the Configure summary to turn on and off
%cmake_qt6 \
-DCMAKE_TOOLCHAIN_FILE:STRING="%{_libdir}/cmake/Qt6/qt.toolchain.cmake" \
-DFEATURE_qtpdf_build:BOOL=ON \
-DFEATURE_webengine_build_gn:BOOL=ON \
-DFEATURE_webengine_jumbo_build:BOOL=ON \
-DFEATURE_webengine_developer_build:BOOL=OFF \
-DFEATURE_qtwebengine_build:BOOL=ON \
-DFEATURE_qtwebengine_core_build:BOOL=ON \
-DFEATURE_qtwebengine_widgets_build:BOOL=ON \
-DFEATURE_qtwebengine_quick_build:BOOL=ON \
-DFEATURE_qtpdf_build:BOOL=ON \
-DFEATURE_qtpdf_widgets_build:BOOL=ON \
-DFEATURE_qtpdf_quick_build:BOOL=ON \
-DFEATURE_webengine_system_re2:BOOL=%{?use_system_re2} \
-DFEATURE_webengine_system_icu:BOOL=%{?use_system_libicu} \
-DFEATURE_webengine_system_libwebp:BOOL=%{?use_system_libwebp} \
-DFEATURE_webengine_system_opus:BOOL=%{?use_system_opus} \
-DFEATURE_webengine_system_ffmpeg:BOOL=%{?use_system_ffmpeg} \
-DFEATURE_webengine_system_libvpx:BOOL=%{?use_system_libvpx} \
-DFEATURE_webengine_system_snappy:BOOL=%{?use_system_snappy} \
-DFEATURE_webengine_system_glib:BOOL=%{?use_system_glib} \
-DFEATURE_webengine_system_zlib:BOOL=%{?use_system_zlib} \
-DFEATURE_webengine_system_minizip:BOOL=%{?use_system_minizip} \
-DFEATURE_webengine_system_libevent:BOOL=%{?use_system_libevent} \
-DFEATURE_webengine_system_libxml:BOOL=%{?use_system_libxml} \
-DFEATURE_webengine_system_lcms2:BOOL=%{?use_system_lcms2} \
-DFEATURE_webengine_system_libpng:BOOL=%{?use_system_libpng} \
-DFEATURE_webengine_system_libtiff:BOOL=%{?use_system_libtiff} \
-DFEATURE_webengine_system_libjpeg:BOOL=%{?use_system_libjpeg} \
-DFEATURE_webengine_system_libopenjpeg2:BOOL=%{?use_system_libopenjpeg2} \
-DFEATURE_webengine_system_harfbuzz:BOOL=%{?use_system_harfbuzz} \
-DFEATURE_webengine_system_freetype:BOOL=%{?use_system_freetype} \
-DFEATURE_webengine_system_libpci:BOOL=%{?use_system_libpci} \
-DFEATURE_webengine_system_libudev:BOOL=%{?use_system_libudev} \
-DFEATURE_webengine_embedded_build:BOOL=OFF \
-DFEATURE_webengine_extensions:BOOL=ON \
-DFEATURE_webengine_kerberos:BOOL=ON \
-DFEATURE_webengine_native_spellchecker:BOOL=OFF \
-DFEATURE_webengine_pepper_plugins:BOOL=ON \
-DFEATURE_webengine_printing_and_pdf:BOOL=ON \
-DFEATURE_webengine_proprietary_codecs:BOOL=ON \
-DFEATURE_webengine_system_icu:BOOL=%{?use_system_libicu} \
-DFEATURE_webengine_system_libevent:BOOL=ON \
-DFEATURE_webengine_system_ffmpeg:BOOL=ON \
-DFEATURE_webengine_spellchecker:BOOL=ON \
-DFEATURE_webengine_native_spellchecker:BOOL=OFF \
-DFEATURE_webengine_webrtc:BOOL=ON \
-DFEATURE_webengine_webrtc_pipewire:BOOL=ON \
-DFEATURE_webengine_geolocation:BOOL=ON \
-DFEATURE_webengine_webchannel:BOOL=ON \
-DFEATURE_webengine_kerberos:BOOL=ON \
-DFEATURE_webengine_extensions:BOOL=ON \
-DFEATURE_webengine_ozone_x11:BOOL=ON \
-DFEATURE_webengine_vulkan:BOOL=ON \
-DFEATURE_webengine_vaapi:BOOL=ON \
-DFEATURE_webengine_system_alsa:BOOL=ON \
-DFEATURE_webengine_system_pulseaudio:BOOL=ON \
-DFEATURE_webengine_system_gbm:BOOL=ON \
-DFEATURE_webengine_v8_context_snapshot:BOOL=ON \
-DFEATURE_webenginedriver:BOOL=ON \
-DFEATURE_pdf_v8:BOOL=%{?enable_pdf_v8} \
-DQT_BUILD_EXAMPLES:BOOL=%{?examples:ON}%{!?examples:OFF} \
-DQT_INSTALL_EXAMPLES_SOURCES=%{?examples:ON}%{!?examples:OFF}
@ -509,6 +678,7 @@ done
%files
%license LICENSE.*
%{_qt6_archdatadir}/sbom/%{qt_module}-%{version}.spdx
%{_qt6_archdatadir}/sbom/qtpdf-%{version}.spdx
%{_qt6_libdir}/libQt6WebEngineCore.so.*
%{_qt6_libdir}/libQt6WebEngineQuick.so.*
%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.so.*
@ -601,21 +771,27 @@ done
%{_qt6_libdir}/libQt6WebEngineQuick.prl
%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.prl
%{_qt6_libdir}/libQt6WebEngineWidgets.prl
%dir %{_qt6_libdir}/cmake/Qt6Designer
%dir %{_qt6_libdir}/cmake/Qt6WebEngineCore
%dir %{_qt6_libdir}/cmake/Qt6WebEngineCorePrivate
%dir %{_qt6_libdir}/cmake/Qt6WebEngineCoreTools
%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuick
%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuickDelegatesQml
%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuickPrivate
%dir %{_qt6_libdir}/cmake/Qt6WebEngineWidgets
%dir %{_qt6_libdir}/cmake/Qt6WebEngineWidgetsPrivate
%{_qt6_libdir}/cmake/Qt6/*.cmake
%{_qt6_libdir}/cmake/Qt6BuildInternals/StandaloneTests/QtWebEngine*
%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/Qt6qtwebengine*.cmake
%dir %{_qt6_libdir}/cmake/Qt6Designer
%{_qt6_libdir}/cmake/Qt6Designer/Qt6QWebEngine*.cmake
%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuick
%{_qt6_libdir}/cmake/Qt6WebEngineQuick/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6WebEngineWidgets
%{_qt6_libdir}/cmake/Qt6WebEngineWidgets/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6WebEngineCore
%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/Qt6qtwebengine*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineCore/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6WebEngineCoreTools
%{_qt6_libdir}/cmake/Qt6WebEngineCorePrivate/*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineCoreTools/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuickDelegatesQml
%{_qt6_libdir}/cmake/Qt6WebEngineQuick/*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineQuickDelegatesQml/*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineQuickPrivate/*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineWidgets/*.cmake
%{_qt6_libdir}/cmake/Qt6WebEngineWidgetsPrivate/*.cmake
%{_qt6_libdir}/pkgconfig/Qt6WebEngineCore.pc
%{_qt6_libdir}/pkgconfig/Qt6WebEngineQuick.pc
%{_qt6_libdir}/pkgconfig/Qt6WebEngineQuickDelegatesQml.pc
@ -655,13 +831,19 @@ done
%{_qt6_libdir}/libQt6Pdf.prl
%{_qt6_libdir}/libQt6PdfQuick.prl
%{_qt6_libdir}/libQt6PdfWidgets.prl
%{_qt6_libdir}/cmake/Qt6Gui/Qt6QPdf*.cmake
%dir %{_qt6_libdir}/cmake/Qt6Pdf
%{_qt6_libdir}/cmake/Qt6Pdf/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6PdfPrivate
%dir %{_qt6_libdir}/cmake/Qt6PdfQuick
%{_qt6_libdir}/cmake/Qt6PdfQuick/*.cmake
%dir %{_qt6_libdir}/cmake/Qt6PdfQuickPrivate
%dir %{_qt6_libdir}/cmake/Qt6PdfWidgets
%dir %{_qt6_libdir}/cmake/Qt6PdfWidgetsPrivate
%{_qt6_libdir}/cmake/Qt6Gui/Qt6QPdf*.cmake
%{_qt6_libdir}/cmake/Qt6Pdf/*.cmake
%{_qt6_libdir}/cmake/Qt6PdfPrivate/*.cmake
%{_qt6_libdir}/cmake/Qt6PdfQuick/*.cmake
%{_qt6_libdir}/cmake/Qt6PdfQuickPrivate/*.cmake
%{_qt6_libdir}/cmake/Qt6PdfWidgets/*.cmake
%{_qt6_libdir}/cmake/Qt6PdfWidgetsPrivate/*.cmake
%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/Qt6Pdf*.cmake
%{_qt6_libdir}/pkgconfig/Qt6Pdf.pc
%{_qt6_libdir}/pkgconfig/Qt6PdfQuick.pc
@ -674,6 +856,77 @@ done
%endif
%changelog
* Tue Jan 13 2026 Jan Grulich <jgrulich@redhat.com> - 6.10.1-5
- Fix Quick popup window positioning under X11
* Sun Jan 11 2026 Jan Grulich <jgrulich@redhat.com> - 6.10.1-4
- Apply the "Move GPU info logging into the GPU thread" patch
* Thu Jan 08 2026 Jan Grulich <jgrulich@redhat.com> - 6.10.1-3
- Move GPU info logging into the GPU thread
* Fri Nov 21 2025 Jan Grulich <jgrulich@redhat.com> - 6.10.1-2
- Rebuild for Koji infra issue
* Thu Nov 20 2025 Jan Grulich <jgrulich@redhat.com> - 6.10.1-1
- 6.10.1
* Thu Oct 30 2025 Dominik Mierzejewski <dominik@greysector.net> - 6.10.0-4
- Rebuilt for FFmpeg 8
* Thu Oct 30 2025 Jan Grulich <jgrulich@redhat.com> - 6.10.0-3
- Fix FTBS in rawhide due to glib and PipeWire updates
* Tue Oct 07 2025 Jan Grulich <jgrulich@redhat.com> - 6.10.0-2
- 6.10.0
* Thu Sep 25 2025 Jan Grulich <jgrulich@redhat.com> - 6.10.0~rc-1
- 6.10.0 RC
* Mon Sep 08 2025 Sandro Mani <manisandro@gmail.com> - 6.9.2-2
- Revert commit bcee2dbf412cc655c1b467091b581c696d234e3f
* Fri Aug 29 2025 Jan Grulich <jgrulich@redhat.com> - 6.9.2-1
- 6.9.2
* Wed Aug 06 2025 František Zatloukal <fzatlouk@redhat.com> - 6.9.1-3
- Rebuilt for icu 77.1
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 6.9.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Tue Jun 03 2025 Jan Grulich <jgrulich@redhat.com> - 6.9.1-1
- 6.9.1
* Tue Apr 22 2025 Marie Loise Nolden <loise@kde.org> - 6.9.0-2
- global define all optional system libs, enable XFA
- cleanup spec
* Wed Apr 02 2025 Jan Grulich <jgrulich@redhat.com> - 6.9.0-1
- 6.9.0
* Mon Mar 24 2025 Jan Grulich <jgrulich@redhat.com> - 6.9.0-0.1
- 6.9.0 RC
* Thu Mar 13 2025 Fabio Valentini <decathorpe@gmail.com> - 6.8.2-5
- Rebuild for noopenh264 2.6.0
* Tue Mar 04 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.2-4
- Unbundle libxml and libxslt
* Mon Mar 03 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.2-3
- Rework OpenH264 support following Chromium package
- Backport upstream change for ffmpeg codec selection issues.
* Mon Feb 17 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.2-2
- Bump build for ppc64le enablement
* Fri Jan 31 2025 Jan Grulich <jgrulich@redhat.com> - 6.8.2-1
- 6.8.2
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 6.8.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Sun Dec 15 2024 Pavel Solovev <daron439@gmail.com> - 6.8.1-3
- Add optional deps
@ -708,7 +961,7 @@ done
- 6.7.0
* Sun Mar 3 2024 Marie Loise Nolden <loise@kde.org> - 6.6.2-3
- move qt designer plugin to -devel
- move qt designer plugin to -devel
- remove old doc package code (docs are in qt6-doc)
* Mon Feb 19 2024 Jan Grulich <jgrulich@redhat.com> - 6.6.2-2

View file

@ -0,0 +1,13 @@
diff --git a/cmake/QtToolchainHelpers.cmake b/cmake/QtToolchainHelpers.cmake
index eaa3a4339..5693c4cc4 100644
--- a/cmake/QtToolchainHelpers.cmake
+++ b/cmake/QtToolchainHelpers.cmake
@@ -55,6 +55,8 @@ function(get_gn_arch result arch)
set(${result} "mips64el" PARENT_SCOPE)
elseif(arch STREQUAL "riscv64")
set(${result} "riscv64" PARENT_SCOPE)
+ elseif(arch STREQUAL "power64")
+ set(${result} "ppc64" PARENT_SCOPE)
else()
message(FATAL_ERROR "Unknown architecture: ${arch}")
endif()

View file

@ -0,0 +1,57 @@
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/pipewire_session.h b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/pipewire_session.h
index 84273ea695..825bb0000a 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/pipewire_session.h
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/pipewire_session.h
@@ -11,8 +11,10 @@
#ifndef MODULES_VIDEO_CAPTURE_LINUX_PIPEWIRE_SESSION_H_
#define MODULES_VIDEO_CAPTURE_LINUX_PIPEWIRE_SESSION_H_
-#include <pipewire/core.h>
#include <pipewire/pipewire.h>
+#include <spa/pod/pod.h>
+#include <spa/utils/dict.h>
+#include <spa/utils/hook.h>
#include <deque>
#include <string>
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.cc b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.cc
index f6cd57ac36..b9c579d2e3 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.cc
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.cc
@@ -10,10 +10,21 @@
#include "modules/video_capture/linux/video_capture_pipewire.h"
+#include <pipewire/pipewire.h>
+#include <spa/buffer/buffer.h>
+#include <spa/buffer/meta.h>
+#include <spa/param/format-utils.h>
#include <spa/param/format.h>
+#include <spa/param/param.h>
#include <spa/param/video/format-utils.h>
+#include <spa/param/video/raw.h>
#include <spa/pod/builder.h>
+#include <spa/pod/iter.h>
+#include <spa/pod/vararg.h>
+#include <spa/utils/defs.h>
#include <spa/utils/result.h>
+#include <spa/utils/type.h>
+#include <sys/mman.h>
#include <vector>
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.h b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.h
index 789f2034d3..7c1f9390fc 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.h
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_capture/linux/video_capture_pipewire.h
@@ -11,6 +11,10 @@
#ifndef MODULES_VIDEO_CAPTURE_LINUX_VIDEO_CAPTURE_PIPEWIRE_H_
#define MODULES_VIDEO_CAPTURE_LINUX_VIDEO_CAPTURE_PIPEWIRE_H_
+#include <pipewire/pipewire.h>
+#include <spa/pod/pod.h>
+#include <spa/utils/hook.h>
+
#include "modules/video_capture/linux/pipewire_session.h"
#include "modules/video_capture/video_capture_defines.h"
#include "modules/video_capture/video_capture_impl.h"

View file

@ -1,76 +0,0 @@
diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn
index f05ad3eb2..8c73aa08e 100644
--- a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn
+++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn
@@ -3,9 +3,19 @@
# found in the LICENSE file.
import("//build/buildflag_header.gni")
+import("//build/config/linux/pkg_config.gni")
import("//media/media_options.gni")
import("//third_party/blink/renderer/modules/modules.gni")
import("//third_party/libaom/options.gni")
+import("//third_party/webrtc/webrtc.gni")
+
+if (rtc_use_h264 && rtc_use_system_openh264) {
+ pkg_config("openh264") {
+ packages = [
+ "openh264",
+ ]
+ }
+}
blink_modules_sources("mediarecorder") {
sources = [
@@ -56,7 +66,11 @@ blink_modules_sources("mediarecorder") {
"h264_encoder.h",
]
- deps += [ "//third_party/openh264:encoder" ]
+ if (rtc_use_system_openh264) {
+ configs += [":openh264"]
+ } else {
+ deps += [ "//third_party/openh264:encoder" ]
+ }
}
if (enable_libaom) {
diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/webcodecs/BUILD.gn b/src/3rdparty/chromium/third_party/blink/renderer/modules/webcodecs/BUILD.gn
index 1ad082fe7..7bf84b932 100644
--- a/src/3rdparty/chromium/third_party/blink/renderer/modules/webcodecs/BUILD.gn
+++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/webcodecs/BUILD.gn
@@ -2,11 +2,21 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//build/config/linux/pkg_config.gni")
import("//media/media_options.gni")
import("//third_party/blink/renderer/modules/modules.gni")
import("//third_party/libaom/options.gni")
import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni")
import("//third_party/protobuf/proto_library.gni")
+import("//third_party/webrtc/webrtc.gni")
+
+if (rtc_use_h264 && rtc_use_system_openh264) {
+ pkg_config("openh264") {
+ packages = [
+ "openh264",
+ ]
+ }
+}
blink_modules_sources("webcodecs") {
sources = [
@@ -117,7 +127,11 @@ blink_modules_sources("webcodecs") {
deps += [ "//third_party/libvpx" ]
}
if (media_use_openh264) {
- deps += [ "//third_party/openh264:encoder" ]
+ if (rtc_use_system_openh264) {
+ configs += [":openh264"]
+ } else {
+ deps += [ "//third_party/openh264:encoder" ]
+ }
}
if (is_fuchsia) {
deps += [ "//media/fuchsia/video" ]

View file

@ -0,0 +1,29 @@
Fix FTBFS
/usr/include/bits/siginfo-consts.h:219:3: error: expected identifier
219 | SYS_SECCOMP = 1, /* Seccomp triggered. */
| ^
../../sandbox/linux/system_headers/linux_seccomp.h:220:39: note: expanded from macro 'SYS_SECCOMP'
220 | #define SYS_SECCOMP 1
| ^
../../sandbox/linux/seccomp-bpf/trap.cc:159:46: error: use of undeclared identifier 'SYS_SECCOMP'
159 | if (nr != LINUX_SIGSYS || info->si_code != SYS_SECCOMP || !ctx ||
| ^~~~~~~~~~~
/usr/include/bits/siginfo-consts.h:220:23: note: expanded from macro 'SYS_SECCOMP'
220 | # define SYS_SECCOMP SYS_SECCOMP
diff -up chromium-141.0.7390.122/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h.me chromium-141.0.7390.122/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
--- chromium-141.0.7390.122/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h.me 2025-10-28 10:05:44.970248151 +0100
+++ chromium-141.0.7390.122/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h 2025-10-28 10:05:52.291345772 +0100
@@ -214,8 +214,11 @@ struct seccomp_notif_addfd {
#define SECCOMP_RET_INVALID 0x00010000U // Illegal return value
#endif
+// check glibc version < 2.42
+#if (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 42)
#ifndef SYS_SECCOMP
#define SYS_SECCOMP 1
#endif
+#endif
#endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SECCOMP_H_

View file

@ -0,0 +1,258 @@
commit dcc0ca1cd4245ecff9e5ba50818e47d5e2ccf699
Author: John Platts <john_platts@hotmail.com>
Date: Fri Jan 17 12:16:49 2025 -0600
Fix for GCC 15 compiler error on PPC8/PPC9/PPC10
diff --git a/hwy/ops/ppc_vsx-inl.h b/hwy/ops/ppc_vsx-inl.h
index 86d6d98c..3564ae0b 100644
--- a/hwy/ops/ppc_vsx-inl.h
+++ b/hwy/ops/ppc_vsx-inl.h
@@ -3744,16 +3744,73 @@ static HWY_INLINE V VsxF2INormalizeSrcVals(V v) {
#endif
}
+template <class VF32>
+static HWY_INLINE HWY_MAYBE_UNUSED VFromD<Repartition<int64_t, DFromV<VF32>>>
+VsxXvcvspsxds(VF32 vf32) {
+ using VI64 = VFromD<Repartition<int64_t, DFromV<VF32>>>;
+#if (HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 1500) || \
+ HWY_HAS_BUILTIN(__builtin_vsx_xvcvspsxds)
+ // Use __builtin_vsx_xvcvspsxds if it is available (which is the case with
+ // GCC 4.8 through GCC 14 or Clang 13 or later on PPC8/PPC9/PPC10)
+ return VI64{__builtin_vsx_xvcvspsxds(vf32.raw)};
+#elif HWY_COMPILER_GCC_ACTUAL >= 1500 && HWY_IS_LITTLE_ENDIAN
+ // On little-endian PPC8/PPC9/PPC10 with GCC 15 or later, use the F32->I64
+ // vec_signedo intrinsic as the __builtin_vsx_xvcvspsxds intrinsic has been
+ // removed from GCC in GCC 15
+ return VI64{vec_signedo(vf32.raw)};
+#elif HWY_COMPILER_GCC_ACTUAL >= 1500 && HWY_IS_BIG_ENDIAN
+ // On big-endian PPC8/PPC9/PPC10 with GCC 15 or later, use the F32->I64
+ // vec_signede intrinsic as the __builtin_vsx_xvcvspsxds intrinsic has been
+ // removed from GCC in GCC 15
+ return VI64{vec_signede(vf32.raw)};
+#else
+ // Inline assembly fallback for older versions of Clang that do not have the
+ // __builtin_vsx_xvcvspsxds intrinsic
+ __vector signed long long raw_result;
+ __asm__("xvcvspsxds %x0, %x1" : "=wa"(raw_result) : "wa"(vf32.raw) :);
+ return VI64{raw_result};
+#endif
+}
+
+template <class VF32>
+static HWY_INLINE HWY_MAYBE_UNUSED VFromD<Repartition<uint64_t, DFromV<VF32>>>
+VsxXvcvspuxds(VF32 vf32) {
+ using VU64 = VFromD<Repartition<uint64_t, DFromV<VF32>>>;
+#if (HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 1500) || \
+ HWY_HAS_BUILTIN(__builtin_vsx_xvcvspuxds)
+ // Use __builtin_vsx_xvcvspuxds if it is available (which is the case with
+ // GCC 4.8 through GCC 14 or Clang 13 or later on PPC8/PPC9/PPC10)
+ return VU64{reinterpret_cast<__vector unsigned long long>(
+ __builtin_vsx_xvcvspuxds(vf32.raw))};
+#elif HWY_COMPILER_GCC_ACTUAL >= 1500 && HWY_IS_LITTLE_ENDIAN
+ // On little-endian PPC8/PPC9/PPC10 with GCC 15 or later, use the F32->U64
+ // vec_unsignedo intrinsic as the __builtin_vsx_xvcvspuxds intrinsic has been
+ // removed from GCC in GCC 15
+ return VU64{vec_unsignedo(vf32.raw)};
+#elif HWY_COMPILER_GCC_ACTUAL >= 1500 && HWY_IS_BIG_ENDIAN
+ // On big-endian PPC8/PPC9/PPC10 with GCC 15 or later, use the F32->U64
+ // vec_unsignedo intrinsic as the __builtin_vsx_xvcvspuxds intrinsic has been
+ // removed from GCC in GCC 15
+ return VU64{vec_unsignede(vf32.raw)};
+#else
+ // Inline assembly fallback for older versions of Clang that do not have the
+ // __builtin_vsx_xvcvspuxds intrinsic
+ __vector unsigned long long raw_result;
+ __asm__("xvcvspuxds %x0, %x1" : "=wa"(raw_result) : "wa"(vf32.raw) :);
+ return VU64{raw_result};
+#endif
+}
+
} // namespace detail
#endif // !HWY_S390X_HAVE_Z14
template <class D, HWY_IF_I64_D(D)>
HWY_API VFromD<D> PromoteTo(D di64, VFromD<Rebind<float, D>> v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspsxds))
- const __vector float raw_v =
- detail::VsxF2INormalizeSrcVals(InterleaveLower(v, v)).raw;
- return VFromD<decltype(di64)>{__builtin_vsx_xvcvspsxds(raw_v)};
+#if !HWY_S390X_HAVE_Z14
+ const Repartition<float, decltype(di64)> dt_f32;
+ const auto vt_f32 = ResizeBitCast(dt_f32, v);
+ return detail::VsxXvcvspsxds(
+ detail::VsxF2INormalizeSrcVals(InterleaveLower(vt_f32, vt_f32)));
#else
const RebindToFloat<decltype(di64)> df64;
return ConvertTo(di64, PromoteTo(df64, v));
@@ -3762,12 +3819,11 @@ HWY_API VFromD<D> PromoteTo(D di64, VFromD<Rebind<float, D>> v) {
template <class D, HWY_IF_U64_D(D)>
HWY_API VFromD<D> PromoteTo(D du64, VFromD<Rebind<float, D>> v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspuxds))
- const __vector float raw_v =
- detail::VsxF2INormalizeSrcVals(InterleaveLower(v, v)).raw;
- return VFromD<decltype(du64)>{reinterpret_cast<__vector unsigned long long>(
- __builtin_vsx_xvcvspuxds(raw_v))};
+#if !HWY_S390X_HAVE_Z14
+ const Repartition<float, decltype(du64)> dt_f32;
+ const auto vt_f32 = ResizeBitCast(dt_f32, v);
+ return detail::VsxXvcvspuxds(
+ detail::VsxF2INormalizeSrcVals(InterleaveLower(vt_f32, vt_f32)));
#else
const RebindToFloat<decltype(du64)> df64;
return ConvertTo(du64, PromoteTo(df64, v));
@@ -3876,12 +3932,10 @@ HWY_API VFromD<D> PromoteUpperTo(D df64, Vec128<uint32_t> v) {
template <class D, HWY_IF_V_SIZE_D(D, 16), HWY_IF_I64_D(D)>
HWY_API VFromD<D> PromoteUpperTo(D di64, Vec128<float> v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspsxds))
- const __vector float raw_v =
- detail::VsxF2INormalizeSrcVals(InterleaveUpper(Full128<float>(), v, v))
- .raw;
- return VFromD<decltype(di64)>{__builtin_vsx_xvcvspsxds(raw_v)};
+#if !HWY_S390X_HAVE_Z14
+ (void)di64;
+ return detail::VsxXvcvspsxds(
+ detail::VsxF2INormalizeSrcVals(InterleaveUpper(Full128<float>(), v, v)));
#else
const RebindToFloat<decltype(di64)> df64;
return ConvertTo(di64, PromoteUpperTo(df64, v));
@@ -3890,13 +3944,10 @@ HWY_API VFromD<D> PromoteUpperTo(D di64, Vec128<float> v) {
template <class D, HWY_IF_V_SIZE_D(D, 16), HWY_IF_U64_D(D)>
HWY_API VFromD<D> PromoteUpperTo(D du64, Vec128<float> v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspuxds))
- const __vector float raw_v =
- detail::VsxF2INormalizeSrcVals(InterleaveUpper(Full128<float>(), v, v))
- .raw;
- return VFromD<decltype(du64)>{reinterpret_cast<__vector unsigned long long>(
- __builtin_vsx_xvcvspuxds(raw_v))};
+#if !HWY_S390X_HAVE_Z14
+ (void)du64;
+ return detail::VsxXvcvspuxds(
+ detail::VsxF2INormalizeSrcVals(InterleaveUpper(Full128<float>(), v, v)));
#else
const RebindToFloat<decltype(du64)> df64;
return ConvertTo(du64, PromoteUpperTo(df64, v));
@@ -3984,20 +4035,18 @@ HWY_INLINE VFromD<D> PromoteEvenTo(hwy::SignedTag /*to_type_tag*/,
hwy::SizeTag<8> /*to_lane_size_tag*/,
hwy::FloatTag /*from_type_tag*/, D d_to,
V v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspsxds))
+#if !HWY_S390X_HAVE_Z14
(void)d_to;
const auto normalized_v = detail::VsxF2INormalizeSrcVals(v);
#if HWY_IS_LITTLE_ENDIAN
- // __builtin_vsx_xvcvspsxds expects the source values to be in the odd lanes
- // on little-endian PPC, and the vec_sld operation below will shift the even
+ // VsxXvcvspsxds expects the source values to be in the odd lanes on
+ // little-endian PPC, and the Shuffle2103 operation below will shift the even
// lanes of normalized_v into the odd lanes.
- return VFromD<D>{
- __builtin_vsx_xvcvspsxds(vec_sld(normalized_v.raw, normalized_v.raw, 4))};
+ return VsxXvcvspsxds(Shuffle2103(normalized_v));
#else
- // __builtin_vsx_xvcvspsxds expects the source values to be in the even lanes
- // on big-endian PPC.
- return VFromD<D>{__builtin_vsx_xvcvspsxds(normalized_v.raw)};
+ // VsxXvcvspsxds expects the source values to be in the even lanes on
+ // big-endian PPC.
+ return VsxXvcvspsxds(normalized_v);
#endif
#else
const RebindToFloat<decltype(d_to)> df64;
@@ -4012,22 +4061,18 @@ HWY_INLINE VFromD<D> PromoteEvenTo(hwy::UnsignedTag /*to_type_tag*/,
hwy::SizeTag<8> /*to_lane_size_tag*/,
hwy::FloatTag /*from_type_tag*/, D d_to,
V v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspuxds))
+#if !HWY_S390X_HAVE_Z14
(void)d_to;
const auto normalized_v = detail::VsxF2INormalizeSrcVals(v);
#if HWY_IS_LITTLE_ENDIAN
- // __builtin_vsx_xvcvspuxds expects the source values to be in the odd lanes
- // on little-endian PPC, and the vec_sld operation below will shift the even
- // lanes of normalized_v into the odd lanes.
- return VFromD<D>{
- reinterpret_cast<__vector unsigned long long>(__builtin_vsx_xvcvspuxds(
- vec_sld(normalized_v.raw, normalized_v.raw, 4)))};
+ // VsxXvcvspuxds expects the source values to be in the odd lanes
+ // on little-endian PPC, and the Shuffle2103 operation below will shift the
+ // even lanes of normalized_v into the odd lanes.
+ return VsxXvcvspuxds(Shuffle2103(normalized_v));
#else
- // __builtin_vsx_xvcvspuxds expects the source values to be in the even lanes
+ // VsxXvcvspuxds expects the source values to be in the even lanes
// on big-endian PPC.
- return VFromD<D>{reinterpret_cast<__vector unsigned long long>(
- __builtin_vsx_xvcvspuxds(normalized_v.raw))};
+ return VsxXvcvspuxds(normalized_v);
#endif
#else
const RebindToFloat<decltype(d_to)> df64;
@@ -4069,20 +4114,18 @@ HWY_INLINE VFromD<D> PromoteOddTo(hwy::SignedTag /*to_type_tag*/,
hwy::SizeTag<8> /*to_lane_size_tag*/,
hwy::FloatTag /*from_type_tag*/, D d_to,
V v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspsxds))
+#if !HWY_S390X_HAVE_Z14
(void)d_to;
const auto normalized_v = detail::VsxF2INormalizeSrcVals(v);
#if HWY_IS_LITTLE_ENDIAN
- // __builtin_vsx_xvcvspsxds expects the source values to be in the odd lanes
+ // VsxXvcvspsxds expects the source values to be in the odd lanes
// on little-endian PPC
- return VFromD<D>{__builtin_vsx_xvcvspsxds(normalized_v.raw)};
+ return VsxXvcvspsxds(normalized_v);
#else
- // __builtin_vsx_xvcvspsxds expects the source values to be in the even lanes
- // on big-endian PPC, and the vec_sld operation below will shift the odd lanes
- // of normalized_v into the even lanes.
- return VFromD<D>{
- __builtin_vsx_xvcvspsxds(vec_sld(normalized_v.raw, normalized_v.raw, 4))};
+ // VsxXvcvspsxds expects the source values to be in the even lanes
+ // on big-endian PPC, and the Shuffle0321 operation below will shift the odd
+ // lanes of normalized_v into the even lanes.
+ return VsxXvcvspsxds(Shuffle0321(normalized_v));
#endif
#else
const RebindToFloat<decltype(d_to)> df64;
@@ -4097,22 +4140,18 @@ HWY_INLINE VFromD<D> PromoteOddTo(hwy::UnsignedTag /*to_type_tag*/,
hwy::SizeTag<8> /*to_lane_size_tag*/,
hwy::FloatTag /*from_type_tag*/, D d_to,
V v) {
-#if !HWY_S390X_HAVE_Z14 && \
- (HWY_COMPILER_GCC_ACTUAL || HWY_HAS_BUILTIN(__builtin_vsx_xvcvspuxds))
+#if !HWY_S390X_HAVE_Z14
(void)d_to;
const auto normalized_v = detail::VsxF2INormalizeSrcVals(v);
#if HWY_IS_LITTLE_ENDIAN
- // __builtin_vsx_xvcvspuxds expects the source values to be in the odd lanes
+ // VsxXvcvspuxds expects the source values to be in the odd lanes
// on little-endian PPC
- return VFromD<D>{reinterpret_cast<__vector unsigned long long>(
- __builtin_vsx_xvcvspuxds(normalized_v.raw))};
+ return VsxXvcvspuxds(normalized_v);
#else
- // __builtin_vsx_xvcvspuxds expects the source values to be in the even lanes
- // on big-endian PPC, and the vec_sld operation below will shift the odd lanes
- // of normalized_v into the even lanes.
- return VFromD<D>{
- reinterpret_cast<__vector unsigned long long>(__builtin_vsx_xvcvspuxds(
- vec_sld(normalized_v.raw, normalized_v.raw, 4)))};
+ // VsxXvcvspuxds expects the source values to be in the even lanes
+ // on big-endian PPC, and the Shuffle0321 operation below will shift the odd
+ // lanes of normalized_v into the even lanes.
+ return VsxXvcvspuxds(Shuffle0321(normalized_v));
#endif
#else
const RebindToFloat<decltype(d_to)> df64;

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,9 @@
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index fe4f2c3f1..729d4d3e9 100644
index d5e9b715e..af4c046c4 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -544,6 +544,10 @@ foreach(arch ${archs})
)
@@ -570,6 +570,10 @@ foreach(arch ${archs})
list(APPEND gnArgArg libyuv_use_sve=false)
endif()
endif()
+ if(cpu MATCHES "arm.*")
@ -12,3 +12,4 @@ index fe4f2c3f1..729d4d3e9 100644
+ endif()
unset(cpu)
endif()

View file

@ -0,0 +1,12 @@
diff --git a/src/3rdparty/chromium/base/strings/to_string.h b/src/3rdparty/chromium/base/strings/to_string.h
index 96e61daa9e..5d097946f7 100644
--- a/src/3rdparty/chromium/base/strings/to_string.h
+++ b/src/3rdparty/chromium/base/strings/to_string.h
@@ -6,6 +6,7 @@
#define BASE_STRINGS_TO_STRING_H_
#include <concepts>
+#include <cstdint>
#include <iomanip>
#include <ios>
#include <memory>

View file

@ -1,227 +0,0 @@
diff --git a/src/3rdparty/chromium/base/debug/profiler.h b/src/3rdparty/chromium/base/debug/profiler.h
index 035affc..d8e1a53 100644
--- a/src/3rdparty/chromium/base/debug/profiler.h
+++ b/src/3rdparty/chromium/base/debug/profiler.h
@@ -5,6 +5,7 @@
#ifndef BASE_DEBUG_PROFILER_H_
#define BASE_DEBUG_PROFILER_H_
+#include <cstdint>
#include <stddef.h>
#include <stdint.h>
diff --git a/src/3rdparty/chromium/cc/trees/target_property.cc b/src/3rdparty/chromium/cc/trees/target_property.cc
index 7d73467..be4febd 100644
--- a/src/3rdparty/chromium/cc/trees/target_property.cc
+++ b/src/3rdparty/chromium/cc/trees/target_property.cc
@@ -8,6 +8,8 @@
#include "ui/gfx/animation/keyframe/target_property.h"
+#include <cstdint>
+
namespace cc {
static_assert(TargetProperty::LAST_TARGET_PROPERTY <
diff --git a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
index c62a00e..af54520 100644
--- a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
+++ b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
@@ -6,6 +6,8 @@
#include "base/threading/platform_thread.h"
+#include <cstdint>
+
namespace device {
OneWriterSeqLock::OneWriterSeqLock() : sequence_(0) {}
diff --git a/src/3rdparty/chromium/extensions/common/constants.h b/src/3rdparty/chromium/extensions/common/constants.h
index b5823c7..c152482 100644
--- a/src/3rdparty/chromium/extensions/common/constants.h
+++ b/src/3rdparty/chromium/extensions/common/constants.h
@@ -13,6 +13,8 @@
#include "build/chromeos_buildflags.h"
#include "extensions/common/extensions_export.h"
+#include <cstdint>
+
namespace extensions {
// Scheme we serve extension content from.
diff --git a/src/3rdparty/chromium/gpu/config/gpu_util.h b/src/3rdparty/chromium/gpu/config/gpu_util.h
index 8edbfbe..467ebd6 100644
--- a/src/3rdparty/chromium/gpu/config/gpu_util.h
+++ b/src/3rdparty/chromium/gpu/config/gpu_util.h
@@ -5,6 +5,8 @@
#ifndef GPU_CONFIG_GPU_UTIL_H_
#define GPU_CONFIG_GPU_UTIL_H_
+#include <cstdint>
+
#include "build/build_config.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/gpu_export.h"
diff --git a/src/3rdparty/chromium/net/base/parse_number.h b/src/3rdparty/chromium/net/base/parse_number.h
index f70619a..5c4eee7 100644
--- a/src/3rdparty/chromium/net/base/parse_number.h
+++ b/src/3rdparty/chromium/net/base/parse_number.h
@@ -10,6 +10,8 @@
#include "net/base/net_export.h"
+#include <cstdint>
+
// This file contains utility functions for parsing numbers, in the context of
// network protocols.
//
diff --git a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
index 7c0dcde..97054d4 100644
--- a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
+++ b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
@@ -38,6 +38,10 @@ namespace pp {
/// As a further optimization, we can add support for this later.
class ThreadSafeThreadTraits {
public:
+
+ typedef pp::Lock Lock;
+ typedef pp::AutoLock AutoLock;
+
class RefCount {
public:
/// Default constructor. In debug mode, this checks that the object is being
@@ -67,8 +71,6 @@ class ThreadSafeThreadTraits {
int32_t ref_;
};
- typedef pp::Lock Lock;
- typedef pp::AutoLock AutoLock;
};
/// The non-thread-safe version of thread traits. Using this class as the
diff --git a/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h b/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
index a65ea9a..ba967c0 100644
--- a/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
+++ b/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
@@ -28,6 +28,7 @@
#ifndef SRC_DAWN_NATIVE_CACHEKEY_H_
#define SRC_DAWN_NATIVE_CACHEKEY_H_
+#include <cstdint>
#include <utility>
#include "dawn/native/stream/ByteVectorSink.h"
diff --git a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
index 6fa2e88..6b942ab 100644
--- a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
+++ b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
@@ -31,6 +31,7 @@
#include <cstdint>
#include <cstdio>
#include <cstring>
+#include <cstdio>
#include <new>
#include <utility>
diff --git a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
index cc2c3a2..8eb694e 100644
--- a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
+++ b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
@@ -22,6 +22,8 @@
#include "perfetto/base/status.h"
#include "src/trace_processor/importers/common/trace_parser.h"
+#include <cstdint>
+
namespace perfetto {
namespace protos {
diff --git a/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp b/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
index ae6a412..5fe0370 100644
--- a/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
+++ b/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
@@ -15,6 +15,10 @@
#include <cstring>
#include <iterator>
+#include <string.h>
+#include <algorithm>
+#include <iterator>
+
static constexpr const char* gColorNames[] = {
"aliceblue",
"antiquewhite",
diff --git a/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h b/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
index 0bbfeed..91f19f8 100644
--- a/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
+++ b/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
@@ -122,6 +122,8 @@ See documentation chapter: \ref statistics.
*/
+#include <cstdio>
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/portal/xdg_session_details.h b/src/3rdparty/chromium/third_party/webrtc/modules/portal/xdg_session_details.h
index ab52508..050229a 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/portal/xdg_session_details.h
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/portal/xdg_session_details.h
@@ -13,6 +13,7 @@
#include <gio/gio.h>
+#include <cstdint>
#include <string>
namespace webrtc {
diff --git a/src/3rdparty/chromium/ui/events/gesture_event_details.h b/src/3rdparty/chromium/ui/events/gesture_event_details.h
index 857da97..e48e24d 100644
--- a/src/3rdparty/chromium/ui/events/gesture_event_details.h
+++ b/src/3rdparty/chromium/ui/events/gesture_event_details.h
@@ -5,6 +5,7 @@
#ifndef UI_EVENTS_GESTURE_EVENT_DETAILS_H_
#define UI_EVENTS_GESTURE_EVENT_DETAILS_H_
+#include <cstdint>
#include <string.h>
#include "base/check_op.h"
diff --git a/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h b/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
index 7239ed5..975b88c 100644
--- a/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
+++ b/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
@@ -7,6 +7,7 @@
#include <stdint.h>
+#include <cstdint>
#include <array>
#include <cstddef>
#include <cstdint>
diff --git a/src/3rdparty/chromium/v8/src/base/macros.h b/src/3rdparty/chromium/v8/src/base/macros.h
index 93a99ec..f6ddfe7 100644
--- a/src/3rdparty/chromium/v8/src/base/macros.h
+++ b/src/3rdparty/chromium/v8/src/base/macros.h
@@ -5,6 +5,7 @@
#ifndef V8_BASE_MACROS_H_
#define V8_BASE_MACROS_H_
+#include <cstdint>
#include <limits>
#include <type_traits>
diff --git a/src/core/browsing_data_remover_delegate_qt.h b/src/core/browsing_data_remover_delegate_qt.h
index d33af4a..ce864b6 100644
--- a/src/core/browsing_data_remover_delegate_qt.h
+++ b/src/core/browsing_data_remover_delegate_qt.h
@@ -8,6 +8,8 @@
#include "content/public/browser/browsing_data_remover_delegate.h"
+#include <cstdint>
+
namespace QtWebEngineCore {
class BrowsingDataRemoverDelegateQt : public content::BrowsingDataRemoverDelegate {

View file

@ -1,574 +0,0 @@
From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001
From: Dale Curtis <dalecurtis@chromium.org>
Date: Sat, 2 Apr 2022 05:13:53 +0000
Subject: [PATCH] Roll src/third_party/ffmpeg/ 574c39cce..32b2d1d526 (1125
commits)
https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+log/574c39cce323..32b2d1d526
Created with:
roll-dep src/third_party/ffmpeg
Fixed: 1293918
Cq-Include-Trybots: luci.chromium.try:mac_chromium_asan_rel_ng,linux_chromium_asan_rel_ng,linux_chromium_chromeos_asan_rel_ng
Change-Id: I41945d0f963e3d1f65940067bac22f63b68e37d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3565647
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Dan Sanders <sandersd@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/main@{#988253}
---
.../clear_key_cdm/ffmpeg_cdm_audio_decoder.cc | 29 ++++++++++---------
media/ffmpeg/ffmpeg_common.cc | 11 +++----
media/filters/audio_file_reader.cc | 9 +++---
media/filters/audio_file_reader_unittest.cc | 6 ++--
.../filters/audio_video_metadata_extractor.cc | 11 +++++--
.../filters/ffmpeg_aac_bitstream_converter.cc | 7 +++--
...ffmpeg_aac_bitstream_converter_unittest.cc | 2 +-
media/filters/ffmpeg_audio_decoder.cc | 13 +++++----
8 files changed, 51 insertions(+), 37 deletions(-)
diff --git a/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc b/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
index c535d2b..62ddbc8 100644
--- a/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
+++ b/src/3rdparty/chromium/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
@@ -74,7 +74,7 @@ void CdmAudioDecoderConfigToAVCodecContext(
codec_context->sample_fmt = AV_SAMPLE_FMT_NONE;
}
- codec_context->channels = config.channel_count;
+ codec_context->ch_layout.nb_channels = config.channel_count;
codec_context->sample_rate = config.samples_per_second;
if (config.extra_data) {
@@ -124,8 +124,8 @@ void CopySamples(cdm::AudioFormat cdm_format,
case cdm::kAudioFormatPlanarS16:
case cdm::kAudioFormatPlanarF32: {
const int decoded_size_per_channel =
- decoded_audio_size / av_frame.channels;
- for (int i = 0; i < av_frame.channels; ++i) {
+ decoded_audio_size / av_frame.ch_layout.nb_channels;
+ for (int i = 0; i < av_frame.ch_layout.nb_channels; ++i) {
memcpy(output_buffer, av_frame.extended_data[i],
decoded_size_per_channel);
output_buffer += decoded_size_per_channel;
@@ -185,13 +185,14 @@ bool FFmpegCdmAudioDecoder::Initialize(
// Success!
decoding_loop_ = std::make_unique<FFmpegDecodingLoop>(codec_context_.get());
samples_per_second_ = config.samples_per_second;
- bytes_per_frame_ = codec_context_->channels * config.bits_per_channel / 8;
+ bytes_per_frame_ =
+ codec_context_->ch_layout.nb_channels * config.bits_per_channel / 8;
output_timestamp_helper_ =
std::make_unique<AudioTimestampHelper>(config.samples_per_second);
is_initialized_ = true;
// Store initial values to guard against midstream configuration changes.
- channels_ = codec_context_->channels;
+ channels_ = codec_context_->ch_layout.nb_channels;
av_sample_format_ = codec_context_->sample_fmt;
return true;
@@ -291,7 +292,8 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer(
for (auto& frame : audio_frames) {
int decoded_audio_size = 0;
if (frame->sample_rate != samples_per_second_ ||
- frame->channels != channels_ || frame->format != av_sample_format_) {
+ frame->ch_layout.nb_channels != channels_ ||
+ frame->format != av_sample_format_) {
DLOG(ERROR) << "Unsupported midstream configuration change!"
<< " Sample Rate: " << frame->sample_rate << " vs "
<< samples_per_second_
@@ -302,7 +304,7 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer(
}
decoded_audio_size = av_samples_get_buffer_size(
- nullptr, codec_context_->channels, frame->nb_samples,
+ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
codec_context_->sample_fmt, 1);
if (!decoded_audio_size)
continue;
@@ -322,7 +324,7 @@ bool FFmpegCdmAudioDecoder::OnNewFrame(
std::vector<std::unique_ptr<AVFrame, ScopedPtrAVFreeFrame>>* audio_frames,
AVFrame* frame) {
*total_size += av_samples_get_buffer_size(
- nullptr, codec_context_->channels, frame->nb_samples,
+ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
codec_context_->sample_fmt, 1);
audio_frames->emplace_back(av_frame_clone(frame));
return true;
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
index 2665355..910f9ad 100644
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
@@ -336,10 +336,11 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
codec_context->sample_fmt, codec_context->codec_id);
ChannelLayout channel_layout =
- codec_context->channels > 8
+ codec_context->ch_layout.nb_channels > 8
? CHANNEL_LAYOUT_DISCRETE
- : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout,
- codec_context->channels);
+ : ChannelLayoutToChromeChannelLayout(
+ codec_context->ch_layout.u.mask,
+ codec_context->ch_layout.nb_channels);
switch (codec) {
// For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does
@@ -391,7 +392,7 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
extra_data, encryption_scheme, seek_preroll,
codec_context->delay);
if (channel_layout == CHANNEL_LAYOUT_DISCRETE)
- config->SetChannelsForDiscrete(codec_context->channels);
+ config->SetChannelsForDiscrete(codec_context->ch_layout.nb_channels);
#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
// These are bitstream formats unknown to ffmpeg, so they don't have
@@ -460,7 +461,7 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
// TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses
// said information to decode.
- codec_context->channels = config.channels();
+ codec_context->ch_layout.nb_channels = config.channels();
codec_context->sample_rate = config.samples_per_second();
if (config.extra_data().empty()) {
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader.cc b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
index 777eabc..2b58dd7 100644
--- a/src/3rdparty/chromium/media/filters/audio_file_reader.cc
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
@@ -113,14 +113,15 @@ bool AudioFileReader::OpenDecoder() {
// Verify the channel layout is supported by Chrome. Acts as a sanity check
// against invalid files. See http://crbug.com/171962
- if (ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout,
- codec_context_->channels) ==
+ if (ChannelLayoutToChromeChannelLayout(
+ codec_context_->ch_layout.u.mask,
+ codec_context_->ch_layout.nb_channels) ==
CHANNEL_LAYOUT_UNSUPPORTED) {
return false;
}
// Store initial values to guard against midstream configuration changes.
- channels_ = codec_context_->channels;
+ channels_ = codec_context_->ch_layout.nb_channels;
audio_codec_ = CodecIDToAudioCodec(codec_context_->codec_id);
sample_rate_ = codec_context_->sample_rate;
av_sample_format_ = codec_context_->sample_fmt;
@@ -223,7 +224,7 @@ bool AudioFileReader::OnNewFrame(
if (frames_read < 0)
return false;
- const int channels = frame->channels;
+ const int channels = frame->ch_layout.nb_channels;
if (frame->sample_rate != sample_rate_ || channels != channels_ ||
frame->format != av_sample_format_) {
DLOG(ERROR) << "Unsupported midstream configuration change!"
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
index 76b41aa..e26b6cd 100644
--- a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter.cc
@@ -195,14 +195,15 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
if (!header_generated_ || codec_ != stream_codec_parameters_->codec_id ||
audio_profile_ != stream_codec_parameters_->profile ||
sample_rate_index_ != sample_rate_index ||
- channel_configuration_ != stream_codec_parameters_->channels ||
+ channel_configuration_ !=
+ stream_codec_parameters_->ch_layout.nb_channels ||
frame_length_ != header_plus_packet_size) {
header_generated_ =
GenerateAdtsHeader(stream_codec_parameters_->codec_id,
0, // layer
stream_codec_parameters_->profile, sample_rate_index,
0, // private stream
- stream_codec_parameters_->channels,
+ stream_codec_parameters_->ch_layout.nb_channels,
0, // originality
0, // home
0, // copyrighted_stream
@@ -214,7 +215,7 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
codec_ = stream_codec_parameters_->codec_id;
audio_profile_ = stream_codec_parameters_->profile;
sample_rate_index_ = sample_rate_index;
- channel_configuration_ = stream_codec_parameters_->channels;
+ channel_configuration_ = stream_codec_parameters_->ch_layout.nb_channels;
frame_length_ = header_plus_packet_size;
}
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
index 3b46f7f..1897eb0 100644
--- a/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
@@ -34,7 +34,7 @@ class FFmpegAACBitstreamConverterTest : public testing::Test {
memset(&test_parameters_, 0, sizeof(AVCodecParameters));
test_parameters_.codec_id = AV_CODEC_ID_AAC;
test_parameters_.profile = FF_PROFILE_AAC_MAIN;
- test_parameters_.channels = 2;
+ test_parameters_.ch_layout.nb_channels = 2;
test_parameters_.extradata = extradata_header_;
test_parameters_.extradata_size = sizeof(extradata_header_);
}
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
index bf3ed00..d564ee9 100644
--- a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
@@ -29,7 +29,7 @@ namespace media {
// Return the number of channels from the data in |frame|.
static inline int DetermineChannels(AVFrame* frame) {
- return frame->channels;
+ return frame->ch_layout.nb_channels;
}
// Called by FFmpeg's allocation routine to allocate a buffer. Uses
@@ -243,7 +243,7 @@ bool FFmpegAudioDecoder::OnNewFrame(const DecoderBuffer& buffer,
// Translate unsupported into discrete layouts for discrete configurations;
// ffmpeg does not have a labeled discrete configuration internally.
ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
- codec_context_->channel_layout, codec_context_->channels);
+ codec_context_->ch_layout.u.mask, codec_context_->ch_layout.nb_channels);
if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED &&
config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) {
channel_layout = CHANNEL_LAYOUT_DISCRETE;
@@ -360,11 +360,11 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) {
// Success!
av_sample_format_ = codec_context_->sample_fmt;
- if (codec_context_->channels != config.channels()) {
+ if (codec_context_->ch_layout.nb_channels != config.channels()) {
MEDIA_LOG(ERROR, media_log_)
<< "Audio configuration specified " << config.channels()
<< " channels, but FFmpeg thinks the file contains "
- << codec_context_->channels << " channels";
+ << codec_context_->ch_layout.nb_channels << " channels";
ReleaseFFmpegResources();
state_ = DecoderState::kUninitialized;
return false;
@@ -415,7 +415,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
if (frame->nb_samples <= 0)
return AVERROR(EINVAL);
- if (s->channels != channels) {
+ if (s->ch_layout.nb_channels != channels) {
DLOG(ERROR) << "AVCodecContext and AVFrame disagree on channel count.";
return AVERROR(EINVAL);
}
@@ -448,7 +448,8 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
ChannelLayout channel_layout =
config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE
? CHANNEL_LAYOUT_DISCRETE
- : ChannelLayoutToChromeChannelLayout(s->channel_layout, s->channels);
+ : ChannelLayoutToChromeChannelLayout(s->ch_layout.u.mask,
+ s->ch_layout.nb_channels);
if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED) {
DLOG(ERROR) << "Unsupported channel layout.";
commit 62274859104bd828373ae406aa9309e610449ac5
Author: Ted Meyer <tmathmeyer@chromium.org>
Date: Fri Mar 22 19:56:55 2024 +0000
Replace deprecated use of AVCodecContext::reordered_opaque
We can use the AV_CODEC_FLAG_COPY_OPAQUE flag on the codec context
now to trigger timestamp propagation.
Bug: 330573128
Change-Id: I6bc57241a35ab5283742aad8d42acb4dc5e85858
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5384308
Commit-Queue: Ted (Chromium) Meyer <tmathmeyer@chromium.org>
Reviewed-by: Dan Sanders <sandersd@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1277051}
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
index 910f9ad..8be165c 100644
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
@@ -411,7 +411,9 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
// TODO(dalecurtis): Just use the profile from the codec context if ffmpeg
// ever starts supporting xHE-AAC.
- if (codec_context->profile == FF_PROFILE_UNKNOWN) {
+ constexpr uint8_t kXHEAAc = 41;
+ if (codec_context->profile == FF_PROFILE_UNKNOWN ||
+ codec_context->profile == kXHEAAc) {
// Errors aren't fatal here, so just drop any MediaLog messages.
NullMediaLog media_log;
mp4::AAC aac_parser;
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
index 05dcb1c..866f446 100644
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_regression_tests.cc
@@ -90,16 +90,16 @@ FFMPEG_TEST_CASE(Cr62127,
PIPELINE_ERROR_DECODE,
PIPELINE_ERROR_DECODE);
FFMPEG_TEST_CASE(Cr93620, "security/93620.ogg", PIPELINE_OK, PIPELINE_OK);
-FFMPEG_TEST_CASE(Cr100492,
- "security/100492.webm",
- DECODER_ERROR_NOT_SUPPORTED,
- DECODER_ERROR_NOT_SUPPORTED);
+FFMPEG_TEST_CASE(Cr100492, "security/100492.webm", PIPELINE_OK, PIPELINE_OK);
FFMPEG_TEST_CASE(Cr100543, "security/100543.webm", PIPELINE_OK, PIPELINE_OK);
FFMPEG_TEST_CASE(Cr101458,
"security/101458.webm",
PIPELINE_ERROR_DECODE,
PIPELINE_ERROR_DECODE);
-FFMPEG_TEST_CASE(Cr108416, "security/108416.webm", PIPELINE_OK, PIPELINE_OK);
+FFMPEG_TEST_CASE(Cr108416,
+ "security/108416.webm",
+ PIPELINE_ERROR_DECODE,
+ PIPELINE_ERROR_DECODE);
FFMPEG_TEST_CASE(Cr110849,
"security/110849.mkv",
DEMUXER_ERROR_COULD_NOT_OPEN,
@@ -154,7 +154,10 @@ FFMPEG_TEST_CASE(Cr234630b,
"security/234630b.mov",
DEMUXER_ERROR_NO_SUPPORTED_STREAMS,
DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
-FFMPEG_TEST_CASE(Cr242786, "security/242786.webm", PIPELINE_OK, PIPELINE_OK);
+FFMPEG_TEST_CASE(Cr242786,
+ "security/242786.webm",
+ PIPELINE_OK,
+ PIPELINE_ERROR_DECODE);
// Test for out-of-bounds access with slightly corrupt file (detection logic
// thinks it's a MONO file, but actually contains STEREO audio).
FFMPEG_TEST_CASE(Cr275590,
@@ -372,8 +375,8 @@ FFMPEG_TEST_CASE(WEBM_2,
DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
FFMPEG_TEST_CASE(WEBM_4,
"security/out.webm.68798.1929",
- DECODER_ERROR_NOT_SUPPORTED,
- DECODER_ERROR_NOT_SUPPORTED);
+ PIPELINE_OK,
+ PIPELINE_OK);
FFMPEG_TEST_CASE(WEBM_5, "frame_size_change.webm", PIPELINE_OK, PIPELINE_OK);
// General MKV test cases.
diff --git a/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc b/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
index a7b2533..ba3c308 100644
--- a/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
+++ b/src/3rdparty/chromium/media/filters/audio_decoder_unittest.cc
@@ -484,7 +484,7 @@ constexpr TestParams kXheAacTestParams[] = {
}},
0,
29400,
- CHANNEL_LAYOUT_MONO,
+ CHANNEL_LAYOUT_UNSUPPORTED,
AudioCodecProfile::kXHE_AAC},
#endif
{AudioCodec::kAAC,
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader.cc b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
index 2b58dd7..9d37f32 100644
--- a/src/3rdparty/chromium/media/filters/audio_file_reader.cc
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
@@ -243,18 +243,10 @@ bool AudioFileReader::OnNewFrame(
// silence from being output. In the case where we are also discarding some
// portion of the packet (as indicated by a negative pts), we further want to
// adjust the duration downward by however much exists before zero.
-#if BUILDFLAG(USE_SYSTEM_FFMPEG)
- if (audio_codec_ == AudioCodec::kAAC && frame->pkt_duration) {
-#else
if (audio_codec_ == AudioCodec::kAAC && frame->duration) {
-#endif // BUILDFLAG(USE_SYSTEM_FFMPEG)
const base::TimeDelta pkt_duration = ConvertFromTimeBase(
glue_->format_context()->streams[stream_index_]->time_base,
-#if BUILDFLAG(USE_SYSTEM_FFMPEG)
- frame->pkt_duration + std::min(static_cast<int64_t>(0), frame->pts));
-#else
frame->duration + std::min(static_cast<int64_t>(0), frame->pts));
-#endif // BUILDFLAG(USE_SYSTEM_FFMPEG)
const base::TimeDelta frame_duration =
base::Seconds(frames_read / static_cast<double>(sample_rate_));
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc b/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
index a1c633d..5784fe1 100644
--- a/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader_unittest.cc
@@ -61,15 +61,14 @@ class AudioFileReaderTest : public testing::Test {
// Verify packets are consistent across demuxer runs. Reads the first few
// packets and then seeks back to the start timestamp and verifies that the
// hashes match on the packets just read.
- void VerifyPackets() {
- const int kReads = 3;
+ void VerifyPackets(int packet_reads) {
const int kTestPasses = 2;
AVPacket packet;
base::TimeDelta start_timestamp;
std::vector<std::string> packet_md5_hashes_;
for (int i = 0; i < kTestPasses; ++i) {
- for (int j = 0; j < kReads; ++j) {
+ for (int j = 0; j < packet_reads; ++j) {
ASSERT_TRUE(reader_->ReadPacketForTesting(&packet));
// On the first pass save the MD5 hash of each packet, on subsequent
@@ -98,7 +97,8 @@ class AudioFileReaderTest : public testing::Test {
int sample_rate,
base::TimeDelta duration,
int frames,
- int expected_frames) {
+ int expected_frames,
+ int packet_reads = 3) {
Initialize(fn);
ASSERT_TRUE(reader_->Open());
EXPECT_EQ(channels, reader_->channels());
@@ -112,7 +112,7 @@ class AudioFileReaderTest : public testing::Test {
EXPECT_EQ(reader_->HasKnownDuration(), false);
}
if (!packet_verification_disabled_)
- ASSERT_NO_FATAL_FAILURE(VerifyPackets());
+ ASSERT_NO_FATAL_FAILURE(VerifyPackets(packet_reads));
ReadAndVerify(hash, expected_frames);
}
@@ -219,7 +219,7 @@ TEST_F(AudioFileReaderTest, AAC_ADTS) {
}
TEST_F(AudioFileReaderTest, MidStreamConfigChangesFail) {
- RunTestFailingDecode("midstream_config_change.mp3", 42624);
+ RunTestFailingDecode("midstream_config_change.mp3", 0);
}
#endif
@@ -229,7 +229,7 @@ TEST_F(AudioFileReaderTest, VorbisInvalidChannelLayout) {
TEST_F(AudioFileReaderTest, WaveValidFourChannelLayout) {
RunTest("4ch.wav", "131.71,38.02,130.31,44.89,135.98,42.52,", 4, 44100,
- base::Microseconds(100001), 4411, 4410);
+ base::Microseconds(100001), 4411, 4410, /*packet_reads=*/2);
}
TEST_F(AudioFileReaderTest, ReadPartialMP3) {
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
index e62b2af..ab39796 100644
--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
@@ -125,7 +125,7 @@ bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) {
}
FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log)
- : media_log_(media_log) {
+ : media_log_(media_log), timestamp_map_(128) {
DVLOG(1) << __func__;
DETACH_FROM_SEQUENCE(sequence_checker_);
}
@@ -204,10 +204,6 @@ int FFmpegVideoDecoder::GetVideoBuffer(struct AVCodecContext* codec_context,
frame->linesize[plane] = layout->planes()[plane].stride;
}
- // This seems unsafe, given threaded decoding. However, `reordered_opaque` is
- // also going away upstream, so we need a whole new mechanism either way.
- frame->reordered_opaque = codec_context->reordered_opaque;
-
// This will be freed by `ReleaseVideoBufferImpl`.
auto* opaque = new OpaqueData(fb_priv, frame_pool_, data, allocation_size,
std::move(*layout));
@@ -354,8 +350,10 @@ bool FFmpegVideoDecoder::FFmpegDecode(const DecoderBuffer& buffer) {
DCHECK(packet->data);
DCHECK_GT(packet->size, 0);
- // Let FFmpeg handle presentation timestamp reordering.
- codec_context_->reordered_opaque = buffer.timestamp().InMicroseconds();
+ const int64_t timestamp = buffer.timestamp().InMicroseconds();
+ const TimestampId timestamp_id = timestamp_id_generator_.GenerateNextId();
+ timestamp_map_.Put(std::make_pair(timestamp_id, timestamp));
+ packet->opaque = reinterpret_cast<void*>(timestamp_id.GetUnsafeValue());
}
FFmpegDecodingLoop::DecodeStatus decode_status = decoding_loop_->DecodePacket(
packet, base::BindRepeating(&FFmpegVideoDecoder::OnNewFrame,
@@ -414,7 +412,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
}
gfx::Size natural_size = aspect_ratio.GetNaturalSize(visible_rect);
- const auto pts = base::Microseconds(frame->reordered_opaque);
+ const auto ts_id = TimestampId(reinterpret_cast<size_t>(frame->opaque));
+ const auto ts_lookup = timestamp_map_.Get(ts_id);
+ if (ts_lookup == timestamp_map_.end()) {
+ return false;
+ }
+ const auto pts = base::Microseconds(std::get<1>(*ts_lookup));
auto video_frame = VideoFrame::WrapExternalDataWithLayout(
opaque->layout, visible_rect, natural_size, opaque->data, opaque->size,
pts);
@@ -489,8 +492,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config,
codec_context_->thread_count = GetFFmpegVideoDecoderThreadCount(config);
codec_context_->thread_type =
FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME);
+
codec_context_->opaque = this;
codec_context_->get_buffer2 = GetVideoBufferImpl;
+ codec_context_->flags |= AV_CODEC_FLAG_COPY_OPAQUE;
if (decode_nalus_)
codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS;
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
index 60cb9d5..4fa8628 100644
--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.h
@@ -7,10 +7,12 @@
#include <memory>
+#include "base/containers/lru_cache.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequence_checker.h"
+#include "base/types/id_type.h"
#include "media/base/supported_video_decoder_config.h"
#include "media/base/video_decoder.h"
#include "media/base/video_decoder_config.h"
@@ -87,6 +89,20 @@ class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder {
// FFmpeg structures owned by this object.
std::unique_ptr<AVCodecContext, ScopedPtrAVFreeContext> codec_context_;
+ // The gist here is that timestamps need to be 64 bits to store microsecond
+ // precision. A 32 bit integer would overflow at ~35 minutes at this level of
+ // precision. We can't cast the timestamp to the void ptr object used by the
+ // opaque field in ffmpeg then, because it would lose data on a 32 bit build.
+ // However, we don't actually have 2^31 timestamped frames in a single
+ // playback, so it's fine to use the 32 bit value as a key in a map which
+ // contains the actual timestamps. Additionally, we've in the past set 128
+ // outstanding frames for re-ordering as a limit for cross-thread decoding
+ // tasks, so we'll do that here too with the LRU cache.
+ using TimestampId = base::IdType<int64_t, size_t, 0>;
+
+ TimestampId::Generator timestamp_id_generator_;
+ base::LRUCache<TimestampId, int64_t> timestamp_map_;
+
VideoDecoderConfig config_;
scoped_refptr<FrameBufferPool> frame_pool_;
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
index f67718c..fe42aef 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc
@@ -229,7 +229,6 @@ int H264DecoderImpl::AVGetBuffer2(AVCodecContext* context,
int total_size = y_size + 2 * uv_size;
av_frame->format = context->pix_fmt;
- av_frame->reordered_opaque = context->reordered_opaque;
// Create a VideoFrame object, to keep a reference to the buffer.
// TODO(nisse): The VideoFrame's timestamp and rotation info is not used.
@@ -377,8 +376,6 @@ int32_t H264DecoderImpl::Decode(const EncodedImage& input_image,
return WEBRTC_VIDEO_CODEC_ERROR;
}
packet->size = static_cast<int>(input_image.size());
- int64_t frame_timestamp_us = input_image.ntp_time_ms_ * 1000; // ms -> μs
- av_context_->reordered_opaque = frame_timestamp_us;
int result = avcodec_send_packet(av_context_.get(), packet.get());
@@ -395,10 +392,6 @@ int32_t H264DecoderImpl::Decode(const EncodedImage& input_image,
return WEBRTC_VIDEO_CODEC_ERROR;
}
- // We don't expect reordering. Decoded frame timestamp should match
- // the input one.
- RTC_DCHECK_EQ(av_frame_->reordered_opaque, frame_timestamp_us);
-
// TODO(sakal): Maybe it is possible to get QP directly from FFmpeg.
h264_bitstream_parser_.ParseBitstream(input_image);
absl::optional<int> qp = h264_bitstream_parser_.GetLastSliceQp();

View file

@ -0,0 +1,45 @@
From 65ea28e7204eaeb39588a33cfc2f69c48951aa6a Mon Sep 17 00:00:00 2001
From: Peter Varga <pvarga@inf.u-szeged.hu>
Date: Thu, 14 Aug 2025 16:17:41 +0200
Subject: [PATCH] Fix Quick popup window positioning under X11
If the popup window has the Qt::Dialog flag, some window managers may
try to resize and move the popup after it becomes visible. This can lead
to a blinking popup or even worse, it can cause a loop that continuously
moves the popup window.
Replace Qt::Tool flag with Qt::Popup to get rid of the Qt::Dialog flag
but keep popup as popup.
Note on Wayland Qt:Tool is xdg toplevel not a 'popup' neither 'grabbing
popup' and it creates shell surface. This means it will get random
position on the screen.
Note this tricky issue as we already changed that several times both
for widgets and quick due to different reasons (see 1390979a, 2f720836,
58467ed19, 7e7dd2625, c56169f7a1)
Fixes: QTBUG-140321
Task-number: QTBUG-132794
Task-number: QTBUG-138747
Pick-to: 6.10
Change-Id: I8c3a94519008455fac2d8ab4c3bf34d860e2475b
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
---
.../render_widget_host_view_qt_delegate_quickwindow.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp
index 3ad88ca39aa..95b5e3500b3 100644
--- a/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -31,7 +31,8 @@ RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWi
RenderWidgetHostViewQtDelegateItem *realDelegate, QWindow *parent)
: QQuickWindow(), m_realDelegate(realDelegate), m_virtualParent(nullptr), m_transformed(false)
{
- setFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
+ setFlags(Qt::Popup | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint
+ | Qt::WindowDoesNotAcceptFocus);
realDelegate->setParentItem(contentItem());
setTransientParent(parent);
}

View file

@ -1,36 +0,0 @@
diff --git a/src/3rdparty/chromium/media/video/BUILD.gn b/src/3rdparty/chromium/media/video/BUILD.gn
index ef5c9c6c0..7e439852d 100644
--- a/src/3rdparty/chromium/media/video/BUILD.gn
+++ b/src/3rdparty/chromium/media/video/BUILD.gn
@@ -2,7 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//build/config/linux/pkg_config.gni")
import("//media/media_options.gni")
+import("//third_party/webrtc/webrtc.gni")
+
+if (rtc_use_h264 && rtc_use_system_openh264) {
+ pkg_config("openh264") {
+ packages = [
+ "openh264",
+ ]
+ }
+}
source_set("video") {
# Do not expand the visibility here without double-checking with OWNERS, this
@@ -114,7 +124,12 @@ source_set("video") {
"openh264_video_encoder.cc",
"openh264_video_encoder.h",
]
- deps += [ "//third_party/openh264:encoder" ]
+
+ if (rtc_use_system_openh264) {
+ configs += [":openh264"]
+ } else {
+ deps += [ "//third_party/openh264:encoder" ]
+ }
}
if (is_apple) {

View file

@ -0,0 +1,607 @@
From 1534a75e57b47d763af8f32eec91bc8471442816 Mon Sep 17 00:00:00 2001
From: Peter Varga <pvarga@inf.u-szeged.hu>
Date: Mon, 20 Oct 2025 10:43:49 +0200
Subject: [PATCH] Move GPU info logging to the GPU thread
Accessing certain GPU information (eg. GPU feature status values) from
the browser thread requires extra API on top of Chromium, such as
content::GpuChildThread::gpu_channel_manager().
This change moves the logging to the GPU thread, allowing use of
existing APIs like content::GpuDataManager::GetFeatureStatus().
Task-number: QTBUG-139335
Fixes: QTBUG-142497
Fixes: QTBUG-142720
Change-Id: I4e4471a78258a1502ec0e11683cae3936e170ce1
Reviewed-by: Moss Heim <moss.heim@qt.io>
(cherry picked from commit 0b65b0754d1534280acc3fe48be61127ce24ac93)
---
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 64ef09f..eb83a82 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -132,6 +132,7 @@
file_system_access/file_system_access_permission_request_manager_qt.cpp file_system_access/file_system_access_permission_request_manager_qt.h
find_text_helper.cpp find_text_helper.h
global_descriptors_qt.h
+ gpu/content_gpu_client_qt.cpp gpu/content_gpu_client_qt.h
javascript_dialog_controller.cpp javascript_dialog_controller.h javascript_dialog_controller_p.h
javascript_dialog_manager_qt.cpp javascript_dialog_manager_qt.h
login_delegate_qt.cpp login_delegate_qt.h
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index 4d81e39..ed63980 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -4,8 +4,6 @@
#include "content_client_qt.h"
-#include "compositor/compositor.h"
-
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/json/json_string_value_serializer.h"
@@ -13,15 +11,11 @@
#include "base/strings/string_util.h"
#include "base/values.h"
#include "base/version.h"
-#include "content/gpu/gpu_child_thread.h"
#include "content/public/common/cdm_info.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/content_switches.h"
#include "extensions/buildflags/buildflags.h"
#include "extensions/common/constants.h"
-#include "gpu/config/gpu_feature_info.h"
-#include "gpu/config/gpu_preferences.h"
-#include "gpu/ipc/service/gpu_channel_manager.h"
#include "media/base/media_switches.h"
#include "media/base/video_codecs.h"
#include "media/cdm/supported_audio_codecs.h"
@@ -34,10 +28,8 @@
#include <QCoreApplication>
#include <QFile>
#include <QLibraryInfo>
-#include <QRegularExpression>
#include <QString>
#include <QSysInfo>
-#include <QThread>
#if BUILDFLAG(IS_WIN)
#include "ui/gl/gl_utils.h"
@@ -497,165 +489,4 @@
return origin_trial_policy_.get();
}
-void ContentClientQt::SetGpuInfo(const gpu::GPUInfo &gpu_info)
-{
- base::CommandLine *commandLine = base::CommandLine::ForCurrentProcess();
- const bool isBrowserProcess = !commandLine->HasSwitch(switches::kProcessType);
- const bool isMainThread = QThread::currentThread() == qApp->thread();
-
- // Limit this to the main thread of the browser process for now.
- if (!isBrowserProcess || !isMainThread)
- return;
-
- if (!gpu_info.IsInitialized()) {
- // This is probably not an issue but suspicious.
- qWarning("Failed to initialize GPUInfo.");
- return;
- }
-
- const gpu::GPUInfo::GPUDevice &primary = gpu_info.gpu;
-
- // Do not print the info again if the device hasn't been changed.
- // Change of the device is unexpected: we don't support or implement fallback yet.
- // It is suspicious if the info is logged twice.
- if (m_gpuInfo && m_gpuInfo->gpu.device_string == primary.device_string)
- return;
- m_gpuInfo = gpu_info;
-
- auto *gpuChannelManager = content::GpuChildThread::instance()->gpu_channel_manager();
- const gpu::GpuFeatureStatus gpuCompositingStatus =
- gpuChannelManager->gpu_feature_info()
- .status_values[gpu::GPU_FEATURE_TYPE_ACCELERATED_GL];
-
-#if BUILDFLAG(IS_OZONE)
- if (gpuCompositingStatus == gpu::kGpuFeatureStatusEnabled) {
- // See entry 3 in //gpu/config/software_rendering_list.json
- QRegularExpression filter(u"software|llvmpipe|softpipe"_s,
- QRegularExpression::CaseInsensitiveOption);
- if (filter.match(QLatin1StringView(gpu_info.gl_renderer)).hasMatch()) {
- qWarning("Hardware rendering is enabled but it is not supported with Mesa software "
- "rasterizer. Expect troubles.");
-
- if (gpuChannelManager->gpu_preferences().ignore_gpu_blocklist)
- qWarning("Rendering may fail because --ignore-gpu-blocklist is set.");
- }
- }
-#endif
-
- if (Q_LIKELY(!lcWebEngineCompositor().isDebugEnabled()))
- return;
-
- auto deviceToString = [](const gpu::GPUInfo::GPUDevice &device) -> QString {
- if (device.vendor_id == 0x0)
- return "Disabled"_L1;
-
- QString log;
-
- // TODO: Factor vendor translation out from QtWebEngineCore::GPUInfo.
- // Only name the most common desktop GPU hardware vendors for now.
- switch (device.vendor_id) {
- case 0x1002:
- log += "AMD"_L1;
- break;
- case 0x10DE:
- log += "Nvidia"_L1;
- break;
- case 0x8086:
- log += "Intel"_L1;
- break;
- default:
- log += "vendor id: 0x"_L1 + QString::number(device.vendor_id, 16);
- }
-
- log += ", device id: 0x"_L1 + QString::number(device.device_id, 16);
-
- if (!device.driver_vendor.empty()) {
- log += ", driver: "_L1 + QLatin1StringView(device.driver_vendor) + u' '
- + QLatin1StringView(device.driver_version);
- }
- log += ", system device id: 0x"_L1 + QString::number(device.system_device_id, 16);
-
- log += ", preference: "_L1;
- switch (device.gpu_preference) {
- case gl::GpuPreference::kNone:
- log += "None"_L1;
- break;
- case gl::GpuPreference::kDefault:
- log += "Default"_L1;
- break;
- case gl::GpuPreference::kLowPower:
- log += "LowPower"_L1;
- break;
- case gl::GpuPreference::kHighPerformance:
- log += "HighPerformance"_L1;
- break;
- }
-
- log += ", active: "_L1 + (device.active ? "yes"_L1 : "no"_L1);
- return log;
- };
-
- QString log;
-
- log = "GPU Compositing: ";
- switch (gpuCompositingStatus) {
- case gpu::kGpuFeatureStatusEnabled:
- log += "Enabled"_L1;
- break;
- case gpu::kGpuFeatureStatusBlocklisted:
- log += "Blocklisted"_L1;
- break;
- case gpu::kGpuFeatureStatusDisabled:
- log += "Disabled"_L1;
- break;
- case gpu::kGpuFeatureStatusSoftware:
- log += "Software"_L1;
- break;
- case gpu::kGpuFeatureStatusUndefined:
- log += "Undefined"_L1;
- break;
- case gpu::kGpuFeatureStatusMax:
- log += "Max"_L1;
- break;
- }
- qCDebug(lcWebEngineCompositor, "%ls", qUtf16Printable(log));
-
- if (gpu_info.gl_vendor.empty() || gpu_info.gl_vendor == "Disabled") {
- log = "ANGLE is disabled:\n"_L1;
- log += " GL Renderer: "_L1 + QLatin1StringView(gpu_info.gl_renderer) + u'\n';
- log += " Software Renderer: "_L1 + (primary.IsSoftwareRenderer() ? "yes"_L1 : "no"_L1)
- + u'\n';
- log += " Primary GPU: "_L1 + deviceToString(primary) + u'\n';
- } else {
- log = QLatin1StringView(gpu_info.display_type) + " display is initialized:\n"_L1;
- log += " GL Renderer: "_L1 + QLatin1StringView(gpu_info.gl_renderer) + u'\n';
- log += " "_L1 + QString::number(gpu_info.GpuCount()) + " GPU(s) detected:\n"_L1;
- log += " "_L1 + deviceToString(primary) + u'\n';
- for (auto &secondary : gpu_info.secondary_gpus)
- log += " "_L1 + deviceToString(secondary) + u'\n';
-
- log += " NVIDIA Optimus: "_L1 + (gpu_info.optimus ? "enabled"_L1 : "disabled"_L1) + u'\n';
- log += " AMD Switchable: "_L1 + (gpu_info.amd_switchable ? "enabled"_L1 : "disabled"_L1);
- }
-
- qCDebug(lcWebEngineCompositor, "%ls", qUtf16Printable(log));
-
-#if BUILDFLAG(IS_WIN)
- log = "Windows specific driver information:\n"_L1;
-
- log += " Direct Composition: "_L1;
- if (gpu_info.overlay_info.direct_composition)
- log += "enabled\n"_L1;
- else if (gl::GetGlWorkarounds().disable_direct_composition)
- log += "disabled by workaround\n"_L1;
- else
- log += "disabled\n"_L1;
-
- log += " Supports Overlays: "_L1
- + (gpu_info.overlay_info.supports_overlays ? "yes"_L1 : "no"_L1) + u'\n';
- log += " Supports D3D Shared Images: "_L1 + (gpu_info.shared_image_d3d ? "yes"_L1 : "no"_L1);
- qCDebug(lcWebEngineCompositor, "%ls", qUtf16Printable(log));
-#endif
-}
-
} // namespace QtWebEngineCore
diff --git a/src/core/content_client_qt.h b/src/core/content_client_qt.h
index 2936c23..d5f9e71 100644
--- a/src/core/content_client_qt.h
+++ b/src/core/content_client_qt.h
@@ -10,11 +10,9 @@
#include "base/synchronization/lock.h"
#include "components/embedder_support/origin_trials/origin_trial_policy_impl.h"
#include "content/public/common/content_client.h"
-#include "gpu/config/gpu_info.h"
#include "ui/base/layout.h"
#include <memory>
-#include <optional>
namespace QtWebEngineCore {
@@ -32,13 +30,11 @@
gfx::Image &GetNativeImageNamed(int resource_id) override;
std::u16string GetLocalizedString(int message_id) override;
blink::OriginTrialPolicy *GetOriginTrialPolicy() override;
- void SetGpuInfo(const gpu::GPUInfo &gpu_info) override;
private:
// Used to lock when |origin_trial_policy_| is initialized.
base::Lock origin_trial_policy_lock_;
std::unique_ptr<embedder_support::OriginTrialPolicyImpl> origin_trial_policy_;
- std::optional<gpu::GPUInfo> m_gpuInfo;
};
} // namespace QtWebEngineCore
diff --git a/src/core/content_main_delegate_qt.cpp b/src/core/content_main_delegate_qt.cpp
index 6c61c7a..1512f9a 100644
--- a/src/core/content_main_delegate_qt.cpp
+++ b/src/core/content_main_delegate_qt.cpp
@@ -194,6 +194,12 @@
return m_browserClient.get();
}
+content::ContentGpuClient *ContentMainDelegateQt::CreateContentGpuClient()
+{
+ m_gpuClient.reset(new ContentGpuClientQt);
+ return m_gpuClient.get();
+}
+
content::ContentRendererClient *ContentMainDelegateQt::CreateContentRendererClient()
{
#if BUILDFLAG(IS_LINUX)
diff --git a/src/core/content_main_delegate_qt.h b/src/core/content_main_delegate_qt.h
index cb320ec..b725d88 100644
--- a/src/core/content_main_delegate_qt.h
+++ b/src/core/content_main_delegate_qt.h
@@ -10,6 +10,7 @@
#include "content_browser_client_qt.h"
#include "content_client_qt.h"
#include "content_utility_client_qt.h"
+#include "gpu/content_gpu_client_qt.h"
namespace QtWebEngineCore {
@@ -23,6 +24,7 @@
content::ContentClient *CreateContentClient() override;
content::ContentBrowserClient* CreateContentBrowserClient() override;
+ content::ContentGpuClient* CreateContentGpuClient() override;
content::ContentRendererClient* CreateContentRendererClient() override;
content::ContentUtilityClient* CreateContentUtilityClient() override;
std::optional<int> BasicStartupComplete() override;
@@ -30,6 +32,7 @@
private:
ContentClientQt m_contentClient;
std::unique_ptr<ContentBrowserClientQt> m_browserClient;
+ std::unique_ptr<ContentGpuClientQt> m_gpuClient;
std::unique_ptr<ContentUtilityClientQt> m_utilityClient;
};
diff --git a/src/core/gpu/content_gpu_client_qt.cpp b/src/core/gpu/content_gpu_client_qt.cpp
new file mode 100644
index 0000000..2cb6592
--- /dev/null
+++ b/src/core/gpu/content_gpu_client_qt.cpp
@@ -0,0 +1,236 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
+
+#include "content_gpu_client_qt.h"
+
+#include "compositor/compositor.h"
+
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/gpu_data_manager.h"
+#include "content/public/browser/gpu_data_manager_observer.h"
+#include "gpu/config/gpu_driver_bug_workarounds.h"
+#include "gpu/config/gpu_info.h"
+#include "mojo/public/cpp/bindings/binder_map.h"
+
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qstring.h>
+
+#include <optional>
+#include <tuple>
+
+#if BUILDFLAG(IS_WIN)
+#include "ui/gl/gl_utils.h"
+#endif
+
+using namespace Qt::StringLiterals;
+
+namespace QtWebEngineCore {
+
+namespace {
+static inline bool isSameDevice(const gpu::GPUInfo::GPUDevice &d1,
+ const gpu::GPUInfo::GPUDevice &d2)
+{
+ return std::tie(d1.vendor_id, d1.device_id, d1.system_device_id, d1.vendor_string,
+ d1.device_string, d1.driver_vendor, d1.driver_version)
+ == std::tie(d2.vendor_id, d2.device_id, d2.system_device_id, d2.vendor_string,
+ d2.device_string, d2.driver_vendor, d2.driver_version);
+}
+
+static QString gpuDeviceToString(const gpu::GPUInfo::GPUDevice &device)
+{
+ if (device.vendor_id == 0x0)
+ return "Disabled"_L1;
+
+ QString deviceString;
+
+ // TODO: Factor vendor translation out from QtWebEngineCore::GPUInfo.
+ // Only name the most common desktop GPU hardware vendors for now.
+ switch (device.vendor_id) {
+ case 0x1002:
+ deviceString += "AMD"_L1;
+ break;
+ case 0x10DE:
+ deviceString += "Nvidia"_L1;
+ break;
+ case 0x8086:
+ deviceString += "Intel"_L1;
+ break;
+ default:
+ deviceString += "vendor id: 0x"_L1 + QString::number(device.vendor_id, 16);
+ }
+
+ deviceString += ", device id: 0x"_L1 + QString::number(device.device_id, 16);
+
+ if (!device.driver_vendor.empty()) {
+ deviceString += ", driver: "_L1 + QLatin1StringView(device.driver_vendor) + u' '
+ + QLatin1StringView(device.driver_version);
+ }
+ deviceString += ", system device id: 0x"_L1 + QString::number(device.system_device_id, 16);
+
+ deviceString += ", preference: "_L1;
+ switch (device.gpu_preference) {
+ case gl::GpuPreference::kNone:
+ deviceString += "None"_L1;
+ break;
+ case gl::GpuPreference::kDefault:
+ deviceString += "Default"_L1;
+ break;
+ case gl::GpuPreference::kLowPower:
+ deviceString += "LowPower"_L1;
+ break;
+ case gl::GpuPreference::kHighPerformance:
+ deviceString += "HighPerformance"_L1;
+ break;
+ }
+
+ deviceString += ", active: "_L1 + (device.active ? "yes"_L1 : "no"_L1);
+ return deviceString;
+}
+
+static inline const char *gpuFeatureStatusToString(const gpu::GpuFeatureStatus &status)
+{
+ switch (status) {
+ case gpu::kGpuFeatureStatusEnabled:
+ return "Enabled";
+ case gpu::kGpuFeatureStatusBlocklisted:
+ return "Blocklisted";
+ case gpu::kGpuFeatureStatusDisabled:
+ return "Disabled";
+ case gpu::kGpuFeatureStatusSoftware:
+ return "Software";
+ case gpu::kGpuFeatureStatusUndefined:
+ return "Undefined";
+ case gpu::kGpuFeatureStatusMax:
+ return "Max";
+ }
+}
+
+static QString angleInfo(const gpu::GPUInfo &gpuInfo)
+{
+ QString info;
+
+ if (gpuInfo.gl_vendor.empty() || gpuInfo.gl_vendor == "Disabled") {
+ info = "ANGLE is disabled:\n"_L1;
+ info += " GL Renderer: "_L1 + QLatin1StringView(gpuInfo.gl_renderer) + u'\n';
+ info += " Software Renderer: "_L1 + (gpuInfo.gpu.IsSoftwareRenderer() ? "yes"_L1 : "no"_L1)
+ + u'\n';
+ info += " Primary GPU: "_L1 + gpuDeviceToString(gpuInfo.gpu) + u'\n';
+ return info;
+ }
+
+ info = QLatin1StringView(gpuInfo.display_type) + " display is initialized:\n"_L1;
+ info += " GL Renderer: "_L1 + QLatin1StringView(gpuInfo.gl_renderer) + u'\n';
+ info += " "_L1 + QString::number(gpuInfo.GpuCount()) + " GPU(s) detected:\n"_L1;
+ info += " "_L1 + gpuDeviceToString(gpuInfo.gpu) + u'\n';
+ for (auto &secondary : gpuInfo.secondary_gpus)
+ info += " "_L1 + gpuDeviceToString(secondary) + u'\n';
+
+ info += " NVIDIA Optimus: "_L1 + (gpuInfo.optimus ? "enabled"_L1 : "disabled"_L1) + u'\n';
+ info += " AMD Switchable: "_L1 + (gpuInfo.amd_switchable ? "enabled"_L1 : "disabled"_L1);
+
+ return info;
+}
+
+#if BUILDFLAG(IS_WIN)
+static QString windowsInfo(const gpu::GPUInfo &gpuInfo)
+{
+ QString info;
+ info = "Windows specific driver information:\n"_L1;
+
+ info += " Direct Composition: "_L1;
+ if (gpuInfo.overlay_info.direct_composition)
+ info += "enabled\n"_L1;
+ else if (gl::GetGlWorkarounds().disable_direct_composition)
+ info += "disabled by workaround\n"_L1;
+ else
+ info += "disabled\n"_L1;
+
+ info += " Supports Overlays: "_L1
+ + (gpuInfo.overlay_info.supports_overlays ? "yes"_L1 : "no"_L1) + u'\n';
+ info += " Supports D3D Shared Images: "_L1 + (gpuInfo.shared_image_d3d ? "yes"_L1 : "no"_L1);
+ return info;
+}
+#endif
+} // namespace
+
+class GpuObserver : public content::GpuDataManagerObserver
+{
+public:
+ GpuObserver(ContentGpuClientQt *client) : m_client(client)
+ {
+ content::GpuDataManager *manager = content::GpuDataManager::GetInstance();
+ if (manager->IsEssentialGpuInfoAvailable())
+ OnGpuInfoUpdate();
+ }
+
+ ~GpuObserver() { content::GpuDataManager::GetInstance()->RemoveObserver(this); }
+
+ void OnGpuInfoUpdate() override
+ {
+ content::GpuDataManager *manager = content::GpuDataManager::GetInstance();
+ Q_ASSERT(manager->IsEssentialGpuInfoAvailable());
+
+ const gpu::GPUInfo &gpuInfo = manager->GetGPUInfo();
+ Q_ASSERT(gpuInfo.IsInitialized());
+
+ // Avoid logging the info again if the device hasn't changed.
+ // A change in the device is unexpected, as we currently don't support or implement
+ // fallback. Logging the info multiple times may indicate a problem.
+ if (m_gpuInfo && isSameDevice(m_gpuInfo->gpu, gpuInfo.gpu))
+ return;
+ m_gpuInfo = gpuInfo;
+
+ const gpu::GpuFeatureStatus gpuCompositingStatus =
+ manager->GetFeatureStatus(gpu::GPU_FEATURE_TYPE_ACCELERATED_GL);
+ qCDebug(lcWebEngineCompositor, "GPU Compositing: %s",
+ gpuFeatureStatusToString(gpuCompositingStatus));
+
+#if BUILDFLAG(IS_OZONE)
+ if (gpuCompositingStatus == gpu::kGpuFeatureStatusEnabled) {
+ // See entry 3 in //gpu/config/software_rendering_list.json
+ QRegularExpression filter(u"software|llvmpipe|softpipe"_s,
+ QRegularExpression::CaseInsensitiveOption);
+ if (filter.match(QLatin1StringView(gpuInfo.gl_renderer)).hasMatch()) {
+ qWarning("Hardware rendering is enabled but it is not supported with Mesa software "
+ "rasterizer. Expect troubles.");
+
+ if (m_client->gpuPreferences().ignore_gpu_blocklist)
+ qWarning("Rendering may fail because --ignore-gpu-blocklist is set.");
+ }
+ }
+#endif
+
+ qCDebug(lcWebEngineCompositor, "%ls", qUtf16Printable(angleInfo(gpuInfo)));
+#if BUILDFLAG(IS_WIN)
+ qCDebug(lcWebEngineCompositor, "%ls", qUtf16Printable(windowsInfo(gpuInfo)));
+#endif
+ }
+
+private:
+ ContentGpuClientQt *m_client;
+ std::optional<gpu::GPUInfo> m_gpuInfo;
+};
+
+ContentGpuClientQt::ContentGpuClientQt() = default;
+ContentGpuClientQt::~ContentGpuClientQt() = default;
+
+void ContentGpuClientQt::GpuServiceInitialized()
+{
+ // This is expected to be called on the GPU thread.
+ Q_ASSERT(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ m_gpuObserver.reset(new GpuObserver(this));
+ content::GpuDataManager::GetInstance()->AddObserver(m_gpuObserver.get());
+}
+
+void ContentGpuClientQt::ExposeInterfacesToBrowser(
+ const gpu::GpuPreferences &gpu_preferences,
+ const gpu::GpuDriverBugWorkarounds &gpu_workarounds, mojo::BinderMap *binders)
+{
+ Q_UNUSED(gpu_workarounds);
+ Q_UNUSED(binders);
+ m_gpuPreferences = gpu_preferences;
+}
+
+} // namespace QtWebEngineCore
diff --git a/src/core/gpu/content_gpu_client_qt.h b/src/core/gpu/content_gpu_client_qt.h
new file mode 100644
index 0000000..51b3a0d
--- /dev/null
+++ b/src/core/gpu/content_gpu_client_qt.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
+
+#ifndef CONTENT_GPU_CLIENT_QT_H
+#define CONTENT_GPU_CLIENT_QT_H
+
+#include "content/public/gpu/content_gpu_client.h"
+#include "gpu/config/gpu_preferences.h"
+
+#include <QtCore/qscopedpointer.h>
+
+namespace gpu {
+class GpuDriverBugWorkarounds;
+}
+
+namespace mojo {
+class BinderMap;
+}
+
+namespace QtWebEngineCore {
+
+class GpuObserver;
+
+class ContentGpuClientQt : public content::ContentGpuClient
+{
+public:
+ ContentGpuClientQt();
+ ~ContentGpuClientQt();
+
+ gpu::GpuPreferences gpuPreferences() const { return m_gpuPreferences; }
+
+ // Overridden from content::ContentGpuClient:
+ void GpuServiceInitialized() override;
+ void ExposeInterfacesToBrowser(const gpu::GpuPreferences &gpu_preferences,
+ const gpu::GpuDriverBugWorkarounds &gpu_workarounds,
+ mojo::BinderMap *binders) override;
+
+private:
+ QScopedPointer<GpuObserver> m_gpuObserver;
+ gpu::GpuPreferences m_gpuPreferences;
+};
+
+} // namespace QtWebEngineCore
+
+#endif // CONTENT_GPU_CLIENT_QT_H

View file

@ -0,0 +1,13 @@
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index cc992b4..7b6326f 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -449,6 +449,8 @@ foreach(arch ${archs})
use_bluez=false
is_cfi=false
use_ozone=true
+ media_use_openh264=true
+ rtc_use_h264=true
ozone_auto_platforms=false
ozone_platform_headless=false
ozone_platform_external=true

View file

@ -1,71 +0,0 @@
diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn
index 738d3d4ed..8344a19b0 100644
--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn
+++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn
@@ -6,6 +6,7 @@
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
+import("//build/config/linux/pkg_config.gni")
import("//third_party/libaom/options.gni")
import("../../webrtc.gni")
@@ -453,6 +454,14 @@ rtc_library("video_coding_utility") {
]
}
+if (rtc_use_h264 && rtc_use_system_openh264) {
+ pkg_config("openh264") {
+ packages = [
+ "openh264",
+ ]
+ }
+}
+
rtc_library("webrtc_h264") {
visibility = [ "*" ]
sources = [
@@ -501,8 +510,14 @@ rtc_library("webrtc_h264") {
if (rtc_use_h264) {
deps += [
"//third_party/ffmpeg",
- "//third_party/openh264:encoder",
]
+
+ if (rtc_use_system_openh264) {
+ configs += [":openh264"]
+ } else {
+ deps += [ "//third_party/openh264:encoder" ]
+ }
+
if (!build_with_mozilla) {
deps += [ "../../media:rtc_media_base" ]
}
diff --git a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
index 82870d2db..12231becc 100644
--- a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
+++ b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
@@ -192,6 +192,9 @@ declare_args() {
# Enable to use H265
rtc_use_h265 = proprietary_codecs
+ # Allow to use system OpenH264
+ rtc_use_system_openh264 = false
+
# Enable this flag to make webrtc::Mutex be implemented by absl::Mutex.
rtc_use_absl_mutex = false
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index e7432d0c7..394f05011 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -436,6 +436,9 @@ foreach(arch ${archs})
use_udev=true
is_cfi=false
use_ozone=true
+ media_use_openh264=true
+ rtc_use_h264=true
+ rtc_use_system_openh264=true
ozone_auto_platforms=false
ozone_platform_headless=false
ozone_platform_external=true

44
series.ppc64 Normal file
View file

@ -0,0 +1,44 @@
# from chromium-130 branch at https://gitlab.raptorengineering.com/raptor-engineering-public/chromium/openpower-patches.git
# do following edits to the patches:
# - third_party/0001-Add-PPC64-support-for-boringssl.patch
# - remove third_party/boringssl/src/crypto/test/abi_test.h
# - crashpad/0001-Implement-support-for-PPC64-on-Linux.patch
# - remove all tests
# - crashpad/minidump/test/*
# - crashpad/snapshot/test/*
# - crashpad/test/*
#
# or use prepare-ppc64.sh script to generate the patchset
#
ppc64le/sandbox/0001-linux-seccomp-bpf-ppc64-glibc-workaround-in-SIGSYS-h.patch
ppc64le/sandbox/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch
ppc64le/sandbox/0001-services-service_manager-sandbox-linux-Fix-TCGETS-de.patch
ppc64le/sandbox/0001-sandbox-linux-bpf_dsl-Update-syscall-ranges-for-ppc6.patch
ppc64le/sandbox/0001-sandbox-linux-Implement-partial-support-for-ppc64-sy.patch
ppc64le/sandbox/0001-sandbox-linux-Update-IsSyscallAllowed-in-broker_proc.patch
ppc64le/sandbox/0001-sandbox-linux-Update-syscall-helpers-lists-for-ppc64.patch
ppc64le/sandbox/0002-sandbox-linux-bpf_dsl-Modify-seccomp_macros-to-add-s.patch
ppc64le/sandbox/0003-sandbox-linux-system_headers-Update-linux-seccomp-he.patch
ppc64le/sandbox/0004-sandbox-linux-system_headers-Update-linux-signal-hea.patch
ppc64le/sandbox/0005-sandbox-linux-seccomp-bpf-Add-ppc64-syscall-stub.patch
ppc64le/sandbox/0005-sandbox-linux-update-unit-test-for-ppc64.patch
ppc64le/sandbox/0006-sandbox-linux-disable-timedwait-time64-ppc64.patch
ppc64le/sandbox/0007-sandbox-linux-add-ppc64-stat.patch
ppc64le/sandbox/Sandbox-linux-services-credentials.cc-PPC.patch
ppc64le/sandbox/0008-sandbox-fix-ppc64le-glibc234.patch
ppc64le/third_party/0001-third_party-angle-Include-missing-header-cstddef-in-.patch
ppc64le/third_party/0001-Add-PPC64-support-for-boringssl.patch
ppc64le/third_party/0001-third_party-lss-Don-t-look-for-mmap2-on-ppc64.patch
ppc64le/third_party/0002-third_party-lss-kernel-structs.patch
ppc64le/libaom/0001-Add-ppc64-target-to-libaom.patch
ppc64le/libaom/0001-Add-pregenerated-config-for-libaom-on-ppc64.patch
ppc64le/third_party/0002-third_party-libvpx-Remove-bad-ppc64-config.patch
ppc64le/third_party/0002-Add-PPC64-generated-files-for-boringssl.patch
ppc64le/third_party/0003-third_party-libvpx-Add-ppc64-generated-config.patch
ppc64le/crashpad/0001-Implement-support-for-PPC64-on-Linux.patch
ppc64le/fixes/fix-partition-alloc-compile.patch
ppc64le/third_party/use-sysconf-page-size-on-ppc64.patch
ppc64le/third_party/dawn-fix-ppc64le-detection.patch
ppc64le/core/add-ppc64-pthread-stack-size.patch
ppc64le/third_party/0001-third-party-hwy-wrong-include.patch

View file

@ -1,2 +1,2 @@
SHA512 (qtwebengine-everywhere-src-6.8.1-clean.tar.xz) = 112537e9dc89d945543387ca8cd861c9957de9b6861b8c184232bae8deabb5fc1065d880ec06c5f4b9222a5063c14c0cb4441f40435bf16a7238dd064ffe4993
SHA512 (pulseaudio-12.2-headers.tar.gz) = a5a9bcbb16030b3bc83cc0cc8f5e7f90e0723d3e83258a5c77eacb32eaa267118a73fa7814fbcc99a24e4907916a2b371ebb6dedc4f45541c3acf6c834fd35be
SHA512 (qtwebengine-everywhere-src-6.10.1-clean.tar.xz) = c297c030623663dce4943562ca60ac64067702dd96b487f5786fb765c477162ee7d040e6ecb4b820ff9ef162259e1f56bd1054e20e0982fef90fa32857a462c9