summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_pickmode.c
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2014-04-23 10:33:41 -0700
committerJingning Han <jingning@google.com>2014-04-23 10:41:07 -0700
commit8969f7c8922c4e35d8d1267e82f82bf5f2f970b5 (patch)
treea9ad1ad8604f140e81ed68452caef0eaf2142cd3 /vp9/encoder/vp9_pickmode.c
parente38ca5422cebb7411f9bb501ce21f63f1358e5dc (diff)
downloadlibvpx-8969f7c8922c4e35d8d1267e82f82bf5f2f970b5.tar
libvpx-8969f7c8922c4e35d8d1267e82f82bf5f2f970b5.tar.gz
libvpx-8969f7c8922c4e35d8d1267e82f82bf5f2f970b5.tar.bz2
libvpx-8969f7c8922c4e35d8d1267e82f82bf5f2f970b5.zip
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
Diffstat (limited to 'vp9/encoder/vp9_pickmode.c')
-rw-r--r--vp9/encoder/vp9_pickmode.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c
index 3d398edc9..699e70784 100644
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -238,6 +238,9 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
// 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 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
// 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;