| @@ -121,8 +121,9 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | |||||
| /* decompress */ | /* decompress */ | ||||
| if (esc->table) { | if (esc->table) { | ||||
| const uint8_t *buf = avpkt->data; | const uint8_t *buf = avpkt->data; | ||||
| uint8_t *dst; | |||||
| int buf_size = avpkt->size; | int buf_size = avpkt->size; | ||||
| int n = esc->samples_size; | |||||
| int i, n = esc->samples_size; | |||||
| if (buf_size < 2) { | if (buf_size < 2) { | ||||
| av_log(avctx, AV_LOG_ERROR, "packet size is too small\n"); | av_log(avctx, AV_LOG_ERROR, "packet size is too small\n"); | ||||
| @@ -130,15 +131,15 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | |||||
| } | } | ||||
| if (!(deinterleaved_samples = av_mallocz(n))) | if (!(deinterleaved_samples = av_mallocz(n))) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| p = deinterleaved_samples; | |||||
| dst = p = deinterleaved_samples; | |||||
| /* the uncompressed starting value is contained in the first byte */ | /* the uncompressed starting value is contained in the first byte */ | ||||
| if (avctx->channels == 2) { | |||||
| delta_decode(deinterleaved_samples , buf+1, buf_size/2-1, buf[0], esc->table); | |||||
| buf += buf_size/2; | |||||
| delta_decode(deinterleaved_samples+n/2-1, buf+1, buf_size/2-1, buf[0], esc->table); | |||||
| } else | |||||
| delta_decode(deinterleaved_samples , buf+1, buf_size-1 , buf[0], esc->table); | |||||
| dst = deinterleaved_samples; | |||||
| for (i = 0; i < avctx->channels; i++) { | |||||
| delta_decode(dst, buf + 1, buf_size / avctx->channels - 1, buf[0], esc->table); | |||||
| buf += buf_size / avctx->channels; | |||||
| dst += n / avctx->channels - 1; | |||||
| } | |||||
| } else { | } else { | ||||
| deinterleaved_samples = avpkt->data; | deinterleaved_samples = avpkt->data; | ||||
| } | } | ||||