diff options
author | metamuffin <metamuffin@disroot.org> | 2022-12-06 16:45:30 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-12-06 16:45:30 +0100 |
commit | 849c3769fbd38940c9bfa73bcea160848a38d9b6 (patch) | |
tree | ad7cfc70b4c121e94a46e89e7c95f260abbcd791 /evc/src/codec | |
parent | 624471a4b1f2e1656a2ba46070d8f127dcd0e364 (diff) | |
download | video-codec-experiments-849c3769fbd38940c9bfa73bcea160848a38d9b6.tar video-codec-experiments-849c3769fbd38940c9bfa73bcea160848a38d9b6.tar.bz2 video-codec-experiments-849c3769fbd38940c9bfa73bcea160848a38d9b6.tar.zst |
simplify block type
Diffstat (limited to 'evc/src/codec')
-rw-r--r-- | evc/src/codec/decode.rs | 14 | ||||
-rw-r--r-- | evc/src/codec/encode.rs | 21 |
2 files changed, 11 insertions, 24 deletions
diff --git a/evc/src/codec/decode.rs b/evc/src/codec/decode.rs index 9dc6a69..f4559c8 100644 --- a/evc/src/codec/decode.rs +++ b/evc/src/codec/decode.rs @@ -1,18 +1,14 @@ -use crate::{ - block::{Block, BlockInner}, - frame::Frame, - view::View, -}; +use crate::{block::Block, frame::Frame, view::View}; pub fn decode_block(block: &Block, mut target: View<&mut Frame>, prev: View<&Frame>) { - match &block.inner { - BlockInner::Literal(pixels) => target.set_pixels(pixels), - BlockInner::Split(box [a, b]) => { + match &block { + Block::Literal(pixels) => target.set_pixels(pixels), + Block::Split(box [a, b]) => { let [at, bt] = target.split_mut_unsafe(); let [ap, bp] = prev.split(); decode_block(a, at, ap); decode_block(b, bt, bp); } - BlockInner::Reference { translation: _ } => target.copy_from(&prev), + Block::Reference { translation: _ } => target.copy_from(&prev), } } diff --git a/evc/src/codec/encode.rs b/evc/src/codec/encode.rs index 1729e94..43a2783 100644 --- a/evc/src/codec/encode.rs +++ b/evc/src/codec/encode.rs @@ -1,34 +1,25 @@ -use crate::{ - block::{Block, BlockInner}, - frame::Frame, - view::View, -}; +use crate::{block::Block, frame::Frame, view::View}; pub fn encode_block(view: View<&Frame>, prev: View<&Frame>) -> Block { let diff = View::diff(&view, &prev) / view.area() as f64; // eprintln!("{:?} {diff}", view.size); - let inner = if diff < 0.9 { - BlockInner::Reference { + if diff < 0.9 { + Block::Reference { translation: (0, 0), } } else { if view.size.0 < 16 { - BlockInner::Literal(view.pixels()) + Block::Literal(view.pixels()) } else { let [av, bv] = view.split(); let [ap, bp] = prev.split(); let a = encode_block(av, ap); let b = encode_block(bv, bp); if a.is_literal() && b.is_literal() { - BlockInner::Literal(view.pixels()) + Block::Literal(view.pixels()) } else { - BlockInner::Split(Box::new([a, b])) + Block::Split(Box::new([a, b])) } } - }; - - Block { - size: view.size, - inner, } } |