summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2014-02-26 09:20:24 -0800
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2014-02-26 09:20:24 -0800
commit1cc769a561fd7d88a28837e90b30ce1731a5d29c (patch)
treeba63d37003f2d6c792839c159a06a05df3aa9da0 /vp9
parent8b33c641621237e321c6907c86be1ac7d25fb8cc (diff)
parentc0e99f84f9c2ff909020a7ce76f60d1f78b56fc7 (diff)
downloadlibvpx-1cc769a561fd7d88a28837e90b30ce1731a5d29c.tar
libvpx-1cc769a561fd7d88a28837e90b30ce1731a5d29c.tar.gz
libvpx-1cc769a561fd7d88a28837e90b30ce1731a5d29c.tar.bz2
libvpx-1cc769a561fd7d88a28837e90b30ce1731a5d29c.zip
Merge "Use sub-pixel accuracy prediction non-RD mode"
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_pickmode.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c
index 7e1bcd45a..0d0dc0cc7 100644
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -183,6 +183,8 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
BLOCK_SIZE bsize) {
MACROBLOCKD *xd = &x->e_mbd;
MB_MODE_INFO *mbmi = &xd->mi_8x8[0]->mbmi;
+ struct macroblock_plane *const p = &x->plane[0];
+ struct macroblockd_plane *const pd = &xd->plane[0];
const BLOCK_SIZE block_size = get_plane_block_size(bsize, &xd->plane[0]);
MB_PREDICTION_MODE this_mode, best_mode = ZEROMV;
MV_REFERENCE_FRAME ref_frame, best_ref_frame = LAST_FRAME;
@@ -255,7 +257,14 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
continue;
}
- dist = x->mode_sad[ref_frame][INTER_OFFSET(this_mode)];
+ mbmi->mode = this_mode;
+ mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int;
+
+ vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
+
+ dist = cpi->fn_ptr[bsize].sdf(p->src.buf, p->src.stride,
+ pd->dst.buf, pd->dst.stride, INT_MAX);
+
this_rd = rate + dist;
if (this_rd < best_rd) {
@@ -274,8 +283,6 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
// Perform intra prediction search, if the best SAD is above a certain
// threshold.
if (best_rd > inter_mode_thresh) {
- struct macroblock_plane *const p = &x->plane[0];
- struct macroblockd_plane *const pd = &xd->plane[0];
for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) {
vp9_predict_intra_block(xd, 0, b_width_log2(bsize),
mbmi->tx_size, this_mode,