adpcm: Write the proper predictor in trellis mode in IMA QT

The actual predictor value, set by the trellis code, never
was written back into the variable that was written into
the block header. This was accidentally removed in b304244b.

This significantly improves the audio quality of the trellis
case, which was plain broken since b304244b.

Encoding IMA QT with trellis still actually gives a slightly
worse quality than without trellis, since the trellis encoder
doesn't use the exact same way of rounding as in
adpcm_ima_qt_compress_sample and adpcm_ima_qt_expand_nibble.

Fixes part of Ticket3701

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Martin Storsjö 2014-06-06 12:03:09 +03:00 committed by Michael Niedermayer
parent fb7646d92c
commit fa8f060b75
2 changed files with 4 additions and 3 deletions

View File

@ -553,6 +553,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
64, 1);
for (i = 0; i < 64; i++)
put_bits(&pb, 4, buf[i ^ 1]);
status->prev_sample = status->predictor;
} else {
for (i = 0; i < 64; i += 2) {
int t1, t2;

View File

@ -1,4 +1,4 @@
9adceae86367ee131ca18f3fdf867d87 *tests/data/fate/acodec-adpcm-ima_qt-trellis.aiff
15f895c2e7119714f94333e3214d8426 *tests/data/fate/acodec-adpcm-ima_qt-trellis.aiff
281252 tests/data/fate/acodec-adpcm-ima_qt-trellis.aiff
3f53c10d523f26093103b058baada98c *tests/data/fate/acodec-adpcm-ima_qt-trellis.out.wav
stddev: 862.02 PSNR: 37.62 MAXDIFF:23859 bytes: 1058400/ 1058560
593d68369c87d4e3b7323b1bea3e9315 *tests/data/fate/acodec-adpcm-ima_qt-trellis.out.wav
stddev: 716.74 PSNR: 39.22 MAXDIFF:29633 bytes: 1058400/ 1058560