diff options
author | Nicolas George | 2012-07-29 12:46:48 +0200 |
---|---|---|
committer | Nicolas George | 2012-07-31 17:23:31 +0200 |
commit | 7a539e67f4fc1cc6fa664e3ddc91aec26be5c61c (patch) | |
tree | bbbc9dd26124cfb9c2b321b39fd12eb0f15a3b0f /libavcodec | |
parent | 5caea648d40dd7a85304b8ca1257a3a9a729bbb4 (diff) |
8svx: unify mono and stereo code paths.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/8svx.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libavcodec/8svx.c b/libavcodec/8svx.c index 967b8c9bbf..e89b252218 100644 --- a/libavcodec/8svx.c +++ b/libavcodec/8svx.c @@ -121,8 +121,9 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, /* decompress */ if (esc->table) { const uint8_t *buf = avpkt->data; + uint8_t *dst; int buf_size = avpkt->size; - int n = esc->samples_size; + int i, n = esc->samples_size; if (buf_size < 2) { 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))) return AVERROR(ENOMEM); - p = deinterleaved_samples; + dst = p = deinterleaved_samples; /* 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 { deinterleaved_samples = avpkt->data; } |