diff options
author | Jingning Han <jingning@google.com> | 2015-02-10 15:32:38 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2015-02-11 14:43:02 -0800 |
commit | e665c8f2c948f65a54de639e01efbd42d3d00bfc (patch) | |
tree | 80383fa24a6b60b7c5cc10d4aa4d2dc80fb64ef0 /vp9/encoder | |
parent | c9725813db4413ed4f4d8fcf11c4234ed9c8fe2e (diff) | |
download | libvpx-e665c8f2c948f65a54de639e01efbd42d3d00bfc.tar libvpx-e665c8f2c948f65a54de639e01efbd42d3d00bfc.tar.gz libvpx-e665c8f2c948f65a54de639e01efbd42d3d00bfc.tar.bz2 libvpx-e665c8f2c948f65a54de639e01efbd42d3d00bfc.zip |
Add mode cost to sub8x8 block mode decision in rtc coding
This commit allows the encoder to properly account for the mode
cost in sub8x8 non-RD mode decision.
Change-Id: I2951960d20e37ed08e372ee0c7044935b2b9b899
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index cc1b2ed1d..071747e17 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1130,8 +1130,6 @@ void vp9_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x, int64_t b_best_rd = INT64_MAX; const int i = idy * 2 + idx; PREDICTION_MODE this_mode; - int b_rate = 0; - int64_t b_dist = 0; RD_COST this_rdc; unsigned int var_y, sse_y; @@ -1159,6 +1157,7 @@ void vp9_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x, &b_mv[NEARMV]); for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) { + int b_rate = 0; xd->mi[0].bmi[i].as_mv[0].as_int = b_mv[this_mode].as_int; if (this_mode == NEWMV) { @@ -1220,6 +1219,9 @@ void vp9_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x, &x->pred_sse[ref_frame], NULL, 0, 0); xd->mi[0].bmi[i].as_mv[0].as_mv = tmp_mv; + } else { + b_rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] + [INTER_OFFSET(this_mode)]; } vp9_build_inter_predictor(pd->pre[0].buf, pd->pre[0].stride, @@ -1236,7 +1238,6 @@ void vp9_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x, &var_y, &sse_y); this_rdc.rate += b_rate; - this_rdc.dist += b_dist; this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, this_rdc.rate, this_rdc.dist); if (this_rdc.rdcost < b_best_rd) { |