Add riscv64 support
This commit is contained in:
parent
494778a609
commit
9c31cf3699
@ -53,7 +53,7 @@
|
|||||||
Summary: Qt5 - QtWebEngine components
|
Summary: Qt5 - QtWebEngine components
|
||||||
Name: qt5-qtwebengine
|
Name: qt5-qtwebengine
|
||||||
Version: 5.15.16
|
Version: 5.15.16
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
|
|
||||||
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
||||||
# See also http://qt-project.org/doc/qt-5.0/qtdoc/licensing.html
|
# See also http://qt-project.org/doc/qt-5.0/qtdoc/licensing.html
|
||||||
@ -109,6 +109,13 @@ Patch35: qt5-qtwebengine-c99.patch
|
|||||||
Patch50: 0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch
|
Patch50: 0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch
|
||||||
Patch51: qtwebengine-icu-74.patch
|
Patch51: qtwebengine-icu-74.patch
|
||||||
|
|
||||||
|
# Working with ffmpeg
|
||||||
|
Patch60: qtwebengine-ffmpeg5.patch
|
||||||
|
|
||||||
|
# riscv64 support patch from https://github.com/felixonmars/archriscv-packages/tree/master/qt5-webengine
|
||||||
|
Patch100: v8.patch
|
||||||
|
Patch101: riscv.patch
|
||||||
|
|
||||||
## Upstream patches:
|
## Upstream patches:
|
||||||
|
|
||||||
# handled by qt5-srpm-macros, which defines %%qt5_qtwebengine_arches
|
# handled by qt5-srpm-macros, which defines %%qt5_qtwebengine_arches
|
||||||
@ -214,6 +221,11 @@ BuildRequires: libtirpc
|
|||||||
BuildRequires: libnsl2
|
BuildRequires: libnsl2
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
|
|
||||||
|
# For ffmpeg libraries
|
||||||
|
BuildRequires: pkgconfig(libavcodec)
|
||||||
|
BuildRequires: pkgconfig(libavformat)
|
||||||
|
BuildRequires: pkgconfig(libavutil)
|
||||||
|
|
||||||
# extra (non-upstream) functions needed, see
|
# extra (non-upstream) functions needed, see
|
||||||
# src/3rdparty/chromium/third_party/sqlite/README.chromium for details
|
# src/3rdparty/chromium/third_party/sqlite/README.chromium for details
|
||||||
#BuildRequires: pkgconfig(sqlite3)
|
#BuildRequires: pkgconfig(sqlite3)
|
||||||
@ -410,6 +422,13 @@ popd
|
|||||||
%patch50 -p1 -b .0001-avcodec-x86-mathops-clip-constants-used-with-shift-i
|
%patch50 -p1 -b .0001-avcodec-x86-mathops-clip-constants-used-with-shift-i
|
||||||
%patch51 -p1 -b .icu-74
|
%patch51 -p1 -b .icu-74
|
||||||
|
|
||||||
|
%patch60 -p1
|
||||||
|
|
||||||
|
%ifarch riscv64
|
||||||
|
%patch100 -p1 -b .riscv64-v8
|
||||||
|
%patch101 -p1 -b .riscv64
|
||||||
|
%endif
|
||||||
|
|
||||||
# delete all "toolprefix = " lines from build/toolchain/linux/BUILD.gn, as we
|
# delete all "toolprefix = " lines from build/toolchain/linux/BUILD.gn, as we
|
||||||
# never cross-compile in native Fedora RPMs, fixes ARM and aarch64 FTBFS
|
# never cross-compile in native Fedora RPMs, fixes ARM and aarch64 FTBFS
|
||||||
sed -i -e '/toolprefix = /d' -e 's/\${toolprefix}//g' \
|
sed -i -e '/toolprefix = /d' -e 's/\${toolprefix}//g' \
|
||||||
@ -446,9 +465,14 @@ export NINJA_PATH=%{__ninja}
|
|||||||
|
|
||||||
%{qmake_qt5} \
|
%{qmake_qt5} \
|
||||||
%{?debug_config:CONFIG+="%{debug_config}}" \
|
%{?debug_config:CONFIG+="%{debug_config}}" \
|
||||||
|
%ifarch riscv64
|
||||||
|
CONFIG+="link_pulseaudio" \
|
||||||
|
%else
|
||||||
CONFIG+="link_pulseaudio use_gold_linker" \
|
CONFIG+="link_pulseaudio use_gold_linker" \
|
||||||
%{?use_system_libicu:QMAKE_EXTRA_ARGS+="-system-webengine-icu"} \
|
%endif
|
||||||
|
QMAKE_EXTRA_ARGS+="-system-webengine-ffmpeg -system-webengine-webp -system-webengine-opus" \
|
||||||
QMAKE_EXTRA_ARGS+="-webengine-kerberos" \
|
QMAKE_EXTRA_ARGS+="-webengine-kerberos" \
|
||||||
|
%{?use_system_libicu:QMAKE_EXTRA_ARGS+="-system-webengine-icu"} \
|
||||||
%{?pipewire:QMAKE_EXTRA_ARGS+="-webengine-webrtc-pipewire"} \
|
%{?pipewire:QMAKE_EXTRA_ARGS+="-webengine-webrtc-pipewire"} \
|
||||||
.
|
.
|
||||||
|
|
||||||
@ -594,6 +618,9 @@ done
|
|||||||
%{_qt5_examplesdir}/
|
%{_qt5_examplesdir}/
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 20 2024 Liu Yang <Yang.Liu.sn@gmail.com> - 5.15.16-5
|
||||||
|
- Add riscv64 support patch from Arch Linux
|
||||||
|
|
||||||
* Thu Mar 14 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.16-4
|
* Thu Mar 14 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.16-4
|
||||||
- Rebuild (qt5)
|
- Rebuild (qt5)
|
||||||
|
|
||||||
|
154
qtwebengine-ffmpeg5.patch
Normal file
154
qtwebengine-ffmpeg5.patch
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
Allow building qtwebengine using ffmpeg 5
|
||||||
|
Origin: ArchLinux, https://github.com/archlinux/svntogit-packages/tree/packages/qt5-webengine/trunk
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h
|
||||||
|
index 2734a48..70b1877 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h
|
||||||
|
+++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h
|
||||||
|
@@ -29,6 +29,7 @@ extern "C" {
|
||||||
|
#include <libavformat/avformat.h>
|
||||||
|
#include <libavformat/avio.h>
|
||||||
|
#include <libavutil/avutil.h>
|
||||||
|
+#include <libavutil/channel_layout.h>
|
||||||
|
#include <libavutil/imgutils.h>
|
||||||
|
#include <libavutil/log.h>
|
||||||
|
#include <libavutil/mastering_display_metadata.h>
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/audio_file_reader.cc b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
index cb81d92..bd73908 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/audio_file_reader.cc
|
||||||
|
@@ -85,7 +85,7 @@ bool AudioFileReader::OpenDemuxer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioFileReader::OpenDecoder() {
|
||||||
|
- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
+ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
if (codec) {
|
||||||
|
// MP3 decodes to S16P which we don't support, tell it to use S16 instead.
|
||||||
|
if (codec_context_->sample_fmt == AV_SAMPLE_FMT_S16P)
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
index 0d825ed..72fac61 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc
|
||||||
|
@@ -329,7 +329,7 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
+ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
if (!codec ||
|
||||||
|
avcodec_open2(codec_context_.get(), codec, &codec_options) < 0) {
|
||||||
|
DLOG(ERROR) << "Could not initialize audio decoder: "
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc
|
||||||
|
index d34db63..427565b 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc
|
||||||
|
@@ -98,12 +98,12 @@ static base::TimeDelta ExtractStartTime(AVStream* stream) {
|
||||||
|
|
||||||
|
// Next try to use the first DTS value, for codecs where we know PTS == DTS
|
||||||
|
// (excludes all H26x codecs). The start time must be returned in PTS.
|
||||||
|
- if (stream->first_dts != kNoFFmpegTimestamp &&
|
||||||
|
+ if (av_stream_get_first_dts(stream) != kNoFFmpegTimestamp &&
|
||||||
|
stream->codecpar->codec_id != AV_CODEC_ID_HEVC &&
|
||||||
|
stream->codecpar->codec_id != AV_CODEC_ID_H264 &&
|
||||||
|
stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) {
|
||||||
|
const base::TimeDelta first_pts =
|
||||||
|
- ConvertFromTimeBase(stream->time_base, stream->first_dts);
|
||||||
|
+ ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream));
|
||||||
|
if (first_pts < start_time)
|
||||||
|
start_time = first_pts;
|
||||||
|
}
|
||||||
|
@@ -408,11 +408,11 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
||||||
|
scoped_refptr<DecoderBuffer> buffer;
|
||||||
|
|
||||||
|
if (type() == DemuxerStream::TEXT) {
|
||||||
|
- int id_size = 0;
|
||||||
|
+ size_t id_size = 0;
|
||||||
|
uint8_t* id_data = av_packet_get_side_data(
|
||||||
|
packet.get(), AV_PKT_DATA_WEBVTT_IDENTIFIER, &id_size);
|
||||||
|
|
||||||
|
- int settings_size = 0;
|
||||||
|
+ size_t settings_size = 0;
|
||||||
|
uint8_t* settings_data = av_packet_get_side_data(
|
||||||
|
packet.get(), AV_PKT_DATA_WEBVTT_SETTINGS, &settings_size);
|
||||||
|
|
||||||
|
@@ -424,7 +424,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
||||||
|
buffer = DecoderBuffer::CopyFrom(packet->data, packet->size,
|
||||||
|
side_data.data(), side_data.size());
|
||||||
|
} else {
|
||||||
|
- int side_data_size = 0;
|
||||||
|
+ size_t side_data_size = 0;
|
||||||
|
uint8_t* side_data = av_packet_get_side_data(
|
||||||
|
packet.get(), AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, &side_data_size);
|
||||||
|
|
||||||
|
@@ -485,7 +485,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
||||||
|
packet->size - data_offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
- int skip_samples_size = 0;
|
||||||
|
+ size_t skip_samples_size = 0;
|
||||||
|
const uint32_t* skip_samples_ptr =
|
||||||
|
reinterpret_cast<const uint32_t*>(av_packet_get_side_data(
|
||||||
|
packet.get(), AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size));
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc b/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc
|
||||||
|
index 0ef3521..8483ecc 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc
|
||||||
|
@@ -59,7 +59,6 @@ static int64_t AVIOSeekOperation(void* opaque, int64_t offset, int whence) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void FFmpegGlue::InitializeFFmpeg() {
|
||||||
|
- av_register_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void LogContainer(bool is_local_file,
|
||||||
|
@@ -95,9 +94,6 @@ FFmpegGlue::FFmpegGlue(FFmpegURLProtocol* protocol) {
|
||||||
|
// Enable fast, but inaccurate seeks for MP3.
|
||||||
|
format_context_->flags |= AVFMT_FLAG_FAST_SEEK;
|
||||||
|
|
||||||
|
- // Ensures we can read out various metadata bits like vp8 alpha.
|
||||||
|
- format_context_->flags |= AVFMT_FLAG_KEEP_SIDE_DATA;
|
||||||
|
-
|
||||||
|
// Ensures format parsing errors will bail out. From an audit on 11/2017, all
|
||||||
|
// instances were real failures. Solves bugs like http://crbug.com/710791.
|
||||||
|
format_context_->error_recognition |= AV_EF_EXPLODE;
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
index ef12477..7996606 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc
|
||||||
|
@@ -391,7 +391,7 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config,
|
||||||
|
if (decode_nalus_)
|
||||||
|
codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS;
|
||||||
|
|
||||||
|
- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
+ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
||||||
|
if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) {
|
||||||
|
ReleaseFFmpegResources();
|
||||||
|
return false;
|
||||||
|
diff --git a/src/3rdparty/chromium/media/filters/media_file_checker.cc b/src/3rdparty/chromium/media/filters/media_file_checker.cc
|
||||||
|
index 59c2a2f..1a9872c 100644
|
||||||
|
--- a/src/3rdparty/chromium/media/filters/media_file_checker.cc
|
||||||
|
+++ b/src/3rdparty/chromium/media/filters/media_file_checker.cc
|
||||||
|
@@ -68,7 +68,7 @@ bool MediaFileChecker::Start(base::TimeDelta check_time) {
|
||||||
|
auto context = AVStreamToAVCodecContext(format_context->streams[i]);
|
||||||
|
if (!context)
|
||||||
|
continue;
|
||||||
|
- AVCodec* codec = avcodec_find_decoder(cp->codec_id);
|
||||||
|
+ const AVCodec* codec = avcodec_find_decoder(cp->codec_id);
|
||||||
|
if (codec && avcodec_open2(context.get(), codec, nullptr) >= 0) {
|
||||||
|
auto loop = std::make_unique<FFmpegDecodingLoop>(context.get());
|
||||||
|
stream_contexts[i] = {std::move(context), std::move(loop)};
|
||||||
|
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 9002b87..d12fade 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
|
||||||
|
@@ -203,7 +203,7 @@ int32_t H264DecoderImpl::InitDecode(const VideoCodec* codec_settings,
|
||||||
|
// a pointer |this|.
|
||||||
|
av_context_->opaque = this;
|
||||||
|
|
||||||
|
- AVCodec* codec = avcodec_find_decoder(av_context_->codec_id);
|
||||||
|
+ const AVCodec* codec = avcodec_find_decoder(av_context_->codec_id);
|
||||||
|
if (!codec) {
|
||||||
|
// This is an indication that FFmpeg has not been initialized or it has not
|
||||||
|
// been compiled/initialized with the correct set of codecs.
|
||||||
|
|
2999
riscv.patch
Normal file
2999
riscv.patch
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user