shithub: libvpx

Download patch

ref: 8969f7c8922c4e35d8d1267e82f82bf5f2f970b5
parent: e38ca5422cebb7411f9bb501ce21f63f1358e5dc
author: Jingning Han <jingning@google.com>
date: Wed Apr 23 06:33:41 EDT 2014

Chessboard pattern prediction filter type search in non-RD coding

This commit introduces a chessboard pattern search for the prediction
filter type search. It runs extensive search in alternate blocks and
allows the rest blocks to refer coding decisions of their nearby
neighbors.

For pedestrian 1080p at 4000 kbps, the runtime of speed -5 goes down
from 43990 ms to 42200 ms. The overall compression performance for
RTC set is changed by -1.37%.

Change-Id: Icfe220c49451cda796f0ca91d935c9ed01e56c9d

--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -238,6 +238,9 @@
   // Mode index conversion form THR_MODES to MB_PREDICTION_MODE for a ref frame.
   int mode_idx[MB_MODE_COUNT] = {0};
   INTERP_FILTER filter_ref = SWITCHABLE;
+  int bsl = mi_width_log2_lookup[bsize];
+  int pred_filter_search = (((mi_row + mi_col) >> bsl) +
+                            cpi->sf.chessboard_index) & 0x01;
 
   x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
 
@@ -338,6 +341,7 @@
       // motion vector is at sub-pixel accuracy level for luma component, i.e.,
       // the last three bits are all zeros.
       if ((this_mode == NEWMV || filter_ref == SWITCHABLE) &&
+          pred_filter_search &&
           ((mbmi->mv[0].as_mv.row & 0x07) != 0 ||
            (mbmi->mv[0].as_mv.col & 0x07) != 0)) {
         int64_t tmp_rdcost1 = INT64_MAX;
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -269,6 +269,7 @@
     sf->use_nonrd_pick_mode = 1;
     sf->search_method = FAST_DIAMOND;
     sf->allow_skip_recode = 0;
+    sf->chessboard_index = cm->current_video_frame & 0x01;
   }
 
   if (speed >= 6) {
--- a/vp9/encoder/vp9_speed_features.h
+++ b/vp9/encoder/vp9_speed_features.h
@@ -274,6 +274,9 @@
   // encoding process for RTC.
   int partition_check;
 
+  // Chessboard pattern index
+  int chessboard_index;
+
   // Use finer quantizer in every other few frames that run variable block
   // partition type search.
   int force_frame_boost;