From cfc9a1727ac8e3209f5212c68778962db8bebbdf Mon Sep 17 00:00:00 2001 From: Luca Barbato <lu_zero@gentoo.org> Date: Sat, 15 Sep 2018 22:38:29 +0000 Subject: [PATCH] Add NEAR1MV and NEAR2MV only when the mv_stack has enough mv --- src/predict.rs | 4 +--- src/rdo.rs | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/predict.rs b/src/predict.rs index 7b185e2f..1a01683f 100755 --- a/src/predict.rs +++ b/src/predict.rs @@ -41,12 +41,10 @@ pub static RAV1E_INTRA_MODES_MINIMAL: &'static [PredictionMode] = &[ PredictionMode::V_PRED ]; -pub static RAV1E_INTER_MODES: &'static [PredictionMode] = &[ +pub static RAV1E_INTER_MODES_MINIMAL: &'static [PredictionMode] = &[ PredictionMode::GLOBALMV, PredictionMode::NEARESTMV, PredictionMode::NEAR0MV, - PredictionMode::NEAR1MV, - PredictionMode::NEAR2MV, PredictionMode::NEWMV ]; diff --git a/src/rdo.rs b/src/rdo.rs index ac35ac65..fdf11822 100755 --- a/src/rdo.rs +++ b/src/rdo.rs @@ -23,7 +23,7 @@ use motion_compensate; use partition::*; use plane::*; use cdef::*; -use predict::{RAV1E_INTRA_MODES, RAV1E_INTRA_MODES_MINIMAL, RAV1E_INTER_MODES}; +use predict::{RAV1E_INTRA_MODES, RAV1E_INTRA_MODES_MINIMAL, RAV1E_INTER_MODES_MINIMAL}; use quantize::dc_q; use std; use std::f64; @@ -303,23 +303,25 @@ pub fn rdo_mode_decision( }; let mut mode_set: Vec<PredictionMode> = Vec::new(); + let mut mv_stack = Vec::new(); + let mode_context = + cw.find_mvrefs(bo, LAST_FRAME, &mut mv_stack, bsize, false); if fi.frame_type == FrameType::INTER { - mode_set.extend_from_slice(RAV1E_INTER_MODES); + mode_set.extend_from_slice(RAV1E_INTER_MODES_MINIMAL); + if mv_stack.len() >= 3 { + mode_set.push(PredictionMode::NEAR1MV); + } + if mv_stack.len() >= 4 { + mode_set.push(PredictionMode::NEAR2MV); + } } mode_set.extend_from_slice(intra_mode_set); - let mut mv_stack = Vec::new(); - let mode_context = - cw.find_mvrefs(bo, LAST_FRAME, &mut mv_stack, bsize, false); - mode_set.iter().for_each(|&luma_mode| { let luma_mode_is_intra = luma_mode.is_intra(); assert!(fi.frame_type == FrameType::INTER || luma_mode_is_intra); - if luma_mode == PredictionMode::NEAR1MV && mv_stack.len() < 3 { return; } - if luma_mode == PredictionMode::NEAR2MV && mv_stack.len() < 4 { return; } - let mut mode_set_chroma = vec![luma_mode]; if luma_mode_is_intra && is_chroma_block { -- GitLab