diff --git a/libavcodec/alac.c b/libavcodec/alac.c index b143d3a9d472ce89980ec2a6587f413e6e30b38c..e99b12b0e022eabb2f860d2afbfef595e3c85e4f 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -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) {