aboutsummaryrefslogtreecommitdiff
path: root/evc/src/codec
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-06 16:45:30 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-06 16:45:30 +0100
commit849c3769fbd38940c9bfa73bcea160848a38d9b6 (patch)
treead7cfc70b4c121e94a46e89e7c95f260abbcd791 /evc/src/codec
parent624471a4b1f2e1656a2ba46070d8f127dcd0e364 (diff)
downloadvideo-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.rs14
-rw-r--r--evc/src/codec/encode.rs21
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,
}
}