Browse Source

adpcmenc: Calculate the IMA_QT predictor without overflow

Previously, the value given to put_bits was 10 bits long for positive
predictors, even though 9 bits were to be written. The extra bit could
in some cases overwrite existing bits in the bitstream writer cache.

This fixes a failed assert in put_bits.h, when running a version
built with -DDEBUG.

The fate test result gets slightly improved, thanks to getting rid
of the overwritten bits in the bitstream writer cache.

Signed-off-by: Martin Storsjö <martin@martin.st>
tags/n1.0
Michael Niedermayer Martin Storsjö 12 years ago
parent
commit
aa264da5bf
2 changed files with 4 additions and 4 deletions
  1. +1
    -1
      libavcodec/adpcmenc.c
  2. +3
    -3
      tests/ref/fate/acodec-adpcm-ima_qt

+ 1
- 1
libavcodec/adpcmenc.c View File

@@ -570,7 +570,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
init_put_bits(&pb, dst, pkt_size * 8);

for (ch = 0; ch < avctx->channels; ch++) {
put_bits(&pb, 9, (c->status[ch].prev_sample + 0x10000) >> 7);
put_bits(&pb, 9, (c->status[ch].prev_sample & 0xFFFF) >> 7);
put_bits(&pb, 7, c->status[ch].step_index);
if (avctx->trellis > 0) {
uint8_t buf[64];


+ 3
- 3
tests/ref/fate/acodec-adpcm-ima_qt View File

@@ -1,4 +1,4 @@
057d27978b35888776512e4e9669a63b *tests/data/fate/acodec-adpcm-ima_qt.aiff
23cbae1182e150ebf28e0abfb9cba127 *tests/data/fate/acodec-adpcm-ima_qt.aiff
281252 tests/data/fate/acodec-adpcm-ima_qt.aiff
169c40435c68d50112c9c61fc67e446d *tests/data/fate/acodec-adpcm-ima_qt.out.wav
stddev: 918.61 PSNR: 37.07 MAXDIFF:34029 bytes: 1058400/ 1058560
b0fafd002c38fb70acaddfda1a31ed61 *tests/data/fate/acodec-adpcm-ima_qt.out.wav
stddev: 904.76 PSNR: 37.20 MAXDIFF:34029 bytes: 1058400/ 1058560

Loading…
Cancel
Save