diff options
Diffstat (limited to 'evc/src/bin')
-rw-r--r-- | evc/src/bin/decode.rs | 19 | ||||
-rw-r--r-- | evc/src/bin/encode.rs | 25 |
2 files changed, 26 insertions, 18 deletions
diff --git a/evc/src/bin/decode.rs b/evc/src/bin/decode.rs index 293181a..0a00426 100644 --- a/evc/src/bin/decode.rs +++ b/evc/src/bin/decode.rs @@ -1,6 +1,5 @@ #![feature(box_patterns)] -use std::io::{self, BufReader, BufWriter}; - +use anyhow::Context; use clap::Parser; use evc::{ block::{Block, BlockInner}, @@ -9,24 +8,26 @@ use evc::{ ser::Source, view::View, }; +use std::io::{BufReader, BufWriter}; #[derive(Parser)] #[clap(about, version)] pub struct DecodeArgs {} -fn main() -> io::Result<()> { +fn main() -> anyhow::Result<()> { let _args = DecodeArgs::parse(); let mut input = BufReader::new(std::io::stdin()); let mut output = BufWriter::new(std::io::stdout()); - let header = input.get::<Header>()?; + let header = input.get::<Header>().context("reading header")?; eprintln!("{header:?}"); let size = header.resolution; - + let mut prev = Frame::new(size); - loop { - let block = Block::read(&mut input, size)?; + for i in 0.. { + eprintln!("decode frame {i}"); + let block = Block::read(&mut input, size).context("reading encoded frame")?; let mut frame = Frame::new(size); blit_block( @@ -35,9 +36,11 @@ fn main() -> io::Result<()> { prev.view((0, 0), size), ); - frame.write(&mut output)?; + frame.write(&mut output).context("writing raw frame")?; prev = frame; } + drop(input); + Ok(()) } fn blit_block(block: &Block, mut target: View<&mut Frame>, prev: View<&Frame>) { diff --git a/evc/src/bin/encode.rs b/evc/src/bin/encode.rs index c426aba..1934e26 100644 --- a/evc/src/bin/encode.rs +++ b/evc/src/bin/encode.rs @@ -1,3 +1,4 @@ +use anyhow::Context; use clap::Parser; use evc::{ block::{Block, BlockInner}, @@ -6,7 +7,7 @@ use evc::{ ser::Sink, view::View, }; -use std::io::{self, BufReader, BufWriter}; +use std::io::{BufReader, BufWriter}; #[derive(Parser)] #[clap(about, version)] @@ -17,28 +18,32 @@ pub struct EncodeArgs { height: usize, } -fn main() -> io::Result<()> { +fn main() -> anyhow::Result<()> { let args = EncodeArgs::parse(); let mut input = BufReader::new(std::io::stdin()); let mut output = BufWriter::new(std::io::stdout()); let size = (args.width, args.height); - output.put(Header { - resolution: size, - frame_count: 0, - })?; + output + .put(Header { + resolution: size, + frame_count: 0, + }) + .context("writing header")?; let mut prev_frame = Frame::new(size); for i in 0.. { - println!("frame {i}"); - let frame = Frame::read(&mut input, size)?; + eprintln!("encode frame {i}"); + let frame = Frame::read(&mut input, size) + .context("reading raw frame") + .unwrap(); let v1 = frame.view((0, 0), size); let v2 = prev_frame.view((0, 0), size); let root = encode_block(v1, v2); - root.write(&mut output)?; + root.write(&mut output).context("writing encoded frame")?; prev_frame = frame; } @@ -48,7 +53,7 @@ fn main() -> io::Result<()> { fn encode_block(view: View<&Frame>, prev: View<&Frame>) -> Block { let diff = View::diff(&view, &prev) / view.area() as f64; - eprintln!("{:?} {diff}", view.size); + // eprintln!("{:?} {diff}", view.size); let inner = if diff < 0.5 { BlockInner::Reference { translation: (0, 0), |