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
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 @@ /* 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); }