Change k limiting code, i think the code was buggy.
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 17 Apr 2008 03:00:08 +0000 (03:00 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 17 Apr 2008 03:00:08 +0000 (03:00 +0000)
If you have ALAC files TEST them! Mine produce the same md5 but the new
code is not identical if limiting does happen.

Originally committed as revision 12872 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/alac.c

index b143d3a..e99b12b 100644 (file)
@@ -226,18 +226,20 @@ static void bastardized_rice_decompress(ALACContext *alac,
 
                 k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24;
 
-                extrabits = show_bits(&alac->gb, k);
+                if (k >= rice_kmodifier)
+                    k = rice_kmodifier;
 
-                block_size = (((1 << k) - 1) & rice_kmodifier_mask) * x
-                           + extrabits - 1;
+                x = (x << k) - x;
+
+                extrabits = show_bits(&alac->gb, k);
 
                 if (extrabits < 2) {
-                    x = 1 - extrabits;
-                    block_size += x;
                     skip_bits(&alac->gb, k - 1);
                 } else {
+                    x += extrabits - 1;
                     skip_bits(&alac->gb, k);
                 }
+                block_size = x;
             }
 
             if (block_size > 0) {