From 289020a67079c60f824bc0fd732f1342c2a0c4f4 Mon Sep 17 00:00:00 2001 From: trav90 Date: Wed, 20 Sep 2023 13:38:05 -0500 Subject: [PATCH] Issue #2311 - Part 2 - Link ffmpeg real DFT functions --- .../platforms/ffmpeg/FFmpegLibWrapper.cpp | 3 +++ dom/media/platforms/ffmpeg/FFmpegLibWrapper.h | 6 +++++ dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h | 27 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h diff --git a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp index 5232a600c3..0f3a5e6dae 100644 --- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp +++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp @@ -147,6 +147,9 @@ FFmpegLibWrapper::Link() AV_FUNC(avcodec_free_frame, AV_FUNC_54) AV_FUNC(avcodec_send_packet, AV_FUNC_58) AV_FUNC(avcodec_receive_frame, AV_FUNC_58) + AV_FUNC_OPTION(av_rdft_init, AV_FUNC_AVCODEC_ALL) + AV_FUNC_OPTION(av_rdft_calc, AV_FUNC_AVCODEC_ALL) + AV_FUNC_OPTION(av_rdft_end, AV_FUNC_AVCODEC_ALL) AV_FUNC(av_log_set_level, AV_FUNC_AVUTIL_ALL) AV_FUNC(av_malloc, AV_FUNC_AVUTIL_ALL) AV_FUNC(av_freep, AV_FUNC_AVUTIL_ALL) diff --git a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.h b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.h index 807984b01d..2668950f46 100644 --- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.h +++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.h @@ -5,6 +5,7 @@ #ifndef __FFmpegLibWrapper_h__ #define __FFmpegLibWrapper_h__ +#include "FFmpegRDFTTypes.h" // for AvRdftInitFn, etc. #include "mozilla/Attributes.h" #include "mozilla/Types.h" @@ -75,6 +76,11 @@ struct FFmpegLibWrapper int (*avcodec_send_packet)(AVCodecContext* avctx, const AVPacket* avpkt); int (*avcodec_receive_frame)(AVCodecContext* avctx, AVFrame* frame); + // libavcodec optional + AvRdftInitFn av_rdft_init; + AvRdftCalcFn av_rdft_calc; + AvRdftEndFn av_rdft_end; + // libavutil void (*av_log_set_level)(int level); void* (*av_malloc)(size_t size); diff --git a/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h b/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h new file mode 100644 index 0000000000..679d12ceba --- /dev/null +++ b/dom/media/platforms/ffmpeg/FFmpegRDFTTypes.h @@ -0,0 +1,27 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#ifndef FFmpegRDFTTypes_h +#define FFmpegRDFTTypes_h + +struct RDFTContext; + +typedef float FFTSample; + +enum RDFTransformType { + DFT_R2C, + IDFT_C2R, + IDFT_R2C, + DFT_C2R, +}; + +extern "C" { + + typedef RDFTContext* (*AvRdftInitFn)(int nbits, enum RDFTransformType trans); + typedef void (*AvRdftCalcFn)(RDFTContext *s, FFTSample *data); + typedef void (*AvRdftEndFn)(RDFTContext *s); + +} + +#endif // FFmpegRDFTTypes_h