diff options
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, } } |