diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-04-25 12:27:12 +0200 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-04-25 16:51:27 +0200 |
commit | bde96717957f1cac953806f1717b935f9c191c87 (patch) | |
tree | 0f531e5cbfbebf0e0d3f7bf6cb4fbc7f4e75344f | |
parent | 5aff31b136af6496d2f7c5e52eb37f577b54832b (diff) | |
download | ffmpeg-bde96717957f1cac953806f1717b935f9c191c87.tar.gz |
dca: allow selecting float output at runtime.
-rw-r--r-- | libavcodec/dca.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/libavcodec/dca.c b/libavcodec/dca.c index 2053121dc6..a615d5d18b 100644 --- a/libavcodec/dca.c +++ b/libavcodec/dca.c @@ -1626,12 +1626,8 @@ static int dca_decode_frame(AVCodecContext * avctx, int lfe_samples; int num_core_channels = 0; int i; - /* ffdshow custom code */ -#if CONFIG_AUDIO_FLOAT - float *samples = data; -#else + float *samples_flt = data; int16_t *samples = data; -#endif DCAContext *s = avctx->priv_data; int channels; int core_ss_end; @@ -1840,13 +1836,13 @@ static int dca_decode_frame(AVCodecContext * avctx, } /* interleave samples */ -#if CONFIG_AUDIO_FLOAT - /* ffdshow custom code */ - float_interleave(samples, s->samples_chanptr, 256, channels); -#else - s->fmt_conv.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels); -#endif - samples += 256 * channels; + if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) { + float_interleave(samples_flt, s->samples_chanptr, 256, channels); + samples_flt += 256 * channels; + } else { + s->fmt_conv.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels); + samples += 256 * channels; + } } /* update lfe history */ @@ -1882,12 +1878,8 @@ static av_cold int dca_decode_init(AVCodecContext * avctx) for (i = 0; i < DCA_PRIM_CHANNELS_MAX+1; i++) s->samples_chanptr[i] = s->samples + i * 256; - /* 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; s->scale_bias = 1.0; |