/src/libhevc/encoder/ihevce_memory_init.c
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * |
3 | | * Copyright (C) 2018 The Android Open Source Project |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at: |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | ***************************************************************************** |
18 | | * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
19 | | */ |
20 | | |
21 | | /*! |
22 | | ****************************************************************************** |
23 | | * \file ihevce_memory_init.c |
24 | | * |
25 | | * \brief |
26 | | * This file contains functions which perform memory requirement gathering |
27 | | * and freeing of memories of encoder at the end |
28 | | * |
29 | | * \date |
30 | | * 18/09/2012 |
31 | | * |
32 | | * \author |
33 | | * Ittiam |
34 | | * |
35 | | * List of Functions |
36 | | * <TODO: TO BE ADDED> |
37 | | * |
38 | | ****************************************************************************** |
39 | | */ |
40 | | |
41 | | /*****************************************************************************/ |
42 | | /* File Includes */ |
43 | | /*****************************************************************************/ |
44 | | /* System include files */ |
45 | | #include <stdio.h> |
46 | | #include <string.h> |
47 | | #include <stdlib.h> |
48 | | #include <assert.h> |
49 | | #include <stdarg.h> |
50 | | #include <math.h> |
51 | | |
52 | | /* User include files */ |
53 | | #include "ihevc_typedefs.h" |
54 | | #include "itt_video_api.h" |
55 | | #include "ihevce_api.h" |
56 | | |
57 | | #include "rc_cntrl_param.h" |
58 | | #include "rc_frame_info_collector.h" |
59 | | #include "rc_look_ahead_params.h" |
60 | | |
61 | | #include "ihevc_defs.h" |
62 | | #include "ihevc_macros.h" |
63 | | #include "ihevc_debug.h" |
64 | | #include "ihevc_structs.h" |
65 | | #include "ihevc_platform_macros.h" |
66 | | #include "ihevc_deblk.h" |
67 | | #include "ihevc_itrans_recon.h" |
68 | | #include "ihevc_chroma_itrans_recon.h" |
69 | | #include "ihevc_chroma_intra_pred.h" |
70 | | #include "ihevc_intra_pred.h" |
71 | | #include "ihevc_inter_pred.h" |
72 | | #include "ihevc_mem_fns.h" |
73 | | #include "ihevc_padding.h" |
74 | | #include "ihevc_weighted_pred.h" |
75 | | #include "ihevc_sao.h" |
76 | | #include "ihevc_resi_trans.h" |
77 | | #include "ihevc_quant_iquant_ssd.h" |
78 | | #include "ihevc_cabac_tables.h" |
79 | | #include "ihevc_common_tables.h" |
80 | | |
81 | | #include "ihevce_defs.h" |
82 | | #include "ihevce_hle_interface.h" |
83 | | #include "ihevce_lap_enc_structs.h" |
84 | | #include "ihevce_lap_interface.h" |
85 | | #include "ihevce_multi_thrd_structs.h" |
86 | | #include "ihevce_multi_thrd_funcs.h" |
87 | | #include "ihevce_me_common_defs.h" |
88 | | #include "ihevce_had_satd.h" |
89 | | #include "ihevce_error_codes.h" |
90 | | #include "ihevce_bitstream.h" |
91 | | #include "ihevce_cabac.h" |
92 | | #include "ihevce_rdoq_macros.h" |
93 | | #include "ihevce_function_selector.h" |
94 | | #include "ihevce_enc_structs.h" |
95 | | #include "ihevce_entropy_structs.h" |
96 | | #include "ihevce_cmn_utils_instr_set_router.h" |
97 | | #include "ihevce_ipe_instr_set_router.h" |
98 | | #include "ihevce_decomp_pre_intra_structs.h" |
99 | | #include "ihevce_decomp_pre_intra_pass.h" |
100 | | #include "ihevce_enc_loop_structs.h" |
101 | | #include "ihevce_nbr_avail.h" |
102 | | #include "ihevce_enc_loop_utils.h" |
103 | | #include "ihevce_sub_pic_rc.h" |
104 | | #include "ihevce_global_tables.h" |
105 | | #include "ihevce_bs_compute_ctb.h" |
106 | | #include "ihevce_cabac_rdo.h" |
107 | | #include "ihevce_deblk.h" |
108 | | #include "ihevce_entropy_interface.h" |
109 | | #include "ihevce_frame_process.h" |
110 | | #include "ihevce_ipe_pass.h" |
111 | | #include "ihevce_rc_enc_structs.h" |
112 | | #include "ihevce_rc_interface.h" |
113 | | #include "hme_datatype.h" |
114 | | #include "hme_interface.h" |
115 | | #include "hme_common_defs.h" |
116 | | #include "hme_defs.h" |
117 | | #include "ihevce_me_instr_set_router.h" |
118 | | #include "ihevce_enc_subpel_gen.h" |
119 | | #include "ihevce_inter_pred.h" |
120 | | #include "ihevce_mv_pred.h" |
121 | | #include "ihevce_mv_pred_merge.h" |
122 | | #include "ihevce_enc_loop_inter_mode_sifter.h" |
123 | | #include "ihevce_me_pass.h" |
124 | | #include "ihevce_coarse_me_pass.h" |
125 | | #include "ihevce_enc_cu_recursion.h" |
126 | | #include "ihevce_enc_loop_pass.h" |
127 | | #include "ihevce_common_utils.h" |
128 | | #include "ihevce_buffer_que_interface.h" |
129 | | #include "ihevce_dep_mngr_interface.h" |
130 | | #include "ihevce_sao.h" |
131 | | #include "ihevce_tile_interface.h" |
132 | | |
133 | | #include "cast_types.h" |
134 | | #include "osal.h" |
135 | | #include "osal_defaults.h" |
136 | | |
137 | | /*****************************************************************************/ |
138 | | /* Function Definitions */ |
139 | | /*****************************************************************************/ |
140 | | |
141 | | /*! |
142 | | ****************************************************************************** |
143 | | * \if Function name : ihevce_mem_manager_init \endif |
144 | | * |
145 | | * \brief |
146 | | * Encoder Memory init function |
147 | | * |
148 | | * \param[in] Processing interface context pointer |
149 | | * |
150 | | * \return |
151 | | * None |
152 | | * |
153 | | * \author |
154 | | * Ittiam |
155 | | * |
156 | | ***************************************************************************** |
157 | | */ |
158 | 55.6k | #define MAX_QUEUE 40 |
159 | | void ihevce_mem_manager_init(enc_ctxt_t *ps_enc_ctxt, ihevce_hle_ctxt_t *ps_intrf_ctxt) |
160 | 8.22k | { |
161 | | /* local variables */ |
162 | 8.22k | WORD32 total_memtabs_req = 0; |
163 | 8.22k | WORD32 total_memtabs_used = 0; |
164 | 8.22k | WORD32 total_system_memtabs = 0; |
165 | 8.22k | WORD32 ctr; |
166 | 8.22k | WORD32 buf_size; |
167 | 8.22k | WORD32 num_ctb_horz; |
168 | 8.22k | WORD32 num_ctb_vert; |
169 | 8.22k | WORD32 num_cu_in_ctb; |
170 | 8.22k | WORD32 num_pu_in_ctb; |
171 | 8.22k | WORD32 num_tu_in_ctb; |
172 | 8.22k | WORD32 ctb_size; |
173 | 8.22k | WORD32 min_cu_size; |
174 | 8.22k | WORD32 max_num_ref_pics; |
175 | 8.22k | WORD32 mem_alloc_ctrl_flag; |
176 | 8.22k | WORD32 space_for_mem_in_enc_grp = 0; |
177 | 8.22k | WORD32 space_for_mem_in_pre_enc_grp = 0; |
178 | 8.22k | WORD32 mv_bank_size; |
179 | 8.22k | WORD32 ref_idx_bank_size; |
180 | 8.22k | WORD32 a_wd[MAX_NUM_HME_LAYERS], a_ht[MAX_NUM_HME_LAYERS]; |
181 | 8.22k | WORD32 a_disp_wd[MAX_NUM_HME_LAYERS], a_disp_ht[MAX_NUM_HME_LAYERS]; |
182 | 8.22k | WORD32 a_ctb_align_wd[MAX_NUM_HME_LAYERS], a_ctb_align_ht[MAX_NUM_HME_LAYERS]; |
183 | 8.22k | WORD32 n_enc_layers = 1, n_tot_layers; |
184 | 8.22k | WORD32 num_bufs_preenc_me_que, num_bufs_L0_ipe_enc, max_delay_preenc_l0_que; |
185 | 8.22k | WORD32 i, i4_resolution_id = ps_enc_ctxt->i4_resolution_id; //counter |
186 | 8.22k | WORD32 i4_num_bitrate_inst; |
187 | 8.22k | iv_mem_rec_t *ps_memtab; |
188 | 8.22k | WORD32 i4_field_pic, i4_total_queues = 0; |
189 | | |
190 | 8.22k | recon_pic_buf_t **pps_pre_enc_pic_bufs; |
191 | 8.22k | frm_proc_ent_cod_ctxt_t **pps_frm_proc_ent_cod_bufs[IHEVCE_MAX_NUM_BITRATES]; |
192 | 8.22k | pre_enc_me_ctxt_t **pps_pre_enc_bufs; |
193 | 8.22k | me_enc_rdopt_ctxt_t **pps_me_enc_bufs; |
194 | 8.22k | pre_enc_L0_ipe_encloop_ctxt_t **pps_L0_ipe_enc_bufs; |
195 | | /*get number of input buffer required based on requirement from each stage*/ |
196 | 8.22k | ihevce_lap_enc_buf_t **pps_lap_enc_input_bufs; |
197 | 8.22k | WORD32 i4_num_enc_loop_frm_pllel; |
198 | 8.22k | WORD32 i4_num_me_frm_pllel; |
199 | | /*msr: These are parameters required to allocate input buffer, |
200 | | encoder needs to be initilized before getting requirements hence filled once static params are initilized*/ |
201 | 8.22k | WORD32 num_input_buf_per_queue, i4_yuv_min_size, i4_luma_min_size; |
202 | | |
203 | 8.22k | i4_num_bitrate_inst = ps_enc_ctxt->i4_num_bitrates; |
204 | 8.22k | i4_field_pic = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_field_pic; |
205 | 8.22k | ps_intrf_ctxt->i4_gpu_mem_size = 0; |
206 | | |
207 | | /*Initialize the thrd id flag and all deafult values for sub pic rc */ |
208 | 8.22k | { |
209 | 8.22k | WORD32 i, j, k; |
210 | | |
211 | 16.4k | for(i = 0; i < MAX_NUM_ENC_LOOP_PARALLEL; i++) |
212 | 8.22k | { |
213 | 16.4k | for(j = 0; j < IHEVCE_MAX_NUM_BITRATES; j++) |
214 | 8.22k | { |
215 | 8.22k | ps_enc_ctxt->s_multi_thrd.ai4_acc_ctb_ctr[i][j] = 0; |
216 | 8.22k | ps_enc_ctxt->s_multi_thrd.ai4_ctb_ctr[i][j] = 0; |
217 | | |
218 | 8.22k | ps_enc_ctxt->s_multi_thrd.ai4_threshold_reached[i][j] = 0; |
219 | | |
220 | 8.22k | ps_enc_ctxt->s_multi_thrd.ai4_curr_qp_acc[i][j] = 0; |
221 | | |
222 | 8.22k | ps_enc_ctxt->s_multi_thrd.af_acc_hdr_bits_scale_err[i][j] = 0; |
223 | | |
224 | 74.0k | for(k = 0; k < MAX_NUM_FRM_PROC_THRDS_ENC; k++) |
225 | 65.8k | { |
226 | 65.8k | ps_enc_ctxt->s_multi_thrd.ai4_thrd_id_valid_flag[i][j][k] = -1; |
227 | 65.8k | } |
228 | 8.22k | } |
229 | 8.22k | } |
230 | 8.22k | } |
231 | | |
232 | 8.22k | #define ENABLE_FRM_PARALLEL |
233 | 8.22k | #ifdef ENABLE_FRM_PARALLEL |
234 | 8.22k | i4_num_enc_loop_frm_pllel = MAX_NUM_ENC_LOOP_PARALLEL; |
235 | 8.22k | i4_num_me_frm_pllel = MAX_NUM_ME_PARALLEL; |
236 | | #else |
237 | | i4_num_enc_loop_frm_pllel = 1; |
238 | | i4_num_me_frm_pllel = 1; |
239 | | #endif |
240 | | |
241 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_loop_frm_pllel = i4_num_enc_loop_frm_pllel; |
242 | 8.22k | ps_enc_ctxt->i4_max_fr_enc_loop_parallel_rc = i4_num_enc_loop_frm_pllel; |
243 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_me_frm_pllel = i4_num_me_frm_pllel; |
244 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_force_end_flag = 0; |
245 | | |
246 | 8.22k | ps_enc_ctxt->i4_ref_mbr_id = 0; |
247 | | /* get the ctb size from max cu size */ |
248 | 8.22k | ctb_size = ps_enc_ctxt->ps_stat_prms->s_config_prms.i4_max_log2_cu_size; |
249 | | |
250 | | /* get the min cu size from config params */ |
251 | 8.22k | min_cu_size = ps_enc_ctxt->ps_stat_prms->s_config_prms.i4_min_log2_cu_size; |
252 | | |
253 | | /* convert to actual width */ |
254 | 8.22k | ctb_size = 1 << ctb_size; |
255 | 8.22k | min_cu_size = 1 << min_cu_size; |
256 | | |
257 | | /* Get the width and heights of different decomp layers */ |
258 | 8.22k | *a_wd = |
259 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
260 | 8.22k | .i4_width + |
261 | 8.22k | SET_CTB_ALIGN( |
262 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
263 | 8.22k | .i4_width, |
264 | 8.22k | min_cu_size); |
265 | 8.22k | *a_ht = |
266 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
267 | 8.22k | .i4_height + |
268 | 8.22k | SET_CTB_ALIGN( |
269 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
270 | 8.22k | .i4_height, |
271 | 8.22k | min_cu_size); |
272 | | |
273 | 8.22k | n_tot_layers = hme_derive_num_layers(n_enc_layers, a_wd, a_ht, a_disp_wd, a_disp_ht); |
274 | 8.22k | hme_coarse_get_layer1_mv_bank_ref_idx_size( |
275 | 8.22k | n_tot_layers, |
276 | 8.22k | a_wd, |
277 | 8.22k | a_ht, |
278 | 8.22k | ((ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1) |
279 | 8.22k | ? ((DEFAULT_MAX_REFERENCE_PICS) << i4_field_pic) |
280 | 8.22k | : ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames), |
281 | 8.22k | (S32 *)(&mv_bank_size), |
282 | 8.22k | (S32 *)(&ref_idx_bank_size)); |
283 | 8.22k | if(n_tot_layers < 3) |
284 | 0 | { |
285 | 0 | WORD32 error_code; |
286 | 0 | error_code = IHEVCE_NUM_DECOMP_LYRS_NOT_SUPPORTED; |
287 | 0 | ps_intrf_ctxt->i4_error_code = IHEVCE_SETUNSUPPORTEDINPUT(error_code); |
288 | 0 | return; |
289 | 0 | } |
290 | | |
291 | | /* calculate num cu,pu,tu in ctb */ |
292 | 8.22k | num_cu_in_ctb = ctb_size / MIN_CU_SIZE; |
293 | 8.22k | num_cu_in_ctb *= num_cu_in_ctb; |
294 | | |
295 | 8.22k | num_pu_in_ctb = ctb_size / MIN_PU_SIZE; |
296 | 8.22k | num_pu_in_ctb *= num_pu_in_ctb; |
297 | | |
298 | 8.22k | num_tu_in_ctb = ctb_size / MIN_PU_SIZE; |
299 | 8.22k | num_tu_in_ctb *= num_tu_in_ctb; |
300 | | |
301 | | /* calcuate the number of ctb horizontally*/ |
302 | 8.22k | num_ctb_horz = |
303 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
304 | 8.22k | .i4_width + |
305 | 8.22k | SET_CTB_ALIGN( |
306 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
307 | 8.22k | .i4_width, |
308 | 8.22k | ctb_size); |
309 | 8.22k | num_ctb_horz = num_ctb_horz / ctb_size; |
310 | | |
311 | | /* calcuate the number of ctb vertically*/ |
312 | 8.22k | num_ctb_vert = |
313 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
314 | 8.22k | .i4_height + |
315 | 8.22k | SET_CTB_ALIGN( |
316 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id] |
317 | 8.22k | .i4_height, |
318 | 8.22k | ctb_size); |
319 | 8.22k | num_ctb_vert = num_ctb_vert / ctb_size; |
320 | | |
321 | | /* align all the decomp layer dimensions to CTB alignment */ |
322 | 33.7k | for(ctr = 0; ctr < n_tot_layers; ctr++) |
323 | 25.5k | { |
324 | 25.5k | a_ctb_align_wd[ctr] = a_wd[ctr] + SET_CTB_ALIGN(a_wd[ctr], ctb_size); |
325 | | |
326 | 25.5k | a_ctb_align_ht[ctr] = a_ht[ctr] + SET_CTB_ALIGN(a_ht[ctr], ctb_size); |
327 | 25.5k | } |
328 | | |
329 | | /* SEI related parametert initialization */ |
330 | | |
331 | 8.22k | ps_enc_ctxt->u4_cur_pic_encode_cnt = 0; |
332 | | |
333 | | /* store the frame level ctb parameters which will be constant for the session */ |
334 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size = ctb_size; |
335 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_min_cu_size = min_cu_size; |
336 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_num_cus_in_ctb = num_cu_in_ctb; |
337 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_num_pus_in_ctb = num_pu_in_ctb; |
338 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_num_tus_in_ctb = num_tu_in_ctb; |
339 | | |
340 | | /* intialize cra poc to default value */ |
341 | 8.22k | ps_enc_ctxt->i4_cra_poc = 0; |
342 | | |
343 | | /* initialise the memory alloc control flag */ |
344 | 8.22k | mem_alloc_ctrl_flag = ps_enc_ctxt->ps_stat_prms->s_multi_thrd_prms.i4_memory_alloc_ctrl_flag; |
345 | | |
346 | | /* decide the memory space for enc_grp and pre_enc_grp based on control flag */ |
347 | 8.22k | if(0 == mem_alloc_ctrl_flag) |
348 | 8.22k | { |
349 | | /* normal memory */ |
350 | 8.22k | space_for_mem_in_enc_grp = IV_EXT_CACHEABLE_NORMAL_MEM; |
351 | 8.22k | space_for_mem_in_pre_enc_grp = IV_EXT_CACHEABLE_NORMAL_MEM; |
352 | 8.22k | } |
353 | 0 | else if(1 == mem_alloc_ctrl_flag) |
354 | 0 | { |
355 | | /* only NUMA Node 0 memory allocation */ |
356 | 0 | space_for_mem_in_enc_grp = IV_EXT_CACHEABLE_NUMA_NODE0_MEM; |
357 | 0 | space_for_mem_in_pre_enc_grp = IV_EXT_CACHEABLE_NUMA_NODE0_MEM; |
358 | 0 | } |
359 | 0 | else if(2 == mem_alloc_ctrl_flag) |
360 | 0 | { |
361 | | /* Both NUMA Node 0 & Node 1 memory allocation */ |
362 | 0 | space_for_mem_in_enc_grp = IV_EXT_CACHEABLE_NUMA_NODE0_MEM; |
363 | 0 | space_for_mem_in_pre_enc_grp = IV_EXT_CACHEABLE_NUMA_NODE1_MEM; |
364 | 0 | } |
365 | 0 | else |
366 | 0 | { |
367 | | /* should not enter here */ |
368 | 0 | ASSERT(0); |
369 | 0 | } |
370 | | |
371 | 8.22k | { |
372 | 8.22k | if(ps_enc_ctxt->s_multi_thrd.i4_num_enc_loop_frm_pllel > 1) |
373 | 0 | { |
374 | 0 | num_bufs_preenc_me_que = MIN_L1_L0_STAGGER_NON_SEQ + |
375 | 0 | ps_enc_ctxt->ps_stat_prms->s_lap_prms.i4_rc_look_ahead_pics + |
376 | 0 | (MAX_L0_IPE_ENC_STAGGER - 1) + NUM_BUFS_DECOMP_HME; |
377 | 0 | } |
378 | 8.22k | else |
379 | 8.22k | { |
380 | 8.22k | num_bufs_preenc_me_que = MIN_L1_L0_STAGGER_NON_SEQ + |
381 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_lap_prms.i4_rc_look_ahead_pics + |
382 | 8.22k | (MIN_L0_IPE_ENC_STAGGER - 1) + NUM_BUFS_DECOMP_HME; |
383 | 8.22k | } |
384 | | |
385 | | /*The number of buffers to support stagger between L0 IPE, ME and enc loop. This is a separate queue to store L0 IPE |
386 | | output to save memory since this is not used in L1 stage*/ |
387 | 8.22k | if(ps_enc_ctxt->s_multi_thrd.i4_num_enc_loop_frm_pllel > 1) |
388 | 0 | { |
389 | 0 | num_bufs_L0_ipe_enc = MAX_L0_IPE_ENC_STAGGER; |
390 | 0 | } |
391 | 8.22k | else |
392 | 8.22k | { |
393 | 8.22k | num_bufs_L0_ipe_enc = MIN_L0_IPE_ENC_STAGGER; |
394 | 8.22k | } |
395 | | |
396 | 8.22k | max_delay_preenc_l0_que = MIN_L1_L0_STAGGER_NON_SEQ + |
397 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_lap_prms.i4_rc_look_ahead_pics + 1; |
398 | 8.22k | } |
399 | | |
400 | | /* ------------ popluate the lap static parameters ------------- */ |
401 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_closed_gop_period = |
402 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_closed_gop_period; |
403 | | |
404 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_min_closed_gop_period = |
405 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_min_closed_gop_period; |
406 | | |
407 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_cra_open_gop_period = |
408 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_cra_open_gop_period; |
409 | | |
410 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_i_open_gop_period = |
411 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_i_open_gop_period; |
412 | | |
413 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames = |
414 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames; |
415 | | |
416 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_temporal_layers = |
417 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_temporal_layers; |
418 | | |
419 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_width = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_width; |
420 | | |
421 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_height = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_height; |
422 | | |
423 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_enable_logo = ps_enc_ctxt->ps_stat_prms->i4_enable_logo; |
424 | | |
425 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_src_interlace_field = |
426 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_field_pic; |
427 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_frame_rate = |
428 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_frm_rate_num / |
429 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_frm_rate_denom; |
430 | | |
431 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_blu_ray_spec = ps_enc_ctxt->i4_blu_ray_spec; |
432 | | |
433 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_internal_bit_depth = |
434 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth; |
435 | | |
436 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_input_bit_depth = |
437 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_input_bit_depth; |
438 | | |
439 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.u1_chroma_array_type = |
440 | 8.22k | (ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) ? 2 : 1; |
441 | | |
442 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_rc_pass_num = ps_enc_ctxt->ps_stat_prms->s_pass_prms.i4_pass; |
443 | | |
444 | 8.22k | if(0 == i4_resolution_id) |
445 | 8.22k | { |
446 | 16.4k | for(ctr = 0; ctr < ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_num_res_layers; ctr++) |
447 | 8.22k | { |
448 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] = |
449 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ctr].i4_quality_preset; |
450 | | |
451 | 8.22k | if(ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] == IHEVCE_QUALITY_P7) |
452 | 392 | { |
453 | 392 | ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] = IHEVCE_QUALITY_P6; |
454 | 392 | } |
455 | 8.22k | } |
456 | 8.22k | } |
457 | 8.22k | memcpy( |
458 | 8.22k | &ps_enc_ctxt->s_lap_stat_prms.s_lap_params, |
459 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_lap_prms, |
460 | 8.22k | sizeof(ihevce_lap_params_t)); |
461 | | |
462 | | /* copy the create prms as runtime prms */ |
463 | 8.22k | memcpy( |
464 | 8.22k | &ps_enc_ctxt->s_runtime_src_prms, |
465 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_src_prms, |
466 | 8.22k | sizeof(ihevce_src_params_t)); |
467 | | /*Copy the target params*/ |
468 | 8.22k | memcpy( |
469 | 8.22k | &ps_enc_ctxt->s_runtime_tgt_params, |
470 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id], |
471 | 8.22k | sizeof(ihevce_tgt_params_t)); |
472 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.e_arch_type = ps_enc_ctxt->ps_stat_prms->e_arch_type; |
473 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.u1_is_popcnt_available = ps_enc_ctxt->u1_is_popcnt_available; |
474 | | |
475 | | /* copy the create prms as runtime prms */ |
476 | 8.22k | memcpy( |
477 | 8.22k | &ps_enc_ctxt->s_runtime_src_prms, |
478 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_src_prms, |
479 | 8.22k | sizeof(ihevce_src_params_t)); |
480 | | /*Copy the target params*/ |
481 | 8.22k | memcpy( |
482 | 8.22k | &ps_enc_ctxt->s_runtime_tgt_params, |
483 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id], |
484 | 8.22k | sizeof(ihevce_tgt_params_t)); |
485 | | |
486 | | /* copy the run time coding parameters */ |
487 | 8.22k | memcpy( |
488 | 8.22k | &ps_enc_ctxt->s_runtime_coding_prms, |
489 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms, |
490 | 8.22k | sizeof(ihevce_coding_params_t)); |
491 | | /*change in run time parameter*/ |
492 | 8.22k | if(ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1) |
493 | 8.22k | { |
494 | 8.22k | ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames = (DEFAULT_MAX_REFERENCE_PICS) |
495 | 8.22k | << i4_field_pic; |
496 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames = |
497 | 8.22k | ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames; |
498 | 8.22k | } |
499 | 8.22k | ASSERT(i4_num_enc_loop_frm_pllel == i4_num_me_frm_pllel); |
500 | | |
501 | 8.22k | if((1 == i4_num_enc_loop_frm_pllel) && (1 == i4_num_me_frm_pllel)) |
502 | 8.22k | { |
503 | 8.22k | max_num_ref_pics = ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames; |
504 | 8.22k | } |
505 | 0 | else |
506 | 0 | { |
507 | 0 | max_num_ref_pics = |
508 | 0 | ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames * i4_num_enc_loop_frm_pllel; |
509 | 0 | } |
510 | | /* --------------------------------------------------------------------- */ |
511 | | /* -------------- Collating the number of memtabs required ------------ */ |
512 | | /* --------------------------------------------------------------------- */ |
513 | | |
514 | | /* Memtabs for syntactical tiles */ |
515 | 8.22k | total_memtabs_req += ihevce_tiles_get_num_mem_recs(); |
516 | | |
517 | | /* ---------- Enc loop Memtabs --------- */ |
518 | 8.22k | total_memtabs_req += |
519 | 8.22k | ihevce_enc_loop_get_num_mem_recs(i4_num_bitrate_inst, i4_num_enc_loop_frm_pllel); |
520 | | /* ---------- ME Memtabs --------------- */ |
521 | 8.22k | total_memtabs_req += ihevce_me_get_num_mem_recs(i4_num_me_frm_pllel); |
522 | | |
523 | | /* ---------- Coarse ME Memtabs --------------- */ |
524 | 8.22k | total_memtabs_req += ihevce_coarse_me_get_num_mem_recs(); |
525 | | /* ---------- IPE Memtabs -------------- */ |
526 | 8.22k | total_memtabs_req += ihevce_ipe_get_num_mem_recs(); |
527 | | |
528 | | /* ---------- ECD Memtabs -------------- */ |
529 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
530 | 8.22k | { |
531 | 8.22k | total_memtabs_req += ihevce_entropy_get_num_mem_recs(); |
532 | 8.22k | } |
533 | 8.22k | if(0 == ps_enc_ctxt->i4_resolution_id) |
534 | 8.22k | { |
535 | | /* ---------- LAP Memtabs--------------- */ |
536 | 8.22k | total_memtabs_req += ihevce_lap_get_num_mem_recs(); |
537 | 8.22k | } |
538 | | /* ---------- Decomp Pre Intra Memtabs--------------- */ |
539 | 8.22k | total_memtabs_req += ihevce_decomp_pre_intra_get_num_mem_recs(); |
540 | | |
541 | | /* ---------- RC memtabs --------------- */ |
542 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
543 | 8.22k | { |
544 | 8.22k | total_memtabs_req += ihevce_rc_get_num_mem_recs(); /*HEVC_RC*/ |
545 | 8.22k | } |
546 | | |
547 | | /* ---------- System Memtabs ----------- */ |
548 | 8.22k | total_memtabs_req += TOTAL_SYSTEM_MEM_RECS; //increment this based on final requirement |
549 | | |
550 | | /* -----Frameproc Entcod Que Memtabs --- */ |
551 | | /* one queue for each bit-rate is used */ |
552 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
553 | 8.22k | { |
554 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
555 | 8.22k | } |
556 | | /* mrs:memtab for one queue for encoder owned input queue, This is only request for memtab, currently more than |
557 | | required memtabs are allocated. Hence my change of using memtab for yuv buffers is surviving. Only memtab |
558 | | usage and initialization needs to be exact sync*/ |
559 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
560 | | |
561 | | /* ---Pre-encode Encode Que Mem requests -- */ |
562 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
563 | | |
564 | | /* -----ME / Enc-RD opt Que Mem requests --- */ |
565 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
566 | | |
567 | | /* ----Pre-encode L0 IPE to enc Que Mem requests -- */ |
568 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
569 | | |
570 | | /* --- ME-EncLoop Dep Mngr Row-Row Mem requests -- */ |
571 | 8.22k | total_memtabs_req += NUM_ME_ENC_BUFS * ihevce_dmgr_get_num_mem_recs(); |
572 | | |
573 | | /* --- Prev. frame EncLoop Done Dep Mngr Frm-Frm Mem requests -- */ |
574 | 8.22k | total_memtabs_req += i4_num_enc_loop_frm_pllel * ihevce_dmgr_get_num_mem_recs(); |
575 | | |
576 | | /* --- Prev. frame EncLoop Done for re-encode Dep Mngr Frm-Frm Mem requests -- */ |
577 | 8.22k | total_memtabs_req += ihevce_dmgr_get_num_mem_recs(); |
578 | | |
579 | | /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem requests -- */ |
580 | 8.22k | total_memtabs_req += i4_num_me_frm_pllel * ihevce_dmgr_get_num_mem_recs(); |
581 | | |
582 | | /* --- Prev. frame PreEnc L1 Done Dep Mngr Frm-Frm Mem requests -- */ |
583 | 8.22k | total_memtabs_req += ihevce_dmgr_get_num_mem_recs(); |
584 | | |
585 | | /* --- Prev. frame PreEnc HME Done Dep Mngr Frm-Frm Mem requests -- */ |
586 | 8.22k | total_memtabs_req += ihevce_dmgr_get_num_mem_recs(); |
587 | | |
588 | | /* --- Prev. frame PreEnc L0 Done Dep Mngr Frm-Frm Mem requests -- */ |
589 | 8.22k | total_memtabs_req += ihevce_dmgr_get_num_mem_recs(); |
590 | | |
591 | | /* --- ME-Prev Recon Dep Mngr Row-Frm Mem requests -- */ |
592 | 8.22k | total_memtabs_req += |
593 | 8.22k | (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * ihevce_dmgr_get_num_mem_recs(); |
594 | | |
595 | | /* ----- allocate memomry for memtabs --- */ |
596 | 8.22k | { |
597 | 8.22k | iv_mem_rec_t s_memtab; |
598 | | |
599 | 8.22k | s_memtab.i4_size = sizeof(iv_mem_rec_t); |
600 | 8.22k | s_memtab.i4_mem_size = total_memtabs_req * sizeof(iv_mem_rec_t); |
601 | 8.22k | s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
602 | 8.22k | s_memtab.i4_mem_alignment = 4; |
603 | | |
604 | 8.22k | ps_intrf_ctxt->ihevce_mem_alloc( |
605 | 8.22k | ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->ps_stat_prms->s_sys_api, &s_memtab); |
606 | 8.22k | if(s_memtab.pv_base == NULL) |
607 | 0 | { |
608 | 0 | ps_intrf_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
609 | 0 | return; |
610 | 0 | } |
611 | | |
612 | 8.22k | ps_memtab = (iv_mem_rec_t *)s_memtab.pv_base; |
613 | 8.22k | } |
614 | | |
615 | | /* --------------------------------------------------------------------- */ |
616 | | /* ------------------ Collating memory requirements ------------------- */ |
617 | | /* --------------------------------------------------------------------- */ |
618 | | |
619 | | /* ----------- Tiles mem requests -------------*/ |
620 | 0 | total_memtabs_used += ihevce_tiles_get_mem_recs( |
621 | 8.22k | &ps_memtab[total_memtabs_used], |
622 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
623 | 8.22k | &ps_enc_ctxt->s_frm_ctb_prms, |
624 | 8.22k | i4_resolution_id, |
625 | 8.22k | space_for_mem_in_enc_grp); |
626 | | |
627 | | /* ---------- Enc loop Mem requests --------- */ |
628 | 8.22k | total_memtabs_used += ihevce_enc_loop_get_mem_recs( |
629 | 8.22k | &ps_memtab[total_memtabs_used], |
630 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
631 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
632 | 8.22k | i4_num_bitrate_inst, |
633 | 8.22k | i4_num_enc_loop_frm_pllel, |
634 | 8.22k | space_for_mem_in_enc_grp, |
635 | 8.22k | i4_resolution_id); |
636 | | /* ---------- ME Mem requests --------------- */ |
637 | 8.22k | total_memtabs_used += ihevce_me_get_mem_recs( |
638 | 8.22k | &ps_memtab[total_memtabs_used], |
639 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
640 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
641 | 8.22k | space_for_mem_in_enc_grp, |
642 | 8.22k | i4_resolution_id, |
643 | 8.22k | i4_num_me_frm_pllel); |
644 | | |
645 | | /* ---------- Coarse ME Mem requests --------------- */ |
646 | 8.22k | total_memtabs_used += ihevce_coarse_me_get_mem_recs( |
647 | 8.22k | &ps_memtab[total_memtabs_used], |
648 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
649 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
650 | 8.22k | space_for_mem_in_pre_enc_grp, |
651 | 8.22k | i4_resolution_id); |
652 | | /* ---------- IPE Mem requests -------------- */ |
653 | 8.22k | total_memtabs_used += ihevce_ipe_get_mem_recs( |
654 | 8.22k | &ps_memtab[total_memtabs_used], |
655 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
656 | 8.22k | space_for_mem_in_pre_enc_grp); |
657 | | /* ---------- ECD Mem requests -------------- */ |
658 | 8.22k | i4_num_bitrate_inst = ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id] |
659 | 8.22k | .i4_num_bitrate_instances; |
660 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
661 | 8.22k | { |
662 | 8.22k | total_memtabs_used += ihevce_entropy_get_mem_recs( |
663 | 8.22k | &ps_memtab[total_memtabs_used], |
664 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
665 | 8.22k | space_for_mem_in_pre_enc_grp, |
666 | 8.22k | i4_resolution_id); |
667 | 8.22k | } |
668 | | |
669 | 8.22k | if(0 == i4_resolution_id) |
670 | 8.22k | { |
671 | | /* ---------- LAP Mem requests--------------- */ |
672 | 8.22k | total_memtabs_used += |
673 | 8.22k | ihevce_lap_get_mem_recs(&ps_memtab[total_memtabs_used], space_for_mem_in_pre_enc_grp); |
674 | 8.22k | } |
675 | | |
676 | | /* -------- DECOMPOSITION PRE INTRA Mem requests-------- */ |
677 | 8.22k | total_memtabs_used += ihevce_decomp_pre_intra_get_mem_recs( |
678 | 8.22k | &ps_memtab[total_memtabs_used], |
679 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
680 | 8.22k | space_for_mem_in_pre_enc_grp); |
681 | | |
682 | | /* ---------- RC Mem requests --------------- */ |
683 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
684 | 8.22k | { |
685 | 8.22k | total_memtabs_used += ihevce_rc_get_mem_recs( |
686 | 8.22k | &ps_memtab[total_memtabs_used], |
687 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
688 | 8.22k | space_for_mem_in_pre_enc_grp, |
689 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_sys_api); |
690 | 8.22k | } |
691 | | |
692 | | /* ---------- System Mem requests ----------- */ |
693 | | |
694 | | /* allocate memory for pps tile */ |
695 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
696 | | |
697 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
698 | | |
699 | 8.22k | if(1 == ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_tiles_enabled_flag) |
700 | 0 | { |
701 | 0 | ps_memtab[total_memtabs_used].i4_mem_size = |
702 | 0 | (ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_num_tile_cols * |
703 | 0 | ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_num_tile_rows) * |
704 | 0 | (sizeof(tile_t)); |
705 | 0 | } |
706 | 8.22k | else |
707 | 8.22k | { |
708 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = sizeof(tile_t); |
709 | 8.22k | } |
710 | | |
711 | | /* increment the memtab counter */ |
712 | 8.22k | total_memtabs_used++; |
713 | 8.22k | total_system_memtabs++; |
714 | | |
715 | | /* recon picture buffer pointer array */ |
716 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
717 | 8.22k | { |
718 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
719 | | |
720 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
721 | | |
722 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
723 | 8.22k | (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * (sizeof(recon_pic_buf_t *)); |
724 | | |
725 | | /* increment the memtab counter */ |
726 | 8.22k | total_memtabs_used++; |
727 | 8.22k | total_system_memtabs++; |
728 | 8.22k | } |
729 | | |
730 | | /* recon picture buffers structures */ |
731 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
732 | 8.22k | { |
733 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
734 | | |
735 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
736 | | |
737 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
738 | 8.22k | (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * (sizeof(recon_pic_buf_t)); |
739 | | |
740 | | /* increment the memtab counter */ |
741 | 8.22k | total_memtabs_used++; |
742 | 8.22k | total_system_memtabs++; |
743 | 8.22k | } |
744 | | |
745 | | /* reference/recon picture buffers */ |
746 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
747 | 8.22k | { |
748 | 8.22k | WORD32 i4_chroma_buf_size_shift = |
749 | 8.22k | -(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth <= 8) + |
750 | 8.22k | (ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV); |
751 | | |
752 | 8.22k | buf_size = ((num_ctb_horz * ctb_size) + (PAD_HORZ << 1)); |
753 | 8.22k | buf_size = buf_size * ((num_ctb_vert * ctb_size) + (PAD_VERT << 1)); |
754 | 8.22k | buf_size = buf_size * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); |
755 | | |
756 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
757 | | |
758 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
759 | | |
760 | | /* If HBD, both 8bit and 16 bit luma buffers are required, whereas only 16bit chroma buffers are required */ |
761 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
762 | | /* Luma */ |
763 | 8.22k | (buf_size * ((ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth > 8) |
764 | 8.22k | ? BUFFER_SIZE_MULTIPLIER_IF_HBD |
765 | 8.22k | : 1)) + |
766 | | /* Chroma */ |
767 | 8.22k | (SHL_NEG(buf_size, i4_chroma_buf_size_shift)); |
768 | | |
769 | | /* increment the memtab counter */ |
770 | 8.22k | total_memtabs_used++; |
771 | 8.22k | total_system_memtabs++; |
772 | 8.22k | } |
773 | | /* reference/recon picture subpel planes */ |
774 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
775 | | |
776 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
777 | | |
778 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
779 | 8.22k | buf_size * (3 + L0ME_IN_OPENLOOP_MODE); /* 3 planes */ |
780 | | |
781 | | /* increment the memtab counter */ |
782 | 8.22k | total_memtabs_used++; |
783 | 8.22k | total_system_memtabs++; |
784 | | /* reference colocated MV bank */ |
785 | | /* Keep memory for an extra CTB at the right and bottom of frame. |
786 | | This extra space is needed by dist-encoding and unused in non-dist-encoding */ |
787 | 8.22k | buf_size = (num_ctb_horz + 1) * (num_ctb_vert + 1) * num_pu_in_ctb; |
788 | 8.22k | buf_size = buf_size * sizeof(pu_col_mv_t) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * |
789 | 8.22k | i4_num_bitrate_inst; |
790 | | |
791 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
792 | | |
793 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
794 | | |
795 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
796 | | |
797 | | /* increment the memtab counter */ |
798 | 8.22k | total_memtabs_used++; |
799 | 8.22k | total_system_memtabs++; |
800 | | |
801 | | /* reference colocated MV bank map */ |
802 | | /* Keep memory for an extra CTB at the right and bottom of frame. |
803 | | This extra space is needed by dist-encoding and unused in non-dist-encoding */ |
804 | 8.22k | buf_size = (num_ctb_horz + 1) * (num_ctb_vert + 1) * num_pu_in_ctb; |
805 | 8.22k | buf_size = buf_size * sizeof(UWORD8) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * |
806 | 8.22k | i4_num_bitrate_inst; |
807 | | |
808 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
809 | | |
810 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
811 | | |
812 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
813 | | |
814 | | /* increment the memtab counter */ |
815 | 8.22k | total_memtabs_used++; |
816 | 8.22k | total_system_memtabs++; |
817 | | |
818 | | /* reference collocated MV bank map offsets map */ |
819 | 8.22k | buf_size = num_ctb_horz * num_ctb_vert; |
820 | 8.22k | buf_size = buf_size * sizeof(UWORD16) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * |
821 | 8.22k | i4_num_bitrate_inst; |
822 | | |
823 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
824 | | |
825 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
826 | | |
827 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
828 | | |
829 | | /* increment the memtab counter */ |
830 | 8.22k | total_memtabs_used++; |
831 | 8.22k | total_system_memtabs++; |
832 | | |
833 | | /* reference colocated MV bank ctb offset */ |
834 | 8.22k | buf_size = num_ctb_horz; |
835 | 8.22k | buf_size = buf_size * num_ctb_vert; |
836 | 8.22k | buf_size = buf_size * sizeof(UWORD32) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * |
837 | 8.22k | i4_num_bitrate_inst; |
838 | | |
839 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
840 | | |
841 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
842 | | |
843 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
844 | | |
845 | | /* increment the memtab counter */ |
846 | 8.22k | total_memtabs_used++; |
847 | 8.22k | total_system_memtabs++; |
848 | | |
849 | | /* recon picture buffer pointer array for pre enc group */ |
850 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
851 | | |
852 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
853 | | |
854 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
855 | 8.22k | (max_num_ref_pics + 1) * (sizeof(recon_pic_buf_t *)); |
856 | | |
857 | | /* increment the memtab counter */ |
858 | 8.22k | total_memtabs_used++; |
859 | 8.22k | total_system_memtabs++; |
860 | | |
861 | | /* recon picture buffers structures for pre enc group */ |
862 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
863 | | |
864 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
865 | | |
866 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = (max_num_ref_pics + 1) * (sizeof(recon_pic_buf_t)); |
867 | | |
868 | | /* increment the memtab counter */ |
869 | 8.22k | total_memtabs_used++; |
870 | 8.22k | total_system_memtabs++; |
871 | 8.22k | { |
872 | 8.22k | num_input_buf_per_queue = ihevce_lap_get_num_ip_bufs(&ps_enc_ctxt->s_lap_stat_prms); |
873 | 8.22k | { |
874 | 8.22k | WORD32 i4_count_temp = 0, i4_last_queue_length; |
875 | | |
876 | | /*First allocate the memory for the buffer based on resolution*/ |
877 | 8.22k | WORD32 ctb_align_pic_wd = ps_enc_ctxt->s_runtime_tgt_params.i4_width + |
878 | 8.22k | SET_CTB_ALIGN( |
879 | 8.22k | ps_enc_ctxt->s_runtime_tgt_params.i4_width, |
880 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size); |
881 | | |
882 | 8.22k | WORD32 ctb_align_pic_ht = ps_enc_ctxt->s_runtime_tgt_params.i4_height + |
883 | 8.22k | SET_CTB_ALIGN( |
884 | 8.22k | ps_enc_ctxt->s_runtime_tgt_params.i4_height, |
885 | 8.22k | ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size); |
886 | | |
887 | 8.22k | i4_last_queue_length = (num_input_buf_per_queue % MAX_QUEUE); |
888 | | |
889 | 8.22k | if((num_input_buf_per_queue % MAX_QUEUE) == 0) |
890 | 0 | i4_last_queue_length = MAX_QUEUE; |
891 | | |
892 | 8.22k | ps_enc_ctxt->i4_num_input_buf_per_queue = num_input_buf_per_queue; |
893 | 8.22k | i4_yuv_min_size = |
894 | 8.22k | (ctb_align_pic_wd * ctb_align_pic_ht) + |
895 | 8.22k | ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) |
896 | 8.22k | ? (ctb_align_pic_wd * ctb_align_pic_ht) |
897 | 8.22k | : ((ctb_align_pic_wd * ctb_align_pic_ht) >> 1)); |
898 | 8.22k | i4_luma_min_size = (ctb_align_pic_wd * ctb_align_pic_ht); |
899 | | |
900 | | /*Inorder to allocate memory for the large buffer sizes overflowing WORD32 we are splitting the memtabs using i4_total_hbd_queues and MAX_HBD_QUEUE*/ |
901 | 8.22k | i4_total_queues = num_input_buf_per_queue / MAX_QUEUE; |
902 | | |
903 | 8.22k | if((num_input_buf_per_queue % MAX_QUEUE) != 0) |
904 | 8.22k | { |
905 | 8.22k | i4_total_queues++; |
906 | 8.22k | } |
907 | | |
908 | 8.22k | ASSERT(i4_total_queues < 5); |
909 | | |
910 | 16.4k | for(i4_count_temp = 0; i4_count_temp < i4_total_queues; i4_count_temp++) |
911 | 8.22k | { |
912 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 32; |
913 | | |
914 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
915 | | /*Memory size for yuv buffer of one frame * num of input required to stored in the queue*/ |
916 | 8.22k | if((i4_count_temp < (i4_total_queues - 1))) |
917 | 0 | ps_memtab[total_memtabs_used].i4_mem_size = i4_yuv_min_size * MAX_QUEUE; |
918 | 8.22k | else |
919 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
920 | 8.22k | (i4_yuv_min_size)*i4_last_queue_length; |
921 | | |
922 | | /* increment the memtab counter */ |
923 | 8.22k | total_memtabs_used++; |
924 | 8.22k | total_system_memtabs++; |
925 | 8.22k | } |
926 | 8.22k | } |
927 | | /*memory for input buffer structure*/ |
928 | 0 | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
929 | | |
930 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
931 | | |
932 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
933 | 8.22k | (num_input_buf_per_queue) * (sizeof(ihevce_lap_enc_buf_t *)); |
934 | | |
935 | | /* increment the memtab counter */ |
936 | 8.22k | total_memtabs_used++; |
937 | 8.22k | total_system_memtabs++; |
938 | | |
939 | | /* frame process/entropy coding buffer structures */ |
940 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
941 | | |
942 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
943 | | |
944 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
945 | 8.22k | (num_input_buf_per_queue) * (sizeof(ihevce_lap_enc_buf_t)); |
946 | | /* increment the memtab counter */ |
947 | 8.22k | total_memtabs_used++; |
948 | 8.22k | total_system_memtabs++; |
949 | | |
950 | | /*input synch ctrl command*/ |
951 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
952 | | |
953 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
954 | | |
955 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
956 | 8.22k | (num_input_buf_per_queue) * (ENC_COMMAND_BUFF_SIZE); |
957 | | |
958 | 8.22k | total_memtabs_used++; |
959 | 8.22k | total_system_memtabs++; |
960 | 8.22k | } |
961 | | |
962 | | /* Pre-encode/encode coding buffer pointer array */ |
963 | 0 | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
964 | | |
965 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
966 | | |
967 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
968 | 8.22k | (num_bufs_preenc_me_que) * (sizeof(pre_enc_me_ctxt_t *)); |
969 | | |
970 | | /* increment the memtab counter */ |
971 | 8.22k | total_memtabs_used++; |
972 | 8.22k | total_system_memtabs++; |
973 | | |
974 | | /* frame process/entropy coding buffer structures */ |
975 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
976 | | |
977 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
978 | | |
979 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
980 | 8.22k | (num_bufs_preenc_me_que) * (sizeof(pre_enc_me_ctxt_t)); |
981 | | |
982 | | /* increment the memtab counter */ |
983 | 8.22k | total_memtabs_used++; |
984 | 8.22k | total_system_memtabs++; |
985 | | |
986 | | /* Pre-encode L0 IPE output to ME buffer pointer*/ |
987 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
988 | | |
989 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
990 | | |
991 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
992 | 8.22k | (num_bufs_L0_ipe_enc) * (sizeof(pre_enc_L0_ipe_encloop_ctxt_t *)); |
993 | | |
994 | | /* increment the memtab counter */ |
995 | 8.22k | total_memtabs_used++; |
996 | 8.22k | total_system_memtabs++; |
997 | | |
998 | | /* Pre-encode L0 IPE output to ME buffer */ |
999 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1000 | | |
1001 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1002 | | |
1003 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
1004 | 8.22k | (num_bufs_L0_ipe_enc) * (sizeof(pre_enc_L0_ipe_encloop_ctxt_t)); |
1005 | | |
1006 | | /* increment the memtab counter */ |
1007 | 8.22k | total_memtabs_used++; |
1008 | 8.22k | total_system_memtabs++; |
1009 | | |
1010 | | /* CTB analyse Frame level */ |
1011 | 8.22k | buf_size = num_ctb_horz; |
1012 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1013 | 8.22k | buf_size = buf_size * sizeof(ctb_analyse_t) * num_bufs_preenc_me_que; |
1014 | | |
1015 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1016 | | |
1017 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1018 | | |
1019 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1020 | | |
1021 | | /* increment the memtab counter */ |
1022 | 8.22k | total_memtabs_used++; |
1023 | 8.22k | total_system_memtabs++; |
1024 | | |
1025 | | /* ME layer ctxt pointer */ |
1026 | 8.22k | buf_size = sizeof(layer_ctxt_t) * num_bufs_preenc_me_que; |
1027 | | |
1028 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1029 | | |
1030 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1031 | | |
1032 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1033 | | |
1034 | | /* increment the memtab counter */ |
1035 | 8.22k | total_memtabs_used++; |
1036 | 8.22k | total_system_memtabs++; |
1037 | | |
1038 | | /* ME layer MV bank ctxt pointer */ |
1039 | 8.22k | buf_size = sizeof(layer_mv_t) * num_bufs_preenc_me_que; |
1040 | | |
1041 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1042 | | |
1043 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1044 | | |
1045 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1046 | | |
1047 | | /* increment the memtab counter */ |
1048 | 8.22k | total_memtabs_used++; |
1049 | 8.22k | total_system_memtabs++; |
1050 | | |
1051 | | /* ME layer MV bank pointer */ |
1052 | 8.22k | buf_size = mv_bank_size * num_bufs_preenc_me_que; |
1053 | | |
1054 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1055 | | |
1056 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1057 | | |
1058 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1059 | | |
1060 | | /* increment the memtab counter */ |
1061 | 8.22k | total_memtabs_used++; |
1062 | 8.22k | total_system_memtabs++; |
1063 | | |
1064 | | /* ME layer ref idx bank pointer */ |
1065 | 8.22k | buf_size = ref_idx_bank_size * num_bufs_preenc_me_que; |
1066 | | |
1067 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1068 | | |
1069 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1070 | | |
1071 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1072 | | |
1073 | | /* increment the memtab counter */ |
1074 | 8.22k | total_memtabs_used++; |
1075 | 8.22k | total_system_memtabs++; |
1076 | | /* Frame level array to store 8x8 intra cost */ |
1077 | 8.22k | buf_size = (num_ctb_horz * ctb_size) >> 3; |
1078 | 8.22k | buf_size *= ((num_ctb_vert * ctb_size) >> 3); |
1079 | 8.22k | buf_size *= sizeof(double) * num_bufs_preenc_me_que; |
1080 | | |
1081 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1082 | | |
1083 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1084 | | |
1085 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1086 | | |
1087 | | /* increment the memtab counter */ |
1088 | 8.22k | total_memtabs_used++; |
1089 | 8.22k | total_system_memtabs++; |
1090 | | |
1091 | | /* Frame level array to store ctb intra cost and modes */ |
1092 | 8.22k | buf_size = (num_ctb_horz * num_ctb_vert); |
1093 | 8.22k | buf_size *= sizeof(ipe_l0_ctb_analyse_for_me_t) * num_bufs_L0_ipe_enc; |
1094 | | |
1095 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1096 | | |
1097 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1098 | | |
1099 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1100 | | |
1101 | | /* increment the memtab counter */ |
1102 | 8.22k | total_memtabs_used++; |
1103 | 8.22k | total_system_memtabs++; |
1104 | | |
1105 | | /* |
1106 | | * Layer early decision buffer L1 buf.Since the pre intra analysis always |
1107 | | * expects memory for ihevce_ed_blk_t for complete ctbs, align the width and |
1108 | | * height in layer to mutiple of 32. |
1109 | | */ |
1110 | 8.22k | buf_size = (a_ctb_align_wd[1] >> 5) * (a_ctb_align_ht[1] >> 5) * sizeof(ihevce_ed_ctb_l1_t) * |
1111 | 8.22k | num_bufs_preenc_me_que; |
1112 | | |
1113 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1114 | | |
1115 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp; |
1116 | | |
1117 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1118 | | |
1119 | | /* increment the memtab counter */ |
1120 | 8.22k | total_memtabs_used++; |
1121 | 8.22k | total_system_memtabs++; |
1122 | | |
1123 | | /* |
1124 | | * Layer early decision buffer L1 buf.Since the pre intra analysis always |
1125 | | * expects memory for ihevce_ed_blk_t for complete ctbs, align the width and |
1126 | | * height in layer to mutiple of 32. |
1127 | | */ |
1128 | 8.22k | buf_size = (a_ctb_align_wd[1] >> 2) * (a_ctb_align_ht[1] >> 2) * sizeof(ihevce_ed_blk_t) * |
1129 | 8.22k | num_bufs_preenc_me_que; |
1130 | | |
1131 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1132 | | |
1133 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp; |
1134 | | |
1135 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1136 | | |
1137 | | /* increment the memtab counter */ |
1138 | 8.22k | total_memtabs_used++; |
1139 | 8.22k | total_system_memtabs++; |
1140 | | |
1141 | | /* |
1142 | | * Layer early decision buffer L2 buf.Since the pre intra analysis always |
1143 | | * expects memory for ihevce_ed_blk_t for complete ctbs, align the width and |
1144 | | * height in layer to mutiple of 16. |
1145 | | */ |
1146 | 8.22k | buf_size = (a_ctb_align_wd[2] >> 2) * (a_ctb_align_ht[2] >> 2) * sizeof(ihevce_ed_blk_t) * |
1147 | 8.22k | num_bufs_preenc_me_que; |
1148 | | |
1149 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1150 | | |
1151 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp; |
1152 | | |
1153 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1154 | | |
1155 | | /* increment the memtab counter */ |
1156 | 8.22k | total_memtabs_used++; |
1157 | 8.22k | total_system_memtabs++; |
1158 | | |
1159 | | /* following is the buffer requirement of |
1160 | | que between me and enc*/ |
1161 | | |
1162 | | /* me/enc que buffer pointer array */ |
1163 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1164 | | |
1165 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1166 | | |
1167 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = (NUM_ME_ENC_BUFS) * (sizeof(me_enc_rdopt_ctxt_t *)); |
1168 | | |
1169 | | /* increment the memtab counter */ |
1170 | 8.22k | total_memtabs_used++; |
1171 | 8.22k | total_system_memtabs++; |
1172 | | |
1173 | | /* fme/enc que buffer structures */ |
1174 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1175 | | |
1176 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1177 | | |
1178 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = (NUM_ME_ENC_BUFS) * (sizeof(me_enc_rdopt_ctxt_t)); |
1179 | | |
1180 | | /* increment the memtab counter */ |
1181 | 8.22k | total_memtabs_used++; |
1182 | 8.22k | total_system_memtabs++; |
1183 | | |
1184 | | /* Job Queue related memory */ |
1185 | | /* max num ctb rows is doubled to take care worst case */ |
1186 | | /* requirements because of HME layers */ |
1187 | 8.22k | buf_size = (MAX_NUM_VERT_UNITS_FRM) * (NUM_ENC_JOBS_QUES)*NUM_ME_ENC_BUFS; //PING_PONG_BUF; |
1188 | | /* In tile case, based on the number of column tiles, |
1189 | | we will have separate jobQ per column tile */ |
1190 | 8.22k | if(1 == ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_tiles_enabled_flag) |
1191 | 0 | { |
1192 | 0 | buf_size *= ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_num_tile_cols; |
1193 | 0 | } |
1194 | 8.22k | buf_size *= sizeof(job_queue_t); |
1195 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1196 | | |
1197 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1198 | | |
1199 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1200 | | |
1201 | | /* increment the memtab counter */ |
1202 | 8.22k | total_memtabs_used++; |
1203 | 8.22k | total_system_memtabs++; |
1204 | | |
1205 | | /* cur_ctb_cu_tree_t Frame level */ |
1206 | 8.22k | buf_size = num_ctb_horz * MAX_NUM_NODES_CU_TREE; |
1207 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1208 | | |
1209 | | /* ps_cu_analyse_inter buffer is used to popualte outputs form ME after using cu analyse form IPE */ |
1210 | 8.22k | buf_size = buf_size * sizeof(cur_ctb_cu_tree_t) * NUM_ME_ENC_BUFS; |
1211 | | |
1212 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1213 | | |
1214 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1215 | | |
1216 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1217 | | |
1218 | | /* increment the memtab counter */ |
1219 | 8.22k | total_memtabs_used++; |
1220 | 8.22k | total_system_memtabs++; |
1221 | | |
1222 | | /* me_ctb_data_t Frame level */ |
1223 | 8.22k | buf_size = num_ctb_horz * num_ctb_vert; |
1224 | | |
1225 | | /* This buffer is used to */ |
1226 | 8.22k | buf_size = buf_size * sizeof(me_ctb_data_t) * NUM_ME_ENC_BUFS; |
1227 | | |
1228 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1229 | | |
1230 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1231 | | |
1232 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1233 | | |
1234 | | /* increment the memtab counter */ |
1235 | 8.22k | total_memtabs_used++; |
1236 | 8.22k | total_system_memtabs++; |
1237 | | |
1238 | | /* following is for each bit-rate */ |
1239 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1240 | 8.22k | { |
1241 | | /* frame process/entropy coding buffer pointer array */ |
1242 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1243 | | |
1244 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1245 | | |
1246 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
1247 | 8.22k | (NUM_FRMPROC_ENTCOD_BUFS) * (sizeof(frm_proc_ent_cod_ctxt_t *)); |
1248 | | |
1249 | | /* increment the memtab counter */ |
1250 | 8.22k | total_memtabs_used++; |
1251 | 8.22k | total_system_memtabs++; |
1252 | | |
1253 | | /* frame process/entropy coding buffer structures */ |
1254 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1255 | | |
1256 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1257 | | |
1258 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
1259 | 8.22k | (NUM_FRMPROC_ENTCOD_BUFS) * (sizeof(frm_proc_ent_cod_ctxt_t)); |
1260 | | |
1261 | | /* increment the memtab counter */ |
1262 | 8.22k | total_memtabs_used++; |
1263 | 8.22k | total_system_memtabs++; |
1264 | | |
1265 | | /* CTB enc loop Frame level */ |
1266 | 8.22k | buf_size = num_ctb_horz; |
1267 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1268 | 8.22k | buf_size = buf_size * sizeof(ctb_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS; |
1269 | | |
1270 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1271 | | |
1272 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1273 | | |
1274 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1275 | | |
1276 | | /* increment the memtab counter */ |
1277 | 8.22k | total_memtabs_used++; |
1278 | 8.22k | total_system_memtabs++; |
1279 | | |
1280 | | /* CU enc loop Frame level */ |
1281 | 8.22k | buf_size = num_ctb_horz * num_cu_in_ctb; |
1282 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1283 | 8.22k | buf_size = buf_size * sizeof(cu_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS; |
1284 | | |
1285 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1286 | | |
1287 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1288 | | |
1289 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1290 | | |
1291 | | /* increment the memtab counter */ |
1292 | 8.22k | total_memtabs_used++; |
1293 | 8.22k | total_system_memtabs++; |
1294 | | |
1295 | | /* TU enc loop Frame level */ |
1296 | 8.22k | buf_size = num_ctb_horz * num_tu_in_ctb; |
1297 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1298 | 8.22k | buf_size = buf_size * sizeof(tu_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS; |
1299 | | |
1300 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1301 | | |
1302 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1303 | | |
1304 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1305 | | |
1306 | | /* increment the memtab counter */ |
1307 | 8.22k | total_memtabs_used++; |
1308 | 8.22k | total_system_memtabs++; |
1309 | | |
1310 | | /* PU enc loop Frame level */ |
1311 | 8.22k | buf_size = num_ctb_horz * num_pu_in_ctb; |
1312 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1313 | 8.22k | buf_size = buf_size * sizeof(pu_t) * NUM_FRMPROC_ENTCOD_BUFS; |
1314 | | |
1315 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1316 | | |
1317 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1318 | | |
1319 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1320 | | |
1321 | | /* increment the memtab counter */ |
1322 | 8.22k | total_memtabs_used++; |
1323 | 8.22k | total_system_memtabs++; |
1324 | | |
1325 | | /* Coeffs Frame level */ |
1326 | 8.22k | buf_size = |
1327 | 8.22k | num_ctb_horz * ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) |
1328 | 8.22k | ? (num_tu_in_ctb << 1) |
1329 | 8.22k | : ((num_tu_in_ctb * 3) >> 1)); |
1330 | 8.22k | buf_size = buf_size * num_ctb_vert; |
1331 | 8.22k | buf_size = buf_size * sizeof(UWORD8) * MAX_SCAN_COEFFS_BYTES_4x4 * NUM_FRMPROC_ENTCOD_BUFS; |
1332 | | |
1333 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1334 | | |
1335 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1336 | | |
1337 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1338 | | |
1339 | | /* increment the memtab counter */ |
1340 | 8.22k | total_memtabs_used++; |
1341 | 8.22k | total_system_memtabs++; |
1342 | | |
1343 | 8.22k | #ifndef DISABLE_SEI |
1344 | | /* SEI Payload Data */ |
1345 | 8.22k | buf_size = sizeof(UWORD8) * MAX_NUMBER_OF_SEI_PAYLOAD * MAX_SEI_PAYLOAD_PER_TLV * |
1346 | 8.22k | NUM_FRMPROC_ENTCOD_BUFS; |
1347 | | |
1348 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1349 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1350 | | |
1351 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1352 | | |
1353 | | /* increment the memtab counter */ |
1354 | 8.22k | total_memtabs_used++; |
1355 | 8.22k | total_system_memtabs++; |
1356 | 8.22k | #endif |
1357 | 8.22k | } |
1358 | | |
1359 | | /* ------ Working mem frame level -------*/ |
1360 | 8.22k | buf_size = ((num_ctb_horz * ctb_size) + 16); |
1361 | 8.22k | buf_size *= ((num_ctb_vert * ctb_size) + 23); |
1362 | 8.22k | buf_size *= sizeof(WORD16); |
1363 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1364 | | |
1365 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1366 | | |
1367 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1368 | | |
1369 | | /* increment the memtab counter */ |
1370 | 8.22k | total_memtabs_used++; |
1371 | 8.22k | total_system_memtabs++; |
1372 | | /* Job Queue related memory */ |
1373 | | /* max num ctb rows is doubled to take care worst case */ |
1374 | | /* requirements because of HME layers */ |
1375 | 8.22k | buf_size = (MAX_NUM_VERT_UNITS_FRM) * (NUM_PRE_ENC_JOBS_QUES) * (max_delay_preenc_l0_que); |
1376 | 8.22k | buf_size *= sizeof(job_queue_t); |
1377 | | |
1378 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
1379 | | |
1380 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp; |
1381 | | |
1382 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = buf_size; |
1383 | | |
1384 | | /* increment the memtab counter */ |
1385 | 8.22k | total_memtabs_used++; |
1386 | 8.22k | total_system_memtabs++; |
1387 | | |
1388 | | /* check on the system memtabs */ |
1389 | 8.22k | ASSERT(total_system_memtabs <= TOTAL_SYSTEM_MEM_RECS); |
1390 | | |
1391 | | /* -----Frameproc Entcod Que Mem requests --- */ |
1392 | | /* derive for each bit-rate */ |
1393 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1394 | 8.22k | { |
1395 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
1396 | 8.22k | &ps_memtab[total_memtabs_used], NUM_FRMPROC_ENTCOD_BUFS, space_for_mem_in_enc_grp); |
1397 | 8.22k | } |
1398 | | /*mrs: Request memory for the input yuv queue*/ |
1399 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
1400 | 8.22k | &ps_memtab[total_memtabs_used], num_input_buf_per_queue, space_for_mem_in_enc_grp); |
1401 | | /*------ The encoder owned input buffer queue*/ |
1402 | | /* -----Pre-encode Encode Que Mem requests --- */ |
1403 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
1404 | 8.22k | &ps_memtab[total_memtabs_used], num_bufs_preenc_me_que, space_for_mem_in_enc_grp); |
1405 | | |
1406 | | /* -----ME / Enc-RD opt Que Mem requests --- */ |
1407 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
1408 | 8.22k | &ps_memtab[total_memtabs_used], NUM_ME_ENC_BUFS, space_for_mem_in_enc_grp); |
1409 | | |
1410 | | /* -----Pre-encode L0 IPE to enc Que Mem requests --- */ |
1411 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
1412 | 8.22k | &ps_memtab[total_memtabs_used], num_bufs_L0_ipe_enc, space_for_mem_in_enc_grp); |
1413 | | |
1414 | | /* ---------- Dependency Manager allocations -------- */ |
1415 | 8.22k | { |
1416 | | /* --- ME-EncLoop Dep Mngr Row-Row Mem requests -- */ |
1417 | 16.4k | for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++) |
1418 | 8.22k | { |
1419 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1420 | 8.22k | &ps_memtab[total_memtabs_used], |
1421 | 8.22k | DEP_MNGR_ROW_ROW_SYNC, |
1422 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1423 | 8.22k | ps_enc_ctxt->ps_stat_prms->s_app_tile_params |
1424 | 8.22k | .i4_num_tile_cols, /* Number of Col Tiles */ |
1425 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1426 | 8.22k | space_for_mem_in_enc_grp); |
1427 | 8.22k | } |
1428 | | |
1429 | 16.4k | for(ctr = 0; ctr < i4_num_enc_loop_frm_pllel; ctr++) |
1430 | 8.22k | { |
1431 | | /* --- Prev. frame EncLoop Done Dep Mngr Frm-Frm Mem requests -- */ |
1432 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1433 | 8.22k | &ps_memtab[total_memtabs_used], |
1434 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1435 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1436 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1437 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1438 | 8.22k | space_for_mem_in_enc_grp); |
1439 | 8.22k | } |
1440 | | /* --- Prev. frame EncLoop Done for re-encode Dep Mngr Frm-Frm Mem requests -- */ |
1441 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1442 | 8.22k | &ps_memtab[total_memtabs_used], |
1443 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1444 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1445 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1446 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1447 | 8.22k | space_for_mem_in_enc_grp); |
1448 | 16.4k | for(ctr = 0; ctr < i4_num_me_frm_pllel; ctr++) |
1449 | 8.22k | { |
1450 | | /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem requests -- */ |
1451 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1452 | 8.22k | &ps_memtab[total_memtabs_used], |
1453 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1454 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1455 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1456 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1457 | 8.22k | space_for_mem_in_enc_grp); |
1458 | 8.22k | } |
1459 | | |
1460 | | /* --- Prev. frame PreEnc L1 Done Dep Mngr Frm-Frm Mem requests -- */ |
1461 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1462 | 8.22k | &ps_memtab[total_memtabs_used], |
1463 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1464 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1465 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1466 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1467 | 8.22k | space_for_mem_in_enc_grp); |
1468 | | |
1469 | | /* --- Prev. frame PreEnc HME Done Dep Mngr Frm-Frm Mem requests -- */ |
1470 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1471 | 8.22k | &ps_memtab[total_memtabs_used], |
1472 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1473 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1474 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1475 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1476 | 8.22k | space_for_mem_in_enc_grp); |
1477 | | |
1478 | | /* --- Prev. frame PreEnc L0 Done Dep Mngr Frm-Frm Mem requests -- */ |
1479 | 8.22k | total_memtabs_used += ihevce_dmgr_get_mem_recs( |
1480 | 8.22k | &ps_memtab[total_memtabs_used], |
1481 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
1482 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
1483 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
1484 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1485 | 8.22k | space_for_mem_in_enc_grp); |
1486 | | |
1487 | | /* --- ME-Prev Recon Dep Mngr Row-Frm Mem requests -- */ |
1488 | 49.3k | for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++) |
1489 | 41.1k | { |
1490 | 41.1k | WORD32 i4_num_units = num_ctb_horz * num_ctb_vert; |
1491 | | |
1492 | 41.1k | total_memtabs_used += ihevce_dmgr_map_get_mem_recs( |
1493 | 41.1k | &ps_memtab[total_memtabs_used], |
1494 | 41.1k | i4_num_units, |
1495 | 41.1k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1496 | 41.1k | space_for_mem_in_enc_grp); |
1497 | 41.1k | } |
1498 | 8.22k | } |
1499 | | |
1500 | | /* ----- allocate memory as per requests ---- */ |
1501 | | |
1502 | | /* check on memtabs requested v/s memtabs used */ |
1503 | | //ittiam : should put an assert |
1504 | | |
1505 | | //ASSERT(total_memtabs_used == total_memtabs_req); |
1506 | | |
1507 | 7.24M | for(ctr = 0; ctr < total_memtabs_used; ctr++) |
1508 | 7.23M | { |
1509 | 7.23M | UWORD8 *pu1_mem = NULL; |
1510 | 7.23M | ps_intrf_ctxt->ihevce_mem_alloc( |
1511 | 7.23M | ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->ps_stat_prms->s_sys_api, &ps_memtab[ctr]); |
1512 | | |
1513 | 7.23M | pu1_mem = (UWORD8 *)ps_memtab[ctr].pv_base; |
1514 | | |
1515 | 7.23M | if(NULL == pu1_mem) |
1516 | 0 | { |
1517 | 0 | ps_intrf_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
1518 | 0 | return; |
1519 | 0 | } |
1520 | 7.23M | } |
1521 | | |
1522 | | /* --------------------------------------------------------------------- */ |
1523 | | /* --------- Initialisation of Modules & System memory ----------------- */ |
1524 | | /* --------------------------------------------------------------------- */ |
1525 | | |
1526 | | /* store the final allocated memtabs */ |
1527 | 8.22k | ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs = total_memtabs_used; |
1528 | 8.22k | ps_enc_ctxt->s_mem_mngr.ps_create_memtab = ps_memtab; |
1529 | | |
1530 | | /* ---------- Tiles Mem init --------- */ |
1531 | 8.22k | ps_enc_ctxt->ps_tile_params_base = (ihevce_tile_params_t *)ihevce_tiles_mem_init( |
1532 | 8.22k | ps_memtab, ps_enc_ctxt->ps_stat_prms, ps_enc_ctxt, i4_resolution_id); |
1533 | | |
1534 | 8.22k | ps_memtab += ihevce_tiles_get_num_mem_recs(); |
1535 | | |
1536 | | /* ---------- Enc loop Mem init --------- */ |
1537 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_enc_loop_ctxt = ihevce_enc_loop_init( |
1538 | 8.22k | ps_memtab, |
1539 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1540 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1541 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
1542 | 8.22k | &ps_enc_ctxt->s_func_selector, |
1543 | 8.22k | &ps_enc_ctxt->s_rc_quant, |
1544 | 8.22k | ps_enc_ctxt->ps_tile_params_base, |
1545 | 8.22k | i4_resolution_id, |
1546 | 8.22k | i4_num_enc_loop_frm_pllel, |
1547 | 8.22k | ps_enc_ctxt->u1_is_popcnt_available); |
1548 | | |
1549 | 8.22k | ps_memtab += ihevce_enc_loop_get_num_mem_recs(i4_num_bitrate_inst, i4_num_enc_loop_frm_pllel); |
1550 | | /* ---------- ME Mem init --------------- */ |
1551 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_me_ctxt = ihevce_me_init( |
1552 | 8.22k | ps_memtab, |
1553 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1554 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
1555 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
1556 | 8.22k | &ps_enc_ctxt->s_rc_quant, |
1557 | 8.22k | (void *)ps_enc_ctxt->ps_tile_params_base, |
1558 | 8.22k | i4_resolution_id, |
1559 | 8.22k | i4_num_me_frm_pllel, |
1560 | 8.22k | ps_enc_ctxt->u1_is_popcnt_available); |
1561 | | |
1562 | 8.22k | ps_memtab += ihevce_me_get_num_mem_recs(i4_num_me_frm_pllel); |
1563 | | |
1564 | | /* ---------- Coarse ME Mem init --------------- */ |
1565 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_coarse_me_ctxt = ihevce_coarse_me_init( |
1566 | 8.22k | ps_memtab, |
1567 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1568 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1569 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
1570 | 8.22k | i4_resolution_id, |
1571 | 8.22k | ps_enc_ctxt->u1_is_popcnt_available); |
1572 | | |
1573 | 8.22k | ps_memtab += ihevce_coarse_me_get_num_mem_recs(); |
1574 | | /* ---------- IPE Mem init -------------- */ |
1575 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_ipe_ctxt = ihevce_ipe_init( |
1576 | 8.22k | ps_memtab, |
1577 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1578 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1579 | 8.22k | ps_enc_ctxt->i4_ref_mbr_id, |
1580 | 8.22k | &ps_enc_ctxt->s_func_selector, |
1581 | 8.22k | &ps_enc_ctxt->s_rc_quant, |
1582 | 8.22k | i4_resolution_id, |
1583 | 8.22k | ps_enc_ctxt->u1_is_popcnt_available); |
1584 | | |
1585 | 8.22k | ps_memtab += ihevce_ipe_get_num_mem_recs(); |
1586 | | |
1587 | 8.22k | ps_enc_ctxt->s_rc_quant.i2_max_qp = 51; |
1588 | 8.22k | ps_enc_ctxt->s_rc_quant.i2_min_qp = 0; |
1589 | 8.22k | ps_enc_ctxt->s_rc_quant.i1_qp_offset = 0; |
1590 | 8.22k | ps_enc_ctxt->s_rc_quant.i2_max_qscale = |
1591 | 8.22k | 228 << 3; // Q3 format is mantained for accuarate calc at lower qp |
1592 | 8.22k | ps_enc_ctxt->s_rc_quant.i2_min_qscale = 1; |
1593 | | |
1594 | | /* ---------- ECD Mem init -------------- */ |
1595 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1596 | 8.22k | { |
1597 | 8.22k | ps_enc_ctxt->s_module_ctxt.apv_ent_cod_ctxt[i] = ihevce_entropy_init( |
1598 | 8.22k | ps_memtab, |
1599 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1600 | 8.22k | (void *)ps_enc_ctxt->ps_tile_params_base, |
1601 | 8.22k | i4_resolution_id); |
1602 | | |
1603 | 8.22k | ps_memtab += ihevce_entropy_get_num_mem_recs(); |
1604 | 8.22k | } |
1605 | | |
1606 | | /* ---------- LAP Mem init--------------- */ |
1607 | 8.22k | if(i4_resolution_id == 0) |
1608 | 8.22k | { |
1609 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_lap_ctxt = |
1610 | 8.22k | ihevce_lap_init(ps_memtab, &ps_enc_ctxt->s_lap_stat_prms, ps_enc_ctxt->ps_stat_prms); |
1611 | | |
1612 | 8.22k | ps_memtab += ihevce_lap_get_num_mem_recs(); |
1613 | 8.22k | } |
1614 | | /*-----------DECOMPOSITION PRE INTRA init----*/ |
1615 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_decomp_pre_intra_ctxt = ihevce_decomp_pre_intra_init( |
1616 | 8.22k | ps_memtab, |
1617 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1618 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
1619 | 8.22k | &ps_enc_ctxt->s_func_selector, |
1620 | 8.22k | i4_resolution_id, |
1621 | 8.22k | ps_enc_ctxt->u1_is_popcnt_available); |
1622 | | |
1623 | 8.22k | ps_memtab += ihevce_decomp_pre_intra_get_num_mem_recs(); |
1624 | | |
1625 | | /* ---------- RC Mem init --------------- */ |
1626 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1627 | 8.22k | { |
1628 | | /*swaping of buf_id for 0th and reference bitrate location, as encoder |
1629 | | assumes always 0th loc for reference bitrate and app must receive in |
1630 | | the configured order*/ |
1631 | 8.22k | if(i == 0) |
1632 | 8.22k | { |
1633 | 8.22k | ps_enc_ctxt->s_module_ctxt.apv_rc_ctxt[i] = ihevce_rc_mem_init( |
1634 | 8.22k | ps_memtab, |
1635 | 8.22k | ps_enc_ctxt->ps_stat_prms, |
1636 | 8.22k | ps_enc_ctxt->i4_ref_mbr_id, |
1637 | 8.22k | &ps_enc_ctxt->s_rc_quant, |
1638 | 8.22k | ps_enc_ctxt->i4_resolution_id, |
1639 | 8.22k | ps_enc_ctxt->i4_look_ahead_frames_in_first_pass); |
1640 | 8.22k | } |
1641 | 0 | else if(i == ps_enc_ctxt->i4_ref_mbr_id) |
1642 | 0 | { |
1643 | 0 | ps_enc_ctxt->s_module_ctxt.apv_rc_ctxt[i] = ihevce_rc_mem_init( |
1644 | 0 | ps_memtab, |
1645 | 0 | ps_enc_ctxt->ps_stat_prms, |
1646 | 0 | 0, |
1647 | 0 | &ps_enc_ctxt->s_rc_quant, |
1648 | 0 | ps_enc_ctxt->i4_resolution_id, |
1649 | 0 | ps_enc_ctxt->i4_look_ahead_frames_in_first_pass); |
1650 | 0 | } |
1651 | 0 | else |
1652 | 0 | { |
1653 | 0 | ps_enc_ctxt->s_module_ctxt.apv_rc_ctxt[i] = ihevce_rc_mem_init( |
1654 | 0 | ps_memtab, |
1655 | 0 | ps_enc_ctxt->ps_stat_prms, |
1656 | 0 | i, |
1657 | 0 | &ps_enc_ctxt->s_rc_quant, |
1658 | 0 | ps_enc_ctxt->i4_resolution_id, |
1659 | 0 | ps_enc_ctxt->i4_look_ahead_frames_in_first_pass); |
1660 | 0 | } |
1661 | 8.22k | ps_memtab += ihevce_rc_get_num_mem_recs(); |
1662 | 8.22k | } |
1663 | | |
1664 | | /* ---------- System Mem init ----------- */ |
1665 | 8.22k | { |
1666 | 8.22k | recon_pic_buf_t **pps_pic_bufs[IHEVCE_MAX_NUM_BITRATES]; |
1667 | 8.22k | recon_pic_buf_t *ps_pic_bufs[IHEVCE_MAX_NUM_BITRATES]; |
1668 | 8.22k | void *pv_recon_buf[IHEVCE_MAX_NUM_BITRATES]; |
1669 | 8.22k | #if(SRC_PADDING_FOR_TRAQO || ENABLE_SSD_CALC_RC) |
1670 | 8.22k | void *pv_recon_buf_source[IHEVCE_MAX_NUM_BITRATES] = { NULL }; |
1671 | 8.22k | #endif |
1672 | 8.22k | void *pv_uv_recon_buf[IHEVCE_MAX_NUM_BITRATES]; |
1673 | 8.22k | UWORD8 *pu1_subpel_buf; |
1674 | 8.22k | pu_col_mv_t *ps_col_mv; |
1675 | 8.22k | UWORD8 *pu1_col_mv_map; |
1676 | 8.22k | UWORD16 *pu2_col_num_pu_map; |
1677 | 8.22k | UWORD32 *pu4_col_mv_off; |
1678 | 8.22k | WORD32 luma_frm_size; |
1679 | 8.22k | WORD32 recon_stride; /* stride for Y and UV(interleave) */ |
1680 | 8.22k | WORD32 luma_frm_height; /* including padding */ |
1681 | 8.22k | WORD32 num_pu_in_frm; |
1682 | | |
1683 | | /* pps tile memory */ |
1684 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1685 | 8.22k | { |
1686 | 8.22k | ps_enc_ctxt->as_pps[i].ps_tile = (tile_t *)ps_memtab->pv_base; |
1687 | 8.22k | } |
1688 | | |
1689 | 8.22k | ps_memtab++; /* increment the memtabs */ |
1690 | | |
1691 | | /* recon picture buffer pointer array */ |
1692 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1693 | 8.22k | { |
1694 | 8.22k | pps_pic_bufs[i] = (recon_pic_buf_t **)ps_memtab->pv_base; |
1695 | 8.22k | ps_memtab++; /* increment the memtabs */ |
1696 | 8.22k | } |
1697 | | |
1698 | | /* recon picture buffers structures */ |
1699 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1700 | 8.22k | { |
1701 | 8.22k | ps_pic_bufs[i] = (recon_pic_buf_t *)ps_memtab->pv_base; |
1702 | 8.22k | ps_memtab++; /* increment the memtabs */ |
1703 | 8.22k | } |
1704 | | |
1705 | | /* reference/recon picture buffers */ |
1706 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1707 | 8.22k | { |
1708 | 8.22k | pv_recon_buf[i] = ps_memtab->pv_base; |
1709 | 8.22k | ps_memtab++; /* increment the memtabs */ |
1710 | 8.22k | } |
1711 | | /* reference/recon picture subpel planes */ |
1712 | 8.22k | pu1_subpel_buf = (UWORD8 *)ps_memtab->pv_base; |
1713 | | /* increment the memtabs */ |
1714 | 8.22k | ps_memtab++; |
1715 | | /* reference colocated MV bank */ |
1716 | 8.22k | ps_col_mv = (pu_col_mv_t *)ps_memtab->pv_base; |
1717 | | /* increment the memtabs */ |
1718 | 8.22k | ps_memtab++; |
1719 | | |
1720 | | /* reference colocated MV bank map */ |
1721 | 8.22k | pu1_col_mv_map = (UWORD8 *)ps_memtab->pv_base; |
1722 | | /* increment the memtabs */ |
1723 | 8.22k | ps_memtab++; |
1724 | | |
1725 | | /* reference collocated MV bank map offsets map */ |
1726 | 8.22k | pu2_col_num_pu_map = (UWORD16 *)ps_memtab->pv_base; |
1727 | | /* increment the memtabs */ |
1728 | 8.22k | ps_memtab++; |
1729 | | |
1730 | | /* reference colocated MV bank ctb offset */ |
1731 | 8.22k | pu4_col_mv_off = (UWORD32 *)ps_memtab->pv_base; |
1732 | | /* increment the memtabs */ |
1733 | 8.22k | ps_memtab++; |
1734 | | |
1735 | | /* compute the stride and frame height after accounting for padding */ |
1736 | 8.22k | recon_stride = ((num_ctb_horz * ctb_size) + (PAD_HORZ << 1)); |
1737 | 8.22k | luma_frm_height = ((num_ctb_vert * ctb_size) + (PAD_VERT << 1)); |
1738 | 8.22k | luma_frm_size = recon_stride * luma_frm_height; |
1739 | | /* The subpel buffer is also incremented to take care of padding */ |
1740 | | /* Both luma and subpel buffer use same stride */ |
1741 | 8.22k | pu1_subpel_buf += (recon_stride * PAD_VERT); |
1742 | 8.22k | pu1_subpel_buf += PAD_HORZ; |
1743 | | |
1744 | | /* Keep memory for an extra CTB at the right and bottom of frame. |
1745 | | This extra space is needed by dist-encoding and unused in non-dist-encoding */ |
1746 | 8.22k | num_pu_in_frm = (num_ctb_horz + 1) * num_pu_in_ctb * (num_ctb_vert + 1); |
1747 | | |
1748 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
1749 | 8.22k | { |
1750 | 8.22k | pv_uv_recon_buf[i] = pv_recon_buf[i]; |
1751 | | |
1752 | | /* increment the recon buffer to take care of padding */ |
1753 | 8.22k | pv_recon_buf[i] = (UWORD8 *)pv_recon_buf[i] + (recon_stride * PAD_VERT) + PAD_HORZ; |
1754 | | |
1755 | | /* chroma buffer starts at the end of luma buffer */ |
1756 | 8.22k | pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + luma_frm_size; |
1757 | 8.22k | if(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth == 8) |
1758 | 8.22k | { |
1759 | | /* increment the chroma recon buffer to take care of padding */ |
1760 | | /* vert padding halved but horiz is same due to uv interleave */ |
1761 | 8.22k | pv_uv_recon_buf[i] = |
1762 | 8.22k | (UWORD8 *)pv_uv_recon_buf[i] + (recon_stride * (PAD_VERT >> 1)) + |
1763 | 8.22k | ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) |
1764 | 8.22k | ? (recon_stride * (PAD_VERT >> 1)) |
1765 | 8.22k | : 0); |
1766 | 8.22k | pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + PAD_HORZ; |
1767 | 8.22k | } |
1768 | | |
1769 | | /* loop to initialise all the memories */ |
1770 | | /* initialize recon buffers */ |
1771 | | /* only YUV buffers are allocated for each bit-rate instnaces. |
1772 | | Subpel buffers and col buffers are made NULL for auxiliary bit-rate instances, |
1773 | | since ME and IPE happens only for reference bit-rate instnace */ |
1774 | 49.3k | for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++) |
1775 | 41.1k | { |
1776 | 41.1k | pps_pic_bufs[i][ctr] = |
1777 | 41.1k | ps_pic_bufs[i]; //check the index of pps [i] should be first or last index?!! |
1778 | | |
1779 | 41.1k | ps_pic_bufs[i]->s_yuv_buf_desc.i4_size = sizeof(iv_enc_yuv_buf_t); |
1780 | 41.1k | ps_pic_bufs[i]->s_yuv_buf_desc.pv_y_buf = pv_recon_buf[i]; |
1781 | 41.1k | ps_pic_bufs[i]->s_yuv_buf_desc.pv_v_buf = NULL; |
1782 | 41.1k | { |
1783 | 41.1k | ps_pic_bufs[i]->s_yuv_buf_desc.pv_u_buf = pv_uv_recon_buf[i]; |
1784 | 41.1k | } |
1785 | 41.1k | ps_pic_bufs[i]->apu1_y_sub_pel_planes[0] = ((i == 0) ? pu1_subpel_buf : NULL); |
1786 | 41.1k | ps_pic_bufs[i]->apu1_y_sub_pel_planes[1] = |
1787 | 41.1k | ((i == 0) ? (pu1_subpel_buf + luma_frm_size) : NULL); |
1788 | 41.1k | ps_pic_bufs[i]->apu1_y_sub_pel_planes[2] = |
1789 | 41.1k | ((i == 0) ? (pu1_subpel_buf + (luma_frm_size * 2)) : NULL); |
1790 | 41.1k | ps_pic_bufs[i]->ps_frm_col_mv = ps_col_mv; |
1791 | 41.1k | ps_pic_bufs[i]->pu1_frm_pu_map = pu1_col_mv_map; |
1792 | 41.1k | ps_pic_bufs[i]->pu2_num_pu_map = pu2_col_num_pu_map; |
1793 | 41.1k | ps_pic_bufs[i]->pu4_pu_off = pu4_col_mv_off; |
1794 | 41.1k | ps_pic_bufs[i]->i4_is_free = 1; |
1795 | 41.1k | ps_pic_bufs[i]->i4_poc = -1; |
1796 | 41.1k | ps_pic_bufs[i]->i4_display_num = -1; |
1797 | 41.1k | ps_pic_bufs[i]->i4_buf_id = ctr; |
1798 | | |
1799 | | /* frame level buff increments */ |
1800 | 41.1k | ps_col_mv += num_pu_in_frm; |
1801 | 41.1k | pu1_col_mv_map += num_pu_in_frm; |
1802 | 41.1k | pu2_col_num_pu_map += (num_ctb_horz * num_ctb_vert); |
1803 | 41.1k | pu4_col_mv_off += (num_ctb_horz * num_ctb_vert); |
1804 | | |
1805 | 41.1k | if(ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) |
1806 | 0 | { |
1807 | 0 | pv_recon_buf[i] = (UWORD8 *)pv_recon_buf[i] + (luma_frm_size << 1); |
1808 | 0 | pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + (luma_frm_size << 1); |
1809 | 0 | } |
1810 | 41.1k | else |
1811 | 41.1k | { |
1812 | 41.1k | pv_recon_buf[i] = (UWORD8 *)pv_recon_buf[i] + ((3 * luma_frm_size) >> 1); |
1813 | 41.1k | pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + ((3 * luma_frm_size) >> 1); |
1814 | 41.1k | } |
1815 | 41.1k | pu1_subpel_buf += ((3 + L0ME_IN_OPENLOOP_MODE) * luma_frm_size); /* 3 planes */ |
1816 | 41.1k | ps_pic_bufs[i]++; |
1817 | 41.1k | } //ctr ends |
1818 | | |
1819 | | /* store the queue pointer and num buffs to context */ |
1820 | 8.22k | ps_enc_ctxt->pps_recon_buf_q[i] = pps_pic_bufs[i]; |
1821 | 8.22k | ps_enc_ctxt->ai4_num_buf_recon_q[i] = (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); |
1822 | | |
1823 | 8.22k | } //bitrate ctr ends |
1824 | | |
1825 | 8.22k | } //end of system memory init |
1826 | | |
1827 | | /* Pre encode group recon buffer containier NO Buffers will be allocated / used */ |
1828 | 8.22k | { |
1829 | 8.22k | recon_pic_buf_t *ps_pic_bufs; |
1830 | | |
1831 | | /* recon picture buffer pointer array */ |
1832 | 8.22k | pps_pre_enc_pic_bufs = (recon_pic_buf_t **)ps_memtab->pv_base; |
1833 | | /* increment the memtabs */ |
1834 | 8.22k | ps_memtab++; |
1835 | | |
1836 | | /* recon picture buffers structures */ |
1837 | 8.22k | ps_pic_bufs = (recon_pic_buf_t *)ps_memtab->pv_base; |
1838 | | /* increment the memtabs */ |
1839 | 8.22k | ps_memtab++; |
1840 | | |
1841 | | /* loop to initialise all the memories */ |
1842 | 49.3k | for(ctr = 0; ctr < (max_num_ref_pics + 1); ctr++) |
1843 | 41.1k | { |
1844 | 41.1k | pps_pre_enc_pic_bufs[ctr] = ps_pic_bufs; |
1845 | | |
1846 | 41.1k | ps_pic_bufs->s_yuv_buf_desc.i4_size = sizeof(iv_enc_yuv_buf_t); |
1847 | 41.1k | ps_pic_bufs->s_yuv_buf_desc.pv_y_buf = NULL; |
1848 | 41.1k | ps_pic_bufs->s_yuv_buf_desc.pv_u_buf = NULL; |
1849 | 41.1k | ps_pic_bufs->s_yuv_buf_desc.pv_v_buf = NULL; |
1850 | 41.1k | ps_pic_bufs->apu1_y_sub_pel_planes[0] = NULL; |
1851 | 41.1k | ps_pic_bufs->apu1_y_sub_pel_planes[1] = NULL; |
1852 | 41.1k | ps_pic_bufs->apu1_y_sub_pel_planes[2] = NULL; |
1853 | 41.1k | ps_pic_bufs->ps_frm_col_mv = NULL; |
1854 | 41.1k | ps_pic_bufs->pu1_frm_pu_map = NULL; |
1855 | 41.1k | ps_pic_bufs->pu2_num_pu_map = NULL; |
1856 | 41.1k | ps_pic_bufs->pu4_pu_off = NULL; |
1857 | 41.1k | ps_pic_bufs->i4_is_free = 1; |
1858 | 41.1k | ps_pic_bufs->i4_poc = -1; |
1859 | 41.1k | ps_pic_bufs->i4_buf_id = ctr; |
1860 | | |
1861 | | /* frame level buff increments */ |
1862 | 41.1k | ps_pic_bufs++; |
1863 | 41.1k | } |
1864 | | |
1865 | | /* store the queue pointer and num buffs to context */ |
1866 | 8.22k | ps_enc_ctxt->pps_pre_enc_recon_buf_q = pps_pre_enc_pic_bufs; |
1867 | 8.22k | ps_enc_ctxt->i4_pre_enc_num_buf_recon_q = (max_num_ref_pics + 1); |
1868 | 8.22k | } |
1869 | | |
1870 | | /* Frame level buffers and Que between pre-encode & encode */ |
1871 | 8.22k | { |
1872 | 8.22k | pre_enc_me_ctxt_t *ps_pre_enc_bufs; |
1873 | 8.22k | pre_enc_L0_ipe_encloop_ctxt_t *ps_L0_ipe_enc_bufs; |
1874 | 8.22k | ihevce_lap_enc_buf_t *ps_lap_enc_input_buf; |
1875 | 8.22k | ctb_analyse_t *ps_ctb_analyse; |
1876 | 8.22k | UWORD8 *pu1_me_lyr_ctxt; |
1877 | 8.22k | UWORD8 *pu1_me_lyr_bank_ctxt; |
1878 | 8.22k | UWORD8 *pu1_mv_bank; |
1879 | 8.22k | UWORD8 *pu1_ref_idx_bank; |
1880 | 8.22k | double *plf_intra_8x8_cost; |
1881 | 8.22k | ipe_l0_ctb_analyse_for_me_t *ps_ipe_analyse_ctb; |
1882 | 8.22k | ihevce_ed_ctb_l1_t *ps_ed_ctb_l1; |
1883 | 8.22k | ihevce_ed_blk_t *ps_layer1_buf; |
1884 | 8.22k | ihevce_ed_blk_t *ps_layer2_buf; |
1885 | 8.22k | UWORD8 *pu1_lap_input_yuv_buf[4]; |
1886 | 8.22k | UWORD8 *pu1_input_synch_ctrl_cmd; |
1887 | 8.22k | WORD32 i4_count = 0; |
1888 | | /*initialize the memory for input buffer*/ |
1889 | 8.22k | { |
1890 | 16.4k | for(i4_count = 0; i4_count < i4_total_queues; i4_count++) |
1891 | 8.22k | { |
1892 | 8.22k | pu1_lap_input_yuv_buf[i4_count] = (UWORD8 *)ps_memtab->pv_base; |
1893 | | /* increment the memtabs */ |
1894 | 8.22k | ps_memtab++; |
1895 | 8.22k | } |
1896 | 8.22k | pps_lap_enc_input_bufs = (ihevce_lap_enc_buf_t **)ps_memtab->pv_base; |
1897 | | /* increment the memtabs */ |
1898 | 8.22k | ps_memtab++; |
1899 | | |
1900 | | /*memory for the input buffer structure*/ |
1901 | 8.22k | ps_lap_enc_input_buf = (ihevce_lap_enc_buf_t *)ps_memtab->pv_base; |
1902 | 8.22k | ps_memtab++; |
1903 | | |
1904 | 8.22k | pu1_input_synch_ctrl_cmd = (UWORD8 *)ps_memtab->pv_base; |
1905 | 8.22k | ps_memtab++; |
1906 | 8.22k | } |
1907 | | /* pre encode /encode coding buffer pointer array */ |
1908 | 8.22k | pps_pre_enc_bufs = (pre_enc_me_ctxt_t **)ps_memtab->pv_base; |
1909 | | /* increment the memtabs */ |
1910 | 8.22k | ps_memtab++; |
1911 | | |
1912 | | /* pre encode /encode buffer structure */ |
1913 | 8.22k | ps_pre_enc_bufs = (pre_enc_me_ctxt_t *)ps_memtab->pv_base; |
1914 | | /* increment the memtabs */ |
1915 | 8.22k | ps_memtab++; |
1916 | | |
1917 | | /* Pre-encode L0 IPE output to ME buffer pointer */ |
1918 | 8.22k | pps_L0_ipe_enc_bufs = (pre_enc_L0_ipe_encloop_ctxt_t **)ps_memtab->pv_base; |
1919 | | /* increment the memtabs */ |
1920 | 8.22k | ps_memtab++; |
1921 | | |
1922 | | /* Pre-encode L0 IPE output to ME buffer */ |
1923 | 8.22k | ps_L0_ipe_enc_bufs = (pre_enc_L0_ipe_encloop_ctxt_t *)ps_memtab->pv_base; |
1924 | | /* increment the memtabs */ |
1925 | 8.22k | ps_memtab++; |
1926 | | |
1927 | | /* CTB analyse Frame level */ |
1928 | 8.22k | ps_ctb_analyse = (ctb_analyse_t *)ps_memtab->pv_base; |
1929 | | /* increment the memtabs */ |
1930 | 8.22k | ps_memtab++; |
1931 | | |
1932 | | /* ME layer ctxt Frame level */ |
1933 | 8.22k | pu1_me_lyr_ctxt = (UWORD8 *)ps_memtab->pv_base; |
1934 | | /* increment the memtabs */ |
1935 | 8.22k | ps_memtab++; |
1936 | | |
1937 | | /* ME layer bank ctxt Frame level */ |
1938 | 8.22k | pu1_me_lyr_bank_ctxt = (UWORD8 *)ps_memtab->pv_base; |
1939 | | /* increment the memtabs */ |
1940 | 8.22k | ps_memtab++; |
1941 | | |
1942 | | /* ME layer MV bank Frame level */ |
1943 | 8.22k | pu1_mv_bank = (UWORD8 *)ps_memtab->pv_base; |
1944 | | /* increment the memtabs */ |
1945 | 8.22k | ps_memtab++; |
1946 | | |
1947 | | /* ME layer ref idx bank Frame level */ |
1948 | 8.22k | pu1_ref_idx_bank = (UWORD8 *)ps_memtab->pv_base; |
1949 | | /* increment the memtabs */ |
1950 | 8.22k | ps_memtab++; |
1951 | | /* 8x8 intra costs for entire frame */ |
1952 | 8.22k | plf_intra_8x8_cost = (double *)ps_memtab->pv_base; |
1953 | 8.22k | ps_memtab++; |
1954 | | |
1955 | | /* ctb intra costs and modes for entire frame */ |
1956 | 8.22k | ps_ipe_analyse_ctb = (ipe_l0_ctb_analyse_for_me_t *)ps_memtab->pv_base; |
1957 | 8.22k | ps_memtab++; |
1958 | | |
1959 | | /*Contains ctb level information at pre-intra stage */ |
1960 | 8.22k | ps_ed_ctb_l1 = (ihevce_ed_ctb_l1_t *)ps_memtab->pv_base; |
1961 | 8.22k | ps_memtab++; |
1962 | | |
1963 | | /* Layer L1 buf */ |
1964 | 8.22k | ps_layer1_buf = (ihevce_ed_blk_t *)ps_memtab->pv_base; |
1965 | | /* increment the memtabs */ |
1966 | 8.22k | ps_memtab++; |
1967 | | |
1968 | | /* Layer2 buf */ |
1969 | 8.22k | ps_layer2_buf = (ihevce_ed_blk_t *)ps_memtab->pv_base; |
1970 | | /* increment the memtabs */ |
1971 | 8.22k | ps_memtab++; |
1972 | | |
1973 | | /* loop to initialise all the memories*/ |
1974 | | /*mrs: assign individual input yuv frame pointers here*/ |
1975 | | |
1976 | 8.22k | i4_count = 0; |
1977 | | /* loop to initialise the buffer pointer */ |
1978 | 31.0k | for(ctr = 0; ctr < num_input_buf_per_queue; ctr++) |
1979 | 22.7k | { |
1980 | 22.7k | pps_lap_enc_input_bufs[ctr] = &ps_lap_enc_input_buf[ctr]; |
1981 | | |
1982 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_input_buf.i4_size = sizeof(iv_input_data_ctrl_buffs_t); |
1983 | | |
1984 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_input_buf.pv_synch_ctrl_bufs = pu1_input_synch_ctrl_cmd; |
1985 | | |
1986 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_input_buf.s_input_buf.i4_size = sizeof(iv_yuv_buf_t); |
1987 | | |
1988 | 22.7k | pu1_input_synch_ctrl_cmd += ENC_COMMAND_BUFF_SIZE; |
1989 | | /*pointer to i/p buf initialised to null in case of run time allocation*/ |
1990 | | |
1991 | 22.7k | { |
1992 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_y_buf = |
1993 | 22.7k | pu1_lap_input_yuv_buf[i4_count]; |
1994 | | |
1995 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_u_buf = |
1996 | 22.7k | pu1_lap_input_yuv_buf[i4_count] + i4_luma_min_size; |
1997 | | |
1998 | 22.7k | pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_v_buf = |
1999 | 22.7k | NULL; /*since yuv 420 format*/ |
2000 | | |
2001 | 22.7k | pu1_lap_input_yuv_buf[i4_count] += i4_yuv_min_size; |
2002 | | |
2003 | 22.7k | if(((ctr + 1) % MAX_QUEUE) == 0) |
2004 | 0 | i4_count++; |
2005 | 22.7k | } |
2006 | 22.7k | } |
2007 | 24.6k | for(ctr = 0; ctr < num_bufs_preenc_me_que; ctr++) |
2008 | 16.4k | { |
2009 | 16.4k | pps_pre_enc_bufs[ctr] = ps_pre_enc_bufs; |
2010 | | |
2011 | 16.4k | ps_pre_enc_bufs->ps_ctb_analyse = ps_ctb_analyse; |
2012 | 16.4k | ps_pre_enc_bufs->pv_me_lyr_ctxt = (void *)pu1_me_lyr_ctxt; |
2013 | 16.4k | ps_pre_enc_bufs->pv_me_lyr_bnk_ctxt = (void *)pu1_me_lyr_bank_ctxt; |
2014 | 16.4k | ps_pre_enc_bufs->pv_me_mv_bank = (void *)pu1_mv_bank; |
2015 | 16.4k | ps_pre_enc_bufs->pv_me_ref_idx = (void *)pu1_ref_idx_bank; |
2016 | 16.4k | ps_pre_enc_bufs->ps_layer1_buf = ps_layer1_buf; |
2017 | 16.4k | ps_pre_enc_bufs->ps_layer2_buf = ps_layer2_buf; |
2018 | 16.4k | ps_pre_enc_bufs->ps_ed_ctb_l1 = ps_ed_ctb_l1; |
2019 | 16.4k | ps_pre_enc_bufs->plf_intra_8x8_cost = plf_intra_8x8_cost; |
2020 | | |
2021 | 16.4k | ps_ctb_analyse += num_ctb_horz * num_ctb_vert; |
2022 | 16.4k | pu1_me_lyr_ctxt += sizeof(layer_ctxt_t); |
2023 | 16.4k | pu1_me_lyr_bank_ctxt += sizeof(layer_mv_t); |
2024 | 16.4k | pu1_mv_bank += mv_bank_size; |
2025 | 16.4k | pu1_ref_idx_bank += ref_idx_bank_size; |
2026 | 16.4k | plf_intra_8x8_cost += |
2027 | 16.4k | (((num_ctb_horz * ctb_size) >> 3) * ((num_ctb_vert * ctb_size) >> 3)); |
2028 | 16.4k | ps_ed_ctb_l1 += (a_ctb_align_wd[1] >> 5) * (a_ctb_align_ht[1] >> 5); |
2029 | 16.4k | ps_layer1_buf += (a_ctb_align_wd[1] >> 2) * (a_ctb_align_ht[1] >> 2); |
2030 | 16.4k | ps_layer2_buf += (a_ctb_align_wd[2] >> 2) * (a_ctb_align_ht[2] >> 2); |
2031 | 16.4k | ps_pre_enc_bufs++; |
2032 | 16.4k | } |
2033 | | |
2034 | 16.4k | for(ctr = 0; ctr < num_bufs_L0_ipe_enc; ctr++) |
2035 | 8.22k | { |
2036 | 8.22k | pps_L0_ipe_enc_bufs[ctr] = ps_L0_ipe_enc_bufs; |
2037 | 8.22k | ps_L0_ipe_enc_bufs->ps_ipe_analyse_ctb = ps_ipe_analyse_ctb; |
2038 | 8.22k | ps_ipe_analyse_ctb += num_ctb_horz * num_ctb_vert; |
2039 | 8.22k | ps_L0_ipe_enc_bufs++; |
2040 | 8.22k | } |
2041 | 8.22k | } |
2042 | | |
2043 | | /* Frame level que between ME and Enc rd-opt */ |
2044 | 8.22k | { |
2045 | 8.22k | me_enc_rdopt_ctxt_t *ps_me_enc_bufs; |
2046 | 8.22k | job_queue_t *ps_job_q_enc; |
2047 | 8.22k | me_ctb_data_t *ps_cur_ctb_me_data; |
2048 | 8.22k | cur_ctb_cu_tree_t *ps_cur_ctb_cu_tree; |
2049 | | |
2050 | | /* pre encode /encode coding buffer pointer array */ |
2051 | 8.22k | pps_me_enc_bufs = (me_enc_rdopt_ctxt_t **)ps_memtab->pv_base; |
2052 | | /* increment the memtabs */ |
2053 | 8.22k | ps_memtab++; |
2054 | | |
2055 | | /* pre encode /encode buffer structure */ |
2056 | 8.22k | ps_me_enc_bufs = (me_enc_rdopt_ctxt_t *)ps_memtab->pv_base; |
2057 | | /* increment the memtabs */ |
2058 | 8.22k | ps_memtab++; |
2059 | | |
2060 | | /*me and enc job queue memory */ |
2061 | 8.22k | ps_job_q_enc = (job_queue_t *)ps_memtab->pv_base; |
2062 | | /* increment the memtabs */ |
2063 | 8.22k | ps_memtab++; |
2064 | | |
2065 | | /*ctb me data memory*/ |
2066 | 8.22k | ps_cur_ctb_cu_tree = (cur_ctb_cu_tree_t *)ps_memtab->pv_base; |
2067 | | /* increment the memtabs */ |
2068 | 8.22k | ps_memtab++; |
2069 | | |
2070 | | /*ctb me data memory*/ |
2071 | 8.22k | ps_cur_ctb_me_data = (me_ctb_data_t *)ps_memtab->pv_base; |
2072 | | /* increment the memtabs */ |
2073 | 8.22k | ps_memtab++; |
2074 | | |
2075 | | /* loop to initialise all the memories */ |
2076 | 16.4k | for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++) |
2077 | 8.22k | { |
2078 | 8.22k | pps_me_enc_bufs[ctr] = ps_me_enc_bufs; |
2079 | | |
2080 | 8.22k | ps_me_enc_bufs->ps_job_q_enc = ps_job_q_enc; |
2081 | 8.22k | ps_me_enc_bufs->ps_cur_ctb_cu_tree = ps_cur_ctb_cu_tree; |
2082 | 8.22k | ps_me_enc_bufs->ps_cur_ctb_me_data = ps_cur_ctb_me_data; |
2083 | | |
2084 | 8.22k | ps_job_q_enc += (MAX_NUM_VERT_UNITS_FRM * NUM_ENC_JOBS_QUES); |
2085 | | /* In tile case, based on the number of column tiles, |
2086 | | increment jobQ per column tile */ |
2087 | 8.22k | if(1 == ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_tiles_enabled_flag) |
2088 | 0 | { |
2089 | 0 | WORD32 col_tile_ctr; |
2090 | 0 | for(col_tile_ctr = 1; |
2091 | 0 | col_tile_ctr < ps_enc_ctxt->ps_stat_prms->s_app_tile_params.i4_num_tile_cols; |
2092 | 0 | col_tile_ctr++) |
2093 | 0 | { |
2094 | 0 | ps_job_q_enc += (MAX_NUM_VERT_UNITS_FRM * NUM_ENC_JOBS_QUES); |
2095 | 0 | } |
2096 | 0 | } |
2097 | | |
2098 | 8.22k | ps_cur_ctb_cu_tree += (num_ctb_horz * MAX_NUM_NODES_CU_TREE * num_ctb_vert); |
2099 | 8.22k | ps_cur_ctb_me_data += (num_ctb_horz * num_ctb_vert); |
2100 | | |
2101 | 8.22k | ps_me_enc_bufs++; |
2102 | 8.22k | } |
2103 | 8.22k | } |
2104 | | /* Frame level Que between frame process & entropy */ |
2105 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2106 | 8.22k | { |
2107 | 8.22k | frm_proc_ent_cod_ctxt_t *ps_frmp_ent_bufs; |
2108 | 8.22k | ctb_enc_loop_out_t *ps_ctb; |
2109 | 8.22k | cu_enc_loop_out_t *ps_cu; |
2110 | 8.22k | tu_enc_loop_out_t *ps_tu; |
2111 | 8.22k | pu_t *ps_pu; |
2112 | 8.22k | UWORD8 *pu1_coeffs; |
2113 | 8.22k | WORD32 num_ctb_in_frm; |
2114 | 8.22k | WORD32 coeff_size; |
2115 | | |
2116 | | /* frame process/entropy coding buffer pointer array */ |
2117 | 8.22k | pps_frm_proc_ent_cod_bufs[i] = (frm_proc_ent_cod_ctxt_t **)ps_memtab->pv_base; |
2118 | | /* increment the memtabs */ |
2119 | 8.22k | ps_memtab++; |
2120 | | |
2121 | | /* frame process/entropy coding buffer structure */ |
2122 | 8.22k | ps_frmp_ent_bufs = (frm_proc_ent_cod_ctxt_t *)ps_memtab->pv_base; |
2123 | | /* increment the memtabs */ |
2124 | 8.22k | ps_memtab++; |
2125 | | |
2126 | | /* CTB enc loop Frame level */ |
2127 | 8.22k | ps_ctb = (ctb_enc_loop_out_t *)ps_memtab->pv_base; |
2128 | | /* increment the memtabs */ |
2129 | 8.22k | ps_memtab++; |
2130 | | |
2131 | | /* CU enc loop Frame level */ |
2132 | 8.22k | ps_cu = (cu_enc_loop_out_t *)ps_memtab->pv_base; |
2133 | | /* increment the memtabs */ |
2134 | 8.22k | ps_memtab++; |
2135 | | |
2136 | | /* TU enc loop Frame level */ |
2137 | 8.22k | ps_tu = (tu_enc_loop_out_t *)ps_memtab->pv_base; |
2138 | | /* increment the memtabs */ |
2139 | 8.22k | ps_memtab++; |
2140 | | |
2141 | | /* PU enc loop Frame level */ |
2142 | 8.22k | ps_pu = (pu_t *)ps_memtab->pv_base; |
2143 | | /* increment the memtabs */ |
2144 | 8.22k | ps_memtab++; |
2145 | | |
2146 | | /* Coeffs Frame level */ |
2147 | 8.22k | pu1_coeffs = (UWORD8 *)ps_memtab->pv_base; |
2148 | | /* increment the memtabs */ |
2149 | 8.22k | ps_memtab++; |
2150 | | |
2151 | 8.22k | #ifndef DISABLE_SEI |
2152 | | /* CC User Data */ |
2153 | 8.22k | UWORD8 *pu1_sei_payload; |
2154 | 8.22k | pu1_sei_payload = (UWORD8 *)ps_memtab->pv_base; |
2155 | 8.22k | ps_memtab++; |
2156 | 8.22k | #endif |
2157 | | |
2158 | 8.22k | num_ctb_in_frm = num_ctb_horz * num_ctb_vert; |
2159 | | |
2160 | | /* calculate the coeff size */ |
2161 | 8.22k | coeff_size = |
2162 | 8.22k | num_ctb_horz * ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) |
2163 | 8.22k | ? (num_tu_in_ctb << 1) |
2164 | 8.22k | : ((num_tu_in_ctb * 3) >> 1)); |
2165 | 8.22k | coeff_size = coeff_size * num_ctb_vert * MAX_SCAN_COEFFS_BYTES_4x4; |
2166 | | /* loop to initialise all the memories */ |
2167 | 16.4k | for(ctr = 0; ctr < NUM_FRMPROC_ENTCOD_BUFS; ctr++) |
2168 | 8.22k | { |
2169 | 8.22k | pps_frm_proc_ent_cod_bufs[i][ctr] = ps_frmp_ent_bufs; |
2170 | | |
2171 | 8.22k | ps_frmp_ent_bufs->ps_frm_ctb_data = ps_ctb; |
2172 | 8.22k | ps_frmp_ent_bufs->ps_frm_cu_data = ps_cu; |
2173 | 8.22k | ps_frmp_ent_bufs->ps_frm_pu_data = ps_pu; |
2174 | 8.22k | ps_frmp_ent_bufs->ps_frm_tu_data = ps_tu; |
2175 | 8.22k | ps_frmp_ent_bufs->pv_coeff_data = pu1_coeffs; |
2176 | | |
2177 | | /* memset the slice headers and buffer to keep track */ |
2178 | 8.22k | memset(&ps_frmp_ent_bufs->s_slice_hdr, 0, sizeof(slice_header_t)); |
2179 | | |
2180 | | /*PIC_INFO*/ |
2181 | 8.22k | memset(&ps_frmp_ent_bufs->s_pic_level_info, 0, sizeof(s_pic_level_acc_info_t)); |
2182 | | |
2183 | 8.22k | ps_ctb += num_ctb_in_frm; |
2184 | 8.22k | ps_cu += num_ctb_in_frm * num_cu_in_ctb; |
2185 | 8.22k | ps_pu += num_ctb_in_frm * num_pu_in_ctb; |
2186 | 8.22k | ps_tu += num_ctb_in_frm * num_tu_in_ctb; |
2187 | | |
2188 | 8.22k | pu1_coeffs += coeff_size; |
2189 | | |
2190 | 8.22k | #ifndef DISABLE_SEI |
2191 | 90.4k | for(WORD32 num_sei = 0; num_sei < MAX_NUMBER_OF_SEI_PAYLOAD; num_sei++) |
2192 | 82.2k | { |
2193 | 82.2k | ps_frmp_ent_bufs->as_sei_payload[num_sei].pu1_sei_payload = pu1_sei_payload; |
2194 | 82.2k | ps_frmp_ent_bufs->as_sei_payload[num_sei].u4_payload_type = 0; |
2195 | 82.2k | ps_frmp_ent_bufs->as_sei_payload[num_sei].u4_payload_length = 0; |
2196 | 82.2k | pu1_sei_payload += MAX_SEI_PAYLOAD_PER_TLV; |
2197 | 82.2k | } |
2198 | | |
2199 | 8.22k | #endif |
2200 | 8.22k | ps_frmp_ent_bufs++; |
2201 | 8.22k | } |
2202 | 8.22k | } |
2203 | | |
2204 | | /* Working memory for encoder */ |
2205 | 8.22k | ps_enc_ctxt->pu1_frm_lvl_wkg_mem = (UWORD8 *)ps_memtab->pv_base; |
2206 | 8.22k | ps_memtab++; |
2207 | | |
2208 | | /* Job Que memory */ |
2209 | | /* Job que memory distribution is as follows _______ |
2210 | | enc_group_ping -> MAX_NUM_VERT_UNITS_FRM for all the passes (NUM_ENC_JOBS_QUES)------------>|_______| |
2211 | | enc_group_pong -> MAX_NUM_VERT_UNITS_FRM for all the passes (NUM_ENC_JOBS_QUES)------------>|_______| |
2212 | | pre_enc_group_ping -> MAX_NUM_VERT_UNITS_FRM for all the passes (NUM_PRE_ENC_JOBS_QUES)---->|_______| |
2213 | | pre_enc_group_ping -> MAX_NUM_VERT_UNITS_FRM for all the passes (NUM_PRE_ENC_JOBS_QUES)---->|_______| |
2214 | | */ |
2215 | | |
2216 | 8.22k | ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[0] = (job_queue_t *)ps_memtab->pv_base; |
2217 | 16.4k | for(ctr = 1; ctr < max_delay_preenc_l0_que; ctr++) |
2218 | 8.22k | { |
2219 | 8.22k | ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[ctr] = |
2220 | 8.22k | ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[0] + |
2221 | 8.22k | (MAX_NUM_VERT_UNITS_FRM * NUM_PRE_ENC_JOBS_QUES * ctr); |
2222 | 8.22k | } |
2223 | 8.22k | ps_memtab++; |
2224 | | |
2225 | | /* -----Frameproc Entcod Que mem_init --- */ |
2226 | | /* init ptrs for each bit-rate */ |
2227 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2228 | 8.22k | { |
2229 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_FRM_PRS_ENT_COD_Q + i] = ihevce_buff_que_init( |
2230 | 8.22k | ps_memtab, NUM_FRMPROC_ENTCOD_BUFS, (void **)pps_frm_proc_ent_cod_bufs[i]); |
2231 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2232 | 8.22k | } |
2233 | | /*mrs*/ |
2234 | | /* ----Encoder owned input buffer queue init----*/ |
2235 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_ENC_INPUT_Q] = |
2236 | 8.22k | ihevce_buff_que_init(ps_memtab, num_input_buf_per_queue, (void **)pps_lap_enc_input_bufs); |
2237 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2238 | | |
2239 | | /* -----Pre-Encode / Encode Que mem_init --- */ |
2240 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_PRE_ENC_ME_Q] = |
2241 | 8.22k | ihevce_buff_que_init(ps_memtab, num_bufs_preenc_me_que, (void **)pps_pre_enc_bufs); |
2242 | | |
2243 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2244 | | |
2245 | | /* -----ME / Enc-RD opt Que mem_init --- */ |
2246 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_ME_ENC_RDOPT_Q] = |
2247 | 8.22k | ihevce_buff_que_init(ps_memtab, NUM_ME_ENC_BUFS, (void **)pps_me_enc_bufs); |
2248 | | |
2249 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2250 | | |
2251 | | /* -----Pre-Encode L0 IPE to enc queue --- */ |
2252 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_L0_IPE_ENC_Q] = |
2253 | 8.22k | ihevce_buff_que_init(ps_memtab, num_bufs_L0_ipe_enc, (void **)pps_L0_ipe_enc_bufs); |
2254 | | |
2255 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2256 | | |
2257 | | /* ---------- Dependency Manager allocations -------- */ |
2258 | 8.22k | { |
2259 | 8.22k | osal_sem_attr_t attr = OSAL_DEFAULT_SEM_ATTR; |
2260 | 8.22k | WORD32 i1_is_sem_enabled; |
2261 | | |
2262 | 8.22k | if(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id] |
2263 | 8.22k | .i4_quality_preset >= IHEVCE_QUALITY_P4) |
2264 | 2.42k | { |
2265 | 2.42k | i1_is_sem_enabled = 0; |
2266 | 2.42k | } |
2267 | 5.79k | else |
2268 | 5.79k | { |
2269 | 5.79k | i1_is_sem_enabled = 1; |
2270 | 5.79k | } |
2271 | | |
2272 | | /* allocate semaphores for all the threads in pre-enc and enc */ |
2273 | 16.4k | for(ctr = 0; ctr < ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds; ctr++) |
2274 | 8.22k | { |
2275 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle[ctr] = |
2276 | 8.22k | osal_sem_create(ps_intrf_ctxt->pv_osal_handle, &attr); |
2277 | 8.22k | if(NULL == ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle[ctr]) |
2278 | 0 | { |
2279 | 0 | ps_intrf_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
2280 | 0 | return; |
2281 | 0 | } |
2282 | 8.22k | } |
2283 | | |
2284 | 16.4k | for(ctr = 0; ctr < ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds; ctr++) |
2285 | 8.22k | { |
2286 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle[ctr] = |
2287 | 8.22k | osal_sem_create(ps_intrf_ctxt->pv_osal_handle, &attr); |
2288 | 8.22k | if(NULL == ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle[ctr]) |
2289 | 0 | { |
2290 | 0 | ps_intrf_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
2291 | 0 | return; |
2292 | 0 | } |
2293 | 8.22k | } |
2294 | | |
2295 | | /* --- ME-EncLoop Dep Mngr Row-Row Init -- */ |
2296 | 16.4k | for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++) |
2297 | 8.22k | { |
2298 | 8.22k | me_enc_rdopt_ctxt_t *ps_me_enc_bufs = pps_me_enc_bufs[ctr]; |
2299 | | |
2300 | 8.22k | ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me = ihevce_dmgr_init( |
2301 | 8.22k | ps_memtab, |
2302 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2303 | 8.22k | DEP_MNGR_ROW_ROW_SYNC, |
2304 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2305 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2306 | 8.22k | ps_enc_ctxt->ps_tile_params_base->i4_num_tile_cols, /* Number of Col Tiles */ |
2307 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
2308 | 8.22k | i1_is_sem_enabled /*Sem Disabled/Enabled*/ |
2309 | 8.22k | ); |
2310 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2311 | | |
2312 | | /* Register Enc group semaphore handles */ |
2313 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2314 | 8.22k | ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me, |
2315 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2316 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2317 | | |
2318 | | /* Register the handle in multithread ctxt also for free purpose */ |
2319 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_encloop_dep_me[ctr] = |
2320 | 8.22k | ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me; |
2321 | 8.22k | } |
2322 | | |
2323 | 16.4k | for(ctr = 0; ctr < i4_num_enc_loop_frm_pllel; ctr++) |
2324 | 8.22k | { |
2325 | | /* --- Prev. frame EncLoop Done Dep Mngr Frm-Frm Mem Init -- */ |
2326 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_done[ctr] = ihevce_dmgr_init( |
2327 | 8.22k | ps_memtab, |
2328 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2329 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2330 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2331 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2332 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2333 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
2334 | 8.22k | 1 /*Sem Enabled*/ |
2335 | 8.22k | ); |
2336 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2337 | | |
2338 | | /* Register Enc group semaphore handles */ |
2339 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2340 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_done[ctr], |
2341 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2342 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2343 | 8.22k | } |
2344 | | /* --- Prev. frame EncLoop Done Dep Mngr for re-encode Frm-Frm Mem Init -- */ |
2345 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_enc_done_for_reenc = ihevce_dmgr_init( |
2346 | 8.22k | ps_memtab, |
2347 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2348 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2349 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2350 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2351 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2352 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
2353 | 8.22k | 1 /*Sem Enabled*/ |
2354 | 8.22k | ); |
2355 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2356 | | |
2357 | | /* Register Enc group semaphore handles */ |
2358 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2359 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_enc_done_for_reenc, |
2360 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2361 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2362 | 16.4k | for(ctr = 0; ctr < i4_num_me_frm_pllel; ctr++) |
2363 | 8.22k | { |
2364 | | /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem Init -- */ |
2365 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_me_done[ctr] = ihevce_dmgr_init( |
2366 | 8.22k | ps_memtab, |
2367 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2368 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2369 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2370 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2371 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2372 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
2373 | 8.22k | 1 /*Sem Enabled*/ |
2374 | 8.22k | ); |
2375 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2376 | | |
2377 | | /* Register Enc group semaphore handles */ |
2378 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2379 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_me_done[ctr], |
2380 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2381 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2382 | 8.22k | } |
2383 | | /* --- Prev. frame PreEnc L1 Done Dep Mngr Frm-Frm Mem Init -- */ |
2384 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l1 = ihevce_dmgr_init( |
2385 | 8.22k | ps_memtab, |
2386 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2387 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2388 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2389 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2390 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2391 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
2392 | 8.22k | 1 /*Sem Enabled*/ |
2393 | 8.22k | ); |
2394 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2395 | | |
2396 | | /* Register Pre-Enc group semaphore handles */ |
2397 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2398 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l1, |
2399 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle, |
2400 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds); |
2401 | | |
2402 | | /* --- Prev. frame PreEnc HME Done Dep Mngr Frm-Frm Mem Init -- */ |
2403 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_coarse_me = ihevce_dmgr_init( |
2404 | 8.22k | ps_memtab, |
2405 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2406 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2407 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2408 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2409 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2410 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
2411 | 8.22k | 1 /*Sem Enabled*/ |
2412 | 8.22k | ); |
2413 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2414 | | |
2415 | | /* Register Pre-Enc group semaphore handles */ |
2416 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2417 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_coarse_me, |
2418 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle, |
2419 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds); |
2420 | | |
2421 | | /* --- Prev. frame PreEnc L0 Done Dep Mngr Frm-Frm Mem Init -- */ |
2422 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l0 = ihevce_dmgr_init( |
2423 | 8.22k | ps_memtab, |
2424 | 8.22k | ps_intrf_ctxt->pv_osal_handle, |
2425 | 8.22k | DEP_MNGR_FRM_FRM_SYNC, |
2426 | 8.22k | (a_ctb_align_ht[0] / ctb_size), |
2427 | 8.22k | (a_ctb_align_wd[0] / ctb_size), |
2428 | 8.22k | 1, /* Number of Col Tiles : Don't care for FRM_FRM */ |
2429 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds, |
2430 | 8.22k | 1 /*Sem Enabled*/ |
2431 | 8.22k | ); |
2432 | 8.22k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2433 | | |
2434 | | /* Register Pre-Enc group semaphore handles */ |
2435 | 8.22k | ihevce_dmgr_reg_sem_hdls( |
2436 | 8.22k | ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l0, |
2437 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle, |
2438 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds); |
2439 | | |
2440 | | /* --- ME-Prev Recon Dep Mngr Row-Frm Mem init -- */ |
2441 | 49.3k | for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++) |
2442 | 41.1k | { |
2443 | 41.1k | WORD32 ai4_tile_xtra_ctb[4] = { 0 }; |
2444 | | |
2445 | 41.1k | ps_enc_ctxt->pps_recon_buf_q[0][ctr]->pv_dep_mngr_recon = ihevce_dmgr_map_init( |
2446 | 41.1k | ps_memtab, |
2447 | 41.1k | num_ctb_vert, |
2448 | 41.1k | num_ctb_horz, |
2449 | 41.1k | i1_is_sem_enabled, /*Sem Disabled/Enabled*/ |
2450 | 41.1k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds, |
2451 | 41.1k | ai4_tile_xtra_ctb); |
2452 | | |
2453 | 41.1k | ps_memtab += ihevce_dmgr_get_num_mem_recs(); |
2454 | | |
2455 | | /* Register Enc group semaphore handles */ |
2456 | 41.1k | ihevce_dmgr_reg_sem_hdls( |
2457 | 41.1k | ps_enc_ctxt->pps_recon_buf_q[0][ctr]->pv_dep_mngr_recon, |
2458 | 41.1k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2459 | 41.1k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2460 | 41.1k | } |
2461 | | |
2462 | | /* ------ Module level register semaphores -------- */ |
2463 | 8.22k | ihevce_coarse_me_reg_thrds_sem( |
2464 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_coarse_me_ctxt, |
2465 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle, |
2466 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds); |
2467 | | |
2468 | 8.22k | ihevce_enc_loop_reg_sem_hdls( |
2469 | 8.22k | ps_enc_ctxt->s_module_ctxt.pv_enc_loop_ctxt, |
2470 | 8.22k | ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle, |
2471 | 8.22k | ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds); |
2472 | 8.22k | } |
2473 | | |
2474 | | /* copy the run time source parameters from create time prms */ |
2475 | 0 | memcpy( |
2476 | 8.22k | &ps_enc_ctxt->s_runtime_src_prms, |
2477 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_src_prms, |
2478 | 8.22k | sizeof(ihevce_src_params_t)); |
2479 | | |
2480 | 8.22k | memcpy( |
2481 | 8.22k | &ps_enc_ctxt->s_runtime_tgt_params, |
2482 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id], |
2483 | 8.22k | sizeof(ihevce_tgt_params_t)); |
2484 | | |
2485 | | /* copy the run time coding parameters from create time prms */ |
2486 | 8.22k | memcpy( |
2487 | 8.22k | &ps_enc_ctxt->s_runtime_coding_prms, |
2488 | 8.22k | &ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms, |
2489 | 8.22k | sizeof(ihevce_coding_params_t)); |
2490 | | |
2491 | | /*change in run time parameter*/ |
2492 | 8.22k | if(ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1) |
2493 | 8.22k | { |
2494 | 8.22k | ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames = (DEFAULT_MAX_REFERENCE_PICS) |
2495 | 8.22k | << i4_field_pic; |
2496 | | |
2497 | 8.22k | ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames = |
2498 | 8.22k | ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames; |
2499 | 8.22k | } |
2500 | | |
2501 | | /* populate the frame level ctb parameters based on run time params */ |
2502 | 8.22k | ihevce_set_pre_enc_prms(ps_enc_ctxt); |
2503 | | |
2504 | 8.22k | return; |
2505 | 8.22k | } |
2506 | | |
2507 | | /*! |
2508 | | ****************************************************************************** |
2509 | | * \if Function name : ihevce_mem_manager_que_init \endif |
2510 | | * |
2511 | | * \brief |
2512 | | * Encoder Que memory init function |
2513 | | * |
2514 | | * \param[in] Encoder context pointer |
2515 | | * \param[in] High level Encoder context pointer |
2516 | | * \param[in] Buffer descriptors |
2517 | | * |
2518 | | * \return |
2519 | | * None |
2520 | | * |
2521 | | * \author |
2522 | | * Ittiam |
2523 | | * |
2524 | | ***************************************************************************** |
2525 | | */ |
2526 | | void ihevce_mem_manager_que_init( |
2527 | | enc_ctxt_t *ps_enc_ctxt, |
2528 | | ihevce_hle_ctxt_t *ps_hle_ctxt, |
2529 | | iv_input_data_ctrl_buffs_desc_t *ps_input_data_ctrl_buffs_desc, |
2530 | | iv_input_asynch_ctrl_buffs_desc_t *ps_input_asynch_ctrl_buffs_desc, |
2531 | | iv_output_data_buffs_desc_t *ps_output_data_buffs_desc, |
2532 | | iv_recon_data_buffs_desc_t *ps_recon_data_buffs_desc) |
2533 | 8.22k | { |
2534 | | /* local variables */ |
2535 | 8.22k | WORD32 total_memtabs_req = 0; |
2536 | 8.22k | WORD32 total_memtabs_used = 0; |
2537 | 8.22k | WORD32 ctr; |
2538 | 8.22k | iv_mem_rec_t *ps_memtab; |
2539 | 8.22k | WORD32 i; //counter variable |
2540 | 8.22k | iv_output_data_buffs_desc_t *ps_out_desc; |
2541 | 8.22k | iv_recon_data_buffs_desc_t *ps_rec_desc; |
2542 | 8.22k | WORD32 i4_num_bitrate_inst; //number of bit-rate instance |
2543 | | /* storing 0th instance's pointer. This will be used for assigning buffer queue handles for input/output queues */ |
2544 | 8.22k | enc_ctxt_t *ps_enc_ctxt_base = (enc_ctxt_t *)ps_hle_ctxt->apv_enc_hdl[0]; |
2545 | | |
2546 | 8.22k | i4_num_bitrate_inst = ps_enc_ctxt->i4_num_bitrates; |
2547 | | //ps_hle_ctxt->ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[0].i4_num_bitrate_instances; |
2548 | | |
2549 | | /* --------------------------------------------------------------------- */ |
2550 | | /* -------------- Collating the number of memtabs required ------------ */ |
2551 | | /* --------------------------------------------------------------------- */ |
2552 | | |
2553 | | /* ------ Input Data Que Memtab -------- */ |
2554 | 8.22k | if(0 == ps_enc_ctxt->i4_resolution_id) |
2555 | 8.22k | { |
2556 | | /* array of pointers for input */ |
2557 | 8.22k | total_memtabs_req++; |
2558 | | |
2559 | | /* pointers for input desc */ |
2560 | 8.22k | total_memtabs_req++; |
2561 | | |
2562 | | /* que manager buffer requirements */ |
2563 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
2564 | | |
2565 | | /* ------ Input Control Que memtab ----- */ |
2566 | | /* array of pointers for input control */ |
2567 | 8.22k | total_memtabs_req++; |
2568 | | |
2569 | | /* pointers for input control desc */ |
2570 | 8.22k | total_memtabs_req++; |
2571 | | |
2572 | | /* que manager buffer requirements */ |
2573 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
2574 | 8.22k | } |
2575 | | |
2576 | | /* ------ Output Data Que Memtab -------- */ |
2577 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2578 | 8.22k | { |
2579 | | /* array of pointers for output */ |
2580 | 8.22k | total_memtabs_req++; |
2581 | | |
2582 | | /* pointers for output desc */ |
2583 | 8.22k | total_memtabs_req++; |
2584 | | |
2585 | | /* que manager buffer requirements */ |
2586 | 8.22k | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
2587 | 8.22k | } |
2588 | | |
2589 | | /* ------ Recon Data Que Memtab -------- */ |
2590 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2591 | 8.22k | { |
2592 | 8.22k | if(ps_hle_ctxt->ps_static_cfg_prms->i4_save_recon) |
2593 | 0 | { |
2594 | | /* array of pointers for input */ |
2595 | 0 | total_memtabs_req++; |
2596 | | |
2597 | | /* pointers for input desc */ |
2598 | 0 | total_memtabs_req++; |
2599 | | |
2600 | | /* que manager buffer requirements */ |
2601 | 0 | total_memtabs_req += ihevce_buff_que_get_num_mem_recs(); |
2602 | 0 | } |
2603 | 8.22k | } |
2604 | | |
2605 | | /* ----- allocate memomry for memtabs --- */ |
2606 | 8.22k | { |
2607 | 8.22k | iv_mem_rec_t s_memtab; |
2608 | | |
2609 | 8.22k | s_memtab.i4_size = sizeof(iv_mem_rec_t); |
2610 | 8.22k | s_memtab.i4_mem_size = total_memtabs_req * sizeof(iv_mem_rec_t); |
2611 | 8.22k | s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2612 | 8.22k | s_memtab.i4_mem_alignment = 4; |
2613 | | |
2614 | 8.22k | ps_hle_ctxt->ihevce_mem_alloc( |
2615 | 8.22k | ps_hle_ctxt->pv_mem_mgr_hdl, &ps_hle_ctxt->ps_static_cfg_prms->s_sys_api, &s_memtab); |
2616 | 8.22k | if(s_memtab.pv_base == NULL) |
2617 | 0 | { |
2618 | 0 | ps_hle_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
2619 | 0 | return; |
2620 | 0 | } |
2621 | 8.22k | ps_memtab = (iv_mem_rec_t *)s_memtab.pv_base; |
2622 | 8.22k | } |
2623 | | |
2624 | | /* --------------------------------------------------------------------- */ |
2625 | | /* ------------------ Collating memory requirements ------------------- */ |
2626 | | /* --------------------------------------------------------------------- */ |
2627 | 8.22k | if(0 == ps_enc_ctxt->i4_resolution_id) |
2628 | 8.22k | { |
2629 | | /* ------ Input Data Que memory requests -------- */ |
2630 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2631 | | |
2632 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2633 | | |
2634 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2635 | 8.22k | ((ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs) * (sizeof(ihevce_lap_enc_buf_t *))); |
2636 | | |
2637 | | /* increment the memtab counter */ |
2638 | 8.22k | total_memtabs_used++; |
2639 | | |
2640 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2641 | | |
2642 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2643 | | |
2644 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2645 | 8.22k | ((ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs) * (sizeof(ihevce_lap_enc_buf_t))); |
2646 | | |
2647 | | /* increment the memtab counter */ |
2648 | 8.22k | total_memtabs_used++; |
2649 | | |
2650 | | /* call the Que manager get mem recs */ |
2651 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
2652 | 8.22k | &ps_memtab[total_memtabs_used], |
2653 | 8.22k | ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs, |
2654 | 8.22k | IV_EXT_CACHEABLE_NORMAL_MEM); |
2655 | | |
2656 | | /* ------ Input Control Que memory requests -------- */ |
2657 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2658 | | |
2659 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2660 | | |
2661 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2662 | 8.22k | ((ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs) * |
2663 | 8.22k | (sizeof(iv_input_ctrl_buffs_t *))); |
2664 | | |
2665 | | /* increment the memtab counter */ |
2666 | 8.22k | total_memtabs_used++; |
2667 | | |
2668 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2669 | | |
2670 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2671 | | |
2672 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2673 | 8.22k | ((ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs) * |
2674 | 8.22k | (sizeof(iv_input_ctrl_buffs_t))); |
2675 | | |
2676 | | /* increment the memtab counter */ |
2677 | 8.22k | total_memtabs_used++; |
2678 | | |
2679 | | /* call the Que manager get mem recs */ |
2680 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
2681 | 8.22k | &ps_memtab[total_memtabs_used], |
2682 | 8.22k | ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs, |
2683 | 8.22k | IV_EXT_CACHEABLE_NORMAL_MEM); |
2684 | 8.22k | } |
2685 | | |
2686 | | /* ------ Output data Que memory requests -------- */ |
2687 | 8.22k | ps_out_desc = ps_output_data_buffs_desc; |
2688 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2689 | 8.22k | { |
2690 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2691 | | |
2692 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2693 | | |
2694 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2695 | 8.22k | ((ps_out_desc->i4_num_bitstream_bufs) * (sizeof(iv_output_data_buffs_t *))); |
2696 | | |
2697 | | /* increment the memtab counter */ |
2698 | 8.22k | total_memtabs_used++; |
2699 | | |
2700 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2701 | | |
2702 | 8.22k | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2703 | | |
2704 | 8.22k | ps_memtab[total_memtabs_used].i4_mem_size = |
2705 | 8.22k | ((ps_out_desc->i4_num_bitstream_bufs) * (sizeof(iv_output_data_buffs_t))); |
2706 | | |
2707 | | /* increment the memtab counter */ |
2708 | 8.22k | total_memtabs_used++; |
2709 | | |
2710 | | /* call the Que manager get mem recs */ |
2711 | 8.22k | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
2712 | 8.22k | &ps_memtab[total_memtabs_used], |
2713 | 8.22k | ps_out_desc->i4_num_bitstream_bufs, |
2714 | 8.22k | IV_EXT_CACHEABLE_NORMAL_MEM); |
2715 | 8.22k | ps_out_desc++; |
2716 | 8.22k | } |
2717 | | |
2718 | | //recon_dump |
2719 | | /* ------ Recon Data Que memory requests -------- */ |
2720 | 8.22k | ps_rec_desc = ps_recon_data_buffs_desc; |
2721 | 8.22k | if(ps_hle_ctxt->ps_static_cfg_prms->i4_save_recon) |
2722 | 0 | { |
2723 | 0 | for(i = 0; i < i4_num_bitrate_inst; i++) |
2724 | 0 | { |
2725 | 0 | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2726 | |
|
2727 | 0 | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2728 | |
|
2729 | 0 | ps_memtab[total_memtabs_used].i4_mem_size = |
2730 | 0 | ((ps_rec_desc->i4_num_recon_bufs) * (sizeof(iv_enc_recon_data_buffs_t *))); |
2731 | | |
2732 | | /* increment the memtab counter */ |
2733 | 0 | total_memtabs_used++; |
2734 | |
|
2735 | 0 | ps_memtab[total_memtabs_used].i4_mem_alignment = 8; |
2736 | |
|
2737 | 0 | ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
2738 | |
|
2739 | 0 | ps_memtab[total_memtabs_used].i4_mem_size = |
2740 | 0 | ((ps_rec_desc->i4_num_recon_bufs) * (sizeof(iv_enc_recon_data_buffs_t))); |
2741 | | |
2742 | | /* increment the memtab counter */ |
2743 | 0 | total_memtabs_used++; |
2744 | | |
2745 | | /* call the Que manager get mem recs */ |
2746 | 0 | total_memtabs_used += ihevce_buff_que_get_mem_recs( |
2747 | 0 | &ps_memtab[total_memtabs_used], |
2748 | 0 | ps_rec_desc->i4_num_recon_bufs, |
2749 | 0 | IV_EXT_CACHEABLE_NORMAL_MEM); |
2750 | |
|
2751 | 0 | ps_rec_desc++; |
2752 | 0 | } |
2753 | 0 | } |
2754 | | |
2755 | | /* ----- allocate memory as per requests ---- */ |
2756 | | |
2757 | | /* check on memtabs requested v/s memtabs used */ |
2758 | | //ittiam : should put an assert |
2759 | 8.22k | ASSERT(total_memtabs_req == total_memtabs_used); |
2760 | 180k | for(ctr = 0; ctr < total_memtabs_used; ctr++) |
2761 | 172k | { |
2762 | 172k | UWORD8 *pu1_mem = NULL; |
2763 | 172k | ps_hle_ctxt->ihevce_mem_alloc( |
2764 | 172k | ps_hle_ctxt->pv_mem_mgr_hdl, |
2765 | 172k | &ps_hle_ctxt->ps_static_cfg_prms->s_sys_api, |
2766 | 172k | &ps_memtab[ctr]); |
2767 | | |
2768 | 172k | pu1_mem = (UWORD8 *)ps_memtab[ctr].pv_base; |
2769 | | |
2770 | 172k | if(NULL == pu1_mem) |
2771 | 0 | { |
2772 | 0 | ps_hle_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY; |
2773 | 0 | return; |
2774 | 0 | } |
2775 | 172k | } |
2776 | | |
2777 | | /* store the final allocated memtabs */ |
2778 | 8.22k | ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs = total_memtabs_used; |
2779 | 8.22k | ps_enc_ctxt->s_mem_mngr.ps_q_memtab = ps_memtab; |
2780 | | |
2781 | | /* --------------------------------------------------------------------- */ |
2782 | | /* -------------- Initialisation of Queues memory ---------------------- */ |
2783 | | /* --------------------------------------------------------------------- */ |
2784 | | |
2785 | | /* ---------- Input Data Que Mem init --------------- */ |
2786 | 8.22k | if(0 == ps_enc_ctxt->i4_resolution_id) |
2787 | 8.22k | { |
2788 | 8.22k | ihevce_lap_enc_buf_t **pps_inp_bufs; |
2789 | 8.22k | ihevce_lap_enc_buf_t *ps_inp_bufs; |
2790 | | |
2791 | 8.22k | pps_inp_bufs = (ihevce_lap_enc_buf_t **)ps_memtab->pv_base; |
2792 | 8.22k | ps_memtab++; |
2793 | | |
2794 | 8.22k | ps_inp_bufs = (ihevce_lap_enc_buf_t *)ps_memtab->pv_base; |
2795 | 8.22k | ps_memtab++; |
2796 | | |
2797 | | /* loop to initialise the buffer pointer */ |
2798 | 31.0k | for(ctr = 0; ctr < ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs; ctr++) |
2799 | 22.7k | { |
2800 | 22.7k | pps_inp_bufs[ctr] = &ps_inp_bufs[ctr]; |
2801 | | |
2802 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.i4_size = sizeof(iv_input_data_ctrl_buffs_t); |
2803 | | |
2804 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.i4_size = sizeof(iv_yuv_buf_t); |
2805 | | |
2806 | | /*pointer to i/p buf initialised to null in case of run time allocation*/ |
2807 | 22.7k | if(ps_hle_ctxt->i4_create_time_input_allocation == 1) |
2808 | 22.7k | { |
2809 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.pv_synch_ctrl_bufs = |
2810 | 22.7k | ps_input_data_ctrl_buffs_desc->ppv_synch_ctrl_bufs[ctr]; |
2811 | | |
2812 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_y_buf = |
2813 | 22.7k | ps_input_data_ctrl_buffs_desc->ppv_y_buf[ctr]; |
2814 | | |
2815 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_u_buf = |
2816 | 22.7k | ps_input_data_ctrl_buffs_desc->ppv_u_buf[ctr]; |
2817 | | |
2818 | 22.7k | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_v_buf = |
2819 | 22.7k | ps_input_data_ctrl_buffs_desc->ppv_v_buf[ctr]; |
2820 | 22.7k | } |
2821 | 0 | else |
2822 | 0 | { |
2823 | 0 | pps_inp_bufs[ctr]->s_input_buf.pv_synch_ctrl_bufs = NULL; |
2824 | |
|
2825 | 0 | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_y_buf = NULL; |
2826 | |
|
2827 | 0 | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_u_buf = NULL; |
2828 | |
|
2829 | 0 | pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_v_buf = NULL; |
2830 | 0 | } |
2831 | 22.7k | } |
2832 | | |
2833 | | /* Get the input data buffer Q handle */ |
2834 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_DATA_CTRL_Q] = ihevce_buff_que_init( |
2835 | 8.22k | ps_memtab, ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs, (void **)pps_inp_bufs); |
2836 | | |
2837 | | /* increment the memtab pointer */ |
2838 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2839 | 8.22k | } |
2840 | 0 | else |
2841 | 0 | { |
2842 | | /* Get the input data buffer Q handle from 0th instance */ |
2843 | 0 | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_DATA_CTRL_Q] = |
2844 | 0 | ps_enc_ctxt_base->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_DATA_CTRL_Q]; |
2845 | 0 | } |
2846 | | |
2847 | | /* ---------- Input control Que Mem init --------------- */ |
2848 | 8.22k | if(0 == ps_enc_ctxt->i4_resolution_id) |
2849 | 8.22k | { |
2850 | 8.22k | iv_input_ctrl_buffs_t **pps_inp_bufs; |
2851 | 8.22k | iv_input_ctrl_buffs_t *ps_inp_bufs; |
2852 | | |
2853 | 8.22k | pps_inp_bufs = (iv_input_ctrl_buffs_t **)ps_memtab->pv_base; |
2854 | 8.22k | ps_memtab++; |
2855 | | |
2856 | 8.22k | ps_inp_bufs = (iv_input_ctrl_buffs_t *)ps_memtab->pv_base; |
2857 | 8.22k | ps_memtab++; |
2858 | | |
2859 | | /* loop to initialise the buffer pointer */ |
2860 | 41.1k | for(ctr = 0; ctr < ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs; ctr++) |
2861 | 32.9k | { |
2862 | 32.9k | pps_inp_bufs[ctr] = &ps_inp_bufs[ctr]; |
2863 | | |
2864 | 32.9k | pps_inp_bufs[ctr]->i4_size = sizeof(iv_input_ctrl_buffs_t); |
2865 | | |
2866 | 32.9k | pps_inp_bufs[ctr]->pv_asynch_ctrl_bufs = |
2867 | 32.9k | ps_input_asynch_ctrl_buffs_desc->ppv_asynch_ctrl_bufs[ctr]; |
2868 | 32.9k | } |
2869 | | |
2870 | | /* Get the input control buffer Q handle */ |
2871 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_ASYNCH_CTRL_Q] = ihevce_buff_que_init( |
2872 | 8.22k | ps_memtab, |
2873 | 8.22k | ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs, |
2874 | 8.22k | (void **)pps_inp_bufs); |
2875 | | |
2876 | | /* increment the memtab pointer */ |
2877 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2878 | 8.22k | } |
2879 | 0 | else |
2880 | 0 | { |
2881 | | /* Get the input control buffer Q handle from 0th instance */ |
2882 | 0 | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_ASYNCH_CTRL_Q] = |
2883 | 0 | ps_enc_ctxt_base->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_ASYNCH_CTRL_Q]; |
2884 | 0 | } |
2885 | | |
2886 | | /* ---------- Output data Que Mem init --------------- */ |
2887 | 8.22k | ps_out_desc = ps_output_data_buffs_desc; |
2888 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2889 | 8.22k | { |
2890 | 8.22k | iv_output_data_buffs_t **pps_out_bufs; |
2891 | 8.22k | iv_output_data_buffs_t *ps_out_bufs; |
2892 | | |
2893 | 8.22k | pps_out_bufs = (iv_output_data_buffs_t **)ps_memtab->pv_base; |
2894 | 8.22k | ps_memtab++; |
2895 | | |
2896 | 8.22k | ps_out_bufs = (iv_output_data_buffs_t *)ps_memtab->pv_base; |
2897 | 8.22k | ps_memtab++; |
2898 | | |
2899 | | /* loop to initialise the buffer pointer */ |
2900 | 41.1k | for(ctr = 0; ctr < ps_out_desc->i4_num_bitstream_bufs; ctr++) |
2901 | 32.9k | { |
2902 | 32.9k | pps_out_bufs[ctr] = &ps_out_bufs[ctr]; |
2903 | | |
2904 | 32.9k | pps_out_bufs[ctr]->i4_size = sizeof(iv_output_data_buffs_t); |
2905 | | |
2906 | 32.9k | pps_out_bufs[ctr]->i4_bitstream_buf_size = ps_out_desc->i4_size_bitstream_buf; |
2907 | | |
2908 | | /*pointer to o/p buf initialised to null in case of run time allocation*/ |
2909 | 32.9k | if(ps_hle_ctxt->i4_create_time_output_allocation == 1) |
2910 | 0 | { |
2911 | 0 | pps_out_bufs[ctr]->pv_bitstream_bufs = ps_out_desc->ppv_bitstream_bufs[ctr]; |
2912 | 0 | } |
2913 | 32.9k | else |
2914 | 32.9k | { |
2915 | 32.9k | pps_out_bufs[ctr]->pv_bitstream_bufs = NULL; |
2916 | 32.9k | } |
2917 | 32.9k | } |
2918 | | |
2919 | | /* Get the output data buffer Q handle */ |
2920 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_OUTPUT_DATA_Q + i] = ihevce_buff_que_init( |
2921 | 8.22k | ps_memtab, ps_out_desc->i4_num_bitstream_bufs, (void **)pps_out_bufs); |
2922 | | |
2923 | | /* increment the memtab pointer */ |
2924 | 8.22k | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2925 | | |
2926 | 8.22k | ps_out_desc++; |
2927 | 8.22k | } |
2928 | | |
2929 | | /* ----------Recon data Que Mem init --------------- */ |
2930 | 8.22k | ps_rec_desc = ps_recon_data_buffs_desc; |
2931 | 16.4k | for(i = 0; i < i4_num_bitrate_inst; i++) |
2932 | 8.22k | { |
2933 | 8.22k | if(ps_hle_ctxt->ps_static_cfg_prms->i4_save_recon) |
2934 | 0 | { |
2935 | 0 | iv_enc_recon_data_buffs_t **pps_recon_bufs; |
2936 | 0 | iv_enc_recon_data_buffs_t *ps_recon_bufs; |
2937 | |
|
2938 | 0 | pps_recon_bufs = (iv_enc_recon_data_buffs_t **)ps_memtab->pv_base; |
2939 | 0 | ps_memtab++; |
2940 | |
|
2941 | 0 | ps_recon_bufs = (iv_enc_recon_data_buffs_t *)ps_memtab->pv_base; |
2942 | 0 | ps_memtab++; |
2943 | | |
2944 | | /* loop to initialise the buffer pointer */ |
2945 | 0 | for(ctr = 0; ctr < ps_rec_desc->i4_num_recon_bufs; ctr++) |
2946 | 0 | { |
2947 | 0 | pps_recon_bufs[ctr] = &ps_recon_bufs[ctr]; |
2948 | |
|
2949 | 0 | pps_recon_bufs[ctr]->i4_size = sizeof(iv_enc_recon_data_buffs_t); |
2950 | |
|
2951 | 0 | pps_recon_bufs[ctr]->pv_y_buf = ps_rec_desc->ppv_y_buf[ctr]; |
2952 | |
|
2953 | 0 | pps_recon_bufs[ctr]->pv_cb_buf = ps_rec_desc->ppv_u_buf[ctr]; |
2954 | |
|
2955 | 0 | pps_recon_bufs[ctr]->pv_cr_buf = ps_rec_desc->ppv_v_buf[ctr]; |
2956 | 0 | } |
2957 | | |
2958 | | /* Get the output data buffer Q handle */ |
2959 | 0 | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_RECON_DATA_Q + i] = ihevce_buff_que_init( |
2960 | 0 | ps_memtab, ps_rec_desc->i4_num_recon_bufs, (void **)pps_recon_bufs); |
2961 | | |
2962 | | /* increment the memtab pointer */ |
2963 | 0 | ps_memtab += ihevce_buff_que_get_num_mem_recs(); |
2964 | |
|
2965 | 0 | ps_rec_desc++; |
2966 | 0 | } |
2967 | 8.22k | else |
2968 | 8.22k | { |
2969 | 8.22k | ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_RECON_DATA_Q + i] = NULL; |
2970 | 8.22k | } |
2971 | 8.22k | } |
2972 | | |
2973 | 8.22k | return; |
2974 | 8.22k | } |
2975 | | |
2976 | | /*! |
2977 | | ****************************************************************************** |
2978 | | * \if Function name : ihevce_mem_manager_free \endif |
2979 | | * |
2980 | | * \brief |
2981 | | * Encoder memory free function |
2982 | | * |
2983 | | * \param[in] Processing interface context pointer |
2984 | | * |
2985 | | * \return |
2986 | | * None |
2987 | | * |
2988 | | * \author |
2989 | | * Ittiam |
2990 | | * |
2991 | | ***************************************************************************** |
2992 | | */ |
2993 | | void ihevce_mem_manager_free(enc_ctxt_t *ps_enc_ctxt, ihevce_hle_ctxt_t *ps_intrf_ctxt) |
2994 | 8.22k | { |
2995 | 8.22k | WORD32 ctr; |
2996 | | |
2997 | | /* run a loop to free all the memory allocated create time */ |
2998 | 7.24M | for(ctr = 0; ctr < ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs; ctr++) |
2999 | 7.23M | { |
3000 | 7.23M | ps_intrf_ctxt->ihevce_mem_free( |
3001 | 7.23M | ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->s_mem_mngr.ps_create_memtab[ctr]); |
3002 | 7.23M | } |
3003 | | |
3004 | | /* free the memtab memory */ |
3005 | 8.22k | { |
3006 | 8.22k | iv_mem_rec_t s_memtab; |
3007 | | |
3008 | 8.22k | s_memtab.i4_size = sizeof(iv_mem_rec_t); |
3009 | 8.22k | s_memtab.i4_mem_size = ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs * sizeof(iv_mem_rec_t); |
3010 | 8.22k | s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
3011 | 8.22k | s_memtab.i4_mem_alignment = 4; |
3012 | 8.22k | s_memtab.pv_base = (void *)ps_enc_ctxt->s_mem_mngr.ps_create_memtab; |
3013 | | |
3014 | 8.22k | ps_intrf_ctxt->ihevce_mem_free(ps_intrf_ctxt->pv_mem_mgr_hdl, &s_memtab); |
3015 | 8.22k | } |
3016 | | |
3017 | 8.22k | if(1 == ps_enc_ctxt->i4_io_queues_created) |
3018 | 8.22k | { |
3019 | | /* run a loop to free all the memory allocated durign que creation */ |
3020 | 180k | for(ctr = 0; ctr < ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs; ctr++) |
3021 | 172k | { |
3022 | 172k | ps_intrf_ctxt->ihevce_mem_free( |
3023 | 172k | ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->s_mem_mngr.ps_q_memtab[ctr]); |
3024 | 172k | } |
3025 | | |
3026 | | /* free the memtab memory */ |
3027 | 8.22k | { |
3028 | 8.22k | iv_mem_rec_t s_memtab; |
3029 | | |
3030 | 8.22k | s_memtab.i4_size = sizeof(iv_mem_rec_t); |
3031 | 8.22k | s_memtab.i4_mem_size = ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs * sizeof(iv_mem_rec_t); |
3032 | 8.22k | s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM; |
3033 | 8.22k | s_memtab.i4_mem_alignment = 4; |
3034 | 8.22k | s_memtab.pv_base = (void *)ps_enc_ctxt->s_mem_mngr.ps_q_memtab; |
3035 | | |
3036 | 8.22k | ps_intrf_ctxt->ihevce_mem_free(ps_intrf_ctxt->pv_mem_mgr_hdl, &s_memtab); |
3037 | 8.22k | } |
3038 | 8.22k | } |
3039 | 8.22k | return; |
3040 | 8.22k | } |