|
|
|
@ -1642,7 +1642,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) |
|
|
|
|
dmv_x = dmv_y = 0; |
|
|
|
|
if (mvbp & (8 >> i)) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, i, dmv_x, dmv_y, 0, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, i, dmv_x, dmv_y, 0, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, i, 0, 0); |
|
|
|
|
} |
|
|
|
|
ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); |
|
|
|
@ -1652,14 +1652,14 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) |
|
|
|
|
if (mvbp & 2) { |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
} |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, 0, 0, 0); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, 1, 0, 0); |
|
|
|
|
dmv_x = dmv_y = 0; |
|
|
|
|
if (mvbp & 1) { |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
} |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, 2, 0, 0); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, 3, 0, 0); |
|
|
|
|
ff_vc1_mc_4mv_chroma4(v, 0, 0, 0); |
|
|
|
@ -1669,7 +1669,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) |
|
|
|
|
if (mvbp) { |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
} |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_1mv(v, 0); |
|
|
|
|
} |
|
|
|
|
if (cbp) |
|
|
|
@ -1711,7 +1711,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) |
|
|
|
|
v->blk_mv_type[s->block_index[1]] = 0; |
|
|
|
|
v->blk_mv_type[s->block_index[2]] = 0; |
|
|
|
|
v->blk_mv_type[s->block_index[3]] = 0; |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_1mv(v, 0); |
|
|
|
|
v->fieldtx_plane[mb_pos] = 0; |
|
|
|
|
} |
|
|
|
@ -2362,7 +2362,7 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
if (val) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
j = i > 1 ? 2 : 0; |
|
|
|
|
ff_vc1_pred_mv_intfr(v, j, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, j, dmv_x, dmv_y, 2, v->range_x, v->range_y, dir); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, j, dir, dir); |
|
|
|
|
ff_vc1_mc_4mv_luma(v, j+1, dir, dir); |
|
|
|
|
} |
|
|
|
@ -2375,14 +2375,14 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
if (mvbp & 2) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
|
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_mc_1mv(v, 0); |
|
|
|
|
|
|
|
|
|
dmv_x = dmv_y = 0; |
|
|
|
|
if (mvbp & 1) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
|
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], 1); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, 1); |
|
|
|
|
ff_vc1_interp_mc(v); |
|
|
|
|
} else if (twomv) { |
|
|
|
|
dir = bmvtype == BMV_TYPE_BACKWARD; |
|
|
|
@ -2393,12 +2393,12 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
dmv_x = dmv_y = 0; |
|
|
|
|
if (mvbp & 2) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 2, v->range_x, v->range_y, dir); |
|
|
|
|
|
|
|
|
|
dmv_x = dmv_y = 0; |
|
|
|
|
if (mvbp & 1) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, v->mb_type[0], dir2); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, dmv_x, dmv_y, 2, v->range_x, v->range_y, dir2); |
|
|
|
|
|
|
|
|
|
if (mvsw) { |
|
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
@ -2408,8 +2408,8 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
s->mv[dir2][i+2][1] = s->mv[dir2][i][1] = s->current_picture.motion_val[dir2][s->block_index[i]][1] = s->current_picture.motion_val[dir2][s->block_index[i+2]][1]; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, v->mb_type[0], !dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, 0, 0, 2, v->range_x, v->range_y, v->mb_type[0], !dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, !dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 2, 0, 0, 2, v->range_x, v->range_y, !dir); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ff_vc1_mc_4mv_luma(v, 0, dir, 0); |
|
|
|
@ -2425,12 +2425,12 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
if (mvbp) |
|
|
|
|
get_mvdata_interlaced(v, &dmv_x, &dmv_y, 0); |
|
|
|
|
|
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, v->mb_type[0], dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, dmv_x, dmv_y, 1, v->range_x, v->range_y, dir); |
|
|
|
|
v->blk_mv_type[s->block_index[0]] = 1; |
|
|
|
|
v->blk_mv_type[s->block_index[1]] = 1; |
|
|
|
|
v->blk_mv_type[s->block_index[2]] = 1; |
|
|
|
|
v->blk_mv_type[s->block_index[3]] = 1; |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, 0, !dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, !dir); |
|
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
|
s->mv[!dir][i+2][0] = s->mv[!dir][i][0] = s->current_picture.motion_val[!dir][s->block_index[i+2]][0] = s->current_picture.motion_val[!dir][s->block_index[i]][0]; |
|
|
|
|
s->mv[!dir][i+2][1] = s->mv[!dir][i][1] = s->current_picture.motion_val[!dir][s->block_index[i+2]][1] = s->current_picture.motion_val[!dir][s->block_index[i]][1]; |
|
|
|
@ -2480,11 +2480,11 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
|
|
|
|
|
if (!direct) { |
|
|
|
|
if (bmvtype == BMV_TYPE_INTERPOLATED) { |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], 1); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, 0); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, 1); |
|
|
|
|
} else { |
|
|
|
|
dir = bmvtype == BMV_TYPE_BACKWARD; |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, v->mb_type[0], dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 1, v->range_x, v->range_y, dir); |
|
|
|
|
if (mvsw) { |
|
|
|
|
int dir2 = dir; |
|
|
|
|
if (mvsw) |
|
|
|
@ -2500,7 +2500,7 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) |
|
|
|
|
v->blk_mv_type[s->block_index[1]] = 1; |
|
|
|
|
v->blk_mv_type[s->block_index[2]] = 1; |
|
|
|
|
v->blk_mv_type[s->block_index[3]] = 1; |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, 0, !dir); |
|
|
|
|
ff_vc1_pred_mv_intfr(v, 0, 0, 0, 2, v->range_x, v->range_y, !dir); |
|
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
|
s->mv[!dir][i+2][0] = s->mv[!dir][i][0] = s->current_picture.motion_val[!dir][s->block_index[i+2]][0] = s->current_picture.motion_val[!dir][s->block_index[i]][0]; |
|
|
|
|
s->mv[!dir][i+2][1] = s->mv[!dir][i][1] = s->current_picture.motion_val[!dir][s->block_index[i+2]][1] = s->current_picture.motion_val[!dir][s->block_index[i]][1]; |
|
|
|
|