|
|
|
@@ -109,7 +109,7 @@ typedef struct ATRAC3Context { |
|
|
|
AtracGCContext gainc_ctx; |
|
|
|
FFTContext mdct_ctx; |
|
|
|
FmtConvertContext fmt_conv; |
|
|
|
AVFloatDSPContext fdsp; |
|
|
|
AVFloatDSPContext *fdsp; |
|
|
|
} ATRAC3Context; |
|
|
|
|
|
|
|
static DECLARE_ALIGNED(32, float, mdct_window)[MDCT_SIZE]; |
|
|
|
@@ -142,7 +142,7 @@ static void imlt(ATRAC3Context *q, float *input, float *output, int odd_band) |
|
|
|
q->mdct_ctx.imdct_calc(&q->mdct_ctx, output, input); |
|
|
|
|
|
|
|
/* Perform windowing on the output. */ |
|
|
|
q->fdsp.vector_fmul(output, output, mdct_window, MDCT_SIZE); |
|
|
|
q->fdsp->vector_fmul(output, output, mdct_window, MDCT_SIZE); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
@@ -192,6 +192,7 @@ static av_cold int atrac3_decode_close(AVCodecContext *avctx) |
|
|
|
|
|
|
|
av_freep(&q->units); |
|
|
|
av_freep(&q->decoded_bytes_buffer); |
|
|
|
av_freep(&q->fdsp); |
|
|
|
|
|
|
|
ff_mdct_end(&q->mdct_ctx); |
|
|
|
|
|
|
|
@@ -915,11 +916,11 @@ static av_cold int atrac3_decode_init(AVCodecContext *avctx) |
|
|
|
} |
|
|
|
|
|
|
|
ff_atrac_init_gain_compensation(&q->gainc_ctx, 4, 3); |
|
|
|
avpriv_float_dsp_init(&q->fdsp, avctx->flags & CODEC_FLAG_BITEXACT); |
|
|
|
q->fdsp = avpriv_float_dsp_alloc(avctx->flags & CODEC_FLAG_BITEXACT); |
|
|
|
ff_fmt_convert_init(&q->fmt_conv, avctx); |
|
|
|
|
|
|
|
q->units = av_mallocz_array(avctx->channels, sizeof(*q->units)); |
|
|
|
if (!q->units) { |
|
|
|
if (!q->units || !q->fdsp) { |
|
|
|
atrac3_decode_close(avctx); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|