X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fatrac1.c;h=9a897852a7a2897bd6bd45b6ed4315700cdf63e5;hb=c9ef6b09326a24010bf86d6b0d19cfa42df4d546;hp=b746a54e3b38f910dc5041aaeb085f927bc21462;hpb=a38eadf7ed08293667c9f81780f7c081f278f19a;p=ffmpeg diff --git a/libavcodec/atrac1.c b/libavcodec/atrac1.c index b746a54e3b3..9a897852a7a 100644 --- a/libavcodec/atrac1.c +++ b/libavcodec/atrac1.c @@ -1,5 +1,5 @@ /* - * Atrac 1 compatible decoder + * ATRAC1 compatible decoder * Copyright (c) 2009 Maxim Poliakovski * Copyright (c) 2009 Benjamin Larsson * @@ -22,7 +22,7 @@ /** * @file - * Atrac 1 compatible decoder. + * ATRAC1 compatible decoder. * This decoder handles raw ATRAC1 data and probably SDDS data. */ @@ -32,10 +32,11 @@ #include #include +#include "libavutil/float_dsp.h" #include "avcodec.h" #include "get_bits.h" -#include "dsputil.h" #include "fft.h" +#include "internal.h" #include "sinewin.h" #include "atrac.h" @@ -71,7 +72,6 @@ typedef struct { * The atrac1 context, holds all needed parameters for decoding */ typedef struct { - AVFrame frame; AT1SUCtx SUs[AT1_MAX_CHANNELS]; ///< channel sound unit DECLARE_ALIGNED(32, float, spec)[AT1_SU_SAMPLES]; ///< the mdct spectrum buffer @@ -80,7 +80,7 @@ typedef struct { DECLARE_ALIGNED(32, float, high)[512]; float* bands[3]; FFTContext mdct_ctx[3]; - DSPContext dsp; + AVFloatDSPContext fdsp; } AT1Ctx; /** size of the transform in samples in the long mode for each QMF band */ @@ -140,8 +140,8 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q) at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos + start_pos], nbits, band_num); /* overlap and window */ - q->dsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf, - &su->spectrum[0][ref_pos + start_pos], ff_sine_32, 16); + q->fdsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf, + &su->spectrum[0][ref_pos + start_pos], ff_sine_32, 16); prev_buf = &su->spectrum[0][ref_pos+start_pos + 16]; start_pos += block_size; @@ -272,6 +272,7 @@ static void at1_subband_synthesis(AT1Ctx *q, AT1SUCtx* su, float *pOut) static int atrac1_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) { + AVFrame *frame = data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; AT1Ctx *q = avctx->priv_data; @@ -285,8 +286,8 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, } /* get output buffer */ - q->frame.nb_samples = AT1_SU_SAMPLES; - if ((ret = avctx->get_buffer(avctx, &q->frame)) < 0) { + frame->nb_samples = AT1_SU_SAMPLES; + if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } @@ -308,11 +309,10 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, ret = at1_imdct_block(su, q); if (ret < 0) return ret; - at1_subband_synthesis(q, su, (float *)q->frame.extended_data[ch]); + at1_subband_synthesis(q, su, (float *)frame->extended_data[ch]); } - *got_frame_ptr = 1; - *(AVFrame *)data = q->frame; + *got_frame_ptr = 1; return avctx->block_align; } @@ -356,7 +356,7 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx) ff_atrac_generate_tables(); - ff_dsputil_init(&q->dsp, avctx); + avpriv_float_dsp_init(&q->fdsp, avctx->flags & CODEC_FLAG_BITEXACT); q->bands[0] = q->low; q->bands[1] = q->mid; @@ -368,15 +368,13 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx) q->SUs[1].spectrum[0] = q->SUs[1].spec1; q->SUs[1].spectrum[1] = q->SUs[1].spec2; - avcodec_get_frame_defaults(&q->frame); - avctx->coded_frame = &q->frame; - return 0; } AVCodec ff_atrac1_decoder = { .name = "atrac1", + .long_name = NULL_IF_CONFIG_SMALL("ATRAC1 (Adaptive TRansform Acoustic Coding)"), .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_ATRAC1, .priv_data_size = sizeof(AT1Ctx), @@ -384,7 +382,6 @@ AVCodec ff_atrac1_decoder = { .close = atrac1_decode_end, .decode = atrac1_decode_frame, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("Atrac 1 (Adaptive TRansform Acoustic Coding)"), .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, };