Merge "vp9: SVC: Fix issue with artifact for svc-denoising."
This commit is contained in:
commit
9d403d6f48
@ -187,7 +187,7 @@ 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,
|
||||
VP9_COMMON *const cm, 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 num_spatial_layers, int width) {
|
||||
@ -199,6 +199,7 @@ static VP9_DENOISER_DECISION perform_motion_compensation(
|
||||
int i;
|
||||
struct buf_2d saved_dst[MAX_MB_PLANE];
|
||||
struct buf_2d saved_pre[MAX_MB_PLANE];
|
||||
RefBuffer *saved_block_refs[2];
|
||||
|
||||
frame = ctx->best_reference_frame;
|
||||
saved_mi = *mi;
|
||||
@ -260,6 +261,7 @@ static VP9_DENOISER_DECISION perform_motion_compensation(
|
||||
saved_pre[i] = filter_mbd->plane[i].pre[0];
|
||||
saved_dst[i] = filter_mbd->plane[i].dst;
|
||||
}
|
||||
saved_block_refs[0] = filter_mbd->block_refs[0];
|
||||
|
||||
// Set the pointers in the MACROBLOCKD to point to the buffers in the denoiser
|
||||
// struct.
|
||||
@ -289,10 +291,12 @@ static VP9_DENOISER_DECISION perform_motion_compensation(
|
||||
denoiser->mc_running_avg_y.uv_stride, mi_row, mi_col);
|
||||
filter_mbd->plane[2].dst.stride = denoiser->mc_running_avg_y.uv_stride;
|
||||
|
||||
set_ref_ptrs(cm, filter_mbd, frame, NONE);
|
||||
vp9_build_inter_predictors_sby(filter_mbd, mi_row, mi_col, bs);
|
||||
|
||||
// Restore everything to its original state
|
||||
*mi = saved_mi;
|
||||
filter_mbd->block_refs[0] = saved_block_refs[0];
|
||||
for (i = 0; i < MAX_MB_PLANE; ++i) {
|
||||
filter_mbd->plane[i].pre[0] = saved_pre[i];
|
||||
filter_mbd->plane[i].dst = saved_dst[i];
|
||||
@ -363,7 +367,7 @@ 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, increase_denoising, mi_row, mi_col, ctx,
|
||||
&cpi->common, denoiser, mb, bs, increase_denoising, mi_row, mi_col, ctx,
|
||||
motion_magnitude, is_skin, &zeromv_filter, consec_zeromv,
|
||||
cpi->svc.number_spatial_layers, cpi->Source->y_width);
|
||||
|
||||
|
@ -1587,14 +1587,6 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
|
||||
!svc_force_zero_mode[GOLDEN_FRAME - 1] && !force_skip_low_temp_var))
|
||||
use_golden_nonzeromv = 0;
|
||||
|
||||
#if CONFIG_VP9_TEMPORAL_DENOISING
|
||||
// TODO(marpan): Allowing golden as the (spatial) reference for SVC with
|
||||
// denoising causes bad artifact. Remove this condition when artifact issue
|
||||
// is resolved.
|
||||
if (cpi->use_svc && cpi->oxcf.noise_sensitivity > 0 && denoise_svc_pickmode)
|
||||
usable_ref_frame = LAST_FRAME;
|
||||
#endif
|
||||
|
||||
if (cpi->oxcf.speed >= 8 && !cpi->use_svc &&
|
||||
((cpi->rc.frames_since_golden + 1) < x->last_sb_high_content ||
|
||||
x->last_sb_high_content > 40))
|
||||
@ -2036,13 +2028,6 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
|
||||
!(cpi->ref_frame_flags & flag_list[GOLDEN_FRAME]) ||
|
||||
(!cpi->svc.layer_context[cpi->svc.temporal_layer_id].is_key_frame &&
|
||||
svc_force_zero_mode[best_ref_frame - 1]);
|
||||
#if CONFIG_VP9_TEMPORAL_DENOISING
|
||||
// TODO(marpan): Temporary fix to keep intra prediction on as we currently
|
||||
// disallow golden as the (spatial) reference for SVC with denoising due to
|
||||
// artifact issue, Remove this condition when artifact issue is resolved.
|
||||
if (cpi->use_svc && cpi->oxcf.noise_sensitivity > 0 && denoise_svc_pickmode)
|
||||
perform_intra_pred = 1;
|
||||
#endif
|
||||
inter_mode_thresh = (inter_mode_thresh << 1) + inter_mode_thresh;
|
||||
}
|
||||
if (cpi->oxcf.lag_in_frames > 0 && cpi->oxcf.rc_mode == VPX_VBR &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user