From a52f443714b5c2a40ed272d8445f4c39220a4b69 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 28 Sep 2014 14:00:06 +0200 Subject: [PATCH] avcodec/vc1dec: fix is_intra block vs. mb bug Fixes CID1194380 There are no vissible differences in the changed fate samples. Only a tiny number of pixels change by tiny amounts in the frames i checked If someone has a file that shows a vissible difference, please post it. Signed-off-by: Michael Niedermayer --- libavcodec/vc1dec.c | 24 ++++---- tests/ref/fate/vc1_sa00040 | 10 ++-- tests/ref/fate/vc1_sa10091 | 40 ++++++------- tests/ref/fate/vc1_sa20021 | 116 ++++++++++++++++++------------------- 4 files changed, 95 insertions(+), 95 deletions(-) diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 72c8327554..8368781385 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -3379,7 +3379,7 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_ int mb_cbp = v->cbp[s->mb_x - s->mb_stride], block_cbp = mb_cbp >> (block_num * 4), bottom_cbp, mb_is_intra = v->is_intra[s->mb_x - s->mb_stride], - block_is_intra = mb_is_intra >> (block_num * 4), bottom_is_intra; + block_is_intra = mb_is_intra, bottom_is_intra; int idx, linesize = block_num > 3 ? s->uvlinesize : s->linesize, ttblk; uint8_t *dst; @@ -3394,19 +3394,19 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_ if (block_num > 3) { bottom_cbp = v->cbp[s->mb_x] >> (block_num * 4); - bottom_is_intra = v->is_intra[s->mb_x] >> (block_num * 4); + bottom_is_intra = v->is_intra[s->mb_x]; mv = &v->luma_mv[s->mb_x - s->mb_stride]; mv_stride = s->mb_stride; } else { bottom_cbp = (block_num < 2) ? (mb_cbp >> ((block_num + 2) * 4)) : (v->cbp[s->mb_x] >> ((block_num - 2) * 4)); - bottom_is_intra = (block_num < 2) ? (mb_is_intra >> ((block_num + 2) * 4)) - : (v->is_intra[s->mb_x] >> ((block_num - 2) * 4)); + bottom_is_intra = (block_num < 2) ? mb_is_intra + : v->is_intra[s->mb_x]; mv_stride = s->b8_stride; mv = &s->current_picture.motion_val[0][s->block_index[block_num] - 2 * mv_stride]; } - if (bottom_is_intra & 1 || block_is_intra & 1 || + if (bottom_is_intra || block_is_intra || mv[0][0] != mv[mv_stride][0] || mv[0][1] != mv[mv_stride][1]) { v->vc1dsp.vc1_v_loop_filter8(dst, linesize, v->pq); } else { @@ -3443,7 +3443,7 @@ static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_ int mb_cbp = v->cbp[s->mb_x - 1 - s->mb_stride], block_cbp = mb_cbp >> (block_num * 4), right_cbp, mb_is_intra = v->is_intra[s->mb_x - 1 - s->mb_stride], - block_is_intra = mb_is_intra >> (block_num * 4), right_is_intra; + block_is_intra = mb_is_intra, right_is_intra; int idx, linesize = block_num > 3 ? s->uvlinesize : s->linesize, ttblk; uint8_t *dst; @@ -3458,16 +3458,16 @@ static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_ if (block_num > 3) { right_cbp = v->cbp[s->mb_x - s->mb_stride] >> (block_num * 4); - right_is_intra = v->is_intra[s->mb_x - s->mb_stride] >> (block_num * 4); + right_is_intra = v->is_intra[s->mb_x - s->mb_stride]; mv = &v->luma_mv[s->mb_x - s->mb_stride - 1]; } else { right_cbp = (block_num & 1) ? (v->cbp[s->mb_x - s->mb_stride] >> ((block_num - 1) * 4)) : (mb_cbp >> ((block_num + 1) * 4)); - right_is_intra = (block_num & 1) ? (v->is_intra[s->mb_x - s->mb_stride] >> ((block_num - 1) * 4)) - : (mb_is_intra >> ((block_num + 1) * 4)); + right_is_intra = (block_num & 1) ? v->is_intra[s->mb_x - s->mb_stride] + : mb_is_intra; mv = &s->current_picture.motion_val[0][s->block_index[block_num] - s->b8_stride * 2 - 2]; } - if (block_is_intra & 1 || right_is_intra & 1 || mv[0][0] != mv[1][0] || mv[0][1] != mv[1][1]) { + if (block_is_intra || right_is_intra || mv[0][0] != mv[1][0] || mv[0][1] != mv[1][1]) { v->vc1dsp.vc1_h_loop_filter8(dst, linesize, v->pq); } else { idx = ((right_cbp >> 1) | block_cbp) & 5; // FIXME check @@ -3619,7 +3619,7 @@ static int vc1_decode_p_mb(VC1Context *v) v->vc1dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); } block_cbp |= 0xF << (i << 2); - block_intra |= 1 << i; + block_intra |= 1; } else if (val) { pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize, @@ -3730,7 +3730,7 @@ static int vc1_decode_p_mb(VC1Context *v) v->vc1dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); } block_cbp |= 0xF << (i << 2); - block_intra |= 1 << i; + block_intra |= 1; } else if (is_coded[i]) { pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, diff --git a/tests/ref/fate/vc1_sa00040 b/tests/ref/fate/vc1_sa00040 index 79bff27943..bc0f99224b 100644 --- a/tests/ref/fate/vc1_sa00040 +++ b/tests/ref/fate/vc1_sa00040 @@ -9,8 +9,8 @@ 0, 8, 8, 1, 38016, 0xc15f4368 0, 9, 9, 1, 38016, 0xd1bd47a8 0, 10, 10, 1, 38016, 0xd1bd47a8 -0, 11, 11, 1, 38016, 0xe1e821ca -0, 12, 12, 1, 38016, 0xe1e821ca -0, 13, 13, 1, 38016, 0xe1e821ca -0, 14, 14, 1, 38016, 0xe1e821ca -0, 15, 15, 1, 38016, 0xe1e821ca +0, 11, 11, 1, 38016, 0xe1e621ca +0, 12, 12, 1, 38016, 0xe1e621ca +0, 13, 13, 1, 38016, 0xe1e621ca +0, 14, 14, 1, 38016, 0xe1e621ca +0, 15, 15, 1, 38016, 0xe1e621ca diff --git a/tests/ref/fate/vc1_sa10091 b/tests/ref/fate/vc1_sa10091 index 33326d6a63..0f44e1da2f 100644 --- a/tests/ref/fate/vc1_sa10091 +++ b/tests/ref/fate/vc1_sa10091 @@ -9,23 +9,23 @@ 0, 8, 8, 1, 518400, 0x70d9a891 0, 9, 9, 1, 518400, 0x70d9a891 0, 10, 10, 1, 518400, 0xa461ee86 -0, 11, 11, 1, 518400, 0x722bc6e8 -0, 12, 12, 1, 518400, 0x722bc6e8 -0, 13, 13, 1, 518400, 0x722bc6e8 -0, 14, 14, 1, 518400, 0xf752fd2c -0, 15, 15, 1, 518400, 0xf752fd2c -0, 16, 16, 1, 518400, 0x91abcaca -0, 17, 17, 1, 518400, 0x572727c3 -0, 18, 18, 1, 518400, 0x572727c3 -0, 19, 19, 1, 518400, 0x24c12382 -0, 20, 20, 1, 518400, 0x24c12382 -0, 21, 21, 1, 518400, 0x9aa39fe8 -0, 22, 22, 1, 518400, 0x9aa39fe8 -0, 23, 23, 1, 518400, 0x5cb6bd19 -0, 24, 24, 1, 518400, 0x704d9300 -0, 25, 25, 1, 518400, 0x590fad49 -0, 26, 26, 1, 518400, 0x590fad49 -0, 27, 27, 1, 518400, 0x590fad49 -0, 28, 28, 1, 518400, 0x46bea10b -0, 29, 29, 1, 518400, 0x46bea10b -0, 30, 30, 1, 518400, 0x46bea10b +0, 11, 11, 1, 518400, 0x77cbc6e8 +0, 12, 12, 1, 518400, 0x77cbc6e8 +0, 13, 13, 1, 518400, 0x77cbc6e8 +0, 14, 14, 1, 518400, 0x514afd2a +0, 15, 15, 1, 518400, 0x514afd2a +0, 16, 16, 1, 518400, 0x8c0bcaca +0, 17, 17, 1, 518400, 0x680727c3 +0, 18, 18, 1, 518400, 0x680727c3 +0, 19, 19, 1, 518400, 0x06012382 +0, 20, 20, 1, 518400, 0x06012382 +0, 21, 21, 1, 518400, 0xcbe29fe3 +0, 22, 22, 1, 518400, 0xcbe29fe3 +0, 23, 23, 1, 518400, 0x13e9bd17 +0, 24, 24, 1, 518400, 0xc86492fd +0, 25, 25, 1, 518400, 0x38f9ad47 +0, 26, 26, 1, 518400, 0x38f9ad47 +0, 27, 27, 1, 518400, 0x38f9ad47 +0, 28, 28, 1, 518400, 0x5c00a10a +0, 29, 29, 1, 518400, 0x5c00a10a +0, 30, 30, 1, 518400, 0x5c00a10a diff --git a/tests/ref/fate/vc1_sa20021 b/tests/ref/fate/vc1_sa20021 index 22989a0aed..1c11a4596a 100644 --- a/tests/ref/fate/vc1_sa20021 +++ b/tests/ref/fate/vc1_sa20021 @@ -1,61 +1,61 @@ #tb 0: 1/25 0, 0, 0, 1, 506880, 0x884bc093 0, 2, 2, 1, 506880, 0x4b09548f -0, 3, 3, 1, 506880, 0x195cbee1 -0, 4, 4, 1, 506880, 0xc8141e28 -0, 5, 5, 1, 506880, 0xb170c49b -0, 6, 6, 1, 506880, 0x2782268a -0, 7, 7, 1, 506880, 0x2782268a -0, 8, 8, 1, 506880, 0x2782268a -0, 9, 9, 1, 506880, 0x2782268a -0, 10, 10, 1, 506880, 0xe6803b32 -0, 11, 11, 1, 506880, 0xe6803b32 -0, 12, 12, 1, 506880, 0xa5ef9baf -0, 13, 13, 1, 506880, 0xa5ef9baf -0, 14, 14, 1, 506880, 0x46e8cbcb -0, 15, 15, 1, 506880, 0x28a2239b -0, 16, 16, 1, 506880, 0x7667af2f -0, 17, 17, 1, 506880, 0x7667af2f -0, 18, 18, 1, 506880, 0x8011bcaf -0, 19, 19, 1, 506880, 0xd422115b -0, 20, 20, 1, 506880, 0xd422115b -0, 21, 21, 1, 506880, 0xd422115b -0, 22, 22, 1, 506880, 0xbcee0b5b -0, 23, 23, 1, 506880, 0x08fe9ec8 -0, 24, 24, 1, 506880, 0xc8fb8b37 -0, 25, 25, 1, 506880, 0xc8fb8b37 -0, 26, 26, 1, 506880, 0x2c698b52 -0, 27, 27, 1, 506880, 0x2c698b52 -0, 28, 28, 1, 506880, 0x2c698b52 -0, 29, 29, 1, 506880, 0x2b4ad9bc -0, 30, 30, 1, 506880, 0x2b4ad9bc -0, 31, 31, 1, 506880, 0x2b4ad9bc -0, 32, 32, 1, 506880, 0x2b4ad9bc -0, 33, 33, 1, 506880, 0x92e84ebb -0, 34, 34, 1, 506880, 0x92e84ebb -0, 35, 35, 1, 506880, 0xdb877da3 -0, 36, 36, 1, 506880, 0xdb877da3 -0, 37, 37, 1, 506880, 0xdb877da3 -0, 38, 38, 1, 506880, 0x44610654 -0, 39, 39, 1, 506880, 0x44610654 -0, 40, 40, 1, 506880, 0xe254ce67 -0, 41, 41, 1, 506880, 0xa6085385 -0, 42, 42, 1, 506880, 0x2d45d744 -0, 43, 43, 1, 506880, 0x2d45d744 -0, 44, 44, 1, 506880, 0x6e684f51 -0, 45, 45, 1, 506880, 0xe96186cf -0, 46, 46, 1, 506880, 0xb535d369 -0, 47, 47, 1, 506880, 0xb535d369 -0, 48, 48, 1, 506880, 0xb535d369 -0, 49, 49, 1, 506880, 0xeed0b7e0 -0, 50, 50, 1, 506880, 0xeed0b7e0 -0, 51, 51, 1, 506880, 0xeed0b7e0 -0, 52, 52, 1, 506880, 0xeed0b7e0 -0, 53, 53, 1, 506880, 0x8789b20b -0, 54, 54, 1, 506880, 0x0a0f42fb -0, 55, 55, 1, 506880, 0x09bbac2d -0, 56, 56, 1, 506880, 0x09bbac2d -0, 57, 57, 1, 506880, 0x09bbac2d -0, 58, 58, 1, 506880, 0x09bbac2d -0, 59, 59, 1, 506880, 0x09bbac2d -0, 60, 60, 1, 506880, 0xda77f0df +0, 3, 3, 1, 506880, 0x195bbee1 +0, 4, 4, 1, 506880, 0xcad11e28 +0, 5, 5, 1, 506880, 0x25a2c499 +0, 6, 6, 1, 506880, 0x239e2689 +0, 7, 7, 1, 506880, 0x239e2689 +0, 8, 8, 1, 506880, 0x239e2689 +0, 9, 9, 1, 506880, 0x239e2689 +0, 10, 10, 1, 506880, 0x17913b35 +0, 11, 11, 1, 506880, 0x17913b35 +0, 12, 12, 1, 506880, 0xfc4c9bb4 +0, 13, 13, 1, 506880, 0xfc4c9bb4 +0, 14, 14, 1, 506880, 0x0090cbcf +0, 15, 15, 1, 506880, 0xccc12399 +0, 16, 16, 1, 506880, 0xc0a7af29 +0, 17, 17, 1, 506880, 0xc0a7af29 +0, 18, 18, 1, 506880, 0xc524bca8 +0, 19, 19, 1, 506880, 0xc62a1156 +0, 20, 20, 1, 506880, 0xc62a1156 +0, 21, 21, 1, 506880, 0xc62a1156 +0, 22, 22, 1, 506880, 0xb5c80b5d +0, 23, 23, 1, 506880, 0xea4f9ebf +0, 24, 24, 1, 506880, 0xd0dc8b34 +0, 25, 25, 1, 506880, 0xd0dc8b34 +0, 26, 26, 1, 506880, 0x83338b51 +0, 27, 27, 1, 506880, 0x83338b51 +0, 28, 28, 1, 506880, 0x83338b51 +0, 29, 29, 1, 506880, 0x478ed9b6 +0, 30, 30, 1, 506880, 0x478ed9b6 +0, 31, 31, 1, 506880, 0x478ed9b6 +0, 32, 32, 1, 506880, 0x478ed9b6 +0, 33, 33, 1, 506880, 0x45e44eba +0, 34, 34, 1, 506880, 0x45e44eba +0, 35, 35, 1, 506880, 0x39f87da3 +0, 36, 36, 1, 506880, 0x39f87da3 +0, 37, 37, 1, 506880, 0x39f87da3 +0, 38, 38, 1, 506880, 0x693e0646 +0, 39, 39, 1, 506880, 0x693e0646 +0, 40, 40, 1, 506880, 0xd113ce59 +0, 41, 41, 1, 506880, 0x26805371 +0, 42, 42, 1, 506880, 0x3b6dd731 +0, 43, 43, 1, 506880, 0x3b6dd731 +0, 44, 44, 1, 506880, 0xed544f56 +0, 45, 45, 1, 506880, 0xe06586d1 +0, 46, 46, 1, 506880, 0xd889d381 +0, 47, 47, 1, 506880, 0xd889d381 +0, 48, 48, 1, 506880, 0xd889d381 +0, 49, 49, 1, 506880, 0xedcdb7f0 +0, 50, 50, 1, 506880, 0xedcdb7f0 +0, 51, 51, 1, 506880, 0xedcdb7f0 +0, 52, 52, 1, 506880, 0xedcdb7f0 +0, 53, 53, 1, 506880, 0x72f4b21e +0, 54, 54, 1, 506880, 0xd148430c +0, 55, 55, 1, 506880, 0xd2a5ac39 +0, 56, 56, 1, 506880, 0xd2a5ac39 +0, 57, 57, 1, 506880, 0xd2a5ac39 +0, 58, 58, 1, 506880, 0xd2a5ac39 +0, 59, 59, 1, 506880, 0xd2a5ac39 +0, 60, 60, 1, 506880, 0x65c0f0e0