author | Antonio Rojas
<arojas@archlinux.org> 2018-04-24 15:30:22 UTC |
committer | Antonio Rojas
<arojas@archlinux.org> 2018-04-24 15:30:22 UTC |
parent | d0f4392aef54b94eb342f91426ab35b7bbc5bce7 |
PKGBUILD | +9 | -3 |
qtwebengine-ffmpeg4.patch | +89 | -0 |
diff --git a/PKGBUILD b/PKGBUILD index 83b163b..9cfbc77 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,7 +4,7 @@ pkgname=qt5-webengine _qtver=5.10.1 pkgver=${_qtver/-/} -pkgrel=1 +pkgrel=2 arch=('x86_64') url='http://qt-project.org/' license=('LGPL3' 'LGPL2.1' 'BSD') @@ -16,10 +16,12 @@ groups=('qt' 'qt5') _pkgfqn="${pkgname/5-/}-everywhere-src-${_qtver}" source=("http://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" qtwebengine-harmony.patch - qtwebengine-no-gpu.patch) + qtwebengine-no-gpu.patch + qtwebengine-ffmpeg4.patch) sha256sums=('12644f8d2ba8354a2a533d5a7f3f5139c6ff168c2f51aa3e21b701db6dbc01de' 'feca54ab09ac0fc9d0626770a6b899a6ac5a12173c7d0c1005bc3964ec83e7b3' - '6cd70c37f3b3aea926f1ee20c1f59354f2a02d240dbf344c6dc0a75f8aa8e07b') + '6cd70c37f3b3aea926f1ee20c1f59354f2a02d240dbf344c6dc0a75f8aa8e07b' + 'bbba71e97bae57245d2aba37684301924746e88e92091d6a248097c91dcda4a1') prepare() { mkdir -p build @@ -34,6 +36,10 @@ prepare() { patch -Np1 -i ../qtwebengine-harmony.patch # Disable GPU rendering on nouveau and wayland (openSUSE) https://bugreports.qt.io/browse/QTBUG-65682 patch -p1 -i ../qtwebengine-no-gpu.patch + + cd src/3rdparty +# Fix build with ffmpeg 4 + patch -p1 -i "$srcdir"/qtwebengine-ffmpeg4.patch } build() { diff --git a/qtwebengine-ffmpeg4.patch b/qtwebengine-ffmpeg4.patch new file mode 100644 index 0000000..c91cd54 --- /dev/null +++ b/qtwebengine-ffmpeg4.patch @@ -0,0 +1,89 @@ +diff --git a/chromium/media/base/decoder_buffer.h b/chromium/media/base/decoder_buffer.h +index 0341e5784f..60ffba708b 100644 +--- a/chromium/media/base/decoder_buffer.h ++++ b/chromium/media/base/decoder_buffer.h +@@ -37,7 +37,7 @@ class MEDIA_EXPORT DecoderBuffer + : public base::RefCountedThreadSafe<DecoderBuffer> { + public: + enum { +- kPaddingSize = 32, ++ kPaddingSize = 64, + #if defined(ARCH_CPU_ARM_FAMILY) + kAlignmentSize = 16 + #else +diff --git a/chromium/media/ffmpeg/ffmpeg_common.cc b/chromium/media/ffmpeg/ffmpeg_common.cc +index 61d0bc341c..d79c694555 100644 +--- a/chromium/media/ffmpeg/ffmpeg_common.cc ++++ b/chromium/media/ffmpeg/ffmpeg_common.cc +@@ -30,10 +30,10 @@ EncryptionScheme GetEncryptionScheme(const AVStream* stream) { + + } // namespace + +-// Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are ++// Why AV_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are + // padded. Check here to ensure FFmpeg only receives data padded to its + // specifications. +-static_assert(DecoderBuffer::kPaddingSize >= FF_INPUT_BUFFER_PADDING_SIZE, ++static_assert(DecoderBuffer::kPaddingSize >= AV_INPUT_BUFFER_PADDING_SIZE, + "DecoderBuffer padding size does not fit ffmpeg requirement"); + + // Alignment requirement by FFmpeg for input and output buffers. This need to +@@ -444,11 +444,11 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, + } else { + codec_context->extradata_size = config.extra_data().size(); + codec_context->extradata = reinterpret_cast<uint8_t*>( +- av_malloc(config.extra_data().size() + FF_INPUT_BUFFER_PADDING_SIZE)); ++ av_malloc(config.extra_data().size() + AV_INPUT_BUFFER_PADDING_SIZE)); + memcpy(codec_context->extradata, &config.extra_data()[0], + config.extra_data().size()); + memset(codec_context->extradata + config.extra_data().size(), '\0', +- FF_INPUT_BUFFER_PADDING_SIZE); ++ AV_INPUT_BUFFER_PADDING_SIZE); + } + } + +@@ -585,11 +585,11 @@ void VideoDecoderConfigToAVCodecContext( + } else { + codec_context->extradata_size = config.extra_data().size(); + codec_context->extradata = reinterpret_cast<uint8_t*>( +- av_malloc(config.extra_data().size() + FF_INPUT_BUFFER_PADDING_SIZE)); ++ av_malloc(config.extra_data().size() + AV_INPUT_BUFFER_PADDING_SIZE)); + memcpy(codec_context->extradata, &config.extra_data()[0], + config.extra_data().size()); + memset(codec_context->extradata + config.extra_data().size(), '\0', +- FF_INPUT_BUFFER_PADDING_SIZE); ++ AV_INPUT_BUFFER_PADDING_SIZE); + } + } + +diff --git a/chromium/media/filters/ffmpeg_audio_decoder.cc b/chromium/media/filters/ffmpeg_audio_decoder.cc +index b4020b001d..41da2d3939 100644 +--- a/chromium/media/filters/ffmpeg_audio_decoder.cc ++++ b/chromium/media/filters/ffmpeg_audio_decoder.cc +@@ -368,7 +368,7 @@ void FFmpegAudioDecoder::ResetTimestampState(const AudioDecoderConfig& config) { + int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s, + AVFrame* frame, + int flags) { +- DCHECK(s->codec->capabilities & CODEC_CAP_DR1); ++ DCHECK(s->codec->capabilities & AV_CODEC_CAP_DR1); + DCHECK_EQ(s->codec_type, AVMEDIA_TYPE_AUDIO); + + // Since this routine is called by FFmpeg when a buffer is required for audio +diff --git a/chromium/media/filters/ffmpeg_video_decoder.cc b/chromium/media/filters/ffmpeg_video_decoder.cc +index 42d044dd69..32f5c7b79d 100644 +--- a/chromium/media/filters/ffmpeg_video_decoder.cc ++++ b/chromium/media/filters/ffmpeg_video_decoder.cc +@@ -427,12 +427,11 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config, + codec_context_->thread_type = + FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME); + codec_context_->opaque = this; +- codec_context_->flags |= CODEC_FLAG_EMU_EDGE; + codec_context_->get_buffer2 = GetVideoBufferImpl; + codec_context_->refcounted_frames = 1; + + if (decode_nalus_) +- codec_context_->flags2 |= CODEC_FLAG2_CHUNKS; ++ codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS; + + AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) {