aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2012-07-17 18:12:41 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2012-07-18 07:05:59 +0200
commit4cfb0d871d4885a88061410ab8f3583018c1ac57 (patch)
tree71ac26aa66c61c6af40c66688b8eb67c8e64fe16
parent3c6c19184c46f1d0d83f5aecb1bfaaa71d1cd367 (diff)
downloadffmpeg-4cfb0d871d4885a88061410ab8f3583018c1ac57.tar.gz
tscc2: do not add/subtract 128 bias during DCT
It turns out that the reference decoder subtracts 128 from DC during block decode but adds it back during reordering block with zigzag pattern. Transforming block with incorrect DC caused heavy visual artifacts for many quantisers.
-rw-r--r--libavcodec/tscc2.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/tscc2.c b/libavcodec/tscc2.c
index 91f79e249d..5248c9f4ec 100644
--- a/libavcodec/tscc2.c
+++ b/libavcodec/tscc2.c
@@ -95,7 +95,7 @@ static av_cold int init_vlcs(TSCC2Context *c)
OP(d3, 5 * ((s0) - (s1) + (s2)) - 2 * (s3)); \
#define COL_OP(a, b) a = b
-#define ROW_OP(a, b) a = (((b) + 0x20) >> 6) + 0x80
+#define ROW_OP(a, b) a = ((b) + 0x20) >> 6
static void tscc2_idct4_put(int *in, int q[3], uint8_t *dst, int stride)
{
@@ -158,7 +158,7 @@ static int tscc2_decode_mb(TSCC2Context *c, int *q, int vlc_set,
}
dc = (dc + prev_dc) & 0xFF;
prev_dc = dc;
- c->block[0] = dc - 0x80;
+ c->block[0] = dc;
nc = get_vlc2(gb, c->nc_vlc[vlc_set].table, 9, 1);
if (nc == -1)