summaryrefslogtreecommitdiff
path: root/libavcodec/atrac3plusdec.c
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2022-11-01 09:44:27 +0100
committerLynne <dev@lynne.ee>2022-11-06 14:39:40 +0100
commit34330adb29d67099ea86435a79161c872d720b7b (patch)
tree5936bd170c0004022c18dcd1a9e7d5bf7376731d /libavcodec/atrac3plusdec.c
parentb59e6b5d99a851b4cf54ddfa5e8a666f05f01ed9 (diff)
downloadffmpeg-34330adb29d67099ea86435a79161c872d720b7b.tar.gz
atrac3plus: convert to lavu/tx
Diffstat (limited to 'libavcodec/atrac3plusdec.c')
-rw-r--r--libavcodec/atrac3plusdec.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/libavcodec/atrac3plusdec.c b/libavcodec/atrac3plusdec.c
index 2bc023cb23..aa4d42f44a 100644
--- a/libavcodec/atrac3plusdec.c
+++ b/libavcodec/atrac3plusdec.c
@@ -69,8 +69,10 @@ typedef struct ATRAC3PContext {
DECLARE_ALIGNED(32, float, outp_buf)[2][ATRAC3P_FRAME_SAMPLES];
AtracGCContext gainc_ctx; ///< gain compensation context
- FFTContext mdct_ctx;
- FFTContext ipqf_dct_ctx; ///< IDCT context used by IPQF
+ AVTXContext *mdct_ctx;
+ av_tx_fn mdct_fn;
+ AVTXContext *ipqf_dct_ctx; ///< IDCT context used by IPQF
+ av_tx_fn ipqf_dct_fn;
Atrac3pChanUnitCtx *ch_units; ///< global channel units
@@ -86,8 +88,8 @@ static av_cold int atrac3p_decode_close(AVCodecContext *avctx)
av_freep(&ctx->ch_units);
av_freep(&ctx->fdsp);
- ff_mdct_end(&ctx->mdct_ctx);
- ff_mdct_end(&ctx->ipqf_dct_ctx);
+ av_tx_uninit(&ctx->mdct_ctx);
+ av_tx_uninit(&ctx->ipqf_dct_ctx);
return 0;
}
@@ -170,6 +172,7 @@ static av_cold int atrac3p_decode_init(AVCodecContext *avctx)
{
static AVOnce init_static_once = AV_ONCE_INIT;
ATRAC3PContext *ctx = avctx->priv_data;
+ float scale;
int i, ch, ret;
if (!avctx->block_align) {
@@ -178,9 +181,17 @@ static av_cold int atrac3p_decode_init(AVCodecContext *avctx)
}
/* initialize IPQF */
- ff_mdct_init(&ctx->ipqf_dct_ctx, 5, 1, 32.0 / 32768.0);
+ scale = 32.0 / 32768.0;
+ ret = av_tx_init(&ctx->ipqf_dct_ctx, &ctx->ipqf_dct_fn, AV_TX_FLOAT_MDCT,
+ 1, 16, &scale, 0);
+ if (ret < 0)
+ return ret;
- ff_atrac3p_init_imdct(avctx, &ctx->mdct_ctx);
+ scale = -1.0f;
+ ret = av_tx_init(&ctx->mdct_ctx, &ctx->mdct_fn, AV_TX_FLOAT_MDCT,
+ 1, 128, &scale, AV_TX_FULL_IMDCT);
+ if (ret < 0)
+ return ret;
ff_atrac_init_gain_compensation(&ctx->gainc_ctx, 6, 2);
@@ -288,7 +299,7 @@ static void reconstruct_frame(ATRAC3PContext *ctx, Atrac3pChanUnitCtx *ch_unit,
for (ch = 0; ch < num_channels; ch++) {
for (sb = 0; sb < ch_unit->num_subbands; sb++) {
/* inverse transform and windowing */
- ff_atrac3p_imdct(ctx->fdsp, &ctx->mdct_ctx,
+ ff_atrac3p_imdct(ctx->fdsp, ctx->mdct_ctx, ctx->mdct_fn,
&ctx->samples[ch][sb * ATRAC3P_SUBBAND_SAMPLES],
&ctx->mdct_buf[ch][sb * ATRAC3P_SUBBAND_SAMPLES],
(ch_unit->channels[ch].wnd_shape_prev[sb] << 1) +
@@ -328,8 +339,9 @@ static void reconstruct_frame(ATRAC3PContext *ctx, Atrac3pChanUnitCtx *ch_unit,
}
/* subband synthesis and acoustic signal output */
- ff_atrac3p_ipqf(&ctx->ipqf_dct_ctx, &ch_unit->ipqf_ctx[ch],
- &ctx->time_buf[ch][0], &ctx->outp_buf[ch][0]);
+ ff_atrac3p_ipqf(ctx->ipqf_dct_ctx, ctx->ipqf_dct_fn,
+ &ch_unit->ipqf_ctx[ch], &ctx->time_buf[ch][0],
+ &ctx->outp_buf[ch][0]);
}
/* swap window shape and gain control buffers. */