#[cfg(test)]
pub mod uerd;
pub mod uniward;
#[cfg(feature = "video")]
pub mod h264_cost;
#[cfg(feature = "video")]
pub mod h264_uniward;
#[cfg(feature = "video")]
pub mod h264_ddca;
#[cfg(feature = "video")]
pub mod h264_mvd_cost;
pub const WET_COST: f32 = f32::INFINITY;
pub const WET_COST_F64: f64 = f64::INFINITY;
pub struct CostMap {
blocks_wide: usize,
blocks_tall: usize,
costs: Vec<f32>,
}
impl CostMap {
pub fn new(blocks_wide: usize, blocks_tall: usize) -> Self {
let n = blocks_wide * blocks_tall * 64;
Self {
blocks_wide,
blocks_tall,
costs: vec![WET_COST; n],
}
}
pub fn blocks_wide(&self) -> usize {
self.blocks_wide
}
pub fn blocks_tall(&self) -> usize {
self.blocks_tall
}
pub fn total_blocks(&self) -> usize {
self.blocks_wide * self.blocks_tall
}
pub fn get(&self, br: usize, bc: usize, i: usize, j: usize) -> f32 {
self.costs[self.index(br, bc, i, j)]
}
pub fn set(&mut self, br: usize, bc: usize, i: usize, j: usize, val: f32) {
let idx = self.index(br, bc, i, j);
self.costs[idx] = val;
}
pub(crate) fn costs_ptr(&mut self) -> *mut f32 {
self.costs.as_mut_ptr()
}
fn index(&self, br: usize, bc: usize, i: usize, j: usize) -> usize {
(br * self.blocks_wide + bc) * 64 + i * 8 + j
}
}