diff mbox series

[FFmpeg-devel,2/3] avfft: wrap lavu/tx instead of ff_mdct

Message ID NaG5iBH--F-9@lynne.ee
State New
Headers show
Series [FFmpeg-devel,1/3] avfft: wrap lavu/tx instead of ff_fft | expand

Checks

Context Check Description
yinshiyou/configure_loongarch64 warning Failed to apply patch
andriy/configure_x86 warning Failed to apply patch

Commit Message

Lynne July 26, 2023, 7:30 a.m. UTC
Patch attached.
diff mbox series

Patch

From 593d95ce1d2510394c09ea64d8669973889d20e8 Mon Sep 17 00:00:00 2001
From: Lynne <dev@lynne.ee>
Date: Thu, 10 Nov 2022 11:26:33 +0100
Subject: [PATCH 2/3] avfft: wrap lavu/tx instead of ff_mdct

---
 libavcodec/avfft.c | 43 ++++++++++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/libavcodec/avfft.c b/libavcodec/avfft.c
index e4b19af272..ff5c739897 100644
--- a/libavcodec/avfft.c
+++ b/libavcodec/avfft.c
@@ -75,43 +75,56 @@  av_cold void av_fft_end(FFTContext *s)
     }
 }
 
-#if CONFIG_MDCT
-
 FFTContext *av_mdct_init(int nbits, int inverse, double scale)
 {
-    FFTContext *s = av_malloc(sizeof(*s));
+    int ret;
+    float scale_f = scale;
+    AVTXWrapper *s = av_malloc(sizeof(*s));
+    if (!s)
+        return NULL;
 
-    if (s && ff_mdct_init(s, nbits, inverse, scale))
-        av_freep(&s);
+    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_MDCT, inverse, 1 << (nbits - 1), &scale_f, 0);
+    if (ret < 0) {
+        av_free(s);
+        return NULL;
+    }
 
-    return s;
+    if (inverse) {
+        ret = av_tx_init(&s->ctx2, &s->fn2, AV_TX_FLOAT_MDCT, inverse, 1 << (nbits - 1),
+                         &scale_f, AV_TX_FULL_IMDCT);
+        if (ret < 0) {
+            av_tx_uninit(&s->ctx);
+            av_free(s);
+            return NULL;
+        }
+    }
+
+    return (FFTContext *)s;
 }
 
 void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
 {
-    s->imdct_calc(s, output, input);
+    AVTXWrapper *w = (AVTXWrapper *)s;
+    w->fn2(w->ctx2, output, (void *)input, sizeof(float));
 }
 
 void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input)
 {
-    s->imdct_half(s, output, input);
+    AVTXWrapper *w = (AVTXWrapper *)s;
+    w->fn(w->ctx, output, (void *)input, sizeof(float));
 }
 
 void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
 {
-    s->mdct_calc(s, output, input);
+    AVTXWrapper *w = (AVTXWrapper *)s;
+    w->fn(w->ctx, output, (void *)input, sizeof(float));
 }
 
 av_cold void av_mdct_end(FFTContext *s)
 {
-    if (s) {
-        ff_mdct_end(s);
-        av_free(s);
-    }
+    av_fft_end(s);
 }
 
-#endif /* CONFIG_MDCT */
-
 #if CONFIG_RDFT
 
 RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans)
-- 
2.40.1