X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Fvp6enc%2Fdsp.rs;h=2651458f59fbcdb09704d6655ae922a2fd85c941;hp=b83cd11e09d5c96f4fb357efdbff07a52627d798;hb=c5d5793c1fd18882a32acabb8141a221b0a97b61;hpb=b922b48d3b003b2f4b84755541fd9dc4be8f22f6 diff --git a/nihav-duck/src/codecs/vp6enc/dsp.rs b/nihav-duck/src/codecs/vp6enc/dsp.rs index b83cd11..2651458 100644 --- a/nihav-duck/src/codecs/vp6enc/dsp.rs +++ b/nihav-duck/src/codecs/vp6enc/dsp.rs @@ -69,6 +69,21 @@ pub fn vp_fdct(blk: &mut [i16; 64]) { } } +pub trait MVSearchModeCreate { + fn create_search(&self) -> Box; +} + +impl MVSearchModeCreate for MVSearchMode { + fn create_search(&self) -> Box { + match *self { + MVSearchMode::Full => Box::new(FullMVSearch::new()), + MVSearchMode::Diamond => Box::new(DiaSearch::new()), + MVSearchMode::Hexagon => Box::new(HexSearch::new()), + _ => unreachable!(), + } + } +} + const MAX_DIST: u32 = std::u32::MAX; const DIST_THRESH: u32 = 256; @@ -190,10 +205,10 @@ macro_rules! pattern_search { impl MVSearch for $struct_name { fn search_mb(&mut self, mv_est: &mut MVEstimator, cur_blk: &[[u8; 64]; 6], mb_x: usize, mb_y: usize) -> (MV, u32) { - search_template!(self, mv_est, cur_blk, mb_x, mb_y, sad_mb) + search_template!(self, mv_est, cur_blk, mb_x, mb_y, sad_mb, DIST_THRESH) } fn search_blk(&mut self, mv_est: &mut MVEstimator, cur_blk: &[u8; 64], xpos: usize, ypos: usize) -> (MV, u32) { - search_template!(self, mv_est, cur_blk, xpos, ypos, sad_blk) + search_template!(self, mv_est, cur_blk, xpos, ypos, sad_blk, DIST_THRESH) } } }