Submitted By: Douglas R. Reno Date: 2022-07-11 Initial Package Version: 5.15.10 Upstream Status: Not Applied Origin: Arch Linux PKGBUILD Description: Fixes building QtWebEngine with a system-installed ffmpeg5 by porting to ffmpeg-5's API changes. diff -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h qtwebengine-5.15.10/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.h 2022-07-11 22:12:47.917192788 -0500 @@ -29,6 +29,7 @@ extern "C" { #include #include #include +#include #include #include #include diff -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/audio_file_reader.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/audio_file_reader.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/audio_file_reader.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/audio_file_reader.cc 2022-07-11 22:12:47.917192788 -0500 @@ -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 -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc 2022-07-11 22:12:47.917192788 -0500 @@ -329,7 +329,7 @@ bool FFmpegAudioDecoder::ConfigureDecode } } - 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 -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc 2022-07-11 22:12:47.917192788 -0500 @@ -98,12 +98,12 @@ static base::TimeDelta ExtractStartTime( // 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( scoped_refptr 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( 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( packet->size - data_offset); } - int skip_samples_size = 0; + size_t skip_samples_size = 0; const uint32_t* skip_samples_ptr = reinterpret_cast(av_packet_get_side_data( packet.get(), AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size)); diff -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_glue.cc 2022-07-11 22:12:47.918192779 -0500 @@ -59,7 +59,6 @@ static int64_t AVIOSeekOperation(void* o } void FFmpegGlue::InitializeFFmpeg() { - av_register_all(); } static void LogContainer(bool is_local_file, @@ -95,9 +94,6 @@ FFmpegGlue::FFmpegGlue(FFmpegURLProtocol // 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 -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc 2022-07-11 22:12:47.918192779 -0500 @@ -391,7 +391,7 @@ bool FFmpegVideoDecoder::ConfigureDecode 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 -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/media_file_checker.cc qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/media_file_checker.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/media/filters/media_file_checker.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/media/filters/media_file_checker.cc 2022-07-11 22:12:47.918192779 -0500 @@ -68,7 +68,7 @@ bool MediaFileChecker::Start(base::TimeD 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(context.get()); stream_contexts[i] = {std::move(context), std::move(loop)}; diff -Naurp qtwebengine-5.15.10.orig/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc qtwebengine-5.15.10/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc --- qtwebengine-5.15.10.orig/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc 2022-05-23 06:38:40.000000000 -0500 +++ qtwebengine-5.15.10/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc 2022-07-11 22:12:47.918192779 -0500 @@ -203,7 +203,7 @@ int32_t H264DecoderImpl::InitDecode(cons // 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.