diff options
Diffstat (limited to 'evc/src/bin/decode.rs')
-rw-r--r-- | evc/src/bin/decode.rs | 63 |
1 files changed, 0 insertions, 63 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(()) -} |