diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-04-25 12:16:40 +0200 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-04-25 16:51:27 +0200 |
commit | 26d5a4b6b496dce0573bd0f5e4af5150899eb3ec (patch) | |
tree | a40b3bb6e8181c22ad9fc849856d6ca76c9306bc /libavcodec/aacdec.c | |
parent | 4c7ad768e1356edd7addc6af2c3f0d3ca90ac408 (diff) | |
download | ffmpeg-streaming-26d5a4b6b496dce0573bd0f5e4af5150899eb3ec.zip ffmpeg-streaming-26d5a4b6b496dce0573bd0f5e4af5150899eb3ec.tar.gz |
aacdec: Allow selecting float output at runtime.
Diffstat (limited to 'libavcodec/aacdec.c')
-rw-r--r-- | libavcodec/aacdec.c | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 7b1e501..96b1323 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -557,12 +557,8 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) return -1; } - /* ffdshow custom code */ -#if CONFIG_AUDIO_FLOAT - avctx->sample_fmt = AV_SAMPLE_FMT_FLT; -#else - avctx->sample_fmt = AV_SAMPLE_FMT_S16; -#endif + avctx->sample_fmt = avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT ? + AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16; AAC_INIT_VLC_STATIC( 0, 304); AAC_INIT_VLC_STATIC( 1, 270); @@ -2179,12 +2175,8 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, avctx->frame_size = samples; } - /* ffdshow custom code */ -#if CONFIG_AUDIO_FLOAT - data_size_tmp = samples * avctx->channels * sizeof(float); -#else - data_size_tmp = samples * avctx->channels * sizeof(int16_t); -#endif + data_size_tmp = samples * avctx->channels; + data_size_tmp *= avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? sizeof(float) : sizeof(int16_t); if (*data_size < data_size_tmp) { av_log(avctx, AV_LOG_ERROR, "Output buffer too small (%d) or trying to output too many samples (%d) for this frame.\n", @@ -2194,12 +2186,10 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, *data_size = data_size_tmp; if (samples) { - /* ffdshow custom code */ -#if CONFIG_AUDIO_FLOAT - float_interleave(data, (const float **)ac->output_data, samples, avctx->channels); -#else - ac->fmt_conv.float_to_int16_interleave(data, (const float **)ac->output_data, samples, avctx->channels); -#endif + if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) { + float_interleave(data, (const float **)ac->output_data, samples, avctx->channels); + } else + ac->fmt_conv.float_to_int16_interleave(data, (const float **)ac->output_data, samples, avctx->channels); } if (ac->output_configured) @@ -2518,11 +2508,7 @@ AVCodec ff_aac_decoder = { aac_decode_frame, .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"), .sample_fmts = (const enum AVSampleFormat[]) { -#if CONFIG_AUDIO_FLOAT - AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE -#else - AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE -#endif + AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE }, .channel_layouts = aac_channel_layout, }; @@ -2542,11 +2528,7 @@ AVCodec ff_aac_latm_decoder = { .decode = latm_decode_frame, .long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Codec LATM syntax)"), .sample_fmts = (const enum AVSampleFormat[]) { -#if CONFIG_AUDIO_FLOAT - AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE -#else - AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE -#endif + AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE }, .channel_layouts = aac_channel_layout, }; |