| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -2537,30 +2537,28 @@ static void vc1_decode_i_blocks(VC1Context *v) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->mb_x = s->mb_y = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->mb_intra         = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->first_slice_line = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (s->mb_y = 0; s->mb_y < s->end_mb_y; s->mb_y++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->mb_x = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        init_block_index(v); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (; s->mb_x < v->end_mb_x; s->mb_x++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            uint8_t *dst[6]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            int16_t (*block)[64] = v->block[v->cur_blk_idx]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ff_update_block_index(s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[0] = s->dest[0]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[1] = dst[0] + 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[2] = s->dest[0] + s->linesize * 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[3] = dst[2] + 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[4] = s->dest[1]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dst[5] = s->dest[2]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->bdsp.clear_blocks(s->block[0]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->bdsp.clear_blocks(block[0]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            mb_pos = s->mb_x + s->mb_y * s->mb_width; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->current_picture.mb_type[mb_pos]                     = MB_TYPE_INTRA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->current_picture.qscale_table[mb_pos]                = v->pq; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->current_picture.motion_val[1][s->block_index[0]][0] = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->current_picture.motion_val[1][s->block_index[0]][1] = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (int i = 0; i < 4; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                s->current_picture.motion_val[1][s->block_index[i]][0] = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                s->current_picture.motion_val[1][s->block_index[i]][1] = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // do actual MB decoding and displaying | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v->s.ac_pred = get_bits1(&v->s.gb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (k = 0; k < 6; k++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->mb_type[0][s->block_index[k]] = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                val = ((cbp >> (5 - k)) & 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (k < 4) { | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -2570,52 +2568,30 @@ static void vc1_decode_i_blocks(VC1Context *v) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                cbp |= val << (5 - k); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                vc1_decode_i_block(v, s->block[k], k, val, (k < 4) ? v->codingset : v->codingset2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                vc1_decode_i_block(v, block[k], k, val, (k < 4) ? v->codingset : v->codingset2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (CONFIG_GRAY && k > 3 && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    continue; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_inv_trans_8x8(s->block[k]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (v->pq >= 9 && v->overlap) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    if (v->rangeredfrm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_inv_trans_8x8(block[k]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (v->overlap && v->pq >= 9) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ff_vc1_i_overlap_filter(v); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (v->rangeredfrm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    for (k = 0; k < 6; k++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        for (j = 0; j < 64; j++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            s->block[k][j] <<= 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    s->idsp.put_signed_pixels_clamped(s->block[k], dst[k], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                      k & 4 ? s->uvlinesize | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                            : s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    if (v->rangeredfrm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            block[k][j] <<= 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                vc1_put_blocks_clamped(v, 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (v->rangeredfrm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    for (k = 0; k < 6; k++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        for (j = 0; j < 64; j++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            s->block[k][j] = (s->block[k][j] - 64) << 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    s->idsp.put_pixels_clamped(s->block[k], dst[k], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                               k & 4 ? s->uvlinesize | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                     : s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            block[k][j] = (block[k][j] - 64) << 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                vc1_put_blocks_clamped(v, 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (v->pq >= 9 && v->overlap) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (s->mb_x) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    v->vc1dsp.vc1_h_overlap(s->dest[0], s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    v->vc1dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    if (!CONFIG_GRAY || !(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        v->vc1dsp.vc1_h_overlap(s->dest[1], s->uvlinesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        v->vc1dsp.vc1_h_overlap(s->dest[2], s->uvlinesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (!s->first_slice_line) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    v->vc1dsp.vc1_v_overlap(s->dest[0], s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    v->vc1dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    if (!CONFIG_GRAY || !(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        v->vc1dsp.vc1_v_overlap(s->dest[1], s->uvlinesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        v->vc1dsp.vc1_v_overlap(s->dest[2], s->uvlinesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                v->vc1dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (v->s.loop_filter) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ff_vc1_loop_filter_iblk(v, v->pq); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ff_vc1_i_loop_filter(v); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (get_bits_count(&s->gb) > v->bits) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ff_er_add_slice(&s->er, 0, 0, s->mb_x, s->mb_y, ER_MB_ERROR); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -2623,6 +2599,11 @@ static void vc1_decode_i_blocks(VC1Context *v) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       get_bits_count(&s->gb), v->bits); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                return; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v->topleft_blk_idx = (v->topleft_blk_idx + 1) % (v->end_mb_x + 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v->top_blk_idx = (v->top_blk_idx + 1) % (v->end_mb_x + 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v->left_blk_idx = (v->left_blk_idx + 1) % (v->end_mb_x + 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v->cur_blk_idx = (v->cur_blk_idx + 1) % (v->end_mb_x + 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (!v->s.loop_filter) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |