Overlap filtering of the first row and first column must be guarded for out of bounds access of v->over_flags_plane.
Unified · Split
| @@ -110,19 +110,19 @@ void ff_vc1_i_overlap_filter(VC1Context *v) · 109 unmodified lines | |||
| 110 | * we run the put_pixels loop, i.e. delayed by one row and one column. */ | 110 | * we run the put_pixels loop, i.e. delayed by one row and one column. */ |
| 111 | for (i = 0; i < block_count; i++) | 111 | for (i = 0; i < block_count; i++) |
| 112 | if (v->pq >= 9 || v->condover == CONDOVER_ALL || | 112 | if (v->pq >= 9 || v->condover == CONDOVER_ALL || |
| 113 | (v->over_flags_plane[mb_pos] && ((i & 5) == 1 || v->over_flags_plane[mb_pos - 1]))) | 113 | (v->over_flags_plane[mb_pos] && ((i & 5) == 1 || (s->mb_x && v->over_flags_plane[mb_pos - 1])))) |
| 114 | vc1_h_overlap_filter(v, s->mb_x ? left_blk : cur_blk, cur_blk, i); | 114 | vc1_h_overlap_filter(v, s->mb_x ? left_blk : cur_blk, cur_blk, i); |
| 115 | 115 | ||
| 116 | if (v->fcm != ILACE_FRAME) | 116 | if (v->fcm != ILACE_FRAME) |
| 117 | for (i = 0; i < block_count; i++) { | 117 | for (i = 0; i < block_count; i++) { |
| 118 | if (s->mb_x && (v->pq >= 9 || v->condover == CONDOVER_ALL || | 118 | if (s->mb_x && (v->pq >= 9 || v->condover == CONDOVER_ALL || |
| 119 | (v->over_flags_plane[mb_pos - 1] && | 119 | (v->over_flags_plane[mb_pos - 1] && |
| 120 | ((i & 2) || v->over_flags_plane[mb_pos - 1 - s->mb_stride])))) | 120 | ((i & 2) || (!s->first_slice_line && v->over_flags_plane[mb_pos - 1 - s->mb_stride]))))) |
| 121 | vc1_v_overlap_filter(v, s->first_slice_line ? left_blk : topleft_blk, left_blk, i); | 121 | vc1_v_overlap_filter(v, s->first_slice_line ? left_blk : topleft_blk, left_blk, i); |
| 122 | if (s->mb_x == s->mb_width - 1) | 122 | if (s->mb_x == s->mb_width - 1) |
| 123 | if (v->pq >= 9 || v->condover == CONDOVER_ALL || | 123 | if (v->pq >= 9 || v->condover == CONDOVER_ALL || |
| 124 | (v->over_flags_plane[mb_pos] && | 124 | (v->over_flags_plane[mb_pos] && |
| 125 | ((i & 2) || v->over_flags_plane[mb_pos - s->mb_stride]))) | 125 | ((i & 2) || (!s->first_slice_line && v->over_flags_plane[mb_pos - s->mb_stride])))) |
| 126 | vc1_v_overlap_filter(v, s->first_slice_line ? cur_blk : top_blk, cur_blk, i); | 126 | vc1_v_overlap_filter(v, s->first_slice_line ? cur_blk : top_blk, cur_blk, i); |
| 127 | } | 127 | } |
| 128 | } | 128 | } |