diff mbox series

[FFmpeg-devel,v2] avcodec/on2avc: use correct fft sizes

Message ID 20230806194131.6734-1-cus@passwd.hu
State Accepted
Commit 2eb7df1cbd30d7c104face1ac93bc32aba070d53
Headers show
Series [FFmpeg-devel,v2] avcodec/on2avc: use correct fft sizes | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Marton Balint Aug. 6, 2023, 7:41 p.m. UTC
Also rename the contexts and the functions so their names will reflect their
intended size.

With the earlier patch this fixes the audio corruption regression caused by
6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.

Fixes ticket #10029.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavcodec/on2avc.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

Comments

Lynne Aug. 7, 2023, 4:40 a.m. UTC | #1
Aug 6, 2023, 21:45 by cus@passwd.hu:

> Also rename the contexts and the functions so their names will reflect their
> intended size.
>
> With the earlier patch this fixes the audio corruption regression caused by
> 6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.
>
> Fixes ticket #10029.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavcodec/on2avc.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
> index 474adb149d..b190f36e19 100644
> --- a/libavcodec/on2avc.c
> +++ b/libavcodec/on2avc.c
> @@ -51,9 +51,9 @@ typedef struct On2AVCContext {
>  AVCodecContext *avctx;
>  AVFloatDSPContext *fdsp;
>  AVTXContext *mdct, *mdct_half, *mdct_small;
> -    AVTXContext *fft128, *fft256, *fft512, *fft1024;
> +    AVTXContext *fft64, *fft128, *fft256, *fft512;
>  av_tx_fn mdct_fn, mdct_half_fn, mdct_small_fn;
> -    av_tx_fn fft128_fn, fft256_fn, fft512_fn, fft1024_fn;
> +    av_tx_fn fft64_fn, fft128_fn, fft256_fn, fft512_fn;
>  void (*wtf)(struct On2AVCContext *ctx, float *out, float *in, int size);
>  
>  int is_av500;
> @@ -475,16 +475,16 @@ static void wtf_end_512(On2AVCContext *c, float *out, float *src,
>  zero_head_and_tail(tmp1 + 256, 128, 13, 7);
>  zero_head_and_tail(tmp1 + 384, 128, 15, 5);
>  
> -    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 128, tmp1 + 128, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 384, tmp1 + 384, sizeof(float));
> +    c->fft64_fn(c->fft64, src +   0, tmp1 +   0, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 128, tmp1 + 128, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 256, tmp1 + 256, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 384, tmp1 + 384, sizeof(float));
>  
>  combine_fft(src, src + 128, src + 256, src + 384, tmp1,
>  ff_on2avc_ctab_1, ff_on2avc_ctab_2,
>  ff_on2avc_ctab_3, ff_on2avc_ctab_4, 512, 2);
>  
> -    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
> +    c->fft256_fn(c->fft256, src, tmp1, sizeof(float));
>  
>  pretwiddle(&tmp0[  0], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
>  pretwiddle(&tmp0[128], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
> @@ -503,16 +503,16 @@ static void wtf_end_1024(On2AVCContext *c, float *out, float *src,
>  zero_head_and_tail(tmp1 + 512, 256, 13, 7);
>  zero_head_and_tail(tmp1 + 768, 256, 15, 5);
>  
> -    c->fft256_fn(c->fft256, src +   0, tmp1 +   0, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 256, tmp1 + 256, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 512, tmp1 + 512, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 768, tmp1 + 768, sizeof(float));
> +    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 512, tmp1 + 512, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 768, tmp1 + 768, sizeof(float));
>  
>  combine_fft(src, src + 256, src + 512, src + 768, tmp1,
>  ff_on2avc_ctab_1, ff_on2avc_ctab_2,
>  ff_on2avc_ctab_3, ff_on2avc_ctab_4, 1024, 1);
>  
> -    c->fft1024_fn(c->fft1024, src, tmp1, sizeof(float));
> +    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
>  
>  pretwiddle(&tmp0[  0], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
>  pretwiddle(&tmp0[256], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
> @@ -956,14 +956,14 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
>  if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
>  return ret;
>  
> -    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
> -        return ret;
>  if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
>  return ret;
> -    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
>  return ret;
>  if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
>  return ret;
> +    if ((ret = av_tx_init(&c->fft64, &c->fft64_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
> +        return ret;
>  
>  c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
>  if (!c->fdsp)
> @@ -998,10 +998,10 @@ static av_cold int on2avc_decode_close(AVCodecContext *avctx)
>  av_tx_uninit(&c->mdct);
>  av_tx_uninit(&c->mdct_half);
>  av_tx_uninit(&c->mdct_small);
> +    av_tx_uninit(&c->fft64);
>  av_tx_uninit(&c->fft128);
>  av_tx_uninit(&c->fft256);
>  av_tx_uninit(&c->fft512);
> -    av_tx_uninit(&c->fft1024);
>  
>  av_freep(&c->fdsp); 
>

LGTM
Thanks
Marton Balint Aug. 8, 2023, 5:36 p.m. UTC | #2
On Mon, 7 Aug 2023, Lynne wrote:

> Aug 6, 2023, 21:45 by cus@passwd.hu:
>
>> Also rename the contexts and the functions so their names will reflect their
>> intended size.
>>
>> With the earlier patch this fixes the audio corruption regression caused by
>> 6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.
>>
>> Fixes ticket #10029.
>>

[...]

>>
>
> LGTM
> Thanks

Will apply, thanks.

Marton
diff mbox series

Patch

diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
index 474adb149d..b190f36e19 100644
--- a/libavcodec/on2avc.c
+++ b/libavcodec/on2avc.c
@@ -51,9 +51,9 @@  typedef struct On2AVCContext {
     AVCodecContext *avctx;
     AVFloatDSPContext *fdsp;
     AVTXContext *mdct, *mdct_half, *mdct_small;
-    AVTXContext *fft128, *fft256, *fft512, *fft1024;
+    AVTXContext *fft64, *fft128, *fft256, *fft512;
     av_tx_fn mdct_fn, mdct_half_fn, mdct_small_fn;
-    av_tx_fn fft128_fn, fft256_fn, fft512_fn, fft1024_fn;
+    av_tx_fn fft64_fn, fft128_fn, fft256_fn, fft512_fn;
     void (*wtf)(struct On2AVCContext *ctx, float *out, float *in, int size);
 
     int is_av500;
@@ -475,16 +475,16 @@  static void wtf_end_512(On2AVCContext *c, float *out, float *src,
     zero_head_and_tail(tmp1 + 256, 128, 13, 7);
     zero_head_and_tail(tmp1 + 384, 128, 15, 5);
 
-    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
-    c->fft128_fn(c->fft128, src + 128, tmp1 + 128, sizeof(float));
-    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
-    c->fft128_fn(c->fft128, src + 384, tmp1 + 384, sizeof(float));
+    c->fft64_fn(c->fft64, src +   0, tmp1 +   0, sizeof(float));
+    c->fft64_fn(c->fft64, src + 128, tmp1 + 128, sizeof(float));
+    c->fft64_fn(c->fft64, src + 256, tmp1 + 256, sizeof(float));
+    c->fft64_fn(c->fft64, src + 384, tmp1 + 384, sizeof(float));
 
     combine_fft(src, src + 128, src + 256, src + 384, tmp1,
                 ff_on2avc_ctab_1, ff_on2avc_ctab_2,
                 ff_on2avc_ctab_3, ff_on2avc_ctab_4, 512, 2);
 
-    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
+    c->fft256_fn(c->fft256, src, tmp1, sizeof(float));
 
     pretwiddle(&tmp0[  0], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
     pretwiddle(&tmp0[128], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
@@ -503,16 +503,16 @@  static void wtf_end_1024(On2AVCContext *c, float *out, float *src,
     zero_head_and_tail(tmp1 + 512, 256, 13, 7);
     zero_head_and_tail(tmp1 + 768, 256, 15, 5);
 
-    c->fft256_fn(c->fft256, src +   0, tmp1 +   0, sizeof(float));
-    c->fft256_fn(c->fft256, src + 256, tmp1 + 256, sizeof(float));
-    c->fft256_fn(c->fft256, src + 512, tmp1 + 512, sizeof(float));
-    c->fft256_fn(c->fft256, src + 768, tmp1 + 768, sizeof(float));
+    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
+    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
+    c->fft128_fn(c->fft128, src + 512, tmp1 + 512, sizeof(float));
+    c->fft128_fn(c->fft128, src + 768, tmp1 + 768, sizeof(float));
 
     combine_fft(src, src + 256, src + 512, src + 768, tmp1,
                 ff_on2avc_ctab_1, ff_on2avc_ctab_2,
                 ff_on2avc_ctab_3, ff_on2avc_ctab_4, 1024, 1);
 
-    c->fft1024_fn(c->fft1024, src, tmp1, sizeof(float));
+    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
 
     pretwiddle(&tmp0[  0], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
     pretwiddle(&tmp0[256], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
@@ -956,14 +956,14 @@  static av_cold int on2avc_decode_init(AVCodecContext *avctx)
     if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
         return ret;
 
-    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
-        return ret;
     if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
         return ret;
-    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
         return ret;
     if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
         return ret;
+    if ((ret = av_tx_init(&c->fft64, &c->fft64_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
+        return ret;
 
     c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
     if (!c->fdsp)
@@ -998,10 +998,10 @@  static av_cold int on2avc_decode_close(AVCodecContext *avctx)
     av_tx_uninit(&c->mdct);
     av_tx_uninit(&c->mdct_half);
     av_tx_uninit(&c->mdct_small);
+    av_tx_uninit(&c->fft64);
     av_tx_uninit(&c->fft128);
     av_tx_uninit(&c->fft256);
     av_tx_uninit(&c->fft512);
-    av_tx_uninit(&c->fft1024);
 
     av_freep(&c->fdsp);