diff options
author | Jerome Jiang <jianj@google.com> | 2019-04-17 01:51:41 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-04-17 01:51:41 +0000 |
commit | 7ef20bf0519ef12d653fb70304970419cf4cdda1 (patch) | |
tree | 2279936baf6af583960a8cf811693e07ba2afe05 /vp9/encoder | |
parent | 6f594bb8c81f9c863495f0dbb3a4d7d78ffa8409 (diff) | |
parent | a9d70ee2fa73179701bd39166305a7b3478c8327 (diff) | |
download | libvpx-7ef20bf0519ef12d653fb70304970419cf4cdda1.tar libvpx-7ef20bf0519ef12d653fb70304970419cf4cdda1.tar.gz libvpx-7ef20bf0519ef12d653fb70304970419cf4cdda1.tar.bz2 libvpx-7ef20bf0519ef12d653fb70304970419cf4cdda1.zip |
Merge "vp9: refactor condtions for model rd for large blocks."
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index e0806aad2..38b00dec3 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1694,6 +1694,18 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, int scene_change_detected = cpi->rc.high_source_sad || (cpi->use_svc && cpi->svc.high_source_sad_superframe); + // For low motion content use x->sb_is_skin in addition to VeryHighSad + // for setting large_block. + const int large_block = + (x->content_state_sb == kVeryHighSad || + (x->sb_is_skin && cpi->rc.avg_frame_low_motion > 70) || + cpi->oxcf.speed < 7) + ? bsize > BLOCK_32X32 + : bsize >= BLOCK_32X32; + const int use_model_yrd_large = + cpi->oxcf.rc_mode == VPX_CBR && large_block && + !cyclic_refresh_segment_id_boosted(xd->mi[0]->segment_id) && + cm->base_qindex; init_best_pickmode(&best_pickmode); @@ -2227,14 +2239,6 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, reuse_inter_pred, &this_mode_pred, &var_y, &sse_y, force_smooth_filter); } else { - // For low motion content use x->sb_is_skin in addition to VeryHighSad - // for setting large_block. - const int large_block = - (x->content_state_sb == kVeryHighSad || - (x->sb_is_skin && cpi->rc.avg_frame_low_motion > 70) || - cpi->oxcf.speed < 7) - ? bsize > BLOCK_32X32 - : bsize >= BLOCK_32X32; mi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP : filter_ref; if (cpi->use_svc && ref_frame == GOLDEN_FRAME && @@ -2244,9 +2248,8 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); // For large partition blocks, extra testing is done. - if (cpi->oxcf.rc_mode == VPX_CBR && large_block && - !cyclic_refresh_segment_id_boosted(xd->mi[0]->segment_id) && - cm->base_qindex) { + if (use_model_yrd_large) { + rd_computed = 1; model_rd_for_sb_y_large(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist, &var_y, &sse_y, mi_row, mi_col, &this_early_term, flag_preduv_computed); |