diff --git a/src/encoder.rs b/src/encoder.rs index e34e1a5e04bab4edd9fa074f7a8803e61c889c98..f61575834c304de4205e4de22959f5eeb38bbd88 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -1175,11 +1175,16 @@ fn write_obus(packet: &mut dyn io::Write, sequence: &mut Sequence, /// Write into `dst` the difference between the blocks at `src1` and `src2` fn diff(dst: &mut [i16], src1: &PlaneSlice<'_>, src2: &PlaneSlice<'_>, width: usize, height: usize) { - for j in 0..height { - for i in 0..width { - dst[j*width + i] = (src1.p(i, j) as i16) - (src2.p(i, j) as i16); - } + let src1_stride = src1.plane.cfg.stride; + let src2_stride = src2.plane.cfg.stride; + + for ((l, s1), s2) in dst.chunks_mut(width).take(height) + .zip(src1.as_slice().chunks(src1_stride)) + .zip(src2.as_slice().chunks(src2_stride)) { + for ((r, v1), v2) in l.iter_mut().zip(s1).zip(s2) { + *r = *v1 as i16 - *v2 as i16; } + } } // For a transform block,