summaryrefslogtreecommitdiff
path: root/vp9/encoder
diff options
context:
space:
mode:
authorJerome Jiang <jianj@google.com>2019-04-17 01:51:41 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-04-17 01:51:41 +0000
commit7ef20bf0519ef12d653fb70304970419cf4cdda1 (patch)
tree2279936baf6af583960a8cf811693e07ba2afe05 /vp9/encoder
parent6f594bb8c81f9c863495f0dbb3a4d7d78ffa8409 (diff)
parenta9d70ee2fa73179701bd39166305a7b3478c8327 (diff)
downloadlibvpx-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.c25
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);