aboutsummaryrefslogtreecommitdiff
path: root/evc/src/codec/decode.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-06 15:52:08 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-06 15:52:08 +0100
commit6a3aaca8727d3f0292d62dbcd54e3bf87df74c0c (patch)
treed9bc5fe941c49de0885795288e2ef45f88d0a40c /evc/src/codec/decode.rs
parenta5b09a2fc7a2e1ddc5776993373052cd3eda9b51 (diff)
downloadvideo-codec-experiments-6a3aaca8727d3f0292d62dbcd54e3bf87df74c0c.tar
video-codec-experiments-6a3aaca8727d3f0292d62dbcd54e3bf87df74c0c.tar.bz2
video-codec-experiments-6a3aaca8727d3f0292d62dbcd54e3bf87df74c0c.tar.zst
split files
Diffstat (limited to 'evc/src/codec/decode.rs')
-rw-r--r--evc/src/codec/decode.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/evc/src/codec/decode.rs b/evc/src/codec/decode.rs
new file mode 100644
index 0000000..9dc6a69
--- /dev/null
+++ b/evc/src/codec/decode.rs
@@ -0,0 +1,18 @@
+use crate::{
+ block::{Block, BlockInner},
+ 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]) => {
+ 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),
+ }
+}