use std::num::NonZeroUsize;
use super::Pixel;
use crate::{
luma::{LumaSumFn, select_luma_sum},
sad::{SadFn, select_sad},
satd::{SatdFn, select_satd},
};
pub struct BlockFunctions {
pub luma_sum: LumaSumFn,
pub luma_sad: SadFn,
pub chroma_sad: SadFn,
pub satd: SatdFn,
}
#[must_use]
#[inline]
pub fn select_block_functions<T: Pixel>(
blk_size_x: NonZeroUsize,
blk_size_y: NonZeroUsize,
chroma_blk_x: NonZeroUsize,
chroma_blk_y: NonZeroUsize,
) -> BlockFunctions {
BlockFunctions {
luma_sum: select_luma_sum::<T>(blk_size_x, blk_size_y),
luma_sad: select_sad::<T>(blk_size_x, blk_size_y),
chroma_sad: select_sad::<T>(chroma_blk_x, chroma_blk_y),
satd: select_satd::<T>(blk_size_x, blk_size_y),
}
}