diff options
Diffstat (limited to 'libvpx/vp9/encoder/vp9_rdopt.c')
-rw-r--r-- | libvpx/vp9/encoder/vp9_rdopt.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/libvpx/vp9/encoder/vp9_rdopt.c b/libvpx/vp9/encoder/vp9_rdopt.c index d07d91774..fa7472ca6 100644 --- a/libvpx/vp9/encoder/vp9_rdopt.c +++ b/libvpx/vp9/encoder/vp9_rdopt.c @@ -2494,19 +2494,19 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, const int ph = num_4x4_blocks_high_lookup[bsize] << 2; MV pred_mv[3]; + int bestsme = INT_MAX; #if CONFIG_NON_GREEDY_MV - double bestsme; - int_mv nb_full_mvs[NB_MVS_NUM]; - const int nb_full_mv_num = NB_MVS_NUM; int gf_group_idx = cpi->twopass.gf_group.index; int gf_rf_idx = ref_frame_to_gf_rf_idx(ref); BLOCK_SIZE square_bsize = get_square_block_size(bsize); + int_mv nb_full_mvs[NB_MVS_NUM] = { 0 }; + MotionField *motion_field = vp9_motion_field_info_get_motion_field( + &cpi->motion_field_info, gf_group_idx, gf_rf_idx, square_bsize); + const int nb_full_mv_num = + vp9_prepare_nb_full_mvs(motion_field, mi_row, mi_col, nb_full_mvs); const int lambda = (pw * ph) / 4; assert(pw * ph == lambda << 2); - vp9_prepare_nb_full_mvs(&cpi->tpl_stats[gf_group_idx], mi_row, mi_col, - gf_rf_idx, square_bsize, nb_full_mvs); #else // CONFIG_NON_GREEDY_MV - int bestsme = INT_MAX; int sadpb = x->sadperbit16; #endif // CONFIG_NON_GREEDY_MV @@ -2580,9 +2580,9 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, mvp_full.row >>= 3; #if CONFIG_NON_GREEDY_MV - bestsme = vp9_full_pixel_diamond_new(cpi, x, &mvp_full, step_param, lambda, 1, - &cpi->fn_ptr[bsize], nb_full_mvs, - nb_full_mv_num, &tmp_mv->as_mv); + bestsme = vp9_full_pixel_diamond_new(cpi, x, bsize, &mvp_full, step_param, + lambda, 1, nb_full_mvs, nb_full_mv_num, + &tmp_mv->as_mv); #else // CONFIG_NON_GREEDY_MV bestsme = vp9_full_pixel_search( cpi, x, bsize, &mvp_full, step_param, cpi->sf.mv.search_method, sadpb, @@ -2592,11 +2592,7 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, if (cpi->sf.enhanced_full_pixel_motion_search) { int i; for (i = 0; i < 3; ++i) { -#if CONFIG_NON_GREEDY_MV - double this_me; -#else // CONFIG_NON_GREEDY_MV int this_me; -#endif // CONFIG_NON_GREEDY_MV MV this_mv; int diff_row; int diff_col; @@ -2622,9 +2618,9 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, mvp_full.row >>= 3; #if CONFIG_NON_GREEDY_MV this_me = vp9_full_pixel_diamond_new( - cpi, x, &mvp_full, VPXMAX(step_param, MAX_MVSEARCH_STEPS - step), - lambda, 1, &cpi->fn_ptr[bsize], nb_full_mvs, nb_full_mv_num, - &this_mv); + cpi, x, bsize, &mvp_full, + VPXMAX(step_param, MAX_MVSEARCH_STEPS - step), lambda, 1, nb_full_mvs, + nb_full_mv_num, &this_mv); #else // CONFIG_NON_GREEDY_MV this_me = vp9_full_pixel_search( cpi, x, bsize, &mvp_full, @@ -2678,8 +2674,7 @@ static INLINE void restore_dst_buf(MACROBLOCKD *xd, // However, once established that vector may be usable through the nearest and // near mv modes to reduce distortion in subsequent blocks and also improve // visual quality. -static int discount_newmv_test(const VP9_COMP *cpi, int this_mode, - int_mv this_mv, +static int discount_newmv_test(VP9_COMP *cpi, int this_mode, int_mv this_mv, int_mv (*mode_mv)[MAX_REF_FRAMES], int ref_frame, int mi_row, int mi_col, BLOCK_SIZE bsize) { #if CONFIG_NON_GREEDY_MV @@ -2689,6 +2684,8 @@ static int discount_newmv_test(const VP9_COMP *cpi, int this_mode, const int gf_group_idx = cpi->twopass.gf_group.index; const int gf_rf_idx = ref_frame_to_gf_rf_idx(ref_frame); const TplDepFrame tpl_frame = cpi->tpl_stats[gf_group_idx]; + const MotionField *motion_field = vp9_motion_field_info_get_motion_field( + &cpi->motion_field_info, gf_group_idx, gf_rf_idx, cpi->tpl_bsize); const int tpl_block_mi_h = num_8x8_blocks_high_lookup[cpi->tpl_bsize]; const int tpl_block_mi_w = num_8x8_blocks_wide_lookup[cpi->tpl_bsize]; const int tpl_mi_row = mi_row - (mi_row % tpl_block_mi_h); @@ -2697,8 +2694,8 @@ static int discount_newmv_test(const VP9_COMP *cpi, int this_mode, tpl_frame .mv_mode_arr[gf_rf_idx][tpl_mi_row * tpl_frame.stride + tpl_mi_col]; if (mv_mode == NEW_MV_MODE) { - int_mv tpl_new_mv = *get_pyramid_mv(&tpl_frame, gf_rf_idx, cpi->tpl_bsize, - tpl_mi_row, tpl_mi_col); + int_mv tpl_new_mv = + vp9_motion_field_mi_get_mv(motion_field, tpl_mi_row, tpl_mi_col); int row_diff = abs(tpl_new_mv.as_mv.row - this_mv.as_mv.row); int col_diff = abs(tpl_new_mv.as_mv.col - this_mv.as_mv.col); if (VPXMAX(row_diff, col_diff) <= 8) { @@ -3455,7 +3452,7 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, TileDataEnc *tile_data, if (cpi->rc.is_src_frame_alt_ref) { if (sf->alt_ref_search_fp) { mode_skip_mask[ALTREF_FRAME] = 0; - ref_frame_skip_mask[0] = ~(1 << ALTREF_FRAME); + ref_frame_skip_mask[0] = ~(1 << ALTREF_FRAME) & 0xff; ref_frame_skip_mask[1] = SECOND_REF_FRAME_MASK; } } |