refactor add_tpl_ref_mv()
Change-Id: I3c8bedab41e5a80135dab44782da635bf18f45d1
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 91a70ed..6f3e14e 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -335,9 +335,6 @@
uint16_t ref_mv_weights[][MAX_REF_MV_STACK_SIZE],
int16_t *mode_context) {
POSITION mi_pos;
- int idx;
- const uint16_t weight_unit = 1; // mi_size_wide[BLOCK_8X8];
-
mi_pos.row = (mi_row & 0x01) ? blk_row : blk_row + 1;
mi_pos.col = (mi_col & 0x01) ? blk_col : blk_col + 1;
@@ -346,96 +343,83 @@
const TPL_MV_REF *prev_frame_mvs =
cm->tpl_mvs + ((mi_row + mi_pos.row) >> 1) * (cm->mi_stride >> 1) +
((mi_col + mi_pos.col) >> 1);
+ if (prev_frame_mvs->mfmv0.as_int == INVALID_MV) return 0;
MV_REFERENCE_FRAME rf[2];
av1_set_ref_frame(rf, ref_frame);
+ const uint16_t weight_unit = 1; // mi_size_wide[BLOCK_8X8];
+ const int cur_frame_index = cm->cur_frame->order_hint;
+ const RefCntBuffer *const buf_0 = get_ref_frame_buf(cm, rf[0]);
+ const int frame0_index = buf_0->order_hint;
+ const int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, frame0_index);
+ CANDIDATE_MV *ref_mv_stack = ref_mv_stacks[ref_frame];
+ uint16_t *ref_mv_weight = ref_mv_weights[ref_frame];
+ int idx;
+
+ int_mv this_refmv;
+ get_mv_projection(&this_refmv.as_mv, prev_frame_mvs->mfmv0.as_mv,
+ cur_offset_0, prev_frame_mvs->ref_frame_offset);
+ lower_mv_precision(&this_refmv.as_mv, cm->allow_high_precision_mv,
+ cm->cur_frame_force_integer_mv);
+
if (rf[1] == NONE_FRAME) {
- int cur_frame_index = cm->cur_frame->order_hint;
- const RefCntBuffer *const buf_0 = get_ref_frame_buf(cm, rf[0]);
- int frame0_index = buf_0->order_hint;
- int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
- cur_frame_index, frame0_index);
- CANDIDATE_MV *ref_mv_stack = ref_mv_stacks[rf[0]];
- uint16_t *ref_mv_weight = ref_mv_weights[rf[0]];
- if (prev_frame_mvs->mfmv0.as_int != INVALID_MV) {
- int_mv this_refmv;
+ if (blk_row == 0 && blk_col == 0) {
+ if (abs(this_refmv.as_mv.row - gm_mv_candidates[0].as_mv.row) >= 16 ||
+ abs(this_refmv.as_mv.col - gm_mv_candidates[0].as_mv.col) >= 16)
+ mode_context[ref_frame] |= (1 << GLOBALMV_OFFSET);
+ }
- get_mv_projection(&this_refmv.as_mv, prev_frame_mvs->mfmv0.as_mv,
- cur_offset_0, prev_frame_mvs->ref_frame_offset);
- lower_mv_precision(&this_refmv.as_mv, cm->allow_high_precision_mv,
- cm->cur_frame_force_integer_mv);
+ for (idx = 0; idx < refmv_count[rf[0]]; ++idx)
+ if (this_refmv.as_int == ref_mv_stack[idx].this_mv.as_int) break;
- if (blk_row == 0 && blk_col == 0)
- if (abs(this_refmv.as_mv.row - gm_mv_candidates[0].as_mv.row) >= 16 ||
- abs(this_refmv.as_mv.col - gm_mv_candidates[0].as_mv.col) >= 16)
- mode_context[ref_frame] |= (1 << GLOBALMV_OFFSET);
+ if (idx < refmv_count[rf[0]]) ref_mv_weight[idx] += 2 * weight_unit;
- for (idx = 0; idx < refmv_count[rf[0]]; ++idx)
- if (this_refmv.as_int == ref_mv_stack[idx].this_mv.as_int) break;
-
- if (idx < refmv_count[rf[0]]) ref_mv_weight[idx] += 2 * weight_unit;
-
- if (idx == refmv_count[rf[0]] &&
- refmv_count[rf[0]] < MAX_REF_MV_STACK_SIZE) {
- ref_mv_stack[idx].this_mv.as_int = this_refmv.as_int;
- ref_mv_weight[idx] = 2 * weight_unit;
- ++(refmv_count[rf[0]]);
- }
- return 1;
+ if (idx == refmv_count[rf[0]] &&
+ refmv_count[rf[0]] < MAX_REF_MV_STACK_SIZE) {
+ ref_mv_stack[idx].this_mv.as_int = this_refmv.as_int;
+ ref_mv_weight[idx] = 2 * weight_unit;
+ ++(refmv_count[rf[0]]);
}
} else {
// Process compound inter mode
- int cur_frame_index = cm->cur_frame->order_hint;
- const RefCntBuffer *const buf_0 = get_ref_frame_buf(cm, rf[0]);
- int frame0_index = buf_0->order_hint;
-
- int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
- cur_frame_index, frame0_index);
const RefCntBuffer *const buf_1 = get_ref_frame_buf(cm, rf[1]);
- int frame1_index = buf_1->order_hint;
- int cur_offset_1 = get_relative_dist(&cm->seq_params.order_hint_info,
- cur_frame_index, frame1_index);
- CANDIDATE_MV *ref_mv_stack = ref_mv_stacks[ref_frame];
- uint16_t *ref_mv_weight = ref_mv_weights[ref_frame];
- if (prev_frame_mvs->mfmv0.as_int != INVALID_MV) {
- int_mv this_refmv;
- int_mv comp_refmv;
- get_mv_projection(&this_refmv.as_mv, prev_frame_mvs->mfmv0.as_mv,
- cur_offset_0, prev_frame_mvs->ref_frame_offset);
- get_mv_projection(&comp_refmv.as_mv, prev_frame_mvs->mfmv0.as_mv,
- cur_offset_1, prev_frame_mvs->ref_frame_offset);
+ const int frame1_index = buf_1->order_hint;
+ const int cur_offset_1 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, frame1_index);
+ int_mv comp_refmv;
+ get_mv_projection(&comp_refmv.as_mv, prev_frame_mvs->mfmv0.as_mv,
+ cur_offset_1, prev_frame_mvs->ref_frame_offset);
+ lower_mv_precision(&comp_refmv.as_mv, cm->allow_high_precision_mv,
+ cm->cur_frame_force_integer_mv);
- lower_mv_precision(&this_refmv.as_mv, cm->allow_high_precision_mv,
- cm->cur_frame_force_integer_mv);
- lower_mv_precision(&comp_refmv.as_mv, cm->allow_high_precision_mv,
- cm->cur_frame_force_integer_mv);
+ if (blk_row == 0 && blk_col == 0) {
+ if (abs(this_refmv.as_mv.row - gm_mv_candidates[0].as_mv.row) >= 16 ||
+ abs(this_refmv.as_mv.col - gm_mv_candidates[0].as_mv.col) >= 16 ||
+ abs(comp_refmv.as_mv.row - gm_mv_candidates[1].as_mv.row) >= 16 ||
+ abs(comp_refmv.as_mv.col - gm_mv_candidates[1].as_mv.col) >= 16)
+ mode_context[ref_frame] |= (1 << GLOBALMV_OFFSET);
+ }
- if (blk_row == 0 && blk_col == 0)
- if (abs(this_refmv.as_mv.row - gm_mv_candidates[0].as_mv.row) >= 16 ||
- abs(this_refmv.as_mv.col - gm_mv_candidates[0].as_mv.col) >= 16 ||
- abs(comp_refmv.as_mv.row - gm_mv_candidates[1].as_mv.row) >= 16 ||
- abs(comp_refmv.as_mv.col - gm_mv_candidates[1].as_mv.col) >= 16)
- mode_context[ref_frame] |= (1 << GLOBALMV_OFFSET);
+ for (idx = 0; idx < refmv_count[ref_frame]; ++idx) {
+ if (this_refmv.as_int == ref_mv_stack[idx].this_mv.as_int &&
+ comp_refmv.as_int == ref_mv_stack[idx].comp_mv.as_int)
+ break;
+ }
- for (idx = 0; idx < refmv_count[ref_frame]; ++idx)
- if (this_refmv.as_int == ref_mv_stack[idx].this_mv.as_int &&
- comp_refmv.as_int == ref_mv_stack[idx].comp_mv.as_int)
- break;
+ if (idx < refmv_count[ref_frame]) ref_mv_weight[idx] += 2 * weight_unit;
- if (idx < refmv_count[ref_frame]) ref_mv_weight[idx] += 2 * weight_unit;
-
- if (idx == refmv_count[ref_frame] &&
- refmv_count[ref_frame] < MAX_REF_MV_STACK_SIZE) {
- ref_mv_stack[idx].this_mv.as_int = this_refmv.as_int;
- ref_mv_stack[idx].comp_mv.as_int = comp_refmv.as_int;
- ref_mv_weight[idx] = 2 * weight_unit;
- ++(refmv_count[ref_frame]);
- }
- return 1;
+ if (idx == refmv_count[ref_frame] &&
+ refmv_count[ref_frame] < MAX_REF_MV_STACK_SIZE) {
+ ref_mv_stack[idx].this_mv.as_int = this_refmv.as_int;
+ ref_mv_stack[idx].comp_mv.as_int = comp_refmv.as_int;
+ ref_mv_weight[idx] = 2 * weight_unit;
+ ++(refmv_count[ref_frame]);
}
}
- return 0;
+
+ return 1;
}
static void process_compound_ref_mv_candidate(