- b_mb.num_mv = binfo.get_num_mvs();
- if binfo.get_num_mvs() == 0 {
- b_mb.num_mv = 1;
- b_mb.mv_f[0] = binfo.get_mv2(1);
- b_mb.mv_b[0] = binfo.get_mv2(0);
- } else if binfo.get_num_mvs() == 1 {
- let src_mv = binfo.get_mv(0).scale(bsdiff, tsdiff);
- let mv_f = MV::add_umv(src_mv, binfo.get_mv2(0), pinfo.get_mvmode());
- let mv_b = MV::b_sub(binfo.get_mv(0), mv_f, binfo.get_mv2(0), bsdiff, tsdiff);
+ if binfo.get_num_mvs() != 4 {
+ let ref_mv = mvi2.get_mv(mb_x, 0);
+ let b_mv = if binfo.is_intra() { binfo.get_mv2(1) } else { binfo.get_mv2(0) };
+ let src_mv = if is_fwd { ZERO_MV } else { ref_mv.scale(bsdiff, tsdiff) };
+ let mv_f = MV::add_umv(src_mv, b_mv, pinfo.get_mvmode());
+ let mv_b = MV::b_sub(ref_mv, mv_f, b_mv, bsdiff, tsdiff);