ref: a007ec0f7f517d14acd94691c437ef7180519b45
parent: 3af39b9997f3f72f7581613e864cff9c7f859a22
parent: 3b789d36934161b741a82998685be856e72ac217
author: Marco <[email protected]>
date: Thu Oct 9 04:41:49 EDT 2014
Merge "vp8: Suppress denoising with respect to old reference frames."
--- a/vp8/encoder/denoising.h
+++ b/vp8/encoder/denoising.h
@@ -27,6 +27,8 @@
#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,
--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -1083,7 +1083,14 @@
{
/* 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 @@
/* 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;