Refactor TplParams from AV1_COMP
Grouped Tpl related params from AV1_COMP into a
new struct TplParams. Also added documentation
for the members.
BUG=aomedia:2610
Change-Id: I042556efd84b9abac1e1d114e43c7eb0c3b574cf
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index f9c478f..1cfc0f7 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -289,7 +289,7 @@
assert(IMPLIES(cpi->gf_group.size > 0,
cpi->gf_group.index < cpi->gf_group.size));
const int tpl_idx = cpi->gf_group.index;
- const TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ const TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[tpl_idx];
MACROBLOCKD *const xd = &x->e_mbd;
const int deltaq_rdmult = set_deltaq_rdmult(cpi, xd);
if (tpl_frame->is_valid == 0) return deltaq_rdmult;
@@ -3895,7 +3895,8 @@
assert(IMPLIES(cpi->gf_group.size > 0,
cpi->gf_group.index < cpi->gf_group.size));
const int tpl_idx = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
int tpl_stride = tpl_frame->stride;
int64_t intra_cost = 0;
@@ -3916,7 +3917,7 @@
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 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_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;
@@ -3978,7 +3979,7 @@
AV1_COMMON *const cm = &cpi->common;
const int gf_group_index = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[gf_group_index];
+ TplDepFrame *tpl_frame = &cpi->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];
@@ -4027,7 +4028,8 @@
assert(IMPLIES(cpi->gf_group.size > 0,
cpi->gf_group.index < cpi->gf_group.size));
const int tpl_idx = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
int tpl_stride = tpl_frame->stride;
int64_t intra_cost = 0;
@@ -4049,7 +4051,7 @@
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 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_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;
@@ -4553,7 +4555,8 @@
const CommonModeInfoParams *const mi_params = &cm->mi_params;
MACROBLOCK *x = &td->mb;
const int frame_idx = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[frame_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[frame_idx];
av1_zero(x->search_ref_frame);
@@ -4572,7 +4575,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 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_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);
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 69e125c..4758e7d 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 void set_tpl_stats_block_size(AV1_COMP *cpi) {
- AV1_COMMON *const cm = &cpi->common;
- const int is_720p_or_larger = AOMMIN(cm->width, cm->height) >= 720;
+static AOM_INLINE void set_tpl_stats_block_size(
+ int width, int height, uint8_t *tpl_stats_block_mis_log2) {
+ const int is_720p_or_larger = AOMMIN(width, height) >= 720;
// 0: 4x4, 1: 8x8, 2: 16x16
- cpi->tpl_stats_block_mis_log2 = is_720p_or_larger ? 2 : 1;
+ *tpl_stats_block_mis_log2 = is_720p_or_larger ? 2 : 1;
}
void av1_alloc_compound_type_rd_buffers(AV1_COMMON *const cm,
@@ -2950,35 +2950,37 @@
av1_update_layer_context_change_config(cpi, oxcf->target_bandwidth);
}
-static INLINE void setup_tpl_buffers(AV1_COMP *cpi) {
- AV1_COMMON *cm = &cpi->common;
+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(cpi);
+ set_tpl_stats_block_size(cm->width, cm->height,
+ &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);
const int mi_rows =
ALIGN_POWER_OF_TWO(mi_params->mi_rows, MAX_MIB_SIZE_LOG2);
- cpi->tpl_stats_buffer[frame].is_valid = 0;
- cpi->tpl_stats_buffer[frame].width =
- mi_cols >> cpi->tpl_stats_block_mis_log2;
- cpi->tpl_stats_buffer[frame].height =
- mi_rows >> cpi->tpl_stats_block_mis_log2;
- cpi->tpl_stats_buffer[frame].stride = cpi->tpl_stats_buffer[frame].width;
- cpi->tpl_stats_buffer[frame].mi_rows = mi_params->mi_rows;
- cpi->tpl_stats_buffer[frame].mi_cols = mi_params->mi_cols;
+ 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].stride =
+ tpl_data->tpl_stats_buffer[frame].width;
+ tpl_data->tpl_stats_buffer[frame].mi_rows = mi_params->mi_rows;
+ tpl_data->tpl_stats_buffer[frame].mi_cols = mi_params->mi_cols;
}
for (int frame = 0; frame < MAX_LAG_BUFFERS; ++frame) {
CHECK_MEM_ERROR(
- cm, cpi->tpl_stats_pool[frame],
- aom_calloc(cpi->tpl_stats_buffer[frame].width *
- cpi->tpl_stats_buffer[frame].height,
- sizeof(*cpi->tpl_stats_buffer[frame].tpl_stats_ptr)));
+ cm, tpl_data->tpl_stats_pool[frame],
+ aom_calloc(tpl_data->tpl_stats_buffer[frame].width *
+ tpl_data->tpl_stats_buffer[frame].height,
+ sizeof(*tpl_data->tpl_stats_buffer[frame].tpl_stats_ptr)));
if (aom_alloc_frame_buffer(
- &cpi->tpl_rec_pool[frame], cm->width, cm->height,
+ &tpl_data->tpl_rec_pool[frame], cm->width, cm->height,
cm->seq_params.subsampling_x, cm->seq_params.subsampling_y,
cm->seq_params.use_highbitdepth, AOM_ENC_NO_SCALE_BORDER,
cm->features.byte_alignment))
@@ -2986,7 +2988,7 @@
"Failed to allocate frame buffer");
}
- cpi->tpl_frame = &cpi->tpl_stats_buffer[REF_FRAMES + 1];
+ tpl_data->tpl_frame = &tpl_data->tpl_stats_buffer[REF_FRAMES + 1];
}
static INLINE void init_frame_info(FRAME_INFO *frame_info,
@@ -3229,7 +3231,7 @@
#endif
if (!is_stat_generation_stage(cpi)) {
- setup_tpl_buffers(cpi);
+ setup_tpl_buffers(cm, &cpi->tpl_data);
}
#if CONFIG_COLLECT_PARTITION_STATS == 2
@@ -3468,6 +3470,7 @@
void av1_remove_compressor(AV1_COMP *cpi) {
AV1_COMMON *cm;
+ TplParams *const tpl_data = &cpi->tpl_data;
int t;
if (!cpi) return;
@@ -3571,8 +3574,8 @@
}
for (int frame = 0; frame < MAX_LAG_BUFFERS; ++frame) {
- aom_free(cpi->tpl_stats_pool[frame]);
- aom_free_frame_buffer(&cpi->tpl_rec_pool[frame]);
+ aom_free(tpl_data->tpl_stats_pool[frame]);
+ aom_free_frame_buffer(&tpl_data->tpl_rec_pool[frame]);
}
for (t = cpi->num_workers - 1; t >= 0; --t) {
@@ -4104,7 +4107,8 @@
assert(IMPLIES(gf_group->size > 0, gf_group->index < gf_group->size));
const int tpl_idx = gf_group->index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
if (tpl_frame->is_valid) {
@@ -4113,7 +4117,7 @@
int64_t mc_dep_cost_base = 0;
int64_t mc_saved_base = 0;
int64_t mc_count_base = 0;
- const int step = 1 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
const int mi_cols_sr = av1_pixels_to_mi(cm->superres_upscaled_width);
for (int row = 0; row < cm->mi_params.mi_rows; row += step) {
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 067f092..dd18779 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -183,6 +183,28 @@
int base_rdmult;
} TplDepFrame;
+typedef struct TplParams {
+ // Block granularity of tpl score storage.
+ uint8_t tpl_stats_block_mis_log2;
+
+ // Buffer to store the frame level tpl information for each frame in a gf
+ // group. tpl_stats_buffer[i] stores the tpl information of ith frame in a gf
+ // group
+ TplDepFrame tpl_stats_buffer[MAX_LENGTH_TPL_FRAME_STATS];
+
+ // Buffer to store tpl stats at block granularity.
+ // tpl_stats_pool[i][j] stores the tpl stats of jth block of ith frame in a gf
+ // group.
+ TplDepStats *tpl_stats_pool[MAX_LAG_BUFFERS];
+
+ // Buffer to store tpl reconstructed frame.
+ // tpl_rec_pool[i] stores the reconstructed frame of ith frame in a gf group.
+ YV12_BUFFER_CONFIG tpl_rec_pool[MAX_LAG_BUFFERS];
+
+ // Pointer to tpl_stats_buffer.
+ TplDepFrame *tpl_frame;
+} TplParams;
+
typedef enum {
COST_UPD_SB,
COST_UPD_SBROW,
@@ -861,11 +883,7 @@
YV12_BUFFER_CONFIG scaled_last_source;
YV12_BUFFER_CONFIG *unfiltered_source;
- uint8_t tpl_stats_block_mis_log2; // block granularity of tpl score storage
- TplDepFrame tpl_stats_buffer[MAX_LENGTH_TPL_FRAME_STATS];
- TplDepStats *tpl_stats_pool[MAX_LAG_BUFFERS];
- YV12_BUFFER_CONFIG tpl_rec_pool[MAX_LAG_BUFFERS];
- TplDepFrame *tpl_frame;
+ TplParams tpl_data;
// For a still frame, this flag is set to 1 to skip partition search.
int partition_search_skippable_frame;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 4d13e1c..705d11c 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2119,7 +2119,8 @@
assert(IMPLIES(gf_group->size > 0, gf_group->index < gf_group->size));
const int tpl_idx = gf_group->index;
- const TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ const TplDepFrame *tpl_frame = &tpl_data->tpl_frame[tpl_idx];
if (tpl_idx >= MAX_LAG_BUFFERS || !tpl_frame->is_valid) {
return;
}
@@ -2128,7 +2129,7 @@
const int mi_wide = mi_size_wide[bsize];
const int mi_high = mi_size_high[bsize];
const int tpl_stride = tpl_frame->stride;
- const int step = 1 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
const int mi_col_sr =
coded_to_superres_mi(mi_col, cm->superres_scale_denominator);
const int mi_col_end_sr =
@@ -2231,7 +2232,7 @@
const GF_GROUP *const gf_group = &cpi->gf_group;
const int tpl_idx = gf_group->index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[tpl_idx];
const int prune_modes_based_on_tpl =
cpi->sf.inter_sf.prune_inter_modes_based_on_tpl &&
tpl_idx >= MAX_LAG_BUFFERS && tpl_frame->is_valid;
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 9520dc3..3eef2e2 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -200,7 +200,7 @@
(void)gf_group;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[frame_idx];
+ TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[frame_idx];
const int bw = 4 << mi_size_wide_log2[bsize];
const int bh = 4 << mi_size_high_log2[bsize];
@@ -503,7 +503,7 @@
}
int av1_tpl_ptr_pos(AV1_COMP *cpi, int mi_row, int mi_col, int stride) {
- const int right_shift = cpi->tpl_stats_block_mis_log2;
+ const int right_shift = cpi->tpl_data.tpl_stats_block_mis_log2;
return (mi_row >> right_shift) * stride + (mi_col >> right_shift);
}
@@ -586,7 +586,7 @@
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_stats_block_mis_log2;
+ const int step = 1 << cpi->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) {
@@ -610,9 +610,9 @@
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_stats_block_mis_log2;
- const BLOCK_SIZE tpl_block_size =
- convert_length_to_bsize(MI_SIZE << cpi->tpl_stats_block_mis_log2);
+ 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);
for (int idy = 0; idy < mi_height; idy += step) {
for (int idx = 0; idx < mi_width; idx += step) {
@@ -630,7 +630,7 @@
const TplDepStats *src_stats) {
const int mi_height = mi_size_high[bsize];
const int mi_width = mi_size_wide[bsize];
- const int step = 1 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << cpi->tpl_data.tpl_stats_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);
@@ -669,7 +669,8 @@
int pframe_qindex) {
const GF_GROUP *gf_group = &cpi->gf_group;
if (frame_idx == gf_group->size) return;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[frame_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[frame_idx];
const YV12_BUFFER_CONFIG *this_frame = tpl_frame->gf_picture;
const YV12_BUFFER_CONFIG *ref_frame[7] = { NULL, NULL, NULL, NULL,
NULL, NULL, NULL };
@@ -701,8 +702,10 @@
xd->cur_buf = this_frame;
for (idx = 0; idx < INTER_REFS_PER_FRAME; ++idx) {
- ref_frame[idx] = cpi->tpl_frame[tpl_frame->ref_map_index[idx]].rec_picture;
- src_frame[idx] = cpi->tpl_frame[tpl_frame->ref_map_index[idx]].gf_picture;
+ ref_frame[idx] =
+ tpl_data->tpl_frame[tpl_frame->ref_map_index[idx]].rec_picture;
+ src_frame[idx] =
+ tpl_data->tpl_frame[tpl_frame->ref_map_index[idx]].gf_picture;
}
// Store the reference frames based on priority order
@@ -777,7 +780,7 @@
const GF_GROUP *gf_group = &cpi->gf_group;
if (frame_idx == gf_group->size) return;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[frame_idx];
+ TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[frame_idx];
const BLOCK_SIZE bsize = convert_length_to_bsize(MC_FLOW_BSIZE_1D);
const int mi_height = mi_size_high[bsize];
@@ -786,8 +789,8 @@
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_frame, tpl_frame->tpl_stats_ptr, mi_row,
- mi_col, bsize, frame_idx);
+ tpl_model_update(cpi, cpi->tpl_data.tpl_frame, tpl_frame->tpl_stats_ptr,
+ mi_row, mi_col, bsize, frame_idx);
}
}
}
@@ -803,18 +806,19 @@
RefBufferStack ref_buffer_stack = cpi->ref_buffer_stack;
EncodeFrameParams frame_params = *init_frame_params;
+ TplParams *const tpl_data = &cpi->tpl_data;
int ref_picture_map[REF_FRAMES];
for (int i = 0; i < REF_FRAMES; ++i) {
if (frame_params.frame_type == KEY_FRAME || gop_eval) {
- cpi->tpl_frame[-i - 1].gf_picture = NULL;
- cpi->tpl_frame[-1 - 1].rec_picture = NULL;
- cpi->tpl_frame[-i - 1].frame_display_index = 0;
+ tpl_data->tpl_frame[-i - 1].gf_picture = NULL;
+ tpl_data->tpl_frame[-1 - 1].rec_picture = NULL;
+ tpl_data->tpl_frame[-i - 1].frame_display_index = 0;
} else {
- cpi->tpl_frame[-i - 1].gf_picture = &cm->ref_frame_map[i]->buf;
- cpi->tpl_frame[-i - 1].rec_picture = &cm->ref_frame_map[i]->buf;
- cpi->tpl_frame[-i - 1].frame_display_index =
+ tpl_data->tpl_frame[-i - 1].gf_picture = &cm->ref_frame_map[i]->buf;
+ tpl_data->tpl_frame[-i - 1].rec_picture = &cm->ref_frame_map[i]->buf;
+ tpl_data->tpl_frame[-i - 1].frame_display_index =
cm->ref_frame_map[i]->display_order_hint;
}
@@ -830,7 +834,7 @@
const int gop_length =
AOMMIN(gf_group->size - 1 + use_arf, MAX_LENGTH_TPL_FRAME_STATS - 1);
for (gf_index = cur_frame_idx; gf_index <= gop_length; ++gf_index) {
- TplDepFrame *tpl_frame = &cpi->tpl_frame[gf_index];
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[gf_index];
FRAME_UPDATE_TYPE frame_update_type = gf_group->update_type[gf_index];
frame_params.show_frame = frame_update_type != ARF_UPDATE &&
@@ -868,8 +872,8 @@
if (frame_update_type != OVERLAY_UPDATE &&
frame_update_type != INTNL_OVERLAY_UPDATE) {
- tpl_frame->rec_picture = &cpi->tpl_rec_pool[process_frame_count];
- tpl_frame->tpl_stats_ptr = cpi->tpl_stats_pool[process_frame_count];
+ tpl_frame->rec_picture = &tpl_data->tpl_rec_pool[process_frame_count];
+ tpl_frame->tpl_stats_ptr = tpl_data->tpl_stats_pool[process_frame_count];
++process_frame_count;
}
@@ -902,7 +906,7 @@
for (; gf_index < MAX_LENGTH_TPL_FRAME_STATS &&
extend_frame_count < extend_frame_length;
++gf_index) {
- TplDepFrame *tpl_frame = &cpi->tpl_frame[gf_index];
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[gf_index];
FRAME_UPDATE_TYPE frame_update_type = LF_UPDATE;
frame_params.show_frame = frame_update_type != ARF_UPDATE &&
frame_update_type != INTNL_ARF_UPDATE;
@@ -917,8 +921,8 @@
if (buf == NULL) break;
tpl_frame->gf_picture = &buf->img;
- tpl_frame->rec_picture = &cpi->tpl_rec_pool[process_frame_count];
- tpl_frame->tpl_stats_ptr = cpi->tpl_stats_pool[process_frame_count];
+ tpl_frame->rec_picture = &tpl_data->tpl_rec_pool[process_frame_count];
+ tpl_frame->tpl_stats_ptr = tpl_data->tpl_stats_pool[process_frame_count];
++process_frame_count;
// frame display index = frame offset within the gf group + start frame of
@@ -956,10 +960,10 @@
av1_get_ref_frames(cpi, &cpi->ref_buffer_stack);
}
-static AOM_INLINE void init_tpl_stats(AV1_COMP *cpi) {
+static AOM_INLINE void init_tpl_stats(TplParams *const tpl_data) {
for (int frame_idx = 0; frame_idx < MAX_LAG_BUFFERS; ++frame_idx) {
- TplDepFrame *tpl_frame = &cpi->tpl_stats_buffer[frame_idx];
- memset(cpi->tpl_stats_pool[frame_idx], 0,
+ TplDepFrame *tpl_frame = &tpl_data->tpl_stats_buffer[frame_idx];
+ memset(tpl_data->tpl_stats_pool[frame_idx], 0,
tpl_frame->height * tpl_frame->width *
sizeof(*tpl_frame->tpl_stats_ptr));
tpl_frame->is_valid = 0;
@@ -973,6 +977,7 @@
GF_GROUP *gf_group = &cpi->gf_group;
int bottom_index, top_index;
EncodeFrameParams this_frame_params = *frame_params;
+ TplParams *const tpl_data = &cpi->tpl_data;
if (cpi->oxcf.superres_mode != SUPERRES_NONE) return 0;
@@ -1002,7 +1007,7 @@
cpi->rc.base_layer_qp = pframe_qindex;
- init_tpl_stats(cpi);
+ init_tpl_stats(tpl_data);
// Backward propagation from tpl_group_frames to 1.
for (int frame_idx = gf_group->index; frame_idx < tpl_gf_group_frames;
@@ -1013,7 +1018,7 @@
mc_flow_dispenser(cpi, frame_idx, pframe_qindex);
- aom_extend_frame_borders(cpi->tpl_frame[frame_idx].rec_picture,
+ aom_extend_frame_borders(tpl_data->tpl_frame[frame_idx].rec_picture,
av1_num_planes(cm));
}
@@ -1037,12 +1042,12 @@
double beta[2] = { 0.0 };
for (int frame_idx = 1; frame_idx <= AOMMIN(tpl_gf_group_frames - 1, 2);
++frame_idx) {
- TplDepFrame *tpl_frame = &cpi->tpl_frame[frame_idx];
+ TplDepFrame *tpl_frame = &tpl_data->tpl_frame[frame_idx];
TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
int tpl_stride = tpl_frame->stride;
int64_t intra_cost_base = 0;
int64_t mc_dep_cost_base = 0;
- const int step = 1 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
const int mi_cols_sr = av1_pixels_to_mi(cm->superres_upscaled_width);
for (int row = 0; row < cm->mi_params.mi_rows; row += step) {
@@ -1073,7 +1078,8 @@
assert(IMPLIES(gf_group->size > 0, tpl_idx < gf_group->size));
- const TplDepFrame *const tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplParams *const tpl_data = &cpi->tpl_data;
+ const TplDepFrame *const tpl_frame = &tpl_data->tpl_frame[tpl_idx];
if (!tpl_frame->is_valid) return;
if (cpi->oxcf.superres_mode != SUPERRES_NONE) return;
@@ -1088,7 +1094,7 @@
const int num_cols = (mi_cols_sr + num_mi_w - 1) / num_mi_w;
const int num_rows = (cm->mi_params.mi_rows + num_mi_h - 1) / num_mi_h;
const double c = 1.2;
- const int step = 1 << cpi->tpl_stats_block_mis_log2;
+ const int step = 1 << tpl_data->tpl_stats_block_mis_log2;
aom_clear_system_state();
@@ -1126,7 +1132,7 @@
assert(IMPLIES(cpi->gf_group.size > 0,
cpi->gf_group.index < cpi->gf_group.size));
const int tpl_idx = cpi->gf_group.index;
- TplDepFrame *tpl_frame = &cpi->tpl_frame[tpl_idx];
+ TplDepFrame *tpl_frame = &cpi->tpl_data.tpl_frame[tpl_idx];
if (tpl_frame->is_valid == 0) return;
if (!is_frame_tpl_eligible(cpi)) return;