#[allow(clippy::too_many_arguments)]
#[cfg_attr(not(feature = "encoder-intel"), expect(dead_code))]
pub(crate) fn fill_clamped_block(
src: &[u8],
width: u32,
height: u32,
stride: u32,
bpp: u32,
block_x: u32,
block_y: u32,
dst: &mut [u8],
) {
debug_assert_eq!(dst.len(), (4 * 4 * bpp) as usize);
let max_x = width - 1;
let max_y = height - 1;
let bpp_usize = bpp as usize;
for py in 0..4u32 {
let y = (block_y * 4 + py).min(max_y);
for px in 0..4u32 {
let x = (block_x * 4 + px).min(max_x);
let src_off = (y * stride + x * bpp) as usize;
let dst_off = ((py * 4 + px) * bpp) as usize;
dst[dst_off..dst_off + bpp_usize].copy_from_slice(&src[src_off..src_off + bpp_usize]);
}
}
}
#[allow(clippy::too_many_arguments)]
pub(crate) fn fill_clamped_block_row(
src: &[u8],
width: u32,
height: u32,
stride: u32,
bpp: u32,
block_y: u32,
row_w: u32,
dst: &mut [u8],
) {
debug_assert!(row_w.is_multiple_of(4));
debug_assert!(row_w >= width);
debug_assert_eq!(dst.len(), (row_w * 4 * bpp) as usize);
let max_x = width - 1;
let max_y = height - 1;
let bpp_usize = bpp as usize;
let dst_stride = (row_w * bpp) as usize;
for py in 0..4u32 {
let y = (block_y * 4 + py).min(max_y);
let src_row_off = (y * stride) as usize;
let dst_row_off = (py as usize) * dst_stride;
let copy_bytes = (width * bpp) as usize;
dst[dst_row_off..dst_row_off + copy_bytes]
.copy_from_slice(&src[src_row_off..src_row_off + copy_bytes]);
let edge_src_off = src_row_off + (max_x * bpp) as usize;
let edge_pixel = &src[edge_src_off..edge_src_off + bpp_usize];
for px in width..row_w {
let dst_off = dst_row_off + (px * bpp) as usize;
dst[dst_off..dst_off + bpp_usize].copy_from_slice(edge_pixel);
}
let _ = max_y;
}
}