aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ross <pross@xvid.org>2022-11-01 09:24:29 +1100
committerPeter Ross <pross@xvid.org>2022-11-01 09:24:29 +1100
commit6fe8556a19c4494d4312f81c2fb7d4402b31b2eb (patch)
tree861343eaf524fb77edb377f2a784c85ce04c1f92
parentb0c1f248d9dd5b21d9c11e4e28b8862548d64cbd (diff)
downloadffmpeg-6fe8556a19c4494d4312f81c2fb7d4402b31b2eb.tar.gz
avcodec/svq1: fix interframe mean VLC symbols
Fixes ticket #128. The SVQ1 interframe mean VLC symbols -128 and 128 are incorrectly swapped in our SVQ1 implementation, resulting in visible artifacts for some videos. This patch unswaps the order of these two symbols. The most noticable example of the artiacts caused by this error can be observed in https://trac.ffmpeg.org/attachment/ticket/128/svq1_set.7z '352_288_k_50.mov'. The artifacts are not observed when using the reference decoder (QuickTime 7.7.9 x86 binary). As a result of this patch, the reference data for the fate-svq1 test ($SAMPLES/svq1/marymary-shackles.mov) must be modified. For this file, our decoder output is now bitwise identical to the reference decoder. I have tested patch with various other samples and they are all now bitwise identical.
-rw-r--r--libavcodec/svq1_vlc.h4
-rw-r--r--tests/ref/fate/svq122
2 files changed, 13 insertions, 13 deletions
diff --git a/libavcodec/svq1_vlc.h b/libavcodec/svq1_vlc.h
index 06e3509e4d..5c27928c2a 100644
--- a/libavcodec/svq1_vlc.h
+++ b/libavcodec/svq1_vlc.h
@@ -167,7 +167,7 @@ const uint16_t ff_svq1_inter_mean_vlc[512][2] = {
{ 0xA0, 22 }, { 0xA1, 22 }, { 0xA2, 22 }, { 0xA3, 22 },
{ 0xA4, 22 }, { 0xA5, 22 }, { 0xA6, 22 }, { 0xA7, 22 },
{ 0xA8, 22 }, { 0xA9, 22 }, { 0xAA, 22 }, { 0xAB, 22 },
- { 0x7F, 22 }, { 0x8F, 21 }, { 0xAC, 22 }, { 0xAD, 22 },
+ { 0x8E, 21 }, { 0x8F, 21 }, { 0xAC, 22 }, { 0xAD, 22 },
{ 0xAE, 22 }, { 0xAF, 22 }, { 0xB0, 22 }, { 0xB1, 22 },
{ 0x53, 20 }, { 0x90, 21 }, { 0xB2, 22 }, { 0x91, 21 },
{ 0xB3, 22 }, { 0xB4, 22 }, { 0x54, 20 }, { 0xB5, 22 },
@@ -231,7 +231,7 @@ const uint16_t ff_svq1_inter_mean_vlc[512][2] = {
{ 0x87, 21 }, { 0x4F, 20 }, { 0x35, 19 }, { 0x4E, 20 },
{ 0x33, 19 }, { 0x32, 19 }, { 0x4D, 20 }, { 0x4C, 20 },
{ 0x83, 22 }, { 0x4B, 20 }, { 0x81, 22 }, { 0x80, 22 },
- { 0x8E, 21 }, { 0x7E, 22 }, { 0x7D, 22 }, { 0x84, 21 },
+ { 0x7F, 22 }, { 0x7E, 22 }, { 0x7D, 22 }, { 0x84, 21 },
{ 0x8D, 21 }, { 0x7A, 22 }, { 0x79, 22 }, { 0x4A, 20 },
{ 0x77, 22 }, { 0x76, 22 }, { 0x89, 21 }, { 0x74, 22 },
{ 0x73, 22 }, { 0x72, 22 }, { 0x49, 20 }, { 0x70, 22 },
diff --git a/tests/ref/fate/svq1 b/tests/ref/fate/svq1
index d53e2952e4..0b0948cce6 100644
--- a/tests/ref/fate/svq1
+++ b/tests/ref/fate/svq1
@@ -24,19 +24,19 @@
0, 18, 18, 1, 21600, 0x8d5b2ad0
0, 19, 19, 1, 21600, 0xe67128e6
0, 20, 20, 1, 21600, 0xb7bf613e
-0, 21, 21, 1, 21600, 0xefd0f51b
-0, 22, 22, 1, 21600, 0x31b7da59
+0, 21, 21, 1, 21600, 0xf697fa3e
+0, 22, 22, 1, 21600, 0x5b6ede88
0, 23, 23, 1, 21600, 0x7a84a8f7
0, 24, 24, 1, 21600, 0x0351ad27
-0, 25, 25, 1, 21600, 0xed6f434d
-0, 26, 26, 1, 21600, 0x0e771127
-0, 27, 27, 1, 21600, 0x37bf0b95
-0, 28, 28, 1, 21600, 0x30e10a77
-0, 29, 29, 1, 21600, 0x1a48288a
-0, 30, 30, 1, 21600, 0xf43c6770
-0, 31, 31, 1, 21600, 0x3c43ae68
-0, 32, 32, 1, 21600, 0x04dc0949
-0, 33, 33, 1, 21600, 0x7920758d
+0, 25, 25, 1, 21600, 0x57b547c2
+0, 26, 26, 1, 21600, 0xbb9e1558
+0, 27, 27, 1, 21600, 0xcb470f6b
+0, 28, 28, 1, 21600, 0xeb100de0
+0, 29, 29, 1, 21600, 0x089c2bf0
+0, 30, 30, 1, 21600, 0xe27b6a42
+0, 31, 31, 1, 21600, 0xbfe2b11b
+0, 32, 32, 1, 21600, 0xd9ca0bb5
+0, 33, 33, 1, 21600, 0x12fe783c
0, 34, 34, 1, 21600, 0x6c12bab5
0, 35, 35, 1, 21600, 0x1ac23706
0, 36, 36, 1, 21600, 0x7a95cb5f