diff options
Diffstat (limited to 'evc/src/bin/encode.rs')
-rw-r--r-- | evc/src/bin/encode.rs | 12 |
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])) + } } }; |