summaryrefslogtreecommitdiff
path: root/vp8/encoder
diff options
context:
space:
mode:
authorYunqing Wang <yunqingwang@google.com>2011-02-10 12:42:44 -0800
committerCode Review <code-review@webmproject.org>2011-02-10 12:42:44 -0800
commit6f53e59641fb75189d888271a1dc87f224f04a2d (patch)
tree0ecaca29e5ad921360deedb680dd8bbbc44cda83 /vp8/encoder
parent7d8199f0c3422e6bd63bef4b9992ce0b2e6b74b5 (diff)
parent41e6eceb28b6b5bda8c4d8b0abbf182b8f30609c (diff)
downloadlibvpx-6f53e59641fb75189d888271a1dc87f224f04a2d.tar
libvpx-6f53e59641fb75189d888271a1dc87f224f04a2d.tar.gz
libvpx-6f53e59641fb75189d888271a1dc87f224f04a2d.tar.bz2
libvpx-6f53e59641fb75189d888271a1dc87f224f04a2d.zip
Merge "Improve motion search in real-time mode"
Diffstat (limited to 'vp8/encoder')
-rw-r--r--vp8/encoder/mcomp.c10
-rw-r--r--vp8/encoder/mcomp.h4
-rw-r--r--vp8/encoder/onyx_if.c2
-rw-r--r--vp8/encoder/pickinter.c2
-rw-r--r--vp8/encoder/rdopt.c4
-rw-r--r--vp8/encoder/temporal_filter.c2
6 files changed, 13 insertions, 11 deletions
diff --git a/vp8/encoder/mcomp.c b/vp8/encoder/mcomp.c
index d9923fbe9..33aaa2ca9 100644
--- a/vp8/encoder/mcomp.c
+++ b/vp8/encoder/mcomp.c
@@ -779,15 +779,17 @@ int vp8_hex_search
int *num00,
const vp8_variance_fn_ptr_t *vfp,
int *mvsadcost[2],
- int *mvcost[2]
+ int *mvcost[2],
+ MV *center_mv
)
{
MV hex[6] = { { -1, -2}, {1, -2}, {2, 0}, {1, 2}, { -1, 2}, { -2, 0} } ;
- MV neighbors[8] = { { -1, -1}, { -1, 0}, { -1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} } ;
+ MV neighbors[8] = { { -1, -1}, {0, -1}, {1, -1}, { -1, 0}, {1, 0}, { -1, 1}, {0, 1}, {1, 1} } ;
int i, j;
unsigned char *src = (*(b->base_src) + b->src);
int src_stride = b->src_stride;
- int rr = ref_mv->row, rc = ref_mv->col, br = rr >> 3, bc = rc >> 3, tr, tc;
+ int rr = center_mv->row, rc = center_mv->col;
+ int br = ref_mv->row >> 3, bc = ref_mv->col >> 3, tr, tc;
unsigned int besterr, thiserr = 0x7fffffff;
int k = -1, tk;
@@ -892,7 +894,7 @@ cal_neighbors:
best_mv->row = br;
best_mv->col = bc;
- return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + MVC(br, bc) ;
+ return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + vp8_mv_err_cost(best_mv, center_mv, mvcost, error_per_bit) ;
}
#undef MVC
#undef PRE
diff --git a/vp8/encoder/mcomp.h b/vp8/encoder/mcomp.h
index 7600f87fc..83f95c6e0 100644
--- a/vp8/encoder/mcomp.h
+++ b/vp8/encoder/mcomp.h
@@ -43,8 +43,8 @@ extern int vp8_hex_search
int *num00,
const vp8_variance_fn_ptr_t *vf,
int *mvsadcost[2],
- int *mvcost[2]
-
+ int *mvcost[2],
+ MV *center_mv
);
typedef int (fractional_mv_step_fp)
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index fc908df06..511631ae4 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -1121,6 +1121,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
#else
sf->search_method = DIAMOND;
#endif
+ sf->iterative_sub_pixel = 0;
cpi->mode_check_freq[THR_V_PRED] = 4;
cpi->mode_check_freq[THR_H_PRED] = 4;
@@ -1172,7 +1173,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
int total_skip;
int min = 2000;
- sf->iterative_sub_pixel = 0;
if (cpi->oxcf.encode_breakout > 2000)
min = cpi->oxcf.encode_breakout;
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c
index 287ca618e..0bfcd38a6 100644
--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -718,7 +718,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
if (cpi->sf.search_method == HEX)
{
- bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost);
+ bestsme = vp8_hex_search(x, b, d, &mvp, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost, &best_ref_mv);
mode_mv[NEWMV].row = d->bmi.mv.as_mv.row;
mode_mv[NEWMV].col = d->bmi.mv.as_mv.col;
}
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 632bca419..7080425c1 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -1149,7 +1149,7 @@ void vp8_rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x, BEST_SEG_INFO *bsi,
if (cpi->sf.search_method == HEX)
bestsme = vp8_hex_search(x, c, e, bsi->ref_mv,
- &mode_mv[NEW4X4], step_param, sadpb, &num00, v_fn_ptr, x->mvsadcost, x->mvcost);
+ &mode_mv[NEW4X4], step_param, sadpb, &num00, v_fn_ptr, x->mvsadcost, x->mvcost, bsi->ref_mv);
else
{
@@ -2091,7 +2091,7 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
if (cpi->sf.search_method == HEX)
{
- bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost);
+ bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost, &best_ref_mv);
mode_mv[NEWMV].row = d->bmi.mv.as_mv.row;
mode_mv[NEWMV].col = d->bmi.mv.as_mv.col;
}
diff --git a/vp8/encoder/temporal_filter.c b/vp8/encoder/temporal_filter.c
index 3c6d1a4d9..e4c3db1b8 100644
--- a/vp8/encoder/temporal_filter.c
+++ b/vp8/encoder/temporal_filter.c
@@ -204,7 +204,7 @@ static int vp8_temporal_filter_find_matching_mb_c
step_param,
sadpb/*x->errorperbit*/,
&num00, &cpi->fn_ptr[BLOCK_16X16],
- mvsadcost, mvcost);
+ mvsadcost, mvcost, &best_ref_mv1);
}
else
{