aboutsummaryrefslogtreecommitdiff
path: root/evc/src/bin/decode.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-06 09:06:30 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-06 09:06:30 +0100
commit86eda32f9d8fed77136ffd3495e93c4c37e7671b (patch)
tree8ce0b9eb22336ae19e5fae85c45ef376bd546ce9 /evc/src/bin/decode.rs
parentd5179b3cc79bda5aa346f111be493f3f9b223d30 (diff)
downloadvideo-codec-experiments-86eda32f9d8fed77136ffd3495e93c4c37e7671b.tar
video-codec-experiments-86eda32f9d8fed77136ffd3495e93c4c37e7671b.tar.bz2
video-codec-experiments-86eda32f9d8fed77136ffd3495e93c4c37e7671b.tar.zst
debug draw
Diffstat (limited to 'evc/src/bin/decode.rs')
-rw-r--r--evc/src/bin/decode.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/evc/src/bin/decode.rs b/evc/src/bin/decode.rs
index af6edc6..44fcbe4 100644
--- a/evc/src/bin/decode.rs
+++ b/evc/src/bin/decode.rs
@@ -5,6 +5,7 @@ use evc::{
block::{Block, BlockInner},
frame::Frame,
header::Header,
+ pixel::Pixel,
ser::Source,
view::View,
};
@@ -12,10 +13,13 @@ use std::io::{BufReader, BufWriter};
#[derive(Parser)]
#[clap(about, version)]
-pub struct DecodeArgs {}
+pub struct DecodeArgs {
+ #[arg(long)]
+ debug: bool,
+}
fn main() -> anyhow::Result<()> {
- let _args = DecodeArgs::parse();
+ let args = DecodeArgs::parse();
let mut input = BufReader::new(std::io::stdin());
let mut output = BufWriter::new(std::io::stdout());
@@ -36,7 +40,14 @@ fn main() -> anyhow::Result<()> {
prev.view((0, 0), size),
);
- frame.write(&mut output).context("writing raw frame")?;
+ if args.debug {
+ let mut f2 = frame.clone();
+ draw_debug(&block, f2.view_mut((0, 0), size));
+ f2.write(&mut output).context("writing raw frame")?;
+ } else {
+ frame.write(&mut output).context("writing raw frame")?;
+ }
+
prev = frame;
}
drop(input);
@@ -55,3 +66,19 @@ fn blit_block(block: &Block, mut target: View<&mut Frame>, prev: View<&Frame>) {
BlockInner::Reference { translation: _ } => target.copy_from(&prev),
}
}
+
+fn draw_debug(block: &Block, mut target: View<&mut Frame>) {
+ match &block.inner {
+ BlockInner::Literal(_) => {
+ target.draw_box(Pixel::GREEN);
+ }
+ BlockInner::Split(box [a, b]) => {
+ let [at, bt] = target.split_mut_unsafe();
+ draw_debug(a, at);
+ draw_debug(b, bt);
+ }
+ BlockInner::Reference { translation: _ } => {
+ target.draw_box(Pixel::BLUE);
+ }
+ }
+}