aboutsummaryrefslogtreecommitdiff
path: root/evc/src/bin/encode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'evc/src/bin/encode.rs')
-rw-r--r--evc/src/bin/encode.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/evc/src/bin/encode.rs b/evc/src/bin/encode.rs
index 1934e26..3e34a3c 100644
--- a/evc/src/bin/encode.rs
+++ b/evc/src/bin/encode.rs
@@ -54,7 +54,7 @@ fn main() -> anyhow::Result<()> {
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.5 {
+ let inner = if diff < 0.9 {
BlockInner::Reference {
translation: (0, 0),
}
@@ -62,9 +62,15 @@ fn encode_block(view: View<&Frame>, prev: View<&Frame>) -> Block {
if view.size.0 < 32 {
BlockInner::Literal(view.pixels())
} else {
- let [a, b] = view.split();
+ let [av, bv] = view.split();
let [ap, bp] = prev.split();
- BlockInner::Split(Box::new([encode_block(a, ap), encode_block(b, bp)]))
+ let a = encode_block(av, ap);
+ let b = encode_block(bv, bp);
+ if a.is_literal() && b.is_literal() {
+ BlockInner::Literal(view.pixels())
+ } else {
+ BlockInner::Split(Box::new([a, b]))
+ }
}
};