aboutsummaryrefslogtreecommitdiff
path: root/evc/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'evc/src/bin')
-rw-r--r--evc/src/bin/decode.rs19
-rw-r--r--evc/src/bin/encode.rs25
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),