summaryrefslogtreecommitdiff
path: root/D141828.diff
diff options
context:
space:
mode:
Diffstat (limited to 'D141828.diff')
-rw-r--r--D141828.diff252
1 files changed, 252 insertions, 0 deletions
diff --git a/D141828.diff b/D141828.diff
new file mode 100644
index 0000000..b2475e9
--- /dev/null
+++ b/D141828.diff
@@ -0,0 +1,252 @@
+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;
bgstack15