Commit 3b789d36 authored by Marco's avatar Marco
Browse files

vp8: Suppress denoising with respect to old reference frames.

If the GOLDEN or ALTREF frame was last updated > x frames in the past,
don't use them for denoising (only consider LAST). Using an old reference
frame for denoising, e.g., if it is a long-term reference or the last key frame,
can cause some visible artifacts, in particular in the aggressive denoising mode.

Change-Id: I239c9fbb092c36cba7e95328f1fa67a58d6a7ed9
parent 23e8be90
......@@ -27,6 +27,8 @@ extern "C" {
#define SUM_DIFF_FROM_AVG_THRESH_UV (8 * 8 * 8)
#define MOTION_MAGNITUDE_THRESHOLD_UV (8*3)
#define MAX_GF_ARF_DENOISE_RANGE (16)
enum vp8_denoiser_decision
{
COPY_BLOCK,
......
......@@ -1083,7 +1083,14 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
{
/* Store for later use by denoiser. */
if (this_mode == ZEROMV && sse < zero_mv_sse )
// Dont' denoise with GOLDEN OR ALTREF is they are old reference
// frames (greater than MAX_GF_ARF_DENOISE_RANGE frames in past).
int skip_old_reference = ((this_ref_frame != LAST_FRAME) &&
(cpi->common.current_video_frame -
cpi->current_ref_frames[this_ref_frame] >
MAX_GF_ARF_DENOISE_RANGE)) ? 1 : 0;
if (this_mode == ZEROMV && sse < zero_mv_sse &&
!skip_old_reference)
{
zero_mv_sse = sse;
x->best_zeromv_reference_frame =
......@@ -1092,7 +1099,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
/* Store the best NEWMV in x for later use in the denoiser. */
if (x->e_mbd.mode_info_context->mbmi.mode == NEWMV &&
sse < best_sse)
sse < best_sse && !skip_old_reference)
{
best_sse = sse;
x->best_sse_inter_mode = NEWMV;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment