Coverage Report

Created: 2025-12-14 06:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libhevc/encoder/ihevce_memory_init.c
Line
Count
Source
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
47.9k
#define MAX_QUEUE 40
159
void ihevce_mem_manager_init(enc_ctxt_t *ps_enc_ctxt, ihevce_hle_ctxt_t *ps_intrf_ctxt)
160
7.03k
{
161
    /* local variables */
162
7.03k
    WORD32 total_memtabs_req = 0;
163
7.03k
    WORD32 total_memtabs_used = 0;
164
7.03k
    WORD32 total_system_memtabs = 0;
165
7.03k
    WORD32 ctr;
166
7.03k
    WORD32 buf_size;
167
7.03k
    WORD32 num_ctb_horz;
168
7.03k
    WORD32 num_ctb_vert;
169
7.03k
    WORD32 num_cu_in_ctb;
170
7.03k
    WORD32 num_pu_in_ctb;
171
7.03k
    WORD32 num_tu_in_ctb;
172
7.03k
    WORD32 ctb_size;
173
7.03k
    WORD32 min_cu_size;
174
7.03k
    WORD32 max_num_ref_pics;
175
7.03k
    WORD32 mem_alloc_ctrl_flag;
176
7.03k
    WORD32 space_for_mem_in_enc_grp = 0;
177
7.03k
    WORD32 space_for_mem_in_pre_enc_grp = 0;
178
7.03k
    WORD32 mv_bank_size;
179
7.03k
    WORD32 ref_idx_bank_size;
180
7.03k
    WORD32 a_wd[MAX_NUM_HME_LAYERS], a_ht[MAX_NUM_HME_LAYERS];
181
7.03k
    WORD32 a_disp_wd[MAX_NUM_HME_LAYERS], a_disp_ht[MAX_NUM_HME_LAYERS];
182
7.03k
    WORD32 a_ctb_align_wd[MAX_NUM_HME_LAYERS], a_ctb_align_ht[MAX_NUM_HME_LAYERS];
183
7.03k
    WORD32 n_enc_layers = 1, n_tot_layers;
184
7.03k
    WORD32 num_bufs_preenc_me_que, num_bufs_L0_ipe_enc, max_delay_preenc_l0_que;
185
7.03k
    WORD32 i, i4_resolution_id = ps_enc_ctxt->i4_resolution_id;  //counter
186
7.03k
    WORD32 i4_num_bitrate_inst;
187
7.03k
    iv_mem_rec_t *ps_memtab;
188
7.03k
    WORD32 i4_field_pic, i4_total_queues = 0;
189
190
7.03k
    recon_pic_buf_t **pps_pre_enc_pic_bufs;
191
7.03k
    frm_proc_ent_cod_ctxt_t **pps_frm_proc_ent_cod_bufs[IHEVCE_MAX_NUM_BITRATES];
192
7.03k
    pre_enc_me_ctxt_t **pps_pre_enc_bufs;
193
7.03k
    me_enc_rdopt_ctxt_t **pps_me_enc_bufs;
194
7.03k
    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
7.03k
    ihevce_lap_enc_buf_t **pps_lap_enc_input_bufs;
197
7.03k
    WORD32 i4_num_enc_loop_frm_pllel;
198
7.03k
    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
7.03k
    WORD32 num_input_buf_per_queue, i4_yuv_min_size, i4_luma_min_size;
202
203
7.03k
    i4_num_bitrate_inst = ps_enc_ctxt->i4_num_bitrates;
204
7.03k
    i4_field_pic = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_field_pic;
205
7.03k
    ps_intrf_ctxt->i4_gpu_mem_size = 0;
206
207
    /*Initialize the thrd id flag and all deafult values for sub pic rc */
208
7.03k
    {
209
7.03k
        WORD32 i, j, k;
210
211
14.0k
        for(i = 0; i < MAX_NUM_ENC_LOOP_PARALLEL; i++)
212
7.03k
        {
213
14.0k
            for(j = 0; j < IHEVCE_MAX_NUM_BITRATES; j++)
214
7.03k
            {
215
7.03k
                ps_enc_ctxt->s_multi_thrd.ai4_acc_ctb_ctr[i][j] = 0;
216
7.03k
                ps_enc_ctxt->s_multi_thrd.ai4_ctb_ctr[i][j] = 0;
217
218
7.03k
                ps_enc_ctxt->s_multi_thrd.ai4_threshold_reached[i][j] = 0;
219
220
7.03k
                ps_enc_ctxt->s_multi_thrd.ai4_curr_qp_acc[i][j] = 0;
221
222
7.03k
                ps_enc_ctxt->s_multi_thrd.af_acc_hdr_bits_scale_err[i][j] = 0;
223
224
63.3k
                for(k = 0; k < MAX_NUM_FRM_PROC_THRDS_ENC; k++)
225
56.2k
                {
226
56.2k
                    ps_enc_ctxt->s_multi_thrd.ai4_thrd_id_valid_flag[i][j][k] = -1;
227
56.2k
                }
228
7.03k
            }
229
7.03k
        }
230
7.03k
    }
231
232
7.03k
#define ENABLE_FRM_PARALLEL
233
7.03k
#ifdef ENABLE_FRM_PARALLEL
234
7.03k
    i4_num_enc_loop_frm_pllel = MAX_NUM_ENC_LOOP_PARALLEL;
235
7.03k
    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
7.03k
    ps_enc_ctxt->s_multi_thrd.i4_num_enc_loop_frm_pllel = i4_num_enc_loop_frm_pllel;
242
7.03k
    ps_enc_ctxt->i4_max_fr_enc_loop_parallel_rc = i4_num_enc_loop_frm_pllel;
243
7.03k
    ps_enc_ctxt->s_multi_thrd.i4_num_me_frm_pllel = i4_num_me_frm_pllel;
244
7.03k
    ps_enc_ctxt->s_multi_thrd.i4_force_end_flag = 0;
245
246
7.03k
    ps_enc_ctxt->i4_ref_mbr_id = 0;
247
    /* get the ctb size from max cu size */
248
7.03k
    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
7.03k
    min_cu_size = ps_enc_ctxt->ps_stat_prms->s_config_prms.i4_min_log2_cu_size;
252
253
    /* convert to actual width */
254
7.03k
    ctb_size = 1 << ctb_size;
255
7.03k
    min_cu_size = 1 << min_cu_size;
256
257
    /* Get the width and heights of different decomp layers */
258
7.03k
    *a_wd =
259
7.03k
        ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
260
7.03k
            .i4_width +
261
7.03k
        SET_CTB_ALIGN(
262
7.03k
            ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
263
7.03k
                .i4_width,
264
7.03k
            min_cu_size);
265
7.03k
    *a_ht =
266
7.03k
        ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
267
7.03k
            .i4_height +
268
7.03k
        SET_CTB_ALIGN(
269
7.03k
            ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
270
7.03k
                .i4_height,
271
7.03k
            min_cu_size);
272
273
7.03k
    n_tot_layers = hme_derive_num_layers(n_enc_layers, a_wd, a_ht, a_disp_wd, a_disp_ht);
274
7.03k
    hme_coarse_get_layer1_mv_bank_ref_idx_size(
275
7.03k
        n_tot_layers,
276
7.03k
        a_wd,
277
7.03k
        a_ht,
278
7.03k
        ((ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1)
279
7.03k
             ? ((DEFAULT_MAX_REFERENCE_PICS) << i4_field_pic)
280
7.03k
             : ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames),
281
7.03k
        (S32 *)(&mv_bank_size),
282
7.03k
        (S32 *)(&ref_idx_bank_size));
283
7.03k
    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
7.03k
    num_cu_in_ctb = ctb_size / MIN_CU_SIZE;
293
7.03k
    num_cu_in_ctb *= num_cu_in_ctb;
294
295
7.03k
    num_pu_in_ctb = ctb_size / MIN_PU_SIZE;
296
7.03k
    num_pu_in_ctb *= num_pu_in_ctb;
297
298
7.03k
    num_tu_in_ctb = ctb_size / MIN_PU_SIZE;
299
7.03k
    num_tu_in_ctb *= num_tu_in_ctb;
300
301
    /* calcuate the number of ctb horizontally*/
302
7.03k
    num_ctb_horz =
303
7.03k
        ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
304
7.03k
            .i4_width +
305
7.03k
        SET_CTB_ALIGN(
306
7.03k
            ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
307
7.03k
                .i4_width,
308
7.03k
            ctb_size);
309
7.03k
    num_ctb_horz = num_ctb_horz / ctb_size;
310
311
    /* calcuate the number of ctb vertically*/
312
7.03k
    num_ctb_vert =
313
7.03k
        ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
314
7.03k
            .i4_height +
315
7.03k
        SET_CTB_ALIGN(
316
7.03k
            ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ps_enc_ctxt->i4_resolution_id]
317
7.03k
                .i4_height,
318
7.03k
            ctb_size);
319
7.03k
    num_ctb_vert = num_ctb_vert / ctb_size;
320
321
    /* align all the decomp layer dimensions to CTB alignment */
322
29.0k
    for(ctr = 0; ctr < n_tot_layers; ctr++)
323
21.9k
    {
324
21.9k
        a_ctb_align_wd[ctr] = a_wd[ctr] + SET_CTB_ALIGN(a_wd[ctr], ctb_size);
325
326
21.9k
        a_ctb_align_ht[ctr] = a_ht[ctr] + SET_CTB_ALIGN(a_ht[ctr], ctb_size);
327
21.9k
    }
328
329
    /* SEI related parametert initialization */
330
331
7.03k
    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
7.03k
    ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size = ctb_size;
335
7.03k
    ps_enc_ctxt->s_frm_ctb_prms.i4_min_cu_size = min_cu_size;
336
7.03k
    ps_enc_ctxt->s_frm_ctb_prms.i4_num_cus_in_ctb = num_cu_in_ctb;
337
7.03k
    ps_enc_ctxt->s_frm_ctb_prms.i4_num_pus_in_ctb = num_pu_in_ctb;
338
7.03k
    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
7.03k
    ps_enc_ctxt->i4_cra_poc = 0;
342
343
    /* initialise the memory alloc control flag */
344
7.03k
    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
7.03k
    if(0 == mem_alloc_ctrl_flag)
348
7.03k
    {
349
        /* normal memory */
350
7.03k
        space_for_mem_in_enc_grp = IV_EXT_CACHEABLE_NORMAL_MEM;
351
7.03k
        space_for_mem_in_pre_enc_grp = IV_EXT_CACHEABLE_NORMAL_MEM;
352
7.03k
    }
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
7.03k
    {
372
7.03k
        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
7.03k
        else
379
7.03k
        {
380
7.03k
            num_bufs_preenc_me_que = MIN_L1_L0_STAGGER_NON_SEQ +
381
7.03k
                                     ps_enc_ctxt->ps_stat_prms->s_lap_prms.i4_rc_look_ahead_pics +
382
7.03k
                                     (MIN_L0_IPE_ENC_STAGGER - 1) + NUM_BUFS_DECOMP_HME;
383
7.03k
        }
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
7.03k
        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
7.03k
        else
392
7.03k
        {
393
7.03k
            num_bufs_L0_ipe_enc = MIN_L0_IPE_ENC_STAGGER;
394
7.03k
        }
395
396
7.03k
        max_delay_preenc_l0_que = MIN_L1_L0_STAGGER_NON_SEQ +
397
7.03k
                                  ps_enc_ctxt->ps_stat_prms->s_lap_prms.i4_rc_look_ahead_pics + 1;
398
7.03k
    }
399
400
    /* ------------ popluate the lap static parameters ------------- */
401
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_max_closed_gop_period =
402
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_closed_gop_period;
403
404
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_min_closed_gop_period =
405
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_min_closed_gop_period;
406
407
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_max_cra_open_gop_period =
408
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_cra_open_gop_period;
409
410
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_max_i_open_gop_period =
411
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_i_open_gop_period;
412
413
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames =
414
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames;
415
416
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_max_temporal_layers =
417
7.03k
        ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_temporal_layers;
418
419
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_width = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_width;
420
421
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_height = ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_height;
422
423
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_enable_logo = ps_enc_ctxt->ps_stat_prms->i4_enable_logo;
424
425
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_src_interlace_field =
426
7.03k
        ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_field_pic;
427
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_frame_rate =
428
7.03k
        ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_frm_rate_num /
429
7.03k
        ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_frm_rate_denom;
430
431
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_blu_ray_spec = ps_enc_ctxt->i4_blu_ray_spec;
432
433
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_internal_bit_depth =
434
7.03k
        ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth;
435
436
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_input_bit_depth =
437
7.03k
        ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_input_bit_depth;
438
439
7.03k
    ps_enc_ctxt->s_lap_stat_prms.u1_chroma_array_type =
440
7.03k
        (ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV) ? 2 : 1;
441
442
7.03k
    ps_enc_ctxt->s_lap_stat_prms.i4_rc_pass_num = ps_enc_ctxt->ps_stat_prms->s_pass_prms.i4_pass;
443
444
7.03k
    if(0 == i4_resolution_id)
445
7.03k
    {
446
14.0k
        for(ctr = 0; ctr < ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_num_res_layers; ctr++)
447
7.03k
        {
448
7.03k
            ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] =
449
7.03k
                ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[ctr].i4_quality_preset;
450
451
7.03k
            if(ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] == IHEVCE_QUALITY_P7)
452
389
            {
453
389
                ps_enc_ctxt->s_lap_stat_prms.ai4_quality_preset[ctr] = IHEVCE_QUALITY_P6;
454
389
            }
455
7.03k
        }
456
7.03k
    }
457
7.03k
    memcpy(
458
7.03k
        &ps_enc_ctxt->s_lap_stat_prms.s_lap_params,
459
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_lap_prms,
460
7.03k
        sizeof(ihevce_lap_params_t));
461
462
    /* copy the create prms as runtime prms */
463
7.03k
    memcpy(
464
7.03k
        &ps_enc_ctxt->s_runtime_src_prms,
465
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_src_prms,
466
7.03k
        sizeof(ihevce_src_params_t));
467
    /*Copy the target params*/
468
7.03k
    memcpy(
469
7.03k
        &ps_enc_ctxt->s_runtime_tgt_params,
470
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id],
471
7.03k
        sizeof(ihevce_tgt_params_t));
472
7.03k
    ps_enc_ctxt->s_lap_stat_prms.e_arch_type = ps_enc_ctxt->ps_stat_prms->e_arch_type;
473
7.03k
    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
7.03k
    memcpy(
477
7.03k
        &ps_enc_ctxt->s_runtime_src_prms,
478
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_src_prms,
479
7.03k
        sizeof(ihevce_src_params_t));
480
    /*Copy the target params*/
481
7.03k
    memcpy(
482
7.03k
        &ps_enc_ctxt->s_runtime_tgt_params,
483
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id],
484
7.03k
        sizeof(ihevce_tgt_params_t));
485
486
    /* copy the run time coding parameters */
487
7.03k
    memcpy(
488
7.03k
        &ps_enc_ctxt->s_runtime_coding_prms,
489
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms,
490
7.03k
        sizeof(ihevce_coding_params_t));
491
    /*change in run time parameter*/
492
7.03k
    if(ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1)
493
7.03k
    {
494
7.03k
        ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames = (DEFAULT_MAX_REFERENCE_PICS)
495
7.03k
                                                                     << i4_field_pic;
496
7.03k
        ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames =
497
7.03k
            ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames;
498
7.03k
    }
499
7.03k
    ASSERT(i4_num_enc_loop_frm_pllel == i4_num_me_frm_pllel);
500
501
7.03k
    if((1 == i4_num_enc_loop_frm_pllel) && (1 == i4_num_me_frm_pllel))
502
7.03k
    {
503
7.03k
        max_num_ref_pics = ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames;
504
7.03k
    }
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
7.03k
    total_memtabs_req += ihevce_tiles_get_num_mem_recs();
516
517
    /* ---------- Enc loop Memtabs --------- */
518
7.03k
    total_memtabs_req +=
519
7.03k
        ihevce_enc_loop_get_num_mem_recs(i4_num_bitrate_inst, i4_num_enc_loop_frm_pllel);
520
    /* ---------- ME Memtabs --------------- */
521
7.03k
    total_memtabs_req += ihevce_me_get_num_mem_recs(i4_num_me_frm_pllel);
522
523
    /* ---------- Coarse ME Memtabs --------------- */
524
7.03k
    total_memtabs_req += ihevce_coarse_me_get_num_mem_recs();
525
    /* ---------- IPE Memtabs -------------- */
526
7.03k
    total_memtabs_req += ihevce_ipe_get_num_mem_recs();
527
528
    /* ---------- ECD Memtabs -------------- */
529
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
530
7.03k
    {
531
7.03k
        total_memtabs_req += ihevce_entropy_get_num_mem_recs();
532
7.03k
    }
533
7.03k
    if(0 == ps_enc_ctxt->i4_resolution_id)
534
7.03k
    {
535
        /* ---------- LAP Memtabs--------------- */
536
7.03k
        total_memtabs_req += ihevce_lap_get_num_mem_recs();
537
7.03k
    }
538
    /* ---------- Decomp Pre Intra Memtabs--------------- */
539
7.03k
    total_memtabs_req += ihevce_decomp_pre_intra_get_num_mem_recs();
540
541
    /* ---------- RC memtabs --------------- */
542
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
543
7.03k
    {
544
7.03k
        total_memtabs_req += ihevce_rc_get_num_mem_recs(); /*HEVC_RC*/
545
7.03k
    }
546
547
    /* ---------- System Memtabs ----------- */
548
7.03k
    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
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
553
7.03k
    {
554
7.03k
        total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
555
7.03k
    }
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
7.03k
    total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
560
561
    /* ---Pre-encode Encode Que Mem requests -- */
562
7.03k
    total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
563
564
    /* -----ME / Enc-RD opt Que Mem requests --- */
565
7.03k
    total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
566
567
    /* ----Pre-encode L0 IPE to enc Que Mem requests -- */
568
7.03k
    total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
569
570
    /* --- ME-EncLoop Dep Mngr Row-Row Mem requests -- */
571
7.03k
    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
7.03k
    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
7.03k
    total_memtabs_req += ihevce_dmgr_get_num_mem_recs();
578
579
    /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem requests -- */
580
7.03k
    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
7.03k
    total_memtabs_req += ihevce_dmgr_get_num_mem_recs();
584
585
    /* --- Prev. frame PreEnc HME Done Dep Mngr Frm-Frm Mem requests -- */
586
7.03k
    total_memtabs_req += ihevce_dmgr_get_num_mem_recs();
587
588
    /* --- Prev. frame PreEnc L0 Done Dep Mngr Frm-Frm Mem requests -- */
589
7.03k
    total_memtabs_req += ihevce_dmgr_get_num_mem_recs();
590
591
    /* --- ME-Prev Recon Dep Mngr Row-Frm Mem requests -- */
592
7.03k
    total_memtabs_req +=
593
7.03k
        (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * ihevce_dmgr_get_num_mem_recs();
594
595
    /* ----- allocate memomry for memtabs --- */
596
7.03k
    {
597
7.03k
        iv_mem_rec_t s_memtab;
598
599
7.03k
        s_memtab.i4_size = sizeof(iv_mem_rec_t);
600
7.03k
        s_memtab.i4_mem_size = total_memtabs_req * sizeof(iv_mem_rec_t);
601
7.03k
        s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
602
7.03k
        s_memtab.i4_mem_alignment = 4;
603
604
7.03k
        ps_intrf_ctxt->ihevce_mem_alloc(
605
7.03k
            ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->ps_stat_prms->s_sys_api, &s_memtab);
606
7.03k
        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
7.03k
        ps_memtab = (iv_mem_rec_t *)s_memtab.pv_base;
613
7.03k
    }
614
615
    /* --------------------------------------------------------------------- */
616
    /* ------------------  Collating memory requirements ------------------- */
617
    /* --------------------------------------------------------------------- */
618
619
    /* ----------- Tiles mem requests -------------*/
620
0
    total_memtabs_used += ihevce_tiles_get_mem_recs(
621
7.03k
        &ps_memtab[total_memtabs_used],
622
7.03k
        ps_enc_ctxt->ps_stat_prms,
623
7.03k
        &ps_enc_ctxt->s_frm_ctb_prms,
624
7.03k
        i4_resolution_id,
625
7.03k
        space_for_mem_in_enc_grp);
626
627
    /* ---------- Enc loop Mem requests --------- */
628
7.03k
    total_memtabs_used += ihevce_enc_loop_get_mem_recs(
629
7.03k
        &ps_memtab[total_memtabs_used],
630
7.03k
        ps_enc_ctxt->ps_stat_prms,
631
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
632
7.03k
        i4_num_bitrate_inst,
633
7.03k
        i4_num_enc_loop_frm_pllel,
634
7.03k
        space_for_mem_in_enc_grp,
635
7.03k
        i4_resolution_id);
636
    /* ---------- ME Mem requests --------------- */
637
7.03k
    total_memtabs_used += ihevce_me_get_mem_recs(
638
7.03k
        &ps_memtab[total_memtabs_used],
639
7.03k
        ps_enc_ctxt->ps_stat_prms,
640
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
641
7.03k
        space_for_mem_in_enc_grp,
642
7.03k
        i4_resolution_id,
643
7.03k
        i4_num_me_frm_pllel);
644
645
    /* ---------- Coarse ME Mem requests --------------- */
646
7.03k
    total_memtabs_used += ihevce_coarse_me_get_mem_recs(
647
7.03k
        &ps_memtab[total_memtabs_used],
648
7.03k
        ps_enc_ctxt->ps_stat_prms,
649
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
650
7.03k
        space_for_mem_in_pre_enc_grp,
651
7.03k
        i4_resolution_id);
652
    /* ---------- IPE Mem requests -------------- */
653
7.03k
    total_memtabs_used += ihevce_ipe_get_mem_recs(
654
7.03k
        &ps_memtab[total_memtabs_used],
655
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
656
7.03k
        space_for_mem_in_pre_enc_grp);
657
    /* ---------- ECD Mem requests -------------- */
658
7.03k
    i4_num_bitrate_inst = ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
659
7.03k
                              .i4_num_bitrate_instances;
660
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
661
7.03k
    {
662
7.03k
        total_memtabs_used += ihevce_entropy_get_mem_recs(
663
7.03k
            &ps_memtab[total_memtabs_used],
664
7.03k
            ps_enc_ctxt->ps_stat_prms,
665
7.03k
            space_for_mem_in_pre_enc_grp,
666
7.03k
            i4_resolution_id);
667
7.03k
    }
668
669
7.03k
    if(0 == i4_resolution_id)
670
7.03k
    {
671
        /* ---------- LAP Mem requests--------------- */
672
7.03k
        total_memtabs_used +=
673
7.03k
            ihevce_lap_get_mem_recs(&ps_memtab[total_memtabs_used], space_for_mem_in_pre_enc_grp);
674
7.03k
    }
675
676
    /* -------- DECOMPOSITION PRE INTRA Mem requests-------- */
677
7.03k
    total_memtabs_used += ihevce_decomp_pre_intra_get_mem_recs(
678
7.03k
        &ps_memtab[total_memtabs_used],
679
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
680
7.03k
        space_for_mem_in_pre_enc_grp);
681
682
    /* ---------- RC Mem requests --------------- */
683
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
684
7.03k
    {
685
7.03k
        total_memtabs_used += ihevce_rc_get_mem_recs(
686
7.03k
            &ps_memtab[total_memtabs_used],
687
7.03k
            ps_enc_ctxt->ps_stat_prms,
688
7.03k
            space_for_mem_in_pre_enc_grp,
689
7.03k
            &ps_enc_ctxt->ps_stat_prms->s_sys_api);
690
7.03k
    }
691
692
    /* ---------- System Mem requests ----------- */
693
694
    /* allocate memory for pps tile */
695
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
696
697
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
698
699
7.03k
    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
7.03k
    else
707
7.03k
    {
708
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = sizeof(tile_t);
709
7.03k
    }
710
711
    /* increment the memtab counter */
712
7.03k
    total_memtabs_used++;
713
7.03k
    total_system_memtabs++;
714
715
    /* recon picture buffer pointer array */
716
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
717
7.03k
    {
718
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
719
720
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
721
722
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
723
7.03k
            (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * (sizeof(recon_pic_buf_t *));
724
725
        /* increment the memtab counter */
726
7.03k
        total_memtabs_used++;
727
7.03k
        total_system_memtabs++;
728
7.03k
    }
729
730
    /* recon picture buffers structures */
731
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
732
7.03k
    {
733
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
734
735
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
736
737
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
738
7.03k
            (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) * (sizeof(recon_pic_buf_t));
739
740
        /* increment the memtab counter */
741
7.03k
        total_memtabs_used++;
742
7.03k
        total_system_memtabs++;
743
7.03k
    }
744
745
    /* reference/recon picture buffers */
746
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
747
7.03k
    {
748
7.03k
        WORD32 i4_chroma_buf_size_shift =
749
7.03k
            -(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth <= 8) +
750
7.03k
            (ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV);
751
752
7.03k
        buf_size = ((num_ctb_horz * ctb_size) + (PAD_HORZ << 1));
753
7.03k
        buf_size = buf_size * ((num_ctb_vert * ctb_size) + (PAD_VERT << 1));
754
7.03k
        buf_size = buf_size * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS);
755
756
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
757
758
7.03k
        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
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
762
            /* Luma */
763
7.03k
            (buf_size * ((ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth > 8)
764
7.03k
                             ? BUFFER_SIZE_MULTIPLIER_IF_HBD
765
7.03k
                             : 1)) +
766
            /* Chroma */
767
7.03k
            (SHL_NEG(buf_size, i4_chroma_buf_size_shift));
768
769
        /* increment the memtab counter */
770
7.03k
        total_memtabs_used++;
771
7.03k
        total_system_memtabs++;
772
7.03k
    }
773
    /* reference/recon picture subpel planes */
774
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
775
776
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
777
778
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
779
7.03k
        buf_size * (3 + L0ME_IN_OPENLOOP_MODE); /* 3 planes */
780
781
    /* increment the memtab counter */
782
7.03k
    total_memtabs_used++;
783
7.03k
    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
7.03k
    buf_size = (num_ctb_horz + 1) * (num_ctb_vert + 1) * num_pu_in_ctb;
788
7.03k
    buf_size = buf_size * sizeof(pu_col_mv_t) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) *
789
7.03k
               i4_num_bitrate_inst;
790
791
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
792
793
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
794
795
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
796
797
    /* increment the memtab counter */
798
7.03k
    total_memtabs_used++;
799
7.03k
    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
7.03k
    buf_size = (num_ctb_horz + 1) * (num_ctb_vert + 1) * num_pu_in_ctb;
805
7.03k
    buf_size = buf_size * sizeof(UWORD8) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) *
806
7.03k
               i4_num_bitrate_inst;
807
808
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
809
810
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
811
812
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
813
814
    /* increment the memtab counter */
815
7.03k
    total_memtabs_used++;
816
7.03k
    total_system_memtabs++;
817
818
    /* reference collocated MV bank map offsets map */
819
7.03k
    buf_size = num_ctb_horz * num_ctb_vert;
820
7.03k
    buf_size = buf_size * sizeof(UWORD16) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) *
821
7.03k
               i4_num_bitrate_inst;
822
823
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
824
825
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
826
827
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
828
829
    /* increment the memtab counter */
830
7.03k
    total_memtabs_used++;
831
7.03k
    total_system_memtabs++;
832
833
    /* reference colocated MV bank ctb offset */
834
7.03k
    buf_size = num_ctb_horz;
835
7.03k
    buf_size = buf_size * num_ctb_vert;
836
7.03k
    buf_size = buf_size * sizeof(UWORD32) * (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS) *
837
7.03k
               i4_num_bitrate_inst;
838
839
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
840
841
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
842
843
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
844
845
    /* increment the memtab counter */
846
7.03k
    total_memtabs_used++;
847
7.03k
    total_system_memtabs++;
848
849
    /* recon picture buffer pointer array for pre enc group */
850
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
851
852
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
853
854
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
855
7.03k
        (max_num_ref_pics + 1) * (sizeof(recon_pic_buf_t *));
856
857
    /* increment the memtab counter */
858
7.03k
    total_memtabs_used++;
859
7.03k
    total_system_memtabs++;
860
861
    /* recon picture buffers structures for pre enc group */
862
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
863
864
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
865
866
7.03k
    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
7.03k
    total_memtabs_used++;
870
7.03k
    total_system_memtabs++;
871
7.03k
    {
872
7.03k
        num_input_buf_per_queue = ihevce_lap_get_num_ip_bufs(&ps_enc_ctxt->s_lap_stat_prms);
873
7.03k
        {
874
7.03k
            WORD32 i4_count_temp = 0, i4_last_queue_length;
875
876
            /*First allocate the memory for the buffer based on resolution*/
877
7.03k
            WORD32 ctb_align_pic_wd = ps_enc_ctxt->s_runtime_tgt_params.i4_width +
878
7.03k
                                      SET_CTB_ALIGN(
879
7.03k
                                          ps_enc_ctxt->s_runtime_tgt_params.i4_width,
880
7.03k
                                          ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size);
881
882
7.03k
            WORD32 ctb_align_pic_ht = ps_enc_ctxt->s_runtime_tgt_params.i4_height +
883
7.03k
                                      SET_CTB_ALIGN(
884
7.03k
                                          ps_enc_ctxt->s_runtime_tgt_params.i4_height,
885
7.03k
                                          ps_enc_ctxt->s_frm_ctb_prms.i4_ctb_size);
886
887
7.03k
            i4_last_queue_length = (num_input_buf_per_queue % MAX_QUEUE);
888
889
7.03k
            if((num_input_buf_per_queue % MAX_QUEUE) == 0)
890
0
                i4_last_queue_length = MAX_QUEUE;
891
892
7.03k
            ps_enc_ctxt->i4_num_input_buf_per_queue = num_input_buf_per_queue;
893
7.03k
            i4_yuv_min_size =
894
7.03k
                (ctb_align_pic_wd * ctb_align_pic_ht) +
895
7.03k
                ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV)
896
7.03k
                     ? (ctb_align_pic_wd * ctb_align_pic_ht)
897
7.03k
                     : ((ctb_align_pic_wd * ctb_align_pic_ht) >> 1));
898
7.03k
            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
7.03k
            i4_total_queues = num_input_buf_per_queue / MAX_QUEUE;
902
903
7.03k
            if((num_input_buf_per_queue % MAX_QUEUE) != 0)
904
7.03k
            {
905
7.03k
                i4_total_queues++;
906
7.03k
            }
907
908
7.03k
            ASSERT(i4_total_queues < 5);
909
910
14.0k
            for(i4_count_temp = 0; i4_count_temp < i4_total_queues; i4_count_temp++)
911
7.03k
            {
912
7.03k
                ps_memtab[total_memtabs_used].i4_mem_alignment = 32;
913
914
7.03k
                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
7.03k
                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
7.03k
                else
919
7.03k
                    ps_memtab[total_memtabs_used].i4_mem_size =
920
7.03k
                        (i4_yuv_min_size)*i4_last_queue_length;
921
922
                /* increment the memtab counter */
923
7.03k
                total_memtabs_used++;
924
7.03k
                total_system_memtabs++;
925
7.03k
            }
926
7.03k
        }
927
        /*memory for input buffer structure*/
928
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
929
930
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
931
932
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
933
7.03k
            (num_input_buf_per_queue) * (sizeof(ihevce_lap_enc_buf_t *));
934
935
        /* increment the memtab counter */
936
7.03k
        total_memtabs_used++;
937
7.03k
        total_system_memtabs++;
938
939
        /* frame process/entropy coding buffer structures */
940
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
941
942
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
943
944
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
945
7.03k
            (num_input_buf_per_queue) * (sizeof(ihevce_lap_enc_buf_t));
946
        /* increment the memtab counter */
947
7.03k
        total_memtabs_used++;
948
7.03k
        total_system_memtabs++;
949
950
        /*input synch ctrl command*/
951
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
952
953
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
954
955
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
956
7.03k
            (num_input_buf_per_queue) * (ENC_COMMAND_BUFF_SIZE);
957
958
7.03k
        total_memtabs_used++;
959
7.03k
        total_system_memtabs++;
960
7.03k
    }
961
962
    /* Pre-encode/encode coding buffer pointer array */
963
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
964
965
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
966
967
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
968
7.03k
        (num_bufs_preenc_me_que) * (sizeof(pre_enc_me_ctxt_t *));
969
970
    /* increment the memtab counter */
971
7.03k
    total_memtabs_used++;
972
7.03k
    total_system_memtabs++;
973
974
    /* frame process/entropy coding buffer structures */
975
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
976
977
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
978
979
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
980
7.03k
        (num_bufs_preenc_me_que) * (sizeof(pre_enc_me_ctxt_t));
981
982
    /* increment the memtab counter */
983
7.03k
    total_memtabs_used++;
984
7.03k
    total_system_memtabs++;
985
986
    /* Pre-encode L0 IPE output to ME buffer pointer*/
987
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
988
989
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
990
991
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
992
7.03k
        (num_bufs_L0_ipe_enc) * (sizeof(pre_enc_L0_ipe_encloop_ctxt_t *));
993
994
    /* increment the memtab counter */
995
7.03k
    total_memtabs_used++;
996
7.03k
    total_system_memtabs++;
997
998
    /* Pre-encode L0 IPE output to ME buffer */
999
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1000
1001
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1002
1003
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size =
1004
7.03k
        (num_bufs_L0_ipe_enc) * (sizeof(pre_enc_L0_ipe_encloop_ctxt_t));
1005
1006
    /* increment the memtab counter */
1007
7.03k
    total_memtabs_used++;
1008
7.03k
    total_system_memtabs++;
1009
1010
    /* CTB analyse Frame level  */
1011
7.03k
    buf_size = num_ctb_horz;
1012
7.03k
    buf_size = buf_size * num_ctb_vert;
1013
7.03k
    buf_size = buf_size * sizeof(ctb_analyse_t) * num_bufs_preenc_me_que;
1014
1015
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1016
1017
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1018
1019
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1020
1021
    /* increment the memtab counter */
1022
7.03k
    total_memtabs_used++;
1023
7.03k
    total_system_memtabs++;
1024
1025
    /* ME layer ctxt pointer */
1026
7.03k
    buf_size = sizeof(layer_ctxt_t) * num_bufs_preenc_me_que;
1027
1028
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1029
1030
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1031
1032
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1033
1034
    /* increment the memtab counter */
1035
7.03k
    total_memtabs_used++;
1036
7.03k
    total_system_memtabs++;
1037
1038
    /* ME layer MV bank ctxt pointer */
1039
7.03k
    buf_size = sizeof(layer_mv_t) * num_bufs_preenc_me_que;
1040
1041
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1042
1043
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1044
1045
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1046
1047
    /* increment the memtab counter */
1048
7.03k
    total_memtabs_used++;
1049
7.03k
    total_system_memtabs++;
1050
1051
    /* ME layer MV bank pointer */
1052
7.03k
    buf_size = mv_bank_size * num_bufs_preenc_me_que;
1053
1054
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1055
1056
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1057
1058
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1059
1060
    /* increment the memtab counter */
1061
7.03k
    total_memtabs_used++;
1062
7.03k
    total_system_memtabs++;
1063
1064
    /* ME layer ref idx bank pointer */
1065
7.03k
    buf_size = ref_idx_bank_size * num_bufs_preenc_me_que;
1066
1067
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1068
1069
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1070
1071
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1072
1073
    /* increment the memtab counter */
1074
7.03k
    total_memtabs_used++;
1075
7.03k
    total_system_memtabs++;
1076
    /* Frame level array to store 8x8 intra cost */
1077
7.03k
    buf_size = (num_ctb_horz * ctb_size) >> 3;
1078
7.03k
    buf_size *= ((num_ctb_vert * ctb_size) >> 3);
1079
7.03k
    buf_size *= sizeof(double) * num_bufs_preenc_me_que;
1080
1081
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1082
1083
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1084
1085
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1086
1087
    /* increment the memtab counter */
1088
7.03k
    total_memtabs_used++;
1089
7.03k
    total_system_memtabs++;
1090
1091
    /* Frame level array to store ctb intra cost and modes */
1092
7.03k
    buf_size = (num_ctb_horz * num_ctb_vert);
1093
7.03k
    buf_size *= sizeof(ipe_l0_ctb_analyse_for_me_t) * num_bufs_L0_ipe_enc;
1094
1095
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1096
1097
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1098
1099
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1100
1101
    /* increment the memtab counter */
1102
7.03k
    total_memtabs_used++;
1103
7.03k
    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
7.03k
    buf_size = (a_ctb_align_wd[1] >> 5) * (a_ctb_align_ht[1] >> 5) * sizeof(ihevce_ed_ctb_l1_t) *
1111
7.03k
               num_bufs_preenc_me_que;
1112
1113
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1114
1115
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp;
1116
1117
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1118
1119
    /* increment the memtab counter */
1120
7.03k
    total_memtabs_used++;
1121
7.03k
    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
7.03k
    buf_size = (a_ctb_align_wd[1] >> 2) * (a_ctb_align_ht[1] >> 2) * sizeof(ihevce_ed_blk_t) *
1129
7.03k
               num_bufs_preenc_me_que;
1130
1131
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1132
1133
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp;
1134
1135
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1136
1137
    /* increment the memtab counter */
1138
7.03k
    total_memtabs_used++;
1139
7.03k
    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
7.03k
    buf_size = (a_ctb_align_wd[2] >> 2) * (a_ctb_align_ht[2] >> 2) * sizeof(ihevce_ed_blk_t) *
1147
7.03k
               num_bufs_preenc_me_que;
1148
1149
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1150
1151
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_pre_enc_grp;
1152
1153
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1154
1155
    /* increment the memtab counter */
1156
7.03k
    total_memtabs_used++;
1157
7.03k
    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
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1164
1165
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1166
1167
7.03k
    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
7.03k
    total_memtabs_used++;
1171
7.03k
    total_system_memtabs++;
1172
1173
    /* fme/enc que buffer structures */
1174
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1175
1176
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1177
1178
7.03k
    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
7.03k
    total_memtabs_used++;
1182
7.03k
    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
7.03k
    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
7.03k
    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
7.03k
    buf_size *= sizeof(job_queue_t);
1195
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1196
1197
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1198
1199
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1200
1201
    /* increment the memtab counter */
1202
7.03k
    total_memtabs_used++;
1203
7.03k
    total_system_memtabs++;
1204
1205
    /* cur_ctb_cu_tree_t Frame level  */
1206
7.03k
    buf_size = num_ctb_horz * MAX_NUM_NODES_CU_TREE;
1207
7.03k
    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
7.03k
    buf_size = buf_size * sizeof(cur_ctb_cu_tree_t) * NUM_ME_ENC_BUFS;
1211
1212
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1213
1214
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1215
1216
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1217
1218
    /* increment the memtab counter */
1219
7.03k
    total_memtabs_used++;
1220
7.03k
    total_system_memtabs++;
1221
1222
    /* me_ctb_data_t Frame level  */
1223
7.03k
    buf_size = num_ctb_horz * num_ctb_vert;
1224
1225
    /* This buffer is used to */
1226
7.03k
    buf_size = buf_size * sizeof(me_ctb_data_t) * NUM_ME_ENC_BUFS;
1227
1228
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1229
1230
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1231
1232
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1233
1234
    /* increment the memtab counter */
1235
7.03k
    total_memtabs_used++;
1236
7.03k
    total_system_memtabs++;
1237
1238
    /* following is for each bit-rate */
1239
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
1240
7.03k
    {
1241
        /* frame process/entropy coding buffer pointer array */
1242
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1243
1244
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1245
1246
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
1247
7.03k
            (NUM_FRMPROC_ENTCOD_BUFS) * (sizeof(frm_proc_ent_cod_ctxt_t *));
1248
1249
        /* increment the memtab counter */
1250
7.03k
        total_memtabs_used++;
1251
7.03k
        total_system_memtabs++;
1252
1253
        /* frame process/entropy coding buffer structures */
1254
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1255
1256
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1257
1258
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
1259
7.03k
            (NUM_FRMPROC_ENTCOD_BUFS) * (sizeof(frm_proc_ent_cod_ctxt_t));
1260
1261
        /* increment the memtab counter */
1262
7.03k
        total_memtabs_used++;
1263
7.03k
        total_system_memtabs++;
1264
1265
        /* CTB enc loop Frame level  */
1266
7.03k
        buf_size = num_ctb_horz;
1267
7.03k
        buf_size = buf_size * num_ctb_vert;
1268
7.03k
        buf_size = buf_size * sizeof(ctb_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS;
1269
1270
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1271
1272
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1273
1274
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1275
1276
        /* increment the memtab counter */
1277
7.03k
        total_memtabs_used++;
1278
7.03k
        total_system_memtabs++;
1279
1280
        /* CU enc loop Frame level  */
1281
7.03k
        buf_size = num_ctb_horz * num_cu_in_ctb;
1282
7.03k
        buf_size = buf_size * num_ctb_vert;
1283
7.03k
        buf_size = buf_size * sizeof(cu_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS;
1284
1285
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1286
1287
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1288
1289
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1290
1291
        /* increment the memtab counter */
1292
7.03k
        total_memtabs_used++;
1293
7.03k
        total_system_memtabs++;
1294
1295
        /* TU enc loop Frame level  */
1296
7.03k
        buf_size = num_ctb_horz * num_tu_in_ctb;
1297
7.03k
        buf_size = buf_size * num_ctb_vert;
1298
7.03k
        buf_size = buf_size * sizeof(tu_enc_loop_out_t) * NUM_FRMPROC_ENTCOD_BUFS;
1299
1300
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1301
1302
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1303
1304
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1305
1306
        /* increment the memtab counter */
1307
7.03k
        total_memtabs_used++;
1308
7.03k
        total_system_memtabs++;
1309
1310
        /* PU enc loop Frame level  */
1311
7.03k
        buf_size = num_ctb_horz * num_pu_in_ctb;
1312
7.03k
        buf_size = buf_size * num_ctb_vert;
1313
7.03k
        buf_size = buf_size * sizeof(pu_t) * NUM_FRMPROC_ENTCOD_BUFS;
1314
1315
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1316
1317
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1318
1319
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1320
1321
        /* increment the memtab counter */
1322
7.03k
        total_memtabs_used++;
1323
7.03k
        total_system_memtabs++;
1324
1325
        /* Coeffs Frame level  */
1326
7.03k
        buf_size =
1327
7.03k
            num_ctb_horz * ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV)
1328
7.03k
                                ? (num_tu_in_ctb << 1)
1329
7.03k
                                : ((num_tu_in_ctb * 3) >> 1));
1330
7.03k
        buf_size = buf_size * num_ctb_vert;
1331
7.03k
        buf_size = buf_size * sizeof(UWORD8) * MAX_SCAN_COEFFS_BYTES_4x4 * NUM_FRMPROC_ENTCOD_BUFS;
1332
1333
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1334
1335
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1336
1337
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1338
1339
        /* increment the memtab counter */
1340
7.03k
        total_memtabs_used++;
1341
7.03k
        total_system_memtabs++;
1342
1343
7.03k
#ifndef DISABLE_SEI
1344
        /* SEI Payload Data */
1345
7.03k
        buf_size = sizeof(UWORD8) * MAX_NUMBER_OF_SEI_PAYLOAD * MAX_SEI_PAYLOAD_PER_TLV *
1346
7.03k
                   NUM_FRMPROC_ENTCOD_BUFS;
1347
1348
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1349
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1350
1351
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1352
1353
        /* increment the memtab counter */
1354
7.03k
        total_memtabs_used++;
1355
7.03k
        total_system_memtabs++;
1356
7.03k
#endif
1357
7.03k
    }
1358
1359
    /* ------ Working mem frame level -------*/
1360
7.03k
    buf_size = ((num_ctb_horz * ctb_size) + 16);
1361
7.03k
    buf_size *= ((num_ctb_vert * ctb_size) + 23);
1362
7.03k
    buf_size *= sizeof(WORD16);
1363
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1364
1365
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1366
1367
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1368
1369
    /* increment the memtab counter */
1370
7.03k
    total_memtabs_used++;
1371
7.03k
    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
7.03k
    buf_size = (MAX_NUM_VERT_UNITS_FRM) * (NUM_PRE_ENC_JOBS_QUES) * (max_delay_preenc_l0_que);
1376
7.03k
    buf_size *= sizeof(job_queue_t);
1377
1378
7.03k
    ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
1379
1380
7.03k
    ps_memtab[total_memtabs_used].e_mem_type = (IV_MEM_TYPE_T)space_for_mem_in_enc_grp;
1381
1382
7.03k
    ps_memtab[total_memtabs_used].i4_mem_size = buf_size;
1383
1384
    /* increment the memtab counter */
1385
7.03k
    total_memtabs_used++;
1386
7.03k
    total_system_memtabs++;
1387
1388
    /* check on the system memtabs */
1389
7.03k
    ASSERT(total_system_memtabs <= TOTAL_SYSTEM_MEM_RECS);
1390
1391
    /* -----Frameproc Entcod Que Mem requests --- */
1392
    /*  derive for each bit-rate */
1393
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
1394
7.03k
    {
1395
7.03k
        total_memtabs_used += ihevce_buff_que_get_mem_recs(
1396
7.03k
            &ps_memtab[total_memtabs_used], NUM_FRMPROC_ENTCOD_BUFS, space_for_mem_in_enc_grp);
1397
7.03k
    }
1398
    /*mrs: Request memory for the input yuv queue*/
1399
7.03k
    total_memtabs_used += ihevce_buff_que_get_mem_recs(
1400
7.03k
        &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
7.03k
    total_memtabs_used += ihevce_buff_que_get_mem_recs(
1404
7.03k
        &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
7.03k
    total_memtabs_used += ihevce_buff_que_get_mem_recs(
1408
7.03k
        &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
7.03k
    total_memtabs_used += ihevce_buff_que_get_mem_recs(
1412
7.03k
        &ps_memtab[total_memtabs_used], num_bufs_L0_ipe_enc, space_for_mem_in_enc_grp);
1413
1414
    /* ---------- Dependency Manager allocations -------- */
1415
7.03k
    {
1416
        /* --- ME-EncLoop Dep Mngr Row-Row Mem requests -- */
1417
14.0k
        for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++)
1418
7.03k
        {
1419
7.03k
            total_memtabs_used += ihevce_dmgr_get_mem_recs(
1420
7.03k
                &ps_memtab[total_memtabs_used],
1421
7.03k
                DEP_MNGR_ROW_ROW_SYNC,
1422
7.03k
                (a_ctb_align_ht[0] / ctb_size),
1423
7.03k
                ps_enc_ctxt->ps_stat_prms->s_app_tile_params
1424
7.03k
                    .i4_num_tile_cols, /* Number of Col Tiles */
1425
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1426
7.03k
                space_for_mem_in_enc_grp);
1427
7.03k
        }
1428
1429
14.0k
        for(ctr = 0; ctr < i4_num_enc_loop_frm_pllel; ctr++)
1430
7.03k
        {
1431
            /* --- Prev. frame EncLoop Done Dep Mngr Frm-Frm Mem requests -- */
1432
7.03k
            total_memtabs_used += ihevce_dmgr_get_mem_recs(
1433
7.03k
                &ps_memtab[total_memtabs_used],
1434
7.03k
                DEP_MNGR_FRM_FRM_SYNC,
1435
7.03k
                (a_ctb_align_ht[0] / ctb_size),
1436
7.03k
                1, /* Number of Col Tiles : Don't care for FRM_FRM */
1437
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1438
7.03k
                space_for_mem_in_enc_grp);
1439
7.03k
        }
1440
        /* --- Prev. frame EncLoop Done for re-encode Dep Mngr Frm-Frm Mem requests -- */
1441
7.03k
        total_memtabs_used += ihevce_dmgr_get_mem_recs(
1442
7.03k
            &ps_memtab[total_memtabs_used],
1443
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
1444
7.03k
            (a_ctb_align_ht[0] / ctb_size),
1445
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
1446
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1447
7.03k
            space_for_mem_in_enc_grp);
1448
14.0k
        for(ctr = 0; ctr < i4_num_me_frm_pllel; ctr++)
1449
7.03k
        {
1450
            /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem requests -- */
1451
7.03k
            total_memtabs_used += ihevce_dmgr_get_mem_recs(
1452
7.03k
                &ps_memtab[total_memtabs_used],
1453
7.03k
                DEP_MNGR_FRM_FRM_SYNC,
1454
7.03k
                (a_ctb_align_ht[0] / ctb_size),
1455
7.03k
                1, /* Number of Col Tiles : Don't care for FRM_FRM */
1456
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1457
7.03k
                space_for_mem_in_enc_grp);
1458
7.03k
        }
1459
1460
        /* --- Prev. frame PreEnc L1 Done Dep Mngr Frm-Frm Mem requests -- */
1461
7.03k
        total_memtabs_used += ihevce_dmgr_get_mem_recs(
1462
7.03k
            &ps_memtab[total_memtabs_used],
1463
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
1464
7.03k
            (a_ctb_align_ht[0] / ctb_size),
1465
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
1466
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1467
7.03k
            space_for_mem_in_enc_grp);
1468
1469
        /* --- Prev. frame PreEnc HME Done Dep Mngr Frm-Frm Mem requests -- */
1470
7.03k
        total_memtabs_used += ihevce_dmgr_get_mem_recs(
1471
7.03k
            &ps_memtab[total_memtabs_used],
1472
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
1473
7.03k
            (a_ctb_align_ht[0] / ctb_size),
1474
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
1475
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1476
7.03k
            space_for_mem_in_enc_grp);
1477
1478
        /* --- Prev. frame PreEnc L0 Done Dep Mngr Frm-Frm Mem requests -- */
1479
7.03k
        total_memtabs_used += ihevce_dmgr_get_mem_recs(
1480
7.03k
            &ps_memtab[total_memtabs_used],
1481
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
1482
7.03k
            (a_ctb_align_ht[0] / ctb_size),
1483
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
1484
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1485
7.03k
            space_for_mem_in_enc_grp);
1486
1487
        /* --- ME-Prev Recon Dep Mngr Row-Frm Mem requests -- */
1488
42.2k
        for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++)
1489
35.1k
        {
1490
35.1k
            WORD32 i4_num_units = num_ctb_horz * num_ctb_vert;
1491
1492
35.1k
            total_memtabs_used += ihevce_dmgr_map_get_mem_recs(
1493
35.1k
                &ps_memtab[total_memtabs_used],
1494
35.1k
                i4_num_units,
1495
35.1k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1496
35.1k
                space_for_mem_in_enc_grp);
1497
35.1k
        }
1498
7.03k
    }
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
6.19M
    for(ctr = 0; ctr < total_memtabs_used; ctr++)
1508
6.19M
    {
1509
6.19M
        UWORD8 *pu1_mem = NULL;
1510
6.19M
        ps_intrf_ctxt->ihevce_mem_alloc(
1511
6.19M
            ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->ps_stat_prms->s_sys_api, &ps_memtab[ctr]);
1512
1513
6.19M
        pu1_mem = (UWORD8 *)ps_memtab[ctr].pv_base;
1514
1515
6.19M
        if(NULL == pu1_mem)
1516
0
        {
1517
0
            ps_intrf_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY;
1518
0
            return;
1519
0
        }
1520
6.19M
    }
1521
1522
    /* --------------------------------------------------------------------- */
1523
    /* --------- Initialisation of Modules & System memory ----------------- */
1524
    /* --------------------------------------------------------------------- */
1525
1526
    /* store the final allocated memtabs */
1527
7.03k
    ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs = total_memtabs_used;
1528
7.03k
    ps_enc_ctxt->s_mem_mngr.ps_create_memtab = ps_memtab;
1529
1530
    /* ---------- Tiles Mem init --------- */
1531
7.03k
    ps_enc_ctxt->ps_tile_params_base = (ihevce_tile_params_t *)ihevce_tiles_mem_init(
1532
7.03k
        ps_memtab, ps_enc_ctxt->ps_stat_prms, ps_enc_ctxt, i4_resolution_id);
1533
1534
7.03k
    ps_memtab += ihevce_tiles_get_num_mem_recs();
1535
1536
    /* ---------- Enc loop Mem init --------- */
1537
7.03k
    ps_enc_ctxt->s_module_ctxt.pv_enc_loop_ctxt = ihevce_enc_loop_init(
1538
7.03k
        ps_memtab,
1539
7.03k
        ps_enc_ctxt->ps_stat_prms,
1540
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1541
7.03k
        ps_intrf_ctxt->pv_osal_handle,
1542
7.03k
        &ps_enc_ctxt->s_func_selector,
1543
7.03k
        &ps_enc_ctxt->s_rc_quant,
1544
7.03k
        ps_enc_ctxt->ps_tile_params_base,
1545
7.03k
        i4_resolution_id,
1546
7.03k
        i4_num_enc_loop_frm_pllel,
1547
7.03k
        ps_enc_ctxt->u1_is_popcnt_available);
1548
1549
7.03k
    ps_memtab += ihevce_enc_loop_get_num_mem_recs(i4_num_bitrate_inst, i4_num_enc_loop_frm_pllel);
1550
    /* ---------- ME Mem init --------------- */
1551
7.03k
    ps_enc_ctxt->s_module_ctxt.pv_me_ctxt = ihevce_me_init(
1552
7.03k
        ps_memtab,
1553
7.03k
        ps_enc_ctxt->ps_stat_prms,
1554
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
1555
7.03k
        ps_intrf_ctxt->pv_osal_handle,
1556
7.03k
        &ps_enc_ctxt->s_rc_quant,
1557
7.03k
        (void *)ps_enc_ctxt->ps_tile_params_base,
1558
7.03k
        i4_resolution_id,
1559
7.03k
        i4_num_me_frm_pllel,
1560
7.03k
        ps_enc_ctxt->u1_is_popcnt_available);
1561
1562
7.03k
    ps_memtab += ihevce_me_get_num_mem_recs(i4_num_me_frm_pllel);
1563
1564
    /* ---------- Coarse ME Mem init --------------- */
1565
7.03k
    ps_enc_ctxt->s_module_ctxt.pv_coarse_me_ctxt = ihevce_coarse_me_init(
1566
7.03k
        ps_memtab,
1567
7.03k
        ps_enc_ctxt->ps_stat_prms,
1568
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1569
7.03k
        ps_intrf_ctxt->pv_osal_handle,
1570
7.03k
        i4_resolution_id,
1571
7.03k
        ps_enc_ctxt->u1_is_popcnt_available);
1572
1573
7.03k
    ps_memtab += ihevce_coarse_me_get_num_mem_recs();
1574
    /* ---------- IPE Mem init -------------- */
1575
7.03k
    ps_enc_ctxt->s_module_ctxt.pv_ipe_ctxt = ihevce_ipe_init(
1576
7.03k
        ps_memtab,
1577
7.03k
        ps_enc_ctxt->ps_stat_prms,
1578
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1579
7.03k
        ps_enc_ctxt->i4_ref_mbr_id,
1580
7.03k
        &ps_enc_ctxt->s_func_selector,
1581
7.03k
        &ps_enc_ctxt->s_rc_quant,
1582
7.03k
        i4_resolution_id,
1583
7.03k
        ps_enc_ctxt->u1_is_popcnt_available);
1584
1585
7.03k
    ps_memtab += ihevce_ipe_get_num_mem_recs();
1586
1587
7.03k
    ps_enc_ctxt->s_rc_quant.i2_max_qp = 51;
1588
7.03k
    ps_enc_ctxt->s_rc_quant.i2_min_qp = 0;
1589
7.03k
    ps_enc_ctxt->s_rc_quant.i1_qp_offset = 0;
1590
7.03k
    ps_enc_ctxt->s_rc_quant.i2_max_qscale =
1591
7.03k
        228 << 3;  // Q3 format is mantained for accuarate calc at lower qp
1592
7.03k
    ps_enc_ctxt->s_rc_quant.i2_min_qscale = 1;
1593
1594
    /* ---------- ECD Mem init -------------- */
1595
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
1596
7.03k
    {
1597
7.03k
        ps_enc_ctxt->s_module_ctxt.apv_ent_cod_ctxt[i] = ihevce_entropy_init(
1598
7.03k
            ps_memtab,
1599
7.03k
            ps_enc_ctxt->ps_stat_prms,
1600
7.03k
            (void *)ps_enc_ctxt->ps_tile_params_base,
1601
7.03k
            i4_resolution_id);
1602
1603
7.03k
        ps_memtab += ihevce_entropy_get_num_mem_recs();
1604
7.03k
    }
1605
1606
    /* ---------- LAP Mem init--------------- */
1607
7.03k
    if(i4_resolution_id == 0)
1608
7.03k
    {
1609
7.03k
        ps_enc_ctxt->s_module_ctxt.pv_lap_ctxt =
1610
7.03k
            ihevce_lap_init(ps_memtab, &ps_enc_ctxt->s_lap_stat_prms, ps_enc_ctxt->ps_stat_prms);
1611
1612
7.03k
        ps_memtab += ihevce_lap_get_num_mem_recs();
1613
7.03k
    }
1614
    /*-----------DECOMPOSITION PRE INTRA init----*/
1615
7.03k
    ps_enc_ctxt->s_module_ctxt.pv_decomp_pre_intra_ctxt = ihevce_decomp_pre_intra_init(
1616
7.03k
        ps_memtab,
1617
7.03k
        ps_enc_ctxt->ps_stat_prms,
1618
7.03k
        ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
1619
7.03k
        &ps_enc_ctxt->s_func_selector,
1620
7.03k
        i4_resolution_id,
1621
7.03k
        ps_enc_ctxt->u1_is_popcnt_available);
1622
1623
7.03k
    ps_memtab += ihevce_decomp_pre_intra_get_num_mem_recs();
1624
1625
    /* ---------- RC Mem init --------------- */
1626
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
1627
7.03k
    {
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
7.03k
        if(i == 0)
1632
7.03k
        {
1633
7.03k
            ps_enc_ctxt->s_module_ctxt.apv_rc_ctxt[i] = ihevce_rc_mem_init(
1634
7.03k
                ps_memtab,
1635
7.03k
                ps_enc_ctxt->ps_stat_prms,
1636
7.03k
                ps_enc_ctxt->i4_ref_mbr_id,
1637
7.03k
                &ps_enc_ctxt->s_rc_quant,
1638
7.03k
                ps_enc_ctxt->i4_resolution_id,
1639
7.03k
                ps_enc_ctxt->i4_look_ahead_frames_in_first_pass);
1640
7.03k
        }
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
7.03k
        ps_memtab += ihevce_rc_get_num_mem_recs();
1662
7.03k
    }
1663
1664
    /* ---------- System Mem init ----------- */
1665
7.03k
    {
1666
7.03k
        recon_pic_buf_t **pps_pic_bufs[IHEVCE_MAX_NUM_BITRATES];
1667
7.03k
        recon_pic_buf_t *ps_pic_bufs[IHEVCE_MAX_NUM_BITRATES];
1668
7.03k
        void *pv_recon_buf[IHEVCE_MAX_NUM_BITRATES];
1669
7.03k
#if(SRC_PADDING_FOR_TRAQO || ENABLE_SSD_CALC_RC)
1670
7.03k
        void *pv_recon_buf_source[IHEVCE_MAX_NUM_BITRATES] = { NULL };
1671
7.03k
#endif
1672
7.03k
        void *pv_uv_recon_buf[IHEVCE_MAX_NUM_BITRATES];
1673
7.03k
        UWORD8 *pu1_subpel_buf;
1674
7.03k
        pu_col_mv_t *ps_col_mv;
1675
7.03k
        UWORD8 *pu1_col_mv_map;
1676
7.03k
        UWORD16 *pu2_col_num_pu_map;
1677
7.03k
        UWORD32 *pu4_col_mv_off;
1678
7.03k
        WORD32 luma_frm_size;
1679
7.03k
        WORD32 recon_stride; /* stride for Y and UV(interleave) */
1680
7.03k
        WORD32 luma_frm_height; /* including padding    */
1681
7.03k
        WORD32 num_pu_in_frm;
1682
1683
        /* pps tile memory */
1684
14.0k
        for(i = 0; i < i4_num_bitrate_inst; i++)
1685
7.03k
        {
1686
7.03k
            ps_enc_ctxt->as_pps[i].ps_tile = (tile_t *)ps_memtab->pv_base;
1687
7.03k
        }
1688
1689
7.03k
        ps_memtab++; /* increment the memtabs */
1690
1691
        /* recon picture buffer pointer array */
1692
14.0k
        for(i = 0; i < i4_num_bitrate_inst; i++)
1693
7.03k
        {
1694
7.03k
            pps_pic_bufs[i] = (recon_pic_buf_t **)ps_memtab->pv_base;
1695
7.03k
            ps_memtab++; /* increment the memtabs */
1696
7.03k
        }
1697
1698
        /* recon picture buffers structures */
1699
14.0k
        for(i = 0; i < i4_num_bitrate_inst; i++)
1700
7.03k
        {
1701
7.03k
            ps_pic_bufs[i] = (recon_pic_buf_t *)ps_memtab->pv_base;
1702
7.03k
            ps_memtab++; /* increment the memtabs */
1703
7.03k
        }
1704
1705
        /* reference/recon picture buffers */
1706
14.0k
        for(i = 0; i < i4_num_bitrate_inst; i++)
1707
7.03k
        {
1708
7.03k
            pv_recon_buf[i] = ps_memtab->pv_base;
1709
7.03k
            ps_memtab++; /* increment the memtabs */
1710
7.03k
        }
1711
        /* reference/recon picture subpel planes */
1712
7.03k
        pu1_subpel_buf = (UWORD8 *)ps_memtab->pv_base;
1713
        /* increment the memtabs */
1714
7.03k
        ps_memtab++;
1715
        /* reference colocated MV bank */
1716
7.03k
        ps_col_mv = (pu_col_mv_t *)ps_memtab->pv_base;
1717
        /* increment the memtabs */
1718
7.03k
        ps_memtab++;
1719
1720
        /* reference colocated MV bank map */
1721
7.03k
        pu1_col_mv_map = (UWORD8 *)ps_memtab->pv_base;
1722
        /* increment the memtabs */
1723
7.03k
        ps_memtab++;
1724
1725
        /* reference collocated MV bank map offsets map */
1726
7.03k
        pu2_col_num_pu_map = (UWORD16 *)ps_memtab->pv_base;
1727
        /* increment the memtabs */
1728
7.03k
        ps_memtab++;
1729
1730
        /* reference colocated MV bank ctb offset */
1731
7.03k
        pu4_col_mv_off = (UWORD32 *)ps_memtab->pv_base;
1732
        /* increment the memtabs */
1733
7.03k
        ps_memtab++;
1734
1735
        /* compute the stride and frame height after accounting for padding */
1736
7.03k
        recon_stride = ((num_ctb_horz * ctb_size) + (PAD_HORZ << 1));
1737
7.03k
        luma_frm_height = ((num_ctb_vert * ctb_size) + (PAD_VERT << 1));
1738
7.03k
        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
7.03k
        pu1_subpel_buf += (recon_stride * PAD_VERT);
1742
7.03k
        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
7.03k
        num_pu_in_frm = (num_ctb_horz + 1) * num_pu_in_ctb * (num_ctb_vert + 1);
1747
1748
14.0k
        for(i = 0; i < i4_num_bitrate_inst; i++)
1749
7.03k
        {
1750
7.03k
            pv_uv_recon_buf[i] = pv_recon_buf[i];
1751
1752
            /* increment the recon buffer to take care of padding */
1753
7.03k
            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
7.03k
            pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + luma_frm_size;
1757
7.03k
            if(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.i4_internal_bit_depth == 8)
1758
7.03k
            {
1759
                /* increment the chroma recon buffer to take care of padding    */
1760
                /* vert padding halved but horiz is same due to uv interleave   */
1761
7.03k
                pv_uv_recon_buf[i] =
1762
7.03k
                    (UWORD8 *)pv_uv_recon_buf[i] + (recon_stride * (PAD_VERT >> 1)) +
1763
7.03k
                    ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV)
1764
7.03k
                         ? (recon_stride * (PAD_VERT >> 1))
1765
7.03k
                         : 0);
1766
7.03k
                pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + PAD_HORZ;
1767
7.03k
            }
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
42.2k
            for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++)
1775
35.1k
            {
1776
35.1k
                pps_pic_bufs[i][ctr] =
1777
35.1k
                    ps_pic_bufs[i];  //check the index of pps [i] should be first or last index?!!
1778
1779
35.1k
                ps_pic_bufs[i]->s_yuv_buf_desc.i4_size = sizeof(iv_enc_yuv_buf_t);
1780
35.1k
                ps_pic_bufs[i]->s_yuv_buf_desc.pv_y_buf = pv_recon_buf[i];
1781
35.1k
                ps_pic_bufs[i]->s_yuv_buf_desc.pv_v_buf = NULL;
1782
35.1k
                {
1783
35.1k
                    ps_pic_bufs[i]->s_yuv_buf_desc.pv_u_buf = pv_uv_recon_buf[i];
1784
35.1k
                }
1785
35.1k
                ps_pic_bufs[i]->apu1_y_sub_pel_planes[0] = ((i == 0) ? pu1_subpel_buf : NULL);
1786
35.1k
                ps_pic_bufs[i]->apu1_y_sub_pel_planes[1] =
1787
35.1k
                    ((i == 0) ? (pu1_subpel_buf + luma_frm_size) : NULL);
1788
35.1k
                ps_pic_bufs[i]->apu1_y_sub_pel_planes[2] =
1789
35.1k
                    ((i == 0) ? (pu1_subpel_buf + (luma_frm_size * 2)) : NULL);
1790
35.1k
                ps_pic_bufs[i]->ps_frm_col_mv = ps_col_mv;
1791
35.1k
                ps_pic_bufs[i]->pu1_frm_pu_map = pu1_col_mv_map;
1792
35.1k
                ps_pic_bufs[i]->pu2_num_pu_map = pu2_col_num_pu_map;
1793
35.1k
                ps_pic_bufs[i]->pu4_pu_off = pu4_col_mv_off;
1794
35.1k
                ps_pic_bufs[i]->i4_is_free = 1;
1795
35.1k
                ps_pic_bufs[i]->i4_poc = -1;
1796
35.1k
                ps_pic_bufs[i]->i4_display_num = -1;
1797
35.1k
                ps_pic_bufs[i]->i4_buf_id = ctr;
1798
1799
                /* frame level buff increments */
1800
35.1k
                ps_col_mv += num_pu_in_frm;
1801
35.1k
                pu1_col_mv_map += num_pu_in_frm;
1802
35.1k
                pu2_col_num_pu_map += (num_ctb_horz * num_ctb_vert);
1803
35.1k
                pu4_col_mv_off += (num_ctb_horz * num_ctb_vert);
1804
1805
35.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
35.1k
                else
1811
35.1k
                {
1812
35.1k
                    pv_recon_buf[i] = (UWORD8 *)pv_recon_buf[i] + ((3 * luma_frm_size) >> 1);
1813
35.1k
                    pv_uv_recon_buf[i] = (UWORD8 *)pv_uv_recon_buf[i] + ((3 * luma_frm_size) >> 1);
1814
35.1k
                }
1815
35.1k
                pu1_subpel_buf += ((3 + L0ME_IN_OPENLOOP_MODE) * luma_frm_size); /* 3 planes */
1816
35.1k
                ps_pic_bufs[i]++;
1817
35.1k
            }  //ctr ends
1818
1819
            /* store the queue pointer and num buffs to context */
1820
7.03k
            ps_enc_ctxt->pps_recon_buf_q[i] = pps_pic_bufs[i];
1821
7.03k
            ps_enc_ctxt->ai4_num_buf_recon_q[i] = (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS);
1822
1823
7.03k
        }  //bitrate ctr ends
1824
1825
7.03k
    }  //end of system memory init
1826
1827
    /* Pre encode group recon buffer  containier NO Buffers will be allocated / used */
1828
7.03k
    {
1829
7.03k
        recon_pic_buf_t *ps_pic_bufs;
1830
1831
        /* recon picture buffer pointer array */
1832
7.03k
        pps_pre_enc_pic_bufs = (recon_pic_buf_t **)ps_memtab->pv_base;
1833
        /* increment the memtabs */
1834
7.03k
        ps_memtab++;
1835
1836
        /* recon picture buffers structures */
1837
7.03k
        ps_pic_bufs = (recon_pic_buf_t *)ps_memtab->pv_base;
1838
        /* increment the memtabs */
1839
7.03k
        ps_memtab++;
1840
1841
        /* loop to initialise all the memories */
1842
42.2k
        for(ctr = 0; ctr < (max_num_ref_pics + 1); ctr++)
1843
35.1k
        {
1844
35.1k
            pps_pre_enc_pic_bufs[ctr] = ps_pic_bufs;
1845
1846
35.1k
            ps_pic_bufs->s_yuv_buf_desc.i4_size = sizeof(iv_enc_yuv_buf_t);
1847
35.1k
            ps_pic_bufs->s_yuv_buf_desc.pv_y_buf = NULL;
1848
35.1k
            ps_pic_bufs->s_yuv_buf_desc.pv_u_buf = NULL;
1849
35.1k
            ps_pic_bufs->s_yuv_buf_desc.pv_v_buf = NULL;
1850
35.1k
            ps_pic_bufs->apu1_y_sub_pel_planes[0] = NULL;
1851
35.1k
            ps_pic_bufs->apu1_y_sub_pel_planes[1] = NULL;
1852
35.1k
            ps_pic_bufs->apu1_y_sub_pel_planes[2] = NULL;
1853
35.1k
            ps_pic_bufs->ps_frm_col_mv = NULL;
1854
35.1k
            ps_pic_bufs->pu1_frm_pu_map = NULL;
1855
35.1k
            ps_pic_bufs->pu2_num_pu_map = NULL;
1856
35.1k
            ps_pic_bufs->pu4_pu_off = NULL;
1857
35.1k
            ps_pic_bufs->i4_is_free = 1;
1858
35.1k
            ps_pic_bufs->i4_poc = -1;
1859
35.1k
            ps_pic_bufs->i4_buf_id = ctr;
1860
1861
            /* frame level buff increments */
1862
35.1k
            ps_pic_bufs++;
1863
35.1k
        }
1864
1865
        /* store the queue pointer and num buffs to context */
1866
7.03k
        ps_enc_ctxt->pps_pre_enc_recon_buf_q = pps_pre_enc_pic_bufs;
1867
7.03k
        ps_enc_ctxt->i4_pre_enc_num_buf_recon_q = (max_num_ref_pics + 1);
1868
7.03k
    }
1869
1870
    /* Frame level buffers and Que between pre-encode & encode */
1871
7.03k
    {
1872
7.03k
        pre_enc_me_ctxt_t *ps_pre_enc_bufs;
1873
7.03k
        pre_enc_L0_ipe_encloop_ctxt_t *ps_L0_ipe_enc_bufs;
1874
7.03k
        ihevce_lap_enc_buf_t *ps_lap_enc_input_buf;
1875
7.03k
        ctb_analyse_t *ps_ctb_analyse;
1876
7.03k
        UWORD8 *pu1_me_lyr_ctxt;
1877
7.03k
        UWORD8 *pu1_me_lyr_bank_ctxt;
1878
7.03k
        UWORD8 *pu1_mv_bank;
1879
7.03k
        UWORD8 *pu1_ref_idx_bank;
1880
7.03k
        double *plf_intra_8x8_cost;
1881
7.03k
        ipe_l0_ctb_analyse_for_me_t *ps_ipe_analyse_ctb;
1882
7.03k
        ihevce_ed_ctb_l1_t *ps_ed_ctb_l1;
1883
7.03k
        ihevce_ed_blk_t *ps_layer1_buf;
1884
7.03k
        ihevce_ed_blk_t *ps_layer2_buf;
1885
7.03k
        UWORD8 *pu1_lap_input_yuv_buf[4];
1886
7.03k
        UWORD8 *pu1_input_synch_ctrl_cmd;
1887
7.03k
        WORD32 i4_count = 0;
1888
        /*initialize the memory for input buffer*/
1889
7.03k
        {
1890
14.0k
            for(i4_count = 0; i4_count < i4_total_queues; i4_count++)
1891
7.03k
            {
1892
7.03k
                pu1_lap_input_yuv_buf[i4_count] = (UWORD8 *)ps_memtab->pv_base;
1893
                /* increment the memtabs */
1894
7.03k
                ps_memtab++;
1895
7.03k
            }
1896
7.03k
            pps_lap_enc_input_bufs = (ihevce_lap_enc_buf_t **)ps_memtab->pv_base;
1897
            /* increment the memtabs */
1898
7.03k
            ps_memtab++;
1899
1900
            /*memory for the input buffer structure*/
1901
7.03k
            ps_lap_enc_input_buf = (ihevce_lap_enc_buf_t *)ps_memtab->pv_base;
1902
7.03k
            ps_memtab++;
1903
1904
7.03k
            pu1_input_synch_ctrl_cmd = (UWORD8 *)ps_memtab->pv_base;
1905
7.03k
            ps_memtab++;
1906
7.03k
        }
1907
        /* pre encode /encode coding buffer pointer array */
1908
7.03k
        pps_pre_enc_bufs = (pre_enc_me_ctxt_t **)ps_memtab->pv_base;
1909
        /* increment the memtabs */
1910
7.03k
        ps_memtab++;
1911
1912
        /* pre encode /encode buffer structure */
1913
7.03k
        ps_pre_enc_bufs = (pre_enc_me_ctxt_t *)ps_memtab->pv_base;
1914
        /* increment the memtabs */
1915
7.03k
        ps_memtab++;
1916
1917
        /*  Pre-encode L0 IPE output to ME buffer pointer */
1918
7.03k
        pps_L0_ipe_enc_bufs = (pre_enc_L0_ipe_encloop_ctxt_t **)ps_memtab->pv_base;
1919
        /* increment the memtabs */
1920
7.03k
        ps_memtab++;
1921
1922
        /* Pre-encode L0 IPE output to ME buffer */
1923
7.03k
        ps_L0_ipe_enc_bufs = (pre_enc_L0_ipe_encloop_ctxt_t *)ps_memtab->pv_base;
1924
        /* increment the memtabs */
1925
7.03k
        ps_memtab++;
1926
1927
        /* CTB analyse Frame level  */
1928
7.03k
        ps_ctb_analyse = (ctb_analyse_t *)ps_memtab->pv_base;
1929
        /* increment the memtabs */
1930
7.03k
        ps_memtab++;
1931
1932
        /* ME layer ctxt Frame level  */
1933
7.03k
        pu1_me_lyr_ctxt = (UWORD8 *)ps_memtab->pv_base;
1934
        /* increment the memtabs */
1935
7.03k
        ps_memtab++;
1936
1937
        /* ME layer bank ctxt Frame level  */
1938
7.03k
        pu1_me_lyr_bank_ctxt = (UWORD8 *)ps_memtab->pv_base;
1939
        /* increment the memtabs */
1940
7.03k
        ps_memtab++;
1941
1942
        /* ME layer MV bank Frame level  */
1943
7.03k
        pu1_mv_bank = (UWORD8 *)ps_memtab->pv_base;
1944
        /* increment the memtabs */
1945
7.03k
        ps_memtab++;
1946
1947
        /* ME layer ref idx bank Frame level  */
1948
7.03k
        pu1_ref_idx_bank = (UWORD8 *)ps_memtab->pv_base;
1949
        /* increment the memtabs */
1950
7.03k
        ps_memtab++;
1951
        /* 8x8 intra costs for entire frame */
1952
7.03k
        plf_intra_8x8_cost = (double *)ps_memtab->pv_base;
1953
7.03k
        ps_memtab++;
1954
1955
        /* ctb intra costs and modes for entire frame */
1956
7.03k
        ps_ipe_analyse_ctb = (ipe_l0_ctb_analyse_for_me_t *)ps_memtab->pv_base;
1957
7.03k
        ps_memtab++;
1958
1959
        /*Contains ctb level information at pre-intra stage */
1960
7.03k
        ps_ed_ctb_l1 = (ihevce_ed_ctb_l1_t *)ps_memtab->pv_base;
1961
7.03k
        ps_memtab++;
1962
1963
        /* Layer L1 buf */
1964
7.03k
        ps_layer1_buf = (ihevce_ed_blk_t *)ps_memtab->pv_base;
1965
        /* increment the memtabs */
1966
7.03k
        ps_memtab++;
1967
1968
        /* Layer2 buf */
1969
7.03k
        ps_layer2_buf = (ihevce_ed_blk_t *)ps_memtab->pv_base;
1970
        /* increment the memtabs */
1971
7.03k
        ps_memtab++;
1972
1973
        /* loop to initialise all the memories*/
1974
        /*mrs: assign individual input yuv frame pointers here*/
1975
1976
7.03k
        i4_count = 0;
1977
        /* loop to initialise the buffer pointer */
1978
26.7k
        for(ctr = 0; ctr < num_input_buf_per_queue; ctr++)
1979
19.7k
        {
1980
19.7k
            pps_lap_enc_input_bufs[ctr] = &ps_lap_enc_input_buf[ctr];
1981
1982
19.7k
            pps_lap_enc_input_bufs[ctr]->s_input_buf.i4_size = sizeof(iv_input_data_ctrl_buffs_t);
1983
1984
19.7k
            pps_lap_enc_input_bufs[ctr]->s_input_buf.pv_synch_ctrl_bufs = pu1_input_synch_ctrl_cmd;
1985
1986
19.7k
            pps_lap_enc_input_bufs[ctr]->s_input_buf.s_input_buf.i4_size = sizeof(iv_yuv_buf_t);
1987
1988
19.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
19.7k
            {
1992
19.7k
                pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_y_buf =
1993
19.7k
                    pu1_lap_input_yuv_buf[i4_count];
1994
1995
19.7k
                pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_u_buf =
1996
19.7k
                    pu1_lap_input_yuv_buf[i4_count] + i4_luma_min_size;
1997
1998
19.7k
                pps_lap_enc_input_bufs[ctr]->s_lap_out.s_input_buf.pv_v_buf =
1999
19.7k
                    NULL; /*since yuv 420 format*/
2000
2001
19.7k
                pu1_lap_input_yuv_buf[i4_count] += i4_yuv_min_size;
2002
2003
19.7k
                if(((ctr + 1) % MAX_QUEUE) == 0)
2004
0
                    i4_count++;
2005
19.7k
            }
2006
19.7k
        }
2007
21.1k
        for(ctr = 0; ctr < num_bufs_preenc_me_que; ctr++)
2008
14.0k
        {
2009
14.0k
            pps_pre_enc_bufs[ctr] = ps_pre_enc_bufs;
2010
2011
14.0k
            ps_pre_enc_bufs->ps_ctb_analyse = ps_ctb_analyse;
2012
14.0k
            ps_pre_enc_bufs->pv_me_lyr_ctxt = (void *)pu1_me_lyr_ctxt;
2013
14.0k
            ps_pre_enc_bufs->pv_me_lyr_bnk_ctxt = (void *)pu1_me_lyr_bank_ctxt;
2014
14.0k
            ps_pre_enc_bufs->pv_me_mv_bank = (void *)pu1_mv_bank;
2015
14.0k
            ps_pre_enc_bufs->pv_me_ref_idx = (void *)pu1_ref_idx_bank;
2016
14.0k
            ps_pre_enc_bufs->ps_layer1_buf = ps_layer1_buf;
2017
14.0k
            ps_pre_enc_bufs->ps_layer2_buf = ps_layer2_buf;
2018
14.0k
            ps_pre_enc_bufs->ps_ed_ctb_l1 = ps_ed_ctb_l1;
2019
14.0k
            ps_pre_enc_bufs->plf_intra_8x8_cost = plf_intra_8x8_cost;
2020
2021
14.0k
            ps_ctb_analyse += num_ctb_horz * num_ctb_vert;
2022
14.0k
            pu1_me_lyr_ctxt += sizeof(layer_ctxt_t);
2023
14.0k
            pu1_me_lyr_bank_ctxt += sizeof(layer_mv_t);
2024
14.0k
            pu1_mv_bank += mv_bank_size;
2025
14.0k
            pu1_ref_idx_bank += ref_idx_bank_size;
2026
14.0k
            plf_intra_8x8_cost +=
2027
14.0k
                (((num_ctb_horz * ctb_size) >> 3) * ((num_ctb_vert * ctb_size) >> 3));
2028
14.0k
            ps_ed_ctb_l1 += (a_ctb_align_wd[1] >> 5) * (a_ctb_align_ht[1] >> 5);
2029
14.0k
            ps_layer1_buf += (a_ctb_align_wd[1] >> 2) * (a_ctb_align_ht[1] >> 2);
2030
14.0k
            ps_layer2_buf += (a_ctb_align_wd[2] >> 2) * (a_ctb_align_ht[2] >> 2);
2031
14.0k
            ps_pre_enc_bufs++;
2032
14.0k
        }
2033
2034
14.0k
        for(ctr = 0; ctr < num_bufs_L0_ipe_enc; ctr++)
2035
7.03k
        {
2036
7.03k
            pps_L0_ipe_enc_bufs[ctr] = ps_L0_ipe_enc_bufs;
2037
7.03k
            ps_L0_ipe_enc_bufs->ps_ipe_analyse_ctb = ps_ipe_analyse_ctb;
2038
7.03k
            ps_ipe_analyse_ctb += num_ctb_horz * num_ctb_vert;
2039
7.03k
            ps_L0_ipe_enc_bufs++;
2040
7.03k
        }
2041
7.03k
    }
2042
2043
    /* Frame level que between ME and Enc rd-opt */
2044
7.03k
    {
2045
7.03k
        me_enc_rdopt_ctxt_t *ps_me_enc_bufs;
2046
7.03k
        job_queue_t *ps_job_q_enc;
2047
7.03k
        me_ctb_data_t *ps_cur_ctb_me_data;
2048
7.03k
        cur_ctb_cu_tree_t *ps_cur_ctb_cu_tree;
2049
2050
        /* pre encode /encode coding buffer pointer array */
2051
7.03k
        pps_me_enc_bufs = (me_enc_rdopt_ctxt_t **)ps_memtab->pv_base;
2052
        /* increment the memtabs */
2053
7.03k
        ps_memtab++;
2054
2055
        /* pre encode /encode buffer structure */
2056
7.03k
        ps_me_enc_bufs = (me_enc_rdopt_ctxt_t *)ps_memtab->pv_base;
2057
        /* increment the memtabs */
2058
7.03k
        ps_memtab++;
2059
2060
        /*me and enc job queue memory */
2061
7.03k
        ps_job_q_enc = (job_queue_t *)ps_memtab->pv_base;
2062
        /* increment the memtabs */
2063
7.03k
        ps_memtab++;
2064
2065
        /*ctb me data memory*/
2066
7.03k
        ps_cur_ctb_cu_tree = (cur_ctb_cu_tree_t *)ps_memtab->pv_base;
2067
        /* increment the memtabs */
2068
7.03k
        ps_memtab++;
2069
2070
        /*ctb me data memory*/
2071
7.03k
        ps_cur_ctb_me_data = (me_ctb_data_t *)ps_memtab->pv_base;
2072
        /* increment the memtabs */
2073
7.03k
        ps_memtab++;
2074
2075
        /* loop to initialise all the memories */
2076
14.0k
        for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++)
2077
7.03k
        {
2078
7.03k
            pps_me_enc_bufs[ctr] = ps_me_enc_bufs;
2079
2080
7.03k
            ps_me_enc_bufs->ps_job_q_enc = ps_job_q_enc;
2081
7.03k
            ps_me_enc_bufs->ps_cur_ctb_cu_tree = ps_cur_ctb_cu_tree;
2082
7.03k
            ps_me_enc_bufs->ps_cur_ctb_me_data = ps_cur_ctb_me_data;
2083
2084
7.03k
            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
7.03k
            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
7.03k
            ps_cur_ctb_cu_tree += (num_ctb_horz * MAX_NUM_NODES_CU_TREE * num_ctb_vert);
2099
7.03k
            ps_cur_ctb_me_data += (num_ctb_horz * num_ctb_vert);
2100
2101
7.03k
            ps_me_enc_bufs++;
2102
7.03k
        }
2103
7.03k
    }
2104
    /* Frame level Que between frame process & entropy */
2105
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2106
7.03k
    {
2107
7.03k
        frm_proc_ent_cod_ctxt_t *ps_frmp_ent_bufs;
2108
7.03k
        ctb_enc_loop_out_t *ps_ctb;
2109
7.03k
        cu_enc_loop_out_t *ps_cu;
2110
7.03k
        tu_enc_loop_out_t *ps_tu;
2111
7.03k
        pu_t *ps_pu;
2112
7.03k
        UWORD8 *pu1_coeffs;
2113
7.03k
        WORD32 num_ctb_in_frm;
2114
7.03k
        WORD32 coeff_size;
2115
2116
        /* frame process/entropy coding buffer pointer array */
2117
7.03k
        pps_frm_proc_ent_cod_bufs[i] = (frm_proc_ent_cod_ctxt_t **)ps_memtab->pv_base;
2118
        /* increment the memtabs */
2119
7.03k
        ps_memtab++;
2120
2121
        /* frame process/entropy coding buffer structure */
2122
7.03k
        ps_frmp_ent_bufs = (frm_proc_ent_cod_ctxt_t *)ps_memtab->pv_base;
2123
        /* increment the memtabs */
2124
7.03k
        ps_memtab++;
2125
2126
        /* CTB enc loop Frame level  */
2127
7.03k
        ps_ctb = (ctb_enc_loop_out_t *)ps_memtab->pv_base;
2128
        /* increment the memtabs */
2129
7.03k
        ps_memtab++;
2130
2131
        /* CU enc loop Frame level  */
2132
7.03k
        ps_cu = (cu_enc_loop_out_t *)ps_memtab->pv_base;
2133
        /* increment the memtabs */
2134
7.03k
        ps_memtab++;
2135
2136
        /* TU enc loop Frame level  */
2137
7.03k
        ps_tu = (tu_enc_loop_out_t *)ps_memtab->pv_base;
2138
        /* increment the memtabs */
2139
7.03k
        ps_memtab++;
2140
2141
        /* PU enc loop Frame level  */
2142
7.03k
        ps_pu = (pu_t *)ps_memtab->pv_base;
2143
        /* increment the memtabs */
2144
7.03k
        ps_memtab++;
2145
2146
        /* Coeffs Frame level  */
2147
7.03k
        pu1_coeffs = (UWORD8 *)ps_memtab->pv_base;
2148
        /* increment the memtabs */
2149
7.03k
        ps_memtab++;
2150
2151
7.03k
#ifndef DISABLE_SEI
2152
        /* CC User Data  */
2153
7.03k
        UWORD8 *pu1_sei_payload;
2154
7.03k
        pu1_sei_payload = (UWORD8 *)ps_memtab->pv_base;
2155
7.03k
        ps_memtab++;
2156
7.03k
#endif
2157
2158
7.03k
        num_ctb_in_frm = num_ctb_horz * num_ctb_vert;
2159
2160
        /* calculate the coeff size */
2161
7.03k
        coeff_size =
2162
7.03k
            num_ctb_horz * ((ps_enc_ctxt->ps_stat_prms->s_src_prms.i4_chr_format == IV_YUV_422SP_UV)
2163
7.03k
                                ? (num_tu_in_ctb << 1)
2164
7.03k
                                : ((num_tu_in_ctb * 3) >> 1));
2165
7.03k
        coeff_size = coeff_size * num_ctb_vert * MAX_SCAN_COEFFS_BYTES_4x4;
2166
        /* loop to initialise all the memories */
2167
14.0k
        for(ctr = 0; ctr < NUM_FRMPROC_ENTCOD_BUFS; ctr++)
2168
7.03k
        {
2169
7.03k
            pps_frm_proc_ent_cod_bufs[i][ctr] = ps_frmp_ent_bufs;
2170
2171
7.03k
            ps_frmp_ent_bufs->ps_frm_ctb_data = ps_ctb;
2172
7.03k
            ps_frmp_ent_bufs->ps_frm_cu_data = ps_cu;
2173
7.03k
            ps_frmp_ent_bufs->ps_frm_pu_data = ps_pu;
2174
7.03k
            ps_frmp_ent_bufs->ps_frm_tu_data = ps_tu;
2175
7.03k
            ps_frmp_ent_bufs->pv_coeff_data = pu1_coeffs;
2176
2177
            /* memset the slice headers and buffer to keep track */
2178
7.03k
            memset(&ps_frmp_ent_bufs->s_slice_hdr, 0, sizeof(slice_header_t));
2179
2180
            /*PIC_INFO*/
2181
7.03k
            memset(&ps_frmp_ent_bufs->s_pic_level_info, 0, sizeof(s_pic_level_acc_info_t));
2182
2183
7.03k
            ps_ctb += num_ctb_in_frm;
2184
7.03k
            ps_cu += num_ctb_in_frm * num_cu_in_ctb;
2185
7.03k
            ps_pu += num_ctb_in_frm * num_pu_in_ctb;
2186
7.03k
            ps_tu += num_ctb_in_frm * num_tu_in_ctb;
2187
2188
7.03k
            pu1_coeffs += coeff_size;
2189
2190
7.03k
#ifndef DISABLE_SEI
2191
77.4k
            for(WORD32 num_sei = 0; num_sei < MAX_NUMBER_OF_SEI_PAYLOAD; num_sei++)
2192
70.3k
            {
2193
70.3k
                ps_frmp_ent_bufs->as_sei_payload[num_sei].pu1_sei_payload = pu1_sei_payload;
2194
70.3k
                ps_frmp_ent_bufs->as_sei_payload[num_sei].u4_payload_type = 0;
2195
70.3k
                ps_frmp_ent_bufs->as_sei_payload[num_sei].u4_payload_length = 0;
2196
70.3k
                pu1_sei_payload += MAX_SEI_PAYLOAD_PER_TLV;
2197
70.3k
            }
2198
2199
7.03k
#endif
2200
7.03k
            ps_frmp_ent_bufs++;
2201
7.03k
        }
2202
7.03k
    }
2203
2204
    /* Working memory for encoder */
2205
7.03k
    ps_enc_ctxt->pu1_frm_lvl_wkg_mem = (UWORD8 *)ps_memtab->pv_base;
2206
7.03k
    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
7.03k
    ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[0] = (job_queue_t *)ps_memtab->pv_base;
2217
14.0k
    for(ctr = 1; ctr < max_delay_preenc_l0_que; ctr++)
2218
7.03k
    {
2219
7.03k
        ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[ctr] =
2220
7.03k
            ps_enc_ctxt->s_multi_thrd.aps_job_q_pre_enc[0] +
2221
7.03k
            (MAX_NUM_VERT_UNITS_FRM * NUM_PRE_ENC_JOBS_QUES * ctr);
2222
7.03k
    }
2223
7.03k
    ps_memtab++;
2224
2225
    /* -----Frameproc Entcod Que mem_init --- */
2226
    /* init ptrs for each bit-rate */
2227
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2228
7.03k
    {
2229
7.03k
        ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_FRM_PRS_ENT_COD_Q + i] = ihevce_buff_que_init(
2230
7.03k
            ps_memtab, NUM_FRMPROC_ENTCOD_BUFS, (void **)pps_frm_proc_ent_cod_bufs[i]);
2231
7.03k
        ps_memtab += ihevce_buff_que_get_num_mem_recs();
2232
7.03k
    }
2233
    /*mrs*/
2234
    /* ----Encoder owned input buffer queue init----*/
2235
7.03k
    ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_ENC_INPUT_Q] =
2236
7.03k
        ihevce_buff_que_init(ps_memtab, num_input_buf_per_queue, (void **)pps_lap_enc_input_bufs);
2237
7.03k
    ps_memtab += ihevce_buff_que_get_num_mem_recs();
2238
2239
    /* -----Pre-Encode / Encode Que mem_init --- */
2240
7.03k
    ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_PRE_ENC_ME_Q] =
2241
7.03k
        ihevce_buff_que_init(ps_memtab, num_bufs_preenc_me_que, (void **)pps_pre_enc_bufs);
2242
2243
7.03k
    ps_memtab += ihevce_buff_que_get_num_mem_recs();
2244
2245
    /* -----ME / Enc-RD opt Que mem_init --- */
2246
7.03k
    ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_ME_ENC_RDOPT_Q] =
2247
7.03k
        ihevce_buff_que_init(ps_memtab, NUM_ME_ENC_BUFS, (void **)pps_me_enc_bufs);
2248
2249
7.03k
    ps_memtab += ihevce_buff_que_get_num_mem_recs();
2250
2251
    /* -----Pre-Encode L0 IPE to enc queue --- */
2252
7.03k
    ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_L0_IPE_ENC_Q] =
2253
7.03k
        ihevce_buff_que_init(ps_memtab, num_bufs_L0_ipe_enc, (void **)pps_L0_ipe_enc_bufs);
2254
2255
7.03k
    ps_memtab += ihevce_buff_que_get_num_mem_recs();
2256
2257
    /* ---------- Dependency Manager allocations -------- */
2258
7.03k
    {
2259
7.03k
        osal_sem_attr_t attr = OSAL_DEFAULT_SEM_ATTR;
2260
7.03k
        WORD32 i1_is_sem_enabled;
2261
2262
7.03k
        if(ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
2263
7.03k
               .i4_quality_preset >= IHEVCE_QUALITY_P4)
2264
1.96k
        {
2265
1.96k
            i1_is_sem_enabled = 0;
2266
1.96k
        }
2267
5.07k
        else
2268
5.07k
        {
2269
5.07k
            i1_is_sem_enabled = 1;
2270
5.07k
        }
2271
2272
        /* allocate semaphores for all the threads in pre-enc and enc */
2273
14.0k
        for(ctr = 0; ctr < ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds; ctr++)
2274
7.03k
        {
2275
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle[ctr] =
2276
7.03k
                osal_sem_create(ps_intrf_ctxt->pv_osal_handle, &attr);
2277
7.03k
            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
7.03k
        }
2283
2284
14.0k
        for(ctr = 0; ctr < ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds; ctr++)
2285
7.03k
        {
2286
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle[ctr] =
2287
7.03k
                osal_sem_create(ps_intrf_ctxt->pv_osal_handle, &attr);
2288
7.03k
            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
7.03k
        }
2294
2295
        /* --- ME-EncLoop Dep Mngr Row-Row Init -- */
2296
14.0k
        for(ctr = 0; ctr < NUM_ME_ENC_BUFS; ctr++)
2297
7.03k
        {
2298
7.03k
            me_enc_rdopt_ctxt_t *ps_me_enc_bufs = pps_me_enc_bufs[ctr];
2299
2300
7.03k
            ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me = ihevce_dmgr_init(
2301
7.03k
                ps_memtab,
2302
7.03k
                ps_intrf_ctxt->pv_osal_handle,
2303
7.03k
                DEP_MNGR_ROW_ROW_SYNC,
2304
7.03k
                (a_ctb_align_ht[0] / ctb_size),
2305
7.03k
                (a_ctb_align_wd[0] / ctb_size),
2306
7.03k
                ps_enc_ctxt->ps_tile_params_base->i4_num_tile_cols, /* Number of Col Tiles */
2307
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
2308
7.03k
                i1_is_sem_enabled /*Sem Disabled/Enabled*/
2309
7.03k
            );
2310
7.03k
            ps_memtab += ihevce_dmgr_get_num_mem_recs();
2311
2312
            /* Register Enc group semaphore handles */
2313
7.03k
            ihevce_dmgr_reg_sem_hdls(
2314
7.03k
                ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me,
2315
7.03k
                ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2316
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2317
2318
            /* Register the handle in multithread ctxt also for free purpose */
2319
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_encloop_dep_me[ctr] =
2320
7.03k
                ps_me_enc_bufs->pv_dep_mngr_encloop_dep_me;
2321
7.03k
        }
2322
2323
14.0k
        for(ctr = 0; ctr < i4_num_enc_loop_frm_pllel; ctr++)
2324
7.03k
        {
2325
            /* --- Prev. frame EncLoop Done Dep Mngr Frm-Frm Mem Init -- */
2326
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_done[ctr] = ihevce_dmgr_init(
2327
7.03k
                ps_memtab,
2328
7.03k
                ps_intrf_ctxt->pv_osal_handle,
2329
7.03k
                DEP_MNGR_FRM_FRM_SYNC,
2330
7.03k
                (a_ctb_align_ht[0] / ctb_size),
2331
7.03k
                (a_ctb_align_wd[0] / ctb_size),
2332
7.03k
                1, /* Number of Col Tiles : Don't care for FRM_FRM */
2333
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
2334
7.03k
                1 /*Sem Enabled*/
2335
7.03k
            );
2336
7.03k
            ps_memtab += ihevce_dmgr_get_num_mem_recs();
2337
2338
            /* Register Enc group semaphore handles */
2339
7.03k
            ihevce_dmgr_reg_sem_hdls(
2340
7.03k
                ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_done[ctr],
2341
7.03k
                ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2342
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2343
7.03k
        }
2344
        /* --- Prev. frame EncLoop Done Dep Mngr  for re-encode  Frm-Frm Mem Init -- */
2345
7.03k
        ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_enc_done_for_reenc = ihevce_dmgr_init(
2346
7.03k
            ps_memtab,
2347
7.03k
            ps_intrf_ctxt->pv_osal_handle,
2348
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
2349
7.03k
            (a_ctb_align_ht[0] / ctb_size),
2350
7.03k
            (a_ctb_align_wd[0] / ctb_size),
2351
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
2352
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
2353
7.03k
            1 /*Sem Enabled*/
2354
7.03k
        );
2355
7.03k
        ps_memtab += ihevce_dmgr_get_num_mem_recs();
2356
2357
        /* Register Enc group semaphore handles */
2358
7.03k
        ihevce_dmgr_reg_sem_hdls(
2359
7.03k
            ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_enc_done_for_reenc,
2360
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2361
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2362
14.0k
        for(ctr = 0; ctr < i4_num_me_frm_pllel; ctr++)
2363
7.03k
        {
2364
            /* --- Prev. frame ME Done Dep Mngr Frm-Frm Mem Init -- */
2365
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_me_done[ctr] = ihevce_dmgr_init(
2366
7.03k
                ps_memtab,
2367
7.03k
                ps_intrf_ctxt->pv_osal_handle,
2368
7.03k
                DEP_MNGR_FRM_FRM_SYNC,
2369
7.03k
                (a_ctb_align_ht[0] / ctb_size),
2370
7.03k
                (a_ctb_align_wd[0] / ctb_size),
2371
7.03k
                1, /* Number of Col Tiles : Don't care for FRM_FRM */
2372
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
2373
7.03k
                1 /*Sem Enabled*/
2374
7.03k
            );
2375
7.03k
            ps_memtab += ihevce_dmgr_get_num_mem_recs();
2376
2377
            /* Register Enc group semaphore handles */
2378
7.03k
            ihevce_dmgr_reg_sem_hdls(
2379
7.03k
                ps_enc_ctxt->s_multi_thrd.apv_dep_mngr_prev_frame_me_done[ctr],
2380
7.03k
                ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2381
7.03k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2382
7.03k
        }
2383
        /* --- Prev. frame PreEnc L1 Done Dep Mngr Frm-Frm Mem Init -- */
2384
7.03k
        ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l1 = ihevce_dmgr_init(
2385
7.03k
            ps_memtab,
2386
7.03k
            ps_intrf_ctxt->pv_osal_handle,
2387
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
2388
7.03k
            (a_ctb_align_ht[0] / ctb_size),
2389
7.03k
            (a_ctb_align_wd[0] / ctb_size),
2390
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
2391
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
2392
7.03k
            1 /*Sem Enabled*/
2393
7.03k
        );
2394
7.03k
        ps_memtab += ihevce_dmgr_get_num_mem_recs();
2395
2396
        /* Register Pre-Enc group semaphore handles */
2397
7.03k
        ihevce_dmgr_reg_sem_hdls(
2398
7.03k
            ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l1,
2399
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle,
2400
7.03k
            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
7.03k
        ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_coarse_me = ihevce_dmgr_init(
2404
7.03k
            ps_memtab,
2405
7.03k
            ps_intrf_ctxt->pv_osal_handle,
2406
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
2407
7.03k
            (a_ctb_align_ht[0] / ctb_size),
2408
7.03k
            (a_ctb_align_wd[0] / ctb_size),
2409
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
2410
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
2411
7.03k
            1 /*Sem Enabled*/
2412
7.03k
        );
2413
7.03k
        ps_memtab += ihevce_dmgr_get_num_mem_recs();
2414
2415
        /* Register Pre-Enc group semaphore handles */
2416
7.03k
        ihevce_dmgr_reg_sem_hdls(
2417
7.03k
            ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_coarse_me,
2418
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle,
2419
7.03k
            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
7.03k
        ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l0 = ihevce_dmgr_init(
2423
7.03k
            ps_memtab,
2424
7.03k
            ps_intrf_ctxt->pv_osal_handle,
2425
7.03k
            DEP_MNGR_FRM_FRM_SYNC,
2426
7.03k
            (a_ctb_align_ht[0] / ctb_size),
2427
7.03k
            (a_ctb_align_wd[0] / ctb_size),
2428
7.03k
            1, /* Number of Col Tiles : Don't care for FRM_FRM */
2429
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds,
2430
7.03k
            1 /*Sem Enabled*/
2431
7.03k
        );
2432
7.03k
        ps_memtab += ihevce_dmgr_get_num_mem_recs();
2433
2434
        /* Register Pre-Enc group semaphore handles */
2435
7.03k
        ihevce_dmgr_reg_sem_hdls(
2436
7.03k
            ps_enc_ctxt->s_multi_thrd.pv_dep_mngr_prev_frame_pre_enc_l0,
2437
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle,
2438
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds);
2439
2440
        /* --- ME-Prev Recon Dep Mngr Row-Frm Mem init -- */
2441
42.2k
        for(ctr = 0; ctr < (max_num_ref_pics + 1 + NUM_EXTRA_RECON_BUFS); ctr++)
2442
35.1k
        {
2443
35.1k
            WORD32 ai4_tile_xtra_ctb[4] = { 0 };
2444
2445
35.1k
            ps_enc_ctxt->pps_recon_buf_q[0][ctr]->pv_dep_mngr_recon = ihevce_dmgr_map_init(
2446
35.1k
                ps_memtab,
2447
35.1k
                num_ctb_vert,
2448
35.1k
                num_ctb_horz,
2449
35.1k
                i1_is_sem_enabled, /*Sem Disabled/Enabled*/
2450
35.1k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds,
2451
35.1k
                ai4_tile_xtra_ctb);
2452
2453
35.1k
            ps_memtab += ihevce_dmgr_get_num_mem_recs();
2454
2455
            /* Register Enc group semaphore handles */
2456
35.1k
            ihevce_dmgr_reg_sem_hdls(
2457
35.1k
                ps_enc_ctxt->pps_recon_buf_q[0][ctr]->pv_dep_mngr_recon,
2458
35.1k
                ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2459
35.1k
                ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2460
35.1k
        }
2461
2462
        /* ------ Module level register semaphores -------- */
2463
7.03k
        ihevce_coarse_me_reg_thrds_sem(
2464
7.03k
            ps_enc_ctxt->s_module_ctxt.pv_coarse_me_ctxt,
2465
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_pre_enc_thrd_sem_handle,
2466
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_pre_enc_proc_thrds);
2467
2468
7.03k
        ihevce_enc_loop_reg_sem_hdls(
2469
7.03k
            ps_enc_ctxt->s_module_ctxt.pv_enc_loop_ctxt,
2470
7.03k
            ps_enc_ctxt->s_multi_thrd.apv_enc_thrd_sem_handle,
2471
7.03k
            ps_enc_ctxt->s_multi_thrd.i4_num_enc_proc_thrds);
2472
7.03k
    }
2473
2474
    /* copy the run time source parameters from create time prms */
2475
0
    memcpy(
2476
7.03k
        &ps_enc_ctxt->s_runtime_src_prms,
2477
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_src_prms,
2478
7.03k
        sizeof(ihevce_src_params_t));
2479
2480
7.03k
    memcpy(
2481
7.03k
        &ps_enc_ctxt->s_runtime_tgt_params,
2482
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id],
2483
7.03k
        sizeof(ihevce_tgt_params_t));
2484
2485
    /* copy the run time coding parameters from create time prms */
2486
7.03k
    memcpy(
2487
7.03k
        &ps_enc_ctxt->s_runtime_coding_prms,
2488
7.03k
        &ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms,
2489
7.03k
        sizeof(ihevce_coding_params_t));
2490
2491
    /*change in run time parameter*/
2492
7.03k
    if(ps_enc_ctxt->ps_stat_prms->s_coding_tools_prms.i4_max_reference_frames == -1)
2493
7.03k
    {
2494
7.03k
        ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames = (DEFAULT_MAX_REFERENCE_PICS)
2495
7.03k
                                                                     << i4_field_pic;
2496
2497
7.03k
        ps_enc_ctxt->s_lap_stat_prms.i4_max_reference_frames =
2498
7.03k
            ps_enc_ctxt->s_runtime_coding_prms.i4_max_reference_frames;
2499
7.03k
    }
2500
2501
    /* populate the frame level ctb parameters based on run time params */
2502
7.03k
    ihevce_set_pre_enc_prms(ps_enc_ctxt);
2503
2504
7.03k
    return;
2505
7.03k
}
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
7.03k
{
2534
    /* local variables */
2535
7.03k
    WORD32 total_memtabs_req = 0;
2536
7.03k
    WORD32 total_memtabs_used = 0;
2537
7.03k
    WORD32 ctr;
2538
7.03k
    iv_mem_rec_t *ps_memtab;
2539
7.03k
    WORD32 i;  //counter variable
2540
7.03k
    iv_output_data_buffs_desc_t *ps_out_desc;
2541
7.03k
    iv_recon_data_buffs_desc_t *ps_rec_desc;
2542
7.03k
    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
7.03k
    enc_ctxt_t *ps_enc_ctxt_base = (enc_ctxt_t *)ps_hle_ctxt->apv_enc_hdl[0];
2545
2546
7.03k
    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
7.03k
    if(0 == ps_enc_ctxt->i4_resolution_id)
2555
7.03k
    {
2556
        /* array of pointers for input */
2557
7.03k
        total_memtabs_req++;
2558
2559
        /* pointers for input desc */
2560
7.03k
        total_memtabs_req++;
2561
2562
        /* que manager buffer requirements */
2563
7.03k
        total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
2564
2565
        /* ------ Input Control Que memtab ----- */
2566
        /* array of pointers for input control */
2567
7.03k
        total_memtabs_req++;
2568
2569
        /* pointers for input control desc */
2570
7.03k
        total_memtabs_req++;
2571
2572
        /* que manager buffer requirements */
2573
7.03k
        total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
2574
7.03k
    }
2575
2576
    /* ------ Output Data Que Memtab -------- */
2577
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2578
7.03k
    {
2579
        /* array of pointers for output */
2580
7.03k
        total_memtabs_req++;
2581
2582
        /* pointers for output desc */
2583
7.03k
        total_memtabs_req++;
2584
2585
        /* que manager buffer requirements */
2586
7.03k
        total_memtabs_req += ihevce_buff_que_get_num_mem_recs();
2587
7.03k
    }
2588
2589
    /* ------ Recon Data Que Memtab -------- */
2590
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2591
7.03k
    {
2592
7.03k
        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
7.03k
    }
2604
2605
    /* ----- allocate memomry for memtabs --- */
2606
7.03k
    {
2607
7.03k
        iv_mem_rec_t s_memtab;
2608
2609
7.03k
        s_memtab.i4_size = sizeof(iv_mem_rec_t);
2610
7.03k
        s_memtab.i4_mem_size = total_memtabs_req * sizeof(iv_mem_rec_t);
2611
7.03k
        s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2612
7.03k
        s_memtab.i4_mem_alignment = 4;
2613
2614
7.03k
        ps_hle_ctxt->ihevce_mem_alloc(
2615
7.03k
            ps_hle_ctxt->pv_mem_mgr_hdl, &ps_hle_ctxt->ps_static_cfg_prms->s_sys_api, &s_memtab);
2616
7.03k
        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
7.03k
        ps_memtab = (iv_mem_rec_t *)s_memtab.pv_base;
2622
7.03k
    }
2623
2624
    /* --------------------------------------------------------------------- */
2625
    /* ------------------  Collating memory requirements ------------------- */
2626
    /* --------------------------------------------------------------------- */
2627
7.03k
    if(0 == ps_enc_ctxt->i4_resolution_id)
2628
7.03k
    {
2629
        /* ------ Input Data Que memory requests -------- */
2630
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2631
2632
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2633
2634
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2635
7.03k
            ((ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs) * (sizeof(ihevce_lap_enc_buf_t *)));
2636
2637
        /* increment the memtab counter */
2638
7.03k
        total_memtabs_used++;
2639
2640
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2641
2642
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2643
2644
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2645
7.03k
            ((ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs) * (sizeof(ihevce_lap_enc_buf_t)));
2646
2647
        /* increment the memtab counter */
2648
7.03k
        total_memtabs_used++;
2649
2650
        /* call the Que manager get mem recs */
2651
7.03k
        total_memtabs_used += ihevce_buff_que_get_mem_recs(
2652
7.03k
            &ps_memtab[total_memtabs_used],
2653
7.03k
            ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs,
2654
7.03k
            IV_EXT_CACHEABLE_NORMAL_MEM);
2655
2656
        /* ------ Input Control Que memory requests -------- */
2657
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2658
2659
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2660
2661
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2662
7.03k
            ((ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs) *
2663
7.03k
             (sizeof(iv_input_ctrl_buffs_t *)));
2664
2665
        /* increment the memtab counter */
2666
7.03k
        total_memtabs_used++;
2667
2668
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2669
2670
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2671
2672
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2673
7.03k
            ((ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs) *
2674
7.03k
             (sizeof(iv_input_ctrl_buffs_t)));
2675
2676
        /* increment the memtab counter */
2677
7.03k
        total_memtabs_used++;
2678
2679
        /* call the Que manager get mem recs */
2680
7.03k
        total_memtabs_used += ihevce_buff_que_get_mem_recs(
2681
7.03k
            &ps_memtab[total_memtabs_used],
2682
7.03k
            ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs,
2683
7.03k
            IV_EXT_CACHEABLE_NORMAL_MEM);
2684
7.03k
    }
2685
2686
    /* ------ Output data Que memory requests -------- */
2687
7.03k
    ps_out_desc = ps_output_data_buffs_desc;
2688
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2689
7.03k
    {
2690
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2691
2692
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2693
2694
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2695
7.03k
            ((ps_out_desc->i4_num_bitstream_bufs) * (sizeof(iv_output_data_buffs_t *)));
2696
2697
        /* increment the memtab counter */
2698
7.03k
        total_memtabs_used++;
2699
2700
7.03k
        ps_memtab[total_memtabs_used].i4_mem_alignment = 8;
2701
2702
7.03k
        ps_memtab[total_memtabs_used].e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
2703
2704
7.03k
        ps_memtab[total_memtabs_used].i4_mem_size =
2705
7.03k
            ((ps_out_desc->i4_num_bitstream_bufs) * (sizeof(iv_output_data_buffs_t)));
2706
2707
        /* increment the memtab counter */
2708
7.03k
        total_memtabs_used++;
2709
2710
        /* call the Que manager get mem recs */
2711
7.03k
        total_memtabs_used += ihevce_buff_que_get_mem_recs(
2712
7.03k
            &ps_memtab[total_memtabs_used],
2713
7.03k
            ps_out_desc->i4_num_bitstream_bufs,
2714
7.03k
            IV_EXT_CACHEABLE_NORMAL_MEM);
2715
7.03k
        ps_out_desc++;
2716
7.03k
    }
2717
2718
    //recon_dump
2719
    /* ------ Recon Data Que memory requests -------- */
2720
7.03k
    ps_rec_desc = ps_recon_data_buffs_desc;
2721
7.03k
    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
7.03k
    ASSERT(total_memtabs_req == total_memtabs_used);
2760
154k
    for(ctr = 0; ctr < total_memtabs_used; ctr++)
2761
147k
    {
2762
147k
        UWORD8 *pu1_mem = NULL;
2763
147k
        ps_hle_ctxt->ihevce_mem_alloc(
2764
147k
            ps_hle_ctxt->pv_mem_mgr_hdl,
2765
147k
            &ps_hle_ctxt->ps_static_cfg_prms->s_sys_api,
2766
147k
            &ps_memtab[ctr]);
2767
2768
147k
        pu1_mem = (UWORD8 *)ps_memtab[ctr].pv_base;
2769
2770
147k
        if(NULL == pu1_mem)
2771
0
        {
2772
0
            ps_hle_ctxt->i4_error_code = IHEVCE_CANNOT_ALLOCATE_MEMORY;
2773
0
            return;
2774
0
        }
2775
147k
    }
2776
2777
    /* store the final allocated memtabs */
2778
7.03k
    ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs = total_memtabs_used;
2779
7.03k
    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
7.03k
    if(0 == ps_enc_ctxt->i4_resolution_id)
2787
7.03k
    {
2788
7.03k
        ihevce_lap_enc_buf_t **pps_inp_bufs;
2789
7.03k
        ihevce_lap_enc_buf_t *ps_inp_bufs;
2790
2791
7.03k
        pps_inp_bufs = (ihevce_lap_enc_buf_t **)ps_memtab->pv_base;
2792
7.03k
        ps_memtab++;
2793
2794
7.03k
        ps_inp_bufs = (ihevce_lap_enc_buf_t *)ps_memtab->pv_base;
2795
7.03k
        ps_memtab++;
2796
2797
        /* loop to initialise the buffer pointer */
2798
26.7k
        for(ctr = 0; ctr < ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs; ctr++)
2799
19.7k
        {
2800
19.7k
            pps_inp_bufs[ctr] = &ps_inp_bufs[ctr];
2801
2802
19.7k
            pps_inp_bufs[ctr]->s_input_buf.i4_size = sizeof(iv_input_data_ctrl_buffs_t);
2803
2804
19.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
19.7k
            if(ps_hle_ctxt->i4_create_time_input_allocation == 1)
2808
19.7k
            {
2809
19.7k
                pps_inp_bufs[ctr]->s_input_buf.pv_synch_ctrl_bufs =
2810
19.7k
                    ps_input_data_ctrl_buffs_desc->ppv_synch_ctrl_bufs[ctr];
2811
2812
19.7k
                pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_y_buf =
2813
19.7k
                    ps_input_data_ctrl_buffs_desc->ppv_y_buf[ctr];
2814
2815
19.7k
                pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_u_buf =
2816
19.7k
                    ps_input_data_ctrl_buffs_desc->ppv_u_buf[ctr];
2817
2818
19.7k
                pps_inp_bufs[ctr]->s_input_buf.s_input_buf.pv_v_buf =
2819
19.7k
                    ps_input_data_ctrl_buffs_desc->ppv_v_buf[ctr];
2820
19.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
19.7k
        }
2832
2833
        /* Get the input data buffer Q handle */
2834
7.03k
        ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_DATA_CTRL_Q] = ihevce_buff_que_init(
2835
7.03k
            ps_memtab, ps_input_data_ctrl_buffs_desc->i4_num_yuv_bufs, (void **)pps_inp_bufs);
2836
2837
        /* increment the memtab pointer */
2838
7.03k
        ps_memtab += ihevce_buff_que_get_num_mem_recs();
2839
7.03k
    }
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
7.03k
    if(0 == ps_enc_ctxt->i4_resolution_id)
2849
7.03k
    {
2850
7.03k
        iv_input_ctrl_buffs_t **pps_inp_bufs;
2851
7.03k
        iv_input_ctrl_buffs_t *ps_inp_bufs;
2852
2853
7.03k
        pps_inp_bufs = (iv_input_ctrl_buffs_t **)ps_memtab->pv_base;
2854
7.03k
        ps_memtab++;
2855
2856
7.03k
        ps_inp_bufs = (iv_input_ctrl_buffs_t *)ps_memtab->pv_base;
2857
7.03k
        ps_memtab++;
2858
2859
        /* loop to initialise the buffer pointer */
2860
35.1k
        for(ctr = 0; ctr < ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs; ctr++)
2861
28.1k
        {
2862
28.1k
            pps_inp_bufs[ctr] = &ps_inp_bufs[ctr];
2863
2864
28.1k
            pps_inp_bufs[ctr]->i4_size = sizeof(iv_input_ctrl_buffs_t);
2865
2866
28.1k
            pps_inp_bufs[ctr]->pv_asynch_ctrl_bufs =
2867
28.1k
                ps_input_asynch_ctrl_buffs_desc->ppv_asynch_ctrl_bufs[ctr];
2868
28.1k
        }
2869
2870
        /* Get the input control buffer Q handle */
2871
7.03k
        ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_INPUT_ASYNCH_CTRL_Q] = ihevce_buff_que_init(
2872
7.03k
            ps_memtab,
2873
7.03k
            ps_input_asynch_ctrl_buffs_desc->i4_num_asynch_ctrl_bufs,
2874
7.03k
            (void **)pps_inp_bufs);
2875
2876
        /* increment the memtab pointer */
2877
7.03k
        ps_memtab += ihevce_buff_que_get_num_mem_recs();
2878
7.03k
    }
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
7.03k
    ps_out_desc = ps_output_data_buffs_desc;
2888
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2889
7.03k
    {
2890
7.03k
        iv_output_data_buffs_t **pps_out_bufs;
2891
7.03k
        iv_output_data_buffs_t *ps_out_bufs;
2892
2893
7.03k
        pps_out_bufs = (iv_output_data_buffs_t **)ps_memtab->pv_base;
2894
7.03k
        ps_memtab++;
2895
2896
7.03k
        ps_out_bufs = (iv_output_data_buffs_t *)ps_memtab->pv_base;
2897
7.03k
        ps_memtab++;
2898
2899
        /* loop to initialise the buffer pointer */
2900
35.1k
        for(ctr = 0; ctr < ps_out_desc->i4_num_bitstream_bufs; ctr++)
2901
28.1k
        {
2902
28.1k
            pps_out_bufs[ctr] = &ps_out_bufs[ctr];
2903
2904
28.1k
            pps_out_bufs[ctr]->i4_size = sizeof(iv_output_data_buffs_t);
2905
2906
28.1k
            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
28.1k
            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
28.1k
            else
2914
28.1k
            {
2915
28.1k
                pps_out_bufs[ctr]->pv_bitstream_bufs = NULL;
2916
28.1k
            }
2917
28.1k
        }
2918
2919
        /* Get the output data buffer Q handle */
2920
7.03k
        ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_OUTPUT_DATA_Q + i] = ihevce_buff_que_init(
2921
7.03k
            ps_memtab, ps_out_desc->i4_num_bitstream_bufs, (void **)pps_out_bufs);
2922
2923
        /* increment the memtab pointer */
2924
7.03k
        ps_memtab += ihevce_buff_que_get_num_mem_recs();
2925
2926
7.03k
        ps_out_desc++;
2927
7.03k
    }
2928
2929
    /* ----------Recon data Que Mem init --------------- */
2930
7.03k
    ps_rec_desc = ps_recon_data_buffs_desc;
2931
14.0k
    for(i = 0; i < i4_num_bitrate_inst; i++)
2932
7.03k
    {
2933
7.03k
        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
7.03k
        else
2968
7.03k
        {
2969
7.03k
            ps_enc_ctxt->s_enc_ques.apv_q_hdl[IHEVCE_RECON_DATA_Q + i] = NULL;
2970
7.03k
        }
2971
7.03k
    }
2972
2973
7.03k
    return;
2974
7.03k
}
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
7.03k
{
2995
7.03k
    WORD32 ctr;
2996
2997
    /* run a loop to free all the memory allocated create time */
2998
6.19M
    for(ctr = 0; ctr < ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs; ctr++)
2999
6.19M
    {
3000
6.19M
        ps_intrf_ctxt->ihevce_mem_free(
3001
6.19M
            ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->s_mem_mngr.ps_create_memtab[ctr]);
3002
6.19M
    }
3003
3004
    /* free the memtab memory */
3005
7.03k
    {
3006
7.03k
        iv_mem_rec_t s_memtab;
3007
3008
7.03k
        s_memtab.i4_size = sizeof(iv_mem_rec_t);
3009
7.03k
        s_memtab.i4_mem_size = ps_enc_ctxt->s_mem_mngr.i4_num_create_memtabs * sizeof(iv_mem_rec_t);
3010
7.03k
        s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
3011
7.03k
        s_memtab.i4_mem_alignment = 4;
3012
7.03k
        s_memtab.pv_base = (void *)ps_enc_ctxt->s_mem_mngr.ps_create_memtab;
3013
3014
7.03k
        ps_intrf_ctxt->ihevce_mem_free(ps_intrf_ctxt->pv_mem_mgr_hdl, &s_memtab);
3015
7.03k
    }
3016
3017
7.03k
    if(1 == ps_enc_ctxt->i4_io_queues_created)
3018
7.03k
    {
3019
        /* run a loop to free all the memory allocated durign que creation */
3020
154k
        for(ctr = 0; ctr < ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs; ctr++)
3021
147k
        {
3022
147k
            ps_intrf_ctxt->ihevce_mem_free(
3023
147k
                ps_intrf_ctxt->pv_mem_mgr_hdl, &ps_enc_ctxt->s_mem_mngr.ps_q_memtab[ctr]);
3024
147k
        }
3025
3026
        /* free the  memtab memory */
3027
7.03k
        {
3028
7.03k
            iv_mem_rec_t s_memtab;
3029
3030
7.03k
            s_memtab.i4_size = sizeof(iv_mem_rec_t);
3031
7.03k
            s_memtab.i4_mem_size = ps_enc_ctxt->s_mem_mngr.i4_num_q_memtabs * sizeof(iv_mem_rec_t);
3032
7.03k
            s_memtab.e_mem_type = IV_EXT_CACHEABLE_NORMAL_MEM;
3033
7.03k
            s_memtab.i4_mem_alignment = 4;
3034
7.03k
            s_memtab.pv_base = (void *)ps_enc_ctxt->s_mem_mngr.ps_q_memtab;
3035
3036
7.03k
            ps_intrf_ctxt->ihevce_mem_free(ps_intrf_ctxt->pv_mem_mgr_hdl, &s_memtab);
3037
7.03k
        }
3038
7.03k
    }
3039
7.03k
    return;
3040
7.03k
}