summaryrefslogtreecommitdiff
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
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.
-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];