diff --git a/libavcodec/alac.c b/libavcodec/alac.c index f146238327..4fa328539c 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -440,23 +440,29 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, switch(alac->sample_size) { case 16: { int16_t *outbuffer = ((int16_t *)alac->frame.extended_data[0]) + ch_index; - for (i = 0; i < alac->nb_samples; i++) + for (i = 0; i < alac->nb_samples; i++) { for (ch = 0; ch < channels; ch++) *outbuffer++ = alac->output_samples_buffer[ch][i]; + outbuffer += alac->channels - channels; + } } break; case 24: { int32_t *outbuffer = ((int32_t *)alac->frame.extended_data[0]) + ch_index; - for (i = 0; i < alac->nb_samples; i++) + for (i = 0; i < alac->nb_samples; i++) { for (ch = 0; ch < channels; ch++) *outbuffer++ = alac->output_samples_buffer[ch][i] << 8; + outbuffer += alac->channels - channels; + } } break; case 32: { int32_t *outbuffer = ((int32_t *)alac->frame.extended_data[0]) + ch_index; - for (i = 0; i < alac->nb_samples; i++) + for (i = 0; i < alac->nb_samples; i++) { for (ch = 0; ch < channels; ch++) *outbuffer++ = alac->output_samples_buffer[ch][i]; + outbuffer += alac->channels - channels; + } } break; }