shithub: libvpx

Download patch

ref: 688c5ac2a8f8c183d2127d60c67d4a6758a84777
parent: 39b9731876e57aa68335cef6bf5d687a49bee6d9
parent: 609e91f9b7634f0fffef385cd0bccd18ab34ae92
author: Marco Paniconi <marpan@google.com>
date: Wed May 28 08:32:44 EDT 2014

Merge "vp8 denoiser: fix to zero_mv mode selection."

--- a/vp8/encoder/denoising.c
+++ b/vp8/encoder/denoising.c
@@ -249,6 +249,7 @@
     int mv_col;
     unsigned int motion_magnitude2;
     unsigned int sse_thresh;
+    int sse_diff_thresh = 0;
     MV_REFERENCE_FRAME frame = x->best_reference_frame;
     MV_REFERENCE_FRAME zero_frame = x->best_zeromv_reference_frame;
 
@@ -273,11 +274,16 @@
         mbmi->need_to_clamp_mvs = x->need_to_clamp_best_mvs;
         mv_col = x->best_sse_mv.as_mv.col;
         mv_row = x->best_sse_mv.as_mv.row;
+        // Bias to zero_mv if small amount of motion.
+        // Note sse_diff_thresh is intialized to zero, so this ensures
+        // we will always choose zero_mv for denoising if
+        // zero_mv_see <= best_sse (i.e., sse_diff <= 0).
+        if ((unsigned int)(mv_row * mv_row + mv_col * mv_col)
+            <= NOISE_MOTION_THRESHOLD)
+            sse_diff_thresh = (int)SSE_DIFF_THRESHOLD;
 
         if (frame == INTRA_FRAME ||
-            ((unsigned int)(mv_row *mv_row + mv_col *mv_col)
-              <= NOISE_MOTION_THRESHOLD &&
-             sse_diff < (int)SSE_DIFF_THRESHOLD))
+            sse_diff <= sse_diff_thresh)
         {
             /*
              * Handle intra blocks as referring to last frame with zero motion
--