summaryrefslogtreecommitdiff
path: root/libavcodec/atrac1.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-10-14 00:22:01 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2011-10-29 15:06:31 -0400
commit9a35ff384124a08209a8ee5355fdec93440d0e37 (patch)
tree585edbabf924ada88076cf8a9cb4744d168b7a87 /libavcodec/atrac1.c
parent33684b9c12b74c0140fb91e8150263db4a48d55e (diff)
atrac1: decode mono audio directly to output buffer
For stereo we need to use intermediate planar buffers, but mono does not need to be deinterleaved so the output buffer can be used directly.
Diffstat (limited to 'libavcodec/atrac1.c')
-rw-r--r--libavcodec/atrac1.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/libavcodec/atrac1.c b/libavcodec/atrac1.c
index 371f21ae3d..4647e0c351 100644
--- a/libavcodec/atrac1.c
+++ b/libavcodec/atrac1.c
@@ -310,15 +310,11 @@ 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, q->out_samples[ch]);
+ at1_subband_synthesis(q, su, q->channels == 1 ? samples : q->out_samples[ch]);
}
/* interleave; FIXME, should create/use a DSP function */
- if (q->channels == 1) {
- /* mono */
- memcpy(samples, q->out_samples[0], AT1_SU_SAMPLES * 4);
- } else {
- /* stereo */
+ if (q->channels == 2) {
for (i = 0; i < AT1_SU_SAMPLES; i++) {
samples[i * 2] = q->out_samples[0][i];
samples[i * 2 + 1] = q->out_samples[1][i];