Skip to content

Commit

Permalink
fn load_tmvs_c: Translate missed continues for b_ref and `ref2r…
Browse files Browse the repository at this point in the history
…ef` with `x += 1`s.
  • Loading branch information
kkysen committed Apr 16, 2024
1 parent 9d8abca commit 268f82d
Showing 1 changed file with 46 additions and 48 deletions.
94 changes: 46 additions & 48 deletions src/refmvs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1424,57 +1424,55 @@ unsafe extern "C" fn load_tmvs_c(
while x < col_end8i {
let mut rb = r.offset(x as isize);
let b_ref = (*rb).r#ref;
if !(b_ref == 0) {
let ref2ref = rf.mfmv_ref2ref[n as usize][(b_ref - 1) as usize];
if !(ref2ref == 0) {
let b_mv = (*rb).mv;
let offset = mv_projection(b_mv, ref2cur, ref2ref);
let mut pos_x = x + apply_sign(
(offset.x as c_int).abs() >> 6,
offset.x as c_int ^ ref_sign,
);
let pos_y = y + apply_sign(
(offset.y as c_int).abs() >> 6,
offset.y as c_int ^ ref_sign,
);
if pos_y >= y_proj_start && pos_y < y_proj_end {
let pos = (pos_y & 15) as isize * stride;
loop {
let x_sb_align = x & !(7 as c_int);
if pos_x >= cmp::max(x_sb_align - 8, col_start8)
&& pos_x < cmp::min(x_sb_align + 16, col_end8)
{
(*rp_proj.offset(pos + pos_x as isize)).mv = (*rb).mv;
(*rp_proj.offset(pos + pos_x as isize)).r#ref = ref2ref as i8;
}
x += 1;
if x >= col_end8i {
break;
}
rb = rb.offset(1);
let rb_mv = (*rb).mv;
if (*rb).r#ref != b_ref || rb_mv != b_mv {
break;
}
pos_x += 1;
}
} else {
loop {
x += 1;
if x >= col_end8i {
break;
}
rb = rb.offset(1);
let rb_mv = (*rb).mv;
if (*rb).r#ref != b_ref || rb_mv != b_mv {
break;
}
}
if b_ref == 0 {
x += 1;
continue;
}
let ref2ref = rf.mfmv_ref2ref[n as usize][(b_ref - 1) as usize];
if ref2ref == 0 {
x += 1;
continue;
}
let b_mv = (*rb).mv;
let offset = mv_projection(b_mv, ref2cur, ref2ref);
let mut pos_x =
x + apply_sign((offset.x as c_int).abs() >> 6, offset.x as c_int ^ ref_sign);
let pos_y =
y + apply_sign((offset.y as c_int).abs() >> 6, offset.y as c_int ^ ref_sign);
if pos_y >= y_proj_start && pos_y < y_proj_end {
let pos = (pos_y & 15) as isize * stride;
loop {
let x_sb_align = x & !7;
if pos_x >= cmp::max(x_sb_align - 8, col_start8)
&& pos_x < cmp::min(x_sb_align + 16, col_end8)
{
(*rp_proj.offset(pos + pos_x as isize)).mv = (*rb).mv;
(*rp_proj.offset(pos + pos_x as isize)).r#ref = ref2ref as i8;
}
x += 1;
if x >= col_end8i {
break;
}
rb = rb.offset(1);
let rb_mv = (*rb).mv;
if (*rb).r#ref != b_ref || rb_mv != b_mv {
break;
}
pos_x += 1;
}
} else {
loop {
x += 1;
if x >= col_end8i {
break;
}
rb = rb.offset(1);
let rb_mv = (*rb).mv;
if (*rb).r#ref != b_ref || rb_mv != b_mv {
break;
}
x -= 1;
}
}
x += 1;
}
r = r.offset(stride as isize);
}
Expand Down

0 comments on commit 268f82d

Please sign in to comment.