ref_mv_stack[index].weight = weight;
++(*refmv_count);
}
+
+ if (candidate_mi->mbmi.sb_type < BLOCK_8X8) {
+ int alt_block = 3 - block;
+ this_refmv =
+ get_sub_block_mv(candidate_mi, ref, mi_pos.col, alt_block);
+ for (index = 0; index < *refmv_count; ++index)
+ if (ref_mv_stack[index].this_mv.as_int == this_refmv.as_int)
+ break;
+
+ if (index < *refmv_count)
+ ref_mv_stack[index].weight += weight;
+
+ // Add a new item to the list.
+ if (index == *refmv_count) {
+ ref_mv_stack[index].this_mv = this_refmv;
+ ref_mv_stack[index].weight = weight;
+ ++(*refmv_count);
+ }
+ }
}
}
} // Analyze a single 8x8 block motion information.
MODE_INFO *const mi = xd->mi[0];
b_mode_info *bmi = mi->bmi;
int n;
+#if CONFIG_REF_MV
+ CANDIDATE_MV ref_mv_stack[MAX_REF_MV_STACK_SIZE];
+ CANDIDATE_MV tmp_mv;
+ uint8_t ref_mv_count = 0, idx;
+ uint8_t above_count = 0, left_count = 0;
+#endif
assert(MAX_MV_REF_CANDIDATES == 2);
find_mv_refs_idx(cm, xd, mi, mi->mbmi.ref_frame[ref], mv_list, block,
mi_row, mi_col, NULL, NULL, mode_context);
+
+#if CONFIG_REF_MV
+ scan_blk_mbmi(cm, xd, mi_row, mi_col, block, mi->mbmi.ref_frame[ref],
+ -1, 0, ref_mv_stack, &ref_mv_count);
+ above_count = ref_mv_count;
+
+ scan_blk_mbmi(cm, xd, mi_row, mi_col, block, mi->mbmi.ref_frame[ref],
+ 0, -1, ref_mv_stack, &ref_mv_count);
+ left_count = ref_mv_count - above_count;
+
+ if (above_count > 1 && left_count > 0) {
+ tmp_mv = ref_mv_stack[1];
+ ref_mv_stack[1] = ref_mv_stack[above_count];
+ ref_mv_stack[above_count] = tmp_mv;
+ }
+
+ for (idx = 0; idx < VPXMIN(MAX_MV_REF_CANDIDATES, ref_mv_count); ++idx) {
+ mv_list[idx].as_int = ref_mv_stack[idx].this_mv.as_int;
+ clamp_mv_ref(&mv_list[idx].as_mv,
+ xd->n8_w << 3, xd->n8_h << 3, xd);
+ }
+#endif
+
near_mv->as_int = 0;
switch (block) {
case 0: