mod bilinear_impl;
use crate::cfa::CfaPattern;
use crate::error::DemosaicError;
pub fn remosaic(
input: &[f32],
width: usize,
height: usize,
quad_cfa: &CfaPattern,
output: &mut [f32],
) -> Result<(), DemosaicError> {
let npix = width * height;
if input.len() != npix {
return Err(DemosaicError::InputSizeMismatch { expected: npix, got: input.len() });
}
if output.len() != npix {
return Err(DemosaicError::OutputSizeMismatch { expected: npix, got: output.len() });
}
if !quad_cfa.is_quad_bayer() {
return Err(DemosaicError::UnsupportedAlgorithm {
algorithm: "remosaic",
cfa: "non-Quad-Bayer",
});
}
let bayer_cfa = quad_cfa.quad_to_bayer()
.expect("is_quad_bayer() already validated");
bilinear_impl::remosaic(input, width, height, quad_cfa, &bayer_cfa, output);
Ok(())
}