summaryrefslogtreecommitdiff
path: root/libavcodec/dca.c
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2011-04-25 12:27:12 +0200
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2011-04-25 16:51:27 +0200
commitbde96717957f1cac953806f1717b935f9c191c87 (patch)
tree0f531e5cbfbebf0e0d3f7bf6cb4fbc7f4e75344f /libavcodec/dca.c
parent5aff31b136af6496d2f7c5e52eb37f577b54832b (diff)
dca: allow selecting float output at runtime.
Diffstat (limited to 'libavcodec/dca.c')
-rw-r--r--libavcodec/dca.c28
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;