]> granicus.if.org Git - libvpx/commitdiff
Add speed feture to control tx size search depth
authorHui Su <huisu@google.com>
Mon, 23 Apr 2018 21:05:23 +0000 (14:05 -0700)
committerHui Su <huisu@google.com>
Tue, 24 Apr 2018 00:01:04 +0000 (17:01 -0700)
Set the max depth as 2 for speed 0.

Compression(negative means gain):
        speed 0     speed 1
lowres   -0.01%      0.00%
midres    0.05%     -0.01%
hdres    -0.01%      0.01%

Encoding speed gain:
Tested on crowd_run_1080p 30 frames
Fixed QP = 20, speed 0: 669.7s -> 656.1s
               speed 1: 104.5s -> 101.5s
Fixed QP = 40, speed 0: 440.7s -> 435.8s
               speed 1:  47.7s ->  45.1s

Change-Id: I61bc13818c72317b9f1d596727d54a906b20c012

vp9/encoder/vp9_rdopt.c
vp9/encoder/vp9_speed_features.c
vp9/encoder/vp9_speed_features.h

index b6541b0f7357df61ea4594b06d41ef9f36163dbe..f753cf6ab7ec2adfdfa324067c4915dd2fba6fd1 100644 (file)
@@ -858,7 +858,7 @@ static void choose_tx_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x, int *rate,
 
   if (cm->tx_mode == TX_MODE_SELECT) {
     start_tx = max_tx_size;
-    end_tx = 0;
+    end_tx = VPXMAX(start_tx - cpi->sf.tx_size_search_depth, 0);
   } else {
     TX_SIZE chosen_tx_size =
         VPXMIN(max_tx_size, tx_mode_to_biggest_tx_size[cm->tx_mode]);
index c0f985cbda01b2fbc3d08f86641308a316518de5..90da687268990b20634d3faae020d192c33380df 100644 (file)
@@ -817,6 +817,7 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi) {
   // Some speed-up features even for best quality as minimal impact on quality.
   sf->adaptive_rd_thresh = 1;
   sf->tx_size_search_breakout = 1;
+  sf->tx_size_search_depth = 2;
 
   sf->exhaustive_searches_thresh =
       (cpi->twopass.fr_content_type == FC_GRAPHICS_ANIMATION) ? (1 << 20)
index 15e8dacbd5448bb24657a4747d723ff163abbc04..946bf05454a8c85e3df7121936b843ea62f9ca6f 100644 (file)
@@ -272,6 +272,9 @@ typedef struct SPEED_FEATURES {
   // for intra and model coefs for the rest.
   TX_SIZE_SEARCH_METHOD tx_size_search_method;
 
+  // How many levels of tx size to search, starting from the largest.
+  int tx_size_search_depth;
+
   // Low precision 32x32 fdct keeps everything in 16 bits and thus is less
   // precise but significantly faster than the non lp version.
   int use_lp32x32fdct;