Integrate mfmv with codebase
Accomodate recent codebase in the motion field estimation system.
This solves out of boundary buffer access issues.
Change-Id: Ib99b38940690871b700ceb36cdcc015b52aca113
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 39ea9fa..5000185 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -1217,6 +1217,7 @@
int lst2_buf_idx = cm->frame_refs[LAST2_FRAME - LAST_FRAME].idx;
int lst3_buf_idx = cm->frame_refs[LAST3_FRAME - LAST_FRAME].idx;
int bwd_buf_idx = cm->frame_refs[BWDREF_FRAME - LAST_FRAME].idx;
+ int alt2_buf_idx = cm->frame_refs[ALTREF2_FRAME - LAST_FRAME].idx;
#endif
if (alt_buf_idx >= 0)
@@ -1243,6 +1244,10 @@
if (bwd_buf_idx >= 0)
cm->cur_frame->bwd_frame_offset =
cm->buffer_pool->frame_bufs[bwd_buf_idx].cur_frame_offset;
+
+ if (alt2_buf_idx >= 0)
+ cm->cur_frame->alt2_frame_offset =
+ cm->buffer_pool->frame_bufs[alt2_buf_idx].cur_frame_offset;
#endif
}
@@ -1285,7 +1290,8 @@
int cur_frame_index = cm->cur_frame->cur_frame_offset;
int lst_frame_index = 0, alt_frame_index = 0, gld_frame_index = 0;
#if CONFIG_EXT_REFS
- int lst2_frame_index = 0, lst3_frame_index = 0, bwd_frame_index = 0;
+ int lst2_frame_index = 0, lst3_frame_index = 0;
+ int bwd_frame_index = 0, alt2_frame_index = 0;
#endif
TPL_MV_REF *tpl_mvs_base = cm->cur_frame->tpl_mvs;
@@ -1304,6 +1310,7 @@
int lst2_buf_idx = cm->frame_refs[LAST2_FRAME - LAST_FRAME].idx;
int lst3_buf_idx = cm->frame_refs[LAST3_FRAME - LAST_FRAME].idx;
int bwd_buf_idx = cm->frame_refs[BWDREF_FRAME - LAST_FRAME].idx;
+ int alt2_buf_idx = cm->frame_refs[ALTREF2_FRAME - LAST_FRAME].idx;
#endif
if (alt_buf_idx >= 0)
@@ -1326,6 +1333,10 @@
if (bwd_buf_idx >= 0)
bwd_frame_index = cm->buffer_pool->frame_bufs[bwd_buf_idx].cur_frame_offset;
+
+ if (alt2_buf_idx >= 0)
+ alt2_frame_index =
+ cm->buffer_pool->frame_bufs[alt2_buf_idx].cur_frame_offset;
#endif
if (alt_frame_index < cur_frame_index) return;
@@ -1348,6 +1359,8 @@
cm->buffer_pool->frame_bufs[lst_buf_idx].lst3_frame_offset;
const int bwd_frame_idx =
cm->buffer_pool->frame_bufs[lst_buf_idx].bwd_frame_offset;
+ const int alt2_frame_idx =
+ cm->buffer_pool->frame_bufs[lst_buf_idx].alt2_frame_offset;
#endif
int alt_offset = AOMMAX(1, alt_frame_idx - lst_frame_index);
@@ -1359,11 +1372,13 @@
#if CONFIG_EXT_REFS
int bwd_offset = AOMMAX(1, bwd_frame_idx - lst_frame_index);
+ int alt2_offset = AOMMAX(1, alt2_frame_idx - lst_frame_index);
int lst2_offset = AOMMAX(1, lst_frame_index - lst2_frame_idx);
int lst3_offset = AOMMAX(1, lst_frame_index - lst3_frame_idx);
int cur_to_lst2 = cur_frame_index - lst2_frame_index;
int cur_to_lst3 = cur_frame_index - lst3_frame_index;
int cur_to_bwd = bwd_frame_index - cur_frame_index;
+ int cur_to_alt2 = alt2_frame_index - cur_frame_index;
#endif
const int is_lst_overlay = (alt_frame_idx == gld_frame_index);
@@ -1371,7 +1386,7 @@
const int ref_frame_offset_buffer[TOTAL_REFS_PER_FRAME] = {
#if CONFIG_EXT_REFS
0, lst_offset, lst2_offset, lst3_offset, gld_offset,
- bwd_offset, alt_offset
+ bwd_offset, alt2_offset, alt_offset
#else
0, lst_offset, gld_offset, alt_offset
#endif
@@ -1446,6 +1461,10 @@
ref_frame_offset);
tpl_mvs_base[mi_offset].mfmv[FWD_RF_OFFSET(BWDREF_FRAME)]
[0].as_int = this_mv.as_int;
+ get_mv_projection(&this_mv.as_mv, fwd_mv, cur_to_alt2,
+ ref_frame_offset);
+ tpl_mvs_base[mi_offset].mfmv[FWD_RF_OFFSET(ALTREF2_FRAME)]
+ [0].as_int = this_mv.as_int;
#endif
}
}
@@ -1469,6 +1488,8 @@
cm->buffer_pool->frame_bufs[alt_buf_idx].lst3_frame_offset;
const int bwd_frame_idx =
cm->buffer_pool->frame_bufs[alt_buf_idx].bwd_frame_offset;
+ const int alt2_frame_idx =
+ cm->buffer_pool->frame_bufs[alt_buf_idx].alt2_frame_offset;
#endif
int lst_offset = AOMMAX(1, alt_frame_index - lst_frame_idx);
@@ -1478,18 +1499,20 @@
int cur_to_gld = cur_frame_index - gld_frame_index;
#if CONFIG_EXT_REFS
int bwd_offset = AOMMAX(1, alt_frame_index - bwd_frame_idx);
+ int alt2_offset = AOMMAX(1, alt_frame_index - alt2_frame_idx);
int lst2_offset = AOMMAX(1, alt_frame_index - lst2_frame_idx);
int lst3_offset = AOMMAX(1, alt_frame_index - lst3_frame_idx);
int cur_to_lst2 = cur_frame_index - lst2_frame_index;
int cur_to_lst3 = cur_frame_index - lst3_frame_index;
int cur_to_bwd = bwd_frame_index - cur_frame_index;
+ int cur_to_alt2 = alt2_frame_index - cur_frame_index;
#endif
const int ref_stamp = FWD_RF_OFFSET(ALTREF_FRAME);
// clang-format off
const int ref_frame_offset_buffer[TOTAL_REFS_PER_FRAME] = {
#if CONFIG_EXT_REFS
0, lst_offset, lst2_offset, lst3_offset, gld_offset,
- bwd_offset, 0,
+ bwd_offset, alt2_offset, 0,
#else
0, lst_offset, gld_offset, 0,
#endif
@@ -1533,6 +1556,12 @@
.mfmv[FWD_RF_OFFSET(BWDREF_FRAME)][ref_stamp]
.as_int = mv_sign_reverse(this_mv);
+ get_mv_projection(&this_mv.as_mv, fwd_mv, cur_to_alt2,
+ ref_frame_offset);
+ tpl_mvs_base[mi_offset]
+ .mfmv[FWD_RF_OFFSET(ALTREF2_FRAME)][ref_stamp]
+ .as_int = mv_sign_reverse(this_mv);
+
if (ref_frame[0] >= LAST2_FRAME) {
get_mv_projection(&this_mv.as_mv, fwd_mv, cur_to_lst2,
ref_frame_offset);
@@ -1578,6 +1607,8 @@
cm->buffer_pool->frame_bufs[bwd_buf_idx].lst3_frame_offset;
const int bwd_frame_idx =
cm->buffer_pool->frame_bufs[bwd_buf_idx].bwd_frame_offset;
+ const int alt2_frame_idx =
+ cm->buffer_pool->frame_bufs[bwd_buf_idx].alt2_frame_offset;
const int alt_frame_idx =
cm->buffer_pool->frame_bufs[bwd_buf_idx].alt_frame_offset;
@@ -1588,6 +1619,7 @@
int lst2_offset = AOMMAX(1, bwd_frame_index - lst2_frame_idx);
int lst3_offset = AOMMAX(1, bwd_frame_index - lst3_frame_idx);
int bwd_offset = AOMMAX(1, bwd_frame_idx - bwd_frame_index);
+ int alt2_offset = AOMMAX(1, alt2_frame_idx - bwd_frame_index);
int alt_offset = AOMMAX(1, alt_frame_idx - bwd_frame_index);
int cur_to_lst2 = cur_frame_index - lst2_frame_index;
int cur_to_lst3 = cur_frame_index - lst3_frame_index;
@@ -1597,7 +1629,7 @@
const int ref_stamp = FWD_RF_OFFSET(BWDREF_FRAME);
const int ref_frame_offset_buffer[TOTAL_REFS_PER_FRAME] = {
0, lst_offset, lst2_offset, lst3_offset,
- gld_offset, bwd_offset, alt_offset,
+ gld_offset, bwd_offset, alt2_offset, alt_offset,
};
for (int blk_row = 0; blk_row < cm->mi_rows; ++blk_row) {
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 3294eb7..19d6e1a 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -137,6 +137,7 @@
int lst2_frame_offset;
int lst3_frame_offset;
int bwd_frame_offset;
+ int alt2_frame_offset;
#endif
TPL_MV_REF *tpl_mvs;
#endif