From 07ce7751894d98ecec81d1ab68e0d4cf4912fc5b Mon Sep 17 00:00:00 2001 From: Marco Paniconi Date: Fri, 11 Jan 2013 16:28:51 -0800 Subject: [PATCH] Reduce loop filter in cyclic refresh. Reduce the delta loop filter for blocks that are cyclicly refreshed. This helps to reduce the dot artifacts that may happen when zero_mv blocks are repeatedly loop-filtered. This change, along with the fix in: https://gerrit.chromium.org/gerrit/#/c/40409/ helps to reduce this artifact, but cannot remove the dot artifacts completely. Change-Id: I44675e7a0f59295b648a3b7d4956fb301231a97f --- vp8/encoder/onyx_if.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 9837485..1b21155 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -3732,11 +3732,22 @@ static void encode_frame_to_data_rate /* Setup background Q adjustment for error resilient mode. * For multi-layer encodes only enable this for the base layer. - */ + * Reduce loop filter to reduce "dot" artifacts that can occur for repeated + * loop filtering on ZEROMV_LASTREF blocks. + * For now reducing it to -32, only for resolutions above CIF and + * #temporal_layers < 3 (artifact is hard to see at low spatial resolution + * and/or high #temporal layers). + */ if (cpi->cyclic_refresh_mode_enabled) { + int delta_loop_filter = 0; + if (cm->Width > 352 && cm->Height > 288 && + cpi->oxcf.number_of_layers < 3) + { + delta_loop_filter = -32; + } if (cpi->current_layer==0) - cyclic_background_refresh(cpi, Q, 0); + cyclic_background_refresh(cpi, Q, delta_loop_filter); else disable_segmentation(cpi); } -- 2.7.4