alpha
interintra
filterintra
- masked_compound
+ masked_interintra
+ masked_interinter
"
CONFIG_LIST="
external_build
return ((sb_type >= BLOCK_8X8) && (sb_type < BLOCK_64X64));
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
#define MASK_BITS_SML_INTERINTRA 3
#define MASK_BITS_MED_INTERINTRA 4
#define MASK_BITS_BIG_INTERINTRA 5
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
#define MASK_BITS_SML 3
#define MASK_BITS_MED 4
#define MASK_BITS_BIG 5
else
return MASK_BITS_BIG;
}
-#endif // CONFIG_MASKED_COMPOUND
+#endif
typedef struct {
MB_PREDICTION_MODE mode, uv_mode;
#if CONFIG_INTERINTRA
MB_PREDICTION_MODE interintra_mode, interintra_uv_mode;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int interintra_mask_index;
int interintra_uv_mask_index;
int use_masked_interintra;
BLOCK_SIZE_TYPE sb_type;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
int use_masked_compound;
int mask_index;
#endif
static const vp9_prob default_interintra_prob[BLOCK_SIZE_TYPES] = {
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192
};
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
static const vp9_prob default_masked_interintra_prob[BLOCK_SIZE_TYPES] = {
// 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
static const vp9_prob default_masked_interinter_prob[BLOCK_SIZE_TYPES] = {
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192
};
vp9_copy(cm->fc.mbskip_probs, default_mbskip_probs);
#if CONFIG_INTERINTRA
vp9_copy(cm->fc.interintra_prob, default_interintra_prob);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_copy(cm->fc.masked_interintra_prob, default_masked_interintra_prob);
#endif
#endif
#if CONFIG_FILTERINTRA
vp9_copy(cm->fc.filterintra_prob, vp9_default_filterintra_prob);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_copy(cm->fc.masked_compound_prob, default_masked_interinter_prob);
#endif
}
fc->interintra_prob[i] = update_ct2(pre_fc->interintra_prob[i],
counts->interintra[i]);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_masked_interintra) {
for (i = 0; i < BLOCK_SIZE_TYPES; ++i) {
if (is_interintra_allowed(i) && get_mask_bits_interintra(i))
fc->filterintra_prob[i][j] = update_ct2(pre_fc->filterintra_prob[i][j],
counts->filterintra[i][j]);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cm->use_masked_compound) {
for (i = 0; i < BLOCK_SIZE_TYPES; ++i) {
if (get_mask_bits(i))
#if CONFIG_INTERINTRA
#define VP9_UPD_INTERINTRA_PROB 248
#define SEPARATE_INTERINTRA_UV 0
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
#define VP9_UPD_MASKED_INTERINTRA_PROB 248
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
#define VP9_UPD_MASKED_COMPOUND_PROB 248
#endif
nmv_context nmvc;
#if CONFIG_INTERINTRA
vp9_prob interintra_prob[BLOCK_SIZE_TYPES];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_prob masked_interintra_prob[BLOCK_SIZE_TYPES];
#endif
#endif
#if CONFIG_FILTERINTRA
vp9_prob filterintra_prob[TX_SIZES][VP9_INTRA_MODES];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_prob masked_compound_prob[BLOCK_SIZE_TYPES];
#endif
} FRAME_CONTEXT;
nmv_context_counts mv;
#if CONFIG_INTERINTRA
unsigned int interintra[BLOCK_SIZE_TYPES][2];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
unsigned int masked_interintra[BLOCK_SIZE_TYPES][2];
#endif
#endif
#if CONFIG_FILTERINTRA
unsigned int filterintra[TX_SIZES][VP9_INTRA_MODES][2];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
unsigned int masked_compound[BLOCK_SIZE_TYPES][2];
#endif
} FRAME_COUNTS;
#if CONFIG_INTERINTRA
int use_interintra;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int use_masked_interintra;
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
int use_masked_compound;
#endif
return clamped_mv;
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
#define MASK_WEIGHT_BITS 6
static int get_masked_weight(int m) {
xd->mb_to_bottom_edge);
scale->set_scaled_offsets(scale, arg->y + y, arg->x + x);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (which_mv && xd->mode_info_context->mbmi.use_masked_compound) {
uint8_t tmp_dst[4096];
vp9_build_inter_predictor(pre, pre_stride,
&res_mv, &xd->scale_factor[which_mv],
4 << pred_w, 4 << pred_h, which_mv,
&xd->subpix, MV_PRECISION_Q4);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
}
#endif
}
void vp9_setup_scale_factors(VP9_COMMON *cm, int i);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
void vp9_generate_masked_weight(int mask_index, BLOCK_SIZE_TYPE sb_type,
int h, int w, uint8_t *mask, int stride);
void vp9_generate_hard_mask(int mask_index, BLOCK_SIZE_TYPE sb_type,
}
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
#define MASK_WEIGHT_BITS_INTERINTRA 6
static int get_masked_weight_interintra(int m) {
#endif
static void combine_interintra(MB_PREDICTION_MODE mode,
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int use_masked_interintra,
int mask_index,
BLOCK_SIZE_TYPE bsize,
size == 8 ? 8 : 16);
int i, j;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
uint8_t mask[4096];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
vp9_generate_masked_weight_interintra(mask_index, bsize, bh, bw, mask, bw);
for (j = 0; j < bw; ++j) {
int k = i * interstride + j;
int scale = weights1d[i * size_scale];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
for (j = 0; j < bw; ++j) {
int k = i * interstride + j;
int scale = weights1d[j * size_scale];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
int k = i * interstride + j;
int scale = (weights1d[i * size_scale] * 3 +
weights1d[j * size_scale]) >> 2;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
int k = i * interstride + j;
int scale = (weights1d[j * size_scale] * 3 +
weights1d[i * size_scale]) >> 2;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
for (j = 0; j < bw; ++j) {
int k = i * interstride + j;
int scale = weights1d[(i < j ? i : j) * size_scale];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
int k = i * interstride + j;
int scale = (weights1d[i * size_scale] +
weights1d[j * size_scale]) >> 1;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
for (i = 0; i < bh; ++i) {
for (j = 0; j < bw; ++j) {
int k = i * interstride + j;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
int m = mask[i * bw + j];
if (use_masked_interintra && get_mask_bits_interintra(bsize))
interpred[k] = (intrapred[i * intrastride + j] * m +
xd->mode_info_context->mbmi.interintra_mode, bw, bh,
xd->up_available, xd->left_available, xd->right_available);
combine_interintra(xd->mode_info_context->mbmi.interintra_mode,
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
xd->mode_info_context->mbmi.use_masked_interintra,
xd->mode_info_context->mbmi.interintra_mask_index,
bsize,
xd->mode_info_context->mbmi.interintra_uv_mode, bw, bh,
xd->up_available, xd->left_available, xd->right_available);
combine_interintra(xd->mode_info_context->mbmi.interintra_uv_mode,
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
xd->mode_info_context->mbmi.use_masked_interintra,
xd->mode_info_context->mbmi.interintra_uv_mask_index,
bsize,
#endif
upred, uvstride, uintrapredictor, bw, bw, bh);
combine_interintra(xd->mode_info_context->mbmi.interintra_uv_mode,
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
xd->mode_info_context->mbmi.use_masked_interintra,
xd->mode_info_context->mbmi.interintra_uv_mask_index,
bsize,
int ystride,
int uvstride,
BLOCK_SIZE_TYPE bsize);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
void vp9_generate_masked_weight_interintra(int mask_index,
BLOCK_SIZE_TYPE sb_type,
int h, int w,
prototype unsigned int vp9_sad4x4_avg "const uint8_t *src_ptr, int source_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred, unsigned int max_sad"
specialize vp9_sad4x4_avg $sse_x86inc
-if [ "$CONFIG_MASKED_COMPOUND" = "yes" ]; then
+if [ "$CONFIG_MASKED_INTERINTER" = "yes" ] || ([ "$CONFIG_MASKED_INTERINTRA" = "yes" ] && [ "$CONFIG_INTERINTRA" = "yes" ]); then
prototype int vp9_masked_diamond_search_sad "struct macroblock *x, uint8_t *mask, int mask_stride, union int_mv *ref_mv, union int_mv *best_mv, int search_param, int sad_per_bit, int *num00, struct vp9_variance_vtable *fn_ptr, DEC_MVCOSTS, union int_mv *center_mv, int is_second"
specialize vp9_masked_diamond_search_sad
return sad;
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
static INLINE unsigned int masked_sad_mx_n_c(const uint8_t *src_ptr,
int src_stride,
const uint8_t *ref_ptr,
}
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
static void masked_variance(const uint8_t *src_ptr,
int src_stride,
const uint8_t *ref_ptr,
uint8_t inter_mode_ctx;
MV_REFERENCE_FRAME ref0, ref1;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
mbmi->use_masked_compound = 0;
mbmi->mask_index = MASK_NONE;
#endif
mbmi->ref_frame[1] = (vp9_read(r, cm->fc.interintra_prob[bsize]) ?
INTRA_FRAME : NONE);
cm->counts.interintra[bsize][mbmi->ref_frame[1] == INTRA_FRAME]++;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
mbmi->use_masked_interintra = 0;
#endif
if (mbmi->ref_frame[1] == INTRA_FRAME) {
#else
mbmi->interintra_uv_mode = mbmi->interintra_mode;
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_masked_interintra && get_mask_bits_interintra(bsize)) {
mbmi->use_masked_interintra = vp9_read(r,
cm->fc.masked_interintra_prob[bsize]);
assert(!"Invalid inter mode value");
}
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
mbmi->use_masked_compound = 0;
if (pbi->common.use_masked_compound &&
pbi->common.comp_pred_mode != SINGLE_PREDICTION_ONLY &&
if (vp9_read(r, VP9_MODE_UPDATE_PROB))
vp9_diff_update_prob(r, &cm->fc.comp_inter_prob[i]);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cm->comp_pred_mode != SINGLE_PREDICTION_ONLY) {
cm->use_masked_compound = vp9_read_bit(r);
if (cm->use_masked_compound) {
if (vp9_read(r, VP9_UPD_INTERINTRA_PROB))
vp9_diff_update_prob(r, &cm->fc.interintra_prob[b]);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_masked_interintra) {
int k;
for (k = 0; k < BLOCK_SIZE_TYPES; ++k) {
#if CONFIG_INTERINTRA
cm->use_interintra = vp9_rb_read_bit(rb);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_interintra) {
cm->use_masked_interintra = vp9_rb_read_bit(rb);
} else {
write_intra_mode(bc, mi->interintra_uv_mode,
pc->fc.uv_mode_prob[mi->interintra_mode]);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (get_mask_bits_interintra(mi->sb_type) &&
pc->use_masked_interintra) {
vp9_write(bc, mi->use_masked_interintra,
vp9_encode_mv(cpi, bc, &mi->mv[1].as_mv, &mi->best_second_mv.as_mv,
nmvc, allow_hp);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cpi->common.use_masked_compound &&
cpi->common.comp_pred_mode != SINGLE_PREDICTION_ONLY &&
is_inter_mode(mode) &&
vp9_wb_write_bit(wb, cm->use_interintra);
if (!cm->use_interintra)
vp9_zero(cpi->interintra_count);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (!cpi->dummy_packing && cm->use_interintra
&& cm->use_masked_interintra) {
int k;
VP9_UPD_INTERINTRA_PROB,
cpi->interintra_count[b]);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_masked_interintra) {
int k;
for (k = 0; k < BLOCK_SIZE_TYPES; ++k) {
VP9_MODE_UPDATE_PROB,
cpi->comp_inter_count[i]);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (use_compound_pred) {
if (!cpi->dummy_packing && cm->use_masked_compound) {
cm->use_masked_compound = 0;
#if SEPARATE_INTERINTRA_UV
++cpi->uv_mode_count[mbmi->interintra_mode][mbmi->interintra_uv_mode];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cm->use_masked_interintra &&
get_mask_bits_interintra(mbmi->sb_type))
++cpi->masked_interintra_count[mbmi->sb_type]
}
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cm->use_masked_compound &&
cm->comp_pred_mode != SINGLE_PREDICTION_ONLY &&
is_inter_mode(mbmi->mode) &&
#if CONFIG_INTERINTRA
vp9_zero(cpi->interintra_count);
vp9_zero(cpi->interintra_select_count);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_zero(cpi->masked_interintra_count);
vp9_zero(cpi->masked_interintra_select_count);
#endif
#if CONFIG_FILTERINTRA
vp9_zero(cm->counts.filterintra);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_zero(cpi->masked_compound_counts);
vp9_zero(cpi->masked_compound_select_counts);
#endif
#undef DIST
#undef IFMVCV
#undef CHECK_BETTER
-#if !CONFIG_MASKED_COMPOUND
+#if !((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
#undef MIN
#undef MAX
#endif
mvcost, x->errorperbit);
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
#define MVC(r, c) \
(mvcost ? \
}
return bestsme;
}
-#endif // CONFIG_MASKED_COMPOUND
+#endif
int vp9_diamond_search_sadx4(MACROBLOCK *x,
int_mv *ref_mv, int_mv *best_mv, int search_param,
int_mv *center_mv, const uint8_t *second_pred,
int w, int h);
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
int vp9_find_best_masked_sub_pixel_step_iteratively(
MACROBLOCK *x, uint8_t *mask, int mask_stride, int_mv *bestmv,
int_mv *ref_mv, int error_per_bit, const vp9_variance_fn_ptr_t *vfp,
int_mv *mvp_full, int step_param, int sadpb, int further_steps,
int do_refine, vp9_variance_fn_ptr_t *fn_ptr, int_mv *ref_mv,
int_mv *dst_mv, int is_second);
-#endif // CONFIG_MASKED_COMPOUND
+#endif
#endif // VP9_ENCODER_VP9_MCOMP_H_
vp9_sub_pixel_avg_variance4x4, NULL, NULL, NULL,
vp9_sad4x4x3, vp9_sad4x4x8, vp9_sad4x4x4d)
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
#define MBFP(BT, MSDF, MVF, MSVF) \
cpi->fn_ptr[BT].msdf = MSDF; \
cpi->fn_ptr[BT].mvf = MVF; \
}
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
static void select_masked_interintra_mode(VP9_COMP *cpi) {
static const double threshold = 1/100.0;
VP9_COMMON *cm = &cpi->common;
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
static void select_masked_compound_mode(VP9_COMP *cpi) {
static const double threshold = 1/128.0;
VP9_COMMON *cm = &cpi->common;
#if CONFIG_INTERINTRA
if (cm->current_video_frame == 0) {
cm->use_interintra = 1;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
cm->use_masked_interintra = 1;
#endif
}
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cm->current_video_frame == 0) {
cm->use_masked_compound = 0;
}
counts->mv = cpi->NMVcount;
#if CONFIG_INTERINTRA
vp9_copy(counts->interintra, cpi->interintra_count);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_copy(counts->masked_interintra, cpi->masked_interintra_count);
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_copy(counts->masked_compound, cpi->masked_compound_counts);
#endif
if (!cpi->common.error_resilient_mode &&
#if CONFIG_INTERINTRA
if (cm->frame_type != KEY_FRAME) {
select_interintra_mode(cpi);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (cpi->common.use_interintra)
select_masked_interintra_mode(cpi);
else
#endif
}
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (cm->frame_type != KEY_FRAME)
select_masked_compound_mode(cpi);
#endif
#if CONFIG_INTERINTRA
vp9_prob interintra_prob[BLOCK_SIZE_TYPES];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_prob masked_interintra_prob[BLOCK_SIZE_TYPES];
#endif
#endif
#if CONFIG_FILTERINTRA
vp9_prob filterintra_prob[TX_SIZES][VP9_INTRA_MODES];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_prob masked_compound_prob[BLOCK_SIZE_TYPES];
#endif
} CODING_CONTEXT;
#if CONFIG_INTERINTRA
unsigned int interintra_count[BLOCK_SIZE_TYPES][2];
unsigned int interintra_select_count[2];
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
unsigned int masked_interintra_count[BLOCK_SIZE_TYPES][2];
unsigned int masked_interintra_select_count[2];
#endif
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
unsigned int masked_compound_counts[BLOCK_SIZE_TYPES][2];
unsigned int masked_compound_select_counts[2];
#endif
vp9_copy(cc->mbskip_probs, cm->fc.mbskip_probs);
#if CONFIG_INTERINTRA
vp9_copy(cc->interintra_prob, cm->fc.interintra_prob);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_copy(cc->masked_interintra_prob, cm->fc.masked_interintra_prob);
#endif
#endif
#if CONFIG_FILTERINTRA
vp9_copy(cc->filterintra_prob, cm->fc.filterintra_prob);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_copy(cc->masked_compound_prob, cm->fc.masked_compound_prob);
#endif
}
vp9_copy(cm->fc.mbskip_probs, cc->mbskip_probs);
#if CONFIG_INTERINTRA
vp9_copy(cm->fc.interintra_prob, cc->interintra_prob);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
vp9_copy(cm->fc.masked_interintra_prob, cc->masked_interintra_prob);
#endif
#endif
#if CONFIG_FILTERINTRA
vp9_copy(cm->fc.filterintra_prob, cc->filterintra_prob);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
vp9_copy(cm->fc.masked_compound_prob, cc->masked_compound_prob);
#endif
}
vpx_free(second_pred);
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA)|| \
+ CONFIG_MASKED_INTERINTER)
static void do_masked_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
uint8_t *mask, int mask_stride,
BLOCK_SIZE_TYPE bsize,
xd->plane[i].pre[is_second] = backup_yv12[i];
}
}
+#endif
+#if CONFIG_MASKED_INTERINTER
static void do_masked_motion_search_indexed(VP9_COMP *cpi, MACROBLOCK *x,
int mask_index,
BLOCK_SIZE_TYPE bsize,
#if CONFIG_INTERINTRA
int *compmode_interintra_cost,
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
int *compmode_masked_cost,
#endif
int *rate_y, int64_t *distortion_y,
#if CONFIG_INTERINTRA
const int is_comp_interintra_pred = (mbmi->ref_frame[1] == INTRA_FRAME);
#endif
-#if CONFIG_MASKED_COMPOUND || CONFIG_INTERINTRA
+#if CONFIG_MASKED_INTERINTER || CONFIG_INTERINTRA
int rate_mv_tmp = 0;
#endif
const int num_refs = is_comp_pred ? 2 : 1;
is_interintra_allowed(mbmi->sb_type)) {
extend_for_interintra(xd, bsize);
}
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
mbmi->use_masked_interintra = 0;
mbmi->interintra_mask_index = 0;
mbmi->interintra_uv_mask_index = 0;
if (frame_mv[refs[0]].as_int == INVALID_MV ||
frame_mv[refs[1]].as_int == INVALID_MV)
return INT64_MAX;
-#if !(CONFIG_MASKED_COMPOUND || CONFIG_INTERINTRA)
+#if !(CONFIG_MASKED_INTERINTER || CONFIG_INTERINTRA)
*rate2 += rate_mv;
#endif
} else {
int_mv tmp_mv;
single_motion_search(cpi, x, bsize, mi_row, mi_col, &tmp_mv, &rate_mv);
-#if !(CONFIG_MASKED_COMPOUND || CONFIG_INTERINTRA)
+#if !(CONFIG_MASKED_INTERINTER || CONFIG_INTERINTRA)
*rate2 += rate_mv;
#endif
frame_mv[refs[0]].as_int =
xd->mode_info_context->bmi[0].as_mv[0].as_int = tmp_mv.as_int;
single_newmv[refs[0]].as_int = tmp_mv.as_int;
}
-#if CONFIG_MASKED_COMPOUND || CONFIG_INTERINTRA
+#if CONFIG_MASKED_INTERINTER || CONFIG_INTERINTRA
rate_mv_tmp = rate_mv;
#endif
}
int64_t best_interintra_rd = INT64_MAX;
int rmode, rate_sum;
int64_t dist_sum;
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
#define MASKED_INTERINTRA_REFINE_SEARCH
int maskbits, mask_types, mask_index, best_mask_index = 0;
int64_t best_interintra_rd_nomask, best_interintra_rd_mask = INT64_MAX;
#if !SEPARATE_INTERINTRA_UV
mbmi->interintra_uv_mode = best_interintra_mode;
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
maskbits = get_mask_bits_interintra(bsize);
rmode = x->mbmode_cost[mbmi->interintra_mode];
if (maskbits) {
#ifdef MASKED_INTERINTRA_REFINE_SEARCH
// Refine motion vector
if (this_mode == NEWMV) {
+ int j;
mbmi->interintra_mask_index = best_mask_index;
mbmi->interintra_uv_mask_index = best_mask_index;
vp9_generate_masked_weight_interintra(best_mask_index, bsize,
bh, bw, mask, bw);
+ for (i = 0; i < bh; ++i)
+ for (j = 0; j < bw; ++j)
+ mask[i * bw + j] = 64 - mask[i * bw + j];
do_masked_motion_search(cpi, x, mask, bw, bsize, refs[0],
mi_row, mi_col, &tmp_mv, &tmp_rate_mv, 0);
mbmi->mv[0].as_int = tmp_mv.as_int;
#endif
if (best_interintra_rd_mask < best_interintra_rd_nomask) {
mbmi->use_masked_interintra = 1;
- if (cm->use_masked_interintra) {
+ if (cm->use_interintra && cm->use_masked_interintra) {
mbmi->interintra_mask_index = best_mask_index;
mbmi->interintra_uv_mask_index = best_mask_index;
#ifdef MASKED_INTERINTRA_REFINE_SEARCH
*compmode_interintra_cost +=
x->intra_uv_mode_cost[xd->frame_type][mbmi->interintra_uv_mode];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA
if (get_mask_bits_interintra(bsize) && cm->use_masked_interintra) {
*compmode_interintra_cost += vp9_cost_bit(
cm->fc.masked_interintra_prob[bsize],
}
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if (is_comp_pred && get_mask_bits(bsize)) {
int mask_index, best_mask_index = -1, rs;
int rate_sum;
*compmode_masked_cost = vp9_cost_bit(cm->fc.masked_compound_prob[bsize],
0);
}
-#endif // CONFIG_MASKED_COMPOUND
+#endif // CONFIG_MASKED_INTERINTER
-#if CONFIG_INTERINTRA || CONFIG_MASKED_COMPOUND
+#if CONFIG_INTERINTRA || CONFIG_MASKED_INTERINTER
*rate2 += rate_mv_tmp;
#endif
int bhsl = b_height_log2(bsize);
int bhs = (1 << bhsl) / 4; // mode_info step for subsize
int best_skip2 = 0;
-#if CONFIG_INTERINTRA || CONFIG_MASKED_COMPOUND
+#if CONFIG_INTERINTRA || CONFIG_MASKED_INTERINTER
int64_t best_overall_rd = INT64_MAX;
#endif
#if CONFIG_INTERINTRA
#endif
int64_t best_intra16_rd = INT64_MAX;
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
int is_best_masked_compound = 0;
#endif
#if CONFIG_INTERINTRA
int compmode_interintra_cost = 0;
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
int compmode_masked_cost = 0;
#endif
int rate2 = 0, rate_y = 0, rate_uv = 0;
mbmi->interintra_mode = (MB_PREDICTION_MODE)(DC_PRED - 1);
mbmi->interintra_uv_mode = (MB_PREDICTION_MODE)(DC_PRED - 1);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
mbmi->use_masked_compound = 0;
mbmi->mask_index = MASK_NONE;
#endif
#if CONFIG_INTERINTRA
&compmode_interintra_cost,
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
&compmode_masked_cost,
#endif
&rate_y, &distortion_y,
rate2 += compmode_interintra_cost;
}
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
if ((cpi->common.comp_pred_mode == HYBRID_PREDICTION ||
cpi->common.comp_pred_mode == COMP_PREDICTION_ONLY) &&
cpi->common.use_masked_compound)
best_filter_rd[i] = MIN(best_filter_rd[i], this_rd);
}
-#if CONFIG_INTERINTRA || CONFIG_MASKED_COMPOUND
+#if CONFIG_INTERINTRA || CONFIG_MASKED_INTERINTER
if (this_rd < best_overall_rd) {
best_overall_rd = this_rd;
#if CONFIG_INTERINTRA
is_best_interintra = (second_ref_frame == INTRA_FRAME);
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
is_best_masked_compound = (mbmi->mask_index != MASK_NONE);
#endif
}
++cpi->interintra_select_count[is_best_interintra];
#endif
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTER
// diagnostics
if ((cpi->common.comp_pred_mode == HYBRID_PREDICTION ||
cpi->common.comp_pred_mode == COMP_PREDICTION_ONLY) &&
ref_ptr[3], ref_stride, 0x7fffffff);
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
unsigned int vp9_masked_sad64x64_c(const uint8_t *src_ptr,
int src_stride,
const uint8_t *ref_ptr,
unsigned int *sse,
const uint8_t *second_pred);
-#if CONFIG_MASKED_COMPOUND
+#if CONFIG_MASKED_INTERINTRA || CONFIG_MASKED_INTERINTER
typedef unsigned int(*vp9_masked_sad_fn_t)(const uint8_t *src_ptr,
int source_stride,
const uint8_t *ref_ptr,
vp9_sad_multi_fn_t sdx3f;
vp9_sad_multi1_fn_t sdx8f;
vp9_sad_multi_d_fn_t sdx4df;
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
vp9_masked_sad_fn_t msdf;
vp9_masked_variance_fn_t mvf;
vp9_masked_subpixvariance_fn_t msvf;
return vp9_variance4x8(temp3, 4, dst_ptr, dst_pixels_per_line, sse);
}
-#if CONFIG_MASKED_COMPOUND
+#if ((CONFIG_MASKED_INTERINTRA && CONFIG_INTERINTRA) || \
+ CONFIG_MASKED_INTERINTER)
unsigned int vp9_masked_variance64x64_c(const uint8_t *src_ptr,
int source_stride,
const uint8_t *ref_ptr,