@@ -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