aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2023-08-06 12:14:04 +0200
committerMarton Balint <cus@passwd.hu>2023-08-08 18:33:21 +0200
commit2eb7df1cbd30d7c104face1ac93bc32aba070d53 (patch)
tree43cb597799e12f142dcc99ec8d1ae1368c0d325c
parentf296c765905ca110a05d77a7e919d992800d2e11 (diff)
downloadffmpeg-2eb7df1cbd30d7c104face1ac93bc32aba070d53.tar.gz
avcodec/on2avc: use correct fft sizes
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>
-rw-r--r--libavcodec/on2avc.c32
1 files 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);