From 04ec930abc97892eba8f0914fad0016b1d13b733 Mon Sep 17 00:00:00 2001 From: Yunqing Wang <yunqingwang@google.com> Date: Mon, 2 May 2011 13:21:59 -0400 Subject: [PATCH] Modify HEX search Changed 8-neighbor searching to 4-neighour searching, and continued searching until the center point is the best match. Test on test set showed 1.3% encoding speed improvement as well as 0.1% PSNR and SSIM improvement at speed=-5 (rt mode). Will continue to improve it. Change-Id: If4993b1907dd742b906fd3f86fee77cc5932ee9a --- vp8/encoder/mcomp.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/vp8/encoder/mcomp.c b/vp8/encoder/mcomp.c index 651890d81c..9d447b2103 100644 --- a/vp8/encoder/mcomp.c +++ b/vp8/encoder/mcomp.c @@ -831,7 +831,9 @@ int vp8_hex_search ) { MV hex[6] = { { -1, -2}, {1, -2}, {2, 0}, {1, 2}, { -1, 2}, { -2, 0} } ; - MV neighbors[8] = { { -1, -1}, {0, -1}, {1, -1}, { -1, 0}, {1, 0}, { -1, 1}, {0, 1}, {1, 1} } ; + //MV neighbors[8] = { { -1, -1}, {0, -1}, {1, -1}, { -1, 0}, {1, 0}, { -1, 1}, {0, 1}, {1, 1} } ; + MV neighbors[4] = {{0, -1}, { -1, 0}, {1, 0}, {0, 1}} ; + int i, j; unsigned char *src = (*(b->base_src) + b->src); int src_stride = b->src_stride; @@ -918,24 +920,31 @@ int vp8_hex_search break; } - // check 8 1 away neighbors + // check 4 1-away neighbors cal_neighbors: - tr = br; - tc = bc; - for (i = 0; i < 8; i++) + for (j = 0; j < 32; j++) { - int nr = tr + neighbors[i].row, nc = tc + neighbors[i].col; + tr = br; + tc = bc; - if (nc < x->mv_col_min) continue; + for (i = 0; i < 4; i++) + { + int nr = tr + neighbors[i].row, nc = tc + neighbors[i].col; - if (nc > x->mv_col_max) continue; + if (nc < x->mv_col_min) continue; - if (nr < x->mv_row_min) continue; + if (nc > x->mv_col_max) continue; - if (nr > x->mv_row_max) continue; + if (nr < x->mv_row_min) continue; + + if (nr > x->mv_row_max) continue; + + CHECK_BETTER(thiserr, nr, nc); + } - CHECK_BETTER(thiserr, nr, nc); + if (tr == br && tc == bc) + break; } best_mv->row = br; -- GitLab