use hvif::Hvif;
use std::fs::File;
use std::io::{BufReader, Read};
use std::path::PathBuf;
fn do_render(hvif: Hvif, width: i32, height: i32) -> Result<cairo::ImageSurface, cairo::Error> {
let mut surface = cairo::ImageSurface::create(cairo::Format::ARgb32, width, height)?;
hvif::render(hvif, &mut surface)?;
Ok(surface)
}
fn main() {
let args: Vec<_> = std::env::args().collect();
if args.len() != 4 {
eprintln!("Usage: {} <file.avif> <size> <output.png>", args[0]);
return;
}
let filename = PathBuf::from(args[1].clone());
let size = args[2].parse().unwrap();
let output = PathBuf::from(args[3].clone());
let data = {
let file = File::open(filename).unwrap();
let mut file = BufReader::new(file);
let mut data = Vec::new();
file.read_to_end(&mut data).unwrap();
data
};
let hvif = Hvif::parse(&data).unwrap();
assert!(hvif.0.is_empty());
let surface = do_render(hvif.1, size, size).unwrap();
let mut file = File::create(output).unwrap();
surface.write_to_png(&mut file).unwrap();
}