diff options
author | metamuffin <metamuffin@disroot.org> | 2023-03-08 23:56:43 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-03-08 23:56:43 +0100 |
commit | 2d61333ed37b2d9fd940291ee8b1f5dc68c65591 (patch) | |
tree | 220b65dd7ac18a0f29cea745ea60efbe9823418b /lvc/src/bin/main.rs | |
parent | 292519649c4244adb6672488efe7c2e906726c58 (diff) | |
download | video-codec-experiments-2d61333ed37b2d9fd940291ee8b1f5dc68c65591.tar video-codec-experiments-2d61333ed37b2d9fd940291ee8b1f5dc68c65591.tar.bz2 video-codec-experiments-2d61333ed37b2d9fd940291ee8b1f5dc68c65591.tar.zst |
huff doesnt work
Diffstat (limited to 'lvc/src/bin/main.rs')
-rw-r--r-- | lvc/src/bin/main.rs | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/lvc/src/bin/main.rs b/lvc/src/bin/main.rs index d5c9bbe..e579f72 100644 --- a/lvc/src/bin/main.rs +++ b/lvc/src/bin/main.rs @@ -3,6 +3,7 @@ use lvc::{ debug::draw_debug, decode::decode, encode::{encode, EncodeConfig}, + huff::{read_huffman, write_huffman}, Block, Frame, Pixel, PixelValue, View, P2, }; use std::{ @@ -58,7 +59,15 @@ fn main() { let mut stdout = BufWriter::new(stdout()); loop { - let b = Block::read(&mut stdin, View::all(size)).unwrap(); + let mut buf = vec![]; + read_huffman(&mut stdin, &mut buf).unwrap(); + + eprintln!("{:?}", &buf[..20]); + let b = { + let mut buf = std::io::Cursor::new(&mut buf); + Block::read(&mut buf, View::all(size)).unwrap() + }; + decode(&last_frame, &mut frame, View::all(size), &b); if let Some(debug_frame) = &mut debug_frame { @@ -94,12 +103,34 @@ fn main() { let t = Instant::now(); let b: Block = encode(&last_frame, &frame, View::all(size), &config); - eprintln!("frame {frame_number} took {:?}", t.elapsed()); - - b.write(&mut stdout); + let time_encode = t.elapsed(); + let t = Instant::now(); decode(&last_frame, &mut frame, View::all(size), &b); last_frame = frame; + let time_decode = t.elapsed(); + + let mut buf = vec![]; + let mut bufw = std::io::Cursor::new(&mut buf); + b.write(&mut bufw).unwrap(); + drop(bufw); + let t = Instant::now(); + let bits_raw = buf.len() * 8; + // eprintln!("{:?}", &buf[..20]); + let bits_huff = write_huffman(&buf, &mut stdout).unwrap(); + let time_huff = t.elapsed(); + drop(buf); + + eprintln!( + "frame {frame_number}: {:?}", + time_decode + time_huff + time_encode + ); + eprintln!("\tencode {time_encode:?}"); + eprintln!("\tdecode {time_decode:?}"); + eprintln!( + "\thuff {time_huff:?} ({}%)", + ((bits_huff as f32 / bits_raw as f32) * 100.0).round() + ); } } } |