summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorMarco <marpan@google.com>2015-11-11 10:09:40 -0800
committerMarco <marpan@google.com>2015-11-11 11:21:26 -0800
commitff32369804d6a29c6ede4300eacc62e63b691db2 (patch)
treecb404be846077a90ba04a6ad3ecf9f8196c56cbb /vp9
parent79a194692fd449b4fd10a6235aa59f285b6656c3 (diff)
downloadlibvpx-ff32369804d6a29c6ede4300eacc62e63b691db2.tar
libvpx-ff32369804d6a29c6ede4300eacc62e63b691db2.tar.gz
libvpx-ff32369804d6a29c6ede4300eacc62e63b691db2.tar.bz2
libvpx-ff32369804d6a29c6ede4300eacc62e63b691db2.zip
vp9 denoiser: Add another noise level to denoising.
Change-Id: Idc755ab54e4f78bb7d75bc97634c451804edad99
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_denoiser.c5
-rw-r--r--vp9/encoder/vp9_denoiser.h1
-rw-r--r--vp9/encoder/vp9_noise_estimate.c4
-rw-r--r--vp9/encoder/vp9_noise_estimate.h1
4 files changed, 8 insertions, 3 deletions
diff --git a/vp9/encoder/vp9_denoiser.c b/vp9/encoder/vp9_denoiser.c
index c592832cb..c382b77f3 100644
--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -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;
}
diff --git a/vp9/encoder/vp9_denoiser.h b/vp9/encoder/vp9_denoiser.h
index 8bed9e860..bc676e925 100644
--- a/vp9/encoder/vp9_denoiser.h
+++ b/vp9/encoder/vp9_denoiser.h
@@ -27,6 +27,7 @@ typedef enum vp9_denoiser_decision {
} VP9_DENOISER_DECISION;
typedef enum vp9_denoiser_level {
+ kDenLowLow,
kDenLow,
kDenMedium,
kDenHigh
diff --git a/vp9/encoder/vp9_noise_estimate.c b/vp9/encoder/vp9_noise_estimate.c
index e0d7575b7..ddf081c86 100644
--- a/vp9/encoder/vp9_noise_estimate.c
+++ b/vp9/encoder/vp9_noise_estimate.c
@@ -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;
}
}
}
diff --git a/vp9/encoder/vp9_noise_estimate.h b/vp9/encoder/vp9_noise_estimate.h
index 22885b8da..b5dded9ef 100644
--- a/vp9/encoder/vp9_noise_estimate.h
+++ b/vp9/encoder/vp9_noise_estimate.h
@@ -24,6 +24,7 @@ extern "C" {
#endif
typedef enum noise_level {
+ kLowLow,
kLow,
kMedium,
kHigh