in benches/benches.rs [441:515]
fn convert_to(
width: u32,
height: u32,
from_format: PixelFormat,
seed: u8,
perf: &mut PerfEvent,
) -> Option<u64> {
let pixels = (width as usize) * (height as usize);
let shift = match from_format {
PixelFormat::Rgb | PixelFormat::I444 => 0,
_ => 1,
};
let num_planes = match from_format {
PixelFormat::Rgb | PixelFormat::Nv12 => 1,
_ => 3,
};
let color_space = match from_format {
PixelFormat::Rgb => ColorSpace::Rgb,
_ => ColorSpace::Bt601FR,
};
let src = alloc_buffer((3 * pixels) >> shift, None);
let input_buffer = slice_from_buffer(src, Some(seed));
let mut input_data = Vec::with_capacity(3);
match from_format {
PixelFormat::Rgb | PixelFormat::Nv12 => input_data.push(input_buffer),
_ => {
let (y_data, uv_data) = input_buffer.split_at(pixels);
let (u_data, v_data) = uv_data.split_at(pixels >> (2 * shift));
input_data.push(y_data);
input_data.push(u_data);
input_data.push(v_data);
}
}
let dst = alloc_buffer(4 * pixels, Some(seed));
let output_buffer = slice_from_buffer_mut(dst, None);
let output_data: &mut [&mut [u8]] = &mut [&mut output_buffer[..]];
let src_format = ImageFormat {
pixel_format: from_format,
color_space,
num_planes,
};
let dst_format = ImageFormat {
pixel_format: PixelFormat::Bgra,
color_space: ColorSpace::Rgb,
num_planes: 1,
};
perf.start();
let result = convert_image(
width,
height,
&src_format,
None,
&input_data,
&dst_format,
None,
output_data,
);
let elapsed = perf.end();
if result.is_ok() {
assert!(!output_buffer.iter().all(|&x| x == 0));
}
dealloc_buffer(src);
dealloc_buffer(dst);
result.ok().map(|_x| elapsed)
}