Revert "Move compound segment mask buffer from mbmi to xd"
This reverts commit 2cf73eb84e1d324c69e9b4a118621a274e761123.
BUG=https://bugs.chromium.org/p/aomedia/issues/detail?id=503
Change-Id: I2b3a4a77854044cb7951c8e64961e72255dfea85
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 1d88fc6..89cf4b2 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -322,18 +322,14 @@
} RD_STATS;
#if CONFIG_EXT_INTER
-// This struct is used to group function args that are commonly
-// sent together in functions related to interinter compound modes
typedef struct {
-#if CONFIG_WEDGE
+ COMPOUND_TYPE type;
int wedge_index;
int wedge_sign;
-#endif // CONFIG_WEDGE
#if CONFIG_COMPOUND_SEGMENT
SEG_MASK_TYPE mask_type;
- uint8_t *seg_mask;
+ DECLARE_ALIGNED(16, uint8_t, seg_mask[2 * MAX_SB_SQUARE]);
#endif // CONFIG_COMPOUND_SEGMENT
- COMPOUND_TYPE interinter_compound_type;
} INTERINTER_COMPOUND_DATA;
#endif // CONFIG_EXT_INTER
@@ -391,21 +387,12 @@
#endif // CONFIG_EXT_INTRA
#if CONFIG_EXT_INTER
- // interintra members
INTERINTRA_MODE interintra_mode;
// TODO(debargha): Consolidate these flags
int use_wedge_interintra;
int interintra_wedge_index;
int interintra_wedge_sign;
- // interinter members
- COMPOUND_TYPE interinter_compound_type;
-#if CONFIG_WEDGE
- int wedge_index;
- int wedge_sign;
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- SEG_MASK_TYPE mask_type;
-#endif // CONFIG_COMPOUND_SEGMENT
+ INTERINTER_COMPOUND_DATA interinter_compound_data;
#endif // CONFIG_EXT_INTER
MOTION_MODE motion_mode;
#if CONFIG_MOTION_VAR
@@ -675,10 +662,6 @@
const EobThresholdMD *eob_threshold_md;
#endif
-#if CONFIG_EXT_INTER && CONFIG_COMPOUND_SEGMENT
- DECLARE_ALIGNED(16, uint8_t, seg_mask[2 * MAX_SB_SQUARE]);
-#endif // CONFIG_EXT_INTER && CONFIG_COMPOUND_SEGMENT
-
#if CONFIG_CFL
CFL_CTX *cfl;
#endif
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 112b1c4..3394475 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -268,9 +268,9 @@
uint8_t *mask_buffer, int h, int w, int stride,
#endif
BLOCK_SIZE sb_type) {
- assert(is_masked_compound_type(comp_data->interinter_compound_type));
+ assert(is_masked_compound_type(comp_data->type));
(void)sb_type;
- switch (comp_data->interinter_compound_type) {
+ switch (comp_data->type) {
#if CONFIG_WEDGE
case COMPOUND_WEDGE:
return av1_get_contiguous_soft_mask(comp_data->wedge_index,
@@ -286,9 +286,9 @@
const uint8_t *av1_get_compound_type_mask(
const INTERINTER_COMPOUND_DATA *const comp_data, BLOCK_SIZE sb_type) {
- assert(is_masked_compound_type(comp_data->interinter_compound_type));
+ assert(is_masked_compound_type(comp_data->type));
(void)sb_type;
- switch (comp_data->interinter_compound_type) {
+ switch (comp_data->type) {
#if CONFIG_WEDGE
case COMPOUND_WEDGE:
return av1_get_contiguous_soft_mask(comp_data->wedge_index,
@@ -596,7 +596,7 @@
const int subw = (2 << b_width_log2_lookup[sb_type]) == w;
const uint8_t *mask;
size_t mask_stride;
- switch (comp_data->interinter_compound_type) {
+ switch (comp_data->type) {
case COMPOUND_WEDGE:
mask = av1_get_soft_mask(comp_data->wedge_index, comp_data->wedge_sign,
sb_type, wedge_offset_x, wedge_offset_y);
@@ -624,7 +624,7 @@
const int subw = (2 << b_width_log2_lookup[sb_type]) == w;
const uint8_t *mask;
size_t mask_stride;
- switch (comp_data->interinter_compound_type) {
+ switch (comp_data->type) {
case COMPOUND_WEDGE:
mask = av1_get_soft_mask(comp_data->wedge_index, comp_data->wedge_sign,
sb_type, wedge_offset_x, wedge_offset_y);
@@ -699,17 +699,7 @@
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
MACROBLOCKD *xd) {
MODE_INFO *mi = xd->mi[0];
- const INTERINTER_COMPOUND_DATA comp_data = {
-#if CONFIG_WEDGE
- mi->mbmi.wedge_index,
- mi->mbmi.wedge_sign,
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- mi->mbmi.mask_type,
- xd->seg_mask,
-#endif // CONFIG_COMPOUND_SEGMENT
- mi->mbmi.interinter_compound_type
- };
+ INTERINTER_COMPOUND_DATA *comp_data = &mi->mbmi.interinter_compound_data;
// The prediction filter types used here should be those for
// the second reference block.
#if CONFIG_DUAL_FILTER
@@ -736,13 +726,13 @@
#endif
xs, ys, xd);
#if CONFIG_COMPOUND_SEGMENT
- if (!plane && comp_data.interinter_compound_type == COMPOUND_SEG) {
+ if (!plane && comp_data->type == COMPOUND_SEG) {
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
- build_compound_seg_mask_highbd(comp_data.seg_mask, comp_data.mask_type,
+ build_compound_seg_mask_highbd(comp_data->seg_mask, comp_data->mask_type,
dst, dst_stride, tmp_dst, MAX_SB_SIZE,
mi->mbmi.sb_type, h, w, xd->bd);
else
- build_compound_seg_mask(comp_data.seg_mask, comp_data.mask_type, dst,
+ build_compound_seg_mask(comp_data->seg_mask, comp_data->mask_type, dst,
dst_stride, tmp_dst, MAX_SB_SIZE,
mi->mbmi.sb_type, h, w);
}
@@ -751,20 +741,20 @@
#if CONFIG_SUPERTX
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_wedge_extend_highbd(
- dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE, &comp_data,
+ dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE, comp_data,
mi->mbmi.sb_type, wedge_offset_x, wedge_offset_y, h, w, xd->bd);
else
build_masked_compound_wedge_extend(
- dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE, &comp_data,
+ dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE, comp_data,
mi->mbmi.sb_type, wedge_offset_x, wedge_offset_y, h, w);
#else
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_highbd(dst, dst_stride, dst, dst_stride, tmp_dst,
- MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type, h,
- w, xd->bd);
+ MAX_SB_SIZE, comp_data, mi->mbmi.sb_type, h, w,
+ xd->bd);
else
build_masked_compound(dst, dst_stride, dst, dst_stride, tmp_dst,
- MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type, h, w);
+ MAX_SB_SIZE, comp_data, mi->mbmi.sb_type, h, w);
#endif // CONFIG_SUPERTX
#else // CONFIG_HIGHBITDEPTH
@@ -779,18 +769,18 @@
#endif
xs, ys, xd);
#if CONFIG_COMPOUND_SEGMENT
- if (!plane && comp_data.interinter_compound_type == COMPOUND_SEG)
- build_compound_seg_mask(comp_data.seg_mask, comp_data.mask_type, dst,
+ if (!plane && comp_data->type == COMPOUND_SEG)
+ build_compound_seg_mask(comp_data->seg_mask, comp_data->mask_type, dst,
dst_stride, tmp_dst, MAX_SB_SIZE, mi->mbmi.sb_type,
h, w);
#endif // CONFIG_COMPOUND_SEGMENT
#if CONFIG_SUPERTX
build_masked_compound_wedge_extend(dst, dst_stride, dst, dst_stride, tmp_dst,
- MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type,
+ MAX_SB_SIZE, comp_data, mi->mbmi.sb_type,
wedge_offset_x, wedge_offset_y, h, w);
#else
build_masked_compound(dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE,
- &comp_data, mi->mbmi.sb_type, h, w);
+ comp_data, mi->mbmi.sb_type, h, w);
#endif // CONFIG_SUPERTX
#endif // CONFIG_HIGHBITDEPTH
#if CONFIG_COMPOUND_SEGMENT
@@ -997,7 +987,8 @@
(scaled_mv.col >> SUBPEL_BITS);
#if CONFIG_EXT_INTER
- if (ref && is_masked_compound_type(mi->mbmi.interinter_compound_type))
+ if (ref &&
+ is_masked_compound_type(mi->mbmi.interinter_compound_data.type))
av1_make_masked_inter_predictor(
pre, pre_buf->stride, dst, dst_buf->stride, subpel_x, subpel_y,
sf, w, h, mi->mbmi.interp_filter, xs, ys,
@@ -1119,7 +1110,8 @@
#endif // CONFIG_GLOBAL_MOTION || CONFIG_WARPED_MOTION
conv_params.ref = ref;
#if CONFIG_EXT_INTER
- if (ref && is_masked_compound_type(mi->mbmi.interinter_compound_type))
+ if (ref &&
+ is_masked_compound_type(mi->mbmi.interinter_compound_data.type))
av1_make_masked_inter_predictor(
pre[ref], pre_buf->stride, dst, dst_buf->stride,
subpel_params[ref].subpel_x, subpel_params[ref].subpel_y, sf, w, h,
@@ -1876,8 +1868,8 @@
if (is_interintra_pred(mbmi)) {
mbmi->ref_frame[1] = NONE_FRAME;
} else if (has_second_ref(mbmi) &&
- is_masked_compound_type(mbmi->interinter_compound_type)) {
- mbmi->interinter_compound_type = COMPOUND_AVERAGE;
+ is_masked_compound_type(mbmi->interinter_compound_data.type)) {
+ mbmi->interinter_compound_data.type = COMPOUND_AVERAGE;
mbmi->ref_frame[1] = NONE_FRAME;
}
#endif // CONFIG_EXT_INTER
@@ -2964,25 +2956,16 @@
MACROBLOCKD_PLANE *const pd = &xd->plane[plane];
struct buf_2d *const dst_buf = &pd->dst;
uint8_t *const dst = dst_buf->buf + dst_buf->stride * y + x;
- const INTERINTER_COMPOUND_DATA comp_data = {
-#if CONFIG_WEDGE
- mbmi->wedge_index,
- mbmi->wedge_sign,
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- mbmi->mask_type,
- xd->seg_mask,
-#endif // CONFIG_COMPOUND_SEGMENT
- mbmi->interinter_compound_type
- };
+ INTERINTER_COMPOUND_DATA *comp_data = &mbmi->interinter_compound_data;
- if (is_compound && is_masked_compound_type(mbmi->interinter_compound_type)) {
+ if (is_compound &&
+ is_masked_compound_type(mbmi->interinter_compound_data.type)) {
#if CONFIG_COMPOUND_SEGMENT
if (!plane && comp_data.interinter_compound_type == COMPOUND_SEG) {
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_compound_seg_mask_highbd(
- comp_data.seg_mask, comp_data.mask_type,
+ comp_data->seg_mask, comp_data->mask_type,
CONVERT_TO_BYTEPTR(ext_dst0), ext_dst_stride0,
CONVERT_TO_BYTEPTR(ext_dst1), ext_dst_stride1, mbmi->sb_type, h, w,
xd->bd);
@@ -2999,26 +2982,26 @@
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_wedge_extend_highbd(
dst, dst_buf->stride, CONVERT_TO_BYTEPTR(ext_dst0), ext_dst_stride0,
- CONVERT_TO_BYTEPTR(ext_dst1), ext_dst_stride1, &comp_data,
+ CONVERT_TO_BYTEPTR(ext_dst1), ext_dst_stride1, comp_data,
mbmi->sb_type, wedge_offset_x, wedge_offset_y, h, w, xd->bd);
else
#endif // CONFIG_HIGHBITDEPTH
build_masked_compound_wedge_extend(
dst, dst_buf->stride, ext_dst0, ext_dst_stride0, ext_dst1,
- ext_dst_stride1, &comp_data, mbmi->sb_type, wedge_offset_x,
+ ext_dst_stride1, comp_data, mbmi->sb_type, wedge_offset_x,
wedge_offset_y, h, w);
#else
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_highbd(
dst, dst_buf->stride, CONVERT_TO_BYTEPTR(ext_dst0), ext_dst_stride0,
- CONVERT_TO_BYTEPTR(ext_dst1), ext_dst_stride1, &comp_data,
+ CONVERT_TO_BYTEPTR(ext_dst1), ext_dst_stride1, comp_data,
mbmi->sb_type, h, w, xd->bd);
else
#endif // CONFIG_HIGHBITDEPTH
build_masked_compound(dst, dst_buf->stride, ext_dst0, ext_dst_stride0,
- ext_dst1, ext_dst_stride1, &comp_data,
- mbmi->sb_type, h, w);
+ ext_dst1, ext_dst_stride1, comp_data, mbmi->sb_type,
+ h, w);
#endif // CONFIG_SUPERTX
} else {
#if CONFIG_HIGHBITDEPTH
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index ec0f877..808078e 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -2192,7 +2192,7 @@
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
#if CONFIG_EXT_INTER
- mbmi->interinter_compound_type = COMPOUND_AVERAGE;
+ mbmi->interinter_compound_data.type = COMPOUND_AVERAGE;
if (cm->reference_mode != SINGLE_REFERENCE &&
is_inter_compound_mode(mbmi->mode)
#if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
@@ -2201,27 +2201,29 @@
) {
if (is_any_masked_compound_used(bsize)) {
#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
- mbmi->interinter_compound_type =
+ mbmi->interinter_compound_data.type =
aom_read_tree(r, av1_compound_type_tree,
cm->fc->compound_type_prob[bsize], ACCT_STR);
#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
#if CONFIG_WEDGE
- if (mbmi->interinter_compound_type == COMPOUND_WEDGE) {
- mbmi->wedge_index =
+ if (mbmi->interinter_compound_data.type == COMPOUND_WEDGE) {
+ mbmi->interinter_compound_data.wedge_index =
aom_read_literal(r, get_wedge_bits_lookup(bsize), ACCT_STR);
- mbmi->wedge_sign = aom_read_bit(r, ACCT_STR);
+ mbmi->interinter_compound_data.wedge_sign = aom_read_bit(r, ACCT_STR);
}
#endif // CONFIG_WEDGE
#if CONFIG_COMPOUND_SEGMENT
- if (mbmi->interinter_compound_type == COMPOUND_SEG) {
- mbmi->mask_type = aom_read_literal(r, MAX_SEG_MASK_BITS, ACCT_STR);
+ if (mbmi->interinter_compound_data.type == COMPOUND_SEG) {
+ mbmi->interinter_compound_data.mask_type =
+ aom_read_literal(r, MAX_SEG_MASK_BITS, ACCT_STR);
}
#endif // CONFIG_COMPOUND_SEGMENT
} else {
- mbmi->interinter_compound_type = COMPOUND_AVERAGE;
+ mbmi->interinter_compound_data.type = COMPOUND_AVERAGE;
}
if (xd->counts)
- xd->counts->compound_interinter[bsize][mbmi->interinter_compound_type]++;
+ xd->counts
+ ->compound_interinter[bsize][mbmi->interinter_compound_data.type]++;
}
#endif // CONFIG_EXT_INTER
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 7cc6179..f7fbee2 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2082,19 +2082,21 @@
#endif // CONFIG_MOTION_VAR
&& is_any_masked_compound_used(bsize)) {
#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
- av1_write_token(w, av1_compound_type_tree,
- cm->fc->compound_type_prob[bsize],
- &compound_type_encodings[mbmi->interinter_compound_type]);
+ av1_write_token(
+ w, av1_compound_type_tree, cm->fc->compound_type_prob[bsize],
+ &compound_type_encodings[mbmi->interinter_compound_data.type]);
#endif // CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
#if CONFIG_WEDGE
- if (mbmi->interinter_compound_type == COMPOUND_WEDGE) {
- aom_write_literal(w, mbmi->wedge_index, get_wedge_bits_lookup(bsize));
- aom_write_bit(w, mbmi->wedge_sign);
+ if (mbmi->interinter_compound_data.type == COMPOUND_WEDGE) {
+ aom_write_literal(w, mbmi->interinter_compound_data.wedge_index,
+ get_wedge_bits_lookup(bsize));
+ aom_write_bit(w, mbmi->interinter_compound_data.wedge_sign);
}
#endif // CONFIG_WEDGE
#if CONFIG_COMPOUND_SEGMENT
- if (mbmi->interinter_compound_type == COMPOUND_SEG) {
- aom_write_literal(w, mbmi->mask_type, MAX_SEG_MASK_BITS);
+ if (mbmi->interinter_compound_data.type == COMPOUND_SEG) {
+ aom_write_literal(w, mbmi->interinter_compound_data.mask_type,
+ MAX_SEG_MASK_BITS);
}
#endif // CONFIG_COMPOUND_SEGMENT
}
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index d254157..26459c9 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -2233,7 +2233,8 @@
&& mbmi->motion_mode == SIMPLE_TRANSLATION
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
) {
- counts->compound_interinter[bsize][mbmi->interinter_compound_type]++;
+ counts->compound_interinter[bsize]
+ [mbmi->interinter_compound_data.type]++;
}
#endif // CONFIG_EXT_INTER
}
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index a1096f7..250d3ee 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -7562,11 +7562,11 @@
}
static int64_t pick_interinter_wedge(const AV1_COMP *const cpi,
- MACROBLOCK *const x,
+ const MACROBLOCK *const x,
const BLOCK_SIZE bsize,
const uint8_t *const p0,
const uint8_t *const p1) {
- MACROBLOCKD *const xd = &x->e_mbd;
+ const MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
const int bw = block_size_wide[bsize];
@@ -7583,18 +7583,19 @@
rd = pick_wedge(cpi, x, bsize, p0, p1, &wedge_sign, &wedge_index);
}
- mbmi->wedge_sign = wedge_sign;
- mbmi->wedge_index = wedge_index;
+ mbmi->interinter_compound_data.wedge_sign = wedge_sign;
+ mbmi->interinter_compound_data.wedge_index = wedge_index;
return rd;
}
#endif // CONFIG_WEDGE
#if CONFIG_COMPOUND_SEGMENT
static int64_t pick_interinter_seg(const AV1_COMP *const cpi,
- MACROBLOCK *const x, const BLOCK_SIZE bsize,
+ const MACROBLOCK *const x,
+ const BLOCK_SIZE bsize,
const uint8_t *const p0,
const uint8_t *const p1) {
- MACROBLOCKD *const xd = &x->e_mbd;
+ const MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
const struct buf_2d *const src = &x->plane[0].src;
const int bw = block_size_wide[bsize];
@@ -7613,6 +7614,7 @@
#else
const int bd_round = 0;
#endif // CONFIG_HIGHBITDEPTH
+ INTERINTER_COMPOUND_DATA *comp_data = &mbmi->interinter_compound_data;
DECLARE_ALIGNED(32, int16_t, r0[MAX_SB_SQUARE]);
DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
DECLARE_ALIGNED(32, int16_t, d10[MAX_SB_SQUARE]);
@@ -7639,15 +7641,15 @@
#if CONFIG_HIGHBITDEPTH
if (hbd)
build_compound_seg_mask_highbd(
- xd->seg_mask, cur_mask_type, CONVERT_TO_BYTEPTR(p0), bw,
+ comp_data->seg_mask, cur_mask_type, CONVERT_TO_BYTEPTR(p0), bw,
CONVERT_TO_BYTEPTR(p1), bw, bsize, bh, bw, xd->bd);
else
#endif // CONFIG_HIGHBITDEPTH
- build_compound_seg_mask(xd->seg_mask, cur_mask_type, p0, bw, p1, bw,
- bsize, bh, bw);
+ build_compound_seg_mask(comp_data->seg_mask, cur_mask_type, p0, bw, p1,
+ bw, bsize, bh, bw);
// compute rd for mask
- sse = av1_wedge_sse_from_residuals(r1, d10, xd->seg_mask, N);
+ sse = av1_wedge_sse_from_residuals(r1, d10, comp_data->seg_mask, N);
sse = ROUND_POWER_OF_TWO(sse, bd_round);
model_rd_from_sse(cpi, xd, bsize, 0, sse, &rate, &dist);
@@ -7660,16 +7662,16 @@
}
// make final mask
- mbmi->mask_type = best_mask_type;
+ comp_data->mask_type = best_mask_type;
#if CONFIG_HIGHBITDEPTH
if (hbd)
build_compound_seg_mask_highbd(
- xd->seg_mask, mbmi->mask_type, CONVERT_TO_BYTEPTR(p0), bw,
+ comp_data->seg_mask, comp_data->mask_type, CONVERT_TO_BYTEPTR(p0), bw,
CONVERT_TO_BYTEPTR(p1), bw, bsize, bh, bw, xd->bd);
else
#endif // CONFIG_HIGHBITDEPTH
- build_compound_seg_mask(xd->seg_mask, mbmi->mask_type, p0, bw, p1, bw,
- bsize, bh, bw);
+ build_compound_seg_mask(comp_data->seg_mask, comp_data->mask_type, p0, bw,
+ p1, bw, bsize, bh, bw);
return best_rd;
}
@@ -7698,12 +7700,13 @@
#endif // CONFIG_WEDGE && CONFIG_INTERINTRA
#if CONFIG_COMPOUND_SEGMENT || CONFIG_WEDGE
-static int64_t pick_interinter_mask(const AV1_COMP *const cpi, MACROBLOCK *x,
+static int64_t pick_interinter_mask(const AV1_COMP *const cpi,
+ const MACROBLOCK *const x,
const BLOCK_SIZE bsize,
const uint8_t *const p0,
const uint8_t *const p1) {
const COMPOUND_TYPE compound_type =
- x->e_mbd.mi[0]->mbmi.interinter_compound_type;
+ x->e_mbd.mi[0]->mbmi.interinter_compound_data.type;
switch (compound_type) {
#if CONFIG_WEDGE
case COMPOUND_WEDGE: return pick_interinter_wedge(cpi, x, bsize, p0, p1);
@@ -7720,35 +7723,24 @@
const BLOCK_SIZE bsize,
const int this_mode, int mi_row,
int mi_col) {
- MACROBLOCKD *const xd = &x->e_mbd;
+ const MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
int_mv tmp_mv[2];
int rate_mvs[2], tmp_rate_mv = 0;
- const INTERINTER_COMPOUND_DATA compound_data = {
-#if CONFIG_WEDGE
- mbmi->wedge_index,
- mbmi->wedge_sign,
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- mbmi->mask_type,
- xd->seg_mask,
-#endif // CONFIG_COMPOUND_SEGMENT
- mbmi->interinter_compound_type
- };
if (this_mode == NEW_NEWMV) {
- do_masked_motion_search_indexed(cpi, x, &compound_data, bsize, mi_row,
- mi_col, tmp_mv, rate_mvs, 2);
+ do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
+ bsize, mi_row, mi_col, tmp_mv, rate_mvs, 2);
tmp_rate_mv = rate_mvs[0] + rate_mvs[1];
mbmi->mv[0].as_int = tmp_mv[0].as_int;
mbmi->mv[1].as_int = tmp_mv[1].as_int;
} else if (this_mode == NEW_NEARESTMV || this_mode == NEW_NEARMV) {
- do_masked_motion_search_indexed(cpi, x, &compound_data, bsize, mi_row,
- mi_col, tmp_mv, rate_mvs, 0);
+ do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
+ bsize, mi_row, mi_col, tmp_mv, rate_mvs, 0);
tmp_rate_mv = rate_mvs[0];
mbmi->mv[0].as_int = tmp_mv[0].as_int;
} else if (this_mode == NEAREST_NEWMV || this_mode == NEAR_NEWMV) {
- do_masked_motion_search_indexed(cpi, x, &compound_data, bsize, mi_row,
- mi_col, tmp_mv, rate_mvs, 1);
+ do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
+ bsize, mi_row, mi_col, tmp_mv, rate_mvs, 1);
tmp_rate_mv = rate_mvs[1];
mbmi->mv[1].as_int = tmp_mv[1].as_int;
}
@@ -7768,7 +7760,7 @@
int64_t rd = INT64_MAX;
int tmp_skip_txfm_sb;
int64_t tmp_skip_sse_sb;
- const COMPOUND_TYPE compound_type = mbmi->interinter_compound_type;
+ const COMPOUND_TYPE compound_type = mbmi->interinter_compound_data.type;
best_rd_cur = pick_interinter_mask(cpi, x, bsize, *preds0, *preds1);
best_rd_cur += RDCOST(x->rdmult, x->rddiv, rs2 + rate_mv, 0);
@@ -8487,7 +8479,7 @@
*args->compmode_interintra_cost = 0;
mbmi->use_wedge_interintra = 0;
*args->compmode_interinter_cost = 0;
- mbmi->interinter_compound_type = COMPOUND_AVERAGE;
+ mbmi->interinter_compound_data.type = COMPOUND_AVERAGE;
// is_comp_interintra_pred implies !is_comp_pred
assert(!is_comp_interintra_pred || (!is_comp_pred));
@@ -8709,13 +8701,7 @@
best_mv[0].as_int = cur_mv[0].as_int;
best_mv[1].as_int = cur_mv[1].as_int;
- memset(&best_compound_data, 0, sizeof(best_compound_data));
-#if CONFIG_COMPOUND_SEGMENT
- uint8_t tmp_mask_buf[2 * MAX_SB_SQUARE];
- best_compound_data.seg_mask = tmp_mask_buf;
-#endif // CONFIG_COMPOUND_SEGMENT
- av1_cost_tokens(compound_type_cost, cm->fc->compound_type_prob[bsize],
- av1_compound_type_tree);
+ memset(&best_compound_data, 0, sizeof(INTERINTER_COMPOUND_DATA));
if (masked_compound_used) {
av1_cost_tokens(compound_type_cost, cm->fc->compound_type_prob[bsize],
@@ -8731,11 +8717,11 @@
if (!is_interinter_compound_used(cur_type, bsize)) break;
tmp_rate_mv = rate_mv;
best_rd_cur = INT64_MAX;
- mbmi->interinter_compound_type = cur_type;
+ mbmi->interinter_compound_data.type = cur_type;
rs2 = av1_cost_literal(get_interinter_compound_type_bits(
- bsize, mbmi->interinter_compound_type)) +
+ bsize, mbmi->interinter_compound_data.type)) +
(masked_compound_used
- ? compound_type_cost[mbmi->interinter_compound_type]
+ ? compound_type_cost[mbmi->interinter_compound_data.type]
: 0);
switch (cur_type) {
@@ -8775,17 +8761,8 @@
if (best_rd_cur < best_rd_compound) {
best_rd_compound = best_rd_cur;
-#if CONFIG_WEDGE
- best_compound_data.wedge_index = mbmi->wedge_index;
- best_compound_data.wedge_sign = mbmi->wedge_sign;
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- best_compound_data.mask_type = mbmi->mask_type;
- memcpy(best_compound_data.seg_mask, xd->seg_mask,
- 2 * MAX_SB_SQUARE * sizeof(uint8_t));
-#endif // CONFIG_COMPOUND_SEGMENT
- best_compound_data.interinter_compound_type =
- mbmi->interinter_compound_type;
+ memcpy(&best_compound_data, &mbmi->interinter_compound_data,
+ sizeof(best_compound_data));
if (have_newmv_in_inter_mode(this_mode)) {
if (use_masked_motion_search(cur_type)) {
best_tmp_rate_mv = tmp_rate_mv;
@@ -8801,23 +8778,14 @@
mbmi->mv[0].as_int = cur_mv[0].as_int;
mbmi->mv[1].as_int = cur_mv[1].as_int;
}
-#if CONFIG_WEDGE
- mbmi->wedge_index = best_compound_data.wedge_index;
- mbmi->wedge_sign = best_compound_data.wedge_sign;
-#endif // CONFIG_WEDGE
-#if CONFIG_COMPOUND_SEGMENT
- mbmi->mask_type = best_compound_data.mask_type;
- memcpy(xd->seg_mask, best_compound_data.seg_mask,
- 2 * MAX_SB_SQUARE * sizeof(uint8_t));
-#endif // CONFIG_COMPOUND_SEGMENT
- mbmi->interinter_compound_type =
- best_compound_data.interinter_compound_type;
+ memcpy(&mbmi->interinter_compound_data, &best_compound_data,
+ sizeof(INTERINTER_COMPOUND_DATA));
if (have_newmv_in_inter_mode(this_mode)) {
mbmi->mv[0].as_int = best_mv[0].as_int;
mbmi->mv[1].as_int = best_mv[1].as_int;
xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int;
xd->mi[0]->bmi[0].as_mv[1].as_int = mbmi->mv[1].as_int;
- if (use_masked_motion_search(mbmi->interinter_compound_type)) {
+ if (use_masked_motion_search(mbmi->interinter_compound_data.type)) {
rd_stats->rate += best_tmp_rate_mv - rate_mv;
rate_mv = best_tmp_rate_mv;
}
@@ -8832,9 +8800,9 @@
*args->compmode_interinter_cost =
av1_cost_literal(get_interinter_compound_type_bits(
- bsize, mbmi->interinter_compound_type)) +
+ bsize, mbmi->interinter_compound_data.type)) +
(masked_compound_used
- ? compound_type_cost[mbmi->interinter_compound_type]
+ ? compound_type_cost[mbmi->interinter_compound_data.type]
: 0);
}
@@ -11667,7 +11635,7 @@
#endif // CONFIG_FILTER_INTRA
mbmi->motion_mode = SIMPLE_TRANSLATION;
#if CONFIG_EXT_INTER
- mbmi->interinter_compound_type = COMPOUND_AVERAGE;
+ mbmi->interinter_compound_data.type = COMPOUND_AVERAGE;
mbmi->use_wedge_interintra = 0;
#endif // CONFIG_EXT_INTER
#if CONFIG_WARPED_MOTION