Skip to content

Commit 5a24dbd

Browse files
author
Frank Bossen
committed
Clean up use of split_at_mut and pixel copy
1 parent c509c30 commit 5a24dbd

1 file changed

Lines changed: 20 additions & 21 deletions

File tree

‎src/lf_apply.rs‎

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -101,34 +101,33 @@ unsafe fn backup_lpf<BD: BitDepth>(
101101
(dst_offset as isize + n_lines as isize * BD::pxstride(dst_stride)) as usize;
102102

103103
if n_lines == 3 {
104-
if dst_stride < 0 {
105-
let dst_tmp = dst.split_at_mut(dst_offset + BD::pxstride(-dst_stride) as usize);
106-
dst_tmp.0[dst_offset..][..dst_w as usize]
107-
.copy_from_slice(&dst_tmp.1[..dst_w as usize]);
104+
let dst_abs_px_stride = BD::pxstride(dst_stride.unsigned_abs());
105+
let (src_tmp, dst_tmp) = if dst_stride < 0 {
106+
let (dst_tmp, src_tmp) = dst[dst_offset..].split_at_mut(dst_abs_px_stride);
107+
(src_tmp, dst_tmp)
108108
} else {
109-
let dst_tmp = dst.split_at_mut(dst_offset);
110-
dst_tmp.1[..dst_w as usize].copy_from_slice(
111-
&dst_tmp.0[dst_offset - BD::pxstride(dst_stride) as usize..]
112-
[..dst_w as usize],
113-
);
114-
}
109+
dst[dst_offset - dst_abs_px_stride..].split_at_mut(dst_abs_px_stride)
110+
};
111+
BD::pixel_copy(dst_tmp, src_tmp, dst_w as usize);
115112
dst_offset = (dst_offset as isize + BD::pxstride(dst_stride)) as usize;
116113
}
117114
}
118115
} else {
119116
while row + stripe_h <= row_h {
120-
let n_lines_0 = 4 - (row + stripe_h + 1 == h) as c_int;
117+
let n_lines = 4 - (row + stripe_h + 1 == h) as c_int;
121118
for i in 0..4 {
122-
let dst_tmp = dst.split_at_mut(dst_offset);
123-
BD::pixel_copy(
124-
dst_tmp.1,
125-
if i == n_lines_0 {
126-
&dst_tmp.0[dst_offset - BD::pxstride(dst_stride) as usize..]
127-
} else {
128-
&src[src_offset..]
129-
},
130-
src_w as usize,
131-
);
119+
let dst_abs_px_stride = BD::pxstride(dst_stride.unsigned_abs());
120+
let (src_tmp, dst_tmp) = if i != n_lines {
121+
(&src[src_offset..], &mut dst[dst_offset..])
122+
} else if dst_stride < 0 {
123+
let (dst_tmp, src_tmp) = dst[dst_offset..].split_at_mut(dst_abs_px_stride);
124+
(&*src_tmp, dst_tmp)
125+
} else {
126+
let (src_tmp, dst_tmp) =
127+
dst[dst_offset - dst_abs_px_stride..].split_at_mut(dst_abs_px_stride);
128+
(&*src_tmp, dst_tmp)
129+
};
130+
BD::pixel_copy(dst_tmp, src_tmp, src_w as usize);
132131
dst_offset = (dst_offset as isize + BD::pxstride(dst_stride)) as usize;
133132
src_offset = (src_offset as isize + BD::pxstride(src_stride)) as usize;
134133
}

0 commit comments

Comments
 (0)