diff --git a/src/predict.rs b/src/predict.rs index fc64bbcec9557d43436307169ecf733a4c76575a..723b9c780636258b2a879c9af0a7ba2e5d18d398 100755 --- a/src/predict.rs +++ b/src/predict.rs @@ -38,7 +38,6 @@ pub static RAV1E_INTRA_MODES_MINIMAL: &'static [PredictionMode] = &[ pub static RAV1E_INTER_MODES: &'static [PredictionMode] = &[ PredictionMode::GLOBALMV, - PredictionMode::DC_PRED, ]; // Weights are quadratic from '1' to '1 / block_size', scaled by 2^sm_weight_log2_scale. diff --git a/src/rdo.rs b/src/rdo.rs index 1c01cd203445db3a3753bc74a2a4b0b7e2c227c0..69d7847578f5b40220d13b05450e3895e1f969a3 100755 --- a/src/rdo.rs +++ b/src/rdo.rs @@ -197,20 +197,26 @@ pub fn rdo_mode_decision( let cw_checkpoint = cw.checkpoint(); // Exclude complex prediction modes at higher speed levels - let mode_set = if fi.frame_type == FrameType::INTER { - RAV1E_INTER_MODES - } else if fi.config.speed <= 3 { + let intra_mode_set = if (fi.frame_type == FrameType::KEY && fi.config.speed <= 3) || + (fi.frame_type == FrameType::INTER && fi.config.speed <= 1) { RAV1E_INTRA_MODES } else { RAV1E_INTRA_MODES_MINIMAL }; - for &luma_mode in mode_set { + let mut mode_set: Vec<PredictionMode> = Vec::new(); + + if fi.frame_type == FrameType::INTER { + mode_set.extend_from_slice(RAV1E_INTER_MODES); + } + mode_set.extend_from_slice(intra_mode_set); + + for &luma_mode in &mode_set { assert!(fi.frame_type == FrameType::INTER || luma_mode.is_intra()); let same_as_luma_modes = &[ luma_mode ]; - let mode_set_chroma = if is_chroma_block && fi.config.speed <= 3 && luma_mode.is_intra() { - RAV1E_INTRA_MODES + let mode_set_chroma = if is_chroma_block && luma_mode.is_intra() { + intra_mode_set } else { same_as_luma_modes };