From b311ef1fb8696a5c5d6e9b34c32fdb0a6315a108 Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Tue, 3 May 2022 09:54:03 +0200 Subject: Added fix for mozbz#1759137 --- D145094.diff | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ firefox.spec | 7 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 D145094.diff diff --git a/D145094.diff b/D145094.diff new file mode 100644 index 0000000..711acc9 --- /dev/null +++ b/D145094.diff @@ -0,0 +1,61 @@ +diff -up firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D145094 firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp +--- firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D145094 2022-04-29 01:01:46.000000000 +0200 ++++ firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp 2022-05-03 09:51:48.570471687 +0200 +@@ -23,7 +23,7 @@ RefPtr VideoFrameSurface< + VideoFrameSurface::VideoFrameSurface(DMABufSurface* aSurface) + : mSurface(aSurface), + mLib(nullptr), +- mAVHWDeviceContext(nullptr), ++ mAVHWFrameContext(nullptr), + mHWAVBuffer(nullptr) { + // Create global refcount object to track mSurface usage over + // gects rendering engine. We can't release it until it's used +@@ -38,16 +38,22 @@ VideoFrameSurface::VideoFrame + void VideoFrameSurface::LockVAAPIData( + AVCodecContext* aAVCodecContext, AVFrame* aAVFrame, + FFmpegLibWrapper* aLib) { +- FFMPEG_LOG("VideoFrameSurface: VAAPI locking dmabuf surface UID = %d", +- mSurface->GetUID()); ++ MOZ_DIAGNOSTIC_ASSERT(aAVCodecContext->hw_frames_ctx); + mLib = aLib; +- mAVHWDeviceContext = aLib->av_buffer_ref(aAVCodecContext->hw_device_ctx); ++ mAVHWFrameContext = aLib->av_buffer_ref(aAVCodecContext->hw_frames_ctx); + mHWAVBuffer = aLib->av_buffer_ref(aAVFrame->buf[0]); ++ FFMPEG_LOG( ++ "VideoFrameSurface: VAAPI locking dmabuf surface UID = %d " ++ "mAVHWFrameContext %p mHWAVBuffer %p", ++ mSurface->GetUID(), mAVHWFrameContext, mHWAVBuffer); + } + + void VideoFrameSurface::ReleaseVAAPIData(bool aForFrameRecycle) { +- FFMPEG_LOG("VideoFrameSurface: VAAPI releasing dmabuf surface UID = %d", +- mSurface->GetUID()); ++ FFMPEG_LOG( ++ "VideoFrameSurface: VAAPI releasing dmabuf surface UID = %d " ++ "aForFrameRecycle %d mLib %p mAVHWFrameContext %p mHWAVBuffer %p", ++ mSurface->GetUID(), aForFrameRecycle, mLib, mAVHWFrameContext, ++ mHWAVBuffer); + + // It's possible to unref GPU data while IsUsed() is still set. + // It can happens when VideoFramePool is deleted while decoder shutdown +@@ -57,7 +63,7 @@ void VideoFrameSurface::Relea + // is closed. + if (mLib) { + mLib->av_buffer_unref(&mHWAVBuffer); +- mLib->av_buffer_unref(&mAVHWDeviceContext); ++ mLib->av_buffer_unref(&mAVHWFrameContext); + } + + // If we want to recycle the frame, make sure it's not used +diff -up firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D145094 firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h +--- firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D145094 2022-04-29 00:02:40.000000000 +0200 ++++ firefox-100.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h 2022-05-03 09:33:27.110885715 +0200 +@@ -102,7 +102,7 @@ class VideoFrameSurface { + + const RefPtr mSurface; + const FFmpegLibWrapper* mLib; +- AVBufferRef* mAVHWDeviceContext; ++ AVBufferRef* mAVHWFrameContext; + AVBufferRef* mHWAVBuffer; + }; + diff --git a/firefox.spec b/firefox.spec index d87dfd1..1611ba3 100644 --- a/firefox.spec +++ b/firefox.spec @@ -163,7 +163,7 @@ ExcludeArch: aarch64 Summary: Mozilla Firefox Web browser Name: firefox Version: 100.0 -Release: 1%{?pre_tag}%{?dist} +Release: 2%{?pre_tag}%{?dist} URL: https://www.mozilla.org/firefox/ License: MPLv1.1 or GPLv2+ or LGPLv2+ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz @@ -242,6 +242,7 @@ Patch402: mozilla-1196777.patch Patch407: mozilla-1667096.patch Patch408: mozilla-1663844.patch Patch415: mozilla-1670333.patch +Patch416: D145094.diff # PGO/LTO patches Patch600: pgo.patch @@ -482,6 +483,7 @@ This package contains results of tests executed during build. %patch407 -p1 -b .1667096 %patch408 -p1 -b .1663844 %patch415 -p1 -b .1670333 +%patch416 -p1 -b .D145094 # PGO patches %if %{build_with_pgo} @@ -1048,6 +1050,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Tue May 3 2022 Martin Stransky - 100.0-2 +- Added fix for mozbz#1759137 + * Mon May 2 2022 Martin Stransky - 100.0-1 - Updated to 100.0 -- cgit