brfd = FFMIN(v->brfd, 3);
scalesame = ff_vc1_b_field_mvpred_scales[0][brfd];
- n = (n * scalesame >> 8) << hpel;
+ n = (n * scalesame >> 8) * (1 << hpel);
return n;
}
n >>= hpel;
if (v->s.pict_type == AV_PICTURE_TYPE_B && !v->second_field && dir == 1) {
if (dim)
- n = scaleforopp_y(v, n, dir) << hpel;
+ n = scaleforopp_y(v, n, dir) * (1 << hpel);
else
- n = scaleforopp_x(v, n) << hpel;
+ n = scaleforopp_x(v, n) * (1 << hpel);
return n;
}
if (v->s.pict_type != AV_PICTURE_TYPE_B)
- refdist = FFMIN(v->refdist, 3);
+ refdist = v->refdist;
else
refdist = dir ? v->brfd : v->frfd;
+ refdist = FFMIN(refdist, 3);
scaleopp = ff_vc1_field_mvpred_scales[dir ^ v->second_field][0][refdist];
n = (n * scaleopp >> 8) * (1 << hpel);
//in 4-MV mode different blocks have different B predictor position
switch (n) {
case 0:
- off = (s->mb_x > 0) ? -1 : 1;
+ if (v->res_rtm_flag)
+ off = s->mb_x ? -1 : 1;
+ else
+ off = s->mb_x ? -1 : 2 * s->mb_width - wrap - 1;
break;
case 1:
off = (s->mb_x == (s->mb_width - 1)) ? -1 : 1;
case 3:
off = -1;
}
+ if (v->field_mode && s->mb_width == 1)
+ b_valid = b_valid && c_valid;
}
if (v->field_mode) {