--- libavcodec/aacdec.c | 36 +++++++++++++----------------------- libavcodec/aacsbr.c | 5 ++--- 2 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 1c59ec5..385c8ae 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -843,13 +843,8 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) } } - if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) { - avctx->sample_fmt = AV_SAMPLE_FMT_FLT; - output_scale_factor = 1.0 / 32768.0; - } else { - avctx->sample_fmt = AV_SAMPLE_FMT_S16; - output_scale_factor = 1.0; - } + avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; + output_scale_factor = 1.0 / 32768.0; AAC_INIT_VLC_STATIC( 0, 304); AAC_INIT_VLC_STATIC( 1, 270); @@ -2473,6 +2468,8 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, samples <<= multiplier; if (samples) { + int ch; + /* get output buffer */ ac->frame.nb_samples = samples; if ((err = avctx->get_buffer(avctx, &ac->frame)) < 0) { @@ -2480,16 +2477,11 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, err = -1; goto fail; } - - if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) - ac->fmt_conv.float_interleave((float *)ac->frame.data[0], - (const float **)ac->output_data, - samples, avctx->channels); - else - ac->fmt_conv.float_to_int16_interleave((int16_t *)ac->frame.data[0], - (const float **)ac->output_data, - samples, avctx->channels); - + for (ch = 0; ch < avctx->channels; ch++) { + memcpy((float *)ac->frame.extended_data[ch], + ac->output_data[ch], + samples * sizeof(*ac->output_data[ch])); + } *(AVFrame *)data = ac->frame; } *got_frame_ptr = !!samples; @@ -2847,9 +2839,8 @@ AVCodec ff_aac_decoder = { .close = aac_decode_close, .decode = aac_decode_frame, .long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"), - .sample_fmts = (const enum AVSampleFormat[]) { - AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE - }, + .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, + AV_SAMPLE_FMT_NONE }, .capabilities = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1, .channel_layouts = aac_channel_layout, }; @@ -2868,9 +2859,8 @@ AVCodec ff_aac_latm_decoder = { .close = aac_decode_close, .decode = latm_decode_frame, .long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Coding LATM syntax)"), - .sample_fmts = (const enum AVSampleFormat[]) { - AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE - }, + .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, + AV_SAMPLE_FMT_NONE }, .capabilities = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1, .channel_layouts = aac_channel_layout, }; diff --git a/libavcodec/aacsbr.c b/libavcodec/aacsbr.c index 5eca115..c47a763 100644 --- a/libavcodec/aacsbr.c +++ b/libavcodec/aacsbr.c @@ -148,9 +148,8 @@ av_cold void ff_aac_sbr_ctx_init(AACContext *ac, SpectralBandReplication *sbr) /* SBR requires samples to be scaled to +/-32768.0 to work correctly. * mdct scale factors are adjusted to scale up from +/-1.0 at analysis * and scale back down at synthesis. */ - mdct_scale = ac->avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? 32768.0f : 1.0f; - ff_mdct_init(&sbr->mdct, 7, 1, 1.0 / (64 * mdct_scale)); - ff_mdct_init(&sbr->mdct_ana, 7, 1, -2.0 * mdct_scale); + ff_mdct_init(&sbr->mdct, 7, 1, 1.0 / (64 * 32768.0)); + ff_mdct_init(&sbr->mdct_ana, 7, 1, -2.0 * 32768.0); ff_ps_ctx_init(&sbr->ps); ff_sbrdsp_init(&sbr->dsp); } -- 1.7.1 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel