summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYunqing Wang <yunqingwang@google.com>2014-03-21 13:40:27 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2014-03-21 13:40:27 -0700
commit3967435f655fec96dba08051a58c5f66a91b1c5b (patch)
treeef4297fc04476d25c94afcf16a2d149bd16d2de0
parentb3afae3a10e75d7eff1f9e384b7d2fb1b247eb42 (diff)
parent49b2330d8b3e8efa39af9195c984ca46d0b761e2 (diff)
downloadlibvpx-3967435f655fec96dba08051a58c5f66a91b1c5b.tar
libvpx-3967435f655fec96dba08051a58c5f66a91b1c5b.tar.gz
libvpx-3967435f655fec96dba08051a58c5f66a91b1c5b.tar.bz2
libvpx-3967435f655fec96dba08051a58c5f66a91b1c5b.zip
Merge "Add prediction mode skipping in non-rd situation"
-rw-r--r--vp9/encoder/vp9_pickmode.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c
index 8b2a89423..01bcbca22 100644
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -230,6 +230,12 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
intra_cost_penalty, 0);
const int64_t intra_mode_cost = 50;
+ unsigned char segment_id = mbmi->segment_id;
+ const int *const rd_threshes = cpi->rd_threshes[segment_id][bsize];
+ const int *const rd_thresh_freq_fact = cpi->rd_thresh_freq_fact[bsize];
+ // Mode index conversion form THR_MODES to MB_PREDICTION_MODE for a ref frame.
+ int mode_idx[MB_MODE_COUNT] = {0};
+
x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
x->skip = 0;
@@ -273,6 +279,14 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
mbmi->ref_frame[0] = ref_frame;
+ // Set conversion index for LAST_FRAME.
+ if (ref_frame == LAST_FRAME) {
+ mode_idx[NEARESTMV] = THR_NEARESTMV; // LAST_FRAME, NEARESTMV
+ mode_idx[NEARMV] = THR_NEARMV; // LAST_FRAME, NEARMV
+ mode_idx[ZEROMV] = THR_ZEROMV; // LAST_FRAME, ZEROMV
+ mode_idx[NEWMV] = THR_NEWMV; // LAST_FRAME, NEWMV
+ }
+
for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) {
int rate_mv = 0;
@@ -280,6 +294,11 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
(1 << INTER_OFFSET(this_mode)))
continue;
+ if (best_rd < ((int64_t)rd_threshes[mode_idx[this_mode]] *
+ rd_thresh_freq_fact[this_mode] >> 5) ||
+ rd_threshes[mode_idx[this_mode]] == INT_MAX)
+ continue;
+
if (this_mode == NEWMV) {
if (this_rd < (int64_t)(1 << num_pels_log2_lookup[bsize]))
continue;