From 854efdaeee4491cb5481021127f458a61934d47d Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 13 Jul 2008 14:08:28 +0000 Subject: [PATCH] Fix MS ADPCM de- and encoding: first and second sample are swapped. Noticeable better decoding of e.g. http://samples.mplayerhq.hu/A-codecs/msadpcm-stereo/dance-b5th.asf git-svn-id: file:///var/local/repositories/ffmpeg/trunk@14201 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b --- libavcodec/adpcm.c | 12 ++++++------ tests/ffmpeg.regression.ref | 6 +++--- tests/rotozoom.regression.ref | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index a9a8f74d9..b4b716f13 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -603,16 +603,16 @@ static int adpcm_encode_frame(AVCodecContext *avctx, bytestream_put_le16(&dst, c->status[i].idelta); } + for(i=0; ichannels; i++){ + c->status[i].sample2= *samples++; + } for(i=0; ichannels; i++){ c->status[i].sample1= *samples++; bytestream_put_le16(&dst, c->status[i].sample1); } - for(i=0; ichannels; i++){ - c->status[i].sample2= *samples++; - + for(i=0; ichannels; i++) bytestream_put_le16(&dst, c->status[i].sample2); - } if(avctx->trellis > 0) { int n = avctx->block_align - 7*avctx->channels; @@ -1050,10 +1050,10 @@ static int adpcm_decode_frame(AVCodecContext *avctx, if (st) c->status[1].sample2 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); if (st) src+=2; - *samples++ = c->status[0].sample1; - if (st) *samples++ = c->status[1].sample1; *samples++ = c->status[0].sample2; if (st) *samples++ = c->status[1].sample2; + *samples++ = c->status[0].sample1; + if (st) *samples++ = c->status[1].sample1; for(;n>0;n--) { *samples++ = adpcm_ms_expand_nibble(&c->status[0 ], src[0] >> 4 ); *samples++ = adpcm_ms_expand_nibble(&c->status[st], src[0] & 0x0F); diff --git a/tests/ffmpeg.regression.ref b/tests/ffmpeg.regression.ref index 75f51af42..7bdea4db9 100644 --- a/tests/ffmpeg.regression.ref +++ b/tests/ffmpeg.regression.ref @@ -181,10 +181,10 @@ efdae2746040dbc27be402b149556f1e *./tests/data/a-adpcm_qt.aiff 281184 ./tests/data/a-adpcm_qt.aiff 5a2084ad27674d5cf3bc2945061e7910 *./tests/data/adpcm_ima_qt.vsynth.out.wav stddev:915.35 PSNR:37.09 bytes:1056768 -628d4789cf9ee16a756ac54b7fd8650d *./tests/data/a-adpcm_ms.wav +88a0c48c9bc6d50a84c408151c6a3d64 *./tests/data/a-adpcm_ms.wav 267320 ./tests/data/a-adpcm_ms.wav -91a84bb4f319a3a0bf0c0441b3d3a529 *./tests/data/adpcm_ms.vsynth.out.wav -stddev:1050.18 PSNR:35.89 bytes:1054720 +d5f98f5136040be42232a34df92d61f2 *./tests/data/adpcm_ms.vsynth.out.wav +stddev:1051.84 PSNR:35.88 bytes:1054720 ab11d9151644cbff27827b7e89f37aa9 *./tests/data/a-adpcm_yam.wav 264248 ./tests/data/a-adpcm_yam.wav e92cec8c07913ffb91ad2b11f79cdc00 *./tests/data/adpcm_yam.vsynth.out.wav diff --git a/tests/rotozoom.regression.ref b/tests/rotozoom.regression.ref index 054145a6b..eaab2cc42 100644 --- a/tests/rotozoom.regression.ref +++ b/tests/rotozoom.regression.ref @@ -181,10 +181,10 @@ efdae2746040dbc27be402b149556f1e *./tests/data/a-adpcm_qt.aiff 281184 ./tests/data/a-adpcm_qt.aiff 5a2084ad27674d5cf3bc2945061e7910 *./tests/data/adpcm_ima_qt.rotozoom.out.wav stddev:915.35 PSNR:37.09 bytes:1056768 -628d4789cf9ee16a756ac54b7fd8650d *./tests/data/a-adpcm_ms.wav +88a0c48c9bc6d50a84c408151c6a3d64 *./tests/data/a-adpcm_ms.wav 267320 ./tests/data/a-adpcm_ms.wav -91a84bb4f319a3a0bf0c0441b3d3a529 *./tests/data/adpcm_ms.rotozoom.out.wav -stddev:1050.18 PSNR:35.89 bytes:1054720 +d5f98f5136040be42232a34df92d61f2 *./tests/data/adpcm_ms.rotozoom.out.wav +stddev:1051.84 PSNR:35.88 bytes:1054720 ab11d9151644cbff27827b7e89f37aa9 *./tests/data/a-adpcm_yam.wav 264248 ./tests/data/a-adpcm_yam.wav e92cec8c07913ffb91ad2b11f79cdc00 *./tests/data/adpcm_yam.rotozoom.out.wav -- 2.39.2