Commit a52f4437 authored by Michael Niedermayer's avatar Michael Niedermayer

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: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent b7082d95
...@@ -3379,7 +3379,7 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_ ...@@ -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], int mb_cbp = v->cbp[s->mb_x - s->mb_stride],
block_cbp = mb_cbp >> (block_num * 4), bottom_cbp, block_cbp = mb_cbp >> (block_num * 4), bottom_cbp,
mb_is_intra = v->is_intra[s->mb_x - s->mb_stride], 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; int idx, linesize = block_num > 3 ? s->uvlinesize : s->linesize, ttblk;
uint8_t *dst; uint8_t *dst;
...@@ -3394,19 +3394,19 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_ ...@@ -3394,19 +3394,19 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_
if (block_num > 3) { if (block_num > 3) {
bottom_cbp = v->cbp[s->mb_x] >> (block_num * 4); 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 = &v->luma_mv[s->mb_x - s->mb_stride];
mv_stride = s->mb_stride; mv_stride = s->mb_stride;
} else { } else {
bottom_cbp = (block_num < 2) ? (mb_cbp >> ((block_num + 2) * 4)) bottom_cbp = (block_num < 2) ? (mb_cbp >> ((block_num + 2) * 4))
: (v->cbp[s->mb_x] >> ((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)) bottom_is_intra = (block_num < 2) ? mb_is_intra
: (v->is_intra[s->mb_x] >> ((block_num - 2) * 4)); : v->is_intra[s->mb_x];
mv_stride = s->b8_stride; mv_stride = s->b8_stride;
mv = &s->current_picture.motion_val[0][s->block_index[block_num] - 2 * mv_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]) { mv[0][0] != mv[mv_stride][0] || mv[0][1] != mv[mv_stride][1]) {
v->vc1dsp.vc1_v_loop_filter8(dst, linesize, v->pq); v->vc1dsp.vc1_v_loop_filter8(dst, linesize, v->pq);
} else { } else {
...@@ -3443,7 +3443,7 @@ static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_ ...@@ -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], int mb_cbp = v->cbp[s->mb_x - 1 - s->mb_stride],
block_cbp = mb_cbp >> (block_num * 4), right_cbp, block_cbp = mb_cbp >> (block_num * 4), right_cbp,
mb_is_intra = v->is_intra[s->mb_x - 1 - s->mb_stride], 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; int idx, linesize = block_num > 3 ? s->uvlinesize : s->linesize, ttblk;
uint8_t *dst; uint8_t *dst;
...@@ -3458,16 +3458,16 @@ static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_ ...@@ -3458,16 +3458,16 @@ static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_
if (block_num > 3) { if (block_num > 3) {
right_cbp = v->cbp[s->mb_x - s->mb_stride] >> (block_num * 4); 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]; mv = &v->luma_mv[s->mb_x - s->mb_stride - 1];
} else { } else {
right_cbp = (block_num & 1) ? (v->cbp[s->mb_x - s->mb_stride] >> ((block_num - 1) * 4)) right_cbp = (block_num & 1) ? (v->cbp[s->mb_x - s->mb_stride] >> ((block_num - 1) * 4))
: (mb_cbp >> ((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)) right_is_intra = (block_num & 1) ? v->is_intra[s->mb_x - s->mb_stride]
: (mb_is_intra >> ((block_num + 1) * 4)); : mb_is_intra;
mv = &s->current_picture.motion_val[0][s->block_index[block_num] - s->b8_stride * 2 - 2]; 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); v->vc1dsp.vc1_h_loop_filter8(dst, linesize, v->pq);
} else { } else {
idx = ((right_cbp >> 1) | block_cbp) & 5; // FIXME check idx = ((right_cbp >> 1) | block_cbp) & 5; // FIXME check
...@@ -3619,7 +3619,7 @@ static int vc1_decode_p_mb(VC1Context *v) ...@@ -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); v->vc1dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
} }
block_cbp |= 0xF << (i << 2); block_cbp |= 0xF << (i << 2);
block_intra |= 1 << i; block_intra |= 1;
} else if (val) { } else if (val) {
pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, 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, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize,
...@@ -3730,7 +3730,7 @@ static int vc1_decode_p_mb(VC1Context *v) ...@@ -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); v->vc1dsp.vc1_v_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
} }
block_cbp |= 0xF << (i << 2); block_cbp |= 0xF << (i << 2);
block_intra |= 1 << i; block_intra |= 1;
} else if (is_coded[i]) { } else if (is_coded[i]) {
pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb,
first_block, s->dest[dst_idx] + off, first_block, s->dest[dst_idx] + off,
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
0, 8, 8, 1, 38016, 0xc15f4368 0, 8, 8, 1, 38016, 0xc15f4368
0, 9, 9, 1, 38016, 0xd1bd47a8 0, 9, 9, 1, 38016, 0xd1bd47a8
0, 10, 10, 1, 38016, 0xd1bd47a8 0, 10, 10, 1, 38016, 0xd1bd47a8
0, 11, 11, 1, 38016, 0xe1e821ca 0, 11, 11, 1, 38016, 0xe1e621ca
0, 12, 12, 1, 38016, 0xe1e821ca 0, 12, 12, 1, 38016, 0xe1e621ca
0, 13, 13, 1, 38016, 0xe1e821ca 0, 13, 13, 1, 38016, 0xe1e621ca
0, 14, 14, 1, 38016, 0xe1e821ca 0, 14, 14, 1, 38016, 0xe1e621ca
0, 15, 15, 1, 38016, 0xe1e821ca 0, 15, 15, 1, 38016, 0xe1e621ca
...@@ -9,23 +9,23 @@ ...@@ -9,23 +9,23 @@
0, 8, 8, 1, 518400, 0x70d9a891 0, 8, 8, 1, 518400, 0x70d9a891
0, 9, 9, 1, 518400, 0x70d9a891 0, 9, 9, 1, 518400, 0x70d9a891
0, 10, 10, 1, 518400, 0xa461ee86 0, 10, 10, 1, 518400, 0xa461ee86
0, 11, 11, 1, 518400, 0x722bc6e8 0, 11, 11, 1, 518400, 0x77cbc6e8
0, 12, 12, 1, 518400, 0x722bc6e8 0, 12, 12, 1, 518400, 0x77cbc6e8
0, 13, 13, 1, 518400, 0x722bc6e8 0, 13, 13, 1, 518400, 0x77cbc6e8
0, 14, 14, 1, 518400, 0xf752fd2c 0, 14, 14, 1, 518400, 0x514afd2a
0, 15, 15, 1, 518400, 0xf752fd2c 0, 15, 15, 1, 518400, 0x514afd2a
0, 16, 16, 1, 518400, 0x91abcaca 0, 16, 16, 1, 518400, 0x8c0bcaca
0, 17, 17, 1, 518400, 0x572727c3 0, 17, 17, 1, 518400, 0x680727c3
0, 18, 18, 1, 518400, 0x572727c3 0, 18, 18, 1, 518400, 0x680727c3
0, 19, 19, 1, 518400, 0x24c12382 0, 19, 19, 1, 518400, 0x06012382
0, 20, 20, 1, 518400, 0x24c12382 0, 20, 20, 1, 518400, 0x06012382
0, 21, 21, 1, 518400, 0x9aa39fe8 0, 21, 21, 1, 518400, 0xcbe29fe3
0, 22, 22, 1, 518400, 0x9aa39fe8 0, 22, 22, 1, 518400, 0xcbe29fe3
0, 23, 23, 1, 518400, 0x5cb6bd19 0, 23, 23, 1, 518400, 0x13e9bd17
0, 24, 24, 1, 518400, 0x704d9300 0, 24, 24, 1, 518400, 0xc86492fd
0, 25, 25, 1, 518400, 0x590fad49 0, 25, 25, 1, 518400, 0x38f9ad47
0, 26, 26, 1, 518400, 0x590fad49 0, 26, 26, 1, 518400, 0x38f9ad47
0, 27, 27, 1, 518400, 0x590fad49 0, 27, 27, 1, 518400, 0x38f9ad47
0, 28, 28, 1, 518400, 0x46bea10b 0, 28, 28, 1, 518400, 0x5c00a10a
0, 29, 29, 1, 518400, 0x46bea10b 0, 29, 29, 1, 518400, 0x5c00a10a
0, 30, 30, 1, 518400, 0x46bea10b 0, 30, 30, 1, 518400, 0x5c00a10a
#tb 0: 1/25 #tb 0: 1/25
0, 0, 0, 1, 506880, 0x884bc093 0, 0, 0, 1, 506880, 0x884bc093
0, 2, 2, 1, 506880, 0x4b09548f 0, 2, 2, 1, 506880, 0x4b09548f
0, 3, 3, 1, 506880, 0x195cbee1 0, 3, 3, 1, 506880, 0x195bbee1
0, 4, 4, 1, 506880, 0xc8141e28 0, 4, 4, 1, 506880, 0xcad11e28
0, 5, 5, 1, 506880, 0xb170c49b 0, 5, 5, 1, 506880, 0x25a2c499
0, 6, 6, 1, 506880, 0x2782268a 0, 6, 6, 1, 506880, 0x239e2689
0, 7, 7, 1, 506880, 0x2782268a 0, 7, 7, 1, 506880, 0x239e2689
0, 8, 8, 1, 506880, 0x2782268a 0, 8, 8, 1, 506880, 0x239e2689
0, 9, 9, 1, 506880, 0x2782268a 0, 9, 9, 1, 506880, 0x239e2689
0, 10, 10, 1, 506880, 0xe6803b32 0, 10, 10, 1, 506880, 0x17913b35
0, 11, 11, 1, 506880, 0xe6803b32 0, 11, 11, 1, 506880, 0x17913b35
0, 12, 12, 1, 506880, 0xa5ef9baf 0, 12, 12, 1, 506880, 0xfc4c9bb4
0, 13, 13, 1, 506880, 0xa5ef9baf 0, 13, 13, 1, 506880, 0xfc4c9bb4
0, 14, 14, 1, 506880, 0x46e8cbcb 0, 14, 14, 1, 506880, 0x0090cbcf
0, 15, 15, 1, 506880, 0x28a2239b 0, 15, 15, 1, 506880, 0xccc12399
0, 16, 16, 1, 506880, 0x7667af2f 0, 16, 16, 1, 506880, 0xc0a7af29
0, 17, 17, 1, 506880, 0x7667af2f 0, 17, 17, 1, 506880, 0xc0a7af29
0, 18, 18, 1, 506880, 0x8011bcaf 0, 18, 18, 1, 506880, 0xc524bca8
0, 19, 19, 1, 506880, 0xd422115b 0, 19, 19, 1, 506880, 0xc62a1156
0, 20, 20, 1, 506880, 0xd422115b 0, 20, 20, 1, 506880, 0xc62a1156
0, 21, 21, 1, 506880, 0xd422115b 0, 21, 21, 1, 506880, 0xc62a1156
0, 22, 22, 1, 506880, 0xbcee0b5b 0, 22, 22, 1, 506880, 0xb5c80b5d
0, 23, 23, 1, 506880, 0x08fe9ec8 0, 23, 23, 1, 506880, 0xea4f9ebf
0, 24, 24, 1, 506880, 0xc8fb8b37 0, 24, 24, 1, 506880, 0xd0dc8b34
0, 25, 25, 1, 506880, 0xc8fb8b37 0, 25, 25, 1, 506880, 0xd0dc8b34
0, 26, 26, 1, 506880, 0x2c698b52 0, 26, 26, 1, 506880, 0x83338b51
0, 27, 27, 1, 506880, 0x2c698b52 0, 27, 27, 1, 506880, 0x83338b51
0, 28, 28, 1, 506880, 0x2c698b52 0, 28, 28, 1, 506880, 0x83338b51
0, 29, 29, 1, 506880, 0x2b4ad9bc 0, 29, 29, 1, 506880, 0x478ed9b6
0, 30, 30, 1, 506880, 0x2b4ad9bc 0, 30, 30, 1, 506880, 0x478ed9b6
0, 31, 31, 1, 506880, 0x2b4ad9bc 0, 31, 31, 1, 506880, 0x478ed9b6
0, 32, 32, 1, 506880, 0x2b4ad9bc 0, 32, 32, 1, 506880, 0x478ed9b6
0, 33, 33, 1, 506880, 0x92e84ebb 0, 33, 33, 1, 506880, 0x45e44eba
0, 34, 34, 1, 506880, 0x92e84ebb 0, 34, 34, 1, 506880, 0x45e44eba
0, 35, 35, 1, 506880, 0xdb877da3 0, 35, 35, 1, 506880, 0x39f87da3
0, 36, 36, 1, 506880, 0xdb877da3 0, 36, 36, 1, 506880, 0x39f87da3
0, 37, 37, 1, 506880, 0xdb877da3 0, 37, 37, 1, 506880, 0x39f87da3
0, 38, 38, 1, 506880, 0x44610654 0, 38, 38, 1, 506880, 0x693e0646
0, 39, 39, 1, 506880, 0x44610654 0, 39, 39, 1, 506880, 0x693e0646
0, 40, 40, 1, 506880, 0xe254ce67 0, 40, 40, 1, 506880, 0xd113ce59
0, 41, 41, 1, 506880, 0xa6085385 0, 41, 41, 1, 506880, 0x26805371
0, 42, 42, 1, 506880, 0x2d45d744 0, 42, 42, 1, 506880, 0x3b6dd731
0, 43, 43, 1, 506880, 0x2d45d744 0, 43, 43, 1, 506880, 0x3b6dd731
0, 44, 44, 1, 506880, 0x6e684f51 0, 44, 44, 1, 506880, 0xed544f56
0, 45, 45, 1, 506880, 0xe96186cf 0, 45, 45, 1, 506880, 0xe06586d1
0, 46, 46, 1, 506880, 0xb535d369 0, 46, 46, 1, 506880, 0xd889d381
0, 47, 47, 1, 506880, 0xb535d369 0, 47, 47, 1, 506880, 0xd889d381
0, 48, 48, 1, 506880, 0xb535d369 0, 48, 48, 1, 506880, 0xd889d381
0, 49, 49, 1, 506880, 0xeed0b7e0 0, 49, 49, 1, 506880, 0xedcdb7f0
0, 50, 50, 1, 506880, 0xeed0b7e0 0, 50, 50, 1, 506880, 0xedcdb7f0
0, 51, 51, 1, 506880, 0xeed0b7e0 0, 51, 51, 1, 506880, 0xedcdb7f0
0, 52, 52, 1, 506880, 0xeed0b7e0 0, 52, 52, 1, 506880, 0xedcdb7f0
0, 53, 53, 1, 506880, 0x8789b20b 0, 53, 53, 1, 506880, 0x72f4b21e
0, 54, 54, 1, 506880, 0x0a0f42fb 0, 54, 54, 1, 506880, 0xd148430c
0, 55, 55, 1, 506880, 0x09bbac2d 0, 55, 55, 1, 506880, 0xd2a5ac39
0, 56, 56, 1, 506880, 0x09bbac2d 0, 56, 56, 1, 506880, 0xd2a5ac39
0, 57, 57, 1, 506880, 0x09bbac2d 0, 57, 57, 1, 506880, 0xd2a5ac39
0, 58, 58, 1, 506880, 0x09bbac2d 0, 58, 58, 1, 506880, 0xd2a5ac39
0, 59, 59, 1, 506880, 0x09bbac2d 0, 59, 59, 1, 506880, 0xd2a5ac39
0, 60, 60, 1, 506880, 0xda77f0df 0, 60, 60, 1, 506880, 0x65c0f0e0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment