vp9: Some adjustments to denoiser under high-noise condition.
Change-Id: Ib47d742d07f13c7c39cea85e228c19ae298baf4a
This commit is contained in:
parent
2c8338f982
commit
80bbba1494
@ -215,7 +215,8 @@ static VP9_DENOISER_DECISION perform_motion_compensation(VP9_DENOISER *denoiser,
|
|||||||
// Avoid denoising for small block (unless motion is small).
|
// Avoid denoising for small block (unless motion is small).
|
||||||
// Small blocks are selected in variance partition (before encoding) and
|
// Small blocks are selected in variance partition (before encoding) and
|
||||||
// will typically lie on moving areas.
|
// will typically lie on moving areas.
|
||||||
if (motion_magnitude > 16 && bs <= BLOCK_8X8)
|
if (denoiser->denoising_level < kDenHigh &&
|
||||||
|
motion_magnitude > 16 && bs <= BLOCK_8X8)
|
||||||
return COPY_BLOCK;
|
return COPY_BLOCK;
|
||||||
|
|
||||||
// If the best reference frame uses inter-prediction and there is enough of a
|
// If the best reference frame uses inter-prediction and there is enough of a
|
||||||
@ -242,6 +243,9 @@ static VP9_DENOISER_DECISION perform_motion_compensation(VP9_DENOISER *denoiser,
|
|||||||
ctx->best_sse_inter_mode = ZEROMV;
|
ctx->best_sse_inter_mode = ZEROMV;
|
||||||
ctx->best_sse_mv.as_int = 0;
|
ctx->best_sse_mv.as_int = 0;
|
||||||
*zeromv_filter = 1;
|
*zeromv_filter = 1;
|
||||||
|
if (denoiser->denoising_level > kDenMedium) {
|
||||||
|
motion_magnitude = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->newmv_sse > sse_thresh(bs, increase_denoising)) {
|
if (ctx->newmv_sse > sse_thresh(bs, increase_denoising)) {
|
||||||
@ -334,7 +338,7 @@ void vp9_denoiser_denoise(VP9_COMP *cpi, MACROBLOCK *mb,
|
|||||||
|
|
||||||
if (cpi->use_skin_detection &&
|
if (cpi->use_skin_detection &&
|
||||||
bs <= BLOCK_32X32 &&
|
bs <= BLOCK_32X32 &&
|
||||||
denoiser->denoising_level >= kDenLow) {
|
denoiser->denoising_level < kDenHigh) {
|
||||||
int motion_level = (motion_magnitude < 16) ? 0 : 1;
|
int motion_level = (motion_magnitude < 16) ? 0 : 1;
|
||||||
// If motion for current block is small/zero, compute consec_zeromv for
|
// If motion for current block is small/zero, compute consec_zeromv for
|
||||||
// skin detection (early exit in skin detection is done for large
|
// skin detection (early exit in skin detection is done for large
|
||||||
@ -375,8 +379,7 @@ void vp9_denoiser_denoise(VP9_COMP *cpi, MACROBLOCK *mb,
|
|||||||
motion_level);
|
motion_level);
|
||||||
}
|
}
|
||||||
if (!is_skin &&
|
if (!is_skin &&
|
||||||
denoiser->denoising_level == kDenHigh &&
|
denoiser->denoising_level == kDenHigh) {
|
||||||
motion_magnitude < 16) {
|
|
||||||
denoiser->increase_denoising = 1;
|
denoiser->increase_denoising = 1;
|
||||||
} else {
|
} else {
|
||||||
denoiser->increase_denoising = 0;
|
denoiser->increase_denoising = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user