diff --git a/libavcodec/dsicinav.c b/libavcodec/dsicinav.c index cafcaa7719..245b569433 100644 --- a/libavcodec/dsicinav.c +++ b/libavcodec/dsicinav.c @@ -328,21 +328,24 @@ static int cinaudio_decode_frame(AVCodecContext *avctx, CinAudioContext *cin = avctx->priv_data; const uint8_t *src = buf; int16_t *samples = data; + int delta; buf_size = FFMIN(buf_size, *data_size/2); + delta = cin->delta; if (cin->initial_decode_frame) { cin->initial_decode_frame = 0; - cin->delta = (int16_t)AV_RL16(src); src += 2; - *samples++ = cin->delta; + delta = (int16_t)AV_RL16(src); src += 2; + *samples++ = delta; buf_size -= 2; } while (buf_size > 0) { - cin->delta += cinaudio_delta16_table[*src++]; - cin->delta = av_clip_int16(cin->delta); - *samples++ = cin->delta; + delta += cinaudio_delta16_table[*src++]; + delta = av_clip_int16(delta); + *samples++ = delta; --buf_size; } + cin->delta = delta; *data_size = (uint8_t *)samples - (uint8_t *)data;