shithub: libvpx

Download patch

ref: b1284dffdb16b82e940e39b226b656801c83289b
parent: de302686b2b3f6bc2e1b0a1e43dd99bb97f5377a
author: Jingning Han <jingning@google.com>
date: Thu Jul 12 05:02:01 EDT 2018

Reland "Enable tpl model for speed 0"

This is a reland of 9c2c234a0b8f9c08719ac1fa286988a0a3626fd0

Threaded mismatch has been addressed.

Original change's description:
> 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

BUG=webm:1547

Change-Id: I025a21683ceed23d5f7147e200555b58b791315c

--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1958,10 +1958,10 @@
     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 @@
                      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);
 
@@ -3710,7 +3713,9 @@
   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;
 
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -843,7 +843,11 @@
   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;