From 9c2c234a0b8f9c08719ac1fa286988a0a3626fd0 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Thu, 12 Jul 2018 09:02:01 -0700 Subject: [PATCH] Enable tpl model for speed 0 Enable adaptive Lagrangian multiplier for arf in speed 0, AQ mode 0, and low bit-depth settings. This improves the peak compression performance: avg PSNR overall PSNR SSIM low -0.462% -0.535% -0.358% mid -0.780% -0.857% -0.868% hd -0.914% -1.017% -0.471% 720p -0.624% -0.671% -1.553% nflx2k -0.764% -0.784% -0.908% The encoding time at speed 0 is slightly changed to be faster or slower: city_cif 1000 kbps 78.2 seconds -> 78.1 seconds bus_cif 1000 kbps 98.6 seconds -> 98.8 seconds. Change-Id: I18e7337bb61d985cbd3cf29e56439a6cdf675389 --- vp9/encoder/vp9_encodeframe.c | 13 +++++++++---- vp9/encoder/vp9_speed_features.c | 4 ++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index e23a81b96..5d92f7d10 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1958,10 +1958,10 @@ static void rd_pick_sb_modes(VP9_COMP *cpi, TileDataEnc *tile_data, if (cyclic_refresh_segment_id_boosted( get_segment_id(cm, map, bsize, mi_row, mi_col))) x->rdmult = vp9_cyclic_refresh_get_rdmult(cpi->cyclic_refresh); + } else { + if (cpi->sf.enable_tpl_model) x->rdmult = x->cb_rdmult; } - if (cpi->sf.enable_tpl_model) x->rdmult = x->cb_rdmult; - // Find best coding mode & reconstruct the MB so it is available // as a predictor for MBs that follow in the SB if (frame_is_intra_only(cm)) { @@ -2122,7 +2122,10 @@ static void encode_b(VP9_COMP *cpi, const TileInfo *const tile, ThreadData *td, PICK_MODE_CONTEXT *ctx) { MACROBLOCK *const x = &td->mb; set_offsets(cpi, tile, x, mi_row, mi_col, bsize); - if (cpi->sf.enable_tpl_model) x->rdmult = x->cb_rdmult; + + if (cpi->sf.enable_tpl_model && cpi->oxcf.aq_mode == NO_AQ) + x->rdmult = x->cb_rdmult; + update_state(cpi, td, ctx, mi_row, mi_col, bsize, output_enabled); encode_superblock(cpi, td, tp, output_enabled, mi_row, mi_col, bsize, ctx); @@ -3708,7 +3711,9 @@ static void rd_pick_partition(VP9_COMP *cpi, ThreadData *td, int rate_breakout_thr = cpi->sf.partition_search_breakout_thr.rate; int must_split = 0; - int partition_mul = cpi->sf.enable_tpl_model ? x->cb_rdmult : cpi->rd.RDMULT; + int partition_mul = cpi->sf.enable_tpl_model && cpi->oxcf.aq_mode == NO_AQ + ? x->cb_rdmult + : cpi->rd.RDMULT; (void)*tp_orig; diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index 31c416a71..80adf845e 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -843,7 +843,11 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi) { sf->allow_quant_coeff_opt = sf->optimize_coefficients; sf->quant_opt_thresh = 99.0; sf->allow_acl = 1; +#if CONFIG_VP9_HIGHBITDEPTH sf->enable_tpl_model = 0; +#else + sf->enable_tpl_model = 1; +#endif for (i = 0; i < TX_SIZES; i++) { sf->intra_y_mode_mask[i] = INTRA_ALL; -- 2.40.0