Merge "inline vp9_segfeature_active()"
This commit is contained in:
commit
a49c701529
@ -267,7 +267,7 @@ void vp9_loop_filter_frame_init(VP9_COMMON *cm, int default_filt_lvl) {
|
||||
|
||||
for (seg_id = 0; seg_id < MAX_SEGMENTS; seg_id++) {
|
||||
int lvl_seg = default_filt_lvl;
|
||||
if (vp9_segfeature_active(seg, seg_id, SEG_LVL_ALT_LF)) {
|
||||
if (segfeature_active(seg, seg_id, SEG_LVL_ALT_LF)) {
|
||||
const int data = vp9_get_segdata(seg, seg_id, SEG_LVL_ALT_LF);
|
||||
lvl_seg = clamp(seg->abs_delta == SEGMENT_ABSDATA ?
|
||||
data : default_filt_lvl + data,
|
||||
|
@ -266,7 +266,7 @@ int16_t vp9_ac_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
|
||||
|
||||
int vp9_get_qindex(const struct segmentation *seg, int segment_id,
|
||||
int base_qindex) {
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) {
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) {
|
||||
const int data = vp9_get_segdata(seg, segment_id, SEG_LVL_ALT_Q);
|
||||
const int seg_qindex = seg->abs_delta == SEGMENT_ABSDATA ?
|
||||
data : base_qindex + data;
|
||||
|
@ -25,12 +25,6 @@ static const int seg_feature_data_max[SEG_LVL_MAX] = {
|
||||
// the coding mechanism is still subject to change so these provide a
|
||||
// convenient single point of change.
|
||||
|
||||
int vp9_segfeature_active(const struct segmentation *seg, int segment_id,
|
||||
SEG_LVL_FEATURES feature_id) {
|
||||
return seg->enabled &&
|
||||
(seg->feature_mask[segment_id] & (1 << feature_id));
|
||||
}
|
||||
|
||||
void vp9_clearall_segfeatures(struct segmentation *seg) {
|
||||
vp9_zero(seg->feature_data);
|
||||
vp9_zero(seg->feature_mask);
|
||||
|
@ -49,9 +49,12 @@ struct segmentation {
|
||||
unsigned int feature_mask[MAX_SEGMENTS];
|
||||
};
|
||||
|
||||
int vp9_segfeature_active(const struct segmentation *seg,
|
||||
int segment_id,
|
||||
SEG_LVL_FEATURES feature_id);
|
||||
static INLINE int segfeature_active(const struct segmentation *seg,
|
||||
int segment_id,
|
||||
SEG_LVL_FEATURES feature_id) {
|
||||
return seg->enabled &&
|
||||
(seg->feature_mask[segment_id] & (1 << feature_id));
|
||||
}
|
||||
|
||||
void vp9_clearall_segfeatures(struct segmentation *seg);
|
||||
|
||||
|
@ -177,7 +177,7 @@ static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd,
|
||||
|
||||
static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd,
|
||||
int segment_id, vp9_reader *r) {
|
||||
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
|
||||
if (segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
|
||||
return 1;
|
||||
} else {
|
||||
const int ctx = vp9_get_skip_context(xd);
|
||||
@ -307,7 +307,7 @@ static void read_ref_frames(VP9_COMMON *const cm, MACROBLOCKD *const xd,
|
||||
FRAME_CONTEXT *const fc = cm->fc;
|
||||
FRAME_COUNTS *counts = xd->counts;
|
||||
|
||||
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
if (segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
ref_frame[0] = (MV_REFERENCE_FRAME)vp9_get_segdata(&cm->seg, segment_id,
|
||||
SEG_LVL_REF_FRAME);
|
||||
ref_frame[1] = NONE;
|
||||
@ -444,7 +444,7 @@ static INLINE int assign_mv(VP9_COMMON *cm, MACROBLOCKD *xd,
|
||||
|
||||
static int read_is_inter_block(VP9_COMMON *const cm, MACROBLOCKD *const xd,
|
||||
int segment_id, vp9_reader *r) {
|
||||
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
if (segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
return vp9_get_segdata(&cm->seg, segment_id, SEG_LVL_REF_FRAME) !=
|
||||
INTRA_FRAME;
|
||||
} else {
|
||||
@ -493,7 +493,7 @@ static void read_inter_block_mode_info(VP9Decoder *const pbi,
|
||||
mi_row, mi_col, fpm_sync, (void *)pbi, inter_mode_ctx);
|
||||
}
|
||||
|
||||
if (vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
if (segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
mbmi->mode = ZEROMV;
|
||||
if (bsize < BLOCK_8X8) {
|
||||
vpx_internal_error(xd->error_info, VPX_CODEC_UNSUP_BITSTREAM,
|
||||
|
@ -93,7 +93,7 @@ static void write_selected_tx_size(const VP9_COMMON *cm,
|
||||
|
||||
static int write_skip(const VP9_COMMON *cm, const MACROBLOCKD *xd,
|
||||
int segment_id, const MODE_INFO *mi, vp9_writer *w) {
|
||||
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
|
||||
if (segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
|
||||
return 1;
|
||||
} else {
|
||||
const int skip = mi->mbmi.skip;
|
||||
@ -207,7 +207,7 @@ static void write_ref_frames(const VP9_COMMON *cm, const MACROBLOCKD *xd,
|
||||
|
||||
// If segment level coding of this signal is disabled...
|
||||
// or the segment allows multiple reference frame options
|
||||
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
if (segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
assert(!is_compound);
|
||||
assert(mbmi->ref_frame[0] ==
|
||||
vp9_get_segdata(&cm->seg, segment_id, SEG_LVL_REF_FRAME));
|
||||
@ -264,7 +264,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
|
||||
skip = write_skip(cm, xd, segment_id, mi, w);
|
||||
|
||||
if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
if (!segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
vp9_write(w, is_inter, vp9_get_intra_inter_prob(cm, xd));
|
||||
|
||||
if (bsize >= BLOCK_8X8 && cm->tx_mode == TX_MODE_SELECT &&
|
||||
@ -293,7 +293,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
write_ref_frames(cm, xd, w);
|
||||
|
||||
// If segment skip is not enabled code the mode.
|
||||
if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP)) {
|
||||
if (!segfeature_active(seg, segment_id, SEG_LVL_SKIP)) {
|
||||
if (bsize >= BLOCK_8X8) {
|
||||
write_inter_mode(w, mode, inter_probs);
|
||||
}
|
||||
@ -787,7 +787,7 @@ static void encode_segmentation(VP9_COMMON *cm, MACROBLOCKD *xd,
|
||||
|
||||
for (i = 0; i < MAX_SEGMENTS; i++) {
|
||||
for (j = 0; j < SEG_LVL_MAX; j++) {
|
||||
const int active = vp9_segfeature_active(seg, i, j);
|
||||
const int active = segfeature_active(seg, i, j);
|
||||
vp9_wb_write_bit(wb, active);
|
||||
if (active) {
|
||||
const int data = vp9_get_segdata(seg, i, j);
|
||||
|
@ -1051,7 +1051,7 @@ static void update_state(VP9_COMP *cpi, ThreadData *td,
|
||||
if (!output_enabled)
|
||||
return;
|
||||
|
||||
if (!vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
if (!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
for (i = 0; i < TX_MODES; i++)
|
||||
rdc->tx_select_diff[i] += ctx->tx_rd_diff[i];
|
||||
}
|
||||
@ -1248,7 +1248,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
|
||||
vp9_rd_pick_intra_mode_sb(cpi, x, rd_cost, bsize, ctx, best_rd);
|
||||
} else {
|
||||
if (bsize >= BLOCK_8X8) {
|
||||
if (vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP))
|
||||
if (segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP))
|
||||
vp9_rd_pick_inter_mode_sb_seg_skip(cpi, tile_data, x, rd_cost, bsize,
|
||||
ctx, best_rd);
|
||||
else
|
||||
@ -1291,8 +1291,8 @@ static void update_stats(VP9_COMMON *cm, ThreadData *td) {
|
||||
if (!frame_is_intra_only(cm)) {
|
||||
FRAME_COUNTS *const counts = td->counts;
|
||||
const int inter_block = is_inter_block(mbmi);
|
||||
const int seg_ref_active = vp9_segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_REF_FRAME);
|
||||
const int seg_ref_active = segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_REF_FRAME);
|
||||
if (!seg_ref_active) {
|
||||
counts->intra_inter[vp9_get_intra_inter_context(xd)][inter_block]++;
|
||||
// If the segment reference feature is enabled we have only a single
|
||||
@ -1317,7 +1317,7 @@ static void update_stats(VP9_COMMON *cm, ThreadData *td) {
|
||||
}
|
||||
}
|
||||
if (inter_block &&
|
||||
!vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
|
||||
const int mode_ctx = mbmi->mode_context[mbmi->ref_frame[0]];
|
||||
if (bsize >= BLOCK_8X8) {
|
||||
const PREDICTION_MODE mode = mbmi->mode;
|
||||
@ -2849,7 +2849,7 @@ static void encode_rd_sb_row(VP9_COMP *cpi,
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_map
|
||||
: cm->last_frame_seg_map;
|
||||
int segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
|
||||
seg_skip = vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP);
|
||||
seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP);
|
||||
}
|
||||
|
||||
x->source_variance = UINT_MAX;
|
||||
@ -2909,7 +2909,7 @@ static void init_encode_frame_mb_context(VP9_COMP *cpi) {
|
||||
static int check_dual_ref_flags(VP9_COMP *cpi) {
|
||||
const int ref_flags = cpi->ref_frame_flags;
|
||||
|
||||
if (vp9_segfeature_active(&cpi->common.seg, 1, SEG_LVL_REF_FRAME)) {
|
||||
if (segfeature_active(&cpi->common.seg, 1, SEG_LVL_REF_FRAME)) {
|
||||
return 0;
|
||||
} else {
|
||||
return (!!(ref_flags & VP9_GOLD_FLAG) + !!(ref_flags & VP9_LAST_FLAG)
|
||||
@ -2984,7 +2984,7 @@ static void nonrd_pick_sb_modes(VP9_COMP *cpi,
|
||||
|
||||
if (cm->frame_type == KEY_FRAME)
|
||||
hybrid_intra_mode_search(cpi, x, rd_cost, bsize, ctx);
|
||||
else if (vp9_segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP))
|
||||
else if (segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP))
|
||||
set_mode_info_seg_skip(x, cm->tx_mode, rd_cost, bsize);
|
||||
else if (bsize >= BLOCK_8X8)
|
||||
vp9_pick_inter_mode(cpi, x, tile_data, mi_row, mi_col,
|
||||
@ -3599,7 +3599,7 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi,
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_map
|
||||
: cm->last_frame_seg_map;
|
||||
int segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
|
||||
seg_skip = vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP);
|
||||
seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP);
|
||||
if (seg_skip) {
|
||||
partition_search_type = FIXED_PARTITION;
|
||||
}
|
||||
@ -4157,8 +4157,8 @@ static void encode_superblock(VP9_COMP *cpi, ThreadData *td,
|
||||
MODE_INFO **mi_8x8 = xd->mi;
|
||||
MODE_INFO *mi = mi_8x8[0];
|
||||
MB_MODE_INFO *mbmi = &mi->mbmi;
|
||||
const int seg_skip = vp9_segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_SKIP);
|
||||
const int seg_skip = segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_SKIP);
|
||||
const int mis = cm->mi_stride;
|
||||
const int mi_width = num_8x8_blocks_wide_lookup[bsize];
|
||||
const int mi_height = num_8x8_blocks_high_lookup[bsize];
|
||||
|
@ -1692,7 +1692,7 @@ void vp9_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
||||
|
||||
// If the segment reference frame feature is enabled....
|
||||
// then do nothing if the current ref frame is not allowed..
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
vp9_get_segdata(seg, segment_id, SEG_LVL_REF_FRAME) != (int)ref_frame)
|
||||
continue;
|
||||
|
||||
|
@ -678,7 +678,7 @@ void vp9_init_plane_quantizers(VP9_COMP *cpi, MACROBLOCK *x) {
|
||||
x->plane[i].quant_thred[1] = x->plane[i].zbin[1] * x->plane[i].zbin[1];
|
||||
}
|
||||
|
||||
x->skip_block = vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP);
|
||||
x->skip_block = segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP);
|
||||
x->q_index = qindex;
|
||||
|
||||
x->errorperbit = rdmult >> 6;
|
||||
|
@ -2120,8 +2120,8 @@ static void estimate_ref_frame_costs(const VP9_COMMON *cm,
|
||||
unsigned int *ref_costs_single,
|
||||
unsigned int *ref_costs_comp,
|
||||
vp9_prob *comp_mode_p) {
|
||||
int seg_ref_active = vp9_segfeature_active(&cm->seg, segment_id,
|
||||
SEG_LVL_REF_FRAME);
|
||||
int seg_ref_active = segfeature_active(&cm->seg, segment_id,
|
||||
SEG_LVL_REF_FRAME);
|
||||
if (seg_ref_active) {
|
||||
memset(ref_costs_single, 0, MAX_REF_FRAMES * sizeof(*ref_costs_single));
|
||||
memset(ref_costs_comp, 0, MAX_REF_FRAMES * sizeof(*ref_costs_comp));
|
||||
@ -3007,7 +3007,7 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi,
|
||||
}
|
||||
// If the segment reference frame feature is enabled....
|
||||
// then do nothing if the current ref frame is not allowed..
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
vp9_get_segdata(seg, segment_id, SEG_LVL_REF_FRAME) != (int)ref_frame) {
|
||||
ref_frame_skip_mask[0] |= (1 << ref_frame);
|
||||
ref_frame_skip_mask[1] |= SECOND_REF_FRAME_MASK;
|
||||
@ -3017,7 +3017,7 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi,
|
||||
// Disable this drop out case if the ref frame
|
||||
// segment level feature is enabled for this segment. This is to
|
||||
// prevent the possibility that we end up unable to pick any mode.
|
||||
if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
if (!segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
// Only consider ZEROMV/ALTREF_FRAME for alt ref frame,
|
||||
// unless ARNR filtering is enabled in which case we want
|
||||
// an unfiltered alternative. We allow near/nearest as well
|
||||
@ -3196,7 +3196,7 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi,
|
||||
|
||||
// Do not allow compound prediction if the segment level reference frame
|
||||
// feature is in use as in this case there can only be one reference.
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
continue;
|
||||
|
||||
if ((mode_search_skip_flags & FLAG_SKIP_COMP_BESTINTRA) &&
|
||||
@ -3638,7 +3638,7 @@ void vp9_rd_pick_inter_mode_sb_seg_skip(VP9_COMP *cpi,
|
||||
|
||||
rd_cost->rate = INT_MAX;
|
||||
|
||||
assert(vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP));
|
||||
assert(segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP));
|
||||
|
||||
mbmi->mode = ZEROMV;
|
||||
mbmi->uv_mode = DC_PRED;
|
||||
@ -3850,7 +3850,7 @@ void vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi,
|
||||
continue;
|
||||
// Do not allow compound prediction if the segment level reference frame
|
||||
// feature is in use as in this case there can only be one reference.
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
continue;
|
||||
|
||||
if ((sf->mode_search_skip_flags & FLAG_SKIP_COMP_BESTINTRA) &&
|
||||
@ -3875,13 +3875,13 @@ void vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi,
|
||||
|
||||
// If the segment reference frame feature is enabled....
|
||||
// then do nothing if the current ref frame is not allowed..
|
||||
if (vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
if (segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME) &&
|
||||
vp9_get_segdata(seg, segment_id, SEG_LVL_REF_FRAME) != (int)ref_frame) {
|
||||
continue;
|
||||
// Disable this drop out case if the ref frame
|
||||
// segment level feature is enabled for this segment. This is to
|
||||
// prevent the possibility that we end up unable to pick any mode.
|
||||
} else if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
} else if (!segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME)) {
|
||||
// Only consider ZEROMV/ALTREF_FRAME for alt ref frame,
|
||||
// unless ARNR filtering is enabled in which case we want
|
||||
// an unfiltered alternative. We allow near/nearest as well
|
||||
|
@ -484,7 +484,7 @@ static INLINE void add_token_no_extra(TOKENEXTRA **t,
|
||||
static INLINE int get_tx_eob(const struct segmentation *seg, int segment_id,
|
||||
TX_SIZE tx_size) {
|
||||
const int eob_max = 16 << (tx_size << 1);
|
||||
return vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP) ? 0 : eob_max;
|
||||
return segfeature_active(seg, segment_id, SEG_LVL_SKIP) ? 0 : eob_max;
|
||||
}
|
||||
|
||||
static void tokenize_b(int plane, int block, BLOCK_SIZE plane_bsize,
|
||||
@ -615,8 +615,8 @@ void vp9_tokenize_sb(VP9_COMP *cpi, ThreadData *td, TOKENEXTRA **t,
|
||||
MACROBLOCKD *const xd = &x->e_mbd;
|
||||
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
|
||||
const int ctx = vp9_get_skip_context(xd);
|
||||
const int skip_inc = !vp9_segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_SKIP);
|
||||
const int skip_inc = !segfeature_active(&cm->seg, mbmi->segment_id,
|
||||
SEG_LVL_SKIP);
|
||||
struct tokenize_b_args arg = {cpi, td, t};
|
||||
if (mbmi->skip) {
|
||||
if (!dry_run)
|
||||
|
Loading…
Reference in New Issue
Block a user