summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_denoiser.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/encoder/vp9_denoiser.c')
-rw-r--r--vp9/encoder/vp9_denoiser.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/vp9/encoder/vp9_denoiser.c b/vp9/encoder/vp9_denoiser.c
index 1d9a6702d..336abb406 100644
--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -187,7 +187,8 @@ static uint8_t *block_start(uint8_t *framebuf, int stride, int mi_row,
static VP9_DENOISER_DECISION perform_motion_compensation(
VP9_DENOISER *denoiser, MACROBLOCK *mb, BLOCK_SIZE bs,
int increase_denoising, int mi_row, int mi_col, PICK_MODE_CONTEXT *ctx,
- int motion_magnitude, int is_skin, int *zeromv_filter, int consec_zeromv) {
+ int motion_magnitude, int is_skin, int *zeromv_filter, int consec_zeromv,
+ int num_spatial_layers) {
int sse_diff = ctx->zeromv_sse - ctx->newmv_sse;
MV_REFERENCE_FRAME frame;
MACROBLOCKD *filter_mbd = &mb->e_mbd;
@@ -211,7 +212,9 @@ static VP9_DENOISER_DECISION perform_motion_compensation(
// 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 &&
+ if (frame != INTRA_FRAME &&
+ (frame != GOLDEN_FRAME || num_spatial_layers == 1) &&
+ 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;
@@ -221,9 +224,10 @@ static VP9_DENOISER_DECISION perform_motion_compensation(
frame = ctx->best_zeromv_reference_frame;
ctx->newmv_sse = ctx->zeromv_sse;
// Bias to last reference.
- if (frame != LAST_FRAME &&
- ((ctx->zeromv_lastref_sse<(5 * ctx->zeromv_sse)>> 2) ||
- denoiser->denoising_level >= kDenHigh)) {
+ if (num_spatial_layers > 1 ||
+ (frame != LAST_FRAME &&
+ ((ctx->zeromv_lastref_sse<(5 * ctx->zeromv_sse)>> 2) ||
+ denoiser->denoising_level >= kDenHigh))) {
frame = LAST_FRAME;
ctx->newmv_sse = ctx->zeromv_lastref_sse;
}
@@ -361,7 +365,8 @@ void vp9_denoiser_denoise(VP9_COMP *cpi, MACROBLOCK *mb, int mi_row, int mi_col,
if (denoiser->denoising_level >= kDenLow)
decision = perform_motion_compensation(
denoiser, mb, bs, denoiser->increase_denoising, mi_row, mi_col, ctx,
- motion_magnitude, is_skin, &zeromv_filter, consec_zeromv);
+ motion_magnitude, is_skin, &zeromv_filter, consec_zeromv,
+ cpi->svc.number_spatial_layers);
if (decision == FILTER_BLOCK) {
decision = vp9_denoiser_filter(