www/firefox: update to 100.0 (rc1)
Release Notes (soon): https://www.mozilla.org/en-US/firefox/100.0/releasenotes/
This commit is contained in:
parent
5d3936d690
commit
c4e707ffec
4 changed files with 18 additions and 384 deletions
|
@ -1,12 +1,11 @@
|
|||
# Created by: Alan Eldridge <alane@FreeBSD.org>
|
||||
|
||||
PORTNAME= firefox
|
||||
DISTVERSION= 99.0.1
|
||||
PORTREVISION= 2
|
||||
DISTVERSION= 100.0
|
||||
PORTEPOCH= 2
|
||||
CATEGORIES= www
|
||||
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
|
||||
MOZILLA/${PORTNAME}/candidates/${DISTVERSION}${DISTVERSIONSUFFIX}-candidates/build2/source
|
||||
MOZILLA/${PORTNAME}/candidates/${DISTVERSION}${DISTVERSIONSUFFIX}-candidates/build1/source
|
||||
DISTFILES= ${DISTNAME}.source${EXTRACT_SUFX}
|
||||
|
||||
MAINTAINER= gecko@FreeBSD.org
|
||||
|
@ -16,7 +15,7 @@ BUILD_DEPENDS= nspr>=4.32:devel/nspr \
|
|||
nss>=3.76:security/nss \
|
||||
icu>=70.1:devel/icu \
|
||||
libevent>=2.1.8:devel/libevent \
|
||||
harfbuzz>=3.4.0:print/harfbuzz \
|
||||
harfbuzz>=4.1.0:print/harfbuzz \
|
||||
graphite2>=1.3.14:graphics/graphite2 \
|
||||
png>=1.6.37:graphics/png \
|
||||
dav1d>=1.0.0:multimedia/dav1d \
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
TIMESTAMP = 1649763203
|
||||
SHA256 (firefox-99.0.1.source.tar.xz) = 76d22279ce99588a728bb2d034064be0d5918b5900631f2148d4565b8a72e00b
|
||||
SIZE (firefox-99.0.1.source.tar.xz) = 483537764
|
||||
TIMESTAMP = 1650958415
|
||||
SHA256 (firefox-100.0.source.tar.xz) = fba937a55a177916c6121f82f79e0d46c10bf175d4effc10d9095d0c297711fa
|
||||
SIZE (firefox-100.0.source.tar.xz) = 482628448
|
||||
|
|
|
@ -3,8 +3,8 @@ using any cubeb backends other than pulse-rust to play media. The loss of
|
|||
such change will be that users will not be able to do profiling on threads
|
||||
created by libcubeb.
|
||||
|
||||
--- dom/media/AudioStream.cpp.orig 2022-02-25 16:27:47.676236000 +0100
|
||||
+++ dom/media/AudioStream.cpp 2022-02-25 16:54:21.223904000 +0100
|
||||
--- dom/media/AudioStream.cpp.orig 2022-04-19 19:43:36.505544000 +0200
|
||||
+++ dom/media/AudioStream.cpp 2022-04-19 19:47:53.111474000 +0200
|
||||
@@ -27,7 +27,6 @@
|
||||
#endif
|
||||
#include "Tracing.h"
|
||||
|
@ -14,7 +14,7 @@ created by libcubeb.
|
|||
|
||||
// Use abort() instead of exception in SoundTouch.
|
||||
@@ -144,8 +143,6 @@
|
||||
mAudioClock(aInRate),
|
||||
mOutChannels(aOutputChannels),
|
||||
mState(INITIALIZED),
|
||||
mDataSource(aSource),
|
||||
- mAudioThreadId(ProfilerThreadId{}),
|
||||
|
@ -22,7 +22,7 @@ created by libcubeb.
|
|||
mPlaybackComplete(false),
|
||||
mPlaybackRate(1.0f),
|
||||
mPreservesPitch(true) {}
|
||||
@@ -551,17 +548,6 @@
|
||||
@@ -552,17 +549,6 @@
|
||||
aWriter.Available());
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ created by libcubeb.
|
|||
void AudioStream::AssertIsOnAudioThread() const {
|
||||
// This can be called right after CheckThreadIdChanged, because the audio
|
||||
// thread can change when not sandboxed.
|
||||
@@ -590,9 +576,6 @@
|
||||
@@ -591,9 +577,6 @@
|
||||
}
|
||||
|
||||
long AudioStream::DataCallback(void* aBuffer, long aFrames) {
|
||||
|
@ -50,7 +50,7 @@ created by libcubeb.
|
|||
WebCore::DenormalDisabler disabler;
|
||||
|
||||
TRACE_AUDIO_CALLBACK_BUDGET(aFrames, mAudioClock.GetInputRate());
|
||||
@@ -647,9 +630,6 @@
|
||||
@@ -648,9 +631,6 @@
|
||||
mDumpFile.Write(static_cast<const AudioDataValue*>(aBuffer),
|
||||
aFrames * mOutChannels);
|
||||
|
||||
|
@ -60,17 +60,17 @@ created by libcubeb.
|
|||
return aFrames - writer.Available();
|
||||
}
|
||||
|
||||
--- dom/media/AudioStream.h.orig 2022-02-25 16:27:53.316210000 +0100
|
||||
+++ dom/media/AudioStream.h 2022-02-25 16:55:18.967535000 +0100
|
||||
@@ -323,7 +323,6 @@
|
||||
--- dom/media/AudioStream.h.orig 2022-04-19 19:43:45.457171000 +0200
|
||||
+++ dom/media/AudioStream.h 2022-04-19 19:45:30.463633000 +0200
|
||||
@@ -329,7 +329,6 @@
|
||||
|
||||
template <typename Function, typename... Args>
|
||||
int InvokeCubeb(Function aFunction, Args&&... aArgs);
|
||||
int InvokeCubeb(Function aFunction, Args&&... aArgs) REQUIRES(mMonitor);
|
||||
- bool CheckThreadIdChanged();
|
||||
void AssertIsOnAudioThread() const;
|
||||
|
||||
soundtouch::SoundTouch* mTimeStretcher;
|
||||
@@ -357,9 +356,6 @@
|
||||
@@ -368,9 +367,6 @@
|
||||
// the default device is used. It is set
|
||||
// during the Init() in decoder thread.
|
||||
RefPtr<AudioDeviceInfo> mSinkInfo;
|
||||
|
@ -78,5 +78,5 @@ created by libcubeb.
|
|||
- std::atomic<ProfilerThreadId> mAudioThreadId;
|
||||
- const bool mSandboxed = false;
|
||||
|
||||
MozPromiseHolder<MediaSink::EndedPromise> mEndedPromise;
|
||||
MozPromiseHolder<MediaSink::EndedPromise> mEndedPromise GUARDED_BY(mMonitor);
|
||||
std::atomic<bool> mPlaybackComplete;
|
||||
|
|
|
@ -1,365 +0,0 @@
|
|||
--- dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.orig 2022-03-30 23:24:44 UTC
|
||||
+++ dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
||||
@@ -814,7 +814,7 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::DoDecode(
|
||||
# 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
|
||||
--- dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h.orig 2022-03-30 23:24:44 UTC
|
||||
+++ dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
||||
@@ -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 _VADRMPRIMESurfaceDescriptor VADRMPRIME
|
||||
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;
|
||||
--- dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp.orig 2022-03-31 01:24:44.000000000 +0200
|
||||
+++ dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp 2022-04-05 00:06:31.002795000 +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,14 +16,14 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
-RefPtr<layers::Image> VideoFrameSurfaceVAAPI::GetAsImage() {
|
||||
+RefPtr<layers::Image> VideoFrameSurface<LIBAV_VER>::GetAsImage() {
|
||||
return new layers::DMABUFSurfaceImage(mSurface);
|
||||
}
|
||||
|
||||
-VideoFrameSurfaceVAAPI::VideoFrameSurfaceVAAPI(DMABufSurface* aSurface)
|
||||
+VideoFrameSurface<LIBAV_VER>::VideoFrameSurface(DMABufSurface* aSurface)
|
||||
: mSurface(aSurface),
|
||||
mLib(nullptr),
|
||||
- mAVHWFramesContext(nullptr),
|
||||
+ mAVHWDeviceContext(nullptr),
|
||||
mHWAVBuffer(nullptr) {
|
||||
// Create global refcount object to track mSurface usage over
|
||||
// gects rendering engine. We can't release it until it's used
|
||||
@@ -30,22 +31,22 @@
|
||||
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,
|
||||
- AVFrame* aAVFrame,
|
||||
- FFmpegLibWrapper* aLib) {
|
||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: VAAPI locking dmabuf surface UID = %d",
|
||||
+void VideoFrameSurface<LIBAV_VER>::LockVAAPIData(
|
||||
+ AVCodecContext* aAVCodecContext, AVFrame* aAVFrame,
|
||||
+ FFmpegLibWrapper* aLib) {
|
||||
+ FFMPEG_LOG("VideoFrameSurface: VAAPI locking dmabuf surface UID = %d",
|
||||
mSurface->GetUID());
|
||||
mLib = aLib;
|
||||
- mAVHWFramesContext = aLib->av_buffer_ref(aAVCodecContext->hw_frames_ctx);
|
||||
+ mAVHWDeviceContext = aLib->av_buffer_ref(aAVCodecContext->hw_device_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<LIBAV_VER>::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.
|
||||
@@ -56,7 +57,7 @@
|
||||
// is closed.
|
||||
if (mLib) {
|
||||
mLib->av_buffer_unref(&mHWAVBuffer);
|
||||
- mLib->av_buffer_unref(&mAVHWFramesContext);
|
||||
+ mLib->av_buffer_unref(&mAVHWDeviceContext);
|
||||
}
|
||||
|
||||
// If we want to recycle the frame, make sure it's not used
|
||||
@@ -67,43 +68,44 @@
|
||||
}
|
||||
}
|
||||
|
||||
-VideoFrameSurfaceVAAPI::~VideoFrameSurfaceVAAPI() {
|
||||
- FFMPEG_LOG("VideoFrameSurfaceVAAPI: deleting dmabuf surface UID = %d",
|
||||
+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) {
|
||||
- auto* vaapiSurface = surface->AsVideoFrameSurfaceVAAPI();
|
||||
- if (!vaapiSurface->IsUsed()) {
|
||||
- vaapiSurface->ReleaseVAAPIData();
|
||||
+ if (!surface->IsUsed()) {
|
||||
+ surface->ReleaseVAAPIData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-RefPtr<VideoFrameSurface> VideoFramePool::GetFreeVideoFrameSurface() {
|
||||
+RefPtr<VideoFrameSurface<LIBAV_VER>>
|
||||
+VideoFramePool<LIBAV_VER>::GetFreeVideoFrameSurface() {
|
||||
for (auto& surface : mDMABufSurfaces) {
|
||||
if (surface->IsUsed()) {
|
||||
continue;
|
||||
}
|
||||
- auto* vaapiSurface = surface->AsVideoFrameSurfaceVAAPI();
|
||||
- vaapiSurface->ReleaseVAAPIData();
|
||||
+ surface->ReleaseVAAPIData();
|
||||
return surface;
|
||||
}
|
||||
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 &&
|
||||
@@ -113,7 +115,8 @@
|
||||
}
|
||||
|
||||
MutexAutoLock lock(mSurfaceLock);
|
||||
- RefPtr<VideoFrameSurface> videoSurface = GetFreeVideoFrameSurface();
|
||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> videoSurface =
|
||||
+ GetFreeVideoFrameSurface();
|
||||
if (!videoSurface) {
|
||||
RefPtr<DMABufSurfaceYUV> surface =
|
||||
DMABufSurfaceYUV::CreateYUVSurface(aVaDesc);
|
||||
@@ -121,7 +124,8 @@
|
||||
return nullptr;
|
||||
}
|
||||
FFMPEG_LOG("Created new VA-API DMABufSurface UID = %d", surface->GetUID());
|
||||
- RefPtr<VideoFrameSurfaceVAAPI> surf = new VideoFrameSurfaceVAAPI(surface);
|
||||
+ RefPtr<VideoFrameSurface<LIBAV_VER>> surf =
|
||||
+ new VideoFrameSurface<LIBAV_VER>(surface);
|
||||
if (!mTextureCreationWorks) {
|
||||
mTextureCreationWorks = Some(surface->VerifyTextureCreation());
|
||||
}
|
||||
@@ -138,11 +142,8 @@
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
--- dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h.orig 2022-03-31 01:24:44.000000000 +0200
|
||||
+++ dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h 2022-04-05 00:23:32.421765000 +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,43 +17,16 @@
|
||||
|
||||
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 +46,24 @@
|
||||
// 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 {
|
||||
- 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:
|
||||
- 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 +78,12 @@
|
||||
|
||||
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,32 +98,33 @@
|
||||
void MarkAsUsed() { mSurface->GlobalRefAdd(); }
|
||||
|
||||
private:
|
||||
- virtual ~VideoFrameSurfaceVAAPI();
|
||||
+ virtual ~VideoFrameSurface();
|
||||
|
||||
const RefPtr<DMABufSurface> mSurface;
|
||||
const FFmpegLibWrapper* mLib;
|
||||
- AVBufferRef* mAVHWFramesContext;
|
||||
+ AVBufferRef* mAVHWDeviceContext;
|
||||
AVBufferRef* mHWAVBuffer;
|
||||
};
|
||||
|
||||
// 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<VideoFrameSurfaceVAAPI>> 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;
|
||||
--- dom/media/platforms/ffmpeg/ffmpeg58/moz.build.orig 2022-03-30 23:24:44 UTC
|
||||
+++ dom/media/platforms/ffmpeg/ffmpeg58/moz.build
|
||||
@@ -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")
|
||||
|
||||
--- dom/media/platforms/ffmpeg/ffmpeg59/moz.build.orig 2022-03-30 23:24:44 UTC
|
||||
+++ dom/media/platforms/ffmpeg/ffmpeg59/moz.build
|
||||
@@ -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")
|
||||
|
Loading…
Reference in a new issue