mod avg;
mod paeth;
mod sub;
mod up;
use crate::error::PngError;
#[allow(unused_imports)]
use whereat::at;
#[cfg(feature = "_dev")]
pub fn bench_unfilter_row(filter_type: u8, row: &mut [u8], prev: &[u8], bpp: usize) {
match filter_type {
1 => sub::unfilter_sub(row, bpp),
2 => up::unfilter_up(row, prev),
3 => avg::unfilter_avg(row, prev, bpp),
4 => paeth::unfilter_paeth(row, prev, bpp),
_ => {}
}
}
pub(crate) fn unfilter_row(
filter_type: u8,
row: &mut [u8],
prev: &[u8],
bpp: usize,
) -> crate::error::Result<()> {
match filter_type {
0 => Ok(()),
1 => {
sub::unfilter_sub(row, bpp);
Ok(())
}
2 => {
up::unfilter_up(row, prev);
Ok(())
}
3 => {
avg::unfilter_avg(row, prev, bpp);
Ok(())
}
4 => {
paeth::unfilter_paeth(row, prev, bpp);
Ok(())
}
_ => Err(at!(PngError::Decode(alloc::format!(
"unknown filter type {}",
filter_type
)))),
}
}