]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/wmalosslessdec.c
Merge remote-tracking branch 'shariman/wmall'
[ffmpeg] / libavcodec / wmalosslessdec.c
index a26c2a72445c068a1353f1889e4ee94fc6d4c182..42ff5838cb4bf5e8062981f0df2534f0224c06b9 100644 (file)
@@ -789,7 +789,7 @@ static void reset_codec(WmallDecodeCtx *s)
 
 static int lms_predict(WmallDecodeCtx *s, int ich, int ilms)
 {
-    int32_t pred, icoef;
+    int32_t pred = 0, icoef;
     int recent = s->cdlms[ich][ilms].recent;
 
     for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
@@ -857,7 +857,7 @@ static void use_high_update_speed(WmallDecodeCtx *s, int ich)
 {
     int ilms, recent, icoef;
     s->update_speed[ich] = 16;
-    for (ilms = s->cdlms_ttl[ich]; ilms >= 0; ilms--) {
+    for (ilms = s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
         recent = s->cdlms[ich][ilms].recent;
         if (s->bV3RTM) {
             for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
@@ -873,7 +873,7 @@ static void use_normal_update_speed(WmallDecodeCtx *s, int ich)
 {
     int ilms, recent, icoef;
     s->update_speed[ich] = 8;
-    for (ilms = s->cdlms_ttl[ich]; ilms >= 0; ilms--) {
+    for (ilms = s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
         recent = s->cdlms[ich][ilms].recent;
         if (s->bV3RTM) {
             for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
@@ -901,7 +901,7 @@ static void revert_cdlms(WmallDecodeCtx *s, int tile_size)
                 s->transient[ich] = 1;
                 use_high_update_speed(s, ich);
             }
-            for (ilms = num_lms; ilms >= 0; ilms--) {
+            for (ilms = num_lms - 1; ilms >= 0; ilms--) {
                 pred = lms_predict(s, ich, ilms);
                 channel_coeff += pred;
                 lms_update(s, ich, ilms, channel_coeff, pred);
@@ -1044,6 +1044,7 @@ static int decode_subframe(WmallDecodeCtx *s)
            if(s->is_channel_coded[i])
                decode_channel_residues(s, i, subframe_len);
     }
+    revert_cdlms(s, subframe_len);
 
     /** handled one subframe */