diff options
author | Lynne <dev@lynne.ee> | 2022-11-01 09:44:27 +0100 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2022-11-06 14:39:40 +0100 |
commit | 34330adb29d67099ea86435a79161c872d720b7b (patch) | |
tree | 5936bd170c0004022c18dcd1a9e7d5bf7376731d /libavcodec/atrac3plusdec.c | |
parent | b59e6b5d99a851b4cf54ddfa5e8a666f05f01ed9 (diff) | |
download | ffmpeg-34330adb29d67099ea86435a79161c872d720b7b.tar.gz |
atrac3plus: convert to lavu/tx
Diffstat (limited to 'libavcodec/atrac3plusdec.c')
-rw-r--r-- | libavcodec/atrac3plusdec.c | 30 |
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. */ |