diff options
Diffstat (limited to 'evc/src/bin')
-rw-r--r-- | evc/src/bin/decode.rs | 63 | ||||
-rw-r--r-- | evc/src/bin/encode.rs | 111 | ||||
-rw-r--r-- | evc/src/bin/info.rs | 10 |
3 files changed, 0 insertions, 184 deletions
diff --git a/evc/src/bin/decode.rs b/evc/src/bin/decode.rs deleted file mode 100644 index fbf5624..0000000 --- a/evc/src/bin/decode.rs +++ /dev/null @@ -1,63 +0,0 @@ -#![feature(box_patterns)] -use anyhow::Context; -use clap::Parser; -use indicatif::ProgressBar; -use libreschmux::{ - block::Block, - codec::decode::{decode_block, DecodeConfig}, - debug::draw_debug, - format::{header::Header, ser::Source}, - frame::Frame, -}; -use log::{info, warn}; -use std::io::{BufReader, BufWriter}; - -#[derive(Parser)] -#[clap(about, version)] -pub struct DecodeArgs { - #[arg(long)] - debug: bool, -} - -fn main() -> anyhow::Result<()> { - env_logger::init_from_env("LOG"); - 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>().context("reading header")?; - info!("{header:?}"); - if header.resolution.x * header.resolution.y > 100_000_000 { - warn!("resolution is quite big. video is likely corrupt."); - } - let size = header.resolution; - - let config = DecodeConfig {}; - - let progress_bar = ProgressBar::new(header.frame_count as u64); - - let mut prev = Frame::new(size); - for i in 0..header.frame_count { - info!("decode frame {i}"); - - let block = Block::read(&mut input, size).context("reading encoded frame")?; - let mut frame = Frame::new(size); - - decode_block(&block, frame.view_mut(), prev.view(), &config); - - progress_bar.inc(1); - - if args.debug { - let mut f2 = frame.clone(); - draw_debug(&block, f2.view_mut()); - f2.write(&mut output).context("writing raw frame")?; - } else { - frame.write(&mut output).context("writing raw frame")?; - } - - prev = frame; - } - drop(input); - Ok(()) -} diff --git a/evc/src/bin/encode.rs b/evc/src/bin/encode.rs deleted file mode 100644 index 43f2c57..0000000 --- a/evc/src/bin/encode.rs +++ /dev/null @@ -1,111 +0,0 @@ -use anyhow::Context; -use clap::Parser; -use indicatif::ProgressBar; -use libreschmux::{ - codec::{ - decode::{decode_block, DecodeConfig}, - encode::{encode_block, EncodeConfig, EncodeMode}, - }, - format::{header::Header, ser::Sink}, - frame::Frame, - helpers::vector::Vec2, -}; -use log::info; -use std::io::{BufReader, BufWriter}; - -#[derive(Parser)] -#[clap(about, version)] -pub struct EncodeArgs { - #[arg(short = 'W', long)] - width: usize, - #[arg(short = 'H', long)] - height: usize, - - #[arg(short, long)] - mode: EncodeMode, - - #[arg(long)] - no_linear_transform: bool, - #[arg(long)] - no_value_scale: bool, - #[arg(long)] - no_translate: bool, - - #[arg[short = 'L', long]] - length: Option<usize>, - - #[arg(short, long, default_value = "8")] - min_block_size: isize, - - #[arg(short = 't', long, default_value = "200")] - ref_thres: f64, -} - -fn main() -> anyhow::Result<()> { - env_logger::init_from_env("LOG"); - let args = EncodeArgs::parse(); - - let mut input = BufReader::new(std::io::stdin()); - let mut output = BufWriter::new(std::io::stdout()); - - let config = EncodeConfig { - mode: args.mode, - ref_thres: args.ref_thres, - weight_factor: 50.0, - max_diff_area: 10_000, - min_block_size: args.min_block_size, - do_translate: !args.no_translate, - do_linear_transform: !args.no_linear_transform, - do_value_scale: !args.no_value_scale, - }; - - let size = Vec2 { - x: args.width as isize, - y: args.height as isize, - }; - output - .put(Header { - resolution: size, - frame_count: args.length.unwrap_or(usize::MAX), - }) - .context("writing header")?; - - let progress_bar = args.length.map(|len| ProgressBar::new(len as u64)); - let mut prev_frame = Frame::new(size); - - for i in 0.. { - info!("encode frame {i}"); - let mut frame = Frame::read(&mut input, size).context("reading raw frame")?; - - let v1 = frame.view(); - let v2 = prev_frame.view(); - - let (error, root) = encode_block(v1, v2, &config); - - // compress_block( - // &mut root, - // Vec2 { - // x: size.x as usize, - // y: size.y as usize, - // }, - // ); - - root.write(&mut output, size) - .context("writing encoded frame")?; - - info!( - "cumulative error: {error} ({} per pixel)", - error / frame.view().area() as f64 - ); - - if let Some(progress_bar) = &progress_bar { - progress_bar.inc(1); - } - - decode_block(&root, frame.view_mut(), prev_frame.view(), &DecodeConfig {}); - - prev_frame = frame; - } - - Ok(()) -} diff --git a/evc/src/bin/info.rs b/evc/src/bin/info.rs deleted file mode 100644 index ebd8442..0000000 --- a/evc/src/bin/info.rs +++ /dev/null @@ -1,10 +0,0 @@ -use anyhow::Context; -use libreschmux::format::{header::Header, ser::Source}; -use std::io::BufReader; - -fn main() { - env_logger::init_from_env("LOG"); - let mut input = BufReader::new(std::io::stdin()); - let header = input.get::<Header>().context("reading header").unwrap(); - eprintln!("{header:#?}") -} |