]> granicus.if.org Git - libvpx/commitdiff
Do one level less of transform search for large blocks
authorHui Su <huisu@google.com>
Wed, 25 Apr 2018 05:42:54 +0000 (22:42 -0700)
committerHui Su <huisu@google.com>
Wed, 25 Apr 2018 19:31:48 +0000 (12:31 -0700)
If block size is larger than 32x32, search transform size for one level
less than the other blocks.

This mainly affects speed 0 and 1, as speed >= 2 uses largest transform
size(except for keyframes and alt-ref frames).

Compression(negative means gain):
        speed 0     speed 1
lowres  -0.007%       0.00%
midres   0.023%     -0.011%
hdres    0.002%     -0.016%

Encoder speed:
Tested on crowd_run_1080p 30 frames
Fixed QP = 30, speed 0: 582.5s -> 564.6s
               speed 1:  75.0s ->  73.3s

Change-Id: I46622efafe0e88d502efa1480a5324ead1d1e8d0

vp9/encoder/vp9_rdopt.c

index f753cf6ab7ec2adfdfa324067c4915dd2fba6fd1..0d93d2bd66b7cfd508055e5ba15ddf25c475f341 100644 (file)
@@ -859,6 +859,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 = VPXMAX(start_tx - cpi->sf.tx_size_search_depth, 0);
+    if (bs > BLOCK_32X32) end_tx = VPXMIN(end_tx + 1, start_tx);
   } else {
     TX_SIZE chosen_tx_size =
         VPXMIN(max_tx_size, tx_mode_to_biggest_tx_size[cm->tx_mode]);