use clap::Parser; use evc::{ block::{Block, BlockInner}, frame::{Frame, View}, }; use std::io::{self, BufReader}; #[derive(Parser)] #[clap(about, version)] pub struct EncodeArgs { #[arg(short = 'W', long)] width: usize, #[arg(short = 'H', long)] height: usize, } fn main() -> io::Result<()> { let args = EncodeArgs::parse(); let mut input = BufReader::new(std::io::stdin()); let size = (args.width, args.height); let mut prev_frame = Frame::new(size); for i in 0.. { println!("frame {i}"); let frame = Frame::read(&mut input, size)?; let v1 = frame.view((0, 0), size); let v2 = prev_frame.view((0, 0), size); encode_block(v1, v2); prev_frame = frame; } Ok(()) } fn encode_block(view: View, prev: View) -> Block { let diff = View::diff(&view, &prev); let inner = if diff > 100_000.0 { let [a, b] = view.split(); let [ap, bp] = prev.split(); BlockInner::Split(Box::new([encode_block(a, ap), encode_block(b, bp)])) } else { todo!() }; Block { size: view.size, inner, } }