diff --git a/libavcodec/dsicinav.c b/libavcodec/dsicinav.c
index cafcaa77194188cdceac8d4f5220b0a95d65cb37..245b569433690d062b4ebbf4973c20afc9624ad6 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;