From da39ed55e1440fba61122c5fa2262ab9b0a9dd21 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 7 Mar 2023 19:13:59 +0100 Subject: works very well --- lvc/src/encode.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'lvc/src/encode.rs') diff --git a/lvc/src/encode.rs b/lvc/src/encode.rs index 5df803b..935aaba 100644 --- a/lvc/src/encode.rs +++ b/lvc/src/encode.rs @@ -1,18 +1,20 @@ use crate::diff::diff; -use crate::impls::ToArray; use crate::split::split; use crate::{Block, Frame, Ref, View}; -pub fn encode(last_frame: &Frame, frame: &Frame, view: View) -> Block { - if view.size().area() > 1024 { +pub struct EncodeConfig { + pub threshold: u32, + pub max_block_size: usize, +} + +pub fn encode(last_frame: &Frame, frame: &Frame, view: View, config: &EncodeConfig) -> Block { + if view.size().area() > config.max_block_size { let [av, bv] = split(view); - return Block::Split( - rayon::join( - || Box::new(encode(last_frame, frame, av)), - || Box::new(encode(last_frame, frame, bv)), - ) - .to_array(), + let (ab, bb) = rayon::join( + || Box::new(encode(last_frame, frame, av, config)), + || Box::new(encode(last_frame, frame, bv, config)), ); + return Block::Split(ab, bb); } let mut r = Ref::default(); @@ -30,7 +32,7 @@ pub fn encode(last_frame: &Frame, frame: &Frame, view: View) -> Block { } } - if d < 10000 { + if d < config.threshold { return Block::Ref(r); } else { Block::Lit(frame.export(view)) -- cgit v1.2.3-70-g09d2