Cleanup warp motion param in MB_MODE_INFO Since warp motion is only enabled for single motion modes, both wm_params and num_proj_ref only need one copy. Change-Id: I8d8f08c2487479e12d14e0342a36206b74c55c38
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index e45db30..83ecb6b 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -263,8 +263,8 @@ int mi_row; int mi_col; #endif - int num_proj_ref[2]; - WarpedMotionParams wm_params[2]; + int num_proj_ref; + WarpedMotionParams wm_params; // Index of the alpha Cb and alpha Cr combination int cfl_alpha_idx; @@ -1041,7 +1041,7 @@ is_motion_variation_allowed_compound(mbmi)) { if (!check_num_overlappable_neighbors(mbmi)) return SIMPLE_TRANSLATION; assert(!has_second_ref(mbmi)); - if (mbmi->num_proj_ref[0] >= 1 && + if (mbmi->num_proj_ref >= 1 && (allow_warped_motion && !av1_is_scaled(&(xd->block_refs[0]->sf)))) { if (xd->cur_frame_force_integer_mv) { return OBMC_CAUSAL;
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c index b6a36f1..6c4fcde 100644 --- a/av1/common/reconinter.c +++ b/av1/common/reconinter.c
@@ -44,10 +44,9 @@ if (build_for_obmc) return 0; - if (warp_types->local_warp_allowed && !mbmi->wm_params[0].invalid) { + if (warp_types->local_warp_allowed && !mbmi->wm_params.invalid) { if (final_warp_params != NULL) - memcpy(final_warp_params, &mbmi->wm_params[0], - sizeof(*final_warp_params)); + memcpy(final_warp_params, &mbmi->wm_params, sizeof(*final_warp_params)); return 1; } else if (warp_types->global_warp_allowed && !gm_params->invalid) { if (final_warp_params != NULL)
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c index e5b5077..b585bc1 100644 --- a/av1/decoder/decodemv.c +++ b/av1/decoder/decodemv.c
@@ -1404,7 +1404,7 @@ mbmi->motion_mode = SIMPLE_TRANSLATION; if (is_motion_variation_allowed_bsize(mbmi->sb_type) && !mbmi->skip_mode && !has_second_ref(mbmi)) - mbmi->num_proj_ref[0] = findSamples(cm, xd, mi_row, mi_col, pts, pts_inref); + mbmi->num_proj_ref = findSamples(cm, xd, mi_row, mi_col, pts, pts_inref); av1_count_overlappable_neighbors(cm, xd, mi_row, mi_col); if (mbmi->ref_frame[1] != INTRA_FRAME) @@ -1465,20 +1465,20 @@ read_mb_interp_filter(cm, xd, mbmi, r); if (mbmi->motion_mode == WARPED_CAUSAL) { - mbmi->wm_params[0].wmtype = DEFAULT_WMTYPE; - mbmi->wm_params[0].invalid = 0; + mbmi->wm_params.wmtype = DEFAULT_WMTYPE; + mbmi->wm_params.invalid = 0; - if (mbmi->num_proj_ref[0] > 1) - mbmi->num_proj_ref[0] = selectSamples(&mbmi->mv[0].as_mv, pts, pts_inref, - mbmi->num_proj_ref[0], bsize); + if (mbmi->num_proj_ref > 1) + mbmi->num_proj_ref = selectSamples(&mbmi->mv[0].as_mv, pts, pts_inref, + mbmi->num_proj_ref, bsize); - if (find_projection(mbmi->num_proj_ref[0], pts, pts_inref, bsize, + if (find_projection(mbmi->num_proj_ref, pts, pts_inref, bsize, mbmi->mv[0].as_mv.row, mbmi->mv[0].as_mv.col, - &mbmi->wm_params[0], mi_row, mi_col)) { + &mbmi->wm_params, mi_row, mi_col)) { #if WARPED_MOTION_DEBUG printf("Warning: unexpected warped model from aomenc\n"); #endif - mbmi->wm_params[0].invalid = 1; + mbmi->wm_params.invalid = 1; } }
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c index c4572a3..cf71784 100644 --- a/av1/encoder/mcomp.c +++ b/av1/encoder/mcomp.c
@@ -929,8 +929,8 @@ int16_t bc = mbmi->mv[0].as_mv.col; int16_t *tr = &mbmi->mv[0].as_mv.row; int16_t *tc = &mbmi->mv[0].as_mv.col; - WarpedMotionParams best_wm_params = mbmi->wm_params[0]; - int best_num_proj_ref = mbmi->num_proj_ref[0]; + WarpedMotionParams best_wm_params = mbmi->wm_params; + int best_num_proj_ref = mbmi->num_proj_ref; unsigned int bestmse; int minc, maxc, minr, maxr; const int start = cm->allow_high_precision_mv ? 0 : 4; @@ -962,18 +962,18 @@ memcpy(pts, pts0, total_samples * 2 * sizeof(*pts0)); memcpy(pts_inref, pts_inref0, total_samples * 2 * sizeof(*pts_inref0)); if (total_samples > 1) - mbmi->num_proj_ref[0] = + mbmi->num_proj_ref = selectSamples(&this_mv, pts, pts_inref, total_samples, bsize); - if (!find_projection(mbmi->num_proj_ref[0], pts, pts_inref, bsize, *tr, - *tc, &mbmi->wm_params[0], mi_row, mi_col)) { + if (!find_projection(mbmi->num_proj_ref, pts, pts_inref, bsize, *tr, + *tc, &mbmi->wm_params, mi_row, mi_col)) { thismse = av1_compute_motion_cost(cpi, x, bsize, mi_row, mi_col, &this_mv); if (thismse < bestmse) { best_idx = idx; - best_wm_params = mbmi->wm_params[0]; - best_num_proj_ref = mbmi->num_proj_ref[0]; + best_wm_params = mbmi->wm_params; + best_num_proj_ref = mbmi->num_proj_ref; bestmse = thismse; } } @@ -990,8 +990,8 @@ *tr = br; *tc = bc; - mbmi->wm_params[0] = best_wm_params; - mbmi->num_proj_ref[0] = best_num_proj_ref; + mbmi->wm_params = best_wm_params; + mbmi->num_proj_ref = best_num_proj_ref; return bestmse; }
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 7c0c230..3bd8c06 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -7910,17 +7910,16 @@ const MV_REFERENCE_FRAME ref_frame_1 = mbmi->ref_frame[1]; av1_invalid_rd_stats(&best_rd_stats); aom_clear_system_state(); - mbmi->num_proj_ref[0] = 1; // assume num_proj_ref >=1 + mbmi->num_proj_ref = 1; // assume num_proj_ref >=1 MOTION_MODE last_motion_mode_allowed = cm->switchable_motion_mode ? motion_mode_allowed(xd->global_motion, xd, mbmi, cm->allow_warped_motion) : SIMPLE_TRANSLATION; if (last_motion_mode_allowed == WARPED_CAUSAL) { - mbmi->num_proj_ref[0] = - findSamples(cm, xd, mi_row, mi_col, pts0, pts_inref0); + mbmi->num_proj_ref = findSamples(cm, xd, mi_row, mi_col, pts0, pts_inref0); } - int total_samples = mbmi->num_proj_ref[0]; + int total_samples = mbmi->num_proj_ref; if (total_samples == 0) { last_motion_mode_allowed = OBMC_CAUSAL; } @@ -7969,27 +7968,27 @@ } else if (mbmi->motion_mode == WARPED_CAUSAL) { int pts[SAMPLES_ARRAY_SIZE], pts_inref[SAMPLES_ARRAY_SIZE]; mbmi->motion_mode = WARPED_CAUSAL; - mbmi->wm_params[0].wmtype = DEFAULT_WMTYPE; + mbmi->wm_params.wmtype = DEFAULT_WMTYPE; mbmi->interp_filters = av1_broadcast_interp_filter( av1_unswitchable_filter(cm->interp_filter)); memcpy(pts, pts0, total_samples * 2 * sizeof(*pts0)); memcpy(pts_inref, pts_inref0, total_samples * 2 * sizeof(*pts_inref0)); // Select the samples according to motion vector difference - if (mbmi->num_proj_ref[0] > 1) { - mbmi->num_proj_ref[0] = selectSamples( - &mbmi->mv[0].as_mv, pts, pts_inref, mbmi->num_proj_ref[0], bsize); + if (mbmi->num_proj_ref > 1) { + mbmi->num_proj_ref = selectSamples(&mbmi->mv[0].as_mv, pts, pts_inref, + mbmi->num_proj_ref, bsize); } - if (!find_projection(mbmi->num_proj_ref[0], pts, pts_inref, bsize, + if (!find_projection(mbmi->num_proj_ref, pts, pts_inref, bsize, mbmi->mv[0].as_mv.row, mbmi->mv[0].as_mv.col, - &mbmi->wm_params[0], mi_row, mi_col)) { + &mbmi->wm_params, mi_row, mi_col)) { // Refine MV for NEWMV mode if (!is_comp_pred && have_newmv_in_inter_mode(this_mode)) { int tmp_rate_mv = 0; const int_mv mv0 = mbmi->mv[0]; - const WarpedMotionParams wm_params0 = mbmi->wm_params[0]; - int num_proj_ref0 = mbmi->num_proj_ref[0]; + const WarpedMotionParams wm_params0 = mbmi->wm_params; + int num_proj_ref0 = mbmi->num_proj_ref; // Refine MV in a small range. av1_refine_warped_mv(cpi, x, bsize, mi_row, mi_col, pts0, pts_inref0, @@ -8015,8 +8014,8 @@ } else { // Restore the old MV and WM parameters. mbmi->mv[0] = mv0; - mbmi->wm_params[0] = wm_params0; - mbmi->num_proj_ref[0] = num_proj_ref0; + mbmi->wm_params = wm_params0; + mbmi->num_proj_ref = num_proj_ref0; } } @@ -8776,7 +8775,7 @@ mode_ctx = av1_mode_context_analyzer(mbmi_ext->mode_context, mbmi->ref_frame); - mbmi->num_proj_ref[0] = 0; + mbmi->num_proj_ref = 0; mbmi->motion_mode = SIMPLE_TRANSLATION; mbmi->ref_mv_idx = ref_mv_idx; @@ -8786,8 +8785,9 @@ get_single_mode(this_mode, ref_idx, is_comp_pred); if (single_mode == NEWMV && args->single_newmv[mbmi->ref_mv_idx][mbmi->ref_frame[ref_idx]] - .as_int == INVALID_MV) + .as_int == INVALID_MV) { continue; + } } } @@ -8807,7 +8807,7 @@ *rd_stats = backup_rd_stats; mbmi->interinter_comp.type = COMPOUND_AVERAGE; if (mbmi->ref_frame[1] == INTRA_FRAME) mbmi->ref_frame[1] = NONE_FRAME; - mbmi->num_proj_ref[0] = 0; + mbmi->num_proj_ref = 0; mbmi->motion_mode = SIMPLE_TRANSLATION; mbmi->comp_group_idx = 0; @@ -10724,11 +10724,11 @@ av1_count_overlappable_neighbors(cm, xd, mi_row, mi_col); if (is_motion_variation_allowed_bsize(bsize) && !has_second_ref(mbmi)) { int pts[SAMPLES_ARRAY_SIZE], pts_inref[SAMPLES_ARRAY_SIZE]; - mbmi->num_proj_ref[0] = findSamples(cm, xd, mi_row, mi_col, pts, pts_inref); + mbmi->num_proj_ref = findSamples(cm, xd, mi_row, mi_col, pts, pts_inref); // Select the samples according to motion vector difference - if (mbmi->num_proj_ref[0] > 1) - mbmi->num_proj_ref[0] = selectSamples(&mbmi->mv[0].as_mv, pts, pts_inref, - mbmi->num_proj_ref[0], bsize); + if (mbmi->num_proj_ref > 1) + mbmi->num_proj_ref = selectSamples(&mbmi->mv[0].as_mv, pts, pts_inref, + mbmi->num_proj_ref, bsize); } set_default_interp_filters(mbmi, cm->interp_filter);