use crate::row::{assert_color_transform_well_formed, rgb_row_bytes, rgb_row_elems, scalar};
#[cfg_attr(not(tarpaulin), inline(always))]
#[allow(clippy::too_many_arguments)]
pub fn bayer_to_rgb_row(
above: &[u8],
mid: &[u8],
below: &[u8],
row_parity: u32,
pattern: crate::raw::BayerPattern,
demosaic: crate::raw::BayerDemosaic,
m: &[[f32; 3]; 3],
rgb_out: &mut [u8],
_use_simd: bool,
) {
let width = mid.len();
assert_eq!(above.len(), width, "above row length must match mid");
assert_eq!(below.len(), width, "below row length must match mid");
let rgb_min = rgb_row_bytes(width);
assert!(rgb_out.len() >= rgb_min, "rgb_out row too short");
assert_color_transform_well_formed(m);
scalar::bayer_to_rgb_row(above, mid, below, row_parity, pattern, demosaic, m, rgb_out);
}
#[cfg_attr(not(tarpaulin), inline(always))]
#[allow(clippy::too_many_arguments)]
pub fn bayer16_to_rgb_row<const BITS: u32>(
above: &[u16],
mid: &[u16],
below: &[u16],
row_parity: u32,
pattern: crate::raw::BayerPattern,
demosaic: crate::raw::BayerDemosaic,
m: &[[f32; 3]; 3],
rgb_out: &mut [u8],
_use_simd: bool,
) {
const {
assert!(
BITS == 10 || BITS == 12 || BITS == 14 || BITS == 16,
"bayer16_to_rgb_row: BITS must be 10, 12, 14, or 16"
)
};
let width = mid.len();
assert_eq!(above.len(), width, "above row length must match mid");
assert_eq!(below.len(), width, "below row length must match mid");
let rgb_min = rgb_row_bytes(width);
assert!(rgb_out.len() >= rgb_min, "rgb_out row too short");
assert_color_transform_well_formed(m);
scalar::bayer16_to_rgb_row::<BITS>(above, mid, below, row_parity, pattern, demosaic, m, rgb_out);
}
#[cfg_attr(not(tarpaulin), inline(always))]
#[allow(clippy::too_many_arguments)]
pub fn bayer16_to_rgb_u16_row<const BITS: u32>(
above: &[u16],
mid: &[u16],
below: &[u16],
row_parity: u32,
pattern: crate::raw::BayerPattern,
demosaic: crate::raw::BayerDemosaic,
m: &[[f32; 3]; 3],
rgb_out: &mut [u16],
_use_simd: bool,
) {
const {
assert!(
BITS == 10 || BITS == 12 || BITS == 14 || BITS == 16,
"bayer16_to_rgb_u16_row: BITS must be 10, 12, 14, or 16"
)
};
let width = mid.len();
assert_eq!(above.len(), width, "above row length must match mid");
assert_eq!(below.len(), width, "below row length must match mid");
let rgb_min = rgb_row_elems(width);
assert!(rgb_out.len() >= rgb_min, "rgb_out row too short");
assert_color_transform_well_formed(m);
scalar::bayer16_to_rgb_u16_row::<BITS>(
above, mid, below, row_parity, pattern, demosaic, m, rgb_out,
);
}