Commit 76267e4e authored by Kostya Shishkov's avatar Kostya Shishkov

Implement missing case for decoding samples with large pivot value in APE

decoder.
This fixes issue 1555

Originally committed as revision 20560 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent e4de5b0f
...@@ -408,8 +408,24 @@ static inline int ape_decode_value(APEContext * ctx, APERice *rice) ...@@ -408,8 +408,24 @@ static inline int ape_decode_value(APEContext * ctx, APERice *rice)
overflow |= range_decode_bits(ctx, 16); overflow |= range_decode_bits(ctx, 16);
} }
base = range_decode_culfreq(ctx, pivot); if (pivot < 0x10000) {
range_decode_update(ctx, 1, base); 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; x = base + overflow * pivot;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment