Merge "Removing direct references to VP9_COMP."
This commit is contained in:
commit
65234504b9
@ -366,7 +366,7 @@ int vp9_get_tx_size_context(const MACROBLOCKD *xd) {
|
||||
return (above_ctx + left_ctx) > max_tx_size;
|
||||
}
|
||||
|
||||
int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids,
|
||||
int vp9_get_segment_id(const VP9_COMMON *cm, const uint8_t *segment_ids,
|
||||
BLOCK_SIZE bsize, int mi_row, int mi_col) {
|
||||
const int mi_offset = mi_row * cm->mi_cols + mi_col;
|
||||
const int bw = num_8x8_blocks_wide_lookup[bsize];
|
||||
|
@ -26,7 +26,7 @@ static INLINE const MODE_INFO *get_left_mi(const MACROBLOCKD *const xd) {
|
||||
return xd->left_available ? xd->mi[-1] : NULL;
|
||||
}
|
||||
|
||||
int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids,
|
||||
int vp9_get_segment_id(const VP9_COMMON *cm, const uint8_t *segment_ids,
|
||||
BLOCK_SIZE bsize, int mi_row, int mi_col);
|
||||
|
||||
static INLINE int vp9_get_pred_context_seg_id(const MACROBLOCKD *xd) {
|
||||
|
@ -78,13 +78,13 @@ static void prob_diff_update(const vp9_tree_index *tree,
|
||||
vp9_cond_prob_diff_update(w, &probs[i], branch_ct[i]);
|
||||
}
|
||||
|
||||
static void write_selected_tx_size(const VP9_COMP *cpi,
|
||||
static void write_selected_tx_size(const VP9_COMMON *cm,
|
||||
const MACROBLOCKD *xd,
|
||||
TX_SIZE tx_size, BLOCK_SIZE bsize,
|
||||
vp9_writer *w) {
|
||||
const TX_SIZE max_tx_size = max_txsize_lookup[bsize];
|
||||
const MACROBLOCKD *const xd = &cpi->mb.e_mbd;
|
||||
const vp9_prob *const tx_probs = get_tx_probs2(max_tx_size, xd,
|
||||
&cpi->common.fc.tx_probs);
|
||||
&cm->fc.tx_probs);
|
||||
vp9_write(w, tx_size != TX_4X4, tx_probs[0]);
|
||||
if (tx_size != TX_4X4 && max_tx_size >= TX_16X16) {
|
||||
vp9_write(w, tx_size != TX_8X8, tx_probs[1]);
|
||||
@ -93,14 +93,13 @@ static void write_selected_tx_size(const VP9_COMP *cpi,
|
||||
}
|
||||
}
|
||||
|
||||
static int write_skip(const VP9_COMP *cpi, int segment_id, const MODE_INFO *mi,
|
||||
vp9_writer *w) {
|
||||
const MACROBLOCKD *const xd = &cpi->mb.e_mbd;
|
||||
if (vp9_segfeature_active(&cpi->common.seg, segment_id, SEG_LVL_SKIP)) {
|
||||
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)) {
|
||||
return 1;
|
||||
} else {
|
||||
const int skip = mi->mbmi.skip;
|
||||
vp9_write(w, skip, vp9_get_skip_prob(&cpi->common, xd));
|
||||
vp9_write(w, skip, vp9_get_skip_prob(cm, xd));
|
||||
return skip;
|
||||
}
|
||||
}
|
||||
@ -188,9 +187,8 @@ static void write_segment_id(vp9_writer *w, const struct segmentation *seg,
|
||||
}
|
||||
|
||||
// This function encodes the reference frame
|
||||
static void write_ref_frames(const VP9_COMP *cpi, vp9_writer *w) {
|
||||
const VP9_COMMON *const cm = &cpi->common;
|
||||
const MACROBLOCKD *const xd = &cpi->mb.e_mbd;
|
||||
static void write_ref_frames(const VP9_COMMON *cm, const MACROBLOCKD *xd,
|
||||
vp9_writer *w) {
|
||||
const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
|
||||
const int is_compound = has_second_ref(mbmi);
|
||||
const int segment_id = mbmi->segment_id;
|
||||
@ -252,7 +250,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
}
|
||||
}
|
||||
|
||||
skip = write_skip(cpi, segment_id, mi, w);
|
||||
skip = write_skip(cm, xd, segment_id, mi, w);
|
||||
|
||||
if (!vp9_segfeature_active(seg, segment_id, SEG_LVL_REF_FRAME))
|
||||
vp9_write(w, is_inter, vp9_get_intra_inter_prob(cm, xd));
|
||||
@ -260,7 +258,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
if (bsize >= BLOCK_8X8 && cm->tx_mode == TX_MODE_SELECT &&
|
||||
!(is_inter &&
|
||||
(skip || vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP)))) {
|
||||
write_selected_tx_size(cpi, mbmi->tx_size, bsize, w);
|
||||
write_selected_tx_size(cm, xd, mbmi->tx_size, bsize, w);
|
||||
}
|
||||
|
||||
if (!is_inter) {
|
||||
@ -281,7 +279,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
} else {
|
||||
const int mode_ctx = mbmi->mode_context[mbmi->ref_frame[0]];
|
||||
const vp9_prob *const inter_probs = cm->fc.inter_mode_probs[mode_ctx];
|
||||
write_ref_frames(cpi, w);
|
||||
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)) {
|
||||
@ -329,10 +327,8 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
|
||||
}
|
||||
}
|
||||
|
||||
static void write_mb_modes_kf(const VP9_COMP *cpi, MODE_INFO **mi_8x8,
|
||||
vp9_writer *w) {
|
||||
const VP9_COMMON *const cm = &cpi->common;
|
||||
const MACROBLOCKD *const xd = &cpi->mb.e_mbd;
|
||||
static void write_mb_modes_kf(const VP9_COMMON *cm, const MACROBLOCKD *xd,
|
||||
MODE_INFO **mi_8x8, vp9_writer *w) {
|
||||
const struct segmentation *const seg = &cm->seg;
|
||||
const MODE_INFO *const mi = mi_8x8[0];
|
||||
const MODE_INFO *const above_mi = mi_8x8[-xd->mi_stride];
|
||||
@ -343,10 +339,10 @@ static void write_mb_modes_kf(const VP9_COMP *cpi, MODE_INFO **mi_8x8,
|
||||
if (seg->update_map)
|
||||
write_segment_id(w, seg, mbmi->segment_id);
|
||||
|
||||
write_skip(cpi, mbmi->segment_id, mi, w);
|
||||
write_skip(cm, xd, mbmi->segment_id, mi, w);
|
||||
|
||||
if (bsize >= BLOCK_8X8 && cm->tx_mode == TX_MODE_SELECT)
|
||||
write_selected_tx_size(cpi, mbmi->tx_size, bsize, w);
|
||||
write_selected_tx_size(cm, xd, mbmi->tx_size, bsize, w);
|
||||
|
||||
if (bsize >= BLOCK_8X8) {
|
||||
write_intra_mode(w, mbmi->mode, get_y_mode_probs(mi, above_mi, left_mi, 0));
|
||||
@ -383,7 +379,7 @@ static void write_modes_b(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
mi_col, num_8x8_blocks_wide_lookup[m->mbmi.sb_type],
|
||||
cm->mi_rows, cm->mi_cols);
|
||||
if (frame_is_intra_only(cm)) {
|
||||
write_mb_modes_kf(cpi, xd->mi, w);
|
||||
write_mb_modes_kf(cm, xd, xd->mi, w);
|
||||
} else {
|
||||
pack_inter_mode_mvs(cpi, m, w);
|
||||
}
|
||||
@ -741,11 +737,11 @@ static void encode_quantization(const VP9_COMMON *const cm,
|
||||
write_delta_q(wb, cm->uv_ac_delta_q);
|
||||
}
|
||||
|
||||
static void encode_segmentation(VP9_COMP *cpi,
|
||||
static void encode_segmentation(VP9_COMMON *cm, MACROBLOCKD *xd,
|
||||
struct vp9_write_bit_buffer *wb) {
|
||||
int i, j;
|
||||
|
||||
struct segmentation *seg = &cpi->common.seg;
|
||||
const struct segmentation *seg = &cm->seg;
|
||||
|
||||
vp9_wb_write_bit(wb, seg->enabled);
|
||||
if (!seg->enabled)
|
||||
@ -755,7 +751,7 @@ static void encode_segmentation(VP9_COMP *cpi,
|
||||
vp9_wb_write_bit(wb, seg->update_map);
|
||||
if (seg->update_map) {
|
||||
// Select the coding strategy (temporal or spatial)
|
||||
vp9_choose_segmap_coding_method(cpi);
|
||||
vp9_choose_segmap_coding_method(cm, xd);
|
||||
// Write out probabilities used to decode unpredicted macro-block segments
|
||||
for (i = 0; i < SEG_TREE_PROBS; i++) {
|
||||
const int prob = seg->tree_probs[i];
|
||||
@ -1128,7 +1124,7 @@ static void write_uncompressed_header(VP9_COMP *cpi,
|
||||
|
||||
encode_loopfilter(&cm->lf, wb);
|
||||
encode_quantization(cm, wb);
|
||||
encode_segmentation(cpi, wb);
|
||||
encode_segmentation(cm, &cpi->mb.e_mbd, wb);
|
||||
|
||||
write_tile_info(cm, wb);
|
||||
}
|
||||
|
@ -110,14 +110,12 @@ static int cost_segmap(int *segcounts, vp9_prob *probs) {
|
||||
return cost;
|
||||
}
|
||||
|
||||
static void count_segs(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
MODE_INFO **mi,
|
||||
static void count_segs(const VP9_COMMON *cm, MACROBLOCKD *xd,
|
||||
const TileInfo *tile, MODE_INFO **mi,
|
||||
int *no_pred_segcounts,
|
||||
int (*temporal_predictor_count)[2],
|
||||
int *t_unpred_seg_counts,
|
||||
int bw, int bh, int mi_row, int mi_col) {
|
||||
VP9_COMMON *const cm = &cpi->common;
|
||||
MACROBLOCKD *const xd = &cpi->mb.e_mbd;
|
||||
int segment_id;
|
||||
|
||||
if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols)
|
||||
@ -151,14 +149,13 @@ static void count_segs(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
}
|
||||
}
|
||||
|
||||
static void count_segs_sb(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
MODE_INFO **mi,
|
||||
static void count_segs_sb(const VP9_COMMON *cm, MACROBLOCKD *xd,
|
||||
const TileInfo *tile, MODE_INFO **mi,
|
||||
int *no_pred_segcounts,
|
||||
int (*temporal_predictor_count)[2],
|
||||
int *t_unpred_seg_counts,
|
||||
int mi_row, int mi_col,
|
||||
BLOCK_SIZE bsize) {
|
||||
const VP9_COMMON *const cm = &cpi->common;
|
||||
const int mis = cm->mi_stride;
|
||||
int bw, bh;
|
||||
const int bs = num_8x8_blocks_wide_lookup[bsize], hbs = bs / 2;
|
||||
@ -170,18 +167,18 @@ static void count_segs_sb(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
bh = num_8x8_blocks_high_lookup[mi[0]->mbmi.sb_type];
|
||||
|
||||
if (bw == bs && bh == bs) {
|
||||
count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
count_segs(cm, xd, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
t_unpred_seg_counts, bs, bs, mi_row, mi_col);
|
||||
} else if (bw == bs && bh < bs) {
|
||||
count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
count_segs(cm, xd, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
t_unpred_seg_counts, bs, hbs, mi_row, mi_col);
|
||||
count_segs(cpi, tile, mi + hbs * mis, no_pred_segcounts,
|
||||
count_segs(cm, xd, tile, mi + hbs * mis, no_pred_segcounts,
|
||||
temporal_predictor_count, t_unpred_seg_counts, bs, hbs,
|
||||
mi_row + hbs, mi_col);
|
||||
} else if (bw < bs && bh == bs) {
|
||||
count_segs(cpi, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
count_segs(cm, xd, tile, mi, no_pred_segcounts, temporal_predictor_count,
|
||||
t_unpred_seg_counts, hbs, bs, mi_row, mi_col);
|
||||
count_segs(cpi, tile, mi + hbs,
|
||||
count_segs(cm, xd, tile, mi + hbs,
|
||||
no_pred_segcounts, temporal_predictor_count, t_unpred_seg_counts,
|
||||
hbs, bs, mi_row, mi_col + hbs);
|
||||
} else {
|
||||
@ -194,7 +191,7 @@ static void count_segs_sb(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
const int mi_dc = hbs * (n & 1);
|
||||
const int mi_dr = hbs * (n >> 1);
|
||||
|
||||
count_segs_sb(cpi, tile, &mi[mi_dr * mis + mi_dc],
|
||||
count_segs_sb(cm, xd, tile, &mi[mi_dr * mis + mi_dc],
|
||||
no_pred_segcounts, temporal_predictor_count,
|
||||
t_unpred_seg_counts,
|
||||
mi_row + mi_dr, mi_col + mi_dc, subsize);
|
||||
@ -202,8 +199,7 @@ static void count_segs_sb(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
}
|
||||
}
|
||||
|
||||
void vp9_choose_segmap_coding_method(VP9_COMP *cpi) {
|
||||
VP9_COMMON *const cm = &cpi->common;
|
||||
void vp9_choose_segmap_coding_method(VP9_COMMON *cm, MACROBLOCKD *xd) {
|
||||
struct segmentation *seg = &cm->seg;
|
||||
|
||||
int no_pred_cost;
|
||||
@ -237,7 +233,7 @@ void vp9_choose_segmap_coding_method(VP9_COMP *cpi) {
|
||||
MODE_INFO **mi = mi_ptr;
|
||||
for (mi_col = tile.mi_col_start; mi_col < tile.mi_col_end;
|
||||
mi_col += 8, mi += 8)
|
||||
count_segs_sb(cpi, &tile, mi, no_pred_segcounts,
|
||||
count_segs_sb(cm, xd, &tile, mi, no_pred_segcounts,
|
||||
temporal_predictor_count, t_unpred_seg_counts,
|
||||
mi_row, mi_col, BLOCK_64X64);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ void vp9_clear_segdata(struct segmentation *seg,
|
||||
void vp9_set_segment_data(struct segmentation *seg, signed char *feature_data,
|
||||
unsigned char abs_delta);
|
||||
|
||||
void vp9_choose_segmap_coding_method(VP9_COMP *cpi);
|
||||
void vp9_choose_segmap_coding_method(VP9_COMMON *cm, MACROBLOCKD *xd);
|
||||
|
||||
void vp9_reset_segment_features(struct segmentation *seg);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user