Browse Source

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
tags/v0.6
Kostya Shishkov 15 years ago
parent
commit
76267e4e90
1 changed files with 18 additions and 2 deletions
  1. +18
    -2
      libavcodec/apedec.c

+ 18
- 2
libavcodec/apedec.c View File

@@ -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;
}


Loading…
Cancel
Save