From 0e796b1dcd0b311685fb81936ab5a5bb14d45ab1 Mon Sep 17 00:00:00 2001 From: trav90 Date: Wed, 20 Sep 2023 13:49:59 -0500 Subject: [PATCH] Issue #2311 - Part 3 - Add accessor for ffvpx real DFT functions --- dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h | 7 +++++++ .../ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp | 17 +++++++++++++++++ .../platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.h | 8 ++++++++ dom/media/platforms/moz.build | 3 +++ 4 files changed, 35 insertions(+) diff --git a/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h b/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h index 679d12ceba..b34aa08221 100644 --- a/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h +++ b/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h @@ -24,4 +24,11 @@ extern "C" { } +struct FFmpegRDFTFuncs +{ + AvRdftInitFn init; + AvRdftCalcFn calc; + AvRdftEndFn end; +}; + #endif // FFmpegRDFTTypes_h diff --git a/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp index ba39c178e7..514d9505eb 100644 --- a/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp +++ b/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp @@ -48,6 +48,7 @@ FFVPXRuntimeLinker::Init() return sLinkStatus == LinkStatus_SUCCEEDED; } + MOZ_ASSERT(NS_IsMainThread()); sLinkStatus = LinkStatus_FAILED; // We retrieve the path of the lgpllibs library as this is where mozavcodec @@ -109,4 +110,20 @@ FFVPXRuntimeLinker::CreateDecoderModule() return FFmpegDecoderModule::Create(&sFFVPXLib); } +/* static */ void +FFVPXRuntimeLinker::GetRDFTFuncs(FFmpegRDFTFuncs* aOutFuncs) +{ + MOZ_ASSERT(sLinkStatus != LinkStatus_INIT); + if (sFFVPXLib.av_rdft_init && + sFFVPXLib.av_rdft_calc && + sFFVPXLib.av_rdft_end) { + aOutFuncs->init = sFFVPXLib.av_rdft_init; + aOutFuncs->calc = sFFVPXLib.av_rdft_calc; + aOutFuncs->end = sFFVPXLib.av_rdft_end; + } else { + NS_WARNING("RDFT functions expected but not found"); + *aOutFuncs = FFmpegRDFTFuncs(); // zero + } +} + } // namespace mozilla diff --git a/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.h b/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.h index e0633441fb..8d4d8f96cb 100644 --- a/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.h +++ b/dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.h @@ -8,16 +8,24 @@ #include "PlatformDecoderModule.h" +struct FFmpegRDFTFuncs; + namespace mozilla { class FFVPXRuntimeLinker { public: + // Main thread only. static bool Init(); + // Main thread or after Init(). static already_AddRefed CreateDecoderModule(); + // Call (on any thread) after Init(). + static void GetRDFTFuncs(FFmpegRDFTFuncs* aOutFuncs); + private: + // Set once on the main thread and then read from other threads. static enum LinkStatus { LinkStatus_INIT = 0, LinkStatus_FAILED, diff --git a/dom/media/platforms/moz.build b/dom/media/platforms/moz.build index 8e89f88554..09d9afa4d2 100644 --- a/dom/media/platforms/moz.build +++ b/dom/media/platforms/moz.build @@ -43,6 +43,9 @@ if CONFIG['MOZ_WMF']: if CONFIG['MOZ_FFVPX'] or CONFIG['MOZ_FFMPEG']: # common code to either FFmpeg or FFVPX + EXPORTS += [ + 'ffmpeg/FFmpegRDFTTypes.h', + ] UNIFIED_SOURCES += [ 'ffmpeg/FFmpegLibWrapper.cpp', ]