]> granicus.if.org Git - libvpx/commitdiff
vp9 denoiser: Add another noise level to denoising.
authorMarco <marpan@google.com>
Wed, 11 Nov 2015 18:09:40 +0000 (10:09 -0800)
committerMarco <marpan@google.com>
Wed, 11 Nov 2015 19:21:26 +0000 (11:21 -0800)
Change-Id: Idc755ab54e4f78bb7d75bc97634c451804edad99

vp9/encoder/vp9_denoiser.c
vp9/encoder/vp9_denoiser.h
vp9/encoder/vp9_noise_estimate.c
vp9/encoder/vp9_noise_estimate.h

index c592832cbcc7a2ceb00d995803b4ccdd5d77892d..c382b77f32003604fdd977f5fbe790f01cfb4aec 100644 (file)
@@ -323,7 +323,7 @@ void vp9_denoiser_denoise(VP9_DENOISER *denoiser, MACROBLOCK *mb,
   struct buf_2d src = mb->plane[0].src;
   int is_skin = 0;
 
-  if (bs <= BLOCK_16X16 && denoiser->denoising_level >= kDenMedium) {
+  if (bs <= BLOCK_16X16 && denoiser->denoising_level >= kDenLow) {
     // Take center pixel in block to determine is_skin.
     const int y_width_shift = (4 << b_width_log2_lookup[bs]) >> 1;
     const int y_height_shift = (4 << b_height_log2_lookup[bs]) >> 1;
@@ -349,7 +349,7 @@ void vp9_denoiser_denoise(VP9_DENOISER *denoiser, MACROBLOCK *mb,
     denoiser->increase_denoising = 0;
   }
 
-  if (denoiser->denoising_level >= kDenMedium)
+  if (denoiser->denoising_level >= kDenLow)
     decision = perform_motion_compensation(denoiser, mb, bs,
                                            denoiser->increase_denoising,
                                            mi_row, mi_col, ctx,
@@ -524,6 +524,7 @@ int vp9_denoiser_alloc(VP9_DENOISER *denoiser, int width, int height,
 #endif
   denoiser->increase_denoising = 0;
   denoiser->frame_buffer_initialized = 1;
+  denoiser->denoising_level = kDenLow;
   return 0;
 }
 
index 8bed9e8600bd7923670efd49c3f989b066400087..bc676e925f551948f67e77ed168884a78dcd6c4f 100644 (file)
@@ -27,6 +27,7 @@ typedef enum vp9_denoiser_decision {
 } VP9_DENOISER_DECISION;
 
 typedef enum vp9_denoiser_level {
+  kDenLowLow,
   kDenLow,
   kDenMedium,
   kDenHigh
index e0d7575b76840f490676a260e5fc0149cd3f30be..ddf081c86517aad7c2bdb63cc29ba71d76aa1861 100644 (file)
@@ -212,8 +212,10 @@ void vp9_update_noise_estimate(VP9_COMP *const cpi) {
         else
           if (ne->value > ne->thresh)
             ne->level = kMedium;
-          else
+          else if (ne->value > (ne->thresh >> 1))
             ne->level = kLow;
+          else
+            ne->level = kLowLow;
       }
     }
   }
index 22885b8daf3be7d47b833459985d8779562aa91b..b5dded9efb7a6341804e95ecc14a1934625f7d0c 100644 (file)
@@ -24,6 +24,7 @@ extern "C" {
 #endif
 
 typedef enum noise_level {
+  kLowLow,
   kLow,
   kMedium,
   kHigh