Clean up av1_tpl_ptr_pos() interface
This CL removes redundant parameters from av1_tpl_ptr_pos()
and a few caller functions.
BUG=aomedia:2610
Change-Id: Id2fed34e8b44a53c2436988e892610493cdea3bf
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 1cfc0f7..c1c740e 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3898,6 +3898,7 @@
TplParams *const tpl_data = &cpi->tpl_data;
TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
int tpl_stride = tpl_frame->stride;
int64_t intra_cost = 0;
int64_t mc_dep_cost = 0;
@@ -3917,12 +3918,12 @@
const int mi_col_end_sr =
coded_to_superres_mi(mi_col + mi_wide, cm->superres_scale_denominator);
const int mi_cols_sr = av1_pixels_to_mi(cm->superres_upscaled_width);
- const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
+ const int step = 1 << block_mis_log2;
for (int row = mi_row; row < mi_row + mi_high; row += step) {
for (int col = mi_col_sr; col < mi_col_end_sr; col += step) {
if (row >= cm->mi_params.mi_rows || col >= mi_cols_sr) continue;
TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ &tpl_stats[av1_tpl_ptr_pos(row, col, tpl_stride, block_mis_log2)];
int64_t mc_dep_delta =
RDCOST(tpl_frame->base_rdmult, this_stats->mc_dep_rate,
this_stats->mc_dep_dist);
@@ -3979,7 +3980,8 @@
AV1_COMMON *const cm = &cpi->common;
const int gf_group_index = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[gf_group_index];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[gf_group_index];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
int tpl_stride = tpl_frame->stride;
const int mi_wide = mi_size_wide[bsize];
@@ -4007,8 +4009,8 @@
for (int row = mi_row; row < mi_row + mi_high; row += step) {
for (int col = mi_col_sr; col < mi_col_end_sr; col += step) {
if (row >= cm->mi_params.mi_rows || col >= mi_cols_sr) continue;
- TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ TplDepStats *this_stats = &tpl_stats[av1_tpl_ptr_pos(
+ row, col, tpl_stride, tpl_data->tpl_stats_block_mis_log2)];
inter_cost_b[mi_count] = this_stats->inter_cost;
intra_cost_b[mi_count] = this_stats->intra_cost;
mi_count++;
@@ -4031,6 +4033,7 @@
TplParams *const tpl_data = &cpi->tpl_data;
TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
int tpl_stride = tpl_frame->stride;
int64_t intra_cost = 0;
int64_t mc_dep_cost = 0;
@@ -4051,12 +4054,12 @@
const int mi_col_end_sr =
coded_to_superres_mi(mi_col + mi_wide, cm->superres_scale_denominator);
const int mi_cols_sr = av1_pixels_to_mi(cm->superres_upscaled_width);
- const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
+ const int step = 1 << block_mis_log2;
for (int row = mi_row; row < mi_row + mi_high; row += step) {
for (int col = mi_col_sr; col < mi_col_end_sr; col += step) {
if (row >= cm->mi_params.mi_rows || col >= mi_cols_sr) continue;
TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ &tpl_stats[av1_tpl_ptr_pos(row, col, tpl_stride, block_mis_log2)];
int64_t mc_dep_delta =
RDCOST(tpl_frame->base_rdmult, this_stats->mc_dep_rate,
this_stats->mc_dep_dist);
@@ -4557,6 +4560,7 @@
const int frame_idx = cpi->gf_group.index;
TplParams *const tpl_data = &cpi->tpl_data;
TplDepFrame *tpl_frame = &tpl_data->tpl_frame[frame_idx];
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
av1_zero(x->search_ref_frame);
@@ -4575,7 +4579,7 @@
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
const int tpl_stride = tpl_frame->stride;
int64_t inter_cost[INTER_REFS_PER_FRAME] = { 0 };
- const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
+ const int step = 1 << block_mis_log2;
const BLOCK_SIZE sb_size = cm->seq_params.sb_size;
const int mi_row_end =
AOMMIN(mi_size_high[sb_size] + mi_row, mi_params->mi_rows);
@@ -4585,7 +4589,7 @@
for (int row = mi_row; row < mi_row_end; row += step) {
for (int col = mi_col; col < mi_col_end; col += step) {
const TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ &tpl_stats[av1_tpl_ptr_pos(row, col, tpl_stride, block_mis_log2)];
int64_t tpl_pred_error[INTER_REFS_PER_FRAME] = { 0 };
// Find the winner ref frame idx for the current block
int64_t best_inter_cost = this_stats->pred_error[0];
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 4758e7d..63a1c4c 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2677,12 +2677,12 @@
aom_calloc(mi_params->mi_rows * mi_params->mi_cols, 1));
}
-static AOM_INLINE void set_tpl_stats_block_size(
- int width, int height, uint8_t *tpl_stats_block_mis_log2) {
+static AOM_INLINE void set_tpl_stats_block_size(int width, int height,
+ uint8_t *block_mis_log2) {
const int is_720p_or_larger = AOMMIN(width, height) >= 720;
// 0: 4x4, 1: 8x8, 2: 16x16
- *tpl_stats_block_mis_log2 = is_720p_or_larger ? 2 : 1;
+ *block_mis_log2 = is_720p_or_larger ? 2 : 1;
}
void av1_alloc_compound_type_rd_buffers(AV1_COMMON *const cm,
@@ -2953,9 +2953,10 @@
static INLINE void setup_tpl_buffers(AV1_COMMON *const cm,
TplParams *const tpl_data) {
CommonModeInfoParams *const mi_params = &cm->mi_params;
-
set_tpl_stats_block_size(cm->width, cm->height,
&tpl_data->tpl_stats_block_mis_log2);
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
+
for (int frame = 0; frame < MAX_LENGTH_TPL_FRAME_STATS; ++frame) {
const int mi_cols =
ALIGN_POWER_OF_TWO(mi_params->mi_cols, MAX_MIB_SIZE_LOG2);
@@ -2963,10 +2964,8 @@
ALIGN_POWER_OF_TWO(mi_params->mi_rows, MAX_MIB_SIZE_LOG2);
tpl_data->tpl_stats_buffer[frame].is_valid = 0;
- tpl_data->tpl_stats_buffer[frame].width =
- mi_cols >> tpl_data->tpl_stats_block_mis_log2;
- tpl_data->tpl_stats_buffer[frame].height =
- mi_rows >> tpl_data->tpl_stats_block_mis_log2;
+ tpl_data->tpl_stats_buffer[frame].width = mi_cols >> block_mis_log2;
+ tpl_data->tpl_stats_buffer[frame].height = mi_rows >> block_mis_log2;
tpl_data->tpl_stats_buffer[frame].stride =
tpl_data->tpl_stats_buffer[frame].width;
tpl_data->tpl_stats_buffer[frame].mi_rows = mi_params->mi_rows;
@@ -4122,8 +4121,8 @@
for (int row = 0; row < cm->mi_params.mi_rows; row += step) {
for (int col = 0; col < mi_cols_sr; col += step) {
- TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ TplDepStats *this_stats = &tpl_stats[av1_tpl_ptr_pos(
+ row, col, tpl_stride, tpl_data->tpl_stats_block_mis_log2)];
int64_t mc_dep_delta =
RDCOST(tpl_frame->base_rdmult, this_stats->mc_dep_rate,
this_stats->mc_dep_dist);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 705d11c..89d5ba5 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2140,8 +2140,8 @@
row += step) {
for (int col = mi_col_sr; col < AOMMIN(mi_col_end_sr, mi_cols_sr);
col += step) {
- const TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ const TplDepStats *this_stats = &tpl_stats[av1_tpl_ptr_pos(
+ row, col, tpl_stride, tpl_data->tpl_stats_block_mis_log2)];
// Sums up the inter cost of corresponding ref frames
for (int ref_idx = 0; ref_idx < INTER_REFS_PER_FRAME; ref_idx++) {
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 3eef2e2..f846f88 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -200,7 +200,9 @@
(void)gf_group;
- TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[frame_idx];
+ TplParams *tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[frame_idx];
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
const int bw = 4 << mi_size_wide_log2[bsize];
const int bh = 4 << mi_size_high_log2[bsize];
@@ -318,7 +320,7 @@
if (xd->up_available) {
TplDepStats *ref_tpl_stats = &tpl_frame->tpl_stats_ptr[av1_tpl_ptr_pos(
- cpi, mi_row - mi_height, mi_col, tpl_frame->stride)];
+ mi_row - mi_height, mi_col, tpl_frame->stride, block_mis_log2)];
if (!is_alike_mv(ref_tpl_stats->mv[rf_idx], center_mvs, refmv_count,
cpi->sf.tpl_sf.skip_alike_starting_mv)) {
center_mvs[refmv_count].as_int = ref_tpl_stats->mv[rf_idx].as_int;
@@ -328,7 +330,7 @@
if (xd->left_available) {
TplDepStats *ref_tpl_stats = &tpl_frame->tpl_stats_ptr[av1_tpl_ptr_pos(
- cpi, mi_row, mi_col - mi_width, tpl_frame->stride)];
+ mi_row, mi_col - mi_width, tpl_frame->stride, block_mis_log2)];
if (!is_alike_mv(ref_tpl_stats->mv[rf_idx], center_mvs, refmv_count,
cpi->sf.tpl_sf.skip_alike_starting_mv)) {
center_mvs[refmv_count].as_int = ref_tpl_stats->mv[rf_idx].as_int;
@@ -338,7 +340,8 @@
if (xd->up_available && mi_col + mi_width < xd->tile.mi_col_end) {
TplDepStats *ref_tpl_stats = &tpl_frame->tpl_stats_ptr[av1_tpl_ptr_pos(
- cpi, mi_row - mi_height, mi_col + mi_width, tpl_frame->stride)];
+ mi_row - mi_height, mi_col + mi_width, tpl_frame->stride,
+ block_mis_log2)];
if (!is_alike_mv(ref_tpl_stats->mv[rf_idx], center_mvs, refmv_count,
cpi->sf.tpl_sf.skip_alike_starting_mv)) {
center_mvs[refmv_count].as_int = ref_tpl_stats->mv[rf_idx].as_int;
@@ -502,9 +505,7 @@
return width * height;
}
-int av1_tpl_ptr_pos(AV1_COMP *cpi, int mi_row, int mi_col, int stride) {
- const int right_shift = cpi->tpl_data.tpl_stats_block_mis_log2;
-
+int av1_tpl_ptr_pos(int mi_row, int mi_col, int stride, uint8_t right_shift) {
return (mi_row >> right_shift) * stride + (mi_col >> right_shift);
}
@@ -537,11 +538,16 @@
return rate_cost;
}
-static AOM_INLINE void tpl_model_update_b(AV1_COMP *cpi, TplDepFrame *tpl_frame,
- TplDepStats *tpl_stats_ptr,
- int mi_row, int mi_col,
- const BLOCK_SIZE bsize,
+static AOM_INLINE void tpl_model_update_b(TplParams *const tpl_data, int mi_row,
+ int mi_col, const BLOCK_SIZE bsize,
int frame_idx) {
+ TplDepFrame *tpl_frame_ptr = &tpl_data->tpl_frame[frame_idx];
+ TplDepStats *tpl_ptr = tpl_frame_ptr->tpl_stats_ptr;
+ TplDepFrame *tpl_frame = tpl_data->tpl_frame;
+ const uint8_t block_mis_log2 = tpl_data->tpl_stats_block_mis_log2;
+ TplDepStats *tpl_stats_ptr = &tpl_ptr[av1_tpl_ptr_pos(
+ mi_row, mi_col, tpl_frame->stride, block_mis_log2)];
+
if (tpl_stats_ptr->ref_frame_index < 0) return;
const int ref_frame_index = tpl_stats_ptr->ref_frame_index;
TplDepFrame *ref_tpl_frame =
@@ -586,12 +592,13 @@
grid_pos_row, grid_pos_col, ref_pos_row, ref_pos_col, block, bsize);
int ref_mi_row = round_floor(grid_pos_row, bh) * mi_height;
int ref_mi_col = round_floor(grid_pos_col, bw) * mi_width;
- const int step = 1 << cpi->tpl_data.tpl_stats_block_mis_log2;
+ const int step = 1 << block_mis_log2;
for (int idy = 0; idy < mi_height; idy += step) {
for (int idx = 0; idx < mi_width; idx += step) {
TplDepStats *des_stats = &ref_stats_ptr[av1_tpl_ptr_pos(
- cpi, ref_mi_row + idy, ref_mi_col + idx, ref_tpl_frame->stride)];
+ ref_mi_row + idy, ref_mi_col + idx, ref_tpl_frame->stride,
+ block_mis_log2)];
des_stats->mc_dep_dist +=
((cur_dep_dist + mc_dep_dist) * overlap_area) / pix_num;
des_stats->mc_dep_rate +=
@@ -604,33 +611,30 @@
}
}
-static AOM_INLINE void tpl_model_update(AV1_COMP *cpi, TplDepFrame *tpl_frame,
- TplDepStats *tpl_stats_ptr, int mi_row,
+static AOM_INLINE void tpl_model_update(TplParams *const tpl_data, int mi_row,
int mi_col, const BLOCK_SIZE bsize,
int frame_idx) {
const int mi_height = mi_size_high[bsize];
const int mi_width = mi_size_wide[bsize];
- const int step = 1 << cpi->tpl_data.tpl_stats_block_mis_log2;
- const BLOCK_SIZE tpl_block_size = convert_length_to_bsize(
- MI_SIZE << cpi->tpl_data.tpl_stats_block_mis_log2);
+ const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
+ const BLOCK_SIZE tpl_block_size =
+ convert_length_to_bsize(MI_SIZE << tpl_data->tpl_stats_block_mis_log2);
for (int idy = 0; idy < mi_height; idy += step) {
for (int idx = 0; idx < mi_width; idx += step) {
- TplDepStats *tpl_ptr = &tpl_stats_ptr[av1_tpl_ptr_pos(
- cpi, mi_row + idy, mi_col + idx, tpl_frame->stride)];
- tpl_model_update_b(cpi, tpl_frame, tpl_ptr, mi_row + idy, mi_col + idx,
- tpl_block_size, frame_idx);
+ tpl_model_update_b(tpl_data, mi_row + idy, mi_col + idx, tpl_block_size,
+ frame_idx);
}
}
}
-static AOM_INLINE void tpl_model_store(AV1_COMP *cpi,
- TplDepStats *tpl_stats_ptr, int mi_row,
+static AOM_INLINE void tpl_model_store(TplDepStats *tpl_stats_ptr, int mi_row,
int mi_col, BLOCK_SIZE bsize, int stride,
- const TplDepStats *src_stats) {
+ const TplDepStats *src_stats,
+ uint8_t block_mis_log2) {
const int mi_height = mi_size_high[bsize];
const int mi_width = mi_size_wide[bsize];
- const int step = 1 << cpi->tpl_data.tpl_stats_block_mis_log2;
+ const int step = 1 << block_mis_log2;
int64_t intra_cost = src_stats->intra_cost / (mi_height * mi_width);
int64_t inter_cost = src_stats->inter_cost / (mi_height * mi_width);
@@ -647,8 +651,8 @@
recrf_rate = AOMMAX(1, recrf_rate);
for (int idy = 0; idy < mi_height; idy += step) {
- TplDepStats *tpl_ptr =
- &tpl_stats_ptr[av1_tpl_ptr_pos(cpi, mi_row + idy, mi_col, stride)];
+ TplDepStats *tpl_ptr = &tpl_stats_ptr[av1_tpl_ptr_pos(
+ mi_row + idy, mi_col, stride, block_mis_log2)];
for (int idx = 0; idx < mi_width; idx += step) {
tpl_ptr->intra_cost = intra_cost;
tpl_ptr->inter_cost = inter_cost;
@@ -768,8 +772,9 @@
tx_size, ref_frame, src_frame, &tpl_stats);
// Motion flow dependency dispenser.
- tpl_model_store(cpi, tpl_frame->tpl_stats_ptr, mi_row, mi_col, bsize,
- tpl_frame->stride, &tpl_stats);
+ tpl_model_store(tpl_frame->tpl_stats_ptr, mi_row, mi_col, bsize,
+ tpl_frame->stride, &tpl_stats,
+ tpl_data->tpl_stats_block_mis_log2);
}
}
}
@@ -780,7 +785,7 @@
const GF_GROUP *gf_group = &cpi->gf_group;
if (frame_idx == gf_group->size) return;
- TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[frame_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
const BLOCK_SIZE bsize = convert_length_to_bsize(MC_FLOW_BSIZE_1D);
const int mi_height = mi_size_high[bsize];
@@ -789,8 +794,7 @@
for (int mi_row = 0; mi_row < cm->mi_params.mi_rows; mi_row += mi_height) {
for (int mi_col = 0; mi_col < cm->mi_params.mi_cols; mi_col += mi_width) {
if (frame_idx) {
- tpl_model_update(cpi, cpi->tpl_data.tpl_frame, tpl_frame->tpl_stats_ptr,
- mi_row, mi_col, bsize, frame_idx);
+ tpl_model_update(tpl_data, mi_row, mi_col, bsize, frame_idx);
}
}
}
@@ -1052,8 +1056,8 @@
for (int row = 0; row < cm->mi_params.mi_rows; row += step) {
for (int col = 0; col < mi_cols_sr; col += step) {
- TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, row, col, tpl_stride)];
+ TplDepStats *this_stats = &tpl_stats[av1_tpl_ptr_pos(
+ row, col, tpl_stride, tpl_data->tpl_stats_block_mis_log2)];
int64_t mc_dep_delta =
RDCOST(tpl_frame->base_rdmult, this_stats->mc_dep_rate,
this_stats->mc_dep_dist);
@@ -1108,8 +1112,8 @@
for (int mi_col = col * num_mi_w; mi_col < (col + 1) * num_mi_w;
mi_col += step) {
if (mi_row >= cm->mi_params.mi_rows || mi_col >= mi_cols_sr) continue;
- const TplDepStats *this_stats =
- &tpl_stats[av1_tpl_ptr_pos(cpi, mi_row, mi_col, tpl_stride)];
+ const TplDepStats *this_stats = &tpl_stats[av1_tpl_ptr_pos(
+ mi_row, mi_col, tpl_stride, tpl_data->tpl_stats_block_mis_log2)];
int64_t mc_dep_delta =
RDCOST(tpl_frame->base_rdmult, this_stats->mc_dep_rate,
this_stats->mc_dep_dist);
diff --git a/av1/encoder/tpl_model.h b/av1/encoder/tpl_model.h
index 812d5ad..11a61b6 100644
--- a/av1/encoder/tpl_model.h
+++ b/av1/encoder/tpl_model.h
@@ -33,7 +33,7 @@
const EncodeFrameParams *const frame_params,
const EncodeFrameInput *const frame_input);
-int av1_tpl_ptr_pos(AV1_COMP *cpi, int mi_row, int mi_col, int stride);
+int av1_tpl_ptr_pos(int mi_row, int mi_col, int stride, uint8_t right_shift);
void av1_tpl_rdmult_setup(AV1_COMP *cpi);