|
|
@@ -408,8 +408,24 @@ static inline int ape_decode_value(APEContext * ctx, APERice *rice) |
|
|
|
overflow |= range_decode_bits(ctx, 16); |
|
|
|
} |
|
|
|
|
|
|
|
base = range_decode_culfreq(ctx, pivot); |
|
|
|
range_decode_update(ctx, 1, base); |
|
|
|
if (pivot < 0x10000) { |
|
|
|
base = range_decode_culfreq(ctx, pivot); |
|
|
|
range_decode_update(ctx, 1, base); |
|
|
|
} else { |
|
|
|
int base_hi = pivot, base_lo; |
|
|
|
int bbits = 0; |
|
|
|
|
|
|
|
while (base_hi & ~0xFFFF) { |
|
|
|
base_hi >>= 1; |
|
|
|
bbits++; |
|
|
|
} |
|
|
|
base_hi = range_decode_culfreq(ctx, base_hi + 1); |
|
|
|
range_decode_update(ctx, 1, base_hi); |
|
|
|
base_lo = range_decode_culfreq(ctx, 1 << bbits); |
|
|
|
range_decode_update(ctx, 1, base_lo); |
|
|
|
|
|
|
|
base = (base_hi << bbits) + base_lo; |
|
|
|
} |
|
|
|
|
|
|
|
x = base + overflow * pivot; |
|
|
|
} |
|
|
|