use std::{
env,
io::{self, Write},
path::PathBuf,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let input = env::args()
.nth(1)
.map(PathBuf::from)
.unwrap_or_else(|| PathBuf::from("/tmp/braw-sample/A001_09091040_C068.braw"));
let limit: Option<u64> = env::args().nth(2).and_then(|s| s.parse().ok());
let mut decoder = warb::Decoder::new()?;
decoder.open(&input)?;
let w = decoder.width();
let h = decoder.height();
let n = limit.unwrap_or_else(|| decoder.frame_count());
let fps = decoder.frame_rate();
eprintln!("{w}x{h} @ {fps} fps, {n} frames → raw RGBA on stdout");
eprintln!("Pipe into ffmpeg with:");
eprintln!(
" ffmpeg -f rawvideo -pixel_format rgba -video_size {w}x{h} \
-framerate {fps} -i - -c:v libx264 -pix_fmt yuv420p out.mp4"
);
let mut out = io::stdout().lock();
for idx in 0..n {
let image = decoder.decode_frame(idx, warb::ResourceFormat::RgbaU8)?;
out.write_all(&image)?;
if idx % 24 == 0 {
eprint!("\r frame {}/{}", idx + 1, n);
}
}
eprintln!("\r frame {n}/{n} done");
out.flush()?;
Ok(())
}