FPMT: Refactor prepare_fpmt_workers() Minor code refactoring is done for prepare_fpmt_workers() to facilitate subsequent changes. Change-Id: I4ebdd48cf01daf16a29b2fa68f9d3cea29055a04
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c index 7e34da6..9e81d7a 100644 --- a/av1/encoder/ethread.c +++ b/av1/encoder/ethread.c
@@ -799,6 +799,15 @@ return num_fp_contexts; } +// Computes the number of workers to process each of the parallel frames. +static AOM_INLINE int compute_num_workers_per_frame( + const int num_workers, const int parallel_frame_count) { + // Number of level 2 workers per frame context (ceil division) + int workers_per_frame = (num_workers / parallel_frame_count) + + (num_workers % parallel_frame_count != 0); + return workers_per_frame; +} + // Prepare level 1 workers. This function is only called for // parallel_frame_count > 1. This function populates the mt_info structure of // frame level contexts appropriately by dividing the total number of available @@ -814,28 +823,28 @@ PrimaryMultiThreadInfo *const p_mt_info = &ppi->p_mt_info; int num_workers = p_mt_info->num_workers; - // Number of level 2 workers per frame context (ceil division) - int workers_per_frame = (num_workers / parallel_frame_count) + - (num_workers % parallel_frame_count != 0); + // Number of level 2 workers per frame context + int workers_per_frame = + compute_num_workers_per_frame(num_workers, parallel_frame_count); int frame_idx = 0; for (int i = 0; i < num_workers; i += workers_per_frame) { // Assign level 1 worker AVxWorker *frame_worker = p_mt_info->p_workers[frame_idx] = &p_mt_info->workers[i]; + AV1_COMP *cur_cpi = ppi->parallel_cpi[frame_idx]; + MultiThreadInfo *mt_info = &cur_cpi->mt_info; // Assign start of level 2 worker pool - ppi->parallel_cpi[frame_idx]->mt_info.workers = &p_mt_info->workers[i]; - ppi->parallel_cpi[frame_idx]->mt_info.tile_thr_data = - &p_mt_info->tile_thr_data[i]; - ppi->parallel_cpi[frame_idx]->mt_info.num_workers = - AOMMIN(workers_per_frame, num_workers - i); + mt_info->workers = &p_mt_info->workers[i]; + mt_info->tile_thr_data = &p_mt_info->tile_thr_data[i]; + mt_info->num_workers = AOMMIN(workers_per_frame, num_workers - i); for (int j = MOD_FP; j < NUM_MT_MODULES; j++) { - ppi->parallel_cpi[frame_idx]->mt_info.num_mod_workers[j] = + mt_info->num_mod_workers[j] = AOMMIN(workers_per_frame, ppi->p_mt_info.num_mod_workers[j]); } frame_worker->hook = hook; - frame_worker->data1 = ppi->parallel_cpi[frame_idx]; + frame_worker->data1 = cur_cpi; frame_worker->data2 = (frame_idx == 0) ? first_cpi_data : &ppi->parallel_frames_data[frame_idx - 1];