diff options
author | Jingning Han <jingning@google.com> | 2015-02-11 10:51:50 -0800 |
---|---|---|
committer | Jingning Han <jingning@google.com> | 2015-02-11 11:08:10 -0800 |
commit | 4ce70e8847f73e70ad3e2ffa5ce3773b06addac0 (patch) | |
tree | b779fceb59df123bf94cc51aa7def55ff6a24cc3 /vp9/encoder/vp9_pickmode.c | |
parent | 2d924161c74ede567c925ab26ce489d78af12ccd (diff) | |
download | libvpx-4ce70e8847f73e70ad3e2ffa5ce3773b06addac0.tar libvpx-4ce70e8847f73e70ad3e2ffa5ce3773b06addac0.tar.gz libvpx-4ce70e8847f73e70ad3e2ffa5ce3773b06addac0.tar.bz2 libvpx-4ce70e8847f73e70ad3e2ffa5ce3773b06addac0.zip |
Add ref frame rate cost to non-RD mode decision
This commit adds a heuristic rate cost of reference frame to the
non-RD mode decision. It improves the compression performance of
speed -6 by 0.31% and speed -5 by 0.69%.
Change-Id: If7f3b45519d49b2cb640bcb7316a254efc8be446
Diffstat (limited to 'vp9/encoder/vp9_pickmode.c')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 70e90b6e7..d24e4c7e6 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -577,6 +577,9 @@ static const PREDICTION_MODE inter_mode_set[INTER_MODES] = { ZEROMV, NEARESTMV, NEARMV, NEWMV, }; +static const int ref_frame_cost[MAX_REF_FRAMES] = { + 1235, 229, 530, 615, +}; // TODO(jingning) placeholder for inter-frame non-RD mode decision. // this needs various further optimizations. to be continued.. void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, @@ -865,6 +868,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, this_rdc.rate += rate_mv; this_rdc.rate += cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] [INTER_OFFSET(this_mode)]; + this_rdc.rate += ref_frame_cost[ref_frame]; this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, this_rdc.rate, this_rdc.dist); @@ -971,6 +975,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, this_rdc.rate = args.rate; this_rdc.dist = args.dist; this_rdc.rate += cpi->mbmode_cost[this_mode]; + this_rdc.rate += ref_frame_cost[INTRA_FRAME]; this_rdc.rate += intra_cost_penalty; this_rdc.rdcost = RDCOST(x->rdmult, x->rddiv, this_rdc.rate, this_rdc.dist); |