Use mi_row and mi_col stored in xd when possible
Change-Id: Idbe6cce5d198ef9ed3a9957b47f96bc086683c96
diff --git a/av1/common/pred_common.h b/av1/common/pred_common.h
index 826c631..598326a 100644
--- a/av1/common/pred_common.h
+++ b/av1/common/pred_common.h
@@ -42,11 +42,12 @@
static INLINE int av1_get_spatial_seg_pred(const AV1_COMMON *const cm,
const MACROBLOCKD *const xd,
- int mi_row, int mi_col,
int *cdf_index) {
int prev_ul = -1; // top left segment_id
int prev_l = -1; // left segment_id
int prev_u = -1; // top segment_id
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
if ((xd->up_available) && (xd->left_available)) {
prev_ul = get_segment_id(cm, cm->cur_frame->seg_map, BLOCK_4X4, mi_row - 1,
mi_col - 1);
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 6bb5775..e345aba 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -382,7 +382,7 @@
#endif
set_offsets(cm, xd, bsize, mi_row, mi_col, bw, bh, x_mis, y_mis);
xd->mi[0]->partition = partition;
- av1_read_mode_info(pbi, xd, mi_row, mi_col, r, x_mis, y_mis);
+ av1_read_mode_info(pbi, xd, r, x_mis, y_mis);
if (bsize >= BLOCK_8X8 &&
(seq_params->subsampling_x || seq_params->subsampling_y)) {
const BLOCK_SIZE uv_subsize =
@@ -1148,15 +1148,15 @@
static AOM_INLINE void decode_token_recon_block(AV1Decoder *const pbi,
ThreadData *const td,
- int mi_row, int mi_col,
aom_reader *r,
BLOCK_SIZE bsize) {
AV1_COMMON *const cm = &pbi->common;
MACROBLOCKD *const xd = &td->xd;
const int num_planes = av1_num_planes(cm);
-
MB_MODE_INFO *mbmi = xd->mi[0];
CFL_CTX *const cfl = &xd->cfl;
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
cfl->is_chroma_reference = is_chroma_reference(
mi_row, mi_col, bsize, cfl->subsampling_x, cfl->subsampling_y);
@@ -1490,7 +1490,7 @@
}
if (mbmi->skip) av1_reset_skip_context(xd, bsize, num_planes);
- decode_token_recon_block(pbi, td, mi_row, mi_col, r, bsize);
+ decode_token_recon_block(pbi, td, r, bsize);
}
static AOM_INLINE void set_offsets_for_pred_and_recon(AV1Decoder *const pbi,
@@ -1526,7 +1526,7 @@
BLOCK_SIZE bsize) {
(void)partition;
set_offsets_for_pred_and_recon(pbi, td, mi_row, mi_col, bsize);
- decode_token_recon_block(pbi, td, mi_row, mi_col, r, bsize);
+ decode_token_recon_block(pbi, td, r, bsize);
}
static PARTITION_TYPE read_partition(MACROBLOCKD *xd, int mi_row, int mi_col,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 36f8ddb..4ab7963 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -36,8 +36,7 @@
return (PREDICTION_MODE)aom_read_symbol(r, cdf, INTRA_MODES, ACCT_STR);
}
-static void read_cdef(AV1_COMMON *cm, aom_reader *r, MACROBLOCKD *const xd,
- int mi_col, int mi_row) {
+static void read_cdef(AV1_COMMON *cm, aom_reader *r, MACROBLOCKD *const xd) {
MB_MODE_INFO *const mbmi = xd->mi[0];
if (cm->coded_lossless) return;
if (cm->allow_intrabc) {
@@ -45,6 +44,8 @@
return;
}
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
if (!(mi_col & (cm->seq_params.mib_size - 1)) &&
!(mi_row & (cm->seq_params.mib_size - 1))) { // Top left?
xd->cdef_preset[0] = xd->cdef_preset[1] = xd->cdef_preset[2] =
@@ -64,12 +65,11 @@
}
static int read_delta_qindex(AV1_COMMON *cm, const MACROBLOCKD *xd,
- aom_reader *r, MB_MODE_INFO *const mbmi,
- int mi_col, int mi_row) {
+ aom_reader *r, MB_MODE_INFO *const mbmi) {
int sign, abs, reduced_delta_qindex = 0;
BLOCK_SIZE bsize = mbmi->sb_type;
- const int b_col = mi_col & (cm->seq_params.mib_size - 1);
- const int b_row = mi_row & (cm->seq_params.mib_size - 1);
+ const int b_col = xd->mi_col & (cm->seq_params.mib_size - 1);
+ const int b_row = xd->mi_row & (cm->seq_params.mib_size - 1);
const int read_delta_q_flag = (b_col == 0 && b_row == 0);
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
@@ -260,9 +260,9 @@
}
static int read_segment_id(AV1_COMMON *const cm, const MACROBLOCKD *const xd,
- int mi_row, int mi_col, aom_reader *r, int skip) {
+ aom_reader *r, int skip) {
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);
if (skip) return pred;
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
@@ -303,20 +303,21 @@
}
static int read_intra_segment_id(AV1_COMMON *const cm,
- const MACROBLOCKD *const xd, int mi_row,
- int mi_col, int bsize, aom_reader *r,
- int skip) {
+ const MACROBLOCKD *const xd, int bsize,
+ aom_reader *r, int skip) {
struct segmentation *const seg = &cm->seg;
if (!seg->enabled) return 0; // Default for disabled segmentation
assert(seg->update_map && !seg->temporal_update);
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
const int mi_offset = mi_row * cm->mi_cols + mi_col;
const int bw = mi_size_wide[bsize];
const int bh = mi_size_high[bsize];
const int x_mis = AOMMIN(cm->mi_cols - mi_col, bw);
const int y_mis = AOMMIN(cm->mi_rows - mi_row, bh);
- const int segment_id = read_segment_id(cm, xd, mi_row, mi_col, r, skip);
+ const int segment_id = read_segment_id(cm, xd, r, skip);
set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id);
return segment_id;
}
@@ -340,10 +341,11 @@
}
static int read_inter_segment_id(AV1_COMMON *const cm, MACROBLOCKD *const xd,
- int mi_row, int mi_col, int preskip,
- aom_reader *r) {
+ int preskip, aom_reader *r) {
struct segmentation *const seg = &cm->seg;
MB_MODE_INFO *const mbmi = xd->mi[0];
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
const int mi_offset = mi_row * cm->mi_cols + mi_col;
const int bw = mi_size_wide[mbmi->sb_type];
const int bh = mi_size_high[mbmi->sb_type];
@@ -368,7 +370,7 @@
if (seg->temporal_update) {
mbmi->seg_id_predicted = 0;
}
- segment_id = read_segment_id(cm, xd, mi_row, mi_col, r, 1);
+ segment_id = read_segment_id(cm, xd, r, 1);
set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id);
return segment_id;
}
@@ -383,10 +385,10 @@
if (mbmi->seg_id_predicted) {
segment_id = get_predicted_segment_id(cm, mi_offset, x_mis, y_mis);
} else {
- segment_id = read_segment_id(cm, xd, mi_row, mi_col, r, 0);
+ segment_id = read_segment_id(cm, xd, r, 0);
}
} else {
- segment_id = read_segment_id(cm, xd, mi_row, mi_col, r, 0);
+ segment_id = read_segment_id(cm, xd, r, 0);
}
set_segment_id(cm, mi_offset, x_mis, y_mis, segment_id);
return segment_id;
@@ -538,7 +540,7 @@
}
static void read_palette_mode_info(AV1_COMMON *const cm, MACROBLOCKD *const xd,
- int mi_row, int mi_col, aom_reader *r) {
+ aom_reader *r) {
const int num_planes = av1_num_planes(cm);
MB_MODE_INFO *const mbmi = xd->mi[0];
const BLOCK_SIZE bsize = mbmi->sb_type;
@@ -560,7 +562,8 @@
}
}
if (num_planes > 1 && mbmi->uv_mode == UV_DC_PRED &&
- 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 int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
const int modev = aom_read_symbol(
@@ -664,7 +667,7 @@
}
static void read_intrabc_info(AV1_COMMON *const cm, MACROBLOCKD *const xd,
- int mi_row, int mi_col, aom_reader *r) {
+ aom_reader *r) {
MB_MODE_INFO *const mbmi = xd->mi[0];
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
mbmi->use_intrabc = aom_read_symbol(r, ec_ctx->intrabc_cdf, 2, ACCT_STR);
@@ -687,13 +690,13 @@
av1_find_best_ref_mvs(0, ref_mvs[INTRA_FRAME], &nearestmv, &nearmv, 0);
int_mv dv_ref = nearestmv.as_int == 0 ? nearmv : nearestmv;
if (dv_ref.as_int == 0)
- av1_find_ref_dv(&dv_ref, &xd->tile, cm->seq_params.mib_size, mi_row);
+ av1_find_ref_dv(&dv_ref, &xd->tile, cm->seq_params.mib_size, xd->mi_row);
// Ref DV should not have sub-pel.
int valid_dv = (dv_ref.as_mv.col & 7) == 0 && (dv_ref.as_mv.row & 7) == 0;
dv_ref.as_mv.col = (dv_ref.as_mv.col >> 3) * 8;
dv_ref.as_mv.row = (dv_ref.as_mv.row >> 3) * 8;
- valid_dv = valid_dv && assign_dv(cm, xd, &mbmi->mv[0], &dv_ref, mi_row,
- mi_col, bsize, r);
+ valid_dv = valid_dv && assign_dv(cm, xd, &mbmi->mv[0], &dv_ref, xd->mi_row,
+ xd->mi_col, bsize, r);
if (!valid_dv) {
// Intra bc motion vectors are not valid - signal corrupt frame
aom_internal_error(xd->error_info, AOM_CODEC_CORRUPT_FRAME,
@@ -705,18 +708,19 @@
// If delta q is present, reads delta_q index.
// Also reads delta_q loop filter levels, if present.
static void read_delta_q_params(AV1_COMMON *const cm, MACROBLOCKD *const xd,
- const int mi_row, const int mi_col,
aom_reader *r) {
DeltaQInfo *const delta_q_info = &cm->delta_q_info;
if (delta_q_info->delta_q_present_flag) {
MB_MODE_INFO *const mbmi = xd->mi[0];
- xd->current_qindex += read_delta_qindex(cm, xd, r, mbmi, mi_col, mi_row) *
- delta_q_info->delta_q_res;
+ xd->current_qindex +=
+ read_delta_qindex(cm, xd, r, mbmi) * delta_q_info->delta_q_res;
/* Normative: Clamp to [1,MAXQ] to not interfere with lossless mode */
xd->current_qindex = clamp(xd->current_qindex, 1, MAXQ);
FRAME_CONTEXT *const ec_ctx = xd->tile_ctx;
if (delta_q_info->delta_lf_present_flag) {
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
if (delta_q_info->delta_lf_multi) {
const int frame_lf_count =
av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
@@ -742,8 +746,7 @@
}
static void read_intra_frame_mode_info(AV1_COMMON *const cm,
- MACROBLOCKD *const xd, int mi_row,
- int mi_col, aom_reader *r) {
+ MACROBLOCKD *const xd, aom_reader *r) {
MB_MODE_INFO *const mbmi = xd->mi[0];
const MB_MODE_INFO *above_mi = xd->above_mbmi;
const MB_MODE_INFO *left_mi = xd->left_mbmi;
@@ -753,18 +756,16 @@
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
if (seg->segid_preskip)
- mbmi->segment_id =
- read_intra_segment_id(cm, xd, mi_row, mi_col, bsize, r, 0);
+ mbmi->segment_id = read_intra_segment_id(cm, xd, bsize, r, 0);
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
if (!seg->segid_preskip)
- mbmi->segment_id =
- read_intra_segment_id(cm, xd, mi_row, mi_col, bsize, r, mbmi->skip);
+ mbmi->segment_id = read_intra_segment_id(cm, xd, bsize, r, mbmi->skip);
- read_cdef(cm, r, xd, mi_col, mi_row);
+ read_cdef(cm, r, xd);
- read_delta_q_params(cm, xd, mi_row, mi_col, r);
+ read_delta_q_params(cm, xd, r);
mbmi->current_qindex = xd->current_qindex;
@@ -774,12 +775,14 @@
mbmi->palette_mode_info.palette_size[1] = 0;
mbmi->filter_intra_mode_info.use_filter_intra = 0;
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
xd->above_txfm_context = cm->above_txfm_context[xd->tile.tile_row] + mi_col;
xd->left_txfm_context =
xd->left_txfm_context_buffer + (mi_row & MAX_MIB_MASK);
if (av1_allow_intrabc(cm)) {
- read_intrabc_info(cm, xd, mi_row, mi_col, r);
+ read_intrabc_info(cm, xd, r);
if (is_intrabc_block(mbmi)) return;
}
@@ -813,7 +816,7 @@
xd->cfl.store_y = store_cfl_required(cm, xd);
if (av1_allow_palette(cm->allow_screen_content_tools, bsize))
- read_palette_mode_info(cm, xd, mi_row, mi_col, r);
+ read_palette_mode_info(cm, xd, r);
read_filter_intra_mode_info(cm, xd, r);
}
@@ -1036,8 +1039,8 @@
}
}
-static void read_intra_block_mode_info(AV1_COMMON *const cm, const int mi_row,
- const int mi_col, MACROBLOCKD *const xd,
+static void read_intra_block_mode_info(AV1_COMMON *const cm,
+ MACROBLOCKD *const xd,
MB_MODE_INFO *const mbmi,
aom_reader *r) {
const BLOCK_SIZE bsize = mbmi->sb_type;
@@ -1054,9 +1057,9 @@
use_angle_delta && av1_is_directional_mode(mbmi->mode)
? read_angle_delta(r, ec_ctx->angle_delta_cdf[mbmi->mode - V_PRED])
: 0;
- const int has_chroma =
- is_chroma_reference(mi_row, mi_col, bsize, xd->plane[1].subsampling_x,
- xd->plane[1].subsampling_y);
+ const int has_chroma = is_chroma_reference(xd->mi_row, xd->mi_col, bsize,
+ xd->plane[1].subsampling_x,
+ xd->plane[1].subsampling_y);
xd->cfl.is_chroma_reference = has_chroma;
if (!cm->seq_params.monochrome && has_chroma) {
mbmi->uv_mode =
@@ -1079,7 +1082,7 @@
mbmi->palette_mode_info.palette_size[0] = 0;
mbmi->palette_mode_info.palette_size[1] = 0;
if (av1_allow_palette(cm->allow_screen_content_tools, bsize))
- read_palette_mode_info(cm, xd, mi_row, mi_col, r);
+ read_palette_mode_info(cm, xd, r);
read_filter_intra_mode_info(cm, xd, r);
}
@@ -1093,8 +1096,8 @@
PREDICTION_MODE mode,
MV_REFERENCE_FRAME ref_frame[2], int_mv mv[2],
int_mv ref_mv[2], int_mv nearest_mv[2],
- int_mv near_mv[2], int mi_row, int mi_col,
- int is_compound, int allow_hp, aom_reader *r) {
+ int_mv near_mv[2], int is_compound, int allow_hp,
+ aom_reader *r) {
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
MB_MODE_INFO *mbmi = xd->mi[0];
BLOCK_SIZE bsize = mbmi->sb_type;
@@ -1118,8 +1121,8 @@
case GLOBALMV: {
mv[0].as_int =
gm_get_motion_vector(&cm->global_motion[ref_frame[0]],
- cm->allow_high_precision_mv, bsize, mi_col,
- mi_row, cm->cur_frame_force_integer_mv)
+ cm->allow_high_precision_mv, bsize, xd->mi_col,
+ xd->mi_row, cm->cur_frame_force_integer_mv)
.as_int;
break;
}
@@ -1175,13 +1178,13 @@
assert(is_compound);
mv[0].as_int =
gm_get_motion_vector(&cm->global_motion[ref_frame[0]],
- cm->allow_high_precision_mv, bsize, mi_col,
- mi_row, cm->cur_frame_force_integer_mv)
+ cm->allow_high_precision_mv, bsize, xd->mi_col,
+ xd->mi_row, cm->cur_frame_force_integer_mv)
.as_int;
mv[1].as_int =
gm_get_motion_vector(&cm->global_motion[ref_frame[1]],
- cm->allow_high_precision_mv, bsize, mi_col,
- mi_row, cm->cur_frame_force_integer_mv)
+ cm->allow_high_precision_mv, bsize, xd->mi_col,
+ xd->mi_row, cm->cur_frame_force_integer_mv)
.as_int;
break;
}
@@ -1247,8 +1250,8 @@
static void read_inter_block_mode_info(AV1Decoder *const pbi,
MACROBLOCKD *const xd,
- MB_MODE_INFO *const mbmi, int mi_row,
- int mi_col, aom_reader *r) {
+ MB_MODE_INFO *const mbmi,
+ aom_reader *r) {
AV1_COMMON *const cm = &pbi->common;
const BLOCK_SIZE bsize = mbmi->sb_type;
const int allow_hp = cm->allow_high_precision_mv;
@@ -1348,9 +1351,9 @@
if (mbmi->skip_mode) assert(mbmi->mode == NEAREST_NEARESTMV);
- int mv_corrupted_flag =
+ const int mv_corrupted_flag =
!assign_mv(cm, xd, mbmi->mode, mbmi->ref_frame, mbmi->mv, ref_mv,
- nearestmv, nearmv, mi_row, mi_col, is_compound, allow_hp, r);
+ nearestmv, nearmv, is_compound, allow_hp, r);
aom_merge_corrupted_flag(&xd->corrupted, mv_corrupted_flag);
mbmi->use_wedge_interintra = 0;
@@ -1453,6 +1456,9 @@
read_mb_interp_filter(cm, xd, mbmi, r);
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
+
if (mbmi->motion_mode == WARPED_CAUSAL) {
mbmi->wm_params.wmtype = DEFAULT_WMTYPE;
mbmi->wm_params.invalid = 0;
@@ -1483,15 +1489,14 @@
}
static void read_inter_frame_mode_info(AV1Decoder *const pbi,
- MACROBLOCKD *const xd, int mi_row,
- int mi_col, aom_reader *r) {
+ MACROBLOCKD *const xd, aom_reader *r) {
AV1_COMMON *const cm = &pbi->common;
MB_MODE_INFO *const mbmi = xd->mi[0];
int inter_block = 1;
mbmi->mv[0].as_int = 0;
mbmi->mv[1].as_int = 0;
- mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, 1, r);
+ mbmi->segment_id = read_inter_segment_id(cm, xd, 1, r);
mbmi->skip_mode = read_skip_mode(cm, xd, mbmi->segment_id, r);
@@ -1501,25 +1506,26 @@
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
if (!cm->seg.segid_preskip)
- mbmi->segment_id = read_inter_segment_id(cm, xd, mi_row, mi_col, 0, r);
+ mbmi->segment_id = read_inter_segment_id(cm, xd, 0, r);
- read_cdef(cm, r, xd, mi_col, mi_row);
+ read_cdef(cm, r, xd);
- read_delta_q_params(cm, xd, mi_row, mi_col, r);
+ read_delta_q_params(cm, xd, r);
if (!mbmi->skip_mode)
inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r);
mbmi->current_qindex = xd->current_qindex;
- xd->above_txfm_context = cm->above_txfm_context[xd->tile.tile_row] + mi_col;
+ xd->above_txfm_context =
+ cm->above_txfm_context[xd->tile.tile_row] + xd->mi_col;
xd->left_txfm_context =
- xd->left_txfm_context_buffer + (mi_row & MAX_MIB_MASK);
+ xd->left_txfm_context_buffer + (xd->mi_row & MAX_MIB_MASK);
if (inter_block)
- read_inter_block_mode_info(pbi, xd, mbmi, mi_row, mi_col, r);
+ read_inter_block_mode_info(pbi, xd, mbmi, r);
else
- read_intra_block_mode_info(cm, mi_row, mi_col, xd, mbmi, r);
+ read_intra_block_mode_info(cm, xd, mbmi, r);
}
static void intra_copy_frame_mvs(AV1_COMMON *const cm, int mi_row, int mi_col,
@@ -1540,19 +1546,19 @@
}
}
-void av1_read_mode_info(AV1Decoder *const pbi, MACROBLOCKD *xd, int mi_row,
- int mi_col, aom_reader *r, int x_mis, int y_mis) {
+void av1_read_mode_info(AV1Decoder *const pbi, MACROBLOCKD *xd, aom_reader *r,
+ int x_mis, int y_mis) {
AV1_COMMON *const cm = &pbi->common;
MB_MODE_INFO *const mi = xd->mi[0];
mi->use_intrabc = 0;
if (frame_is_intra_only(cm)) {
- read_intra_frame_mode_info(cm, xd, mi_row, mi_col, r);
+ read_intra_frame_mode_info(cm, xd, r);
if (pbi->common.seq_params.order_hint_info.enable_ref_frame_mvs)
- intra_copy_frame_mvs(cm, mi_row, mi_col, x_mis, y_mis);
+ intra_copy_frame_mvs(cm, xd->mi_row, xd->mi_col, x_mis, y_mis);
} else {
- read_inter_frame_mode_info(pbi, xd, mi_row, mi_col, r);
+ read_inter_frame_mode_info(pbi, xd, r);
if (pbi->common.seq_params.order_hint_info.enable_ref_frame_mvs)
- av1_copy_frame_mvs(cm, mi, mi_row, mi_col, x_mis, y_mis);
+ av1_copy_frame_mvs(cm, mi, xd->mi_row, xd->mi_col, x_mis, y_mis);
}
}
diff --git a/av1/decoder/decodemv.h b/av1/decoder/decodemv.h
index 1625e5b..289e66a 100644
--- a/av1/decoder/decodemv.h
+++ b/av1/decoder/decodemv.h
@@ -20,10 +20,8 @@
extern "C" {
#endif
-void av1_read_mode_info(AV1Decoder *const pbi, MACROBLOCKD *xd,
-
- int mi_row, int mi_col, aom_reader *r, int x_mis,
- int y_mis);
+void av1_read_mode_info(AV1Decoder *const pbi, MACROBLOCKD *xd, aom_reader *r,
+ int x_mis, int y_mis);
#ifdef __cplusplus
} // extern "C"
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,