diff options
Diffstat (limited to 'lvc/src/main.rs')
-rw-r--r-- | lvc/src/main.rs | 43 |
1 files changed, 15 insertions, 28 deletions
diff --git a/lvc/src/main.rs b/lvc/src/main.rs index 523f22c..413e4a4 100644 --- a/lvc/src/main.rs +++ b/lvc/src/main.rs @@ -1,48 +1,35 @@ -use lvc::{diff::{diff, fast_diff}, Frame, Pixel, Ref, View, P2, PixelValue}; -use std::{ - io::{stdin, stdout, BufReader, BufWriter, Read, Write}, - time::Instant, -}; +use lvc::{debug::draw_debug, decode::decode, encode::encode, Frame, Pixel, PixelValue, View, P2}; +use std::io::{stdin, stdout, BufReader, BufWriter, Read, Write}; fn main() { let size = P2 { x: 1920, y: 1080 }; - // let frame1 = read_frame(size); - // let frame2 = read_frame(size); - - // encode(&frame1, &frame2, View::all(size)); - - let mut last_frame = Frame { - pixels: vec![Pixel::default(); size.area()], - size, - }; + let mut last_frame = Frame::new(size); + let mut debug_frame = Some(Frame::new(size)); let mut stdin = BufReader::new(stdin()); let mut stdout = BufWriter::new(stdout()); loop { - let frame = read_frame(&mut stdin, size); + let mut frame = read_frame(&mut stdin, size); - let t1 = Instant::now(); - let d = diff([&last_frame, &frame], View::all(size), Ref::default()); - let t2 = Instant::now(); - eprintln!("diff {:?} {d}", t2 - t1); + let b = encode(&last_frame, &frame, View::all(size)); + decode(&last_frame, &mut frame, View::all(size), &b); - let t1 = Instant::now(); - let d = fast_diff([&last_frame, &frame], View::all(size), Ref::default()); - let t2 = Instant::now(); - eprintln!("diff2 {:?} {d}", t2 - t1); + if let Some(debug_frame) = &mut debug_frame { + debug_frame.pixels.copy_from_slice(&frame.pixels); + draw_debug(debug_frame, View::all(size), &b); + write_frame(&mut stdout, &debug_frame); + } else { + write_frame(&mut stdout, &frame); + } - write_frame(&mut stdout, &frame); last_frame = frame; } } fn read_frame(inp: &mut impl Read, size: P2) -> Frame { - let mut f = Frame { - size, - pixels: vec![Pixel::default(); size.area()], - }; + let mut f = Frame::new(size); for y in 0..size.y { for x in 0..size.x { |