Updated to 100.0
This commit is contained in:
parent
40fd3206bd
commit
e4c24fcfb3
2
.gitignore
vendored
2
.gitignore
vendored
@ -505,3 +505,5 @@ firefox-3.6.4.source.tar.bz2
|
|||||||
/firefox-langpacks-99.0-20220331.tar.xz
|
/firefox-langpacks-99.0-20220331.tar.xz
|
||||||
/firefox-langpacks-99.0.1-20220413.tar.xz
|
/firefox-langpacks-99.0.1-20220413.tar.xz
|
||||||
/firefox-99.0.1.source.tar.xz
|
/firefox-99.0.1.source.tar.xz
|
||||||
|
/firefox-100.0.source.tar.xz
|
||||||
|
/firefox-langpacks-100.0-20220502.tar.xz
|
||||||
|
207
D141827.diff
207
D141827.diff
@ -1,207 +0,0 @@
|
|||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D141827 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D141827 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp 2022-04-07 10:10:11.608526890 +0200
|
|
||||||
@@ -6,7 +6,7 @@
|
|
||||||
|
|
||||||
#include "FFmpegVideoFramePool.h"
|
|
||||||
#include "FFmpegLog.h"
|
|
||||||
-#include "mozilla/widget/DMABufLibWrapper.h"
|
|
||||||
+#include "mozilla/widget/DMABufLibWrapper.h"
|
|
||||||
#include "libavutil/pixfmt.h"
|
|
||||||
|
|
||||||
#undef FFMPEG_LOG
|
|
||||||
@@ -15,11 +15,11 @@
|
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
-RefPtr<layers::Image> VideoFrameSurfaceVAAPI::GetAsImage() {
|
|
||||||
+RefPtr<layers::Image> VideoFrameSurface::GetAsImage() {
|
|
||||||
return new layers::DMABUFSurfaceImage(mSurface);
|
|
||||||
}
|
|
||||||
|
|
||||||
-VideoFrameSurfaceVAAPI::VideoFrameSurfaceVAAPI(DMABufSurface* aSurface)
|
|
||||||
+VideoFrameSurface::VideoFrameSurface(DMABufSurface* aSurface)
|
|
||||||
: mSurface(aSurface),
|
|
||||||
mLib(nullptr),
|
|
||||||
mAVHWFramesContext(nullptr),
|
|
||||||
@@ -30,22 +30,22 @@ VideoFrameSurfaceVAAPI::VideoFrameSurfac
|
|
||||||
MOZ_ASSERT(mSurface);
|
|
||||||
MOZ_RELEASE_ASSERT(mSurface->GetAsDMABufSurfaceYUV());
|
|
||||||
mSurface->GlobalRefCountCreate();
|
|
||||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: creating surface UID = %d",
|
|
||||||
+ FFMPEG_LOG("VideoFrameSurface: creating surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
-void VideoFrameSurfaceVAAPI::LockVAAPIData(AVCodecContext* aAVCodecContext,
|
|
||||||
+void VideoFrameSurface::LockVAAPIData(AVCodecContext* aAVCodecContext,
|
|
||||||
AVFrame* aAVFrame,
|
|
||||||
FFmpegLibWrapper* aLib) {
|
|
||||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: VAAPI locking dmabuf surface UID = %d",
|
|
||||||
+ FFMPEG_LOG("VideoFrameSurface: VAAPI locking dmabuf surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
mLib = aLib;
|
|
||||||
mAVHWFramesContext = aLib->av_buffer_ref(aAVCodecContext->hw_frames_ctx);
|
|
||||||
mHWAVBuffer = aLib->av_buffer_ref(aAVFrame->buf[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void VideoFrameSurfaceVAAPI::ReleaseVAAPIData(bool aForFrameRecycle) {
|
|
||||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: VAAPI releasing dmabuf surface UID = %d",
|
|
||||||
+void VideoFrameSurface::ReleaseVAAPIData(bool aForFrameRecycle) {
|
|
||||||
+ FFMPEG_LOG("VideoFrameSurface: VAAPI releasing dmabuf surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
|
|
||||||
// It's possible to unref GPU data while IsUsed() is still set.
|
|
||||||
@@ -67,8 +67,8 @@ void VideoFrameSurfaceVAAPI::ReleaseVAAP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-VideoFrameSurfaceVAAPI::~VideoFrameSurfaceVAAPI() {
|
|
||||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: deleting dmabuf surface UID = %d",
|
|
||||||
+VideoFrameSurface::~VideoFrameSurface() {
|
|
||||||
+ FFMPEG_LOG("VideoFrameSurface: deleting dmabuf surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
// We're about to quit, no need to recycle the frames.
|
|
||||||
ReleaseVAAPIData(/* aForFrameRecycle */ false);
|
|
||||||
@@ -84,9 +84,8 @@ VideoFramePool::~VideoFramePool() {
|
|
||||||
void VideoFramePool::ReleaseUnusedVAAPIFrames() {
|
|
||||||
MutexAutoLock lock(mSurfaceLock);
|
|
||||||
for (const auto& surface : mDMABufSurfaces) {
|
|
||||||
- auto* vaapiSurface = surface->AsVideoFrameSurfaceVAAPI();
|
|
||||||
- if (!vaapiSurface->IsUsed()) {
|
|
||||||
- vaapiSurface->ReleaseVAAPIData();
|
|
||||||
+ if (!surface->IsUsed()) {
|
|
||||||
+ surface->ReleaseVAAPIData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -96,8 +95,7 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
if (surface->IsUsed()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
- auto* vaapiSurface = surface->AsVideoFrameSurfaceVAAPI();
|
|
||||||
- vaapiSurface->ReleaseVAAPIData();
|
|
||||||
+ surface->ReleaseVAAPIData();
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
@@ -121,7 +119,7 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
FFMPEG_LOG("Created new VA-API DMABufSurface UID = %d", surface->GetUID());
|
|
||||||
- RefPtr<VideoFrameSurfaceVAAPI> surf = new VideoFrameSurfaceVAAPI(surface);
|
|
||||||
+ RefPtr<VideoFrameSurface> surf = new VideoFrameSurface(surface);
|
|
||||||
if (!mTextureCreationWorks) {
|
|
||||||
mTextureCreationWorks = Some(surface->VerifyTextureCreation());
|
|
||||||
}
|
|
||||||
@@ -138,11 +136,8 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
}
|
|
||||||
FFMPEG_LOG("Reusing VA-API DMABufSurface UID = %d", surface->GetUID());
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- auto* vaapiSurface = videoSurface->AsVideoFrameSurfaceVAAPI();
|
|
||||||
- vaapiSurface->LockVAAPIData(aAVCodecContext, aAVFrame, aLib);
|
|
||||||
- vaapiSurface->MarkAsUsed();
|
|
||||||
-
|
|
||||||
+ videoSurface->LockVAAPIData(aAVCodecContext, aAVFrame, aLib);
|
|
||||||
+ videoSurface->MarkAsUsed();
|
|
||||||
return videoSurface;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D141827 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D141827 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h 2022-04-07 10:09:46.527708638 +0200
|
|
||||||
@@ -17,42 +17,17 @@
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
class VideoFramePool;
|
|
||||||
-class VideoFrameSurfaceVAAPI;
|
|
||||||
|
|
||||||
-class VideoFrameSurface {
|
|
||||||
- public:
|
|
||||||
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoFrameSurface)
|
|
||||||
-
|
|
||||||
- VideoFrameSurface() = default;
|
|
||||||
-
|
|
||||||
- virtual VideoFrameSurfaceVAAPI* AsVideoFrameSurfaceVAAPI() { return nullptr; }
|
|
||||||
-
|
|
||||||
- virtual void SetYUVColorSpace(gfx::YUVColorSpace aColorSpace) = 0;
|
|
||||||
- virtual void SetColorRange(gfx::ColorRange aColorRange) = 0;
|
|
||||||
-
|
|
||||||
- virtual RefPtr<DMABufSurfaceYUV> GetDMABufSurface() { return nullptr; };
|
|
||||||
- virtual RefPtr<layers::Image> GetAsImage() = 0;
|
|
||||||
-
|
|
||||||
- // Don't allow VideoFrameSurface plain copy as it leads to
|
|
||||||
- // unexpected DMABufSurface/HW buffer releases and we don't want to
|
|
||||||
- // deep copy them.
|
|
||||||
- VideoFrameSurface(const VideoFrameSurface&) = delete;
|
|
||||||
- const VideoFrameSurface& operator=(VideoFrameSurface const&) = delete;
|
|
||||||
-
|
|
||||||
- protected:
|
|
||||||
- virtual ~VideoFrameSurface(){};
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-// VideoFrameSurfaceVAAPI holds a reference to GPU data with a video frame.
|
|
||||||
+// VideoFrameSurface holds a reference to GPU data with a video frame.
|
|
||||||
//
|
|
||||||
// Actual GPU pixel data are stored at DMABufSurface and
|
|
||||||
// DMABufSurface is passed to gecko GL rendering pipeline via.
|
|
||||||
// DMABUFSurfaceImage.
|
|
||||||
//
|
|
||||||
-// VideoFrameSurfaceVAAPI can optionally hold VA-API ffmpeg related data to keep
|
|
||||||
+// VideoFrameSurface can optionally hold VA-API ffmpeg related data to keep
|
|
||||||
// GPU data locked untill we need them.
|
|
||||||
//
|
|
||||||
-// VideoFrameSurfaceVAAPI is used for both HW accelerated video decoding
|
|
||||||
+// VideoFrameSurface is used for both HW accelerated video decoding
|
|
||||||
// (VA-API) and ffmpeg SW decoding.
|
|
||||||
//
|
|
||||||
// VA-API scenario
|
|
||||||
@@ -72,13 +47,13 @@ class VideoFrameSurface {
|
|
||||||
// Unfortunately there isn't any obvious way how to mark particular VASurface
|
|
||||||
// as used. The best we can do is to hold a reference to particular AVBuffer
|
|
||||||
// from decoded AVFrame and AVHWFramesContext which owns the AVBuffer.
|
|
||||||
-class VideoFrameSurfaceVAAPI final : public VideoFrameSurface {
|
|
||||||
+class VideoFrameSurface {
|
|
||||||
friend class VideoFramePool;
|
|
||||||
|
|
||||||
public:
|
|
||||||
- explicit VideoFrameSurfaceVAAPI(DMABufSurface* aSurface);
|
|
||||||
+ NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoFrameSurface)
|
|
||||||
|
|
||||||
- VideoFrameSurfaceVAAPI* AsVideoFrameSurfaceVAAPI() final { return this; }
|
|
||||||
+ explicit VideoFrameSurface(DMABufSurface* aSurface);
|
|
||||||
|
|
||||||
void SetYUVColorSpace(mozilla::gfx::YUVColorSpace aColorSpace) {
|
|
||||||
mSurface->GetAsDMABufSurfaceYUV()->SetYUVColorSpace(aColorSpace);
|
|
||||||
@@ -93,6 +68,12 @@ class VideoFrameSurfaceVAAPI final : pub
|
|
||||||
|
|
||||||
RefPtr<layers::Image> GetAsImage();
|
|
||||||
|
|
||||||
+ // Don't allow VideoFrameSurface plain copy as it leads to
|
|
||||||
+ // unexpected DMABufSurface/HW buffer releases and we don't want to
|
|
||||||
+ // deep copy them.
|
|
||||||
+ VideoFrameSurface(const VideoFrameSurface&) = delete;
|
|
||||||
+ const VideoFrameSurface& operator=(VideoFrameSurface const&) = delete;
|
|
||||||
+
|
|
||||||
protected:
|
|
||||||
// Lock VAAPI related data
|
|
||||||
void LockVAAPIData(AVCodecContext* aAVCodecContext, AVFrame* aAVFrame,
|
|
||||||
@@ -107,7 +88,7 @@ class VideoFrameSurfaceVAAPI final : pub
|
|
||||||
void MarkAsUsed() { mSurface->GlobalRefAdd(); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
- virtual ~VideoFrameSurfaceVAAPI();
|
|
||||||
+ virtual ~VideoFrameSurface();
|
|
||||||
|
|
||||||
const RefPtr<DMABufSurface> mSurface;
|
|
||||||
const FFmpegLibWrapper* mLib;
|
|
||||||
@@ -132,7 +113,7 @@ class VideoFramePool final {
|
|
||||||
private:
|
|
||||||
// Protect mDMABufSurfaces pool access
|
|
||||||
Mutex mSurfaceLock;
|
|
||||||
- nsTArray<RefPtr<VideoFrameSurfaceVAAPI>> mDMABufSurfaces;
|
|
||||||
+ nsTArray<RefPtr<VideoFrameSurface>> mDMABufSurfaces;
|
|
||||||
// We may fail to create texture over DMABuf memory due to driver bugs so
|
|
||||||
// check that before we export first DMABuf video frame.
|
|
||||||
Maybe<bool> mTextureCreationWorks;
|
|
252
D141828.diff
252
D141828.diff
@ -1,252 +0,0 @@
|
|||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg58/moz.build.D141828 firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg58/moz.build.D141828 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg58/moz.build 2022-04-07 10:11:34.981246890 +0200
|
|
||||||
@@ -30,6 +30,9 @@ if CONFIG['MOZ_WAYLAND']:
|
|
||||||
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
|
|
||||||
DEFINES['MOZ_WAYLAND_USE_VAAPI'] = 1
|
|
||||||
USE_LIBS += ['mozva']
|
|
||||||
+ UNIFIED_SOURCES += [
|
|
||||||
+ '../FFmpegVideoFramePool.cpp',
|
|
||||||
+ ]
|
|
||||||
|
|
||||||
include("/ipc/chromium/chromium-config.mozbuild")
|
|
||||||
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg59/moz.build.D141828 firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg59/moz.build
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg59/moz.build.D141828 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/ffmpeg59/moz.build 2022-04-07 10:11:34.981246890 +0200
|
|
||||||
@@ -30,6 +30,9 @@ if CONFIG["MOZ_WAYLAND"]:
|
|
||||||
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
|
|
||||||
DEFINES["MOZ_WAYLAND_USE_VAAPI"] = 1
|
|
||||||
USE_LIBS += ["mozva"]
|
|
||||||
+ UNIFIED_SOURCES += [
|
|
||||||
+ "../FFmpegVideoFramePool.cpp",
|
|
||||||
+ ]
|
|
||||||
|
|
||||||
include("/ipc/chromium/chromium-config.mozbuild")
|
|
||||||
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.D141828 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.D141828 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp 2022-04-07 10:11:34.981246890 +0200
|
|
||||||
@@ -814,7 +814,7 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER
|
|
||||||
# ifdef MOZ_WAYLAND_USE_VAAPI
|
|
||||||
// Create VideoFramePool in case we need it.
|
|
||||||
if (!mVideoFramePool && mEnableHardwareDecoding) {
|
|
||||||
- mVideoFramePool = MakeUnique<VideoFramePool>();
|
|
||||||
+ mVideoFramePool = MakeUnique<VideoFramePool<LIBAV_VER>>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Release unused VA-API surfaces before avcodec_receive_frame() as
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h.D141828 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h.D141828 2022-03-31 01:24:44.000000000 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h 2022-04-07 10:11:34.981246890 +0200
|
|
||||||
@@ -16,6 +16,9 @@
|
|
||||||
#if LIBAVCODEC_VERSION_MAJOR >= 57 && LIBAVUTIL_VERSION_MAJOR >= 56
|
|
||||||
# include "mozilla/layers/TextureClient.h"
|
|
||||||
#endif
|
|
||||||
+#ifdef MOZ_WAYLAND_USE_VAAPI
|
|
||||||
+# include "FFmpegVideoFramePool.h"
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
struct _VADRMPRIMESurfaceDescriptor;
|
|
||||||
typedef struct _VADRMPRIMESurfaceDescriptor VADRMPRIMESurfaceDescriptor;
|
|
||||||
@@ -23,7 +26,6 @@ typedef struct _VADRMPRIMESurfaceDescrip
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
class ImageBufferWrapper;
|
|
||||||
-class VideoFramePool;
|
|
||||||
|
|
||||||
template <int V>
|
|
||||||
class FFmpegVideoDecoder : public FFmpegDataDecoder<V> {};
|
|
||||||
@@ -138,7 +140,7 @@ class FFmpegVideoDecoder<LIBAV_VER>
|
|
||||||
AVBufferRef* mVAAPIDeviceContext;
|
|
||||||
bool mEnableHardwareDecoding;
|
|
||||||
VADisplay mDisplay;
|
|
||||||
- UniquePtr<VideoFramePool> mVideoFramePool;
|
|
||||||
+ UniquePtr<VideoFramePool<LIBAV_VER>> mVideoFramePool;
|
|
||||||
static nsTArray<AVCodecID> mAcceleratedFormats;
|
|
||||||
#endif
|
|
||||||
RefPtr<KnowsCompositor> mImageAllocator;
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D141828 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.D141828 2022-04-07 10:11:34.980246857 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp 2022-04-07 10:16:02.390971008 +0200
|
|
||||||
@@ -5,6 +5,7 @@
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
#include "FFmpegVideoFramePool.h"
|
|
||||||
+#include "PlatformDecoderModule.h"
|
|
||||||
#include "FFmpegLog.h"
|
|
||||||
#include "mozilla/widget/DMABufLibWrapper.h"
|
|
||||||
#include "libavutil/pixfmt.h"
|
|
||||||
@@ -15,11 +16,11 @@
|
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
-RefPtr<layers::Image> VideoFrameSurface::GetAsImage() {
|
|
||||||
+RefPtr<layers::Image> VideoFrameSurface<LIBAV_VER>::GetAsImage() {
|
|
||||||
return new layers::DMABUFSurfaceImage(mSurface);
|
|
||||||
}
|
|
||||||
|
|
||||||
-VideoFrameSurface::VideoFrameSurface(DMABufSurface* aSurface)
|
|
||||||
+VideoFrameSurface<LIBAV_VER>::VideoFrameSurface(DMABufSurface* aSurface)
|
|
||||||
: mSurface(aSurface),
|
|
||||||
mLib(nullptr),
|
|
||||||
mAVHWFramesContext(nullptr),
|
|
||||||
@@ -34,7 +35,7 @@ VideoFrameSurface::VideoFrameSurface(DMA
|
|
||||||
mSurface->GetUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
-void VideoFrameSurface::LockVAAPIData(AVCodecContext* aAVCodecContext,
|
|
||||||
+void VideoFrameSurface<LIBAV_VER>::LockVAAPIData(AVCodecContext* aAVCodecContext,
|
|
||||||
AVFrame* aAVFrame,
|
|
||||||
FFmpegLibWrapper* aLib) {
|
|
||||||
FFMPEG_LOG("VideoFrameSurface: VAAPI locking dmabuf surface UID = %d",
|
|
||||||
@@ -44,7 +45,7 @@ void VideoFrameSurface::LockVAAPIData(AV
|
|
||||||
mHWAVBuffer = aLib->av_buffer_ref(aAVFrame->buf[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void VideoFrameSurface::ReleaseVAAPIData(bool aForFrameRecycle) {
|
|
||||||
+void VideoFrameSurface<LIBAV_VER>::ReleaseVAAPIData(bool aForFrameRecycle) {
|
|
||||||
FFMPEG_LOG("VideoFrameSurface: VAAPI releasing dmabuf surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
|
|
||||||
@@ -67,21 +68,22 @@ void VideoFrameSurface::ReleaseVAAPIData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-VideoFrameSurface::~VideoFrameSurface() {
|
|
||||||
+VideoFrameSurface<LIBAV_VER>::~VideoFrameSurface() {
|
|
||||||
FFMPEG_LOG("VideoFrameSurface: deleting dmabuf surface UID = %d",
|
|
||||||
mSurface->GetUID());
|
|
||||||
// We're about to quit, no need to recycle the frames.
|
|
||||||
ReleaseVAAPIData(/* aForFrameRecycle */ false);
|
|
||||||
}
|
|
||||||
|
|
||||||
-VideoFramePool::VideoFramePool() : mSurfaceLock("VideoFramePoolSurfaceLock") {}
|
|
||||||
+VideoFramePool<LIBAV_VER>::VideoFramePool()
|
|
||||||
+ : mSurfaceLock("VideoFramePoolSurfaceLock") {}
|
|
||||||
|
|
||||||
-VideoFramePool::~VideoFramePool() {
|
|
||||||
+VideoFramePool<LIBAV_VER>::~VideoFramePool() {
|
|
||||||
MutexAutoLock lock(mSurfaceLock);
|
|
||||||
mDMABufSurfaces.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
-void VideoFramePool::ReleaseUnusedVAAPIFrames() {
|
|
||||||
+void VideoFramePool<LIBAV_VER>::ReleaseUnusedVAAPIFrames() {
|
|
||||||
MutexAutoLock lock(mSurfaceLock);
|
|
||||||
for (const auto& surface : mDMABufSurfaces) {
|
|
||||||
if (!surface->IsUsed()) {
|
|
||||||
@@ -90,7 +92,8 @@ void VideoFramePool::ReleaseUnusedVAAPIF
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-RefPtr<VideoFrameSurface> VideoFramePool::GetFreeVideoFrameSurface() {
|
|
||||||
+RefPtr<VideoFrameSurface<LIBAV_VER>>
|
|
||||||
+VideoFramePool<LIBAV_VER>::GetFreeVideoFrameSurface() {
|
|
||||||
for (auto& surface : mDMABufSurfaces) {
|
|
||||||
if (surface->IsUsed()) {
|
|
||||||
continue;
|
|
||||||
@@ -101,7 +104,8 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
-RefPtr<VideoFrameSurface> VideoFramePool::GetVideoFrameSurface(
|
|
||||||
+RefPtr<VideoFrameSurface<LIBAV_VER>>
|
|
||||||
+VideoFramePool<LIBAV_VER>::GetVideoFrameSurface(
|
|
||||||
VADRMPRIMESurfaceDescriptor& aVaDesc, AVCodecContext* aAVCodecContext,
|
|
||||||
AVFrame* aAVFrame, FFmpegLibWrapper* aLib) {
|
|
||||||
if (aVaDesc.fourcc != VA_FOURCC_NV12 && aVaDesc.fourcc != VA_FOURCC_YV12 &&
|
|
||||||
@@ -111,7 +115,8 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
}
|
|
||||||
|
|
||||||
MutexAutoLock lock(mSurfaceLock);
|
|
||||||
- RefPtr<VideoFrameSurface> videoSurface = GetFreeVideoFrameSurface();
|
|
||||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> videoSurface =
|
|
||||||
+ GetFreeVideoFrameSurface();
|
|
||||||
if (!videoSurface) {
|
|
||||||
RefPtr<DMABufSurfaceYUV> surface =
|
|
||||||
DMABufSurfaceYUV::CreateYUVSurface(aVaDesc);
|
|
||||||
@@ -119,7 +124,8 @@ RefPtr<VideoFrameSurface> VideoFramePool
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
FFMPEG_LOG("Created new VA-API DMABufSurface UID = %d", surface->GetUID());
|
|
||||||
- RefPtr<VideoFrameSurface> surf = new VideoFrameSurface(surface);
|
|
||||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> surf =
|
|
||||||
+ new VideoFrameSurface<LIBAV_VER>(surface);
|
|
||||||
if (!mTextureCreationWorks) {
|
|
||||||
mTextureCreationWorks = Some(surface->VerifyTextureCreation());
|
|
||||||
}
|
|
||||||
diff -up firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D141828 firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h
|
|
||||||
--- firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.D141828 2022-04-07 10:11:34.980246857 +0200
|
|
||||||
+++ firefox-99.0/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h 2022-04-07 10:14:54.478755409 +0200
|
|
||||||
@@ -7,8 +7,9 @@
|
|
||||||
#ifndef __FFmpegVideoFramePool_h__
|
|
||||||
#define __FFmpegVideoFramePool_h__
|
|
||||||
|
|
||||||
-#include "FFmpegVideoDecoder.h"
|
|
||||||
#include "FFmpegLibWrapper.h"
|
|
||||||
+#include "FFmpegLibs.h"
|
|
||||||
+#include "FFmpegLog.h"
|
|
||||||
|
|
||||||
#include "mozilla/layers/DMABUFSurfaceImage.h"
|
|
||||||
#include "mozilla/widget/DMABufLibWrapper.h"
|
|
||||||
@@ -16,8 +17,6 @@
|
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
-class VideoFramePool;
|
|
||||||
-
|
|
||||||
// VideoFrameSurface holds a reference to GPU data with a video frame.
|
|
||||||
//
|
|
||||||
// Actual GPU pixel data are stored at DMABufSurface and
|
|
||||||
@@ -47,8 +46,19 @@ class VideoFramePool;
|
|
||||||
// Unfortunately there isn't any obvious way how to mark particular VASurface
|
|
||||||
// as used. The best we can do is to hold a reference to particular AVBuffer
|
|
||||||
// from decoded AVFrame and AVHWFramesContext which owns the AVBuffer.
|
|
||||||
-class VideoFrameSurface {
|
|
||||||
- friend class VideoFramePool;
|
|
||||||
+template <int V>
|
|
||||||
+class VideoFrameSurface {};
|
|
||||||
+template <>
|
|
||||||
+class VideoFrameSurface<LIBAV_VER>;
|
|
||||||
+
|
|
||||||
+template <int V>
|
|
||||||
+class VideoFramePool {};
|
|
||||||
+template <>
|
|
||||||
+class VideoFramePool<LIBAV_VER>;
|
|
||||||
+
|
|
||||||
+template <>
|
|
||||||
+class VideoFrameSurface<LIBAV_VER> {
|
|
||||||
+ friend class VideoFramePool<LIBAV_VER>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoFrameSurface)
|
|
||||||
@@ -97,23 +107,24 @@ class VideoFrameSurface {
|
|
||||||
};
|
|
||||||
|
|
||||||
// VideoFramePool class is thread-safe.
|
|
||||||
-class VideoFramePool final {
|
|
||||||
+template <>
|
|
||||||
+class VideoFramePool<LIBAV_VER> {
|
|
||||||
public:
|
|
||||||
VideoFramePool();
|
|
||||||
~VideoFramePool();
|
|
||||||
|
|
||||||
- RefPtr<VideoFrameSurface> GetVideoFrameSurface(
|
|
||||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> GetVideoFrameSurface(
|
|
||||||
VADRMPRIMESurfaceDescriptor& aVaDesc, AVCodecContext* aAVCodecContext,
|
|
||||||
AVFrame* aAVFrame, FFmpegLibWrapper* aLib);
|
|
||||||
void ReleaseUnusedVAAPIFrames();
|
|
||||||
|
|
||||||
private:
|
|
||||||
- RefPtr<VideoFrameSurface> GetFreeVideoFrameSurface();
|
|
||||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> GetFreeVideoFrameSurface();
|
|
||||||
|
|
||||||
private:
|
|
||||||
// Protect mDMABufSurfaces pool access
|
|
||||||
Mutex mSurfaceLock;
|
|
||||||
- nsTArray<RefPtr<VideoFrameSurface>> mDMABufSurfaces;
|
|
||||||
+ nsTArray<RefPtr<VideoFrameSurface<LIBAV_VER>>> mDMABufSurfaces;
|
|
||||||
// We may fail to create texture over DMABuf memory due to driver bugs so
|
|
||||||
// check that before we export first DMABuf video frame.
|
|
||||||
Maybe<bool> mTextureCreationWorks;
|
|
86
D142373.diff
Normal file
86
D142373.diff
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
diff --git a/python/mozbuild/mozbuild/build_commands.py b/python/mozbuild/mozbuild/build_commands.py
|
||||||
|
--- a/python/mozbuild/mozbuild/build_commands.py
|
||||||
|
+++ b/python/mozbuild/mozbuild/build_commands.py
|
||||||
|
@@ -183,10 +183,11 @@
|
||||||
|
directory=directory,
|
||||||
|
verbose=verbose,
|
||||||
|
keep_going=keep_going,
|
||||||
|
mach_context=command_context._mach_context,
|
||||||
|
append_env=append_env,
|
||||||
|
+ virtualenv_topobjdir=orig_topobjdir,
|
||||||
|
)
|
||||||
|
if status != 0:
|
||||||
|
return status
|
||||||
|
|
||||||
|
# Packaging the instrumented build is required to get the jarlog
|
||||||
|
@@ -206,11 +207,11 @@
|
||||||
|
pgo_env["LLVM_PROFDATA"] = instr.config_environment.substs.get(
|
||||||
|
"LLVM_PROFDATA"
|
||||||
|
)
|
||||||
|
pgo_env["JARLOG_FILE"] = mozpath.join(orig_topobjdir, "jarlog/en-US.log")
|
||||||
|
pgo_cmd = [
|
||||||
|
- instr.virtualenv_manager.python_path,
|
||||||
|
+ command_context.virtualenv_manager.python_path,
|
||||||
|
mozpath.join(command_context.topsrcdir, "build/pgo/profileserver.py"),
|
||||||
|
]
|
||||||
|
subprocess.check_call(pgo_cmd, cwd=instr.topobjdir, env=pgo_env)
|
||||||
|
|
||||||
|
# Set the default build to MOZ_PROFILE_USE
|
||||||
|
diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py
|
||||||
|
--- a/python/mozbuild/mozbuild/controller/building.py
|
||||||
|
+++ b/python/mozbuild/mozbuild/controller/building.py
|
||||||
|
@@ -1220,10 +1220,11 @@
|
||||||
|
directory=None,
|
||||||
|
verbose=False,
|
||||||
|
keep_going=False,
|
||||||
|
mach_context=None,
|
||||||
|
append_env=None,
|
||||||
|
+ virtualenv_topobjdir=None,
|
||||||
|
):
|
||||||
|
"""Invoke the build backend.
|
||||||
|
|
||||||
|
``what`` defines the thing to build. If not defined, the default
|
||||||
|
target is used.
|
||||||
|
@@ -1297,10 +1298,11 @@
|
||||||
|
config_rc = self.configure(
|
||||||
|
metrics,
|
||||||
|
buildstatus_messages=True,
|
||||||
|
line_handler=output.on_line,
|
||||||
|
append_env=append_env,
|
||||||
|
+ virtualenv_topobjdir=virtualenv_topobjdir,
|
||||||
|
)
|
||||||
|
|
||||||
|
if config_rc != 0:
|
||||||
|
return config_rc
|
||||||
|
|
||||||
|
@@ -1635,10 +1637,11 @@
|
||||||
|
metrics,
|
||||||
|
options=None,
|
||||||
|
buildstatus_messages=False,
|
||||||
|
line_handler=None,
|
||||||
|
append_env=None,
|
||||||
|
+ virtualenv_topobjdir=None,
|
||||||
|
):
|
||||||
|
# Disable indexing in objdir because it is not necessary and can slow
|
||||||
|
# down builds.
|
||||||
|
self.metrics = metrics
|
||||||
|
mkdir(self.topobjdir, not_indexed=True)
|
||||||
|
@@ -1658,15 +1661,16 @@
|
||||||
|
if line.startswith("export "):
|
||||||
|
k, eq, v = line[len("export ") :].partition("=")
|
||||||
|
if eq == "=":
|
||||||
|
append_env[k] = v
|
||||||
|
|
||||||
|
+ virtualenv_topobjdir = virtualenv_topobjdir or self.topobjdir
|
||||||
|
build_site = CommandSiteManager.from_environment(
|
||||||
|
self.topsrcdir,
|
||||||
|
lambda: get_state_dir(specific_to_topsrcdir=True, topsrcdir=self.topsrcdir),
|
||||||
|
"build",
|
||||||
|
- os.path.join(self.topobjdir, "_virtualenvs"),
|
||||||
|
+ os.path.join(virtualenv_topobjdir, "_virtualenvs"),
|
||||||
|
)
|
||||||
|
build_site.ensure()
|
||||||
|
|
||||||
|
command = [build_site.python_path, os.path.join(self.topsrcdir, "configure.py")]
|
||||||
|
if options:
|
||||||
|
|
15
firefox.spec
15
firefox.spec
@ -162,13 +162,13 @@ ExcludeArch: aarch64
|
|||||||
|
|
||||||
Summary: Mozilla Firefox Web browser
|
Summary: Mozilla Firefox Web browser
|
||||||
Name: firefox
|
Name: firefox
|
||||||
Version: 99.0.1
|
Version: 100.0
|
||||||
Release: 2%{?pre_tag}%{?dist}
|
Release: 1%{?pre_tag}%{?dist}
|
||||||
URL: https://www.mozilla.org/firefox/
|
URL: https://www.mozilla.org/firefox/
|
||||||
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
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
|
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
|
||||||
%if %{with langpacks}
|
%if %{with langpacks}
|
||||||
Source1: firefox-langpacks-%{version}%{?pre_version}-20220413.tar.xz
|
Source1: firefox-langpacks-%{version}%{?pre_version}-20220502.tar.xz
|
||||||
%endif
|
%endif
|
||||||
Source2: cbindgen-vendor.tar.xz
|
Source2: cbindgen-vendor.tar.xz
|
||||||
Source10: firefox-mozconfig
|
Source10: firefox-mozconfig
|
||||||
@ -217,6 +217,7 @@ Patch55: firefox-testing.patch
|
|||||||
Patch61: firefox-glibc-dynstack.patch
|
Patch61: firefox-glibc-dynstack.patch
|
||||||
Patch62: build-python.patch
|
Patch62: build-python.patch
|
||||||
Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch
|
Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch
|
||||||
|
Patch72: D142373.diff
|
||||||
|
|
||||||
# Test patches
|
# Test patches
|
||||||
# Generate without context by
|
# Generate without context by
|
||||||
@ -241,8 +242,6 @@ Patch402: mozilla-1196777.patch
|
|||||||
Patch407: mozilla-1667096.patch
|
Patch407: mozilla-1667096.patch
|
||||||
Patch408: mozilla-1663844.patch
|
Patch408: mozilla-1663844.patch
|
||||||
Patch415: mozilla-1670333.patch
|
Patch415: mozilla-1670333.patch
|
||||||
Patch416: D141827.diff
|
|
||||||
Patch417: D141828.diff
|
|
||||||
|
|
||||||
# PGO/LTO patches
|
# PGO/LTO patches
|
||||||
Patch600: pgo.patch
|
Patch600: pgo.patch
|
||||||
@ -460,6 +459,7 @@ This package contains results of tests executed during build.
|
|||||||
%patch53 -p1 -b .firefox-gcc-build
|
%patch53 -p1 -b .firefox-gcc-build
|
||||||
%patch54 -p1 -b .1669639
|
%patch54 -p1 -b .1669639
|
||||||
%patch71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12
|
%patch71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12
|
||||||
|
%patch72 -p1 -b .D142373
|
||||||
|
|
||||||
# Test patches
|
# Test patches
|
||||||
#%patch100 -p1 -b .firefox-tests-xpcshell
|
#%patch100 -p1 -b .firefox-tests-xpcshell
|
||||||
@ -482,8 +482,6 @@ This package contains results of tests executed during build.
|
|||||||
%patch407 -p1 -b .1667096
|
%patch407 -p1 -b .1667096
|
||||||
%patch408 -p1 -b .1663844
|
%patch408 -p1 -b .1663844
|
||||||
%patch415 -p1 -b .1670333
|
%patch415 -p1 -b .1670333
|
||||||
%patch416 -p1 -b .D141827
|
|
||||||
%patch417 -p1 -b .D141828
|
|
||||||
|
|
||||||
# PGO patches
|
# PGO patches
|
||||||
%if %{build_with_pgo}
|
%if %{build_with_pgo}
|
||||||
@ -1050,6 +1048,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
|||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon May 2 2022 Martin Stransky <stransky@redhat.com>- 100.0-1
|
||||||
|
- Updated to 100.0
|
||||||
|
|
||||||
* Thu Apr 28 2022 Jan Horak <jhorak@redhat.com> - 99.0.1-2
|
* Thu Apr 28 2022 Jan Horak <jhorak@redhat.com> - 99.0.1-2
|
||||||
- Fixing bookmark install location - rhbz#2054953
|
- Fixing bookmark install location - rhbz#2054953
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
diff -up firefox-86.0/widget/gtk/nsWindow.cpp.1196777 firefox-86.0/widget/gtk/nsWindow.cpp
|
diff -up firefox-100.0/widget/gtk/nsWindow.cpp.1196777 firefox-100.0/widget/gtk/nsWindow.cpp
|
||||||
--- firefox-86.0/widget/gtk/nsWindow.cpp.1196777 2021-02-23 17:52:42.291702566 +0100
|
--- firefox-100.0/widget/gtk/nsWindow.cpp.1196777 2022-05-02 11:29:06.763325015 +0200
|
||||||
+++ firefox-86.0/widget/gtk/nsWindow.cpp 2021-02-23 17:57:52.434895984 +0100
|
+++ firefox-100.0/widget/gtk/nsWindow.cpp 2022-05-02 11:30:49.100717334 +0200
|
||||||
@@ -195,7 +195,8 @@ const gint kEvents = GDK_TOUCHPAD_GESTUR
|
@@ -163,7 +163,8 @@ const gint kEvents = GDK_TOUCHPAD_GESTUR
|
||||||
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
||||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
||||||
GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SCROLL_MASK |
|
GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SCROLL_MASK |
|
||||||
@ -9,5 +9,5 @@ diff -up firefox-86.0/widget/gtk/nsWindow.cpp.1196777 firefox-86.0/widget/gtk/ns
|
|||||||
+ GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
|
+ GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
|
||||||
+ GDK_FOCUS_CHANGE_MASK;
|
+ GDK_FOCUS_CHANGE_MASK;
|
||||||
|
|
||||||
#if !GTK_CHECK_VERSION(3, 22, 0)
|
/* utility functions */
|
||||||
typedef enum {
|
static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX,
|
||||||
|
4
sources
4
sources
@ -1,4 +1,4 @@
|
|||||||
SHA512 (cbindgen-vendor.tar.xz) = b9ab1498be90ecf60822df7021f8812f124550d97f8cd687c69d3ab56fc5fb714bfe88c78c978a1794d211724909a9a5cad6a4b483fa05f762909c45d5075520
|
SHA512 (cbindgen-vendor.tar.xz) = b9ab1498be90ecf60822df7021f8812f124550d97f8cd687c69d3ab56fc5fb714bfe88c78c978a1794d211724909a9a5cad6a4b483fa05f762909c45d5075520
|
||||||
SHA512 (mochitest-python.tar.gz) = 18e1aeb475df5fbf1fe3838897d5ac2f3114aa349030713fc2be27af087b1b12f57642621b87bd052f324a7cb7fbae5f36b21502191d85692f62c8cdd69c8bf2
|
SHA512 (mochitest-python.tar.gz) = 18e1aeb475df5fbf1fe3838897d5ac2f3114aa349030713fc2be27af087b1b12f57642621b87bd052f324a7cb7fbae5f36b21502191d85692f62c8cdd69c8bf2
|
||||||
SHA512 (firefox-langpacks-99.0.1-20220413.tar.xz) = 9ec7a4c4d68251176a01cbfa69960241033863e4b59c578846828dd57204b5fe02902fb6c5154352c3142a94106b952f02b141d0f5c8808e5aa901e891c7d60f
|
SHA512 (firefox-100.0.source.tar.xz) = 29c56391c980209ff94c02a9aba18fe27bea188bdcbcf7fe0c0f27f61e823f4507a3ec343b27cb5285cf3901843e9cc4aca8e568beb623c4b69b7282e662b2aa
|
||||||
SHA512 (firefox-99.0.1.source.tar.xz) = 0006b773ef1057a6e0b959d4f39849ad4a79272b38d565da98062b9aaf0effd2b729349c1f9fa10fccf7d2462d2c536b02c167ae6ad4556d6e519c6d22c25a7f
|
SHA512 (firefox-langpacks-100.0-20220502.tar.xz) = 38e91cf8d6df6cf455891563f72090d1f277750f62f7a8c3cf5afd1d0a7aa2e1a6b47e65fc9d8419305ec2075c0ff3de41dbb7b5251790ff1bf3cd1f7db7bbbb
|
||||||
|
Loading…
Reference in New Issue
Block a user