[FFmpeg-cvslog] adpcm: Write the proper predictor in trellis mode in IMA QT

Martin Storsjö git at videolan.org
Fri Jun 6 17:30:58 CEST 2014


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Fri Jun  6 12:03:09 2014 +0300| [fa8f060b75bf9074792a0f9ff4ed002652ef62b8] | committer: Michael Niedermayer

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 at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fa8f060b75bf9074792a0f9ff4ed002652ef62b8
---

 libavcodec/adpcmenc.c                 |    1 +
 tests/ref/acodec/adpcm-ima_qt-trellis |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c
index bfcce32..da149a3 100644
--- a/libavcodec/adpcmenc.c
+++ b/libavcodec/adpcmenc.c
@@ -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;
diff --git a/tests/ref/acodec/adpcm-ima_qt-trellis b/tests/ref/acodec/adpcm-ima_qt-trellis
index 796273a..0a09965 100644
--- a/tests/ref/acodec/adpcm-ima_qt-trellis
+++ b/tests/ref/acodec/adpcm-ima_qt-trellis
@@ -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



More information about the ffmpeg-cvslog mailing list