summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_denoiser.c
diff options
context:
space:
mode:
authorMarco <marpan@google.com>2016-04-25 08:49:08 -0700
committerMarco <marpan@google.com>2016-04-25 10:15:03 -0700
commit229c686c89b89ce534209fc71548fada65d5b70d (patch)
tree33092926166750df23b80d284f4fda6b46ac9add /vp9/encoder/vp9_denoiser.c
parentcc5023d55fbd8d08de62402f6d533bcb139f4904 (diff)
downloadlibvpx-229c686c89b89ce534209fc71548fada65d5b70d.tar
libvpx-229c686c89b89ce534209fc71548fada65d5b70d.tar.gz
libvpx-229c686c89b89ce534209fc71548fada65d5b70d.tar.bz2
libvpx-229c686c89b89ce534209fc71548fada65d5b70d.zip
vp9-denoiser: Bugfix and some adjustments for high noise case.
Need to check that sse for non-zero mv has been set for the current block (i.e., check that nonzero-mv is tested as a mode, so newmv_sse != UINT_MAX) before forcing to not use zero-mv for denoising. Also increase some thresholds (sse and sse_diff) for high noise case, and use shift operaton instead of multiplication on a threshold computation. Change-Id: Iae7339475d57240316b7fa8b887c4ee3c0d0dbec
Diffstat (limited to 'vp9/encoder/vp9_denoiser.c')
-rw-r--r--vp9/encoder/vp9_denoiser.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/vp9/encoder/vp9_denoiser.c b/vp9/encoder/vp9_denoiser.c
index 8b7006280..7f5265a94 100644
--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -49,16 +49,19 @@ static int noise_motion_thresh(BLOCK_SIZE bs, int increase_denoising) {
}
static unsigned int sse_thresh(BLOCK_SIZE bs, int increase_denoising) {
- return (1 << num_pels_log2_lookup[bs]) * (increase_denoising ? 60 : 40);
+ return (1 << num_pels_log2_lookup[bs]) * (increase_denoising ? 80 : 40);
}
static int sse_diff_thresh(BLOCK_SIZE bs, int increase_denoising,
int motion_magnitude) {
if (motion_magnitude >
noise_motion_thresh(bs, increase_denoising)) {
- return 0;
+ if (increase_denoising)
+ return (1 << num_pels_log2_lookup[bs]) << 2;
+ else
+ return 0;
} else {
- return (1 << num_pels_log2_lookup[bs]) * 20;
+ return (1 << num_pels_log2_lookup[bs]) << 4;
}
}
@@ -222,6 +225,7 @@ static VP9_DENOISER_DECISION perform_motion_compensation(VP9_DENOISER *denoiser,
// If the best reference frame uses inter-prediction and there is enough of a
// difference in sum-squared-error, use it.
if (frame != INTRA_FRAME &&
+ ctx->newmv_sse != UINT_MAX &&
sse_diff > sse_diff_thresh(bs, increase_denoising, motion_magnitude)) {
mi->ref_frame[0] = ctx->best_reference_frame;
mi->mode = ctx->best_sse_inter_mode;