diff options
author | John Koleszar <jkoleszar@google.com> | 2012-10-09 10:24:37 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2012-10-09 10:24:37 -0700 |
commit | 81fd7ac58973e06180d72183d5397db753ed0da1 (patch) | |
tree | 4bf2b6f49f0668166c5a075f3431323e765d628a /vp8/encoder | |
parent | 8b698e8cb17a709251d38d7fc5b1c1c678ddbb6c (diff) | |
parent | 4de7aed6fb9bf8e50bad5603f4f7b2172b33f14f (diff) | |
download | libvpx-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.c | 23 |
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, |