summaryrefslogtreecommitdiff
path: root/vp8/encoder
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2012-10-09 10:24:37 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2012-10-09 10:24:37 -0700
commit81fd7ac58973e06180d72183d5397db753ed0da1 (patch)
tree4bf2b6f49f0668166c5a075f3431323e765d628a /vp8/encoder
parent8b698e8cb17a709251d38d7fc5b1c1c678ddbb6c (diff)
parent4de7aed6fb9bf8e50bad5603f4f7b2172b33f14f (diff)
downloadlibvpx-81fd7ac58973e06180d72183d5397db753ed0da1.tar
libvpx-81fd7ac58973e06180d72183d5397db753ed0da1.tar.gz
libvpx-81fd7ac58973e06180d72183d5397db753ed0da1.tar.bz2
libvpx-81fd7ac58973e06180d72183d5397db753ed0da1.zip
Merge "multi-res: add parent_ref_valid flag"
Diffstat (limited to 'vp8/encoder')
-rw-r--r--vp8/encoder/pickinter.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c
index 4206a46b2..726026e9f 100644
--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -606,10 +606,11 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
#if CONFIG_MULTI_RES_ENCODING
int dissim = INT_MAX;
int parent_ref_frame = 0;
+ int parent_ref_valid = cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail;
int_mv parent_ref_mv;
MB_PREDICTION_MODE parent_mode = 0;
- if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail)
+ if (parent_ref_valid)
{
int parent_ref_flag;
@@ -635,8 +636,8 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
parent_ref_flag = (cpi->ref_frame_flags & VP8_ALTR_FRAME);
//assert(!parent_ref_frame || parent_ref_flag);
- if (!parent_ref_flag)
- parent_ref_frame = 0;
+ if (parent_ref_frame && !parent_ref_flag)
+ parent_ref_valid = 0;
}
#endif
@@ -647,8 +648,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
/* Setup search priorities */
#if CONFIG_MULTI_RES_ENCODING
- if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail
- && parent_ref_frame && dissim < 8)
+ if (parent_ref_valid && parent_ref_frame && dissim < 8)
{
ref_frame_map[0] = INTRA_FRAME;
ref_frame_map[1] = parent_ref_frame;
@@ -722,7 +722,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
}
#if CONFIG_MULTI_RES_ENCODING
- if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail)
+ if (parent_ref_valid)
{
if (vp8_mode_order[mode_index] == NEARESTMV &&
mode_mv[NEARESTMV].as_int ==0)
@@ -879,11 +879,10 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
motion search without any previous knowledge. Also, since
last frame motion info is not stored, then we can not
use improved_mv_pred. */
- if (cpi->oxcf.mr_encoder_id && !cpi->mr_low_res_mv_avail)
+ if (cpi->oxcf.mr_encoder_id && !parent_ref_valid)
cpi->sf.improved_mv_pred = 0;
- if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail
- && parent_ref_frame)
+ if (parent_ref_valid && parent_ref_frame)
{
/* Use parent MV as predictor. Adjust search range
* accordingly.
@@ -927,9 +926,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
}
#if CONFIG_MULTI_RES_ENCODING
- if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail &&
- dissim <= 2 &&
- parent_ref_frame &&
+ if (parent_ref_valid && parent_ref_frame && dissim <= 2 &&
MAX(abs(best_ref_mv.as_mv.row - parent_ref_mv.as_mv.row),
abs(best_ref_mv.as_mv.col - parent_ref_mv.as_mv.col)) <= 4)
{
@@ -969,7 +966,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
/* Set step_param to 0 to ensure large-range motion search
when encoder drops this frame at lower-resolution.
*/
- if (!cpi->oxcf.mr_encoder_id || !cpi->mr_low_res_mv_avail)
+ if (!parent_ref_valid)
step_param = 0;
#endif
bestsme = vp8_hex_search(x, b, d, &mvp_full, &d->bmi.mv,