From 49c082c8e848c8af3cb7b2b913dcb0a1efd86822 Mon Sep 17 00:00:00 2001 From: Monty Montgomery <xiphmont@gmail.com> Date: Tue, 18 Sep 2018 08:39:16 -0400 Subject: [PATCH] Streamline block delta code in deblocking Dn't perform all the block-level delta math when block-level deltas aren't enabled. --- src/deblock.rs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/deblock.rs b/src/deblock.rs index 203004b3..adca6ec7 100644 --- a/src/deblock.rs +++ b/src/deblock.rs @@ -22,25 +22,30 @@ use FrameState; use DeblockState; fn deblock_level(deblock: &DeblockState, block: &Block, pli: usize, pass: usize) -> u8 { - let mode = block.mode; - let reference = block.ref_frames[0]; - let mode_type = if mode >= NEARESTMV && mode != GLOBALMV && mode!= GLOBAL_GLOBALMV {1} else {0}; let idx = if pli == 0 { pass } else { pli+1 }; - // By-block filter strength delta, if the feature is active. - let block_delta = if deblock.block_delta_multi { - block.deblock_deltas[ idx ] << deblock.block_delta_shift - } else { - block.deblock_deltas[ 0 ] << deblock.block_delta_shift - }; + let mut level = deblock.levels[idx]; + + if deblock.block_deltas_enabled { + // By-block filter strength delta, if the feature is active. + let block_delta = if deblock.block_delta_multi { + block.deblock_deltas[ idx ] << deblock.block_delta_shift + } else { + block.deblock_deltas[ 0 ] << deblock.block_delta_shift + }; + + // Add to frame-specified filter strength (Y-vertical, Y-horizontal, U, V) + level = clamp(block_delta + level as i8, 0, MAX_LOOP_FILTER as i8) as u8; + } - // Add to frame-specified filter strength (Y-vertical, Y-horizontal, U, V) - let level = clamp(block_delta + deblock.levels[idx] as i8, 0, MAX_LOOP_FILTER as i8) as u8; // if fi.seg_feaure_active { // rav1e does not yet support segments or segment features // } // Are delta modifiers for specific references and modes active? If so, add them too. if deblock.deltas_enabled { + let mode = block.mode; + let reference = block.ref_frames[0]; + let mode_type = if mode >= NEARESTMV && mode != GLOBALMV && mode!= GLOBAL_GLOBALMV {1} else {0}; let l5 = level >> 5; clamp (level as i32 + ((deblock.ref_deltas[reference] as i32) << l5) + if reference == INTRA_FRAME { -- GitLab