vc1: prevent using last_frame as a reference for I/P first frame.
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind CC: libav-stable@libav.org
This commit is contained in:
		
							parent
							
								
									210f72845c
								
							
						
					
					
						commit
						ae591aeea5
					
				@ -478,7 +478,10 @@ static void vc1_mc_1mv(VC1Context *v, int dir)
 | 
			
		||||
    int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y;
 | 
			
		||||
    int off, off_uv;
 | 
			
		||||
    int v_edge_pos = s->v_edge_pos >> v->field_mode;
 | 
			
		||||
    if (!v->field_mode && !v->s.last_picture.f.data[0])
 | 
			
		||||
 | 
			
		||||
    if ((!v->field_mode ||
 | 
			
		||||
         (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&
 | 
			
		||||
        !v->s.last_picture.f.data[0])
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    mx = s->mv[dir][0][0];
 | 
			
		||||
@ -690,7 +693,9 @@ static void vc1_mc_4mv_luma(VC1Context *v, int n, int dir)
 | 
			
		||||
    int fieldmv = (v->fcm == ILACE_FRAME) ? v->blk_mv_type[s->block_index[n]] : 0;
 | 
			
		||||
    int v_edge_pos = s->v_edge_pos >> v->field_mode;
 | 
			
		||||
 | 
			
		||||
    if (!v->field_mode && !v->s.last_picture.f.data[0])
 | 
			
		||||
    if ((!v->field_mode ||
 | 
			
		||||
         (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&
 | 
			
		||||
        !v->s.last_picture.f.data[0])
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    mx = s->mv[dir][n][0];
 | 
			
		||||
@ -946,6 +951,8 @@ static void vc1_mc_4mv_chroma(VC1Context *v, int dir)
 | 
			
		||||
        if (dominant)
 | 
			
		||||
            chroma_ref_type = !v->cur_field_type;
 | 
			
		||||
    }
 | 
			
		||||
    if (v->field_mode && chroma_ref_type == 1 && v->cur_field_type == 1 && !v->s.last_picture.f.data[0])
 | 
			
		||||
        return;
 | 
			
		||||
    s->current_picture.f.motion_val[1][s->block_index[0] + v->blocks_off][0] = tx;
 | 
			
		||||
    s->current_picture.f.motion_val[1][s->block_index[0] + v->blocks_off][1] = ty;
 | 
			
		||||
    uvmx = (tx + ((tx & 3) == 3)) >> 1;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user