use crate::{FastBlurChannels, ThreadingPolicy};
use colorutils_rs::{
linear_to_rgb, linear_to_rgba, rgb_to_linear, rgba_to_linear, TransferFunction,
};
pub fn stack_blur_in_linear(
in_place: &mut [u8],
stride: u32,
width: u32,
height: u32,
radius: u32,
channels: FastBlurChannels,
threading_policy: ThreadingPolicy,
transfer_function: TransferFunction,
) {
let mut linear_data: Vec<f32> =
vec![0f32; width as usize * height as usize * channels.get_channels()];
let forward_transformer = match channels {
FastBlurChannels::Channels3 => rgb_to_linear,
FastBlurChannels::Channels4 => rgba_to_linear,
};
let inverse_transformer = match channels {
FastBlurChannels::Channels3 => linear_to_rgb,
FastBlurChannels::Channels4 => linear_to_rgba,
};
forward_transformer(
&in_place,
stride,
&mut linear_data,
width * std::mem::size_of::<f32>() as u32 * channels.get_channels() as u32,
width,
height,
transfer_function,
);
crate::stack_blur_f32(
&mut linear_data,
width,
height,
radius,
channels,
threading_policy,
);
inverse_transformer(
&linear_data,
width * std::mem::size_of::<f32>() as u32 * channels.get_channels() as u32,
in_place,
stride,
width,
height,
transfer_function,
);
}