Use mi_row and mi_col stored in xd when possible
Change-Id: Idbe6cce5d198ef9ed3a9957b47f96bc086683c96
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index cd8f07c..49eec05 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -439,18 +439,17 @@
}
}
-static AOM_INLINE void write_segment_id(AV1_COMP *cpi,
- const MB_MODE_INFO *const mbmi,
- aom_writer *w,
- const struct segmentation *seg,
- struct segmentation_probs *segp,
- int mi_row, int mi_col, int skip) {
+static AOM_INLINE void write_segment_id(
+ AV1_COMP *cpi, const MB_MODE_INFO *const mbmi, aom_writer *w,
+ const struct segmentation *seg, struct segmentation_probs *segp, int skip) {
if (!seg->enabled || !seg->update_map) return;
AV1_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
int cdf_num;
- const int pred = av1_get_spatial_seg_pred(cm, xd, mi_row, mi_col, &cdf_num);
+ const int pred = av1_get_spatial_seg_pred(cm, xd, &cdf_num);
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
if (skip) {
// Still need to transmit tx size for intra blocks even if skip is
@@ -753,7 +752,6 @@
static AOM_INLINE void write_palette_mode_info(const AV1_COMMON *cm,
const MACROBLOCKD *xd,
const MB_MODE_INFO *const mbmi,
- int mi_row, int mi_col,
aom_writer *w) {
const int num_planes = av1_num_planes(cm);
const BLOCK_SIZE bsize = mbmi->sb_type;
@@ -775,10 +773,10 @@
}
}
- const int uv_dc_pred =
- num_planes > 1 && mbmi->uv_mode == UV_DC_PRED &&
- is_chroma_reference(mi_row, mi_col, bsize, xd->plane[1].subsampling_x,
- xd->plane[1].subsampling_y);
+ const int uv_dc_pred = num_planes > 1 && mbmi->uv_mode == UV_DC_PRED &&
+ is_chroma_reference(xd->mi_row, xd->mi_col, bsize,
+ xd->plane[1].subsampling_x,
+ xd->plane[1].subsampling_y);
if (uv_dc_pred) {
const int n = pmi->palette_size[1];
const int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
@@ -863,11 +861,12 @@
}
static AOM_INLINE void write_cdef(AV1_COMMON *cm, MACROBLOCKD *const xd,
- aom_writer *w, int skip, int mi_col,
- int mi_row) {
+ aom_writer *w, int skip) {
if (cm->coded_lossless || cm->allow_intrabc) return;
const int m = ~((1 << (6 - MI_SIZE_LOG2)) - 1);
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
const MB_MODE_INFO *mbmi =
cm->mi_grid_base[(mi_row & m) * cm->mi_stride + (mi_col & m)];
// Initialise when at top left part of the superblock
@@ -890,11 +889,12 @@
static AOM_INLINE void write_inter_segment_id(
AV1_COMP *cpi, aom_writer *w, const struct segmentation *const seg,
- struct segmentation_probs *const segp, int mi_row, int mi_col, int skip,
- int preskip) {
+ struct segmentation_probs *const segp, int skip, int preskip) {
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
AV1_COMMON *const cm = &cpi->common;
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
if (seg->update_map) {
if (preskip) {
@@ -902,7 +902,7 @@
} else {
if (seg->segid_preskip) return;
if (skip) {
- write_segment_id(cpi, mbmi, w, seg, segp, mi_row, mi_col, 1);
+ write_segment_id(cpi, mbmi, w, seg, segp, 1);
if (seg->temporal_update) mbmi->seg_id_predicted = 0;
return;
}
@@ -912,22 +912,21 @@
aom_cdf_prob *pred_cdf = av1_get_pred_cdf_seg_id(segp, xd);
aom_write_symbol(w, pred_flag, pred_cdf, 2);
if (!pred_flag) {
- write_segment_id(cpi, mbmi, w, seg, segp, mi_row, mi_col, 0);
+ write_segment_id(cpi, mbmi, w, seg, segp, 0);
}
if (pred_flag) {
set_spatial_segment_id(cm, cm->cur_frame->seg_map, mbmi->sb_type,
mi_row, mi_col, mbmi->segment_id);
}
} else {
- write_segment_id(cpi, mbmi, w, seg, segp, mi_row, mi_col, 0);
+ write_segment_id(cpi, mbmi, w, seg, segp, 0);
}
}
}
// If delta q is present, writes delta_q index.
// Also writes delta_q loop filter levels, if present.
-static AOM_INLINE void write_delta_q_params(AV1_COMP *cpi, const int mi_row,
- const int mi_col, int skip,
+static AOM_INLINE void write_delta_q_params(AV1_COMP *cpi, int skip,
aom_writer *w) {
AV1_COMMON *const cm = &cpi->common;
const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
@@ -938,8 +937,8 @@
const MB_MODE_INFO *const mbmi = xd->mi[0];
const BLOCK_SIZE bsize = mbmi->sb_type;
const int super_block_upper_left =
- ((mi_row & (cm->seq_params.mib_size - 1)) == 0) &&
- ((mi_col & (cm->seq_params.mib_size - 1)) == 0);
+ ((xd->mi_row & (cm->seq_params.mib_size - 1)) == 0) &&
+ ((xd->mi_col & (cm->seq_params.mib_size - 1)) == 0);
if ((bsize != cm->seq_params.sb_size || skip == 0) &&
super_block_upper_left) {
@@ -973,8 +972,6 @@
}
static AOM_INLINE void write_intra_prediction_modes(AV1_COMP *cpi,
- const int mi_row,
- const int mi_col,
int is_keyframe,
aom_writer *w) {
const AV1_COMMON *const cm = &cpi->common;
@@ -1003,7 +1000,8 @@
// UV mode and UV angle delta.
if (!cm->seq_params.monochrome &&
- is_chroma_reference(mi_row, mi_col, bsize, xd->plane[1].subsampling_x,
+ is_chroma_reference(xd->mi_row, xd->mi_col, bsize,
+ xd->plane[1].subsampling_x,
xd->plane[1].subsampling_y)) {
const UV_PREDICTION_MODE uv_mode = mbmi->uv_mode;
write_intra_uv_mode(ec_ctx, uv_mode, mode, is_cfl_allowed(xd), w);
@@ -1017,7 +1015,7 @@
// Palette.
if (av1_allow_palette(cm->allow_screen_content_tools, bsize)) {
- write_palette_mode_info(cm, xd, mbmi, mi_row, mi_col, w);
+ write_palette_mode_info(cm, xd, mbmi, w);
}
// Filter intra.
@@ -1066,8 +1064,7 @@
x->mbmi_ext_frame);
}
-static AOM_INLINE void pack_inter_mode_mvs(AV1_COMP *cpi, const int mi_row,
- const int mi_col, aom_writer *w) {
+static AOM_INLINE void pack_inter_mode_mvs(AV1_COMP *cpi, aom_writer *w) {
AV1_COMMON *const cm = &cpi->common;
MACROBLOCK *const x = &cpi->td.mb;
MACROBLOCKD *const xd = &x->e_mbd;
@@ -1084,7 +1081,7 @@
const int is_compound = has_second_ref(mbmi);
int ref;
- write_inter_segment_id(cpi, w, seg, segp, mi_row, mi_col, 0, 1);
+ write_inter_segment_id(cpi, w, seg, segp, 0, 1);
write_skip_mode(cm, xd, segment_id, mbmi, w);
@@ -1092,18 +1089,18 @@
const int skip =
mbmi->skip_mode ? 1 : write_skip(cm, xd, segment_id, mbmi, w);
- write_inter_segment_id(cpi, w, seg, segp, mi_row, mi_col, skip, 0);
+ write_inter_segment_id(cpi, w, seg, segp, skip, 0);
- write_cdef(cm, xd, w, skip, mi_col, mi_row);
+ write_cdef(cm, xd, w, skip);
- write_delta_q_params(cpi, mi_row, mi_col, skip, w);
+ write_delta_q_params(cpi, skip, w);
if (!mbmi->skip_mode) write_is_inter(cm, xd, mbmi->segment_id, w, is_inter);
if (mbmi->skip_mode) return;
if (!is_inter) {
- write_intra_prediction_modes(cpi, mi_row, mi_col, 0, w);
+ write_intra_prediction_modes(cpi, 0, w);
} else {
int16_t mode_ctx;
@@ -1241,8 +1238,7 @@
static AOM_INLINE void write_mb_modes_kf(
AV1_COMP *cpi, MACROBLOCKD *xd,
- const MB_MODE_INFO_EXT_FRAME *mbmi_ext_frame, const int mi_row,
- const int mi_col, aom_writer *w) {
+ const MB_MODE_INFO_EXT_FRAME *mbmi_ext_frame, aom_writer *w) {
AV1_COMMON *const cm = &cpi->common;
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
const struct segmentation *const seg = &cm->seg;
@@ -1250,23 +1246,23 @@
const MB_MODE_INFO *const mbmi = xd->mi[0];
if (seg->segid_preskip && seg->update_map)
- write_segment_id(cpi, mbmi, w, seg, segp, mi_row, mi_col, 0);
+ write_segment_id(cpi, mbmi, w, seg, segp, 0);
const int skip = write_skip(cm, xd, mbmi->segment_id, mbmi, w);
if (!seg->segid_preskip && seg->update_map)
- write_segment_id(cpi, mbmi, w, seg, segp, mi_row, mi_col, skip);
+ write_segment_id(cpi, mbmi, w, seg, segp, skip);
- write_cdef(cm, xd, w, skip, mi_col, mi_row);
+ write_cdef(cm, xd, w, skip);
- write_delta_q_params(cpi, mi_row, mi_col, skip, w);
+ write_delta_q_params(cpi, skip, w);
if (av1_allow_intrabc(cm)) {
write_intrabc_info(xd, mbmi_ext_frame, w);
if (is_intrabc_block(mbmi)) return;
}
- write_intra_prediction_modes(cpi, mi_row, mi_col, 1, w);
+ write_intra_prediction_modes(cpi, 1, w);
}
#if CONFIG_RD_DEBUG
@@ -1359,14 +1355,13 @@
}
#endif // ENC_MISMATCH_DEBUG
-static AOM_INLINE void write_mbmi_b(AV1_COMP *cpi, aom_writer *w, int mi_row,
- int mi_col) {
+static AOM_INLINE void write_mbmi_b(AV1_COMP *cpi, aom_writer *w) {
AV1_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
MB_MODE_INFO *m = xd->mi[0];
if (frame_is_intra_only(cm)) {
- write_mb_modes_kf(cpi, xd, cpi->td.mb.mbmi_ext_frame, mi_row, mi_col, w);
+ write_mb_modes_kf(cpi, xd, cpi->td.mb.mbmi_ext_frame, w);
} else {
// has_subpel_mv_component needs the ref frame buffers set up to look
// up if they are scaled. has_subpel_mv_component is in turn needed by
@@ -1374,10 +1369,10 @@
set_ref_ptrs(cm, xd, m->ref_frame[0], m->ref_frame[1]);
#if ENC_MISMATCH_DEBUG
- enc_dump_logs(cpi, mi_row, mi_col);
+ enc_dump_logs(cpi, xd->mi_row, xd->mi_col);
#endif // ENC_MISMATCH_DEBUG
- pack_inter_mode_mvs(cpi, mi_row, mi_col, w);
+ pack_inter_mode_mvs(cpi, w);
}
}
@@ -1419,8 +1414,7 @@
static AOM_INLINE void write_tokens_b(AV1_COMP *cpi, aom_writer *w,
const TOKENEXTRA **tok,
- const TOKENEXTRA *const tok_end,
- int mi_row, int mi_col) {
+ const TOKENEXTRA *const tok_end) {
AV1_COMMON *const cm = &cpi->common;
MACROBLOCK *const x = &cpi->td.mb;
MACROBLOCKD *const xd = &x->e_mbd;
@@ -1431,7 +1425,7 @@
const int is_inter = is_inter_block(mbmi);
if (!is_inter) {
- av1_write_coeffs_mb(cm, x, mi_row, mi_col, w, bsize);
+ av1_write_coeffs_mb(cm, x, w, bsize);
} else {
int block[MAX_MB_PLANE] = { 0 };
assert(bsize == get_plane_block_size(bsize, xd->plane[0].subsampling_x,
@@ -1455,8 +1449,8 @@
for (int col = 0; col < num_4x4_w; col += mu_blocks_wide) {
for (int plane = 0; plane < num_planes; ++plane) {
const struct macroblockd_plane *const pd = &xd->plane[plane];
- if (!is_chroma_reference(mi_row, mi_col, bsize, pd->subsampling_x,
- pd->subsampling_y)) {
+ if (!is_chroma_reference(xd->mi_row, xd->mi_col, bsize,
+ pd->subsampling_x, pd->subsampling_y)) {
continue;
}
write_inter_txb_coeff(cm, x, mbmi, w, tok, tok_end, &token_stats, row,
@@ -1502,7 +1496,7 @@
xd->left_txfm_context =
xd->left_txfm_context_buffer + (mi_row & MAX_MIB_MASK);
- write_mbmi_b(cpi, w, mi_row, mi_col);
+ write_mbmi_b(cpi, w);
for (int plane = 0; plane < AOMMIN(2, av1_num_planes(cm)); ++plane) {
const uint8_t palette_size_plane =
@@ -1544,7 +1538,7 @@
}
if (!mbmi->skip) {
- write_tokens_b(cpi, w, tok, tok_end, mi_row, mi_col);
+ write_tokens_b(cpi, w, tok, tok_end);
}
}
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index b05f51b..e0bcf04 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -646,8 +646,8 @@
aom_writer *w;
} ENCODE_TXB_ARGS;
-void av1_write_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x, int mi_row,
- int mi_col, aom_writer *w, BLOCK_SIZE bsize) {
+void av1_write_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x,
+ aom_writer *w, BLOCK_SIZE bsize) {
MACROBLOCKD *xd = &x->e_mbd;
const int num_planes = av1_num_planes(cm);
int block[MAX_MB_PLANE] = { 0 };
@@ -666,8 +666,8 @@
for (col = 0; col < max_blocks_wide; col += mu_blocks_wide) {
for (int plane = 0; plane < num_planes; ++plane) {
const struct macroblockd_plane *const pd = &xd->plane[plane];
- if (!is_chroma_reference(mi_row, mi_col, bsize, pd->subsampling_x,
- pd->subsampling_y))
+ if (!is_chroma_reference(xd->mi_row, xd->mi_col, bsize,
+ pd->subsampling_x, pd->subsampling_y))
continue;
const TX_SIZE tx_size = av1_get_tx_size(plane, xd);
const int stepr = tx_size_high_unit[tx_size];
diff --git a/av1/encoder/encodetxb.h b/av1/encoder/encodetxb.h
index 5be172e..e8a932d 100644
--- a/av1/encoder/encodetxb.h
+++ b/av1/encoder/encodetxb.h
@@ -67,8 +67,8 @@
void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCK *const x,
aom_writer *w, int blk_row, int blk_col, int plane,
int block, TX_SIZE tx_size);
-void av1_write_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x, int mi_row,
- int mi_col, aom_writer *w, BLOCK_SIZE bsize);
+void av1_write_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x,
+ aom_writer *w, BLOCK_SIZE bsize);
int av1_get_txb_entropy_context(const tran_low_t *qcoeff,
const SCAN_ORDER *scan_order, int eob);
void av1_update_txb_context(const AV1_COMP *cpi, ThreadData *td,