summaryrefslogtreecommitdiff
path: root/libavcodec
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
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')
-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];