From 5c5223860a7cd0361ff8c6cb32e8f67cbb9734d9 Mon Sep 17 00:00:00 2001 From: Janne Salonen Date: Fri, 7 Jun 2013 14:01:23 +0300 Subject: [PATCH] Modified loop filter edge skipping Added condition to not to skip filtering of transform block edges when the edge is also a decoding block edge. Change-Id: Iaccb6206c4202b78e5dca3b89379556e0f4aba0c --- vp9/common/vp9_loopfilter.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/vp9/common/vp9_loopfilter.c b/vp9/common/vp9_loopfilter.c index 59df0b7..643233c 100644 --- a/vp9/common/vp9_loopfilter.c +++ b/vp9/common/vp9_loopfilter.c @@ -683,8 +683,14 @@ static void filter_block_plane(VP9_COMMON *cm, MACROBLOCKD *xd, const int skip_left = (c + mi_col > 0) ? mi[c - 1].mbmi.mb_skip_coeff : 0; const int skip_this = mi[c].mbmi.mb_skip_coeff; - const int skip_this_c = skip_this && skip_left; - const int skip_this_r = skip_this && skip_above; + // left edge of current unit is block/partition edge -> no skip + const int block_edge_left = b_width_log2(mi->mbmi.sb_type) ? + !(c & ((1 << (b_width_log2(mi->mbmi.sb_type)-1)) - 1)) : 1; + const int skip_this_c = skip_this && skip_left && !block_edge_left; + // top edge of current unit is block/partition edge -> no skip + const int block_edge_above = b_height_log2(mi->mbmi.sb_type) ? + !(r & ((1 << (b_height_log2(mi->mbmi.sb_type)-1)) - 1)) : 1; + const int skip_this_r = skip_this && skip_above && !block_edge_above; const TX_SIZE tx_size = plane ? get_uv_tx_size(xd) : mi[c].mbmi.txfm_size; // Filter level can vary per MI -- 2.7.4