extern crate resize; extern crate y4m; use resize::Pixel::Gray8; use resize::Type::Triangle; use std::env; use std::fs::File; use std::io; fn main() { let args: Vec<_> = env::args().collect(); if args.len() != 4 { return println!("Usage: {} in.y4m WxH out.y4m", args[0]); } let mut infh: Box = if args[1] == "-" { Box::new(io::stdin()) } else { Box::new(File::open(&args[1]).unwrap()) }; let mut decoder = y4m::decode(&mut infh).unwrap(); if decoder.get_bit_depth() != 8 { panic!( "Unsupported bit depth {}, this example only supports 8.", decoder.get_bit_depth() ); } let (w1, h1) = (decoder.get_width(), decoder.get_height()); let dst_dims: Vec<_> = args[2].split("x").map(|s| s.parse().unwrap()).collect(); let (w2, h2) = (dst_dims[0], dst_dims[1]); let mut resizer = resize::new(w1, h1, w2, h2, Gray8, Triangle); let mut dst = vec![0; w2 * h2]; let mut outfh: Box = if args[3] == "-" { Box::new(io::stdout()) } else { Box::new(File::create(&args[3]).unwrap()) }; let mut encoder = y4m::encode(w2, h2, decoder.get_framerate()) .with_colorspace(y4m::Colorspace::Cmono) .write_header(&mut outfh) .unwrap(); loop { match decoder.read_frame() { Ok(frame) => { resizer.resize(frame.get_y_plane(), &mut dst); let out_frame = y4m::Frame::new([&dst, &[], &[]], None); if encoder.write_frame(&out_frame).is_err() { break; } } _ => break, } } }