diff --git a/src/rdo.rs b/src/rdo.rs index 526506e8f8f2560f506c9b5205959ad20edb0330..f206798fdff1e5e00264fef082130398d5b9d4bb 100755 --- a/src/rdo.rs +++ b/src/rdo.rs @@ -217,15 +217,14 @@ pub fn rdo_mode_decision( 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 && luma_mode.is_intra() { - intra_mode_set - } else { - same_as_luma_modes - }; + let mut mode_set_chroma = vec![ luma_mode ]; + + if is_chroma_block && luma_mode.is_intra() && luma_mode != PredictionMode::DC_PRED { + mode_set_chroma.push(PredictionMode::DC_PRED); + } // Find the best chroma prediction mode for the current luma prediction mode - for &chroma_mode in mode_set_chroma { + for &chroma_mode in &mode_set_chroma { for &skip in &[false, true] { // Don't skip when using intra modes if skip && luma_mode.is_intra() { continue; }