Initalize zeromv_sse and newmv_sse in vp9_pick_inter_mode
authorJingning Han <jingning@google.com>
Wed, 7 Jan 2015 19:41:56 +0000 (11:41 -0800)
committerJingning Han <jingning@google.com>
Wed, 7 Jan 2015 23:32:41 +0000 (15:32 -0800)
These two parameters are used to control the denoiser cut-off
thresholds. They should be properly initialized when starting
mode search of a given block.

Change-Id: Iba8a25487026a0dbe0d350c347d7e4e4e237b637

vp9/encoder/vp9_denoiser.c
vp9/encoder/vp9_pickmode.c

index 2266a26..784319f 100644 (file)
@@ -398,7 +398,10 @@ void vp9_denoiser_update_frame_info(VP9_DENOISER *denoiser,
 
 void vp9_denoiser_reset_frame_stats(PICK_MODE_CONTEXT *ctx) {
   ctx->zeromv_sse = UINT_MAX;
-  ctx->newmv_sse = UINT_MAX;
+  // This should be initialized as zero since mode search stage might skip
+  // NEWMV mode if inferred motion vector modes provide sufficiently good
+  // prediction quality.
+  ctx->newmv_sse = 0;
 }
 
 void vp9_denoiser_update_frame_stats(MB_MODE_INFO *mbmi, unsigned int sse,
index cf1e997..d9659d1 100644 (file)
@@ -605,6 +605,10 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
   mbmi->interp_filter = cm->interp_filter == SWITCHABLE ?
                         EIGHTTAP : cm->interp_filter;
 
+#if CONFIG_VP9_TEMPORAL_DENOISING
+  vp9_denoiser_reset_frame_stats(ctx);
+#endif
+
   for (ref_frame = LAST_FRAME; ref_frame <= GOLDEN_FRAME; ++ref_frame) {
     x->pred_mv_sad[ref_frame] = INT_MAX;
     frame_mv[NEWMV][ref_frame].as_int = INVALID_MV;