use onix::Onix;
use std::fs::File;
use std::io::Write;
fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::init();
let args: Vec<_> = std::env::args().collect();
if args.len() != 3 {
eprintln!("Usage: {} <image.webp> <output.nv12>", args[0]);
std::process::exit(1);
}
let decoder = Onix::find_devices()
.expect("Unable to find a V4L2 M2M decoder corresponding to our criteria");
let (mut decoder, mut image) = decoder.open(&args[1]).expect("Error decoding image");
decoder
.dequeue(&mut image)
.expect("Error while dequeuing buffers");
{
let buf = image.cap_mut();
let map = decoder.mmap(buf, 0)?;
let mut output = File::create(&args[2])?;
let slice = &map.as_slice()[..buf.bytesused(0) as usize];
output.write_all(slice)?;
}
decoder.stop().expect("Error while stopping the encoding");
Ok(())
}