1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * isvce_api.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * Contains api function definitions for H264 encoder
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker * ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @par List of Functions:
33*495ae853SAndroid Build Coastguard Worker * - api_check_struct_sanity()
34*495ae853SAndroid Build Coastguard Worker * - isvce_codec_update_config()
35*495ae853SAndroid Build Coastguard Worker * - isvce_set_default_params()
36*495ae853SAndroid Build Coastguard Worker * - isvce_init()
37*495ae853SAndroid Build Coastguard Worker * - isvce_get_num_rec()
38*495ae853SAndroid Build Coastguard Worker * - isvce_fill_num_mem_rec()
39*495ae853SAndroid Build Coastguard Worker * - isvce_init_mem_rec()
40*495ae853SAndroid Build Coastguard Worker * - isvce_retrieve_memrec()
41*495ae853SAndroid Build Coastguard Worker * - isvce_set_flush_mode()
42*495ae853SAndroid Build Coastguard Worker * - isvce_get_buf_info()
43*495ae853SAndroid Build Coastguard Worker * - isvce_set_dimensions()
44*495ae853SAndroid Build Coastguard Worker * - isvce_set_frame_rate()
45*495ae853SAndroid Build Coastguard Worker * - isvce_set_bit_rate()
46*495ae853SAndroid Build Coastguard Worker * - isvce_set_frame_type()
47*495ae853SAndroid Build Coastguard Worker * - isvce_set_qp()
48*495ae853SAndroid Build Coastguard Worker * - isvce_set_enc_mode()
49*495ae853SAndroid Build Coastguard Worker * - isvce_set_vbv_params()
50*495ae853SAndroid Build Coastguard Worker * - isvc_set_air_params()
51*495ae853SAndroid Build Coastguard Worker * - isvc_set_me_params()
52*495ae853SAndroid Build Coastguard Worker * - isvc_set_ipe_params()
53*495ae853SAndroid Build Coastguard Worker * - isvc_set_gop_params()
54*495ae853SAndroid Build Coastguard Worker * - isvc_set_profile_params()
55*495ae853SAndroid Build Coastguard Worker * - isvc_set_deblock_params()
56*495ae853SAndroid Build Coastguard Worker * - isvce_set_num_cores()
57*495ae853SAndroid Build Coastguard Worker * - isvce_reset()
58*495ae853SAndroid Build Coastguard Worker * - isvce_ctl()
59*495ae853SAndroid Build Coastguard Worker * - isvce_api_function()
60*495ae853SAndroid Build Coastguard Worker *
61*495ae853SAndroid Build Coastguard Worker * @remarks
62*495ae853SAndroid Build Coastguard Worker * None
63*495ae853SAndroid Build Coastguard Worker *
64*495ae853SAndroid Build Coastguard Worker *******************************************************************************
65*495ae853SAndroid Build Coastguard Worker */
66*495ae853SAndroid Build Coastguard Worker
67*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
68*495ae853SAndroid Build Coastguard Worker /* File Includes */
69*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
70*495ae853SAndroid Build Coastguard Worker
71*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
72*495ae853SAndroid Build Coastguard Worker #include <stddef.h>
73*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
74*495ae853SAndroid Build Coastguard Worker #include <string.h>
75*495ae853SAndroid Build Coastguard Worker #include <limits.h>
76*495ae853SAndroid Build Coastguard Worker #include <assert.h>
77*495ae853SAndroid Build Coastguard Worker #include <math.h>
78*495ae853SAndroid Build Coastguard Worker #include <stdbool.h>
79*495ae853SAndroid Build Coastguard Worker
80*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
81*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264_buf_mgr.h */
82*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264_list.h */
83*495ae853SAndroid Build Coastguard Worker #include "ih264_error.h"
84*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264_common_tables.h */
85*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
86*495ae853SAndroid Build Coastguard Worker #include "ih264_structs.h"
87*495ae853SAndroid Build Coastguard Worker #include "ih264_buf_mgr.h"
88*495ae853SAndroid Build Coastguard Worker #include "ih264_common_tables.h"
89*495ae853SAndroid Build Coastguard Worker #include "ih264_dpb_mgr.h"
90*495ae853SAndroid Build Coastguard Worker #include "ih264_list.h"
91*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
92*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_data.h"
93*495ae853SAndroid Build Coastguard Worker #include "ih264_size_defs.h"
94*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264e_cabac_structs.h */
95*495ae853SAndroid Build Coastguard Worker #include "ih264_cabac_tables.h"
96*495ae853SAndroid Build Coastguard Worker /* Dependencies of ime_structs.h */
97*495ae853SAndroid Build Coastguard Worker #include "ime_defs.h"
98*495ae853SAndroid Build Coastguard Worker #include "ime_distortion_metrics.h"
99*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264e_structs.h */
100*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
101*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
102*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
103*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_edge_filters.h"
104*495ae853SAndroid Build Coastguard Worker #include "ih264_inter_pred_filters.h"
105*495ae853SAndroid Build Coastguard Worker #include "ih264_structs.h"
106*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_quant_itrans_iquant.h"
107*495ae853SAndroid Build Coastguard Worker /* Dependencies of ih264e_bitstream.h */
108*495ae853SAndroid Build Coastguard Worker #include "ih264e_error.h"
109*495ae853SAndroid Build Coastguard Worker #include "ih264e_bitstream.h"
110*495ae853SAndroid Build Coastguard Worker #include "ih264e_cabac_structs.h"
111*495ae853SAndroid Build Coastguard Worker #include "irc_cntrl_param.h"
112*495ae853SAndroid Build Coastguard Worker #include "irc_frame_info_collector.h"
113*495ae853SAndroid Build Coastguard Worker #include "ime_statistics.h"
114*495ae853SAndroid Build Coastguard Worker #include "ime_structs.h"
115*495ae853SAndroid Build Coastguard Worker /* Dependencies of 'ih264e_utils.h' */
116*495ae853SAndroid Build Coastguard Worker #include "ih264e_defs.h"
117*495ae853SAndroid Build Coastguard Worker #include "irc_mem_req_and_acq.h"
118*495ae853SAndroid Build Coastguard Worker #include "ih264e_rc_mem_interface.h"
119*495ae853SAndroid Build Coastguard Worker #include "ih264e_structs.h"
120*495ae853SAndroid Build Coastguard Worker #include "ih264e_utils.h"
121*495ae853SAndroid Build Coastguard Worker #include "ih264e_version.h"
122*495ae853SAndroid Build Coastguard Worker #include "ime.h"
123*495ae853SAndroid Build Coastguard Worker #include "isvce.h"
124*495ae853SAndroid Build Coastguard Worker #include "isvce_cabac.h"
125*495ae853SAndroid Build Coastguard Worker #include "isvce_deblk.h"
126*495ae853SAndroid Build Coastguard Worker #include "isvce_defs.h"
127*495ae853SAndroid Build Coastguard Worker #include "isvce_downscaler.h"
128*495ae853SAndroid Build Coastguard Worker #include "isvce_encode.h"
129*495ae853SAndroid Build Coastguard Worker #include "isvce_encode_header.h"
130*495ae853SAndroid Build Coastguard Worker #include "isvce_ibl_eval.h"
131*495ae853SAndroid Build Coastguard Worker #include "isvce_ilp_mv.h"
132*495ae853SAndroid Build Coastguard Worker #include "isvce_intra_modes_eval.h"
133*495ae853SAndroid Build Coastguard Worker #include "isvce_me.h"
134*495ae853SAndroid Build Coastguard Worker #include "isvce_platform_macros.h"
135*495ae853SAndroid Build Coastguard Worker #include "isvce_rate_control.h"
136*495ae853SAndroid Build Coastguard Worker #include "isvce_rc_mem_interface.h"
137*495ae853SAndroid Build Coastguard Worker #include "isvce_residual_pred.h"
138*495ae853SAndroid Build Coastguard Worker #include "isvce_sub_pic_rc.h"
139*495ae853SAndroid Build Coastguard Worker #include "isvce_utils.h"
140*495ae853SAndroid Build Coastguard Worker
141*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
142*495ae853SAndroid Build Coastguard Worker /* Function Declarations */
143*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
144*495ae853SAndroid Build Coastguard Worker
145*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
146*495ae853SAndroid Build Coastguard Worker /* Function Definitions */
147*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
148*495ae853SAndroid Build Coastguard Worker
149*495ae853SAndroid Build Coastguard Worker /**
150*495ae853SAndroid Build Coastguard Worker *******************************************************************************
151*495ae853SAndroid Build Coastguard Worker *
152*495ae853SAndroid Build Coastguard Worker * @brief
153*495ae853SAndroid Build Coastguard Worker * Used to test arguments for corresponding API call
154*495ae853SAndroid Build Coastguard Worker *
155*495ae853SAndroid Build Coastguard Worker * @par Description:
156*495ae853SAndroid Build Coastguard Worker * For each command the arguments are validated
157*495ae853SAndroid Build Coastguard Worker *
158*495ae853SAndroid Build Coastguard Worker * @param[in] ps_handle
159*495ae853SAndroid Build Coastguard Worker * Codec handle at API level
160*495ae853SAndroid Build Coastguard Worker *
161*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
162*495ae853SAndroid Build Coastguard Worker * Pointer to input structure
163*495ae853SAndroid Build Coastguard Worker *
164*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
165*495ae853SAndroid Build Coastguard Worker * Pointer to output structure
166*495ae853SAndroid Build Coastguard Worker *
167*495ae853SAndroid Build Coastguard Worker * @returns error status
168*495ae853SAndroid Build Coastguard Worker *
169*495ae853SAndroid Build Coastguard Worker * @remarks none
170*495ae853SAndroid Build Coastguard Worker *
171*495ae853SAndroid Build Coastguard Worker *******************************************************************************
172*495ae853SAndroid Build Coastguard Worker */
api_check_struct_sanity(iv_obj_t * ps_handle,void * pv_api_ip,void * pv_api_op,isvce_api_cmds_t * ps_iv_api_cmds)173*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T api_check_struct_sanity(iv_obj_t *ps_handle, void *pv_api_ip, void *pv_api_op,
174*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t *ps_iv_api_cmds)
175*495ae853SAndroid Build Coastguard Worker {
176*495ae853SAndroid Build Coastguard Worker WORD32 i, j;
177*495ae853SAndroid Build Coastguard Worker
178*495ae853SAndroid Build Coastguard Worker /* output structure expected by the api call */
179*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_api_op = pv_api_op;
180*495ae853SAndroid Build Coastguard Worker
181*495ae853SAndroid Build Coastguard Worker ISVCE_API_COMMAND_TYPE_T e_cmd = ps_iv_api_cmds->e_cmd;
182*495ae853SAndroid Build Coastguard Worker ISVCE_CONTROL_API_COMMAND_TYPE_T e_ctl_cmd = ps_iv_api_cmds->e_ctl_cmd;
183*495ae853SAndroid Build Coastguard Worker
184*495ae853SAndroid Build Coastguard Worker if(NULL == pv_api_op || NULL == pv_api_ip)
185*495ae853SAndroid Build Coastguard Worker {
186*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
187*495ae853SAndroid Build Coastguard Worker }
188*495ae853SAndroid Build Coastguard Worker
189*495ae853SAndroid Build Coastguard Worker /* set error code */
190*495ae853SAndroid Build Coastguard Worker pu4_api_op[1] = 0;
191*495ae853SAndroid Build Coastguard Worker
192*495ae853SAndroid Build Coastguard Worker /* error checks on handle */
193*495ae853SAndroid Build Coastguard Worker switch(e_cmd)
194*495ae853SAndroid Build Coastguard Worker {
195*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_GET_NUM_MEM_REC:
196*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_FILL_NUM_MEM_REC:
197*495ae853SAndroid Build Coastguard Worker {
198*495ae853SAndroid Build Coastguard Worker break;
199*495ae853SAndroid Build Coastguard Worker }
200*495ae853SAndroid Build Coastguard Worker
201*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_INIT:
202*495ae853SAndroid Build Coastguard Worker {
203*495ae853SAndroid Build Coastguard Worker if(ps_handle == NULL)
204*495ae853SAndroid Build Coastguard Worker {
205*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
206*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_HANDLE_NULL;
207*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
208*495ae853SAndroid Build Coastguard Worker }
209*495ae853SAndroid Build Coastguard Worker
210*495ae853SAndroid Build Coastguard Worker if(ps_handle->u4_size != sizeof(iv_obj_t))
211*495ae853SAndroid Build Coastguard Worker {
212*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
213*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_HANDLE_STRUCT_SIZE_INCORRECT;
214*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
215*495ae853SAndroid Build Coastguard Worker }
216*495ae853SAndroid Build Coastguard Worker
217*495ae853SAndroid Build Coastguard Worker break;
218*495ae853SAndroid Build Coastguard Worker }
219*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_RETRIEVE_MEMREC:
220*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_CTL:
221*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_ENCODE:
222*495ae853SAndroid Build Coastguard Worker {
223*495ae853SAndroid Build Coastguard Worker if(ps_handle == NULL)
224*495ae853SAndroid Build Coastguard Worker {
225*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
226*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_HANDLE_NULL;
227*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
228*495ae853SAndroid Build Coastguard Worker }
229*495ae853SAndroid Build Coastguard Worker
230*495ae853SAndroid Build Coastguard Worker if(ps_handle->u4_size != sizeof(iv_obj_t))
231*495ae853SAndroid Build Coastguard Worker {
232*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
233*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_HANDLE_STRUCT_SIZE_INCORRECT;
234*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
235*495ae853SAndroid Build Coastguard Worker }
236*495ae853SAndroid Build Coastguard Worker
237*495ae853SAndroid Build Coastguard Worker if(ps_handle->pv_fxns != isvce_api_function)
238*495ae853SAndroid Build Coastguard Worker {
239*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
240*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_API_FUNCTION_PTR_NULL;
241*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
242*495ae853SAndroid Build Coastguard Worker }
243*495ae853SAndroid Build Coastguard Worker
244*495ae853SAndroid Build Coastguard Worker if(ps_handle->pv_codec_handle == NULL)
245*495ae853SAndroid Build Coastguard Worker {
246*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
247*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_INVALID_CODEC_HANDLE;
248*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
249*495ae853SAndroid Build Coastguard Worker }
250*495ae853SAndroid Build Coastguard Worker
251*495ae853SAndroid Build Coastguard Worker break;
252*495ae853SAndroid Build Coastguard Worker }
253*495ae853SAndroid Build Coastguard Worker default:
254*495ae853SAndroid Build Coastguard Worker {
255*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
256*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_INVALID_API_CMD;
257*495ae853SAndroid Build Coastguard Worker
258*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
259*495ae853SAndroid Build Coastguard Worker }
260*495ae853SAndroid Build Coastguard Worker }
261*495ae853SAndroid Build Coastguard Worker
262*495ae853SAndroid Build Coastguard Worker /* error checks on input output structures */
263*495ae853SAndroid Build Coastguard Worker switch(e_cmd)
264*495ae853SAndroid Build Coastguard Worker {
265*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_GET_NUM_MEM_REC:
266*495ae853SAndroid Build Coastguard Worker {
267*495ae853SAndroid Build Coastguard Worker isvce_num_mem_rec_ip_t *ps_ip = pv_api_ip;
268*495ae853SAndroid Build Coastguard Worker isvce_num_mem_rec_op_t *ps_op = pv_api_op;
269*495ae853SAndroid Build Coastguard Worker
270*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
271*495ae853SAndroid Build Coastguard Worker
272*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_num_mem_rec_ip_t))
273*495ae853SAndroid Build Coastguard Worker {
274*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
275*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_IP_GET_MEM_REC_API_STRUCT_SIZE_INCORRECT;
276*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
277*495ae853SAndroid Build Coastguard Worker }
278*495ae853SAndroid Build Coastguard Worker
279*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_num_mem_rec_op_t))
280*495ae853SAndroid Build Coastguard Worker {
281*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
282*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_OP_GET_MEM_REC_API_STRUCT_SIZE_INCORRECT;
283*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
284*495ae853SAndroid Build Coastguard Worker }
285*495ae853SAndroid Build Coastguard Worker
286*495ae853SAndroid Build Coastguard Worker break;
287*495ae853SAndroid Build Coastguard Worker }
288*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_FILL_NUM_MEM_REC:
289*495ae853SAndroid Build Coastguard Worker {
290*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_ip_t *ps_ip = pv_api_ip;
291*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_op_t *ps_op = pv_api_op;
292*495ae853SAndroid Build Coastguard Worker
293*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec = NULL;
294*495ae853SAndroid Build Coastguard Worker
295*495ae853SAndroid Build Coastguard Worker WORD32 max_wd = ALIGN16(ps_ip->s_ive_ip.u4_max_wd);
296*495ae853SAndroid Build Coastguard Worker WORD32 max_ht = ALIGN16(ps_ip->s_ive_ip.u4_max_ht);
297*495ae853SAndroid Build Coastguard Worker
298*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
299*495ae853SAndroid Build Coastguard Worker
300*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_fill_mem_rec_ip_t))
301*495ae853SAndroid Build Coastguard Worker {
302*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
303*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_IP_FILL_MEM_REC_API_STRUCT_SIZE_INCORRECT;
304*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
305*495ae853SAndroid Build Coastguard Worker }
306*495ae853SAndroid Build Coastguard Worker
307*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_fill_mem_rec_op_t))
308*495ae853SAndroid Build Coastguard Worker {
309*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
310*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_OP_FILL_MEM_REC_API_STRUCT_SIZE_INCORRECT;
311*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
312*495ae853SAndroid Build Coastguard Worker }
313*495ae853SAndroid Build Coastguard Worker
314*495ae853SAndroid Build Coastguard Worker if(max_wd < MIN_WD || max_wd > MAX_WD)
315*495ae853SAndroid Build Coastguard Worker {
316*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
317*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
318*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
319*495ae853SAndroid Build Coastguard Worker }
320*495ae853SAndroid Build Coastguard Worker
321*495ae853SAndroid Build Coastguard Worker if(max_ht < MIN_HT || max_ht > MAX_HT)
322*495ae853SAndroid Build Coastguard Worker {
323*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
324*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
325*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
326*495ae853SAndroid Build Coastguard Worker }
327*495ae853SAndroid Build Coastguard Worker
328*495ae853SAndroid Build Coastguard Worker /* verify number of mem rec ptr */
329*495ae853SAndroid Build Coastguard Worker if(NULL == ps_ip->s_ive_ip.ps_mem_rec)
330*495ae853SAndroid Build Coastguard Worker {
331*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
332*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_FILL_NUM_MEM_RECS_POINTER_NULL;
333*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
334*495ae853SAndroid Build Coastguard Worker }
335*495ae853SAndroid Build Coastguard Worker
336*495ae853SAndroid Build Coastguard Worker /* verify number of mem records */
337*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_num_mem_rec != ISVCE_MEM_REC_CNT)
338*495ae853SAndroid Build Coastguard Worker {
339*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
340*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_NUM_MEM_REC_NOT_SUFFICIENT;
341*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
342*495ae853SAndroid Build Coastguard Worker }
343*495ae853SAndroid Build Coastguard Worker
344*495ae853SAndroid Build Coastguard Worker /* check mem records sizes are correct */
345*495ae853SAndroid Build Coastguard Worker ps_mem_rec = ps_ip->s_ive_ip.ps_mem_rec;
346*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ISVCE_MEM_REC_CNT; i++)
347*495ae853SAndroid Build Coastguard Worker {
348*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
349*495ae853SAndroid Build Coastguard Worker {
350*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
351*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_STRUCT_SIZE_INCORRECT;
352*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
353*495ae853SAndroid Build Coastguard Worker }
354*495ae853SAndroid Build Coastguard Worker }
355*495ae853SAndroid Build Coastguard Worker
356*495ae853SAndroid Build Coastguard Worker break;
357*495ae853SAndroid Build Coastguard Worker }
358*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_INIT:
359*495ae853SAndroid Build Coastguard Worker {
360*495ae853SAndroid Build Coastguard Worker isvce_init_ip_t *ps_ip = pv_api_ip;
361*495ae853SAndroid Build Coastguard Worker isvce_init_op_t *ps_op = pv_api_op;
362*495ae853SAndroid Build Coastguard Worker
363*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec = NULL;
364*495ae853SAndroid Build Coastguard Worker
365*495ae853SAndroid Build Coastguard Worker WORD32 max_wd = ALIGN16(ps_ip->s_ive_ip.u4_max_wd);
366*495ae853SAndroid Build Coastguard Worker WORD32 max_ht = ALIGN16(ps_ip->s_ive_ip.u4_max_ht);
367*495ae853SAndroid Build Coastguard Worker WORD32 wd = ALIGN16(ps_ip->u4_wd);
368*495ae853SAndroid Build Coastguard Worker WORD32 ht = ALIGN16(ps_ip->u4_ht);
369*495ae853SAndroid Build Coastguard Worker
370*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
371*495ae853SAndroid Build Coastguard Worker
372*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_init_ip_t))
373*495ae853SAndroid Build Coastguard Worker {
374*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
375*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_IP_INIT_API_STRUCT_SIZE_INCORRECT;
376*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
377*495ae853SAndroid Build Coastguard Worker }
378*495ae853SAndroid Build Coastguard Worker
379*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_init_op_t))
380*495ae853SAndroid Build Coastguard Worker {
381*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
382*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_OP_INIT_API_STRUCT_SIZE_INCORRECT;
383*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
384*495ae853SAndroid Build Coastguard Worker }
385*495ae853SAndroid Build Coastguard Worker
386*495ae853SAndroid Build Coastguard Worker if(max_wd < MIN_WD || max_wd > MAX_WD)
387*495ae853SAndroid Build Coastguard Worker {
388*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
389*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
390*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
391*495ae853SAndroid Build Coastguard Worker }
392*495ae853SAndroid Build Coastguard Worker
393*495ae853SAndroid Build Coastguard Worker if(max_ht < MIN_HT || max_ht > MAX_HT)
394*495ae853SAndroid Build Coastguard Worker {
395*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
396*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
397*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
398*495ae853SAndroid Build Coastguard Worker }
399*495ae853SAndroid Build Coastguard Worker
400*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_ref_cnt > MAX_REF_PIC_CNT ||
401*495ae853SAndroid Build Coastguard Worker ps_ip->s_ive_ip.u4_max_ref_cnt < MIN_REF_PIC_CNT)
402*495ae853SAndroid Build Coastguard Worker {
403*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
404*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REF_UNSUPPORTED;
405*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
406*495ae853SAndroid Build Coastguard Worker }
407*495ae853SAndroid Build Coastguard Worker
408*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_reorder_cnt != 0)
409*495ae853SAndroid Build Coastguard Worker {
410*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
411*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REORDER_UNSUPPORTED;
412*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
413*495ae853SAndroid Build Coastguard Worker }
414*495ae853SAndroid Build Coastguard Worker
415*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_10) &&
416*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_1B) &&
417*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_11) &&
418*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_12) &&
419*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_13) &&
420*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_20) &&
421*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_21) &&
422*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_22) &&
423*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_30) &&
424*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_31) &&
425*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_32) &&
426*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_40) &&
427*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_41) &&
428*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_42) &&
429*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_50) &&
430*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_max_level != IH264_LEVEL_51))
431*495ae853SAndroid Build Coastguard Worker {
432*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
433*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_CODEC_LEVEL_NOT_SUPPORTED;
434*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
435*495ae853SAndroid Build Coastguard Worker }
436*495ae853SAndroid Build Coastguard Worker
437*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.e_recon_color_fmt != IV_YUV_420P)
438*495ae853SAndroid Build Coastguard Worker {
439*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
440*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_RECON_CHROMA_FORMAT_NOT_SUPPORTED;
441*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
442*495ae853SAndroid Build Coastguard Worker }
443*495ae853SAndroid Build Coastguard Worker
444*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.e_rc_mode != IVE_RC_NONE) &&
445*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_rc_mode != IVE_RC_STORAGE) &&
446*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_rc_mode != IVE_RC_CBR_NON_LOW_DELAY))
447*495ae853SAndroid Build Coastguard Worker {
448*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
449*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_RATE_CONTROL_MODE_NOT_SUPPORTED;
450*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
451*495ae853SAndroid Build Coastguard Worker }
452*495ae853SAndroid Build Coastguard Worker
453*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_framerate > DEFAULT_MAX_FRAMERATE)
454*495ae853SAndroid Build Coastguard Worker {
455*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
456*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_FRAME_RATE_NOT_SUPPORTED;
457*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
458*495ae853SAndroid Build Coastguard Worker }
459*495ae853SAndroid Build Coastguard Worker
460*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ip->s_svc_inp_params.u1_num_spatial_layers; i++)
461*495ae853SAndroid Build Coastguard Worker {
462*495ae853SAndroid Build Coastguard Worker if(ps_ip->pu4_max_bitrate[i] > DEFAULT_MAX_BITRATE)
463*495ae853SAndroid Build Coastguard Worker {
464*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
465*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_BITRATE_NOT_SUPPORTED;
466*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
467*495ae853SAndroid Build Coastguard Worker }
468*495ae853SAndroid Build Coastguard Worker }
469*495ae853SAndroid Build Coastguard Worker
470*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_num_bframes > SVC_MAX_NUM_BFRAMES)
471*495ae853SAndroid Build Coastguard Worker {
472*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
473*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_BFRAMES_NOT_SUPPORTED;
474*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
475*495ae853SAndroid Build Coastguard Worker }
476*495ae853SAndroid Build Coastguard Worker
477*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_num_bframes && (ps_ip->s_ive_ip.u4_max_ref_cnt < 2))
478*495ae853SAndroid Build Coastguard Worker {
479*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
480*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_BFRAMES_NOT_SUPPORTED;
481*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
482*495ae853SAndroid Build Coastguard Worker }
483*495ae853SAndroid Build Coastguard Worker
484*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.e_content_type != IV_PROGRESSIVE)
485*495ae853SAndroid Build Coastguard Worker {
486*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
487*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_CONTENT_TYPE_NOT_SUPPORTED;
488*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
489*495ae853SAndroid Build Coastguard Worker }
490*495ae853SAndroid Build Coastguard Worker
491*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_srch_rng_x > DEFAULT_MAX_SRCH_RANGE_X)
492*495ae853SAndroid Build Coastguard Worker {
493*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
494*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HORIZONTAL_SEARCH_RANGE_NOT_SUPPORTED;
495*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
496*495ae853SAndroid Build Coastguard Worker }
497*495ae853SAndroid Build Coastguard Worker
498*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_srch_rng_y > DEFAULT_MAX_SRCH_RANGE_Y)
499*495ae853SAndroid Build Coastguard Worker {
500*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
501*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_VERTICAL_SEARCH_RANGE_NOT_SUPPORTED;
502*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
503*495ae853SAndroid Build Coastguard Worker }
504*495ae853SAndroid Build Coastguard Worker
505*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.e_slice_mode != IVE_SLICE_MODE_NONE)
506*495ae853SAndroid Build Coastguard Worker {
507*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
508*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_SLICE_TYPE_INPUT_INVALID;
509*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
510*495ae853SAndroid Build Coastguard Worker }
511*495ae853SAndroid Build Coastguard Worker
512*495ae853SAndroid Build Coastguard Worker if(NULL == ps_ip->s_ive_ip.ps_mem_rec)
513*495ae853SAndroid Build Coastguard Worker {
514*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
515*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_FILL_NUM_MEM_RECS_POINTER_NULL;
516*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
517*495ae853SAndroid Build Coastguard Worker }
518*495ae853SAndroid Build Coastguard Worker
519*495ae853SAndroid Build Coastguard Worker /* verify number of mem records */
520*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_num_mem_rec != ISVCE_MEM_REC_CNT)
521*495ae853SAndroid Build Coastguard Worker {
522*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
523*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_NUM_MEM_REC_NOT_SUFFICIENT;
524*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
525*495ae853SAndroid Build Coastguard Worker }
526*495ae853SAndroid Build Coastguard Worker
527*495ae853SAndroid Build Coastguard Worker ps_mem_rec = ps_ip->s_ive_ip.ps_mem_rec;
528*495ae853SAndroid Build Coastguard Worker
529*495ae853SAndroid Build Coastguard Worker /* check memrecords sizes are correct */
530*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ((WORD32) ps_ip->s_ive_ip.u4_num_mem_rec); i++)
531*495ae853SAndroid Build Coastguard Worker {
532*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
533*495ae853SAndroid Build Coastguard Worker {
534*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
535*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_STRUCT_SIZE_INCORRECT;
536*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
537*495ae853SAndroid Build Coastguard Worker }
538*495ae853SAndroid Build Coastguard Worker
539*495ae853SAndroid Build Coastguard Worker /* check memrecords pointers are not NULL */
540*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].pv_base == NULL)
541*495ae853SAndroid Build Coastguard Worker {
542*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
543*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_BASE_POINTER_NULL;
544*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
545*495ae853SAndroid Build Coastguard Worker }
546*495ae853SAndroid Build Coastguard Worker }
547*495ae853SAndroid Build Coastguard Worker
548*495ae853SAndroid Build Coastguard Worker /* verify memtabs for overlapping regions */
549*495ae853SAndroid Build Coastguard Worker {
550*495ae853SAndroid Build Coastguard Worker void *start[ISVCE_MEM_REC_CNT];
551*495ae853SAndroid Build Coastguard Worker void *end[ISVCE_MEM_REC_CNT];
552*495ae853SAndroid Build Coastguard Worker
553*495ae853SAndroid Build Coastguard Worker start[0] = (ps_mem_rec[0].pv_base);
554*495ae853SAndroid Build Coastguard Worker end[0] = ((UWORD8 *) ps_mem_rec[0].pv_base) + ps_mem_rec[0].u4_mem_size - 1;
555*495ae853SAndroid Build Coastguard Worker
556*495ae853SAndroid Build Coastguard Worker for(i = 1; i < ISVCE_MEM_REC_CNT; i++)
557*495ae853SAndroid Build Coastguard Worker {
558*495ae853SAndroid Build Coastguard Worker /* This array is populated to check memtab overlap */
559*495ae853SAndroid Build Coastguard Worker start[i] = (ps_mem_rec[i].pv_base);
560*495ae853SAndroid Build Coastguard Worker end[i] = ((UWORD8 *) ps_mem_rec[i].pv_base) + ps_mem_rec[i].u4_mem_size - 1;
561*495ae853SAndroid Build Coastguard Worker
562*495ae853SAndroid Build Coastguard Worker for(j = 0; j < i; j++)
563*495ae853SAndroid Build Coastguard Worker {
564*495ae853SAndroid Build Coastguard Worker if((start[i] >= start[j]) && (start[i] <= end[j]))
565*495ae853SAndroid Build Coastguard Worker {
566*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
567*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_OVERLAP_ERR;
568*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
569*495ae853SAndroid Build Coastguard Worker }
570*495ae853SAndroid Build Coastguard Worker
571*495ae853SAndroid Build Coastguard Worker if((end[i] >= start[j]) && (end[i] <= end[j]))
572*495ae853SAndroid Build Coastguard Worker {
573*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
574*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_OVERLAP_ERR;
575*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
576*495ae853SAndroid Build Coastguard Worker }
577*495ae853SAndroid Build Coastguard Worker
578*495ae853SAndroid Build Coastguard Worker if((start[i] < start[j]) && (end[i] > end[j]))
579*495ae853SAndroid Build Coastguard Worker {
580*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
581*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_OVERLAP_ERR;
582*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
583*495ae853SAndroid Build Coastguard Worker }
584*495ae853SAndroid Build Coastguard Worker }
585*495ae853SAndroid Build Coastguard Worker }
586*495ae853SAndroid Build Coastguard Worker }
587*495ae853SAndroid Build Coastguard Worker
588*495ae853SAndroid Build Coastguard Worker /* re-validate mem records with init config */
589*495ae853SAndroid Build Coastguard Worker {
590*495ae853SAndroid Build Coastguard Worker /* mem records */
591*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t s_mem_rec_ittiam_api[ISVCE_MEM_REC_CNT];
592*495ae853SAndroid Build Coastguard Worker
593*495ae853SAndroid Build Coastguard Worker /* api interface structs */
594*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_ip_t s_ip;
595*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_op_t s_op;
596*495ae853SAndroid Build Coastguard Worker
597*495ae853SAndroid Build Coastguard Worker /* error status */
598*495ae853SAndroid Build Coastguard Worker IV_STATUS_T e_status;
599*495ae853SAndroid Build Coastguard Worker
600*495ae853SAndroid Build Coastguard Worker /* temp var */
601*495ae853SAndroid Build Coastguard Worker WORD32 i;
602*495ae853SAndroid Build Coastguard Worker
603*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_FILL_NUM_MEM_REC, ISVCE_CMD_CT_NA};
604*495ae853SAndroid Build Coastguard Worker
605*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_size = sizeof(isvce_fill_mem_rec_ip_t);
606*495ae853SAndroid Build Coastguard Worker s_op.s_ive_op.u4_size = sizeof(isvce_fill_mem_rec_op_t);
607*495ae853SAndroid Build Coastguard Worker
608*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.ps_mem_rec = s_mem_rec_ittiam_api;
609*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_wd = max_wd;
610*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_ht = max_ht;
611*495ae853SAndroid Build Coastguard Worker s_ip.u4_wd = wd;
612*495ae853SAndroid Build Coastguard Worker s_ip.u4_ht = ht;
613*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_num_mem_rec = ps_ip->s_ive_ip.u4_num_mem_rec;
614*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_level = ps_ip->s_ive_ip.u4_max_level;
615*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_ref_cnt = ps_ip->s_ive_ip.u4_max_ref_cnt;
616*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_reorder_cnt = ps_ip->s_ive_ip.u4_max_reorder_cnt;
617*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.e_color_format = ps_ip->s_ive_ip.e_inp_color_fmt;
618*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_srch_rng_x = ps_ip->s_ive_ip.u4_max_srch_rng_x;
619*495ae853SAndroid Build Coastguard Worker s_ip.s_ive_ip.u4_max_srch_rng_y = ps_ip->s_ive_ip.u4_max_srch_rng_y;
620*495ae853SAndroid Build Coastguard Worker
621*495ae853SAndroid Build Coastguard Worker s_ip.s_svc_inp_params = ps_ip->s_svc_inp_params;
622*495ae853SAndroid Build Coastguard Worker
623*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ISVCE_MEM_REC_CNT; i++)
624*495ae853SAndroid Build Coastguard Worker {
625*495ae853SAndroid Build Coastguard Worker s_mem_rec_ittiam_api[i].u4_size = sizeof(iv_mem_rec_t);
626*495ae853SAndroid Build Coastguard Worker }
627*495ae853SAndroid Build Coastguard Worker
628*495ae853SAndroid Build Coastguard Worker /* fill mem records */
629*495ae853SAndroid Build Coastguard Worker e_status = isvce_api_function(NULL, (void *) &s_ip, (void *) &s_op, &s_api_cmds);
630*495ae853SAndroid Build Coastguard Worker
631*495ae853SAndroid Build Coastguard Worker if(IV_FAIL == e_status)
632*495ae853SAndroid Build Coastguard Worker {
633*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = s_op.s_ive_op.u4_error_code;
634*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
635*495ae853SAndroid Build Coastguard Worker }
636*495ae853SAndroid Build Coastguard Worker
637*495ae853SAndroid Build Coastguard Worker /* verify mem records */
638*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ISVCE_MEM_REC_CNT; i++)
639*495ae853SAndroid Build Coastguard Worker {
640*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].u4_mem_size < s_mem_rec_ittiam_api[i].u4_mem_size)
641*495ae853SAndroid Build Coastguard Worker {
642*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
643*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_INSUFFICIENT_SIZE;
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
646*495ae853SAndroid Build Coastguard Worker }
647*495ae853SAndroid Build Coastguard Worker
648*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].u4_mem_alignment != s_mem_rec_ittiam_api[i].u4_mem_alignment)
649*495ae853SAndroid Build Coastguard Worker {
650*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
651*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_ALIGNMENT_ERR;
652*495ae853SAndroid Build Coastguard Worker
653*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
654*495ae853SAndroid Build Coastguard Worker }
655*495ae853SAndroid Build Coastguard Worker
656*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].e_mem_type != s_mem_rec_ittiam_api[i].e_mem_type)
657*495ae853SAndroid Build Coastguard Worker {
658*495ae853SAndroid Build Coastguard Worker UWORD32 check = IV_SUCCESS;
659*495ae853SAndroid Build Coastguard Worker UWORD32 diff =
660*495ae853SAndroid Build Coastguard Worker s_mem_rec_ittiam_api[i].e_mem_type - ps_mem_rec[i].e_mem_type;
661*495ae853SAndroid Build Coastguard Worker
662*495ae853SAndroid Build Coastguard Worker if((ps_mem_rec[i].e_mem_type <= IV_EXTERNAL_CACHEABLE_SCRATCH_MEM) &&
663*495ae853SAndroid Build Coastguard Worker (s_mem_rec_ittiam_api[i].e_mem_type >=
664*495ae853SAndroid Build Coastguard Worker IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM))
665*495ae853SAndroid Build Coastguard Worker {
666*495ae853SAndroid Build Coastguard Worker check = IV_FAIL;
667*495ae853SAndroid Build Coastguard Worker }
668*495ae853SAndroid Build Coastguard Worker
669*495ae853SAndroid Build Coastguard Worker if(3 != (s_mem_rec_ittiam_api[i].e_mem_type % 4))
670*495ae853SAndroid Build Coastguard Worker {
671*495ae853SAndroid Build Coastguard Worker /* It is not IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM or
672*495ae853SAndroid Build Coastguard Worker * IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM */
673*495ae853SAndroid Build Coastguard Worker
674*495ae853SAndroid Build Coastguard Worker if((diff < 1) || (diff > 3))
675*495ae853SAndroid Build Coastguard Worker {
676*495ae853SAndroid Build Coastguard Worker /* Difference between 1 and 3 is okay for all cases other than
677*495ae853SAndroid Build Coastguard Worker * the two filtered with the MOD condition above */
678*495ae853SAndroid Build Coastguard Worker check = IV_FAIL;
679*495ae853SAndroid Build Coastguard Worker }
680*495ae853SAndroid Build Coastguard Worker }
681*495ae853SAndroid Build Coastguard Worker else
682*495ae853SAndroid Build Coastguard Worker {
683*495ae853SAndroid Build Coastguard Worker if(diff == 1)
684*495ae853SAndroid Build Coastguard Worker {
685*495ae853SAndroid Build Coastguard Worker /* This particular case is when codec asked for External
686*495ae853SAndroid Build Coastguard Worker * Persistent, but got Internal Scratch */
687*495ae853SAndroid Build Coastguard Worker check = IV_FAIL;
688*495ae853SAndroid Build Coastguard Worker }
689*495ae853SAndroid Build Coastguard Worker if((diff != 2) && (diff != 3))
690*495ae853SAndroid Build Coastguard Worker {
691*495ae853SAndroid Build Coastguard Worker check = IV_FAIL;
692*495ae853SAndroid Build Coastguard Worker }
693*495ae853SAndroid Build Coastguard Worker }
694*495ae853SAndroid Build Coastguard Worker
695*495ae853SAndroid Build Coastguard Worker if(check == IV_FAIL)
696*495ae853SAndroid Build Coastguard Worker {
697*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
698*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_INCORRECT_TYPE;
699*495ae853SAndroid Build Coastguard Worker
700*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
701*495ae853SAndroid Build Coastguard Worker }
702*495ae853SAndroid Build Coastguard Worker }
703*495ae853SAndroid Build Coastguard Worker }
704*495ae853SAndroid Build Coastguard Worker }
705*495ae853SAndroid Build Coastguard Worker
706*495ae853SAndroid Build Coastguard Worker break;
707*495ae853SAndroid Build Coastguard Worker }
708*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_RETRIEVE_MEMREC:
709*495ae853SAndroid Build Coastguard Worker {
710*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_ip_t *ps_ip = pv_api_ip;
711*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_op_t *ps_op = pv_api_op;
712*495ae853SAndroid Build Coastguard Worker
713*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec = NULL;
714*495ae853SAndroid Build Coastguard Worker
715*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
716*495ae853SAndroid Build Coastguard Worker
717*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_retrieve_mem_rec_ip_t))
718*495ae853SAndroid Build Coastguard Worker {
719*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
720*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
721*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_RETRIEVE_MEM_REC_API_STRUCT_SIZE_INCORRECT;
722*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
723*495ae853SAndroid Build Coastguard Worker }
724*495ae853SAndroid Build Coastguard Worker
725*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_retrieve_mem_rec_op_t))
726*495ae853SAndroid Build Coastguard Worker {
727*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
728*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
729*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_RETRIEVE_MEM_REC_API_STRUCT_SIZE_INCORRECT;
730*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
731*495ae853SAndroid Build Coastguard Worker }
732*495ae853SAndroid Build Coastguard Worker
733*495ae853SAndroid Build Coastguard Worker if(NULL == ps_ip->s_ive_ip.ps_mem_rec)
734*495ae853SAndroid Build Coastguard Worker {
735*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
736*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_FILL_NUM_MEM_RECS_POINTER_NULL;
737*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
738*495ae853SAndroid Build Coastguard Worker }
739*495ae853SAndroid Build Coastguard Worker
740*495ae853SAndroid Build Coastguard Worker ps_mem_rec = ps_ip->s_ive_ip.ps_mem_rec;
741*495ae853SAndroid Build Coastguard Worker
742*495ae853SAndroid Build Coastguard Worker /* check memrecords sizes are correct */
743*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ISVCE_MEM_REC_CNT; i++)
744*495ae853SAndroid Build Coastguard Worker {
745*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
746*495ae853SAndroid Build Coastguard Worker {
747*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
748*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_MEM_REC_STRUCT_SIZE_INCORRECT;
749*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
750*495ae853SAndroid Build Coastguard Worker }
751*495ae853SAndroid Build Coastguard Worker }
752*495ae853SAndroid Build Coastguard Worker
753*495ae853SAndroid Build Coastguard Worker break;
754*495ae853SAndroid Build Coastguard Worker }
755*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_ENCODE:
756*495ae853SAndroid Build Coastguard Worker {
757*495ae853SAndroid Build Coastguard Worker isvce_video_encode_ip_t *ps_ip = pv_api_ip;
758*495ae853SAndroid Build Coastguard Worker isvce_video_encode_op_t *ps_op = pv_api_op;
759*495ae853SAndroid Build Coastguard Worker
760*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_video_encode_ip_t))
761*495ae853SAndroid Build Coastguard Worker {
762*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
763*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_IP_ENCODE_API_STRUCT_SIZE_INCORRECT;
764*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
765*495ae853SAndroid Build Coastguard Worker }
766*495ae853SAndroid Build Coastguard Worker
767*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_video_encode_op_t))
768*495ae853SAndroid Build Coastguard Worker {
769*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
770*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_OP_ENCODE_API_STRUCT_SIZE_INCORRECT;
771*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
772*495ae853SAndroid Build Coastguard Worker }
773*495ae853SAndroid Build Coastguard Worker
774*495ae853SAndroid Build Coastguard Worker break;
775*495ae853SAndroid Build Coastguard Worker }
776*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_CTL:
777*495ae853SAndroid Build Coastguard Worker {
778*495ae853SAndroid Build Coastguard Worker switch(e_ctl_cmd)
779*495ae853SAndroid Build Coastguard Worker {
780*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GET_ENC_FRAME_DIMENSIONS:
781*495ae853SAndroid Build Coastguard Worker {
782*495ae853SAndroid Build Coastguard Worker break;
783*495ae853SAndroid Build Coastguard Worker }
784*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SETDEFAULT:
785*495ae853SAndroid Build Coastguard Worker {
786*495ae853SAndroid Build Coastguard Worker isvce_ctl_setdefault_ip_t *ps_ip = pv_api_ip;
787*495ae853SAndroid Build Coastguard Worker isvce_ctl_setdefault_op_t *ps_op = pv_api_op;
788*495ae853SAndroid Build Coastguard Worker
789*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_setdefault_ip_t))
790*495ae853SAndroid Build Coastguard Worker {
791*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
792*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
793*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETDEF_API_STRUCT_SIZE_INCORRECT;
794*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
795*495ae853SAndroid Build Coastguard Worker }
796*495ae853SAndroid Build Coastguard Worker
797*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_setdefault_op_t))
798*495ae853SAndroid Build Coastguard Worker {
799*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
800*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
801*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETDEF_API_STRUCT_SIZE_INCORRECT;
802*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
803*495ae853SAndroid Build Coastguard Worker }
804*495ae853SAndroid Build Coastguard Worker
805*495ae853SAndroid Build Coastguard Worker break;
806*495ae853SAndroid Build Coastguard Worker }
807*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETBUFINFO:
808*495ae853SAndroid Build Coastguard Worker {
809*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_ip_t *ps_ip = pv_api_ip;
810*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_op_t *ps_op = pv_api_op;
811*495ae853SAndroid Build Coastguard Worker
812*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_getbufinfo_ip_t))
813*495ae853SAndroid Build Coastguard Worker {
814*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
815*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
816*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_GETBUFINFO_API_STRUCT_SIZE_INCORRECT;
817*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
818*495ae853SAndroid Build Coastguard Worker }
819*495ae853SAndroid Build Coastguard Worker
820*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_getbufinfo_op_t))
821*495ae853SAndroid Build Coastguard Worker {
822*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
823*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
824*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_GETBUFINFO_API_STRUCT_SIZE_INCORRECT;
825*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
826*495ae853SAndroid Build Coastguard Worker }
827*495ae853SAndroid Build Coastguard Worker
828*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_wd < MIN_WD)
829*495ae853SAndroid Build Coastguard Worker {
830*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
831*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
832*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
833*495ae853SAndroid Build Coastguard Worker }
834*495ae853SAndroid Build Coastguard Worker
835*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_ht < MIN_HT)
836*495ae853SAndroid Build Coastguard Worker {
837*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
838*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
839*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
840*495ae853SAndroid Build Coastguard Worker }
841*495ae853SAndroid Build Coastguard Worker
842*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.e_inp_color_fmt != IV_YUV_420P) &&
843*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_inp_color_fmt != IV_YUV_422ILE) &&
844*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_inp_color_fmt != IV_YUV_420SP_UV) &&
845*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_inp_color_fmt != IV_YUV_420SP_VU))
846*495ae853SAndroid Build Coastguard Worker {
847*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
848*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INPUT_CHROMA_FORMAT_NOT_SUPPORTED;
849*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
850*495ae853SAndroid Build Coastguard Worker }
851*495ae853SAndroid Build Coastguard Worker
852*495ae853SAndroid Build Coastguard Worker break;
853*495ae853SAndroid Build Coastguard Worker }
854*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETVERSION:
855*495ae853SAndroid Build Coastguard Worker {
856*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_ip_t *ps_ip = pv_api_ip;
857*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_op_t *ps_op = pv_api_op;
858*495ae853SAndroid Build Coastguard Worker
859*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_getversioninfo_ip_t))
860*495ae853SAndroid Build Coastguard Worker {
861*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
862*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
863*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_GETVERSION_API_STRUCT_SIZE_INCORRECT;
864*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
865*495ae853SAndroid Build Coastguard Worker }
866*495ae853SAndroid Build Coastguard Worker
867*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_getversioninfo_op_t))
868*495ae853SAndroid Build Coastguard Worker {
869*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
870*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
871*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_GETVERSION_API_STRUCT_SIZE_INCORRECT;
872*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
873*495ae853SAndroid Build Coastguard Worker }
874*495ae853SAndroid Build Coastguard Worker
875*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.pu1_version == NULL)
876*495ae853SAndroid Build Coastguard Worker {
877*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
878*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IVE_ERR_CTL_GET_VERSION_BUFFER_IS_NULL;
879*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
880*495ae853SAndroid Build Coastguard Worker }
881*495ae853SAndroid Build Coastguard Worker
882*495ae853SAndroid Build Coastguard Worker break;
883*495ae853SAndroid Build Coastguard Worker }
884*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_FLUSH:
885*495ae853SAndroid Build Coastguard Worker {
886*495ae853SAndroid Build Coastguard Worker isvce_ctl_flush_ip_t *ps_ip = pv_api_ip;
887*495ae853SAndroid Build Coastguard Worker isvce_ctl_flush_op_t *ps_op = pv_api_op;
888*495ae853SAndroid Build Coastguard Worker
889*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_flush_ip_t))
890*495ae853SAndroid Build Coastguard Worker {
891*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
892*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
893*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_FLUSH_API_STRUCT_SIZE_INCORRECT;
894*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
895*495ae853SAndroid Build Coastguard Worker }
896*495ae853SAndroid Build Coastguard Worker
897*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_flush_op_t))
898*495ae853SAndroid Build Coastguard Worker {
899*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
900*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
901*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_FLUSH_API_STRUCT_SIZE_INCORRECT;
902*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
903*495ae853SAndroid Build Coastguard Worker }
904*495ae853SAndroid Build Coastguard Worker
905*495ae853SAndroid Build Coastguard Worker break;
906*495ae853SAndroid Build Coastguard Worker }
907*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_RESET:
908*495ae853SAndroid Build Coastguard Worker {
909*495ae853SAndroid Build Coastguard Worker isvce_ctl_reset_ip_t *ps_ip = pv_api_ip;
910*495ae853SAndroid Build Coastguard Worker isvce_ctl_reset_op_t *ps_op = pv_api_op;
911*495ae853SAndroid Build Coastguard Worker
912*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_reset_ip_t))
913*495ae853SAndroid Build Coastguard Worker {
914*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
915*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
916*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_RESET_API_STRUCT_SIZE_INCORRECT;
917*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
918*495ae853SAndroid Build Coastguard Worker }
919*495ae853SAndroid Build Coastguard Worker
920*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_reset_op_t))
921*495ae853SAndroid Build Coastguard Worker {
922*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
923*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
924*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_RESET_API_STRUCT_SIZE_INCORRECT;
925*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
926*495ae853SAndroid Build Coastguard Worker }
927*495ae853SAndroid Build Coastguard Worker
928*495ae853SAndroid Build Coastguard Worker break;
929*495ae853SAndroid Build Coastguard Worker }
930*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_NUM_CORES:
931*495ae853SAndroid Build Coastguard Worker {
932*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_ip_t *ps_ip = pv_api_ip;
933*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_op_t *ps_op = pv_api_op;
934*495ae853SAndroid Build Coastguard Worker
935*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_num_cores_ip_t))
936*495ae853SAndroid Build Coastguard Worker {
937*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
938*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
939*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETCORES_API_STRUCT_SIZE_INCORRECT;
940*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
941*495ae853SAndroid Build Coastguard Worker }
942*495ae853SAndroid Build Coastguard Worker
943*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_num_cores_op_t))
944*495ae853SAndroid Build Coastguard Worker {
945*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
946*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
947*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETCORES_API_STRUCT_SIZE_INCORRECT;
948*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
949*495ae853SAndroid Build Coastguard Worker }
950*495ae853SAndroid Build Coastguard Worker
951*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_num_cores < 1) ||
952*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_num_cores > MAX_NUM_CORES))
953*495ae853SAndroid Build Coastguard Worker {
954*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
955*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_NUM_CORES;
956*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
957*495ae853SAndroid Build Coastguard Worker }
958*495ae853SAndroid Build Coastguard Worker
959*495ae853SAndroid Build Coastguard Worker break;
960*495ae853SAndroid Build Coastguard Worker }
961*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DIMENSIONS:
962*495ae853SAndroid Build Coastguard Worker {
963*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_handle->pv_codec_handle);
964*495ae853SAndroid Build Coastguard Worker
965*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_ip_t *ps_ip = pv_api_ip;
966*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_op_t *ps_op = pv_api_op;
967*495ae853SAndroid Build Coastguard Worker
968*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_dimensions_ip_t))
969*495ae853SAndroid Build Coastguard Worker {
970*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
971*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
972*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETDIM_API_STRUCT_SIZE_INCORRECT;
973*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
974*495ae853SAndroid Build Coastguard Worker }
975*495ae853SAndroid Build Coastguard Worker
976*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_dimensions_op_t))
977*495ae853SAndroid Build Coastguard Worker {
978*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
979*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
980*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETDIM_API_STRUCT_SIZE_INCORRECT;
981*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
982*495ae853SAndroid Build Coastguard Worker }
983*495ae853SAndroid Build Coastguard Worker
984*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_wd < MIN_WD)
985*495ae853SAndroid Build Coastguard Worker {
986*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
987*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
988*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
989*495ae853SAndroid Build Coastguard Worker }
990*495ae853SAndroid Build Coastguard Worker
991*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_wd > ps_codec->s_cfg.u4_max_wd)
992*495ae853SAndroid Build Coastguard Worker {
993*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
994*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
995*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
996*495ae853SAndroid Build Coastguard Worker }
997*495ae853SAndroid Build Coastguard Worker
998*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_ht < MIN_HT)
999*495ae853SAndroid Build Coastguard Worker {
1000*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1001*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
1002*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1003*495ae853SAndroid Build Coastguard Worker }
1004*495ae853SAndroid Build Coastguard Worker
1005*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_ht > ps_codec->s_cfg.u4_max_ht)
1006*495ae853SAndroid Build Coastguard Worker {
1007*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1008*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
1009*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1010*495ae853SAndroid Build Coastguard Worker }
1011*495ae853SAndroid Build Coastguard Worker
1012*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_wd & 1)
1013*495ae853SAndroid Build Coastguard Worker {
1014*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1015*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_WIDTH_NOT_SUPPORTED;
1016*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1017*495ae853SAndroid Build Coastguard Worker }
1018*495ae853SAndroid Build Coastguard Worker
1019*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_ht & 1)
1020*495ae853SAndroid Build Coastguard Worker {
1021*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1022*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_HEIGHT_NOT_SUPPORTED;
1023*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1024*495ae853SAndroid Build Coastguard Worker }
1025*495ae853SAndroid Build Coastguard Worker
1026*495ae853SAndroid Build Coastguard Worker break;
1027*495ae853SAndroid Build Coastguard Worker }
1028*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMERATE:
1029*495ae853SAndroid Build Coastguard Worker {
1030*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_ip_t *ps_ip = pv_api_ip;
1031*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_op_t *ps_op = pv_api_op;
1032*495ae853SAndroid Build Coastguard Worker
1033*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_frame_rate_ip_t))
1034*495ae853SAndroid Build Coastguard Worker {
1035*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1036*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1037*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETFRAMERATE_API_STRUCT_SIZE_INCORRECT;
1038*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1039*495ae853SAndroid Build Coastguard Worker }
1040*495ae853SAndroid Build Coastguard Worker
1041*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_frame_rate_op_t))
1042*495ae853SAndroid Build Coastguard Worker {
1043*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1044*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1045*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETFRAMERATE_API_STRUCT_SIZE_INCORRECT;
1046*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1047*495ae853SAndroid Build Coastguard Worker }
1048*495ae853SAndroid Build Coastguard Worker
1049*495ae853SAndroid Build Coastguard Worker if(((ps_ip->s_ive_ip.u4_src_frame_rate * 1000) > DEFAULT_MAX_FRAMERATE) ||
1050*495ae853SAndroid Build Coastguard Worker ((ps_ip->s_ive_ip.u4_tgt_frame_rate * 1000) > DEFAULT_MAX_FRAMERATE))
1051*495ae853SAndroid Build Coastguard Worker {
1052*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1053*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_FRAME_RATE_NOT_SUPPORTED;
1054*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1055*495ae853SAndroid Build Coastguard Worker }
1056*495ae853SAndroid Build Coastguard Worker
1057*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_src_frame_rate == 0) ||
1058*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_tgt_frame_rate == 0))
1059*495ae853SAndroid Build Coastguard Worker {
1060*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1061*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_FRAME_RATE_NOT_SUPPORTED;
1062*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1063*495ae853SAndroid Build Coastguard Worker }
1064*495ae853SAndroid Build Coastguard Worker
1065*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_tgt_frame_rate > ps_ip->s_ive_ip.u4_src_frame_rate)
1066*495ae853SAndroid Build Coastguard Worker {
1067*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1068*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1069*495ae853SAndroid Build Coastguard Worker IH264E_TGT_FRAME_RATE_EXCEEDS_SRC_FRAME_RATE;
1070*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1071*495ae853SAndroid Build Coastguard Worker }
1072*495ae853SAndroid Build Coastguard Worker
1073*495ae853SAndroid Build Coastguard Worker break;
1074*495ae853SAndroid Build Coastguard Worker }
1075*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_BITRATE:
1076*495ae853SAndroid Build Coastguard Worker {
1077*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_ip_t *ps_ip = pv_api_ip;
1078*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_op_t *ps_op = pv_api_op;
1079*495ae853SAndroid Build Coastguard Worker
1080*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_handle->pv_codec_handle);
1081*495ae853SAndroid Build Coastguard Worker
1082*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_bitrate_ip_t))
1083*495ae853SAndroid Build Coastguard Worker {
1084*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1085*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1086*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETBITRATE_API_STRUCT_SIZE_INCORRECT;
1087*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1088*495ae853SAndroid Build Coastguard Worker }
1089*495ae853SAndroid Build Coastguard Worker
1090*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_bitrate_op_t))
1091*495ae853SAndroid Build Coastguard Worker {
1092*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1093*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1094*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETBITRATE_API_STRUCT_SIZE_INCORRECT;
1095*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1096*495ae853SAndroid Build Coastguard Worker }
1097*495ae853SAndroid Build Coastguard Worker
1098*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers; i++)
1099*495ae853SAndroid Build Coastguard Worker {
1100*495ae853SAndroid Build Coastguard Worker if((ps_ip->pu4_target_bitrate[i] > DEFAULT_MAX_BITRATE) ||
1101*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_target_bitrate[i] == 0))
1102*495ae853SAndroid Build Coastguard Worker {
1103*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1104*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_BITRATE_NOT_SUPPORTED;
1105*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1106*495ae853SAndroid Build Coastguard Worker }
1107*495ae853SAndroid Build Coastguard Worker }
1108*495ae853SAndroid Build Coastguard Worker
1109*495ae853SAndroid Build Coastguard Worker break;
1110*495ae853SAndroid Build Coastguard Worker }
1111*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMETYPE:
1112*495ae853SAndroid Build Coastguard Worker {
1113*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_ip_t *ps_ip = pv_api_ip;
1114*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_op_t *ps_op = pv_api_op;
1115*495ae853SAndroid Build Coastguard Worker
1116*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_frame_type_ip_t))
1117*495ae853SAndroid Build Coastguard Worker {
1118*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1119*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1120*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETFRAMETYPE_API_STRUCT_SIZE_INCORRECT;
1121*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1122*495ae853SAndroid Build Coastguard Worker }
1123*495ae853SAndroid Build Coastguard Worker
1124*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_frame_type_op_t))
1125*495ae853SAndroid Build Coastguard Worker {
1126*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1127*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1128*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETFRAMETYPE_API_STRUCT_SIZE_INCORRECT;
1129*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1130*495ae853SAndroid Build Coastguard Worker }
1131*495ae853SAndroid Build Coastguard Worker
1132*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.e_frame_type != IV_I_FRAME) &&
1133*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_frame_type != IV_P_FRAME) &&
1134*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_frame_type != IV_IDR_FRAME))
1135*495ae853SAndroid Build Coastguard Worker {
1136*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1137*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_FORCE_FRAME_INPUT;
1138*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1139*495ae853SAndroid Build Coastguard Worker }
1140*495ae853SAndroid Build Coastguard Worker
1141*495ae853SAndroid Build Coastguard Worker break;
1142*495ae853SAndroid Build Coastguard Worker }
1143*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ME_PARAMS:
1144*495ae853SAndroid Build Coastguard Worker {
1145*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_handle->pv_codec_handle);
1146*495ae853SAndroid Build Coastguard Worker
1147*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_ip_t *ps_ip = pv_api_ip;
1148*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_op_t *ps_op = pv_api_op;
1149*495ae853SAndroid Build Coastguard Worker
1150*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_me_params_ip_t))
1151*495ae853SAndroid Build Coastguard Worker {
1152*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1153*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1154*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETMEPARAMS_API_STRUCT_SIZE_INCORRECT;
1155*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1156*495ae853SAndroid Build Coastguard Worker }
1157*495ae853SAndroid Build Coastguard Worker
1158*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_me_params_op_t))
1159*495ae853SAndroid Build Coastguard Worker {
1160*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1161*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1162*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETMEPARAMS_API_STRUCT_SIZE_INCORRECT;
1163*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1164*495ae853SAndroid Build Coastguard Worker }
1165*495ae853SAndroid Build Coastguard Worker
1166*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_me_speed_preset != DMND_SRCH)
1167*495ae853SAndroid Build Coastguard Worker {
1168*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1169*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_ME_SPEED_PRESET;
1170*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1171*495ae853SAndroid Build Coastguard Worker }
1172*495ae853SAndroid Build Coastguard Worker
1173*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_enable_hpel != 0) &&
1174*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enable_hpel != 1))
1175*495ae853SAndroid Build Coastguard Worker {
1176*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1177*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_HALFPEL_OPTION;
1178*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1179*495ae853SAndroid Build Coastguard Worker }
1180*495ae853SAndroid Build Coastguard Worker
1181*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_enable_qpel != 0) &&
1182*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enable_qpel != 1))
1183*495ae853SAndroid Build Coastguard Worker {
1184*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1185*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_QPEL_OPTION;
1186*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1187*495ae853SAndroid Build Coastguard Worker }
1188*495ae853SAndroid Build Coastguard Worker
1189*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_enable_fast_sad != 0))
1190*495ae853SAndroid Build Coastguard Worker {
1191*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1192*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_FAST_SAD_OPTION;
1193*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1194*495ae853SAndroid Build Coastguard Worker }
1195*495ae853SAndroid Build Coastguard Worker
1196*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_enable_alt_ref > 0)
1197*495ae853SAndroid Build Coastguard Worker {
1198*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1199*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_ALT_REF_OPTION;
1200*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1201*495ae853SAndroid Build Coastguard Worker }
1202*495ae853SAndroid Build Coastguard Worker
1203*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_srch_rng_x > ps_codec->s_cfg.u4_max_srch_rng_x)
1204*495ae853SAndroid Build Coastguard Worker {
1205*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1206*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1207*495ae853SAndroid Build Coastguard Worker IH264E_HORIZONTAL_SEARCH_RANGE_NOT_SUPPORTED;
1208*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1209*495ae853SAndroid Build Coastguard Worker }
1210*495ae853SAndroid Build Coastguard Worker
1211*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_srch_rng_y > ps_codec->s_cfg.u4_max_srch_rng_y)
1212*495ae853SAndroid Build Coastguard Worker {
1213*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1214*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_VERTICAL_SEARCH_RANGE_NOT_SUPPORTED;
1215*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
1216*495ae853SAndroid Build Coastguard Worker }
1217*495ae853SAndroid Build Coastguard Worker
1218*495ae853SAndroid Build Coastguard Worker break;
1219*495ae853SAndroid Build Coastguard Worker }
1220*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_IPE_PARAMS:
1221*495ae853SAndroid Build Coastguard Worker {
1222*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_ip_t *ps_ip = pv_api_ip;
1223*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_op_t *ps_op = pv_api_op;
1224*495ae853SAndroid Build Coastguard Worker
1225*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_ipe_params_ip_t))
1226*495ae853SAndroid Build Coastguard Worker {
1227*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1228*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1229*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETIPEPARAMS_API_STRUCT_SIZE_INCORRECT;
1230*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1231*495ae853SAndroid Build Coastguard Worker }
1232*495ae853SAndroid Build Coastguard Worker
1233*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_ipe_params_op_t))
1234*495ae853SAndroid Build Coastguard Worker {
1235*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1236*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1237*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETIPEPARAMS_API_STRUCT_SIZE_INCORRECT;
1238*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1239*495ae853SAndroid Build Coastguard Worker }
1240*495ae853SAndroid Build Coastguard Worker
1241*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_enable_intra_4x4 != 0) &&
1242*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enable_intra_4x4 != 1))
1243*495ae853SAndroid Build Coastguard Worker {
1244*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1245*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_INTRA4x4_OPTION;
1246*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1247*495ae853SAndroid Build Coastguard Worker }
1248*495ae853SAndroid Build Coastguard Worker
1249*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_CONFIG) &&
1250*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_SLOWEST) &&
1251*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_NORMAL) &&
1252*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_FAST) &&
1253*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_HIGH_SPEED) &&
1254*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_enc_speed_preset != IVE_FASTEST))
1255*495ae853SAndroid Build Coastguard Worker {
1256*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1257*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_ENC_SPEED_PRESET;
1258*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1259*495ae853SAndroid Build Coastguard Worker }
1260*495ae853SAndroid Build Coastguard Worker
1261*495ae853SAndroid Build Coastguard Worker break;
1262*495ae853SAndroid Build Coastguard Worker }
1263*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_GOP_PARAMS:
1264*495ae853SAndroid Build Coastguard Worker {
1265*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_ip_t *ps_ip = pv_api_ip;
1266*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_op_t *ps_op = pv_api_op;
1267*495ae853SAndroid Build Coastguard Worker
1268*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_gop_params_ip_t))
1269*495ae853SAndroid Build Coastguard Worker {
1270*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1271*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1272*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETGOPPARAMS_API_STRUCT_SIZE_INCORRECT;
1273*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1274*495ae853SAndroid Build Coastguard Worker }
1275*495ae853SAndroid Build Coastguard Worker
1276*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_gop_params_op_t))
1277*495ae853SAndroid Build Coastguard Worker {
1278*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1279*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1280*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETGOPPARAMS_API_STRUCT_SIZE_INCORRECT;
1281*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1282*495ae853SAndroid Build Coastguard Worker }
1283*495ae853SAndroid Build Coastguard Worker
1284*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_i_frm_interval < DEFAULT_MIN_INTRA_FRAME_RATE) ||
1285*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_i_frm_interval > DEFAULT_MAX_INTRA_FRAME_RATE))
1286*495ae853SAndroid Build Coastguard Worker {
1287*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1288*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_INTRA_FRAME_INTERVAL;
1289*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1290*495ae853SAndroid Build Coastguard Worker }
1291*495ae853SAndroid Build Coastguard Worker
1292*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_idr_frm_interval < DEFAULT_MIN_INTRA_FRAME_RATE) ||
1293*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_idr_frm_interval > DEFAULT_MAX_INTRA_FRAME_RATE))
1294*495ae853SAndroid Build Coastguard Worker {
1295*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1296*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_IDR_FRAME_INTERVAL;
1297*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1298*495ae853SAndroid Build Coastguard Worker }
1299*495ae853SAndroid Build Coastguard Worker
1300*495ae853SAndroid Build Coastguard Worker break;
1301*495ae853SAndroid Build Coastguard Worker }
1302*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DEBLOCK_PARAMS:
1303*495ae853SAndroid Build Coastguard Worker {
1304*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_ip_t *ps_ip = pv_api_ip;
1305*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_op_t *ps_op = pv_api_op;
1306*495ae853SAndroid Build Coastguard Worker
1307*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_deblock_params_ip_t))
1308*495ae853SAndroid Build Coastguard Worker {
1309*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1310*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1311*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETDEBLKPARAMS_API_STRUCT_SIZE_INCORRECT;
1312*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1313*495ae853SAndroid Build Coastguard Worker }
1314*495ae853SAndroid Build Coastguard Worker
1315*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_deblock_params_op_t))
1316*495ae853SAndroid Build Coastguard Worker {
1317*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1318*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1319*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETDEBLKPARAMS_API_STRUCT_SIZE_INCORRECT;
1320*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1321*495ae853SAndroid Build Coastguard Worker }
1322*495ae853SAndroid Build Coastguard Worker
1323*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_disable_deblock_level != DISABLE_DEBLK_LEVEL_0) &&
1324*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_disable_deblock_level != DISABLE_DEBLK_LEVEL_2) &&
1325*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_disable_deblock_level != DISABLE_DEBLK_LEVEL_3) &&
1326*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.u4_disable_deblock_level != DISABLE_DEBLK_LEVEL_4))
1327*495ae853SAndroid Build Coastguard Worker {
1328*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1329*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_DEBLOCKING_TYPE_INPUT;
1330*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1331*495ae853SAndroid Build Coastguard Worker }
1332*495ae853SAndroid Build Coastguard Worker
1333*495ae853SAndroid Build Coastguard Worker break;
1334*495ae853SAndroid Build Coastguard Worker }
1335*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_QP:
1336*495ae853SAndroid Build Coastguard Worker {
1337*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_ip_t *ps_ip = pv_api_ip;
1338*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_op_t *ps_op = pv_api_op;
1339*495ae853SAndroid Build Coastguard Worker
1340*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_handle->pv_codec_handle);
1341*495ae853SAndroid Build Coastguard Worker
1342*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_qp_ip_t))
1343*495ae853SAndroid Build Coastguard Worker {
1344*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1345*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1346*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETQPPARAMS_API_STRUCT_SIZE_INCORRECT;
1347*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1348*495ae853SAndroid Build Coastguard Worker }
1349*495ae853SAndroid Build Coastguard Worker
1350*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_qp_op_t))
1351*495ae853SAndroid Build Coastguard Worker {
1352*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1353*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1354*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETQPPARAMS_API_STRUCT_SIZE_INCORRECT;
1355*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1356*495ae853SAndroid Build Coastguard Worker }
1357*495ae853SAndroid Build Coastguard Worker
1358*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers; i++)
1359*495ae853SAndroid Build Coastguard Worker {
1360*495ae853SAndroid Build Coastguard Worker if((ps_ip->pu4_i_qp_max[i] > MAX_H264_QP) ||
1361*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_p_qp_max[i] > MAX_H264_QP) ||
1362*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_b_qp_max[i] > MAX_H264_QP))
1363*495ae853SAndroid Build Coastguard Worker {
1364*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1365*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_MAX_FRAME_QP;
1366*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1367*495ae853SAndroid Build Coastguard Worker }
1368*495ae853SAndroid Build Coastguard Worker
1369*495ae853SAndroid Build Coastguard Worker /* We donot support QP < 4 */
1370*495ae853SAndroid Build Coastguard Worker if((((WORD32) ps_ip->pu4_i_qp_min[i]) < MIN_H264_QP) ||
1371*495ae853SAndroid Build Coastguard Worker ((WORD32) ps_ip->pu4_p_qp_min[i] < MIN_H264_QP) ||
1372*495ae853SAndroid Build Coastguard Worker (((WORD32) ps_ip->pu4_b_qp_min[i]) < MIN_H264_QP) ||
1373*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_i_qp_min[i] > ps_ip->pu4_i_qp_max[i]) ||
1374*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_p_qp_min[i] > ps_ip->pu4_p_qp_max[i]) ||
1375*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_b_qp_min[i] > ps_ip->pu4_b_qp_max[i]))
1376*495ae853SAndroid Build Coastguard Worker {
1377*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1378*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_MIN_FRAME_QP;
1379*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1380*495ae853SAndroid Build Coastguard Worker }
1381*495ae853SAndroid Build Coastguard Worker
1382*495ae853SAndroid Build Coastguard Worker if((ps_ip->pu4_i_qp[i] > ps_ip->pu4_i_qp_max[i]) ||
1383*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_p_qp[i] > ps_ip->pu4_p_qp_max[i]) ||
1384*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_b_qp[i] > ps_ip->pu4_b_qp_max[i]))
1385*495ae853SAndroid Build Coastguard Worker {
1386*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1387*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_INIT_QP;
1388*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1389*495ae853SAndroid Build Coastguard Worker }
1390*495ae853SAndroid Build Coastguard Worker
1391*495ae853SAndroid Build Coastguard Worker if((ps_ip->pu4_i_qp[i] < ps_ip->pu4_i_qp_min[i]) ||
1392*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_p_qp[i] < ps_ip->pu4_p_qp_min[i]) ||
1393*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_b_qp[i] < ps_ip->pu4_b_qp_min[i]))
1394*495ae853SAndroid Build Coastguard Worker {
1395*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1396*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_INIT_QP;
1397*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1398*495ae853SAndroid Build Coastguard Worker }
1399*495ae853SAndroid Build Coastguard Worker }
1400*495ae853SAndroid Build Coastguard Worker
1401*495ae853SAndroid Build Coastguard Worker break;
1402*495ae853SAndroid Build Coastguard Worker }
1403*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VUI_PARAMS:
1404*495ae853SAndroid Build Coastguard Worker {
1405*495ae853SAndroid Build Coastguard Worker isvce_vui_ip_t *ps_ip = pv_api_ip;
1406*495ae853SAndroid Build Coastguard Worker isvce_vui_op_t *ps_op = pv_api_op;
1407*495ae853SAndroid Build Coastguard Worker
1408*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvce_vui_ip_t))
1409*495ae853SAndroid Build Coastguard Worker {
1410*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1411*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_IP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT;
1412*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1413*495ae853SAndroid Build Coastguard Worker }
1414*495ae853SAndroid Build Coastguard Worker
1415*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvce_vui_op_t))
1416*495ae853SAndroid Build Coastguard Worker {
1417*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1418*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_OP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT;
1419*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1420*495ae853SAndroid Build Coastguard Worker }
1421*495ae853SAndroid Build Coastguard Worker
1422*495ae853SAndroid Build Coastguard Worker break;
1423*495ae853SAndroid Build Coastguard Worker }
1424*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_MDCV_PARAMS:
1425*495ae853SAndroid Build Coastguard Worker {
1426*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_ip_t *ps_ip = pv_api_ip;
1427*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_op_t *ps_op = pv_api_op;
1428*495ae853SAndroid Build Coastguard Worker
1429*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvce_ctl_set_sei_mdcv_params_ip_t))
1430*495ae853SAndroid Build Coastguard Worker {
1431*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1432*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_IP_CTL_SET_SEI_MDCV_STRUCT_SIZE_INCORRECT;
1433*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1434*495ae853SAndroid Build Coastguard Worker }
1435*495ae853SAndroid Build Coastguard Worker
1436*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvce_ctl_set_sei_mdcv_params_op_t))
1437*495ae853SAndroid Build Coastguard Worker {
1438*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1439*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_OP_CTL_SET_SEI_MDCV_STRUCT_SIZE_INCORRECT;
1440*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1441*495ae853SAndroid Build Coastguard Worker }
1442*495ae853SAndroid Build Coastguard Worker
1443*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_sei_mdcv_params_present_flag != 0) &&
1444*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_sei_mdcv_params_present_flag) != 1)
1445*495ae853SAndroid Build Coastguard Worker {
1446*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1447*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1448*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1449*495ae853SAndroid Build Coastguard Worker }
1450*495ae853SAndroid Build Coastguard Worker
1451*495ae853SAndroid Build Coastguard Worker if(1 == ps_ip->u1_sei_mdcv_params_present_flag)
1452*495ae853SAndroid Build Coastguard Worker {
1453*495ae853SAndroid Build Coastguard Worker /* Check values for u2_display_primaries_x and
1454*495ae853SAndroid Build Coastguard Worker * u2_display_primaries_y */
1455*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 3; i++)
1456*495ae853SAndroid Build Coastguard Worker {
1457*495ae853SAndroid Build Coastguard Worker if((ps_ip->au2_display_primaries_x[i] >
1458*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_UPPER_LIMIT) ||
1459*495ae853SAndroid Build Coastguard Worker (ps_ip->au2_display_primaries_x[i] <
1460*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_LOWER_LIMIT) ||
1461*495ae853SAndroid Build Coastguard Worker ((ps_ip->au2_display_primaries_x[i] %
1462*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_DIVISION_FACTOR) != 0))
1463*495ae853SAndroid Build Coastguard Worker {
1464*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1465*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1466*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1467*495ae853SAndroid Build Coastguard Worker }
1468*495ae853SAndroid Build Coastguard Worker
1469*495ae853SAndroid Build Coastguard Worker if((ps_ip->au2_display_primaries_y[i] >
1470*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_UPPER_LIMIT) ||
1471*495ae853SAndroid Build Coastguard Worker (ps_ip->au2_display_primaries_y[i] <
1472*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_LOWER_LIMIT) ||
1473*495ae853SAndroid Build Coastguard Worker ((ps_ip->au2_display_primaries_y[i] %
1474*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_DIVISION_FACTOR) != 0))
1475*495ae853SAndroid Build Coastguard Worker {
1476*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1477*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1478*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1479*495ae853SAndroid Build Coastguard Worker }
1480*495ae853SAndroid Build Coastguard Worker }
1481*495ae853SAndroid Build Coastguard Worker
1482*495ae853SAndroid Build Coastguard Worker if((ps_ip->u2_white_point_x > WHITE_POINT_X_UPPER_LIMIT) ||
1483*495ae853SAndroid Build Coastguard Worker (ps_ip->u2_white_point_x < WHITE_POINT_X_LOWER_LIMIT) ||
1484*495ae853SAndroid Build Coastguard Worker ((ps_ip->u2_white_point_x % WHITE_POINT_X_DIVISION_FACTOR) != 0))
1485*495ae853SAndroid Build Coastguard Worker {
1486*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1487*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1488*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1489*495ae853SAndroid Build Coastguard Worker }
1490*495ae853SAndroid Build Coastguard Worker
1491*495ae853SAndroid Build Coastguard Worker if((ps_ip->u2_white_point_y > WHITE_POINT_Y_UPPER_LIMIT) ||
1492*495ae853SAndroid Build Coastguard Worker (ps_ip->u2_white_point_y < WHITE_POINT_Y_LOWER_LIMIT) ||
1493*495ae853SAndroid Build Coastguard Worker ((ps_ip->u2_white_point_y % WHITE_POINT_Y_DIVISION_FACTOR) != 0))
1494*495ae853SAndroid Build Coastguard Worker {
1495*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1496*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1497*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1498*495ae853SAndroid Build Coastguard Worker }
1499*495ae853SAndroid Build Coastguard Worker
1500*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_max_display_mastering_luminance >
1501*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_UPPER_LIMIT) ||
1502*495ae853SAndroid Build Coastguard Worker (ps_ip->u4_max_display_mastering_luminance <
1503*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_LOWER_LIMIT) ||
1504*495ae853SAndroid Build Coastguard Worker ((ps_ip->u4_max_display_mastering_luminance %
1505*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_DIVISION_FACTOR) != 0))
1506*495ae853SAndroid Build Coastguard Worker {
1507*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1508*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1509*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1510*495ae853SAndroid Build Coastguard Worker }
1511*495ae853SAndroid Build Coastguard Worker
1512*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_min_display_mastering_luminance >
1513*495ae853SAndroid Build Coastguard Worker MIN_DISPLAY_MASTERING_LUMINANCE_UPPER_LIMIT) ||
1514*495ae853SAndroid Build Coastguard Worker (ps_ip->u4_min_display_mastering_luminance <
1515*495ae853SAndroid Build Coastguard Worker MIN_DISPLAY_MASTERING_LUMINANCE_LOWER_LIMIT))
1516*495ae853SAndroid Build Coastguard Worker {
1517*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1518*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1519*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1520*495ae853SAndroid Build Coastguard Worker }
1521*495ae853SAndroid Build Coastguard Worker
1522*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_max_display_mastering_luminance <=
1523*495ae853SAndroid Build Coastguard Worker ps_ip->u4_min_display_mastering_luminance)
1524*495ae853SAndroid Build Coastguard Worker {
1525*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1526*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_MDCV_PARAMS;
1527*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1528*495ae853SAndroid Build Coastguard Worker }
1529*495ae853SAndroid Build Coastguard Worker }
1530*495ae853SAndroid Build Coastguard Worker
1531*495ae853SAndroid Build Coastguard Worker break;
1532*495ae853SAndroid Build Coastguard Worker }
1533*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CLL_PARAMS:
1534*495ae853SAndroid Build Coastguard Worker {
1535*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_ip_t *ps_ip = pv_api_ip;
1536*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_op_t *ps_op = pv_api_op;
1537*495ae853SAndroid Build Coastguard Worker
1538*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvce_ctl_set_sei_cll_params_ip_t))
1539*495ae853SAndroid Build Coastguard Worker {
1540*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1541*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_IP_CTL_SET_SEI_CLL_STRUCT_SIZE_INCORRECT;
1542*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1543*495ae853SAndroid Build Coastguard Worker }
1544*495ae853SAndroid Build Coastguard Worker
1545*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvce_ctl_set_sei_cll_params_op_t))
1546*495ae853SAndroid Build Coastguard Worker {
1547*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1548*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_OP_CTL_SET_SEI_CLL_STRUCT_SIZE_INCORRECT;
1549*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1550*495ae853SAndroid Build Coastguard Worker }
1551*495ae853SAndroid Build Coastguard Worker
1552*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_sei_cll_params_present_flag != 0) &&
1553*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_sei_cll_params_present_flag != 1))
1554*495ae853SAndroid Build Coastguard Worker {
1555*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1556*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CLL_PARAMS;
1557*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1558*495ae853SAndroid Build Coastguard Worker }
1559*495ae853SAndroid Build Coastguard Worker
1560*495ae853SAndroid Build Coastguard Worker break;
1561*495ae853SAndroid Build Coastguard Worker }
1562*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_AVE_PARAMS:
1563*495ae853SAndroid Build Coastguard Worker {
1564*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_ip_t *ps_ip = pv_api_ip;
1565*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_op_t *ps_op = pv_api_op;
1566*495ae853SAndroid Build Coastguard Worker
1567*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvce_ctl_set_sei_ave_params_ip_t))
1568*495ae853SAndroid Build Coastguard Worker {
1569*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1570*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_IP_CTL_SET_SEI_AVE_STRUCT_SIZE_INCORRECT;
1571*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1572*495ae853SAndroid Build Coastguard Worker }
1573*495ae853SAndroid Build Coastguard Worker
1574*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvce_ctl_set_sei_ave_params_op_t))
1575*495ae853SAndroid Build Coastguard Worker {
1576*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1577*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_OP_CTL_SET_SEI_AVE_STRUCT_SIZE_INCORRECT;
1578*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1579*495ae853SAndroid Build Coastguard Worker }
1580*495ae853SAndroid Build Coastguard Worker
1581*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_sei_ave_params_present_flag != 0) &&
1582*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_sei_ave_params_present_flag != 1))
1583*495ae853SAndroid Build Coastguard Worker {
1584*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1585*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_AVE_PARAMS;
1586*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1587*495ae853SAndroid Build Coastguard Worker }
1588*495ae853SAndroid Build Coastguard Worker
1589*495ae853SAndroid Build Coastguard Worker if(1 == ps_ip->u1_sei_ave_params_present_flag)
1590*495ae853SAndroid Build Coastguard Worker {
1591*495ae853SAndroid Build Coastguard Worker if((0 == ps_ip->u4_ambient_illuminance))
1592*495ae853SAndroid Build Coastguard Worker {
1593*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1594*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_AVE_PARAMS;
1595*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1596*495ae853SAndroid Build Coastguard Worker }
1597*495ae853SAndroid Build Coastguard Worker
1598*495ae853SAndroid Build Coastguard Worker if(ps_ip->u2_ambient_light_x > AMBIENT_LIGHT_X_UPPER_LIMIT)
1599*495ae853SAndroid Build Coastguard Worker {
1600*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1601*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_AVE_PARAMS;
1602*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1603*495ae853SAndroid Build Coastguard Worker }
1604*495ae853SAndroid Build Coastguard Worker
1605*495ae853SAndroid Build Coastguard Worker if(ps_ip->u2_ambient_light_y > AMBIENT_LIGHT_Y_UPPER_LIMIT)
1606*495ae853SAndroid Build Coastguard Worker {
1607*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1608*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_AVE_PARAMS;
1609*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1610*495ae853SAndroid Build Coastguard Worker }
1611*495ae853SAndroid Build Coastguard Worker }
1612*495ae853SAndroid Build Coastguard Worker
1613*495ae853SAndroid Build Coastguard Worker break;
1614*495ae853SAndroid Build Coastguard Worker }
1615*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CCV_PARAMS:
1616*495ae853SAndroid Build Coastguard Worker {
1617*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_ip_t *ps_ip = pv_api_ip;
1618*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_op_t *ps_op = pv_api_op;
1619*495ae853SAndroid Build Coastguard Worker
1620*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvce_ctl_set_sei_ccv_params_ip_t))
1621*495ae853SAndroid Build Coastguard Worker {
1622*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1623*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_IP_CTL_SET_SEI_CCV_STRUCT_SIZE_INCORRECT;
1624*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1625*495ae853SAndroid Build Coastguard Worker }
1626*495ae853SAndroid Build Coastguard Worker
1627*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvce_ctl_set_sei_ccv_params_op_t))
1628*495ae853SAndroid Build Coastguard Worker {
1629*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1630*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVE_ERR_OP_CTL_SET_SEI_CCV_STRUCT_SIZE_INCORRECT;
1631*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1632*495ae853SAndroid Build Coastguard Worker }
1633*495ae853SAndroid Build Coastguard Worker
1634*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_sei_ccv_params_present_flag != 0) &&
1635*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_sei_ccv_params_present_flag != 1))
1636*495ae853SAndroid Build Coastguard Worker {
1637*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1638*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1639*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1640*495ae853SAndroid Build Coastguard Worker }
1641*495ae853SAndroid Build Coastguard Worker
1642*495ae853SAndroid Build Coastguard Worker if(1 == ps_ip->u1_sei_ccv_params_present_flag)
1643*495ae853SAndroid Build Coastguard Worker {
1644*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_cancel_flag != 0) && (ps_ip->u1_ccv_cancel_flag != 1))
1645*495ae853SAndroid Build Coastguard Worker {
1646*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1647*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1648*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1649*495ae853SAndroid Build Coastguard Worker }
1650*495ae853SAndroid Build Coastguard Worker
1651*495ae853SAndroid Build Coastguard Worker if(0 == ps_ip->u1_ccv_cancel_flag)
1652*495ae853SAndroid Build Coastguard Worker {
1653*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_persistence_flag != 0) &&
1654*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_persistence_flag != 1))
1655*495ae853SAndroid Build Coastguard Worker {
1656*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1657*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1658*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1659*495ae853SAndroid Build Coastguard Worker }
1660*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_primaries_present_flag != 0) &&
1661*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_primaries_present_flag != 1))
1662*495ae853SAndroid Build Coastguard Worker {
1663*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1664*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1665*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1666*495ae853SAndroid Build Coastguard Worker }
1667*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_min_luminance_value_present_flag != 0) &&
1668*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_min_luminance_value_present_flag != 1))
1669*495ae853SAndroid Build Coastguard Worker {
1670*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1671*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1672*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1673*495ae853SAndroid Build Coastguard Worker }
1674*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_max_luminance_value_present_flag != 0) &&
1675*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_max_luminance_value_present_flag != 1))
1676*495ae853SAndroid Build Coastguard Worker {
1677*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1678*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1679*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1680*495ae853SAndroid Build Coastguard Worker }
1681*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_avg_luminance_value_present_flag != 0) &&
1682*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_avg_luminance_value_present_flag != 1))
1683*495ae853SAndroid Build Coastguard Worker {
1684*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1685*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1686*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1687*495ae853SAndroid Build Coastguard Worker }
1688*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_primaries_present_flag == 0) &&
1689*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_min_luminance_value_present_flag == 0) &&
1690*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_max_luminance_value_present_flag == 0) &&
1691*495ae853SAndroid Build Coastguard Worker (ps_ip->u1_ccv_avg_luminance_value_present_flag == 0))
1692*495ae853SAndroid Build Coastguard Worker {
1693*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1694*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1695*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1696*495ae853SAndroid Build Coastguard Worker }
1697*495ae853SAndroid Build Coastguard Worker
1698*495ae853SAndroid Build Coastguard Worker if((ps_ip->u1_ccv_reserved_zero_2bits != 0))
1699*495ae853SAndroid Build Coastguard Worker {
1700*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1701*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1702*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1703*495ae853SAndroid Build Coastguard Worker }
1704*495ae853SAndroid Build Coastguard Worker
1705*495ae853SAndroid Build Coastguard Worker if(1 == ps_ip->u1_ccv_primaries_present_flag)
1706*495ae853SAndroid Build Coastguard Worker {
1707*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 3; i++)
1708*495ae853SAndroid Build Coastguard Worker {
1709*495ae853SAndroid Build Coastguard Worker if((ps_ip->ai4_ccv_primaries_x[i] >
1710*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_X_UPPER_LIMIT) ||
1711*495ae853SAndroid Build Coastguard Worker (ps_ip->ai4_ccv_primaries_x[i] <
1712*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_X_LOWER_LIMIT))
1713*495ae853SAndroid Build Coastguard Worker {
1714*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1715*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1716*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1717*495ae853SAndroid Build Coastguard Worker }
1718*495ae853SAndroid Build Coastguard Worker
1719*495ae853SAndroid Build Coastguard Worker if((ps_ip->ai4_ccv_primaries_y[i] >
1720*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_Y_UPPER_LIMIT) ||
1721*495ae853SAndroid Build Coastguard Worker (ps_ip->ai4_ccv_primaries_y[i] <
1722*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_Y_LOWER_LIMIT))
1723*495ae853SAndroid Build Coastguard Worker {
1724*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1725*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1726*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1727*495ae853SAndroid Build Coastguard Worker }
1728*495ae853SAndroid Build Coastguard Worker }
1729*495ae853SAndroid Build Coastguard Worker }
1730*495ae853SAndroid Build Coastguard Worker
1731*495ae853SAndroid Build Coastguard Worker if((1 == ps_ip->u1_ccv_min_luminance_value_present_flag) &&
1732*495ae853SAndroid Build Coastguard Worker (1 == ps_ip->u1_ccv_avg_luminance_value_present_flag))
1733*495ae853SAndroid Build Coastguard Worker {
1734*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_ccv_avg_luminance_value <
1735*495ae853SAndroid Build Coastguard Worker ps_ip->u4_ccv_min_luminance_value))
1736*495ae853SAndroid Build Coastguard Worker {
1737*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1738*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1739*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1740*495ae853SAndroid Build Coastguard Worker }
1741*495ae853SAndroid Build Coastguard Worker }
1742*495ae853SAndroid Build Coastguard Worker
1743*495ae853SAndroid Build Coastguard Worker if((1 == ps_ip->u1_ccv_min_luminance_value_present_flag) &&
1744*495ae853SAndroid Build Coastguard Worker (1 == ps_ip->u1_ccv_max_luminance_value_present_flag))
1745*495ae853SAndroid Build Coastguard Worker {
1746*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_ccv_max_luminance_value <
1747*495ae853SAndroid Build Coastguard Worker ps_ip->u4_ccv_min_luminance_value))
1748*495ae853SAndroid Build Coastguard Worker {
1749*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1750*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1751*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1752*495ae853SAndroid Build Coastguard Worker }
1753*495ae853SAndroid Build Coastguard Worker }
1754*495ae853SAndroid Build Coastguard Worker if((1 == ps_ip->u1_ccv_avg_luminance_value_present_flag) &&
1755*495ae853SAndroid Build Coastguard Worker (1 == ps_ip->u1_ccv_max_luminance_value_present_flag))
1756*495ae853SAndroid Build Coastguard Worker {
1757*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_ccv_max_luminance_value <
1758*495ae853SAndroid Build Coastguard Worker ps_ip->u4_ccv_avg_luminance_value))
1759*495ae853SAndroid Build Coastguard Worker {
1760*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1761*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IH264E_INVALID_SEI_CCV_PARAMS;
1762*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1763*495ae853SAndroid Build Coastguard Worker }
1764*495ae853SAndroid Build Coastguard Worker }
1765*495ae853SAndroid Build Coastguard Worker }
1766*495ae853SAndroid Build Coastguard Worker }
1767*495ae853SAndroid Build Coastguard Worker
1768*495ae853SAndroid Build Coastguard Worker break;
1769*495ae853SAndroid Build Coastguard Worker }
1770*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ENC_MODE:
1771*495ae853SAndroid Build Coastguard Worker {
1772*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_ip_t *ps_ip = pv_api_ip;
1773*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_op_t *ps_op = pv_api_op;
1774*495ae853SAndroid Build Coastguard Worker
1775*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_enc_mode_ip_t))
1776*495ae853SAndroid Build Coastguard Worker {
1777*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1778*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1779*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETENCMODE_API_STRUCT_SIZE_INCORRECT;
1780*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1781*495ae853SAndroid Build Coastguard Worker }
1782*495ae853SAndroid Build Coastguard Worker
1783*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_enc_mode_op_t))
1784*495ae853SAndroid Build Coastguard Worker {
1785*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1786*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1787*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETENCMODE_API_STRUCT_SIZE_INCORRECT;
1788*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1789*495ae853SAndroid Build Coastguard Worker }
1790*495ae853SAndroid Build Coastguard Worker
1791*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.e_enc_mode != IVE_ENC_MODE_HEADER) &&
1792*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_enc_mode != IVE_ENC_MODE_PICTURE))
1793*495ae853SAndroid Build Coastguard Worker {
1794*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1795*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_ENC_OPERATION_MODE;
1796*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1797*495ae853SAndroid Build Coastguard Worker }
1798*495ae853SAndroid Build Coastguard Worker
1799*495ae853SAndroid Build Coastguard Worker break;
1800*495ae853SAndroid Build Coastguard Worker }
1801*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VBV_PARAMS:
1802*495ae853SAndroid Build Coastguard Worker {
1803*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_ip_t *ps_ip = pv_api_ip;
1804*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_op_t *ps_op = pv_api_op;
1805*495ae853SAndroid Build Coastguard Worker
1806*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_handle->pv_codec_handle);
1807*495ae853SAndroid Build Coastguard Worker
1808*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_vbv_params_ip_t))
1809*495ae853SAndroid Build Coastguard Worker {
1810*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1811*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1812*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETVBVPARAMS_API_STRUCT_SIZE_INCORRECT;
1813*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1814*495ae853SAndroid Build Coastguard Worker }
1815*495ae853SAndroid Build Coastguard Worker
1816*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_vbv_params_op_t))
1817*495ae853SAndroid Build Coastguard Worker {
1818*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1819*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1820*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETVBVPARAMS_API_STRUCT_SIZE_INCORRECT;
1821*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1822*495ae853SAndroid Build Coastguard Worker }
1823*495ae853SAndroid Build Coastguard Worker
1824*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers; i++)
1825*495ae853SAndroid Build Coastguard Worker {
1826*495ae853SAndroid Build Coastguard Worker if((ps_ip->pu4_vbv_buffer_delay[i] < DEFAULT_MIN_BUFFER_DELAY) ||
1827*495ae853SAndroid Build Coastguard Worker (ps_ip->pu4_vbv_buffer_delay[i] > DEFAULT_MAX_BUFFER_DELAY))
1828*495ae853SAndroid Build Coastguard Worker {
1829*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1830*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_BUFFER_DELAY;
1831*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1832*495ae853SAndroid Build Coastguard Worker }
1833*495ae853SAndroid Build Coastguard Worker }
1834*495ae853SAndroid Build Coastguard Worker
1835*495ae853SAndroid Build Coastguard Worker break;
1836*495ae853SAndroid Build Coastguard Worker }
1837*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_AIR_PARAMS:
1838*495ae853SAndroid Build Coastguard Worker {
1839*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_ip_t *ps_ip = pv_api_ip;
1840*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_op_t *ps_op = pv_api_op;
1841*495ae853SAndroid Build Coastguard Worker
1842*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_air_params_ip_t))
1843*495ae853SAndroid Build Coastguard Worker {
1844*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1845*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1846*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETAIRPARAMS_API_STRUCT_SIZE_INCORRECT;
1847*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1848*495ae853SAndroid Build Coastguard Worker }
1849*495ae853SAndroid Build Coastguard Worker
1850*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_air_params_op_t))
1851*495ae853SAndroid Build Coastguard Worker {
1852*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1853*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1854*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETAIRPARAMS_API_STRUCT_SIZE_INCORRECT;
1855*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1856*495ae853SAndroid Build Coastguard Worker }
1857*495ae853SAndroid Build Coastguard Worker
1858*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.e_air_mode != IVE_AIR_MODE_NONE) &&
1859*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_air_mode != IVE_AIR_MODE_CYCLIC) &&
1860*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_air_mode != IVE_AIR_MODE_RANDOM))
1861*495ae853SAndroid Build Coastguard Worker {
1862*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1863*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_AIR_MODE;
1864*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1865*495ae853SAndroid Build Coastguard Worker }
1866*495ae853SAndroid Build Coastguard Worker
1867*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_air_refresh_period == 0)
1868*495ae853SAndroid Build Coastguard Worker {
1869*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1870*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_AIR_REFRESH_PERIOD;
1871*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1872*495ae853SAndroid Build Coastguard Worker }
1873*495ae853SAndroid Build Coastguard Worker
1874*495ae853SAndroid Build Coastguard Worker break;
1875*495ae853SAndroid Build Coastguard Worker }
1876*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_PROFILE_PARAMS:
1877*495ae853SAndroid Build Coastguard Worker {
1878*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_ip_t *ps_ip = pv_api_ip;
1879*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_op_t *ps_op = pv_api_op;
1880*495ae853SAndroid Build Coastguard Worker
1881*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_size != sizeof(isvce_ctl_set_profile_params_ip_t))
1882*495ae853SAndroid Build Coastguard Worker {
1883*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1884*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1885*495ae853SAndroid Build Coastguard Worker IVE_ERR_IP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT;
1886*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1887*495ae853SAndroid Build Coastguard Worker }
1888*495ae853SAndroid Build Coastguard Worker
1889*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_size != sizeof(isvce_ctl_set_profile_params_op_t))
1890*495ae853SAndroid Build Coastguard Worker {
1891*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1892*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |=
1893*495ae853SAndroid Build Coastguard Worker IVE_ERR_OP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT;
1894*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1895*495ae853SAndroid Build Coastguard Worker }
1896*495ae853SAndroid Build Coastguard Worker
1897*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.e_profile != IV_PROFILE_BASE &&
1898*495ae853SAndroid Build Coastguard Worker ps_ip->s_ive_ip.e_profile != IV_PROFILE_MAIN)
1899*495ae853SAndroid Build Coastguard Worker {
1900*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1901*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_PROFILE_NOT_SUPPORTED;
1902*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1903*495ae853SAndroid Build Coastguard Worker }
1904*495ae853SAndroid Build Coastguard Worker
1905*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_entropy_coding_mode > 1)
1906*495ae853SAndroid Build Coastguard Worker {
1907*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
1908*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INVALID_ENTROPY_CODING_MODE;
1909*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1910*495ae853SAndroid Build Coastguard Worker }
1911*495ae853SAndroid Build Coastguard Worker
1912*495ae853SAndroid Build Coastguard Worker break;
1913*495ae853SAndroid Build Coastguard Worker }
1914*495ae853SAndroid Build Coastguard Worker default:
1915*495ae853SAndroid Build Coastguard Worker {
1916*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
1917*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_INVALID_API_SUB_CMD;
1918*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1919*495ae853SAndroid Build Coastguard Worker }
1920*495ae853SAndroid Build Coastguard Worker }
1921*495ae853SAndroid Build Coastguard Worker
1922*495ae853SAndroid Build Coastguard Worker break;
1923*495ae853SAndroid Build Coastguard Worker }
1924*495ae853SAndroid Build Coastguard Worker default:
1925*495ae853SAndroid Build Coastguard Worker {
1926*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVE_UNSUPPORTEDPARAM;
1927*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVE_ERR_INVALID_API_CMD;
1928*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1929*495ae853SAndroid Build Coastguard Worker }
1930*495ae853SAndroid Build Coastguard Worker }
1931*495ae853SAndroid Build Coastguard Worker
1932*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
1933*495ae853SAndroid Build Coastguard Worker }
1934*495ae853SAndroid Build Coastguard Worker
1935*495ae853SAndroid Build Coastguard Worker /**
1936*495ae853SAndroid Build Coastguard Worker *******************************************************************************
1937*495ae853SAndroid Build Coastguard Worker *
1938*495ae853SAndroid Build Coastguard Worker * @brief
1939*495ae853SAndroid Build Coastguard Worker * Sets default encoder config parameters
1940*495ae853SAndroid Build Coastguard Worker *
1941*495ae853SAndroid Build Coastguard Worker * @par Description:
1942*495ae853SAndroid Build Coastguard Worker * Sets default dynamic parameters. Will be called in isvce_init() to ensure
1943*495ae853SAndroid Build Coastguard Worker * that even if set_params is not called, codec continues to work
1944*495ae853SAndroid Build Coastguard Worker *
1945*495ae853SAndroid Build Coastguard Worker * @param[in] ps_cfg
1946*495ae853SAndroid Build Coastguard Worker * Pointer to encoder config params
1947*495ae853SAndroid Build Coastguard Worker *
1948*495ae853SAndroid Build Coastguard Worker * @returns error status
1949*495ae853SAndroid Build Coastguard Worker *
1950*495ae853SAndroid Build Coastguard Worker * @remarks none
1951*495ae853SAndroid Build Coastguard Worker *
1952*495ae853SAndroid Build Coastguard Worker *******************************************************************************
1953*495ae853SAndroid Build Coastguard Worker */
isvce_set_default_params(isvce_cfg_params_t * ps_cfg)1954*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_default_params(isvce_cfg_params_t *ps_cfg)
1955*495ae853SAndroid Build Coastguard Worker {
1956*495ae853SAndroid Build Coastguard Worker WORD32 ret = IV_SUCCESS;
1957*495ae853SAndroid Build Coastguard Worker WORD32 i;
1958*495ae853SAndroid Build Coastguard Worker
1959*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_wd = MAX_WD;
1960*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_ht = MAX_HT;
1961*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_ref_cnt = MAX_REF_CNT;
1962*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_reorder_cnt = MAX_REF_CNT;
1963*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_level = DEFAULT_MAX_LEVEL;
1964*495ae853SAndroid Build Coastguard Worker ps_cfg->e_inp_color_fmt = IV_YUV_420SP_UV;
1965*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_recon = DEFAULT_RECON_ENABLE;
1966*495ae853SAndroid Build Coastguard Worker ps_cfg->e_recon_color_fmt = IV_YUV_420P;
1967*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enc_speed_preset = IVE_FASTEST;
1968*495ae853SAndroid Build Coastguard Worker ps_cfg->e_rc_mode = DEFAULT_RC;
1969*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_framerate = DEFAULT_MAX_FRAMERATE;
1970*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_num_bframes = DEFAULT_MAX_NUM_BFRAMES;
1971*495ae853SAndroid Build Coastguard Worker ps_cfg->e_content_type = IV_PROGRESSIVE;
1972*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_srch_rng_x = DEFAULT_MAX_SRCH_RANGE_X;
1973*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_srch_rng_y = DEFAULT_MAX_SRCH_RANGE_Y;
1974*495ae853SAndroid Build Coastguard Worker ps_cfg->e_slice_mode = IVE_SLICE_MODE_NONE;
1975*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_slice_param = DEFAULT_SLICE_PARAM;
1976*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = isvce_default_arch();
1977*495ae853SAndroid Build Coastguard Worker ps_cfg->e_soc = SOC_GENERIC;
1978*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disp_wd = MAX_WD;
1979*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disp_ht = MAX_HT;
1980*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_wd = MAX_WD;
1981*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_ht = MAX_HT;
1982*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_src_frame_rate = DEFAULT_SRC_FRAME_RATE;
1983*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_tgt_frame_rate = DEFAULT_TGT_FRAME_RATE;
1984*495ae853SAndroid Build Coastguard Worker ps_cfg->e_frame_type = IV_NA_FRAME;
1985*495ae853SAndroid Build Coastguard Worker ps_cfg->e_enc_mode = IVE_ENC_MODE_DEFAULT;
1986*495ae853SAndroid Build Coastguard Worker ps_cfg->e_air_mode = DEFAULT_AIR_MODE;
1987*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_air_refresh_period = DEFAULT_AIR_REFRESH_PERIOD;
1988*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_num_cores = DEFAULT_NUM_CORES;
1989*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_me_speed_preset = DEFAULT_ME_SPEED_PRESET;
1990*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_hpel = DEFAULT_HPEL;
1991*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_qpel = DEFAULT_QPEL;
1992*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_intra_4x4 = DEFAULT_I4;
1993*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_intra_8x8 = DEFAULT_I8;
1994*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_intra_16x16 = DEFAULT_I16;
1995*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_fast_sad = DEFAULT_ENABLE_FAST_SAD;
1996*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_satqd = DEFAULT_ENABLE_SATQD;
1997*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_min_sad = (ps_cfg->u4_enable_satqd == DEFAULT_ENABLE_SATQD)
1998*495ae853SAndroid Build Coastguard Worker ? DEFAULT_MIN_SAD_ENABLE
1999*495ae853SAndroid Build Coastguard Worker : DEFAULT_MIN_SAD_DISABLE;
2000*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_srch_rng_x = DEFAULT_SRCH_RNG_X;
2001*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_srch_rng_y = DEFAULT_SRCH_RNG_Y;
2002*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_i_frm_interval = DEFAULT_I_INTERVAL;
2003*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_idr_frm_interval = DEFAULT_IDR_INTERVAL;
2004*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disable_deblock_level = DEFAULT_DISABLE_DEBLK_LEVEL;
2005*495ae853SAndroid Build Coastguard Worker ps_cfg->e_profile = DEFAULT_PROFILE;
2006*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = 0;
2007*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = 0;
2008*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_is_valid = 1;
2009*495ae853SAndroid Build Coastguard Worker ps_cfg->e_cmd = ISVCE_CMD_CT_NA;
2010*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_wd_mbs = ps_cfg->u4_max_wd >> 4;
2011*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_ht_mbs = ps_cfg->u4_max_ht >> 4;
2012*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_entropy_coding_mode = CAVLC;
2013*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_weighted_prediction = 0;
2014*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_pic_info_type = 0;
2015*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_isvce_mb_info_type = 0;
2016*495ae853SAndroid Build Coastguard Worker ps_cfg->s_vui.u1_video_signal_type_present_flag = 1;
2017*495ae853SAndroid Build Coastguard Worker ps_cfg->s_vui.u1_colour_description_present_flag = 1;
2018*495ae853SAndroid Build Coastguard Worker
2019*495ae853SAndroid Build Coastguard Worker ps_cfg->b_nalu_info_export_enable = false;
2020*495ae853SAndroid Build Coastguard Worker
2021*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_NUM_SPATIAL_LAYERS; i++)
2022*495ae853SAndroid Build Coastguard Worker {
2023*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_max[i] = MAX_H264_QP;
2024*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_min[i] = MIN_H264_QP;
2025*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp[i] = DEFAULT_I_QP;
2026*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_p_qp_max[i] = MAX_H264_QP;
2027*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_p_qp_min[i] = MIN_H264_QP;
2028*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_p_qp[i] = DEFAULT_P_QP;
2029*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_b_qp_max[i] = MAX_H264_QP;
2030*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_b_qp_min[i] = MIN_H264_QP;
2031*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_b_qp[i] = DEFAULT_B_QP;
2032*495ae853SAndroid Build Coastguard Worker }
2033*495ae853SAndroid Build Coastguard Worker
2034*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.d_spatial_res_ratio = 2.0;
2035*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.u1_num_spatial_layers = 1;
2036*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.u1_num_temporal_layers = 1;
2037*495ae853SAndroid Build Coastguard Worker
2038*495ae853SAndroid Build Coastguard Worker return ret;
2039*495ae853SAndroid Build Coastguard Worker }
2040*495ae853SAndroid Build Coastguard Worker
2041*495ae853SAndroid Build Coastguard Worker /**
2042*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2043*495ae853SAndroid Build Coastguard Worker *
2044*495ae853SAndroid Build Coastguard Worker * @brief
2045*495ae853SAndroid Build Coastguard Worker * Initialize encoder context. This will be called by init_mem_rec and during
2046*495ae853SAndroid Build Coastguard Worker * codec reset
2047*495ae853SAndroid Build Coastguard Worker *
2048*495ae853SAndroid Build Coastguard Worker * @par Description:
2049*495ae853SAndroid Build Coastguard Worker * Initializes the context
2050*495ae853SAndroid Build Coastguard Worker *
2051*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec
2052*495ae853SAndroid Build Coastguard Worker * Codec context pointer
2053*495ae853SAndroid Build Coastguard Worker *
2054*495ae853SAndroid Build Coastguard Worker * @returns error status
2055*495ae853SAndroid Build Coastguard Worker *
2056*495ae853SAndroid Build Coastguard Worker * @remarks none
2057*495ae853SAndroid Build Coastguard Worker *
2058*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2059*495ae853SAndroid Build Coastguard Worker */
isvce_init(isvce_codec_t * ps_codec)2060*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_init(isvce_codec_t *ps_codec)
2061*495ae853SAndroid Build Coastguard Worker {
2062*495ae853SAndroid Build Coastguard Worker /* enc config param set */
2063*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg = &(ps_codec->s_cfg);
2064*495ae853SAndroid Build Coastguard Worker
2065*495ae853SAndroid Build Coastguard Worker UWORD32 i;
2066*495ae853SAndroid Build Coastguard Worker
2067*495ae853SAndroid Build Coastguard Worker /* coded pic count */
2068*495ae853SAndroid Build Coastguard Worker ps_codec->i4_poc = 0;
2069*495ae853SAndroid Build Coastguard Worker
2070*495ae853SAndroid Build Coastguard Worker /* Number of API calls to encode are made */
2071*495ae853SAndroid Build Coastguard Worker ps_codec->i4_encode_api_call_cnt = -1;
2072*495ae853SAndroid Build Coastguard Worker
2073*495ae853SAndroid Build Coastguard Worker /* Indicates no header has been generated yet */
2074*495ae853SAndroid Build Coastguard Worker ps_codec->u4_header_generated = 0;
2075*495ae853SAndroid Build Coastguard Worker
2076*495ae853SAndroid Build Coastguard Worker /* Number of pictures encoded */
2077*495ae853SAndroid Build Coastguard Worker ps_codec->i4_pic_cnt = -1;
2078*495ae853SAndroid Build Coastguard Worker
2079*495ae853SAndroid Build Coastguard Worker /* Number of threads created */
2080*495ae853SAndroid Build Coastguard Worker ps_codec->i4_proc_thread_cnt = 0;
2081*495ae853SAndroid Build Coastguard Worker
2082*495ae853SAndroid Build Coastguard Worker /* ctl mutex init */
2083*495ae853SAndroid Build Coastguard Worker ithread_mutex_init(ps_codec->pv_ctl_mutex);
2084*495ae853SAndroid Build Coastguard Worker
2085*495ae853SAndroid Build Coastguard Worker /* Set encoder chroma format */
2086*495ae853SAndroid Build Coastguard Worker ps_codec->e_codec_color_format =
2087*495ae853SAndroid Build Coastguard Worker (ps_cfg->e_inp_color_fmt == IV_YUV_420SP_VU) ? IV_YUV_420SP_VU : IV_YUV_420SP_UV;
2088*495ae853SAndroid Build Coastguard Worker
2089*495ae853SAndroid Build Coastguard Worker /* Number of continuous frames where deblocking was disabled */
2090*495ae853SAndroid Build Coastguard Worker ps_codec->u4_disable_deblock_level_cnt = 0;
2091*495ae853SAndroid Build Coastguard Worker
2092*495ae853SAndroid Build Coastguard Worker /* frame num */
2093*495ae853SAndroid Build Coastguard Worker ps_codec->i4_frame_num = 0;
2094*495ae853SAndroid Build Coastguard Worker
2095*495ae853SAndroid Build Coastguard Worker /* set the current frame type to I frame, since we are going to start
2096*495ae853SAndroid Build Coastguard Worker * encoding*/
2097*495ae853SAndroid Build Coastguard Worker ps_codec->force_curr_frame_type = IV_NA_FRAME;
2098*495ae853SAndroid Build Coastguard Worker
2099*495ae853SAndroid Build Coastguard Worker /* idr_pic_id */
2100*495ae853SAndroid Build Coastguard Worker ps_codec->i4_idr_pic_id = -1;
2101*495ae853SAndroid Build Coastguard Worker
2102*495ae853SAndroid Build Coastguard Worker /* Flush mode */
2103*495ae853SAndroid Build Coastguard Worker ps_codec->i4_flush_mode = 0;
2104*495ae853SAndroid Build Coastguard Worker
2105*495ae853SAndroid Build Coastguard Worker /* Encode header mode */
2106*495ae853SAndroid Build Coastguard Worker ps_codec->i4_header_mode = 0;
2107*495ae853SAndroid Build Coastguard Worker
2108*495ae853SAndroid Build Coastguard Worker /* Encode generate header */
2109*495ae853SAndroid Build Coastguard Worker ps_codec->i4_gen_header = 0;
2110*495ae853SAndroid Build Coastguard Worker
2111*495ae853SAndroid Build Coastguard Worker /* To signal successful completion of init */
2112*495ae853SAndroid Build Coastguard Worker ps_codec->i4_init_done = 1;
2113*495ae853SAndroid Build Coastguard Worker
2114*495ae853SAndroid Build Coastguard Worker /* To signal that at least one picture was decoded */
2115*495ae853SAndroid Build Coastguard Worker ps_codec->i4_first_pic_done = 0;
2116*495ae853SAndroid Build Coastguard Worker
2117*495ae853SAndroid Build Coastguard Worker /* Reset Codec */
2118*495ae853SAndroid Build Coastguard Worker ps_codec->i4_reset_flag = 0;
2119*495ae853SAndroid Build Coastguard Worker
2120*495ae853SAndroid Build Coastguard Worker /* Current error code */
2121*495ae853SAndroid Build Coastguard Worker ps_codec->i4_error_code = IH264E_SUCCESS;
2122*495ae853SAndroid Build Coastguard Worker
2123*495ae853SAndroid Build Coastguard Worker /* threshold residue */
2124*495ae853SAndroid Build Coastguard Worker ps_codec->u4_thres_resi = 1;
2125*495ae853SAndroid Build Coastguard Worker
2126*495ae853SAndroid Build Coastguard Worker /* inter gating enable */
2127*495ae853SAndroid Build Coastguard Worker ps_codec->u4_inter_gate = 0;
2128*495ae853SAndroid Build Coastguard Worker
2129*495ae853SAndroid Build Coastguard Worker /* entropy mutex init */
2130*495ae853SAndroid Build Coastguard Worker ithread_mutex_init(ps_codec->pv_entropy_mutex);
2131*495ae853SAndroid Build Coastguard Worker
2132*495ae853SAndroid Build Coastguard Worker /* Process thread created status */
2133*495ae853SAndroid Build Coastguard Worker memset(ps_codec->ai4_process_thread_created, 0, sizeof(ps_codec->ai4_process_thread_created));
2134*495ae853SAndroid Build Coastguard Worker
2135*495ae853SAndroid Build Coastguard Worker /* Number of MBs processed together */
2136*495ae853SAndroid Build Coastguard Worker ps_codec->i4_proc_nmb = 8;
2137*495ae853SAndroid Build Coastguard Worker
2138*495ae853SAndroid Build Coastguard Worker /* Previous POC msb */
2139*495ae853SAndroid Build Coastguard Worker ps_codec->i4_prev_poc_msb = 0;
2140*495ae853SAndroid Build Coastguard Worker
2141*495ae853SAndroid Build Coastguard Worker /* Previous POC lsb */
2142*495ae853SAndroid Build Coastguard Worker ps_codec->i4_prev_poc_lsb = -1;
2143*495ae853SAndroid Build Coastguard Worker
2144*495ae853SAndroid Build Coastguard Worker /* max Previous POC lsb */
2145*495ae853SAndroid Build Coastguard Worker ps_codec->i4_max_prev_poc_lsb = -1;
2146*495ae853SAndroid Build Coastguard Worker
2147*495ae853SAndroid Build Coastguard Worker /* sps, pps status */
2148*495ae853SAndroid Build Coastguard Worker {
2149*495ae853SAndroid Build Coastguard Worker sps_t *ps_sps = ps_codec->ps_sps_base;
2150*495ae853SAndroid Build Coastguard Worker pps_t *ps_pps = ps_codec->ps_pps_base;
2151*495ae853SAndroid Build Coastguard Worker
2152*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_SPS_CNT; i++)
2153*495ae853SAndroid Build Coastguard Worker {
2154*495ae853SAndroid Build Coastguard Worker ps_sps->i1_sps_valid = 0;
2155*495ae853SAndroid Build Coastguard Worker ps_sps++;
2156*495ae853SAndroid Build Coastguard Worker }
2157*495ae853SAndroid Build Coastguard Worker
2158*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PPS_CNT; i++)
2159*495ae853SAndroid Build Coastguard Worker {
2160*495ae853SAndroid Build Coastguard Worker ps_pps->i1_pps_valid = 0;
2161*495ae853SAndroid Build Coastguard Worker ps_pps++;
2162*495ae853SAndroid Build Coastguard Worker }
2163*495ae853SAndroid Build Coastguard Worker }
2164*495ae853SAndroid Build Coastguard Worker
2165*495ae853SAndroid Build Coastguard Worker {
2166*495ae853SAndroid Build Coastguard Worker WORD32 max_mb_rows;
2167*495ae853SAndroid Build Coastguard Worker UWORD32 u4_ht, u4_wd;
2168*495ae853SAndroid Build Coastguard Worker
2169*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(ps_cfg->s_svc_params.u1_num_spatial_layers,
2170*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.d_spatial_res_ratio, ps_cfg->u4_wd,
2171*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_ht, &u4_wd, &u4_ht);
2172*495ae853SAndroid Build Coastguard Worker
2173*495ae853SAndroid Build Coastguard Worker /* frame dimensions */
2174*495ae853SAndroid Build Coastguard Worker u4_ht = ALIGN16(u4_ht);
2175*495ae853SAndroid Build Coastguard Worker max_mb_rows = u4_ht / MB_SIZE;
2176*495ae853SAndroid Build Coastguard Worker
2177*495ae853SAndroid Build Coastguard Worker {
2178*495ae853SAndroid Build Coastguard Worker WORD32 clz;
2179*495ae853SAndroid Build Coastguard Worker
2180*495ae853SAndroid Build Coastguard Worker WORD32 num_jobs = max_mb_rows * MAX_CTXT_SETS;
2181*495ae853SAndroid Build Coastguard Worker
2182*495ae853SAndroid Build Coastguard Worker /* Use next power of two number of entries*/
2183*495ae853SAndroid Build Coastguard Worker clz = CLZ(num_jobs);
2184*495ae853SAndroid Build Coastguard Worker num_jobs = 1 << (32 - clz);
2185*495ae853SAndroid Build Coastguard Worker
2186*495ae853SAndroid Build Coastguard Worker /* init process jobq */
2187*495ae853SAndroid Build Coastguard Worker ps_codec->pv_proc_jobq =
2188*495ae853SAndroid Build Coastguard Worker ih264_list_init(ps_codec->pv_proc_jobq_buf, ps_codec->i4_proc_jobq_buf_size,
2189*495ae853SAndroid Build Coastguard Worker num_jobs, sizeof(job_t), 10);
2190*495ae853SAndroid Build Coastguard Worker RETURN_IF((ps_codec->pv_proc_jobq == NULL), IV_FAIL);
2191*495ae853SAndroid Build Coastguard Worker ih264_list_reset(ps_codec->pv_proc_jobq);
2192*495ae853SAndroid Build Coastguard Worker
2193*495ae853SAndroid Build Coastguard Worker /* init entropy jobq */
2194*495ae853SAndroid Build Coastguard Worker ps_codec->pv_entropy_jobq =
2195*495ae853SAndroid Build Coastguard Worker ih264_list_init(ps_codec->pv_entropy_jobq_buf, ps_codec->i4_entropy_jobq_buf_size,
2196*495ae853SAndroid Build Coastguard Worker num_jobs, sizeof(job_t), 10);
2197*495ae853SAndroid Build Coastguard Worker RETURN_IF((ps_codec->pv_entropy_jobq == NULL), IV_FAIL);
2198*495ae853SAndroid Build Coastguard Worker ih264_list_reset(ps_codec->pv_entropy_jobq);
2199*495ae853SAndroid Build Coastguard Worker }
2200*495ae853SAndroid Build Coastguard Worker }
2201*495ae853SAndroid Build Coastguard Worker
2202*495ae853SAndroid Build Coastguard Worker /* Update the jobq context to all the threads */
2203*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
2204*495ae853SAndroid Build Coastguard Worker {
2205*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pv_proc_jobq = ps_codec->pv_proc_jobq;
2206*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pv_entropy_jobq = ps_codec->pv_entropy_jobq;
2207*495ae853SAndroid Build Coastguard Worker
2208*495ae853SAndroid Build Coastguard Worker /* i4_id always stays between 0 and MAX_PROCESS_THREADS */
2209*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].i4_id = i % MAX_PROCESS_THREADS;
2210*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_codec = ps_codec;
2211*495ae853SAndroid Build Coastguard Worker
2212*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pv_proc_jobq = ps_codec->pv_proc_jobq;
2213*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pv_entropy_jobq = ps_codec->pv_entropy_jobq;
2214*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.i4_abs_pic_order_cnt = -1;
2215*495ae853SAndroid Build Coastguard Worker }
2216*495ae853SAndroid Build Coastguard Worker
2217*495ae853SAndroid Build Coastguard Worker /* Initialize MV Bank buffer manager */
2218*495ae853SAndroid Build Coastguard Worker ps_codec->pv_svc_au_data_store_mgr =
2219*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_init(ps_codec->pv_svc_au_data_store_mgr_base);
2220*495ae853SAndroid Build Coastguard Worker
2221*495ae853SAndroid Build Coastguard Worker /* Initialize Picture buffer manager for reference buffers*/
2222*495ae853SAndroid Build Coastguard Worker ps_codec->pv_ref_buf_mgr = ih264_buf_mgr_init(ps_codec->pv_ref_buf_mgr_base);
2223*495ae853SAndroid Build Coastguard Worker
2224*495ae853SAndroid Build Coastguard Worker /* Initialize Picture buffer manager for input buffers*/
2225*495ae853SAndroid Build Coastguard Worker ps_codec->pv_inp_buf_mgr = ih264_buf_mgr_init(ps_codec->pv_inp_buf_mgr_base);
2226*495ae853SAndroid Build Coastguard Worker
2227*495ae853SAndroid Build Coastguard Worker /* Initialize buffer manager for output buffers*/
2228*495ae853SAndroid Build Coastguard Worker ps_codec->pv_out_buf_mgr = ih264_buf_mgr_init(ps_codec->pv_out_buf_mgr_base);
2229*495ae853SAndroid Build Coastguard Worker
2230*495ae853SAndroid Build Coastguard Worker /* buffer cnt in buffer manager */
2231*495ae853SAndroid Build Coastguard Worker ps_codec->i4_inp_buf_cnt = 0;
2232*495ae853SAndroid Build Coastguard Worker ps_codec->i4_out_buf_cnt = 0;
2233*495ae853SAndroid Build Coastguard Worker ps_codec->i4_ref_buf_cnt = 0;
2234*495ae853SAndroid Build Coastguard Worker
2235*495ae853SAndroid Build Coastguard Worker ps_codec->ps_pic_buf = ps_codec->ps_pic_buf_base;
2236*495ae853SAndroid Build Coastguard Worker memset(ps_codec->ps_pic_buf, 0, BUF_MGR_MAX_CNT * sizeof(svc_au_buf_t));
2237*495ae853SAndroid Build Coastguard Worker
2238*495ae853SAndroid Build Coastguard Worker for(i = 0; i < BUF_MGR_MAX_CNT; i++)
2239*495ae853SAndroid Build Coastguard Worker {
2240*495ae853SAndroid Build Coastguard Worker isvce_svc_au_buf_init(&((svc_au_buf_t *) ps_codec->ps_pic_buf)[i], &ps_cfg->s_svc_params);
2241*495ae853SAndroid Build Coastguard Worker }
2242*495ae853SAndroid Build Coastguard Worker
2243*495ae853SAndroid Build Coastguard Worker /* Initialize dpb manager */
2244*495ae853SAndroid Build Coastguard Worker ih264_dpb_mgr_init((dpb_mgr_t *) ps_codec->pv_dpb_mgr);
2245*495ae853SAndroid Build Coastguard Worker
2246*495ae853SAndroid Build Coastguard Worker memset(ps_codec->as_ref_set, 0, sizeof(ps_codec->as_ref_set));
2247*495ae853SAndroid Build Coastguard Worker for(i = 0; i < (sizeof(ps_codec->as_ref_set) / sizeof(ps_codec->as_ref_set[0])); i++)
2248*495ae853SAndroid Build Coastguard Worker {
2249*495ae853SAndroid Build Coastguard Worker ps_codec->as_ref_set[i].i4_pic_cnt = -1;
2250*495ae853SAndroid Build Coastguard Worker }
2251*495ae853SAndroid Build Coastguard Worker
2252*495ae853SAndroid Build Coastguard Worker /* fn ptr init */
2253*495ae853SAndroid Build Coastguard Worker isvce_init_function_ptr(ps_codec);
2254*495ae853SAndroid Build Coastguard Worker
2255*495ae853SAndroid Build Coastguard Worker /* reset status flags */
2256*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_CTXT_SETS; i++)
2257*495ae853SAndroid Build Coastguard Worker {
2258*495ae853SAndroid Build Coastguard Worker ps_codec->ae_entropy_thread_exit_state[i] = INACTIVE;
2259*495ae853SAndroid Build Coastguard Worker ps_codec->ai4_pic_cnt[i] = -1;
2260*495ae853SAndroid Build Coastguard Worker
2261*495ae853SAndroid Build Coastguard Worker ps_codec->s_rate_control.pre_encode_skip[i] = 0;
2262*495ae853SAndroid Build Coastguard Worker ps_codec->s_rate_control.post_encode_skip[i] = 0;
2263*495ae853SAndroid Build Coastguard Worker }
2264*495ae853SAndroid Build Coastguard Worker
2265*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_cfg->s_svc_params.u1_num_spatial_layers; i++)
2266*495ae853SAndroid Build Coastguard Worker {
2267*495ae853SAndroid Build Coastguard Worker ps_codec->s_rate_control.ai4_num_intra_in_prev_frame[i] = 0;
2268*495ae853SAndroid Build Coastguard Worker ps_codec->s_rate_control.ai4_avg_activity[i] = 0;
2269*495ae853SAndroid Build Coastguard Worker }
2270*495ae853SAndroid Build Coastguard Worker
2271*495ae853SAndroid Build Coastguard Worker ps_codec->i4_max_num_reference_frames =
2272*495ae853SAndroid Build Coastguard Worker MIN((gas_ih264_lvl_tbl[ih264e_get_lvl_idx(ps_codec->s_cfg.u4_max_level)].u4_max_dpb_size /
2273*495ae853SAndroid Build Coastguard Worker (ps_codec->s_cfg.i4_wd_mbs * ps_codec->s_cfg.i4_ht_mbs)),
2274*495ae853SAndroid Build Coastguard Worker 16);
2275*495ae853SAndroid Build Coastguard Worker
2276*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2277*495ae853SAndroid Build Coastguard Worker }
2278*495ae853SAndroid Build Coastguard Worker
2279*495ae853SAndroid Build Coastguard Worker /**
2280*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2281*495ae853SAndroid Build Coastguard Worker *
2282*495ae853SAndroid Build Coastguard Worker * @brief
2283*495ae853SAndroid Build Coastguard Worker * Gets number of memory records required by the codec
2284*495ae853SAndroid Build Coastguard Worker *
2285*495ae853SAndroid Build Coastguard Worker * @par Description:
2286*495ae853SAndroid Build Coastguard Worker * Gets codec memory requirements
2287*495ae853SAndroid Build Coastguard Worker *
2288*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
2289*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
2290*495ae853SAndroid Build Coastguard Worker *
2291*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
2292*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
2293*495ae853SAndroid Build Coastguard Worker *
2294*495ae853SAndroid Build Coastguard Worker * @returns status
2295*495ae853SAndroid Build Coastguard Worker *
2296*495ae853SAndroid Build Coastguard Worker * @remarks
2297*495ae853SAndroid Build Coastguard Worker *
2298*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2299*495ae853SAndroid Build Coastguard Worker */
isvce_get_num_rec(void * pv_api_ip,void * pv_api_op)2300*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_get_num_rec(void *pv_api_ip, void *pv_api_op)
2301*495ae853SAndroid Build Coastguard Worker {
2302*495ae853SAndroid Build Coastguard Worker /* api call I/O structures */
2303*495ae853SAndroid Build Coastguard Worker isvce_num_mem_rec_op_t *ps_op = pv_api_op;
2304*495ae853SAndroid Build Coastguard Worker
2305*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
2306*495ae853SAndroid Build Coastguard Worker
2307*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_num_mem_rec = ISVCE_MEM_REC_CNT;
2308*495ae853SAndroid Build Coastguard Worker
2309*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2310*495ae853SAndroid Build Coastguard Worker }
2311*495ae853SAndroid Build Coastguard Worker
2312*495ae853SAndroid Build Coastguard Worker /**
2313*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2314*495ae853SAndroid Build Coastguard Worker *
2315*495ae853SAndroid Build Coastguard Worker * @brief
2316*495ae853SAndroid Build Coastguard Worker * Fills memory records of the codec
2317*495ae853SAndroid Build Coastguard Worker *
2318*495ae853SAndroid Build Coastguard Worker * @par Description:
2319*495ae853SAndroid Build Coastguard Worker * Fills codec memory requirements
2320*495ae853SAndroid Build Coastguard Worker *
2321*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
2322*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
2323*495ae853SAndroid Build Coastguard Worker *
2324*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
2325*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
2326*495ae853SAndroid Build Coastguard Worker *
2327*495ae853SAndroid Build Coastguard Worker * @returns error status
2328*495ae853SAndroid Build Coastguard Worker *
2329*495ae853SAndroid Build Coastguard Worker * @remarks none
2330*495ae853SAndroid Build Coastguard Worker *
2331*495ae853SAndroid Build Coastguard Worker *******************************************************************************
2332*495ae853SAndroid Build Coastguard Worker */
isvce_fill_num_mem_rec(void * pv_api_ip,void * pv_api_op)2333*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_fill_num_mem_rec(void *pv_api_ip, void *pv_api_op)
2334*495ae853SAndroid Build Coastguard Worker {
2335*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_ip_t *ps_ip = pv_api_ip;
2336*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_op_t *ps_op = pv_api_op;
2337*495ae853SAndroid Build Coastguard Worker
2338*495ae853SAndroid Build Coastguard Worker WORD32 level;
2339*495ae853SAndroid Build Coastguard Worker WORD32 num_reorder_frames;
2340*495ae853SAndroid Build Coastguard Worker WORD32 num_ref_frames;
2341*495ae853SAndroid Build Coastguard Worker
2342*495ae853SAndroid Build Coastguard Worker WORD32 no_of_mem_rec;
2343*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec_base, *ps_mem_rec;
2344*495ae853SAndroid Build Coastguard Worker
2345*495ae853SAndroid Build Coastguard Worker WORD32 max_wd_luma, max_ht_luma;
2346*495ae853SAndroid Build Coastguard Worker WORD32 max_mb_rows, max_mb_cols, max_mb_cnt;
2347*495ae853SAndroid Build Coastguard Worker UWORD32 u4_wd, u4_ht;
2348*495ae853SAndroid Build Coastguard Worker
2349*495ae853SAndroid Build Coastguard Worker WORD32 i;
2350*495ae853SAndroid Build Coastguard Worker
2351*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status = IV_SUCCESS;
2352*495ae853SAndroid Build Coastguard Worker
2353*495ae853SAndroid Build Coastguard Worker num_reorder_frames = ps_ip->s_ive_ip.u4_max_reorder_cnt;
2354*495ae853SAndroid Build Coastguard Worker num_ref_frames = ps_ip->s_ive_ip.u4_max_ref_cnt;
2355*495ae853SAndroid Build Coastguard Worker
2356*495ae853SAndroid Build Coastguard Worker ps_mem_rec_base = ps_ip->s_ive_ip.ps_mem_rec;
2357*495ae853SAndroid Build Coastguard Worker no_of_mem_rec = ps_ip->s_ive_ip.u4_num_mem_rec;
2358*495ae853SAndroid Build Coastguard Worker
2359*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(ps_ip->s_svc_inp_params.u1_num_spatial_layers,
2360*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, ps_ip->u4_wd,
2361*495ae853SAndroid Build Coastguard Worker ps_ip->u4_ht, &u4_wd, &u4_ht);
2362*495ae853SAndroid Build Coastguard Worker
2363*495ae853SAndroid Build Coastguard Worker /* frame dimensions */
2364*495ae853SAndroid Build Coastguard Worker max_ht_luma = ALIGN16(u4_ht);
2365*495ae853SAndroid Build Coastguard Worker max_wd_luma = ALIGN16(u4_wd);
2366*495ae853SAndroid Build Coastguard Worker max_mb_rows = max_ht_luma / MB_SIZE;
2367*495ae853SAndroid Build Coastguard Worker max_mb_cols = max_wd_luma / MB_SIZE;
2368*495ae853SAndroid Build Coastguard Worker max_mb_cnt = max_mb_rows * max_mb_cols;
2369*495ae853SAndroid Build Coastguard Worker
2370*495ae853SAndroid Build Coastguard Worker /* profile / level info */
2371*495ae853SAndroid Build Coastguard Worker level = ih264e_get_min_level(max_ht_luma, max_wd_luma);
2372*495ae853SAndroid Build Coastguard Worker
2373*495ae853SAndroid Build Coastguard Worker /* Validate params */
2374*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= isvce_svc_au_props_validate(
2375*495ae853SAndroid Build Coastguard Worker &ps_ip->s_svc_inp_params, ps_ip->u4_wd, ps_ip->u4_ht, u4_wd, u4_ht);
2376*495ae853SAndroid Build Coastguard Worker
2377*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_error_code != IV_SUCCESS)
2378*495ae853SAndroid Build Coastguard Worker {
2379*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
2380*495ae853SAndroid Build Coastguard Worker }
2381*495ae853SAndroid Build Coastguard Worker
2382*495ae853SAndroid Build Coastguard Worker if((level < MIN_LEVEL) || (level > MAX_LEVEL))
2383*495ae853SAndroid Build Coastguard Worker {
2384*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_CODEC_LEVEL_NOT_SUPPORTED;
2385*495ae853SAndroid Build Coastguard Worker level = MAX_LEVEL;
2386*495ae853SAndroid Build Coastguard Worker }
2387*495ae853SAndroid Build Coastguard Worker
2388*495ae853SAndroid Build Coastguard Worker if(num_ref_frames > MAX_REF_CNT)
2389*495ae853SAndroid Build Coastguard Worker {
2390*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REF_UNSUPPORTED;
2391*495ae853SAndroid Build Coastguard Worker num_ref_frames = MAX_REF_CNT;
2392*495ae853SAndroid Build Coastguard Worker }
2393*495ae853SAndroid Build Coastguard Worker
2394*495ae853SAndroid Build Coastguard Worker if(num_reorder_frames > MAX_REF_CNT)
2395*495ae853SAndroid Build Coastguard Worker {
2396*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REORDER_UNSUPPORTED;
2397*495ae853SAndroid Build Coastguard Worker num_reorder_frames = MAX_REF_CNT;
2398*495ae853SAndroid Build Coastguard Worker }
2399*495ae853SAndroid Build Coastguard Worker
2400*495ae853SAndroid Build Coastguard Worker /* Set all memory records as persistent and alignment as 128 by default */
2401*495ae853SAndroid Build Coastguard Worker ps_mem_rec = ps_mem_rec_base;
2402*495ae853SAndroid Build Coastguard Worker for(i = 0; i < no_of_mem_rec; i++)
2403*495ae853SAndroid Build Coastguard Worker {
2404*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_alignment = 128;
2405*495ae853SAndroid Build Coastguard Worker ps_mem_rec->e_mem_type = IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM;
2406*495ae853SAndroid Build Coastguard Worker ps_mem_rec++;
2407*495ae853SAndroid Build Coastguard Worker }
2408*495ae853SAndroid Build Coastguard Worker
2409*495ae853SAndroid Build Coastguard Worker /************************************************************************
2410*495ae853SAndroid Build Coastguard Worker * Request memory for h264 encoder handle *
2411*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2412*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_IV_OBJ];
2413*495ae853SAndroid Build Coastguard Worker {
2414*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = sizeof(iv_obj_t);
2415*495ae853SAndroid Build Coastguard Worker }
2416*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_IV_OBJ, ps_mem_rec->u4_mem_size);
2417*495ae853SAndroid Build Coastguard Worker
2418*495ae853SAndroid Build Coastguard Worker /************************************************************************
2419*495ae853SAndroid Build Coastguard Worker * Request memory for h264 encoder context *
2420*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2421*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CODEC];
2422*495ae853SAndroid Build Coastguard Worker {
2423*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = sizeof(isvce_codec_t);
2424*495ae853SAndroid Build Coastguard Worker }
2425*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_CODEC, ps_mem_rec->u4_mem_size);
2426*495ae853SAndroid Build Coastguard Worker
2427*495ae853SAndroid Build Coastguard Worker /************************************************************************
2428*495ae853SAndroid Build Coastguard Worker * Request memory for CABAC context *
2429*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2430*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CABAC];
2431*495ae853SAndroid Build Coastguard Worker {
2432*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = sizeof(isvce_cabac_ctxt_t);
2433*495ae853SAndroid Build Coastguard Worker }
2434*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_CABAC, ps_mem_rec->u4_mem_size);
2435*495ae853SAndroid Build Coastguard Worker
2436*495ae853SAndroid Build Coastguard Worker /************************************************************************
2437*495ae853SAndroid Build Coastguard Worker * Request memory for CABAC MB info *
2438*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2439*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CABAC_MB_INFO];
2440*495ae853SAndroid Build Coastguard Worker {
2441*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ((max_mb_cols + 1) + 1) * sizeof(isvce_mb_info_ctxt_t);
2442*495ae853SAndroid Build Coastguard Worker }
2443*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_CABAC_MB_INFO, ps_mem_rec->u4_mem_size);
2444*495ae853SAndroid Build Coastguard Worker
2445*495ae853SAndroid Build Coastguard Worker /************************************************************************
2446*495ae853SAndroid Build Coastguard Worker * Request memory for entropy context *
2447*495ae853SAndroid Build Coastguard Worker * In multi core encoding, each row is assumed to be launched on a *
2448*495ae853SAndroid Build Coastguard Worker * thread. The rows below can only start after its neighbors are coded *
2449*495ae853SAndroid Build Coastguard Worker * The status of an mb coded/uncoded is signaled via entropy map. *
2450*495ae853SAndroid Build Coastguard Worker * 1. One word32 to store skip run cnt *
2451*495ae853SAndroid Build Coastguard Worker * 2. mb entropy map (mb status entropy coded/uncoded). The size*
2452*495ae853SAndroid Build Coastguard Worker * of the entropy map is max mb cols. Further allocate one *
2453*495ae853SAndroid Build Coastguard Worker * more additional row to evade checking for row -1. *
2454*495ae853SAndroid Build Coastguard Worker * 3. size of bit stream buffer to store bit stream ctxt. *
2455*495ae853SAndroid Build Coastguard Worker * 4. Entropy coding is dependent on nnz coefficient count for *
2456*495ae853SAndroid Build Coastguard Worker * the neighbor blocks. It is sufficient to maintain one row *
2457*495ae853SAndroid Build Coastguard Worker * worth of nnz as entropy for lower row waits on entropy map*
2458*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2459*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY];
2460*495ae853SAndroid Build Coastguard Worker {
2461*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2462*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2463*495ae853SAndroid Build Coastguard Worker
2464*495ae853SAndroid Build Coastguard Worker /* size of skip mb run */
2465*495ae853SAndroid Build Coastguard Worker total_size += sizeof(WORD32);
2466*495ae853SAndroid Build Coastguard Worker total_size = ALIGN8(total_size);
2467*495ae853SAndroid Build Coastguard Worker
2468*495ae853SAndroid Build Coastguard Worker /* size in bytes to store entropy status of an entire frame */
2469*495ae853SAndroid Build Coastguard Worker total_size += (max_mb_cols * max_mb_rows);
2470*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0 */
2471*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cols;
2472*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2473*495ae853SAndroid Build Coastguard Worker
2474*495ae853SAndroid Build Coastguard Worker /* size of bit stream buffer */
2475*495ae853SAndroid Build Coastguard Worker total_size += sizeof(bitstrm_t);
2476*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2477*495ae853SAndroid Build Coastguard Worker
2478*495ae853SAndroid Build Coastguard Worker #if ENABLE_RE_ENC_AS_SKIP
2479*495ae853SAndroid Build Coastguard Worker total_size += sizeof(bitstrm_t);
2480*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2481*495ae853SAndroid Build Coastguard Worker #endif
2482*495ae853SAndroid Build Coastguard Worker
2483*495ae853SAndroid Build Coastguard Worker /* top nnz luma */
2484*495ae853SAndroid Build Coastguard Worker total_size += (max_mb_cols * 4 * sizeof(UWORD8));
2485*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2486*495ae853SAndroid Build Coastguard Worker
2487*495ae853SAndroid Build Coastguard Worker /* top nnz cbcr */
2488*495ae853SAndroid Build Coastguard Worker total_size += (max_mb_cols * 4 * sizeof(UWORD8));
2489*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2490*495ae853SAndroid Build Coastguard Worker
2491*495ae853SAndroid Build Coastguard Worker /* ps_mb_qp_ctxt */
2492*495ae853SAndroid Build Coastguard Worker total_size += ALIGN128(sizeof(mb_qp_ctxt_t));
2493*495ae853SAndroid Build Coastguard Worker
2494*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
2495*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2496*495ae853SAndroid Build Coastguard Worker
2497*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2498*495ae853SAndroid Build Coastguard Worker }
2499*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_ENTROPY, ps_mem_rec->u4_mem_size);
2500*495ae853SAndroid Build Coastguard Worker
2501*495ae853SAndroid Build Coastguard Worker /************************************************************************
2502*495ae853SAndroid Build Coastguard Worker * The residue coefficients that needs to be entropy coded are packed *
2503*495ae853SAndroid Build Coastguard Worker * at a buffer space by the proc threads. The entropy thread shall *
2504*495ae853SAndroid Build Coastguard Worker * read from the buffer space, unpack them and encode the same. The *
2505*495ae853SAndroid Build Coastguard Worker * buffer space required to pack a row of mbs are as follows. *
2506*495ae853SAndroid Build Coastguard Worker * Assuming transform_8x8_flag is disabled, *
2507*495ae853SAndroid Build Coastguard Worker * In the worst case, 1 mb contains 1 dc 4x4 luma sub block, followed *
2508*495ae853SAndroid Build Coastguard Worker * by 16 ac 4x4 luma sub blocks, 2 dc chroma 2x2 sub blocks, followed *
2509*495ae853SAndroid Build Coastguard Worker * by 8 ac 4x4 chroma sub blocks. *
2510*495ae853SAndroid Build Coastguard Worker * For the sake of simplicity we assume that all sub blocks are of *
2511*495ae853SAndroid Build Coastguard Worker * type 4x4. The packing of each 4x4 is depicted by the structure *
2512*495ae853SAndroid Build Coastguard Worker * tu_sblk_coeff_data_t *
2513*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2514*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_COEFF_DATA];
2515*495ae853SAndroid Build Coastguard Worker {
2516*495ae853SAndroid Build Coastguard Worker /* temp var */
2517*495ae853SAndroid Build Coastguard Worker WORD32 size = 0;
2518*495ae853SAndroid Build Coastguard Worker
2519*495ae853SAndroid Build Coastguard Worker /* size of coeff data of 1 mb */
2520*495ae853SAndroid Build Coastguard Worker size += sizeof(tu_sblk_coeff_data_t) * MAX_4x4_SUBBLKS;
2521*495ae853SAndroid Build Coastguard Worker
2522*495ae853SAndroid Build Coastguard Worker /* size of coeff data of 1 row of mb's */
2523*495ae853SAndroid Build Coastguard Worker size *= max_mb_cols;
2524*495ae853SAndroid Build Coastguard Worker
2525*495ae853SAndroid Build Coastguard Worker /* align to avoid any false sharing across threads */
2526*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
2527*495ae853SAndroid Build Coastguard Worker
2528*495ae853SAndroid Build Coastguard Worker /* size for one full frame */
2529*495ae853SAndroid Build Coastguard Worker size *= max_mb_rows;
2530*495ae853SAndroid Build Coastguard Worker
2531*495ae853SAndroid Build Coastguard Worker /* size of each proc buffer set (ping, pong) */
2532*495ae853SAndroid Build Coastguard Worker size *= MAX_CTXT_SETS;
2533*495ae853SAndroid Build Coastguard Worker
2534*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = size;
2535*495ae853SAndroid Build Coastguard Worker }
2536*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_MB_COEFF_DATA, ps_mem_rec->u4_mem_size);
2537*495ae853SAndroid Build Coastguard Worker
2538*495ae853SAndroid Build Coastguard Worker /************************************************************************
2539*495ae853SAndroid Build Coastguard Worker * while encoding an mb, the mb header data is signaled to the entropy*
2540*495ae853SAndroid Build Coastguard Worker * thread by writing to a buffer space. the size of header data per mb *
2541*495ae853SAndroid Build Coastguard Worker * is assumed to be 40 bytes *
2542*495ae853SAndroid Build Coastguard Worker * TODO: revisit this inference *
2543*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2544*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_HEADER_DATA];
2545*495ae853SAndroid Build Coastguard Worker {
2546*495ae853SAndroid Build Coastguard Worker /* temp var */
2547*495ae853SAndroid Build Coastguard Worker WORD32 size;
2548*495ae853SAndroid Build Coastguard Worker
2549*495ae853SAndroid Build Coastguard Worker /* size per MB */
2550*495ae853SAndroid Build Coastguard Worker size = sizeof(isvce_mb_hdr_t);
2551*495ae853SAndroid Build Coastguard Worker
2552*495ae853SAndroid Build Coastguard Worker /* size for 1 row of mbs */
2553*495ae853SAndroid Build Coastguard Worker size = size * max_mb_cols;
2554*495ae853SAndroid Build Coastguard Worker
2555*495ae853SAndroid Build Coastguard Worker /* align to avoid any false sharing across threads */
2556*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
2557*495ae853SAndroid Build Coastguard Worker
2558*495ae853SAndroid Build Coastguard Worker /* size for one full frame */
2559*495ae853SAndroid Build Coastguard Worker size *= max_mb_rows;
2560*495ae853SAndroid Build Coastguard Worker
2561*495ae853SAndroid Build Coastguard Worker /* size of each proc buffer set (ping, pong) */
2562*495ae853SAndroid Build Coastguard Worker size *= MAX_CTXT_SETS;
2563*495ae853SAndroid Build Coastguard Worker
2564*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = size;
2565*495ae853SAndroid Build Coastguard Worker }
2566*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_MB_HEADER_DATA, ps_mem_rec->u4_mem_size);
2567*495ae853SAndroid Build Coastguard Worker
2568*495ae853SAndroid Build Coastguard Worker /************************************************************************
2569*495ae853SAndroid Build Coastguard Worker * While encoding inter slices, to compute the cost of encoding an mb *
2570*495ae853SAndroid Build Coastguard Worker * with the mv's at hand, we employ the expression cost = sad + lambda *
2571*495ae853SAndroid Build Coastguard Worker * x mv_bits. Here mv_bits is the total number of bits taken to represe*
2572*495ae853SAndroid Build Coastguard Worker * nt the mv in the stream. The mv bits for all the possible mv are *
2573*495ae853SAndroid Build Coastguard Worker * stored in the look up table. The mem record for this look up table *
2574*495ae853SAndroid Build Coastguard Worker * is given below. *
2575*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2576*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MVBITS];
2577*495ae853SAndroid Build Coastguard Worker {
2578*495ae853SAndroid Build Coastguard Worker /* max srch range x */
2579*495ae853SAndroid Build Coastguard Worker UWORD32 u4_srch_range_x = ps_ip->s_ive_ip.u4_max_srch_rng_x;
2580*495ae853SAndroid Build Coastguard Worker
2581*495ae853SAndroid Build Coastguard Worker /* max srch range y */
2582*495ae853SAndroid Build Coastguard Worker UWORD32 u4_srch_range_y = ps_ip->s_ive_ip.u4_max_srch_rng_y;
2583*495ae853SAndroid Build Coastguard Worker
2584*495ae853SAndroid Build Coastguard Worker /* max srch range */
2585*495ae853SAndroid Build Coastguard Worker UWORD32 u4_max_srch_range = MAX(u4_srch_range_x, u4_srch_range_y);
2586*495ae853SAndroid Build Coastguard Worker
2587*495ae853SAndroid Build Coastguard Worker /* due to subpel */
2588*495ae853SAndroid Build Coastguard Worker u4_max_srch_range <<= 2;
2589*495ae853SAndroid Build Coastguard Worker
2590*495ae853SAndroid Build Coastguard Worker /* due to mv on either direction */
2591*495ae853SAndroid Build Coastguard Worker u4_max_srch_range = (u4_max_srch_range << 1);
2592*495ae853SAndroid Build Coastguard Worker
2593*495ae853SAndroid Build Coastguard Worker /* due to pred mv + zero */
2594*495ae853SAndroid Build Coastguard Worker u4_max_srch_range = (u4_max_srch_range << 1) + 1;
2595*495ae853SAndroid Build Coastguard Worker
2596*495ae853SAndroid Build Coastguard Worker u4_max_srch_range = ALIGN128(u4_max_srch_range);
2597*495ae853SAndroid Build Coastguard Worker
2598*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = u4_max_srch_range;
2599*495ae853SAndroid Build Coastguard Worker }
2600*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_MVBITS, ps_mem_rec->u4_mem_size);
2601*495ae853SAndroid Build Coastguard Worker
2602*495ae853SAndroid Build Coastguard Worker /************************************************************************
2603*495ae853SAndroid Build Coastguard Worker * Request memory for SPS *
2604*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2605*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SPS];
2606*495ae853SAndroid Build Coastguard Worker {
2607*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = MAX_SPS_CNT * sizeof(sps_t);
2608*495ae853SAndroid Build Coastguard Worker }
2609*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SPS, ps_mem_rec->u4_mem_size);
2610*495ae853SAndroid Build Coastguard Worker
2611*495ae853SAndroid Build Coastguard Worker /************************************************************************
2612*495ae853SAndroid Build Coastguard Worker * Request memory for PPS *
2613*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2614*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PPS];
2615*495ae853SAndroid Build Coastguard Worker {
2616*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = MAX_PPS_CNT * sizeof(pps_t);
2617*495ae853SAndroid Build Coastguard Worker }
2618*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_PPS, ps_mem_rec->u4_mem_size);
2619*495ae853SAndroid Build Coastguard Worker
2620*495ae853SAndroid Build Coastguard Worker /************************************************************************
2621*495ae853SAndroid Build Coastguard Worker * Request memory for SVC NALU Extension *
2622*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2623*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SVC_NALU_EXT];
2624*495ae853SAndroid Build Coastguard Worker {
2625*495ae853SAndroid Build Coastguard Worker /* 2 implies allocation for NAL_PREFIX and NAL_CODED_SLICE_EXTENSION */
2626*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
2627*495ae853SAndroid Build Coastguard Worker 2 * MAX_CTXT_SETS * SVC_MAX_SLICE_HDR_CNT * sizeof(svc_nalu_ext_t);
2628*495ae853SAndroid Build Coastguard Worker }
2629*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SVC_NALU_EXT, ps_mem_rec->u4_mem_size);
2630*495ae853SAndroid Build Coastguard Worker
2631*495ae853SAndroid Build Coastguard Worker /************************************************************************
2632*495ae853SAndroid Build Coastguard Worker * Request memory for subset SPS *
2633*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2634*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SUBSET_SPS];
2635*495ae853SAndroid Build Coastguard Worker {
2636*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
2637*495ae853SAndroid Build Coastguard Worker MAX_SPS_CNT * ps_ip->s_svc_inp_params.u1_num_spatial_layers * sizeof(subset_sps_t);
2638*495ae853SAndroid Build Coastguard Worker }
2639*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SUBSET_SPS, ps_mem_rec->u4_mem_size);
2640*495ae853SAndroid Build Coastguard Worker
2641*495ae853SAndroid Build Coastguard Worker /************************************************************************
2642*495ae853SAndroid Build Coastguard Worker * Request memory for Slice Header *
2643*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2644*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SLICE_HDR];
2645*495ae853SAndroid Build Coastguard Worker {
2646*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = MAX_CTXT_SETS * SVC_MAX_SLICE_HDR_CNT * sizeof(slice_header_t);
2647*495ae853SAndroid Build Coastguard Worker }
2648*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SLICE_HDR, ps_mem_rec->u4_mem_size);
2649*495ae853SAndroid Build Coastguard Worker
2650*495ae853SAndroid Build Coastguard Worker /************************************************************************
2651*495ae853SAndroid Build Coastguard Worker * Request memory for SVC Slice Header *
2652*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2653*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SVC_SLICE_HDR];
2654*495ae853SAndroid Build Coastguard Worker {
2655*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
2656*495ae853SAndroid Build Coastguard Worker MAX_CTXT_SETS * SVC_MAX_SLICE_HDR_CNT * sizeof(svc_slice_header_t);
2657*495ae853SAndroid Build Coastguard Worker }
2658*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SVC_SLICE_HDR, ps_mem_rec->u4_mem_size);
2659*495ae853SAndroid Build Coastguard Worker
2660*495ae853SAndroid Build Coastguard Worker /************************************************************************
2661*495ae853SAndroid Build Coastguard Worker * Request memory for Adaptive Intra Refresh *
2662*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2663*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_AIR_MAP];
2664*495ae853SAndroid Build Coastguard Worker {
2665*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2666*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2667*495ae853SAndroid Build Coastguard Worker
2668*495ae853SAndroid Build Coastguard Worker /* intra coded map */
2669*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cnt;
2670*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2671*495ae853SAndroid Build Coastguard Worker
2672*495ae853SAndroid Build Coastguard Worker /* mb refresh map */
2673*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD16) * max_mb_cnt;
2674*495ae853SAndroid Build Coastguard Worker
2675*495ae853SAndroid Build Coastguard Worker /* alignment */
2676*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2677*495ae853SAndroid Build Coastguard Worker
2678*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2679*495ae853SAndroid Build Coastguard Worker }
2680*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_AIR_MAP, ps_mem_rec->u4_mem_size);
2681*495ae853SAndroid Build Coastguard Worker
2682*495ae853SAndroid Build Coastguard Worker /************************************************************************
2683*495ae853SAndroid Build Coastguard Worker * In multi slice encoding, this memory record helps tracking the start*
2684*495ae853SAndroid Build Coastguard Worker * of slice with reference to mb. *
2685*495ae853SAndroid Build Coastguard Worker * MEM RECORD for holding *
2686*495ae853SAndroid Build Coastguard Worker * 1. mb slice map *
2687*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2688*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SLICE_MAP];
2689*495ae853SAndroid Build Coastguard Worker {
2690*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2691*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2692*495ae853SAndroid Build Coastguard Worker
2693*495ae853SAndroid Build Coastguard Worker /* size in bytes to slice index of all mbs of a frame */
2694*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(max_mb_cnt);
2695*495ae853SAndroid Build Coastguard Worker
2696*495ae853SAndroid Build Coastguard Worker /* isvce_update_proc_ctxt can overread by 1 at the end */
2697*495ae853SAndroid Build Coastguard Worker total_size += 1;
2698*495ae853SAndroid Build Coastguard Worker
2699*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
2700*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2701*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2702*495ae853SAndroid Build Coastguard Worker }
2703*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_SLICE_MAP, ps_mem_rec->u4_mem_size);
2704*495ae853SAndroid Build Coastguard Worker
2705*495ae853SAndroid Build Coastguard Worker /************************************************************************
2706*495ae853SAndroid Build Coastguard Worker * Request memory to hold thread handles for each processing thread *
2707*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2708*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_THREAD_HANDLE];
2709*495ae853SAndroid Build Coastguard Worker {
2710*495ae853SAndroid Build Coastguard Worker WORD32 handle_size = ithread_get_handle_size();
2711*495ae853SAndroid Build Coastguard Worker
2712*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = MAX_PROCESS_THREADS * handle_size;
2713*495ae853SAndroid Build Coastguard Worker }
2714*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_THREAD_HANDLE, ps_mem_rec->u4_mem_size);
2715*495ae853SAndroid Build Coastguard Worker
2716*495ae853SAndroid Build Coastguard Worker /************************************************************************
2717*495ae853SAndroid Build Coastguard Worker * Request memory to hold mutex for control calls *
2718*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2719*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CTL_MUTEX];
2720*495ae853SAndroid Build Coastguard Worker {
2721*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ithread_get_mutex_lock_size();
2722*495ae853SAndroid Build Coastguard Worker }
2723*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_CTL_MUTEX, ps_mem_rec->u4_mem_size);
2724*495ae853SAndroid Build Coastguard Worker
2725*495ae853SAndroid Build Coastguard Worker /************************************************************************
2726*495ae853SAndroid Build Coastguard Worker * Request memory to hold mutex for entropy calls *
2727*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2728*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY_MUTEX];
2729*495ae853SAndroid Build Coastguard Worker {
2730*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ithread_get_mutex_lock_size();
2731*495ae853SAndroid Build Coastguard Worker }
2732*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_ENTROPY_MUTEX, ps_mem_rec->u4_mem_size);
2733*495ae853SAndroid Build Coastguard Worker
2734*495ae853SAndroid Build Coastguard Worker /************************************************************************
2735*495ae853SAndroid Build Coastguard Worker * Request memory to hold process jobs *
2736*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2737*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_JOBQ];
2738*495ae853SAndroid Build Coastguard Worker {
2739*495ae853SAndroid Build Coastguard Worker /* One process job per row of MBs */
2740*495ae853SAndroid Build Coastguard Worker /* Allocate for two pictures, so that wrap around can be handled easily */
2741*495ae853SAndroid Build Coastguard Worker WORD32 num_jobs = max_mb_rows * MAX_CTXT_SETS;
2742*495ae853SAndroid Build Coastguard Worker
2743*495ae853SAndroid Build Coastguard Worker WORD32 job_queue_size = ih264_list_size(num_jobs, sizeof(job_t));
2744*495ae853SAndroid Build Coastguard Worker
2745*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = job_queue_size;
2746*495ae853SAndroid Build Coastguard Worker }
2747*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_PROC_JOBQ, ps_mem_rec->u4_mem_size);
2748*495ae853SAndroid Build Coastguard Worker
2749*495ae853SAndroid Build Coastguard Worker /************************************************************************
2750*495ae853SAndroid Build Coastguard Worker * Request memory to hold entropy jobs *
2751*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
2752*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY_JOBQ];
2753*495ae853SAndroid Build Coastguard Worker {
2754*495ae853SAndroid Build Coastguard Worker /* One process job per row of MBs */
2755*495ae853SAndroid Build Coastguard Worker /* Allocate for two pictures, so that wrap around can be handled easily */
2756*495ae853SAndroid Build Coastguard Worker WORD32 num_jobs = max_mb_rows * MAX_CTXT_SETS;
2757*495ae853SAndroid Build Coastguard Worker
2758*495ae853SAndroid Build Coastguard Worker WORD32 job_queue_size = ih264_list_size(num_jobs, sizeof(job_t));
2759*495ae853SAndroid Build Coastguard Worker
2760*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = job_queue_size;
2761*495ae853SAndroid Build Coastguard Worker }
2762*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_ENTROPY_JOBQ, ps_mem_rec->u4_mem_size);
2763*495ae853SAndroid Build Coastguard Worker
2764*495ae853SAndroid Build Coastguard Worker /************************************************************************
2765*495ae853SAndroid Build Coastguard Worker * In multi core encoding, each row is assumed to be launched on a *
2766*495ae853SAndroid Build Coastguard Worker * thread. The rows below can only start after its neighbors are coded *
2767*495ae853SAndroid Build Coastguard Worker * The status of an mb coded/uncoded is signaled via proc map. *
2768*495ae853SAndroid Build Coastguard Worker * MEM RECORD for holding *
2769*495ae853SAndroid Build Coastguard Worker * 1. mb proc map (mb status core coded/uncoded) *
2770*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2771*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_MAP];
2772*495ae853SAndroid Build Coastguard Worker {
2773*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2774*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2775*495ae853SAndroid Build Coastguard Worker
2776*495ae853SAndroid Build Coastguard Worker /* size in bytes to mb core coding status of an entire frame */
2777*495ae853SAndroid Build Coastguard Worker total_size = max_mb_cnt;
2778*495ae853SAndroid Build Coastguard Worker
2779*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0 */
2780*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cols;
2781*495ae853SAndroid Build Coastguard Worker
2782*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
2783*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2784*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2785*495ae853SAndroid Build Coastguard Worker }
2786*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_PROC_MAP, ps_mem_rec->u4_mem_size);
2787*495ae853SAndroid Build Coastguard Worker
2788*495ae853SAndroid Build Coastguard Worker /************************************************************************
2789*495ae853SAndroid Build Coastguard Worker * mem record for holding a particular MB is deblocked or not *
2790*495ae853SAndroid Build Coastguard Worker * 1. mb deblk map (mb status deblocked/not deblocked) *
2791*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2792*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_DBLK_MAP];
2793*495ae853SAndroid Build Coastguard Worker {
2794*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2795*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2796*495ae853SAndroid Build Coastguard Worker
2797*495ae853SAndroid Build Coastguard Worker /* size in bytes to mb core coding status of an entire frame */
2798*495ae853SAndroid Build Coastguard Worker total_size = max_mb_cnt;
2799*495ae853SAndroid Build Coastguard Worker
2800*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0 */
2801*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cols;
2802*495ae853SAndroid Build Coastguard Worker
2803*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2804*495ae853SAndroid Build Coastguard Worker
2805*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
2806*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2807*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2808*495ae853SAndroid Build Coastguard Worker }
2809*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_DBLK_MAP, ps_mem_rec->u4_mem_size);
2810*495ae853SAndroid Build Coastguard Worker
2811*495ae853SAndroid Build Coastguard Worker /************************************************************************
2812*495ae853SAndroid Build Coastguard Worker * mem record for holding a particular MB's me is done or not *
2813*495ae853SAndroid Build Coastguard Worker * 1. mb me map *
2814*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2815*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ME_MAP];
2816*495ae853SAndroid Build Coastguard Worker {
2817*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2818*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2819*495ae853SAndroid Build Coastguard Worker
2820*495ae853SAndroid Build Coastguard Worker /* size in bytes to mb core coding status of an entire frame */
2821*495ae853SAndroid Build Coastguard Worker total_size = max_mb_cnt;
2822*495ae853SAndroid Build Coastguard Worker
2823*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0 */
2824*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cols;
2825*495ae853SAndroid Build Coastguard Worker
2826*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
2827*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
2828*495ae853SAndroid Build Coastguard Worker
2829*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2830*495ae853SAndroid Build Coastguard Worker }
2831*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_ME_MAP, ps_mem_rec->u4_mem_size);
2832*495ae853SAndroid Build Coastguard Worker
2833*495ae853SAndroid Build Coastguard Worker /************************************************************************
2834*495ae853SAndroid Build Coastguard Worker * size for holding dpb manager context *
2835*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2836*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_DPB_MGR];
2837*495ae853SAndroid Build Coastguard Worker {
2838*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = sizeof(dpb_mgr_t);
2839*495ae853SAndroid Build Coastguard Worker }
2840*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_DPB_MGR, ps_mem_rec->u4_mem_size);
2841*495ae853SAndroid Build Coastguard Worker
2842*495ae853SAndroid Build Coastguard Worker /************************************************************************
2843*495ae853SAndroid Build Coastguard Worker * luma or chroma core coding involves mb estimation, error computation*
2844*495ae853SAndroid Build Coastguard Worker * between the estimated singnal and the actual signal, transform the *
2845*495ae853SAndroid Build Coastguard Worker * error, quantize the error, then inverse transform and inverse quant *
2846*495ae853SAndroid Build Coastguard Worker * ize the residue and add the result back to estimated signal. *
2847*495ae853SAndroid Build Coastguard Worker * To perform all these, a set of temporary buffers are needed. *
2848*495ae853SAndroid Build Coastguard Worker * MEM RECORD for holding scratch buffers *
2849*495ae853SAndroid Build Coastguard Worker * 1. prediction buffer used during mb mode analysis *
2850*495ae853SAndroid Build Coastguard Worker * 2 temp. reference buffer when intra 4x4 with rdopt on is *
2851*495ae853SAndroid Build Coastguard Worker * enabled *
2852*495ae853SAndroid Build Coastguard Worker * - when intra 4x4 is enabled, rdopt is on, to store the *
2853*495ae853SAndroid Build Coastguard Worker * reconstructed values and use them later this temp. buffer *
2854*495ae853SAndroid Build Coastguard Worker * is used. *
2855*495ae853SAndroid Build Coastguard Worker * 3. prediction buffer used during intra mode analysis *
2856*495ae853SAndroid Build Coastguard Worker * 4. prediction buffer used during intra 16x16 plane mode *
2857*495ae853SAndroid Build Coastguard Worker * analysis
2858*495ae853SAndroid Build Coastguard Worker * 5. prediction buffer used during intra chroma mode analysis *
2859*495ae853SAndroid Build Coastguard Worker * 6. prediction buffer used during intra chroma 16x16 plane *
2860*495ae853SAndroid Build Coastguard Worker * mode analysis
2861*495ae853SAndroid Build Coastguard Worker * 7. forward transform output buffer *
2862*495ae853SAndroid Build Coastguard Worker * - to store the error between estimated and the actual inp *
2863*495ae853SAndroid Build Coastguard Worker * ut and to store the fwd transformed quantized output *
2864*495ae853SAndroid Build Coastguard Worker * 8. forward transform output buffer *
2865*495ae853SAndroid Build Coastguard Worker * - when intra 4x4 is enabled, rdopt is on, to store the *
2866*495ae853SAndroid Build Coastguard Worker * fwd transform values and use them later this temp. buffer *
2867*495ae853SAndroid Build Coastguard Worker * is used. *
2868*495ae853SAndroid Build Coastguard Worker * 9. temporary buffer for inverse transform *
2869*495ae853SAndroid Build Coastguard Worker * - temporary buffer used in inverse transform and inverse *
2870*495ae853SAndroid Build Coastguard Worker * quantization *
2871*495ae853SAndroid Build Coastguard Worker * A. Buffers for holding half_x , half_y and half_xy planes *
2872*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2873*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_SCRATCH];
2874*495ae853SAndroid Build Coastguard Worker {
2875*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2876*495ae853SAndroid Build Coastguard Worker WORD32 i4_tmp_size;
2877*495ae853SAndroid Build Coastguard Worker
2878*495ae853SAndroid Build Coastguard Worker /* size to hold prediction buffer */
2879*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 16;
2880*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2881*495ae853SAndroid Build Coastguard Worker
2882*495ae853SAndroid Build Coastguard Worker /* size to hold recon for intra 4x4 buffer */
2883*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 16;
2884*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2885*495ae853SAndroid Build Coastguard Worker
2886*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra 16x16 */
2887*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 16;
2888*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2889*495ae853SAndroid Build Coastguard Worker
2890*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra 16x16 plane*/
2891*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 16;
2892*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2893*495ae853SAndroid Build Coastguard Worker
2894*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra chroma*/
2895*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 8;
2896*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2897*495ae853SAndroid Build Coastguard Worker
2898*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra chroma plane*/
2899*495ae853SAndroid Build Coastguard Worker total_size += sizeof(UWORD8) * 16 * 8;
2900*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2901*495ae853SAndroid Build Coastguard Worker
2902*495ae853SAndroid Build Coastguard Worker /* size to hold fwd transform output */
2903*495ae853SAndroid Build Coastguard Worker total_size += sizeof(WORD16) * SIZE_TRANS_BUFF;
2904*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2905*495ae853SAndroid Build Coastguard Worker
2906*495ae853SAndroid Build Coastguard Worker /* size to hold fwd transform output */
2907*495ae853SAndroid Build Coastguard Worker total_size += sizeof(WORD16) * SIZE_TRANS_BUFF;
2908*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2909*495ae853SAndroid Build Coastguard Worker
2910*495ae853SAndroid Build Coastguard Worker /* size to hold temporary data during inverse transform */
2911*495ae853SAndroid Build Coastguard Worker total_size += sizeof(WORD32) * SIZE_TMP_BUFF_ITRANS;
2912*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
2913*495ae853SAndroid Build Coastguard Worker
2914*495ae853SAndroid Build Coastguard Worker /* Buffers for holding half_x , half_y and half_xy planes */
2915*495ae853SAndroid Build Coastguard Worker i4_tmp_size = sizeof(UWORD8) * (HP_BUFF_WD * HP_BUFF_HT);
2916*495ae853SAndroid Build Coastguard Worker total_size += (ALIGN64(i4_tmp_size) * SUBPEL_BUFF_CNT);
2917*495ae853SAndroid Build Coastguard Worker
2918*495ae853SAndroid Build Coastguard Worker /* Allocate for each process thread */
2919*495ae853SAndroid Build Coastguard Worker total_size *= MAX_PROCESS_CTXT;
2920*495ae853SAndroid Build Coastguard Worker
2921*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2922*495ae853SAndroid Build Coastguard Worker }
2923*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_PROC_SCRATCH, ps_mem_rec->u4_mem_size);
2924*495ae853SAndroid Build Coastguard Worker
2925*495ae853SAndroid Build Coastguard Worker /************************************************************************
2926*495ae853SAndroid Build Coastguard Worker * When transform_8x8_flag is disabled, the size of a sub block is *
2927*495ae853SAndroid Build Coastguard Worker * 4x4 and when the transform_8x8_flag is enabled the size of the sub *
2928*495ae853SAndroid Build Coastguard Worker * block is 8x8. The threshold matrix and the forward scaling list *
2929*495ae853SAndroid Build Coastguard Worker * is of the size of the sub block. *
2930*495ae853SAndroid Build Coastguard Worker * MEM RECORD for holding *
2931*495ae853SAndroid Build Coastguard Worker * 1. quantization parameters for plane y, cb, cr *
2932*495ae853SAndroid Build Coastguard Worker * - threshold matrix for quantization *
2933*495ae853SAndroid Build Coastguard Worker * - forward weight matrix *
2934*495ae853SAndroid Build Coastguard Worker * - satqd threshold matrix *
2935*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2936*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_QUANT_PARAM];
2937*495ae853SAndroid Build Coastguard Worker {
2938*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
2939*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
2940*495ae853SAndroid Build Coastguard Worker
2941*495ae853SAndroid Build Coastguard Worker /* quantization parameter list for planes y,cb and cr */
2942*495ae853SAndroid Build Coastguard Worker total_size += ALIGN64(sizeof(quant_params_t)) * 3;
2943*495ae853SAndroid Build Coastguard Worker
2944*495ae853SAndroid Build Coastguard Worker /* size of threshold matrix for quantization
2945*495ae853SAndroid Build Coastguard Worker * (assuming the transform_8x8_flag is disabled).
2946*495ae853SAndroid Build Coastguard Worker * for all 3 planes */
2947*495ae853SAndroid Build Coastguard Worker total_size += ALIGN64(sizeof(WORD16) * 4 * 4) * 3;
2948*495ae853SAndroid Build Coastguard Worker
2949*495ae853SAndroid Build Coastguard Worker /* size of forward weight matrix for quantization
2950*495ae853SAndroid Build Coastguard Worker * (assuming the transform_8x8_flag is disabled).
2951*495ae853SAndroid Build Coastguard Worker * for all 3 planes */
2952*495ae853SAndroid Build Coastguard Worker total_size += ALIGN64(sizeof(WORD16) * 4 * 4) * 3;
2953*495ae853SAndroid Build Coastguard Worker
2954*495ae853SAndroid Build Coastguard Worker /* Size for SATDQ threshold matrix for palnes y, cb and cr */
2955*495ae853SAndroid Build Coastguard Worker total_size += ALIGN64(sizeof(UWORD16) * 9) * 3;
2956*495ae853SAndroid Build Coastguard Worker
2957*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2958*495ae853SAndroid Build Coastguard Worker
2959*495ae853SAndroid Build Coastguard Worker /* total size per each proc thread */
2960*495ae853SAndroid Build Coastguard Worker total_size *= MAX_PROCESS_CTXT;
2961*495ae853SAndroid Build Coastguard Worker
2962*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2963*495ae853SAndroid Build Coastguard Worker }
2964*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_QUANT_PARAM, ps_mem_rec->u4_mem_size);
2965*495ae853SAndroid Build Coastguard Worker
2966*495ae853SAndroid Build Coastguard Worker /************************************************************************
2967*495ae853SAndroid Build Coastguard Worker * While computing blocking strength for the current mb, the csbp, mb *
2968*495ae853SAndroid Build Coastguard Worker * type for the neighboring mbs are necessary. memtab for storing top *
2969*495ae853SAndroid Build Coastguard Worker * row mbtype and csbp is evaluated here. *
2970*495ae853SAndroid Build Coastguard Worker * *
2971*495ae853SAndroid Build Coastguard Worker * when encoding intra 4x4 or intra 8x8 the submb types are estimated *
2972*495ae853SAndroid Build Coastguard Worker * and sent. The estimation is dependent on neighbor mbs. For this *
2973*495ae853SAndroid Build Coastguard Worker * store the top row sub mb types for intra mbs *
2974*495ae853SAndroid Build Coastguard Worker * *
2975*495ae853SAndroid Build Coastguard Worker * During motion vector prediction, the curr mb mv is predicted from *
2976*495ae853SAndroid Build Coastguard Worker * neigbors left, top, top right and sometimes top left depending on *
2977*495ae853SAndroid Build Coastguard Worker * the availability. The top and top right content is accessed from *
2978*495ae853SAndroid Build Coastguard Worker * the memtab specified below. *
2979*495ae853SAndroid Build Coastguard Worker ************************************************************************/
2980*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_TOP_ROW_SYN_INFO];
2981*495ae853SAndroid Build Coastguard Worker {
2982*495ae853SAndroid Build Coastguard Worker UWORD32 total_size = isvce_get_svc_nbr_info_buf_size(
2983*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
2984*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
2985*495ae853SAndroid Build Coastguard Worker
2986*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
2987*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
2988*495ae853SAndroid Build Coastguard Worker }
2989*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_TOP_ROW_SYN_INFO, ps_mem_rec->u4_mem_size);
2990*495ae853SAndroid Build Coastguard Worker
2991*495ae853SAndroid Build Coastguard Worker /************************************************************************
2992*495ae853SAndroid Build Coastguard Worker * When transform_8x8_flag is disabled, the mb is partitioned into *
2993*495ae853SAndroid Build Coastguard Worker * 4 sub blocks. This corresponds to 1 vertical left edge and 1 *
2994*495ae853SAndroid Build Coastguard Worker * vertical inner edge, 1 horizontal top edge and 1 horizontal *
2995*495ae853SAndroid Build Coastguard Worker * inner edge per mb. Further, When transform_8x8_flag is enabled, *
2996*495ae853SAndroid Build Coastguard Worker * the mb is partitioned in to 16 sub blocks. This corresponds to *
2997*495ae853SAndroid Build Coastguard Worker * 1 vertical left edge and 3 vertical inner edges, 1 horizontal top *
2998*495ae853SAndroid Build Coastguard Worker * edge and 3 horizontal inner edges per mb. *
2999*495ae853SAndroid Build Coastguard Worker * MEM RECORD for holding *
3000*495ae853SAndroid Build Coastguard Worker * 1. vertical edge blocking strength *
3001*495ae853SAndroid Build Coastguard Worker * 2. horizontal edge blocking strength *
3002*495ae853SAndroid Build Coastguard Worker * 3. mb qp *
3003*495ae853SAndroid Build Coastguard Worker * all are frame level *
3004*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3005*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_BS_QP];
3006*495ae853SAndroid Build Coastguard Worker {
3007*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
3008*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
3009*495ae853SAndroid Build Coastguard Worker
3010*495ae853SAndroid Build Coastguard Worker /* size in bytes to store vertical edge bs, horizontal edge bs and qp of
3011*495ae853SAndroid Build Coastguard Worker * every mb*/
3012*495ae853SAndroid Build Coastguard Worker WORD32 vert_bs_size, horz_bs_size, qp_size;
3013*495ae853SAndroid Build Coastguard Worker
3014*495ae853SAndroid Build Coastguard Worker /* vertical edge bs = total number of vertical edges * number of bytes per
3015*495ae853SAndroid Build Coastguard Worker * each edge */
3016*495ae853SAndroid Build Coastguard Worker /* total num of v edges = total mb * 4 (assuming transform_8x8_flag = 0),
3017*495ae853SAndroid Build Coastguard Worker * each edge is formed by 4 pairs of subblks, requiring 4 bytes to storing
3018*495ae853SAndroid Build Coastguard Worker * bs */
3019*495ae853SAndroid Build Coastguard Worker vert_bs_size = 2 * ALIGN64(max_mb_cnt * 4 * 4);
3020*495ae853SAndroid Build Coastguard Worker
3021*495ae853SAndroid Build Coastguard Worker /* horizontal edge bs = total number of horizontal edges * number of bytes
3022*495ae853SAndroid Build Coastguard Worker * per each edge */
3023*495ae853SAndroid Build Coastguard Worker /* total num of h edges = total mb * 4 (assuming transform_8x8_flag = 0),
3024*495ae853SAndroid Build Coastguard Worker * each edge is formed by 4 pairs of subblks, requiring 4 bytes to storing
3025*495ae853SAndroid Build Coastguard Worker * bs */
3026*495ae853SAndroid Build Coastguard Worker horz_bs_size = 2 * ALIGN64(max_mb_cnt * 4 * 4);
3027*495ae853SAndroid Build Coastguard Worker
3028*495ae853SAndroid Build Coastguard Worker /* qp of each mb requires 1 byte */
3029*495ae853SAndroid Build Coastguard Worker qp_size = ALIGN64(max_mb_cnt);
3030*495ae853SAndroid Build Coastguard Worker
3031*495ae853SAndroid Build Coastguard Worker /* total size */
3032*495ae853SAndroid Build Coastguard Worker total_size = vert_bs_size + horz_bs_size + qp_size;
3033*495ae853SAndroid Build Coastguard Worker
3034*495ae853SAndroid Build Coastguard Worker /* total size per each proc ctxt */
3035*495ae853SAndroid Build Coastguard Worker total_size *= MAX_CTXT_SETS;
3036*495ae853SAndroid Build Coastguard Worker
3037*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = total_size;
3038*495ae853SAndroid Build Coastguard Worker }
3039*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_BS_QP, ps_mem_rec->u4_mem_size);
3040*495ae853SAndroid Build Coastguard Worker
3041*495ae853SAndroid Build Coastguard Worker /************************************************************************
3042*495ae853SAndroid Build Coastguard Worker * size for holding input pic buf *
3043*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3044*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_INP_PIC];
3045*495ae853SAndroid Build Coastguard Worker {
3046*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ih264_buf_mgr_size();
3047*495ae853SAndroid Build Coastguard Worker }
3048*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_INP_PIC, ps_mem_rec->u4_mem_size);
3049*495ae853SAndroid Build Coastguard Worker
3050*495ae853SAndroid Build Coastguard Worker /************************************************************************
3051*495ae853SAndroid Build Coastguard Worker * size for holding putput pic buf *
3052*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3053*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_OUT];
3054*495ae853SAndroid Build Coastguard Worker {
3055*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ih264_buf_mgr_size();
3056*495ae853SAndroid Build Coastguard Worker }
3057*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_OUT, ps_mem_rec->u4_mem_size);
3058*495ae853SAndroid Build Coastguard Worker
3059*495ae853SAndroid Build Coastguard Worker /************************************************************************
3060*495ae853SAndroid Build Coastguard Worker * Size for color space conversion *
3061*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3062*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CSC];
3063*495ae853SAndroid Build Coastguard Worker {
3064*495ae853SAndroid Build Coastguard Worker /* We need a total a memory for a single frame of 420 sp, ie
3065*495ae853SAndroid Build Coastguard Worker * (wd * ht) for luma and (wd * ht / 2) for chroma*/
3066*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = MAX_CTXT_SETS * ((3 * max_ht_luma * max_wd_luma) >> 1);
3067*495ae853SAndroid Build Coastguard Worker /* Allocate an extra row, since inverse transform functions for
3068*495ae853SAndroid Build Coastguard Worker * chroma access(only read, not used) few extra bytes due to
3069*495ae853SAndroid Build Coastguard Worker * interleaved input
3070*495ae853SAndroid Build Coastguard Worker */
3071*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size += max_wd_luma;
3072*495ae853SAndroid Build Coastguard Worker }
3073*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_CSC, ps_mem_rec->u4_mem_size);
3074*495ae853SAndroid Build Coastguard Worker
3075*495ae853SAndroid Build Coastguard Worker /************************************************************************
3076*495ae853SAndroid Build Coastguard Worker * Size for holding pic_buf_t for each reference picture *
3077*495ae853SAndroid Build Coastguard Worker * Note this allocation is done for BUF_MGR_MAX_CNT instead of *
3078*495ae853SAndroid Build Coastguard Worker * MAX_DPB_SIZE or max_dpb_size for following reasons *
3079*495ae853SAndroid Build Coastguard Worker * max_dpb_size will be based on max_wd and max_ht *
3080*495ae853SAndroid Build Coastguard Worker * For higher max_wd and max_ht this number will be smaller than *
3081*495ae853SAndroid Build Coastguard Worker * MAX_DPB_SIZE But during actual initialization number of buffers *
3082*495ae853SAndroid Build Coastguard Worker * allocated can be more. *
3083*495ae853SAndroid Build Coastguard Worker * *
3084*495ae853SAndroid Build Coastguard Worker * Also to handle display depth application can allocate more than *
3085*495ae853SAndroid Build Coastguard Worker * what codec asks for in case of non-shared mode *
3086*495ae853SAndroid Build Coastguard Worker * Since this is only a structure allocation and not actual buffer *
3087*495ae853SAndroid Build Coastguard Worker * allocation, it is allocated for BUF_MGR_MAX_CNT entries *
3088*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3089*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_REF_PIC];
3090*495ae853SAndroid Build Coastguard Worker {
3091*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ih264_buf_mgr_size();
3092*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size += BUF_MGR_MAX_CNT * sizeof(svc_au_buf_t);
3093*495ae853SAndroid Build Coastguard Worker
3094*495ae853SAndroid Build Coastguard Worker /************************************************************************
3095*495ae853SAndroid Build Coastguard Worker * Note: Number of luma samples is not max_wd * max_ht here, instead it *
3096*495ae853SAndroid Build Coastguard Worker * is set to maximum number of luma samples allowed at the given level. *
3097*495ae853SAndroid Build Coastguard Worker * This is done to ensure that any stream with width and height lesser *
3098*495ae853SAndroid Build Coastguard Worker * than max_wd and max_ht is supported. Number of buffers required can *
3099*495ae853SAndroid Build Coastguard Worker * be greater for lower width and heights at a given level and this *
3100*495ae853SAndroid Build Coastguard Worker * increased number of buffers might require more memory than what *
3101*495ae853SAndroid Build Coastguard Worker * max_wd and max_ht buffer would have required. Number of buffers is *
3102*495ae853SAndroid Build Coastguard Worker * doubled in order to return one frame at a time instead of sending *
3103*495ae853SAndroid Build Coastguard Worker * multiple outputs during dpb full case. Also note one extra buffer is *
3104*495ae853SAndroid Build Coastguard Worker * allocted to store current picture. *
3105*495ae853SAndroid Build Coastguard Worker * *
3106*495ae853SAndroid Build Coastguard Worker * Half-pel planes for each reference buffer are allocated along with *
3107*495ae853SAndroid Build Coastguard Worker * the reference buffer. So each reference buffer is 4 times the *
3108*495ae853SAndroid Build Coastguard Worker * required size. This way buffer management for the half-pel planes is *
3109*495ae853SAndroid Build Coastguard Worker * easier and while using the half-pel planes in MC, an offset can be *
3110*495ae853SAndroid Build Coastguard Worker * used from a single pointer *
3111*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
3112*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size +=
3113*495ae853SAndroid Build Coastguard Worker HPEL_PLANES_CNT * isvce_get_total_svc_au_buf_size(&ps_ip->s_svc_inp_params,
3114*495ae853SAndroid Build Coastguard Worker u4_wd * u4_ht, level, PAD_WD, PAD_HT,
3115*495ae853SAndroid Build Coastguard Worker num_ref_frames, num_reorder_frames);
3116*495ae853SAndroid Build Coastguard Worker }
3117*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_REF_PIC, ps_mem_rec->u4_mem_size);
3118*495ae853SAndroid Build Coastguard Worker
3119*495ae853SAndroid Build Coastguard Worker /************************************************************************
3120*495ae853SAndroid Build Coastguard Worker * Size for holding svc_au_data_t for each MV Bank. *
3121*495ae853SAndroid Build Coastguard Worker * Note this allocation is done for BUF_MGR_MAX_CNT instead of *
3122*495ae853SAndroid Build Coastguard Worker * MAX_DPB_SIZE or max_dpb_size for following reasons *
3123*495ae853SAndroid Build Coastguard Worker * max_dpb_size will be based on max_wd and max_ht *
3124*495ae853SAndroid Build Coastguard Worker * For higher max_wd and max_ht this number will be smaller than *
3125*495ae853SAndroid Build Coastguard Worker * MAX_DPB_SIZE But during actual initialization number of buffers *
3126*495ae853SAndroid Build Coastguard Worker * allocated can be more. *
3127*495ae853SAndroid Build Coastguard Worker * *
3128*495ae853SAndroid Build Coastguard Worker * One extra MV Bank is needed to hold current pics MV bank. *
3129*495ae853SAndroid Build Coastguard Worker * Since this is only a structure allocation and not actual buffer *
3130*495ae853SAndroid Build Coastguard Worker * allocation, it is allocated for BUF_MGR_MAX_CNT entries *
3131*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3132*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MVBANK];
3133*495ae853SAndroid Build Coastguard Worker {
3134*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ih264_buf_mgr_size();
3135*495ae853SAndroid Build Coastguard Worker
3136*495ae853SAndroid Build Coastguard Worker /************************************************************************
3137*495ae853SAndroid Build Coastguard Worker * Allocate for pu_map, isvce_enc_pu_t and pic_pu_idx for each MV bank *
3138*495ae853SAndroid Build Coastguard Worker * Note: Number of luma samples is not max_wd * max_ht here, instead it *
3139*495ae853SAndroid Build Coastguard Worker * is set to maximum number of luma samples allowed at the given level. *
3140*495ae853SAndroid Build Coastguard Worker * This is done to ensure that any stream with width and height lesser *
3141*495ae853SAndroid Build Coastguard Worker * than max_wd and max_ht is supported. Number of buffers required can *
3142*495ae853SAndroid Build Coastguard Worker * be greater for lower width and heights at a given level and this *
3143*495ae853SAndroid Build Coastguard Worker * increased number of buffers might require more memory than what *
3144*495ae853SAndroid Build Coastguard Worker * max_wd and max_ht buffer would have required Also note one extra *
3145*495ae853SAndroid Build Coastguard Worker * buffer is allocated to store current pictures MV bank. *
3146*495ae853SAndroid Build Coastguard Worker ***********************************************************************/
3147*495ae853SAndroid Build Coastguard Worker
3148*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size += BUF_MGR_MAX_CNT * sizeof(svc_au_data_t);
3149*495ae853SAndroid Build Coastguard Worker
3150*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size +=
3151*495ae853SAndroid Build Coastguard Worker (num_ref_frames + num_reorder_frames + ps_ip->s_svc_inp_params.u1_num_temporal_layers +
3152*495ae853SAndroid Build Coastguard Worker MAX_CTXT_SETS) *
3153*495ae853SAndroid Build Coastguard Worker isvce_get_total_svc_au_data_size(u4_wd * u4_ht,
3154*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3155*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio);
3156*495ae853SAndroid Build Coastguard Worker }
3157*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_MVBANK, ps_mem_rec->u4_mem_size);
3158*495ae853SAndroid Build Coastguard Worker
3159*495ae853SAndroid Build Coastguard Worker /************************************************************************
3160*495ae853SAndroid Build Coastguard Worker * Request memory to hold mem recs to be returned during retrieve call *
3161*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3162*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_BACKUP];
3163*495ae853SAndroid Build Coastguard Worker {
3164*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ISVCE_MEM_REC_CNT * sizeof(iv_mem_rec_t);
3165*495ae853SAndroid Build Coastguard Worker }
3166*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_BACKUP, ps_mem_rec->u4_mem_size);
3167*495ae853SAndroid Build Coastguard Worker
3168*495ae853SAndroid Build Coastguard Worker /************************************************************************
3169*495ae853SAndroid Build Coastguard Worker * size for memory required by NMB info structs and buffer for storing *
3170*495ae853SAndroid Build Coastguard Worker * half pel plane *
3171*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3172*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_INFO_NMB];
3173*495ae853SAndroid Build Coastguard Worker {
3174*495ae853SAndroid Build Coastguard Worker /* Additional 4 bytes to allow use of '_mm_loadl_epi64' */
3175*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
3176*495ae853SAndroid Build Coastguard Worker MAX_PROCESS_CTXT * max_mb_cols *
3177*495ae853SAndroid Build Coastguard Worker (sizeof(isvce_mb_info_nmb_t) + (MB_SIZE * MB_SIZE + 4) * sizeof(UWORD8));
3178*495ae853SAndroid Build Coastguard Worker }
3179*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_MB_INFO_NMB, ps_mem_rec->u4_mem_size);
3180*495ae853SAndroid Build Coastguard Worker
3181*495ae853SAndroid Build Coastguard Worker /* Buffers for storing SVC Spatial data */
3182*495ae853SAndroid Build Coastguard Worker {
3183*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_SPAT_INP];
3184*495ae853SAndroid Build Coastguard Worker
3185*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
3186*495ae853SAndroid Build Coastguard Worker isvce_get_svc_inp_buf_size(ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3187*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3188*495ae853SAndroid Build Coastguard Worker
3189*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_SPAT_INP, ps_mem_rec->u4_mem_size);
3190*495ae853SAndroid Build Coastguard Worker }
3191*495ae853SAndroid Build Coastguard Worker
3192*495ae853SAndroid Build Coastguard Worker /* Buffer for storing Downscaler data */
3193*495ae853SAndroid Build Coastguard Worker {
3194*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_DOWN_SCALER];
3195*495ae853SAndroid Build Coastguard Worker
3196*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_downscaler_data_size(
3197*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3198*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3199*495ae853SAndroid Build Coastguard Worker
3200*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_DOWN_SCALER, ps_mem_rec->u4_mem_size);
3201*495ae853SAndroid Build Coastguard Worker }
3202*495ae853SAndroid Build Coastguard Worker
3203*495ae853SAndroid Build Coastguard Worker {
3204*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_ILP_DATA];
3205*495ae853SAndroid Build Coastguard Worker
3206*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
3207*495ae853SAndroid Build Coastguard Worker isvce_get_svc_ilp_buf_size(ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3208*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3209*495ae853SAndroid Build Coastguard Worker
3210*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_ILP_DATA, ps_mem_rec->u4_mem_size);
3211*495ae853SAndroid Build Coastguard Worker }
3212*495ae853SAndroid Build Coastguard Worker
3213*495ae853SAndroid Build Coastguard Worker {
3214*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_ILP_MV_CTXT];
3215*495ae853SAndroid Build Coastguard Worker
3216*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size =
3217*495ae853SAndroid Build Coastguard Worker isvce_get_ilp_mv_ctxt_size(ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3218*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3219*495ae853SAndroid Build Coastguard Worker
3220*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_ILP_MV_CTXT, ps_mem_rec->u4_mem_size);
3221*495ae853SAndroid Build Coastguard Worker }
3222*495ae853SAndroid Build Coastguard Worker
3223*495ae853SAndroid Build Coastguard Worker {
3224*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_RES_PRED_CTXT];
3225*495ae853SAndroid Build Coastguard Worker
3226*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_svc_res_pred_ctxt_size(
3227*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3228*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3229*495ae853SAndroid Build Coastguard Worker
3230*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_RES_PRED_CTXT,
3231*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
3232*495ae853SAndroid Build Coastguard Worker }
3233*495ae853SAndroid Build Coastguard Worker
3234*495ae853SAndroid Build Coastguard Worker {
3235*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_INTRA_PRED_CTXT];
3236*495ae853SAndroid Build Coastguard Worker
3237*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_svc_intra_pred_ctxt_size(
3238*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3239*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3240*495ae853SAndroid Build Coastguard Worker
3241*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_INTRA_PRED_CTXT,
3242*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
3243*495ae853SAndroid Build Coastguard Worker }
3244*495ae853SAndroid Build Coastguard Worker
3245*495ae853SAndroid Build Coastguard Worker {
3246*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_RC_UTILS_CTXT];
3247*495ae853SAndroid Build Coastguard Worker
3248*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_rc_utils_data_size();
3249*495ae853SAndroid Build Coastguard Worker
3250*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_RC_UTILS_CTXT,
3251*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
3252*495ae853SAndroid Build Coastguard Worker }
3253*495ae853SAndroid Build Coastguard Worker
3254*495ae853SAndroid Build Coastguard Worker {
3255*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_SVC_SUB_PIC_RC_CTXT];
3256*495ae853SAndroid Build Coastguard Worker
3257*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_sub_pic_rc_ctxt_size(
3258*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3259*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, u4_wd, u4_ht);
3260*495ae853SAndroid Build Coastguard Worker
3261*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_SVC_SUB_PIC_RC_CTXT,
3262*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
3263*495ae853SAndroid Build Coastguard Worker }
3264*495ae853SAndroid Build Coastguard Worker
3265*495ae853SAndroid Build Coastguard Worker #if ENABLE_MODE_STAT_VISUALISER
3266*495ae853SAndroid Build Coastguard Worker {
3267*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[MEM_MODE_STAT_VISUALISER_BUF];
3268*495ae853SAndroid Build Coastguard Worker
3269*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = isvce_get_msv_ctxt_size(u4_wd, u4_ht);
3270*495ae853SAndroid Build Coastguard Worker
3271*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", MEM_MODE_STAT_VISUALISER_BUF,
3272*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
3273*495ae853SAndroid Build Coastguard Worker }
3274*495ae853SAndroid Build Coastguard Worker #endif
3275*495ae853SAndroid Build Coastguard Worker
3276*495ae853SAndroid Build Coastguard Worker /************************************************************************
3277*495ae853SAndroid Build Coastguard Worker * RC mem records *
3278*495ae853SAndroid Build Coastguard Worker ************************************************************************/
3279*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_RC];
3280*495ae853SAndroid Build Coastguard Worker {
3281*495ae853SAndroid Build Coastguard Worker isvce_get_rate_control_mem_tab(NULL, ps_mem_rec, FILL_MEMTAB);
3282*495ae853SAndroid Build Coastguard Worker }
3283*495ae853SAndroid Build Coastguard Worker DEBUG("\nMemory record Id %d = %d \n", ISVCE_MEM_REC_RC, ps_mem_rec->u4_mem_size);
3284*495ae853SAndroid Build Coastguard Worker
3285*495ae853SAndroid Build Coastguard Worker /* Each memtab size is aligned to next multiple of 128 bytes */
3286*495ae853SAndroid Build Coastguard Worker /* This is to ensure all the memtabs start at different cache lines */
3287*495ae853SAndroid Build Coastguard Worker ps_mem_rec = ps_mem_rec_base;
3288*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ISVCE_MEM_REC_CNT; i++)
3289*495ae853SAndroid Build Coastguard Worker {
3290*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = ALIGN128(ps_mem_rec->u4_mem_size);
3291*495ae853SAndroid Build Coastguard Worker ps_mem_rec++;
3292*495ae853SAndroid Build Coastguard Worker }
3293*495ae853SAndroid Build Coastguard Worker
3294*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_num_mem_rec = ISVCE_MEM_REC_CNT;
3295*495ae853SAndroid Build Coastguard Worker
3296*495ae853SAndroid Build Coastguard Worker DEBUG("Num mem recs in fill call : %d\n", ps_op->s_ive_op.u4_num_mem_rec);
3297*495ae853SAndroid Build Coastguard Worker
3298*495ae853SAndroid Build Coastguard Worker return (status);
3299*495ae853SAndroid Build Coastguard Worker }
3300*495ae853SAndroid Build Coastguard Worker
3301*495ae853SAndroid Build Coastguard Worker /**
3302*495ae853SAndroid Build Coastguard Worker *******************************************************************************
3303*495ae853SAndroid Build Coastguard Worker *
3304*495ae853SAndroid Build Coastguard Worker * @brief
3305*495ae853SAndroid Build Coastguard Worker * Initializes from mem records passed to the codec
3306*495ae853SAndroid Build Coastguard Worker *
3307*495ae853SAndroid Build Coastguard Worker * @par Description:
3308*495ae853SAndroid Build Coastguard Worker * Initializes pointers based on mem records passed
3309*495ae853SAndroid Build Coastguard Worker *
3310*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
3311*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
3312*495ae853SAndroid Build Coastguard Worker *
3313*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
3314*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
3315*495ae853SAndroid Build Coastguard Worker *
3316*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
3317*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
3318*495ae853SAndroid Build Coastguard Worker *
3319*495ae853SAndroid Build Coastguard Worker * @returns error status
3320*495ae853SAndroid Build Coastguard Worker *
3321*495ae853SAndroid Build Coastguard Worker * @remarks none
3322*495ae853SAndroid Build Coastguard Worker *
3323*495ae853SAndroid Build Coastguard Worker *******************************************************************************
3324*495ae853SAndroid Build Coastguard Worker */
isvce_init_mem_rec(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op)3325*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_init_mem_rec(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
3326*495ae853SAndroid Build Coastguard Worker {
3327*495ae853SAndroid Build Coastguard Worker /* api call I/O structures */
3328*495ae853SAndroid Build Coastguard Worker isvce_init_ip_t *ps_ip = pv_api_ip;
3329*495ae853SAndroid Build Coastguard Worker isvce_init_op_t *ps_op = pv_api_op;
3330*495ae853SAndroid Build Coastguard Worker
3331*495ae853SAndroid Build Coastguard Worker /* mem records */
3332*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec_base, *ps_mem_rec;
3333*495ae853SAndroid Build Coastguard Worker
3334*495ae853SAndroid Build Coastguard Worker /* codec variables */
3335*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec;
3336*495ae853SAndroid Build Coastguard Worker isvce_cabac_ctxt_t *ps_cabac;
3337*495ae853SAndroid Build Coastguard Worker isvce_mb_info_ctxt_t *ps_mb_map_ctxt_inc;
3338*495ae853SAndroid Build Coastguard Worker
3339*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg;
3340*495ae853SAndroid Build Coastguard Worker
3341*495ae853SAndroid Build Coastguard Worker /* frame dimensions */
3342*495ae853SAndroid Build Coastguard Worker WORD32 max_wd_luma, max_ht_luma;
3343*495ae853SAndroid Build Coastguard Worker WORD32 max_mb_rows, max_mb_cols, max_mb_cnt;
3344*495ae853SAndroid Build Coastguard Worker
3345*495ae853SAndroid Build Coastguard Worker WORD32 i, j;
3346*495ae853SAndroid Build Coastguard Worker WORD32 status = IV_SUCCESS;
3347*495ae853SAndroid Build Coastguard Worker
3348*495ae853SAndroid Build Coastguard Worker if(MAX_CTXT_SETS != 1)
3349*495ae853SAndroid Build Coastguard Worker {
3350*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
3351*495ae853SAndroid Build Coastguard Worker }
3352*495ae853SAndroid Build Coastguard Worker
3353*495ae853SAndroid Build Coastguard Worker /* mem records */
3354*495ae853SAndroid Build Coastguard Worker ps_mem_rec_base = ps_ip->s_ive_ip.ps_mem_rec;
3355*495ae853SAndroid Build Coastguard Worker
3356*495ae853SAndroid Build Coastguard Worker /* memset all allocated memory, except the first one. First buffer (i.e. i == MEM_REC_IV_OBJ)
3357*495ae853SAndroid Build Coastguard Worker is initialized by application before calling this init function */
3358*495ae853SAndroid Build Coastguard Worker for(i = ISVCE_MEM_REC_CODEC; i < ISVCE_MEM_REC_CNT; i++)
3359*495ae853SAndroid Build Coastguard Worker {
3360*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[i];
3361*495ae853SAndroid Build Coastguard Worker memset(ps_mem_rec->pv_base, 0, ps_mem_rec->u4_mem_size);
3362*495ae853SAndroid Build Coastguard Worker }
3363*495ae853SAndroid Build Coastguard Worker
3364*495ae853SAndroid Build Coastguard Worker /* Init mem records */
3365*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CODEC];
3366*495ae853SAndroid Build Coastguard Worker {
3367*495ae853SAndroid Build Coastguard Worker ps_codec_obj->pv_codec_handle = ps_mem_rec->pv_base;
3368*495ae853SAndroid Build Coastguard Worker ps_codec = (isvce_codec_t *) (ps_codec_obj->pv_codec_handle);
3369*495ae853SAndroid Build Coastguard Worker }
3370*495ae853SAndroid Build Coastguard Worker /* Init mem records_cabac ctxt */
3371*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CABAC];
3372*495ae853SAndroid Build Coastguard Worker {
3373*495ae853SAndroid Build Coastguard Worker ps_cabac = (isvce_cabac_ctxt_t *) (ps_mem_rec->pv_base);
3374*495ae853SAndroid Build Coastguard Worker }
3375*495ae853SAndroid Build Coastguard Worker
3376*495ae853SAndroid Build Coastguard Worker /* Init mem records mb info array for CABAC */
3377*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CABAC_MB_INFO];
3378*495ae853SAndroid Build Coastguard Worker {
3379*495ae853SAndroid Build Coastguard Worker ps_mb_map_ctxt_inc = (isvce_mb_info_ctxt_t *) (ps_mem_rec->pv_base);
3380*495ae853SAndroid Build Coastguard Worker }
3381*495ae853SAndroid Build Coastguard Worker
3382*495ae853SAndroid Build Coastguard Worker /* Note this memset can not be done in init() call, since init will called
3383*495ae853SAndroid Build Coastguard Worker during reset as well. And calling this during reset will mean all pointers
3384*495ae853SAndroid Build Coastguard Worker need to reinitialized */
3385*495ae853SAndroid Build Coastguard Worker memset(ps_codec, 0, sizeof(isvce_codec_t));
3386*495ae853SAndroid Build Coastguard Worker memset(ps_cabac, 0, sizeof(isvce_cabac_ctxt_t));
3387*495ae853SAndroid Build Coastguard Worker
3388*495ae853SAndroid Build Coastguard Worker /* Set default Config Params */
3389*495ae853SAndroid Build Coastguard Worker ps_cfg = &ps_codec->s_cfg;
3390*495ae853SAndroid Build Coastguard Worker isvce_set_default_params(ps_cfg);
3391*495ae853SAndroid Build Coastguard Worker
3392*495ae853SAndroid Build Coastguard Worker /* get new input dimensions that satisfy the SVC and libavc constraints
3393*495ae853SAndroid Build Coastguard Worker constraint 1) All layers of SVC should have dimensions that are a multiple of
3394*495ae853SAndroid Build Coastguard Worker 16 constraint 2) Dimension of Li layer = dimension of Li-1 layer * scaling
3395*495ae853SAndroid Build Coastguard Worker factor*/
3396*495ae853SAndroid Build Coastguard Worker
3397*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(ps_ip->s_svc_inp_params.u1_num_spatial_layers,
3398*495ae853SAndroid Build Coastguard Worker ps_ip->s_svc_inp_params.d_spatial_res_ratio, ps_ip->u4_wd,
3399*495ae853SAndroid Build Coastguard Worker ps_ip->u4_ht, &ps_cfg->u4_wd, &ps_cfg->u4_ht);
3400*495ae853SAndroid Build Coastguard Worker
3401*495ae853SAndroid Build Coastguard Worker /* Update config params as per input */
3402*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_wd = ps_cfg->u4_disp_wd = ALIGN16(ps_cfg->u4_wd);
3403*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_ht = ps_cfg->u4_disp_ht = ALIGN16(ps_cfg->u4_ht);
3404*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_wd_mbs = ps_cfg->u4_max_wd >> 4;
3405*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_ht_mbs = ps_cfg->u4_max_ht >> 4;
3406*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_ref_cnt = ps_ip->s_ive_ip.u4_max_ref_cnt;
3407*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_reorder_cnt = ps_ip->s_ive_ip.u4_max_reorder_cnt;
3408*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_level = ps_ip->s_ive_ip.u4_max_level;
3409*495ae853SAndroid Build Coastguard Worker ps_cfg->e_inp_color_fmt = ps_ip->s_ive_ip.e_inp_color_fmt;
3410*495ae853SAndroid Build Coastguard Worker ps_cfg->e_recon_color_fmt = ps_ip->s_ive_ip.e_recon_color_fmt;
3411*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_framerate = ps_ip->s_ive_ip.u4_max_framerate;
3412*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ip->s_svc_inp_params.u1_num_spatial_layers; i++)
3413*495ae853SAndroid Build Coastguard Worker {
3414*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_max_bitrate[i] = ps_ip->pu4_max_bitrate[i];
3415*495ae853SAndroid Build Coastguard Worker }
3416*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_num_bframes = ps_ip->s_ive_ip.u4_num_bframes;
3417*495ae853SAndroid Build Coastguard Worker ps_cfg->e_content_type = ps_ip->s_ive_ip.e_content_type;
3418*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_srch_rng_x = ps_ip->s_ive_ip.u4_max_srch_rng_x;
3419*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_srch_rng_y = ps_ip->s_ive_ip.u4_max_srch_rng_y;
3420*495ae853SAndroid Build Coastguard Worker ps_cfg->e_slice_mode = ps_ip->s_ive_ip.e_slice_mode;
3421*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_slice_param = ps_ip->s_ive_ip.u4_slice_param;
3422*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = ps_ip->s_ive_ip.e_arch;
3423*495ae853SAndroid Build Coastguard Worker ps_cfg->e_soc = ps_ip->s_ive_ip.e_soc;
3424*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_recon = ps_ip->s_ive_ip.u4_enable_recon;
3425*495ae853SAndroid Build Coastguard Worker ps_cfg->e_rc_mode = ps_ip->s_ive_ip.e_rc_mode;
3426*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disable_vui = ps_ip->b_use_default_vui;
3427*495ae853SAndroid Build Coastguard Worker
3428*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.u1_num_temporal_layers = ps_ip->s_svc_inp_params.u1_num_temporal_layers;
3429*495ae853SAndroid Build Coastguard Worker
3430*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.u1_num_spatial_layers = ps_ip->s_svc_inp_params.u1_num_spatial_layers;
3431*495ae853SAndroid Build Coastguard Worker
3432*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.d_spatial_res_ratio = ps_ip->s_svc_inp_params.d_spatial_res_ratio;
3433*495ae853SAndroid Build Coastguard Worker
3434*495ae853SAndroid Build Coastguard Worker ps_cfg->b_nalu_info_export_enable = ps_ip->b_nalu_info_export_enable;
3435*495ae853SAndroid Build Coastguard Worker
3436*495ae853SAndroid Build Coastguard Worker /* frame dimensions */
3437*495ae853SAndroid Build Coastguard Worker max_ht_luma = ALIGN16(ps_cfg->u4_ht);
3438*495ae853SAndroid Build Coastguard Worker max_wd_luma = ALIGN16(ps_cfg->u4_wd);
3439*495ae853SAndroid Build Coastguard Worker max_mb_rows = max_ht_luma / MB_SIZE;
3440*495ae853SAndroid Build Coastguard Worker max_mb_cols = max_wd_luma / MB_SIZE;
3441*495ae853SAndroid Build Coastguard Worker max_mb_cnt = max_mb_rows * max_mb_cols;
3442*495ae853SAndroid Build Coastguard Worker
3443*495ae853SAndroid Build Coastguard Worker /* Validate params */
3444*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= isvce_svc_inp_params_validate(ps_ip, ps_cfg);
3445*495ae853SAndroid Build Coastguard Worker
3446*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ive_op.u4_error_code != IV_SUCCESS)
3447*495ae853SAndroid Build Coastguard Worker {
3448*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
3449*495ae853SAndroid Build Coastguard Worker }
3450*495ae853SAndroid Build Coastguard Worker
3451*495ae853SAndroid Build Coastguard Worker #if defined(X86)
3452*495ae853SAndroid Build Coastguard Worker if((ps_cfg->e_arch != ARCH_X86_GENERIC) && (ps_cfg->e_arch != ARCH_X86_SSSE3) &&
3453*495ae853SAndroid Build Coastguard Worker (ps_cfg->e_arch != ARCH_X86_SSE42))
3454*495ae853SAndroid Build Coastguard Worker {
3455*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = ARCH_X86_SSE42;
3456*495ae853SAndroid Build Coastguard Worker }
3457*495ae853SAndroid Build Coastguard Worker #else
3458*495ae853SAndroid Build Coastguard Worker if((ps_cfg->e_arch == ARCH_X86_GENERIC) || (ps_cfg->e_arch == ARCH_X86_SSSE3) ||
3459*495ae853SAndroid Build Coastguard Worker (ps_cfg->e_arch == ARCH_X86_SSE42))
3460*495ae853SAndroid Build Coastguard Worker {
3461*495ae853SAndroid Build Coastguard Worker #if defined(DISABLE_NEON)
3462*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = ARCH_ARM_NONEON;
3463*495ae853SAndroid Build Coastguard Worker #elif defined(ARMV8)
3464*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = ARCH_ARM_V8_NEON;
3465*495ae853SAndroid Build Coastguard Worker #else
3466*495ae853SAndroid Build Coastguard Worker ps_cfg->e_arch = ARCH_ARM_A7;
3467*495ae853SAndroid Build Coastguard Worker #endif
3468*495ae853SAndroid Build Coastguard Worker }
3469*495ae853SAndroid Build Coastguard Worker #endif
3470*495ae853SAndroid Build Coastguard Worker
3471*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ive_ip.u4_max_level < MIN_LEVEL) || (ps_ip->s_ive_ip.u4_max_level > MAX_LEVEL))
3472*495ae853SAndroid Build Coastguard Worker {
3473*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_CODEC_LEVEL_NOT_SUPPORTED;
3474*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_level = DEFAULT_MAX_LEVEL;
3475*495ae853SAndroid Build Coastguard Worker }
3476*495ae853SAndroid Build Coastguard Worker
3477*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_ref_cnt > MAX_REF_CNT)
3478*495ae853SAndroid Build Coastguard Worker {
3479*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REF_UNSUPPORTED;
3480*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_ref_cnt = MAX_REF_CNT;
3481*495ae853SAndroid Build Coastguard Worker }
3482*495ae853SAndroid Build Coastguard Worker
3483*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_max_reorder_cnt > MAX_REF_CNT)
3484*495ae853SAndroid Build Coastguard Worker {
3485*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_NUM_REORDER_UNSUPPORTED;
3486*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_max_reorder_cnt = MAX_REF_CNT;
3487*495ae853SAndroid Build Coastguard Worker }
3488*495ae853SAndroid Build Coastguard Worker
3489*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_BACKUP];
3490*495ae853SAndroid Build Coastguard Worker {
3491*495ae853SAndroid Build Coastguard Worker ps_codec->ps_mem_rec_backup = (iv_mem_rec_t *) ps_mem_rec->pv_base;
3492*495ae853SAndroid Build Coastguard Worker
3493*495ae853SAndroid Build Coastguard Worker memcpy(ps_codec->ps_mem_rec_backup, ps_mem_rec_base,
3494*495ae853SAndroid Build Coastguard Worker ISVCE_MEM_REC_CNT * sizeof(iv_mem_rec_t));
3495*495ae853SAndroid Build Coastguard Worker }
3496*495ae853SAndroid Build Coastguard Worker
3497*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY];
3498*495ae853SAndroid Build Coastguard Worker {
3499*495ae853SAndroid Build Coastguard Worker /* temp var */
3500*495ae853SAndroid Build Coastguard Worker WORD32 size = 0;
3501*495ae853SAndroid Build Coastguard Worker
3502*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3503*495ae853SAndroid Build Coastguard Worker {
3504*495ae853SAndroid Build Coastguard Worker /* base ptr */
3505*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3506*495ae853SAndroid Build Coastguard Worker
3507*495ae853SAndroid Build Coastguard Worker /* reset size */
3508*495ae853SAndroid Build Coastguard Worker size = 0;
3509*495ae853SAndroid Build Coastguard Worker
3510*495ae853SAndroid Build Coastguard Worker /* skip mb run */
3511*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pi4_mb_skip_run = (WORD32 *) (pu1_buf + size);
3512*495ae853SAndroid Build Coastguard Worker size += sizeof(WORD32);
3513*495ae853SAndroid Build Coastguard Worker size = ALIGN8(size);
3514*495ae853SAndroid Build Coastguard Worker
3515*495ae853SAndroid Build Coastguard Worker /* entropy map */
3516*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pu1_entropy_map =
3517*495ae853SAndroid Build Coastguard Worker (UWORD8 *) (pu1_buf + size + max_mb_cols);
3518*495ae853SAndroid Build Coastguard Worker /* size in bytes to store entropy status of an entire frame */
3519*495ae853SAndroid Build Coastguard Worker size += (max_mb_cols * max_mb_rows);
3520*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0
3521*495ae853SAndroid Build Coastguard Worker */
3522*495ae853SAndroid Build Coastguard Worker size += max_mb_cols;
3523*495ae853SAndroid Build Coastguard Worker size = ALIGN128(size);
3524*495ae853SAndroid Build Coastguard Worker
3525*495ae853SAndroid Build Coastguard Worker /* bit stream ptr */
3526*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.ps_bitstrm = (bitstrm_t *) (pu1_buf + size);
3527*495ae853SAndroid Build Coastguard Worker size += sizeof(ps_codec->as_process[i].s_entropy.ps_bitstrm[0]);
3528*495ae853SAndroid Build Coastguard Worker size = ALIGN128(size);
3529*495ae853SAndroid Build Coastguard Worker
3530*495ae853SAndroid Build Coastguard Worker #if ENABLE_RE_ENC_AS_SKIP
3531*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.ps_bitstrm_after_slice_hdr =
3532*495ae853SAndroid Build Coastguard Worker (bitstrm_t *) (pu1_buf + size);
3533*495ae853SAndroid Build Coastguard Worker size += sizeof(ps_codec->as_process[i].s_entropy.ps_bitstrm_after_slice_hdr[0]);
3534*495ae853SAndroid Build Coastguard Worker size = ALIGN128(size);
3535*495ae853SAndroid Build Coastguard Worker #endif
3536*495ae853SAndroid Build Coastguard Worker
3537*495ae853SAndroid Build Coastguard Worker /* nnz luma */
3538*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pu1_top_nnz_luma = (UWORD8(*)[4])(pu1_buf + size);
3539*495ae853SAndroid Build Coastguard Worker size += (max_mb_cols * 4 * sizeof(UWORD8));
3540*495ae853SAndroid Build Coastguard Worker size = ALIGN128(size);
3541*495ae853SAndroid Build Coastguard Worker
3542*495ae853SAndroid Build Coastguard Worker /* nnz chroma */
3543*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pu1_top_nnz_cbcr = (UWORD8(*)[4])(pu1_buf + size);
3544*495ae853SAndroid Build Coastguard Worker size += (max_mb_cols * 4 * sizeof(UWORD8));
3545*495ae853SAndroid Build Coastguard Worker size = ALIGN128(size);
3546*495ae853SAndroid Build Coastguard Worker
3547*495ae853SAndroid Build Coastguard Worker /* ps_mb_qp_ctxt */
3548*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.ps_mb_qp_ctxt = (mb_qp_ctxt_t *) (pu1_buf + size);
3549*495ae853SAndroid Build Coastguard Worker size += ALIGN128(sizeof(ps_codec->as_process[i].s_entropy.ps_mb_qp_ctxt[0]));
3550*495ae853SAndroid Build Coastguard Worker
3551*495ae853SAndroid Build Coastguard Worker /* cabac Context */
3552*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.ps_cabac = ps_cabac;
3553*495ae853SAndroid Build Coastguard Worker }
3554*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[0].s_entropy.ps_cabac->ps_mb_map_ctxt_inc_base = ps_mb_map_ctxt_inc;
3555*495ae853SAndroid Build Coastguard Worker }
3556*495ae853SAndroid Build Coastguard Worker
3557*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_COEFF_DATA];
3558*495ae853SAndroid Build Coastguard Worker {
3559*495ae853SAndroid Build Coastguard Worker /* temp var */
3560*495ae853SAndroid Build Coastguard Worker WORD32 size = 0, size_of_row;
3561*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3562*495ae853SAndroid Build Coastguard Worker
3563*495ae853SAndroid Build Coastguard Worker /* size of coeff data of 1 mb */
3564*495ae853SAndroid Build Coastguard Worker size += sizeof(tu_sblk_coeff_data_t) * MAX_4x4_SUBBLKS;
3565*495ae853SAndroid Build Coastguard Worker
3566*495ae853SAndroid Build Coastguard Worker /* size of coeff data of 1 row of mb's */
3567*495ae853SAndroid Build Coastguard Worker size *= max_mb_cols;
3568*495ae853SAndroid Build Coastguard Worker
3569*495ae853SAndroid Build Coastguard Worker /* align to avoid false sharing */
3570*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3571*495ae853SAndroid Build Coastguard Worker size_of_row = size;
3572*495ae853SAndroid Build Coastguard Worker
3573*495ae853SAndroid Build Coastguard Worker /* size for one full frame */
3574*495ae853SAndroid Build Coastguard Worker size *= max_mb_rows;
3575*495ae853SAndroid Build Coastguard Worker
3576*495ae853SAndroid Build Coastguard Worker ps_codec->u4_size_coeff_data = size_of_row;
3577*495ae853SAndroid Build Coastguard Worker
3578*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3579*495ae853SAndroid Build Coastguard Worker {
3580*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pv_pic_mb_coeff_data = pu1_buf;
3581*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pv_pic_mb_coeff_data = pu1_buf;
3582*495ae853SAndroid Build Coastguard Worker }
3583*495ae853SAndroid Build Coastguard Worker }
3584*495ae853SAndroid Build Coastguard Worker
3585*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_HEADER_DATA];
3586*495ae853SAndroid Build Coastguard Worker {
3587*495ae853SAndroid Build Coastguard Worker /* temp var */
3588*495ae853SAndroid Build Coastguard Worker WORD32 size, size_of_row;
3589*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3590*495ae853SAndroid Build Coastguard Worker
3591*495ae853SAndroid Build Coastguard Worker /* size of header data of 1 mb */
3592*495ae853SAndroid Build Coastguard Worker size = sizeof(isvce_mb_hdr_t);
3593*495ae853SAndroid Build Coastguard Worker
3594*495ae853SAndroid Build Coastguard Worker /* size for 1 row of mbs */
3595*495ae853SAndroid Build Coastguard Worker size = size * max_mb_cols;
3596*495ae853SAndroid Build Coastguard Worker
3597*495ae853SAndroid Build Coastguard Worker /* align to avoid any false sharing across threads */
3598*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3599*495ae853SAndroid Build Coastguard Worker size_of_row = size;
3600*495ae853SAndroid Build Coastguard Worker
3601*495ae853SAndroid Build Coastguard Worker /* size for one full frame */
3602*495ae853SAndroid Build Coastguard Worker size *= max_mb_rows;
3603*495ae853SAndroid Build Coastguard Worker
3604*495ae853SAndroid Build Coastguard Worker ps_codec->u4_size_header_data = size_of_row;
3605*495ae853SAndroid Build Coastguard Worker
3606*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3607*495ae853SAndroid Build Coastguard Worker {
3608*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pv_pic_mb_header_data = pu1_buf;
3609*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_entropy.pv_pic_mb_header_data = pu1_buf;
3610*495ae853SAndroid Build Coastguard Worker }
3611*495ae853SAndroid Build Coastguard Worker }
3612*495ae853SAndroid Build Coastguard Worker
3613*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MVBITS];
3614*495ae853SAndroid Build Coastguard Worker {
3615*495ae853SAndroid Build Coastguard Worker /* max srch range x */
3616*495ae853SAndroid Build Coastguard Worker UWORD32 u4_srch_range_x = ps_ip->s_ive_ip.u4_max_srch_rng_x;
3617*495ae853SAndroid Build Coastguard Worker
3618*495ae853SAndroid Build Coastguard Worker /* max srch range y */
3619*495ae853SAndroid Build Coastguard Worker UWORD32 u4_srch_range_y = ps_ip->s_ive_ip.u4_max_srch_rng_y;
3620*495ae853SAndroid Build Coastguard Worker
3621*495ae853SAndroid Build Coastguard Worker /* max srch range */
3622*495ae853SAndroid Build Coastguard Worker UWORD32 u4_max_srch_range = MAX(u4_srch_range_x, u4_srch_range_y);
3623*495ae853SAndroid Build Coastguard Worker
3624*495ae853SAndroid Build Coastguard Worker /* temp var */
3625*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3626*495ae853SAndroid Build Coastguard Worker
3627*495ae853SAndroid Build Coastguard Worker /* due to subpel */
3628*495ae853SAndroid Build Coastguard Worker u4_max_srch_range <<= 2;
3629*495ae853SAndroid Build Coastguard Worker
3630*495ae853SAndroid Build Coastguard Worker // /* due to mv on either direction */
3631*495ae853SAndroid Build Coastguard Worker // u4_max_srch_range = (u4_max_srch_range << 1);
3632*495ae853SAndroid Build Coastguard Worker
3633*495ae853SAndroid Build Coastguard Worker /* due to pred mv + zero */
3634*495ae853SAndroid Build Coastguard Worker u4_max_srch_range = (u4_max_srch_range << 1) + 1;
3635*495ae853SAndroid Build Coastguard Worker
3636*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3637*495ae853SAndroid Build Coastguard Worker {
3638*495ae853SAndroid Build Coastguard Worker /* me ctxt */
3639*495ae853SAndroid Build Coastguard Worker isvce_me_ctxt_t *ps_mem_ctxt = &(ps_codec->as_process[i].s_me_ctxt);
3640*495ae853SAndroid Build Coastguard Worker
3641*495ae853SAndroid Build Coastguard Worker /* init at zero mv */
3642*495ae853SAndroid Build Coastguard Worker ps_mem_ctxt->pu1_mv_bits = pu1_buf + u4_max_srch_range;
3643*495ae853SAndroid Build Coastguard Worker }
3644*495ae853SAndroid Build Coastguard Worker }
3645*495ae853SAndroid Build Coastguard Worker
3646*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SPS];
3647*495ae853SAndroid Build Coastguard Worker {
3648*495ae853SAndroid Build Coastguard Worker ps_codec->ps_sps_base = (sps_t *) ps_mem_rec->pv_base;
3649*495ae853SAndroid Build Coastguard Worker }
3650*495ae853SAndroid Build Coastguard Worker
3651*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PPS];
3652*495ae853SAndroid Build Coastguard Worker {
3653*495ae853SAndroid Build Coastguard Worker ps_codec->ps_pps_base = (pps_t *) ps_mem_rec->pv_base;
3654*495ae853SAndroid Build Coastguard Worker }
3655*495ae853SAndroid Build Coastguard Worker
3656*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SVC_NALU_EXT];
3657*495ae853SAndroid Build Coastguard Worker {
3658*495ae853SAndroid Build Coastguard Worker ps_codec->ps_svc_nalu_ext_base = ps_mem_rec->pv_base;
3659*495ae853SAndroid Build Coastguard Worker
3660*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3661*495ae853SAndroid Build Coastguard Worker {
3662*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_svc_nalu_ext_base = ps_mem_rec->pv_base;
3663*495ae853SAndroid Build Coastguard Worker }
3664*495ae853SAndroid Build Coastguard Worker }
3665*495ae853SAndroid Build Coastguard Worker
3666*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SUBSET_SPS];
3667*495ae853SAndroid Build Coastguard Worker {
3668*495ae853SAndroid Build Coastguard Worker ps_codec->ps_subset_sps_base = ps_mem_rec->pv_base;
3669*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3670*495ae853SAndroid Build Coastguard Worker {
3671*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_subset_sps_base = ps_mem_rec->pv_base;
3672*495ae853SAndroid Build Coastguard Worker }
3673*495ae853SAndroid Build Coastguard Worker }
3674*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SLICE_HDR];
3675*495ae853SAndroid Build Coastguard Worker {
3676*495ae853SAndroid Build Coastguard Worker ps_codec->ps_slice_hdr_base = ps_mem_rec->pv_base;
3677*495ae853SAndroid Build Coastguard Worker
3678*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3679*495ae853SAndroid Build Coastguard Worker {
3680*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_slice_hdr_base = ps_mem_rec->pv_base;
3681*495ae853SAndroid Build Coastguard Worker }
3682*495ae853SAndroid Build Coastguard Worker }
3683*495ae853SAndroid Build Coastguard Worker
3684*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SVC_SLICE_HDR];
3685*495ae853SAndroid Build Coastguard Worker {
3686*495ae853SAndroid Build Coastguard Worker ps_codec->ps_svc_slice_hdr_base = ps_mem_rec->pv_base;
3687*495ae853SAndroid Build Coastguard Worker
3688*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3689*495ae853SAndroid Build Coastguard Worker {
3690*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_svc_slice_hdr_base = ps_mem_rec->pv_base;
3691*495ae853SAndroid Build Coastguard Worker }
3692*495ae853SAndroid Build Coastguard Worker }
3693*495ae853SAndroid Build Coastguard Worker
3694*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_AIR_MAP];
3695*495ae853SAndroid Build Coastguard Worker {
3696*495ae853SAndroid Build Coastguard Worker /* temp var */
3697*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3698*495ae853SAndroid Build Coastguard Worker
3699*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3700*495ae853SAndroid Build Coastguard Worker {
3701*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_is_intra_coded = pu1_buf;
3702*495ae853SAndroid Build Coastguard Worker }
3703*495ae853SAndroid Build Coastguard Worker
3704*495ae853SAndroid Build Coastguard Worker ps_codec->pu2_intr_rfrsh_map = (UWORD16 *) (pu1_buf + max_mb_cnt * MAX_CTXT_SETS);
3705*495ae853SAndroid Build Coastguard Worker }
3706*495ae853SAndroid Build Coastguard Worker
3707*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_SLICE_MAP];
3708*495ae853SAndroid Build Coastguard Worker {
3709*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3710*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf_ping;
3711*495ae853SAndroid Build Coastguard Worker
3712*495ae853SAndroid Build Coastguard Worker /* init pointer */
3713*495ae853SAndroid Build Coastguard Worker pu1_buf_ping = ps_mem_rec->pv_base;
3714*495ae853SAndroid Build Coastguard Worker
3715*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3716*495ae853SAndroid Build Coastguard Worker {
3717*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_slice_idx = pu1_buf_ping;
3718*495ae853SAndroid Build Coastguard Worker }
3719*495ae853SAndroid Build Coastguard Worker }
3720*495ae853SAndroid Build Coastguard Worker
3721*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_THREAD_HANDLE];
3722*495ae853SAndroid Build Coastguard Worker {
3723*495ae853SAndroid Build Coastguard Worker WORD32 handle_size = ithread_get_handle_size();
3724*495ae853SAndroid Build Coastguard Worker
3725*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_THREADS; i++)
3726*495ae853SAndroid Build Coastguard Worker {
3727*495ae853SAndroid Build Coastguard Worker ps_codec->apv_proc_thread_handle[i] =
3728*495ae853SAndroid Build Coastguard Worker (UWORD8 *) ps_mem_rec->pv_base + (i * handle_size);
3729*495ae853SAndroid Build Coastguard Worker }
3730*495ae853SAndroid Build Coastguard Worker }
3731*495ae853SAndroid Build Coastguard Worker
3732*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CTL_MUTEX];
3733*495ae853SAndroid Build Coastguard Worker {
3734*495ae853SAndroid Build Coastguard Worker ps_codec->pv_ctl_mutex = ps_mem_rec->pv_base;
3735*495ae853SAndroid Build Coastguard Worker }
3736*495ae853SAndroid Build Coastguard Worker
3737*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY_MUTEX];
3738*495ae853SAndroid Build Coastguard Worker {
3739*495ae853SAndroid Build Coastguard Worker ps_codec->pv_entropy_mutex = ps_mem_rec->pv_base;
3740*495ae853SAndroid Build Coastguard Worker }
3741*495ae853SAndroid Build Coastguard Worker
3742*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_JOBQ];
3743*495ae853SAndroid Build Coastguard Worker {
3744*495ae853SAndroid Build Coastguard Worker ps_codec->pv_proc_jobq_buf = ps_mem_rec->pv_base;
3745*495ae853SAndroid Build Coastguard Worker ps_codec->i4_proc_jobq_buf_size = ps_mem_rec->u4_mem_size;
3746*495ae853SAndroid Build Coastguard Worker }
3747*495ae853SAndroid Build Coastguard Worker
3748*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ENTROPY_JOBQ];
3749*495ae853SAndroid Build Coastguard Worker {
3750*495ae853SAndroid Build Coastguard Worker ps_codec->pv_entropy_jobq_buf = ps_mem_rec->pv_base;
3751*495ae853SAndroid Build Coastguard Worker ps_codec->i4_entropy_jobq_buf_size = ps_mem_rec->u4_mem_size;
3752*495ae853SAndroid Build Coastguard Worker }
3753*495ae853SAndroid Build Coastguard Worker
3754*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_MAP];
3755*495ae853SAndroid Build Coastguard Worker {
3756*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3757*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3758*495ae853SAndroid Build Coastguard Worker
3759*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3760*495ae853SAndroid Build Coastguard Worker {
3761*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_proc_map = pu1_buf + max_mb_cols;
3762*495ae853SAndroid Build Coastguard Worker }
3763*495ae853SAndroid Build Coastguard Worker }
3764*495ae853SAndroid Build Coastguard Worker
3765*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_DBLK_MAP];
3766*495ae853SAndroid Build Coastguard Worker {
3767*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3768*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
3769*495ae853SAndroid Build Coastguard Worker
3770*495ae853SAndroid Build Coastguard Worker /* total size of the mem record */
3771*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
3772*495ae853SAndroid Build Coastguard Worker
3773*495ae853SAndroid Build Coastguard Worker /* size in bytes to mb core coding status of an entire frame */
3774*495ae853SAndroid Build Coastguard Worker total_size = max_mb_cnt;
3775*495ae853SAndroid Build Coastguard Worker
3776*495ae853SAndroid Build Coastguard Worker /* add an additional 1 row of bytes to evade the special case of row 0 */
3777*495ae853SAndroid Build Coastguard Worker total_size += max_mb_cols;
3778*495ae853SAndroid Build Coastguard Worker
3779*495ae853SAndroid Build Coastguard Worker /*Align the memory offsets*/
3780*495ae853SAndroid Build Coastguard Worker total_size = ALIGN64(total_size);
3781*495ae853SAndroid Build Coastguard Worker
3782*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3783*495ae853SAndroid Build Coastguard Worker {
3784*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_deblk_map = pu1_buf + max_mb_cols;
3785*495ae853SAndroid Build Coastguard Worker }
3786*495ae853SAndroid Build Coastguard Worker }
3787*495ae853SAndroid Build Coastguard Worker
3788*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_ME_MAP];
3789*495ae853SAndroid Build Coastguard Worker {
3790*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3791*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = (UWORD8 *) ps_mem_rec->pv_base;
3792*495ae853SAndroid Build Coastguard Worker
3793*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3794*495ae853SAndroid Build Coastguard Worker {
3795*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_me_map = pu1_buf + max_mb_cols;
3796*495ae853SAndroid Build Coastguard Worker }
3797*495ae853SAndroid Build Coastguard Worker }
3798*495ae853SAndroid Build Coastguard Worker
3799*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_DPB_MGR];
3800*495ae853SAndroid Build Coastguard Worker {
3801*495ae853SAndroid Build Coastguard Worker ps_codec->pv_dpb_mgr = ps_mem_rec->pv_base;
3802*495ae853SAndroid Build Coastguard Worker }
3803*495ae853SAndroid Build Coastguard Worker
3804*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_PROC_SCRATCH];
3805*495ae853SAndroid Build Coastguard Worker {
3806*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3807*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = (UWORD8 *) ps_mem_rec->pv_base;
3808*495ae853SAndroid Build Coastguard Worker
3809*495ae853SAndroid Build Coastguard Worker /* size of pred buffer, fwd transform output, temp buffer for inv tra */
3810*495ae853SAndroid Build Coastguard Worker WORD32 size_pred_luma, size_pred_chroma, size_fwd, size_inv, size_hp;
3811*495ae853SAndroid Build Coastguard Worker
3812*495ae853SAndroid Build Coastguard Worker /* temp var */
3813*495ae853SAndroid Build Coastguard Worker WORD32 size = 0;
3814*495ae853SAndroid Build Coastguard Worker
3815*495ae853SAndroid Build Coastguard Worker /* size to hold intra/inter prediction buffer */
3816*495ae853SAndroid Build Coastguard Worker size_pred_luma = sizeof(UWORD8) * 16 * 16;
3817*495ae853SAndroid Build Coastguard Worker size_pred_chroma = sizeof(UWORD8) * 8 * 16;
3818*495ae853SAndroid Build Coastguard Worker
3819*495ae853SAndroid Build Coastguard Worker /* size to hold fwd transform output */
3820*495ae853SAndroid Build Coastguard Worker size_fwd = sizeof(WORD16) * SIZE_TRANS_BUFF;
3821*495ae853SAndroid Build Coastguard Worker
3822*495ae853SAndroid Build Coastguard Worker /* size to hold temporary data during inverse transform */
3823*495ae853SAndroid Build Coastguard Worker size_inv = sizeof(WORD32) * SIZE_TMP_BUFF_ITRANS;
3824*495ae853SAndroid Build Coastguard Worker
3825*495ae853SAndroid Build Coastguard Worker /* size to hold half pel plane buffers */
3826*495ae853SAndroid Build Coastguard Worker size_hp = sizeof(UWORD8) * (HP_BUFF_WD * HP_BUFF_HT);
3827*495ae853SAndroid Build Coastguard Worker
3828*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3829*495ae853SAndroid Build Coastguard Worker {
3830*495ae853SAndroid Build Coastguard Worker /* prediction buffer */
3831*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_pred_mb = (void *) (pu1_buf + size);
3832*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].i4_pred_strd = 16;
3833*495ae853SAndroid Build Coastguard Worker size += size_pred_luma;
3834*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3835*495ae853SAndroid Build Coastguard Worker
3836*495ae853SAndroid Build Coastguard Worker /* prediction buffer */
3837*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_ref_mb_intra_4x4 = (void *) (pu1_buf + size);
3838*495ae853SAndroid Build Coastguard Worker size += size_pred_luma;
3839*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3840*495ae853SAndroid Build Coastguard Worker
3841*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra 16x16 */
3842*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_pred_mb_intra_16x16 = (void *) (pu1_buf + size);
3843*495ae853SAndroid Build Coastguard Worker size += size_pred_luma;
3844*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3845*495ae853SAndroid Build Coastguard Worker
3846*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra 16x16 plane*/
3847*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_pred_mb_intra_16x16_plane = (void *) (pu1_buf + size);
3848*495ae853SAndroid Build Coastguard Worker size += size_pred_luma;
3849*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3850*495ae853SAndroid Build Coastguard Worker
3851*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra chroma*/
3852*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_pred_mb_intra_chroma = (void *) (pu1_buf + size);
3853*495ae853SAndroid Build Coastguard Worker size += size_pred_chroma;
3854*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3855*495ae853SAndroid Build Coastguard Worker
3856*495ae853SAndroid Build Coastguard Worker /* prediction buffer intra chroma plane*/
3857*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pu1_pred_mb_intra_chroma_plane = (void *) (pu1_buf + size);
3858*495ae853SAndroid Build Coastguard Worker size += size_pred_chroma;
3859*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3860*495ae853SAndroid Build Coastguard Worker
3861*495ae853SAndroid Build Coastguard Worker /* Fwd transform output */
3862*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pi2_res_buf = (void *) (pu1_buf + size);
3863*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].i4_res_strd = 16;
3864*495ae853SAndroid Build Coastguard Worker size += size_fwd;
3865*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3866*495ae853SAndroid Build Coastguard Worker
3867*495ae853SAndroid Build Coastguard Worker /* Fwd transform output */
3868*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pi2_res_buf_intra_4x4 = (void *) (pu1_buf + size);
3869*495ae853SAndroid Build Coastguard Worker size += size_fwd;
3870*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3871*495ae853SAndroid Build Coastguard Worker
3872*495ae853SAndroid Build Coastguard Worker /* scratch buffer used during inverse transform */
3873*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].pv_scratch_buff = (void *) (pu1_buf + size);
3874*495ae853SAndroid Build Coastguard Worker size += size_inv;
3875*495ae853SAndroid Build Coastguard Worker size = ALIGN64(size);
3876*495ae853SAndroid Build Coastguard Worker
3877*495ae853SAndroid Build Coastguard Worker for(j = 0; j < SUBPEL_BUFF_CNT; j++)
3878*495ae853SAndroid Build Coastguard Worker {
3879*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].apu1_subpel_buffs[j] = (pu1_buf + size);
3880*495ae853SAndroid Build Coastguard Worker size += ALIGN64(size_hp);
3881*495ae853SAndroid Build Coastguard Worker }
3882*495ae853SAndroid Build Coastguard Worker }
3883*495ae853SAndroid Build Coastguard Worker }
3884*495ae853SAndroid Build Coastguard Worker
3885*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_QUANT_PARAM];
3886*495ae853SAndroid Build Coastguard Worker {
3887*495ae853SAndroid Build Coastguard Worker /* pointer to storage space */
3888*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = (UWORD8 *) ps_mem_rec->pv_base;
3889*495ae853SAndroid Build Coastguard Worker
3890*495ae853SAndroid Build Coastguard Worker /* size of qp, threshold matrix, fwd scaling list for one plane */
3891*495ae853SAndroid Build Coastguard Worker WORD32 size_quant_param, size_thres_mat, size_fwd_weight_mat, size_satqd_weight_mat;
3892*495ae853SAndroid Build Coastguard Worker
3893*495ae853SAndroid Build Coastguard Worker /* temp var */
3894*495ae853SAndroid Build Coastguard Worker WORD32 total_size = 0;
3895*495ae853SAndroid Build Coastguard Worker
3896*495ae853SAndroid Build Coastguard Worker /* size of quantization parameter list of 1 plane */
3897*495ae853SAndroid Build Coastguard Worker size_quant_param = ALIGN64(sizeof(quant_params_t));
3898*495ae853SAndroid Build Coastguard Worker
3899*495ae853SAndroid Build Coastguard Worker /* size of threshold matrix for quantization
3900*495ae853SAndroid Build Coastguard Worker * (assuming the transform_8x8_flag is disabled).
3901*495ae853SAndroid Build Coastguard Worker * for 1 plane */
3902*495ae853SAndroid Build Coastguard Worker size_thres_mat = ALIGN64(sizeof(WORD16) * 4 * 4);
3903*495ae853SAndroid Build Coastguard Worker
3904*495ae853SAndroid Build Coastguard Worker /* size of forward weight matrix for quantization
3905*495ae853SAndroid Build Coastguard Worker * (assuming the transform_8x8_flag is disabled).
3906*495ae853SAndroid Build Coastguard Worker * for 1 plane */
3907*495ae853SAndroid Build Coastguard Worker size_fwd_weight_mat = ALIGN64(sizeof(WORD16) * 4 * 4);
3908*495ae853SAndroid Build Coastguard Worker
3909*495ae853SAndroid Build Coastguard Worker /* size of SATQD matrix*/
3910*495ae853SAndroid Build Coastguard Worker size_satqd_weight_mat = ALIGN64(sizeof(UWORD16) * 9);
3911*495ae853SAndroid Build Coastguard Worker
3912*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3913*495ae853SAndroid Build Coastguard Worker {
3914*495ae853SAndroid Build Coastguard Worker quant_params_t **ps_qp_params = ps_codec->as_process[i].ps_qp_params;
3915*495ae853SAndroid Build Coastguard Worker
3916*495ae853SAndroid Build Coastguard Worker /* quantization param structure */
3917*495ae853SAndroid Build Coastguard Worker ps_qp_params[0] = (quant_params_t *) (pu1_buf + total_size);
3918*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_quant_param;
3919*495ae853SAndroid Build Coastguard Worker ps_qp_params[1] = (quant_params_t *) (pu1_buf + total_size);
3920*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_quant_param;
3921*495ae853SAndroid Build Coastguard Worker ps_qp_params[2] = (quant_params_t *) (pu1_buf + total_size);
3922*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_quant_param;
3923*495ae853SAndroid Build Coastguard Worker
3924*495ae853SAndroid Build Coastguard Worker /* threshold matrix for quantization */
3925*495ae853SAndroid Build Coastguard Worker ps_qp_params[0]->pu2_thres_mat = (void *) (pu1_buf + total_size);
3926*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_thres_mat;
3927*495ae853SAndroid Build Coastguard Worker ps_qp_params[1]->pu2_thres_mat = (void *) (pu1_buf + total_size);
3928*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_thres_mat;
3929*495ae853SAndroid Build Coastguard Worker ps_qp_params[2]->pu2_thres_mat = (void *) (pu1_buf + total_size);
3930*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_thres_mat;
3931*495ae853SAndroid Build Coastguard Worker
3932*495ae853SAndroid Build Coastguard Worker /* fwd weight matrix */
3933*495ae853SAndroid Build Coastguard Worker ps_qp_params[0]->pu2_weigh_mat = (void *) (pu1_buf + total_size);
3934*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_fwd_weight_mat;
3935*495ae853SAndroid Build Coastguard Worker ps_qp_params[1]->pu2_weigh_mat = (void *) (pu1_buf + total_size);
3936*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_fwd_weight_mat;
3937*495ae853SAndroid Build Coastguard Worker ps_qp_params[2]->pu2_weigh_mat = (void *) (pu1_buf + total_size);
3938*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_fwd_weight_mat;
3939*495ae853SAndroid Build Coastguard Worker
3940*495ae853SAndroid Build Coastguard Worker /* threshold matrix for SATQD */
3941*495ae853SAndroid Build Coastguard Worker ps_qp_params[0]->pu2_sad_thrsh = (void *) (pu1_buf + total_size);
3942*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_satqd_weight_mat;
3943*495ae853SAndroid Build Coastguard Worker ps_qp_params[1]->pu2_sad_thrsh = (void *) (pu1_buf + total_size);
3944*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_satqd_weight_mat;
3945*495ae853SAndroid Build Coastguard Worker ps_qp_params[2]->pu2_sad_thrsh = (void *) (pu1_buf + total_size);
3946*495ae853SAndroid Build Coastguard Worker total_size = total_size + size_satqd_weight_mat;
3947*495ae853SAndroid Build Coastguard Worker
3948*495ae853SAndroid Build Coastguard Worker total_size = ALIGN128(total_size);
3949*495ae853SAndroid Build Coastguard Worker }
3950*495ae853SAndroid Build Coastguard Worker }
3951*495ae853SAndroid Build Coastguard Worker
3952*495ae853SAndroid Build Coastguard Worker isvce_svc_nbr_info_buf_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_REC_TOP_ROW_SYN_INFO]);
3953*495ae853SAndroid Build Coastguard Worker
3954*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_BS_QP];
3955*495ae853SAndroid Build Coastguard Worker {
3956*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf_ping;
3957*495ae853SAndroid Build Coastguard Worker
3958*495ae853SAndroid Build Coastguard Worker /* size in bytes to store vertical edge bs, horizontal edge bs and qp of
3959*495ae853SAndroid Build Coastguard Worker * every mb*/
3960*495ae853SAndroid Build Coastguard Worker WORD32 vert_bs_size, horz_bs_size, qp_size;
3961*495ae853SAndroid Build Coastguard Worker
3962*495ae853SAndroid Build Coastguard Worker /* vertical edge bs = total number of vertical edges * number of bytes per
3963*495ae853SAndroid Build Coastguard Worker * each edge */
3964*495ae853SAndroid Build Coastguard Worker /* total num of v edges = total mb * 4 (assuming transform_8x8_flag = 0),
3965*495ae853SAndroid Build Coastguard Worker * each edge is formed by 4 pairs of subblks, requiring 4 bytes to storing
3966*495ae853SAndroid Build Coastguard Worker * bs */
3967*495ae853SAndroid Build Coastguard Worker vert_bs_size = ALIGN64(max_mb_cnt * 4 * 4);
3968*495ae853SAndroid Build Coastguard Worker
3969*495ae853SAndroid Build Coastguard Worker /* horizontal edge bs = total number of horizontal edges * number of bytes
3970*495ae853SAndroid Build Coastguard Worker * per each edge */
3971*495ae853SAndroid Build Coastguard Worker /* total num of h edges = total mb * 4 (assuming transform_8x8_flag = 0),
3972*495ae853SAndroid Build Coastguard Worker * each edge is formed by 4 pairs of subblks, requiring 4 bytes to storing
3973*495ae853SAndroid Build Coastguard Worker * bs */
3974*495ae853SAndroid Build Coastguard Worker horz_bs_size = ALIGN64(max_mb_cnt * 4 * 4);
3975*495ae853SAndroid Build Coastguard Worker
3976*495ae853SAndroid Build Coastguard Worker /* qp of each mb requires 1 byte */
3977*495ae853SAndroid Build Coastguard Worker qp_size = ALIGN64(max_mb_cnt);
3978*495ae853SAndroid Build Coastguard Worker
3979*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
3980*495ae853SAndroid Build Coastguard Worker {
3981*495ae853SAndroid Build Coastguard Worker pu1_buf_ping = (UWORD8 *) ps_mem_rec->pv_base;
3982*495ae853SAndroid Build Coastguard Worker
3983*495ae853SAndroid Build Coastguard Worker /* vertical edge bs storage space */
3984*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_vert_bs =
3985*495ae853SAndroid Build Coastguard Worker (UWORD32 *) pu1_buf_ping;
3986*495ae853SAndroid Build Coastguard Worker pu1_buf_ping += vert_bs_size;
3987*495ae853SAndroid Build Coastguard Worker
3988*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_intra_base_vert_bs =
3989*495ae853SAndroid Build Coastguard Worker (UWORD32 *) pu1_buf_ping;
3990*495ae853SAndroid Build Coastguard Worker pu1_buf_ping += vert_bs_size;
3991*495ae853SAndroid Build Coastguard Worker
3992*495ae853SAndroid Build Coastguard Worker /* horizontal edge bs storage space */
3993*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_horz_bs =
3994*495ae853SAndroid Build Coastguard Worker (UWORD32 *) pu1_buf_ping;
3995*495ae853SAndroid Build Coastguard Worker pu1_buf_ping += horz_bs_size;
3996*495ae853SAndroid Build Coastguard Worker
3997*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_intra_base_horz_bs =
3998*495ae853SAndroid Build Coastguard Worker (UWORD32 *) pu1_buf_ping;
3999*495ae853SAndroid Build Coastguard Worker pu1_buf_ping += horz_bs_size;
4000*495ae853SAndroid Build Coastguard Worker
4001*495ae853SAndroid Build Coastguard Worker /* qp */
4002*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp = (UWORD8 *) pu1_buf_ping;
4003*495ae853SAndroid Build Coastguard Worker pu1_buf_ping += qp_size;
4004*495ae853SAndroid Build Coastguard Worker }
4005*495ae853SAndroid Build Coastguard Worker }
4006*495ae853SAndroid Build Coastguard Worker
4007*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_INP_PIC];
4008*495ae853SAndroid Build Coastguard Worker {
4009*495ae853SAndroid Build Coastguard Worker ps_codec->pv_inp_buf_mgr_base = ps_mem_rec->pv_base;
4010*495ae853SAndroid Build Coastguard Worker }
4011*495ae853SAndroid Build Coastguard Worker
4012*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_OUT];
4013*495ae853SAndroid Build Coastguard Worker {
4014*495ae853SAndroid Build Coastguard Worker ps_codec->pv_out_buf_mgr_base = ps_mem_rec->pv_base;
4015*495ae853SAndroid Build Coastguard Worker }
4016*495ae853SAndroid Build Coastguard Worker
4017*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_CSC];
4018*495ae853SAndroid Build Coastguard Worker {
4019*495ae853SAndroid Build Coastguard Worker ps_codec->pu1_y_csc_buf_base = ps_mem_rec->pv_base;
4020*495ae853SAndroid Build Coastguard Worker ps_codec->pu1_uv_csc_buf_base =
4021*495ae853SAndroid Build Coastguard Worker (UWORD8 *) ps_mem_rec->pv_base + (max_ht_luma * max_wd_luma);
4022*495ae853SAndroid Build Coastguard Worker }
4023*495ae853SAndroid Build Coastguard Worker
4024*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_REF_PIC];
4025*495ae853SAndroid Build Coastguard Worker {
4026*495ae853SAndroid Build Coastguard Worker /* size of buf mgr struct */
4027*495ae853SAndroid Build Coastguard Worker WORD32 size = ih264_buf_mgr_size();
4028*495ae853SAndroid Build Coastguard Worker
4029*495ae853SAndroid Build Coastguard Worker /* temp var */
4030*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
4031*495ae853SAndroid Build Coastguard Worker
4032*495ae853SAndroid Build Coastguard Worker /* pic buffer mgr */
4033*495ae853SAndroid Build Coastguard Worker ps_codec->pv_ref_buf_mgr_base = pu1_buf;
4034*495ae853SAndroid Build Coastguard Worker
4035*495ae853SAndroid Build Coastguard Worker /* picture bank */
4036*495ae853SAndroid Build Coastguard Worker ps_codec->ps_pic_buf_base = (svc_au_buf_t *) (pu1_buf + size);
4037*495ae853SAndroid Build Coastguard Worker ps_codec->i4_total_pic_buf_size = ps_mem_rec->u4_mem_size - size;
4038*495ae853SAndroid Build Coastguard Worker }
4039*495ae853SAndroid Build Coastguard Worker
4040*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MVBANK];
4041*495ae853SAndroid Build Coastguard Worker {
4042*495ae853SAndroid Build Coastguard Worker /* size of buf mgr struct */
4043*495ae853SAndroid Build Coastguard Worker WORD32 size = ih264_buf_mgr_size();
4044*495ae853SAndroid Build Coastguard Worker
4045*495ae853SAndroid Build Coastguard Worker /* temp var */
4046*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
4047*495ae853SAndroid Build Coastguard Worker
4048*495ae853SAndroid Build Coastguard Worker /* mv buffer mgr */
4049*495ae853SAndroid Build Coastguard Worker ps_codec->pv_svc_au_data_store_mgr_base = pu1_buf;
4050*495ae853SAndroid Build Coastguard Worker
4051*495ae853SAndroid Build Coastguard Worker /* mv bank */
4052*495ae853SAndroid Build Coastguard Worker ps_codec->ps_svc_au_data_base = (svc_au_data_t *) (pu1_buf + size);
4053*495ae853SAndroid Build Coastguard Worker ps_codec->i4_svc_au_data_size = ps_mem_rec->u4_mem_size - size;
4054*495ae853SAndroid Build Coastguard Worker }
4055*495ae853SAndroid Build Coastguard Worker
4056*495ae853SAndroid Build Coastguard Worker ps_mem_rec = &ps_mem_rec_base[ISVCE_MEM_REC_MB_INFO_NMB];
4057*495ae853SAndroid Build Coastguard Worker {
4058*495ae853SAndroid Build Coastguard Worker /* temp var */
4059*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = ps_mem_rec->pv_base;
4060*495ae853SAndroid Build Coastguard Worker
4061*495ae853SAndroid Build Coastguard Worker /* size of nmb ctxt */
4062*495ae853SAndroid Build Coastguard Worker WORD32 size = max_mb_cols * sizeof(isvce_mb_info_nmb_t);
4063*495ae853SAndroid Build Coastguard Worker
4064*495ae853SAndroid Build Coastguard Worker WORD32 nmb_cntr, subpel_buf_size;
4065*495ae853SAndroid Build Coastguard Worker
4066*495ae853SAndroid Build Coastguard Worker /* init nmb info structure pointer in all proc ctxts */
4067*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
4068*495ae853SAndroid Build Coastguard Worker {
4069*495ae853SAndroid Build Coastguard Worker ps_codec->as_process[i].ps_nmb_info = (isvce_mb_info_nmb_t *) (pu1_buf);
4070*495ae853SAndroid Build Coastguard Worker
4071*495ae853SAndroid Build Coastguard Worker pu1_buf += size;
4072*495ae853SAndroid Build Coastguard Worker }
4073*495ae853SAndroid Build Coastguard Worker
4074*495ae853SAndroid Build Coastguard Worker /* Additional 4 bytes to allow use of '_mm_loadl_epi64' */
4075*495ae853SAndroid Build Coastguard Worker subpel_buf_size = (MB_SIZE * MB_SIZE + 4) * sizeof(UWORD8);
4076*495ae853SAndroid Build Coastguard Worker
4077*495ae853SAndroid Build Coastguard Worker /* adjusting pointers for nmb halfpel buffer */
4078*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_PROCESS_CTXT; i++)
4079*495ae853SAndroid Build Coastguard Worker {
4080*495ae853SAndroid Build Coastguard Worker isvce_mb_info_nmb_t *ps_mb_info_nmb = &ps_codec->as_process[i].ps_nmb_info[0];
4081*495ae853SAndroid Build Coastguard Worker
4082*495ae853SAndroid Build Coastguard Worker for(nmb_cntr = 0; nmb_cntr < max_mb_cols; nmb_cntr++)
4083*495ae853SAndroid Build Coastguard Worker {
4084*495ae853SAndroid Build Coastguard Worker ps_mb_info_nmb[nmb_cntr].pu1_best_sub_pel_buf = pu1_buf;
4085*495ae853SAndroid Build Coastguard Worker
4086*495ae853SAndroid Build Coastguard Worker pu1_buf = pu1_buf + subpel_buf_size;
4087*495ae853SAndroid Build Coastguard Worker
4088*495ae853SAndroid Build Coastguard Worker ps_mb_info_nmb[nmb_cntr].u4_bst_spel_buf_strd = MB_SIZE;
4089*495ae853SAndroid Build Coastguard Worker }
4090*495ae853SAndroid Build Coastguard Worker }
4091*495ae853SAndroid Build Coastguard Worker }
4092*495ae853SAndroid Build Coastguard Worker
4093*495ae853SAndroid Build Coastguard Worker isvce_svc_inp_buf_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_SPAT_INP]);
4094*495ae853SAndroid Build Coastguard Worker
4095*495ae853SAndroid Build Coastguard Worker isvce_initialize_downscaler(&ps_codec->s_scaler, &ps_mem_rec_base[ISVCE_MEM_DOWN_SCALER],
4096*495ae853SAndroid Build Coastguard Worker ps_codec->s_cfg.s_svc_params.d_spatial_res_ratio,
4097*495ae853SAndroid Build Coastguard Worker ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers,
4098*495ae853SAndroid Build Coastguard Worker ps_codec->s_cfg.u4_wd, ps_codec->s_cfg.u4_ht,
4099*495ae853SAndroid Build Coastguard Worker ps_codec->s_cfg.e_arch);
4100*495ae853SAndroid Build Coastguard Worker
4101*495ae853SAndroid Build Coastguard Worker isvce_svc_ilp_buf_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_ILP_DATA]);
4102*495ae853SAndroid Build Coastguard Worker
4103*495ae853SAndroid Build Coastguard Worker isvce_ilp_mv_ctxt_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_ILP_MV_CTXT]);
4104*495ae853SAndroid Build Coastguard Worker
4105*495ae853SAndroid Build Coastguard Worker isvce_svc_res_pred_ctxt_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_RES_PRED_CTXT]);
4106*495ae853SAndroid Build Coastguard Worker
4107*495ae853SAndroid Build Coastguard Worker isvce_intra_pred_ctxt_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_INTRA_PRED_CTXT]);
4108*495ae853SAndroid Build Coastguard Worker
4109*495ae853SAndroid Build Coastguard Worker isvce_rc_utils_init(&ps_codec->s_rate_control.s_rc_utils,
4110*495ae853SAndroid Build Coastguard Worker &ps_mem_rec_base[ISVCE_MEM_SVC_RC_UTILS_CTXT], ps_codec->s_cfg.e_arch);
4111*495ae853SAndroid Build Coastguard Worker
4112*495ae853SAndroid Build Coastguard Worker #if ENABLE_MODE_STAT_VISUALISER
4113*495ae853SAndroid Build Coastguard Worker isvce_msv_ctxt_init(ps_codec, &ps_mem_rec_base[MEM_MODE_STAT_VISUALISER_BUF]);
4114*495ae853SAndroid Build Coastguard Worker #endif
4115*495ae853SAndroid Build Coastguard Worker
4116*495ae853SAndroid Build Coastguard Worker isvce_get_rate_control_mem_tab(&ps_codec->s_rate_control, &ps_mem_rec_base[ISVCE_MEM_REC_RC],
4117*495ae853SAndroid Build Coastguard Worker USE_BASE);
4118*495ae853SAndroid Build Coastguard Worker
4119*495ae853SAndroid Build Coastguard Worker isvce_sub_pic_rc_ctxt_init(ps_codec, &ps_mem_rec_base[ISVCE_MEM_SVC_SUB_PIC_RC_CTXT]);
4120*495ae853SAndroid Build Coastguard Worker
4121*495ae853SAndroid Build Coastguard Worker status = isvce_init(ps_codec);
4122*495ae853SAndroid Build Coastguard Worker
4123*495ae853SAndroid Build Coastguard Worker return status;
4124*495ae853SAndroid Build Coastguard Worker }
4125*495ae853SAndroid Build Coastguard Worker
4126*495ae853SAndroid Build Coastguard Worker /**
4127*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4128*495ae853SAndroid Build Coastguard Worker *
4129*495ae853SAndroid Build Coastguard Worker * @brief
4130*495ae853SAndroid Build Coastguard Worker * Retrieves mem records passed to the codec
4131*495ae853SAndroid Build Coastguard Worker *
4132*495ae853SAndroid Build Coastguard Worker * @par Description:
4133*495ae853SAndroid Build Coastguard Worker * Retrieves mem recs passed during init
4134*495ae853SAndroid Build Coastguard Worker *
4135*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
4136*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
4137*495ae853SAndroid Build Coastguard Worker *
4138*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4139*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4140*495ae853SAndroid Build Coastguard Worker *
4141*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4142*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4143*495ae853SAndroid Build Coastguard Worker *
4144*495ae853SAndroid Build Coastguard Worker * @returns error status
4145*495ae853SAndroid Build Coastguard Worker *
4146*495ae853SAndroid Build Coastguard Worker * @remarks none
4147*495ae853SAndroid Build Coastguard Worker *
4148*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4149*495ae853SAndroid Build Coastguard Worker */
isvce_retrieve_memrec(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op)4150*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_retrieve_memrec(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
4151*495ae853SAndroid Build Coastguard Worker {
4152*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) ps_codec_obj->pv_codec_handle;
4153*495ae853SAndroid Build Coastguard Worker
4154*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4155*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_ip_t *ps_ip = pv_api_ip;
4156*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_op_t *ps_op = pv_api_op;
4157*495ae853SAndroid Build Coastguard Worker
4158*495ae853SAndroid Build Coastguard Worker if(ps_codec->i4_init_done != 1)
4159*495ae853SAndroid Build Coastguard Worker {
4160*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= 1 << IVE_FATALERROR;
4161*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code |= IH264E_INIT_NOT_DONE;
4162*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4163*495ae853SAndroid Build Coastguard Worker }
4164*495ae853SAndroid Build Coastguard Worker
4165*495ae853SAndroid Build Coastguard Worker /* join threads upon at end of sequence */
4166*495ae853SAndroid Build Coastguard Worker isvce_join_threads(ps_codec);
4167*495ae853SAndroid Build Coastguard Worker
4168*495ae853SAndroid Build Coastguard Worker /* collect list of memory records used by the encoder library */
4169*495ae853SAndroid Build Coastguard Worker memcpy(ps_ip->s_ive_ip.ps_mem_rec, ps_codec->ps_mem_rec_backup,
4170*495ae853SAndroid Build Coastguard Worker ISVCE_MEM_REC_CNT * (sizeof(iv_mem_rec_t)));
4171*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_num_mem_rec_filled = ISVCE_MEM_REC_CNT;
4172*495ae853SAndroid Build Coastguard Worker
4173*495ae853SAndroid Build Coastguard Worker /* clean up mutex memory */
4174*495ae853SAndroid Build Coastguard Worker ih264_list_free(ps_codec->pv_entropy_jobq);
4175*495ae853SAndroid Build Coastguard Worker ih264_list_free(ps_codec->pv_proc_jobq);
4176*495ae853SAndroid Build Coastguard Worker ithread_mutex_destroy(ps_codec->pv_ctl_mutex);
4177*495ae853SAndroid Build Coastguard Worker ithread_mutex_destroy(ps_codec->pv_entropy_mutex);
4178*495ae853SAndroid Build Coastguard Worker
4179*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free((buf_mgr_t *) ps_codec->pv_svc_au_data_store_mgr);
4180*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free((buf_mgr_t *) ps_codec->pv_ref_buf_mgr);
4181*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free((buf_mgr_t *) ps_codec->pv_inp_buf_mgr);
4182*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free((buf_mgr_t *) ps_codec->pv_out_buf_mgr);
4183*495ae853SAndroid Build Coastguard Worker
4184*495ae853SAndroid Build Coastguard Worker #if ENABLE_MODE_STAT_VISUALISER
4185*495ae853SAndroid Build Coastguard Worker isvce_msv_ctxt_delete(ps_codec->ps_mode_stat_visualiser);
4186*495ae853SAndroid Build Coastguard Worker #endif
4187*495ae853SAndroid Build Coastguard Worker
4188*495ae853SAndroid Build Coastguard Worker isvce_sub_pic_rc_ctxt_delete(ps_codec->as_process->ps_sub_pic_rc_ctxt);
4189*495ae853SAndroid Build Coastguard Worker
4190*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4191*495ae853SAndroid Build Coastguard Worker }
4192*495ae853SAndroid Build Coastguard Worker
4193*495ae853SAndroid Build Coastguard Worker /**
4194*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4195*495ae853SAndroid Build Coastguard Worker *
4196*495ae853SAndroid Build Coastguard Worker * @brief
4197*495ae853SAndroid Build Coastguard Worker * Sets the encoder in flush mode.
4198*495ae853SAndroid Build Coastguard Worker *
4199*495ae853SAndroid Build Coastguard Worker * @par Description:
4200*495ae853SAndroid Build Coastguard Worker * Sets the encoder in flush mode
4201*495ae853SAndroid Build Coastguard Worker *
4202*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
4203*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
4204*495ae853SAndroid Build Coastguard Worker *
4205*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4206*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4207*495ae853SAndroid Build Coastguard Worker *
4208*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4209*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4210*495ae853SAndroid Build Coastguard Worker *
4211*495ae853SAndroid Build Coastguard Worker * @returns error status
4212*495ae853SAndroid Build Coastguard Worker *
4213*495ae853SAndroid Build Coastguard Worker * @remarks This call has no real effect on encoder
4214*495ae853SAndroid Build Coastguard Worker *
4215*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4216*495ae853SAndroid Build Coastguard Worker */
isvce_set_flush_mode(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op)4217*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_flush_mode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
4218*495ae853SAndroid Build Coastguard Worker {
4219*495ae853SAndroid Build Coastguard Worker /* codec ctxt */
4220*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) ps_codec_obj->pv_codec_handle;
4221*495ae853SAndroid Build Coastguard Worker
4222*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4223*495ae853SAndroid Build Coastguard Worker isvce_ctl_flush_op_t *ps_ctl_op = pv_api_op;
4224*495ae853SAndroid Build Coastguard Worker
4225*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
4226*495ae853SAndroid Build Coastguard Worker
4227*495ae853SAndroid Build Coastguard Worker ps_ctl_op->s_ive_op.u4_error_code = 0;
4228*495ae853SAndroid Build Coastguard Worker
4229*495ae853SAndroid Build Coastguard Worker /* signal flush frame control call */
4230*495ae853SAndroid Build Coastguard Worker ps_codec->i4_flush_mode = 1;
4231*495ae853SAndroid Build Coastguard Worker
4232*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4233*495ae853SAndroid Build Coastguard Worker }
4234*495ae853SAndroid Build Coastguard Worker
4235*495ae853SAndroid Build Coastguard Worker /**
4236*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4237*495ae853SAndroid Build Coastguard Worker *
4238*495ae853SAndroid Build Coastguard Worker * @brief
4239*495ae853SAndroid Build Coastguard Worker * Gets encoder buffer requirements
4240*495ae853SAndroid Build Coastguard Worker *
4241*495ae853SAndroid Build Coastguard Worker * @par Description:
4242*495ae853SAndroid Build Coastguard Worker * Gets the encoder buffer requirements. Basing on max width and max height
4243*495ae853SAndroid Build Coastguard Worker * configuration settings, this routine, computes the sizes of necessary input,
4244*495ae853SAndroid Build Coastguard Worker * output buffers returns this info to callee.
4245*495ae853SAndroid Build Coastguard Worker *
4246*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
4247*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
4248*495ae853SAndroid Build Coastguard Worker *
4249*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4250*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4251*495ae853SAndroid Build Coastguard Worker *
4252*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4253*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4254*495ae853SAndroid Build Coastguard Worker *
4255*495ae853SAndroid Build Coastguard Worker * @returns error status
4256*495ae853SAndroid Build Coastguard Worker *
4257*495ae853SAndroid Build Coastguard Worker * @remarks none
4258*495ae853SAndroid Build Coastguard Worker *
4259*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4260*495ae853SAndroid Build Coastguard Worker */
isvce_get_buf_info(void * pv_codec_handle,void * pv_api_ip,void * pv_api_op)4261*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_get_buf_info(void *pv_codec_handle, void *pv_api_ip, void *pv_api_op)
4262*495ae853SAndroid Build Coastguard Worker {
4263*495ae853SAndroid Build Coastguard Worker WORD32 i;
4264*495ae853SAndroid Build Coastguard Worker UWORD32 wd, ht;
4265*495ae853SAndroid Build Coastguard Worker
4266*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) pv_codec_handle;
4267*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_ip_t *ps_ip = pv_api_ip;
4268*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_op_t *ps_op = pv_api_op;
4269*495ae853SAndroid Build Coastguard Worker
4270*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers,
4271*495ae853SAndroid Build Coastguard Worker ps_codec->s_cfg.s_svc_params.d_spatial_res_ratio,
4272*495ae853SAndroid Build Coastguard Worker ALIGN16(ps_ip->s_ive_ip.u4_max_wd),
4273*495ae853SAndroid Build Coastguard Worker ALIGN16(ps_ip->s_ive_ip.u4_max_ht), &wd, &ht);
4274*495ae853SAndroid Build Coastguard Worker
4275*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4276*495ae853SAndroid Build Coastguard Worker
4277*495ae853SAndroid Build Coastguard Worker /* Number of components in input buffers required for codec &
4278*495ae853SAndroid Build Coastguard Worker * Minimum sizes of each component in input buffer required */
4279*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.e_inp_color_fmt == IV_YUV_420P)
4280*495ae853SAndroid Build Coastguard Worker {
4281*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_inp_comp_cnt = MIN_RAW_BUFS_420_COMP;
4282*495ae853SAndroid Build Coastguard Worker
4283*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[0] = wd * ht;
4284*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[1] = (wd >> 1) * (ht >> 1);
4285*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[2] = (wd >> 1) * (ht >> 1);
4286*495ae853SAndroid Build Coastguard Worker }
4287*495ae853SAndroid Build Coastguard Worker else if(ps_ip->s_ive_ip.e_inp_color_fmt == IV_YUV_422ILE)
4288*495ae853SAndroid Build Coastguard Worker {
4289*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_inp_comp_cnt = MIN_RAW_BUFS_422ILE_COMP;
4290*495ae853SAndroid Build Coastguard Worker
4291*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[0] = wd * ht * 2;
4292*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[1] = ps_op->s_ive_op.au4_min_in_buf_size[2] = 0;
4293*495ae853SAndroid Build Coastguard Worker }
4294*495ae853SAndroid Build Coastguard Worker else if(ps_ip->s_ive_ip.e_inp_color_fmt == IV_RGB_565)
4295*495ae853SAndroid Build Coastguard Worker {
4296*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_inp_comp_cnt = MIN_RAW_BUFS_RGB565_COMP;
4297*495ae853SAndroid Build Coastguard Worker
4298*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[0] = wd * ht * 2;
4299*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[1] = ps_op->s_ive_op.au4_min_in_buf_size[2] = 0;
4300*495ae853SAndroid Build Coastguard Worker }
4301*495ae853SAndroid Build Coastguard Worker else if(ps_ip->s_ive_ip.e_inp_color_fmt == IV_RGBA_8888)
4302*495ae853SAndroid Build Coastguard Worker {
4303*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_inp_comp_cnt = MIN_RAW_BUFS_RGBA8888_COMP;
4304*495ae853SAndroid Build Coastguard Worker
4305*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[0] = wd * ht * 4;
4306*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[1] = ps_op->s_ive_op.au4_min_in_buf_size[2] = 0;
4307*495ae853SAndroid Build Coastguard Worker }
4308*495ae853SAndroid Build Coastguard Worker else if((ps_ip->s_ive_ip.e_inp_color_fmt == IV_YUV_420SP_UV) ||
4309*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ive_ip.e_inp_color_fmt == IV_YUV_420SP_VU))
4310*495ae853SAndroid Build Coastguard Worker {
4311*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_inp_comp_cnt = MIN_RAW_BUFS_420SP_COMP;
4312*495ae853SAndroid Build Coastguard Worker
4313*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[0] = wd * ht;
4314*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[1] = wd * (ht >> 1);
4315*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_in_buf_size[2] = 0;
4316*495ae853SAndroid Build Coastguard Worker }
4317*495ae853SAndroid Build Coastguard Worker
4318*495ae853SAndroid Build Coastguard Worker /* Number of components in output buffers required for codec &
4319*495ae853SAndroid Build Coastguard Worker * Minimum sizes of each component in output buffer required */
4320*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_out_comp_cnt = MIN_BITS_BUFS_COMP;
4321*495ae853SAndroid Build Coastguard Worker
4322*495ae853SAndroid Build Coastguard Worker for(i = 0; i < (WORD32) ps_op->s_ive_op.u4_out_comp_cnt; i++)
4323*495ae853SAndroid Build Coastguard Worker {
4324*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.au4_min_out_buf_size[i] =
4325*495ae853SAndroid Build Coastguard Worker isvce_get_min_outbuf_size(wd, ht, ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers);
4326*495ae853SAndroid Build Coastguard Worker }
4327*495ae853SAndroid Build Coastguard Worker
4328*495ae853SAndroid Build Coastguard Worker ps_op->u4_rec_comp_cnt = MIN_RAW_BUFS_420_COMP;
4329*495ae853SAndroid Build Coastguard Worker ps_op->au4_min_rec_buf_size[0] = wd * ht;
4330*495ae853SAndroid Build Coastguard Worker ps_op->au4_min_rec_buf_size[1] = (wd >> 1) * (ht >> 1);
4331*495ae853SAndroid Build Coastguard Worker ps_op->au4_min_rec_buf_size[2] = (wd >> 1) * (ht >> 1);
4332*495ae853SAndroid Build Coastguard Worker
4333*495ae853SAndroid Build Coastguard Worker if(ps_codec->s_cfg.b_nalu_info_export_enable)
4334*495ae853SAndroid Build Coastguard Worker {
4335*495ae853SAndroid Build Coastguard Worker ps_op->u4_min_nalu_info_buf_size =
4336*495ae853SAndroid Build Coastguard Worker isvce_get_nalu_info_buf_size(ps_codec->s_cfg.s_svc_params.u1_num_spatial_layers);
4337*495ae853SAndroid Build Coastguard Worker }
4338*495ae853SAndroid Build Coastguard Worker else
4339*495ae853SAndroid Build Coastguard Worker {
4340*495ae853SAndroid Build Coastguard Worker ps_op->u4_min_nalu_info_buf_size = 0;
4341*495ae853SAndroid Build Coastguard Worker }
4342*495ae853SAndroid Build Coastguard Worker
4343*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_min_inp_bufs = MIN_INP_BUFS;
4344*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_min_out_bufs = MIN_OUT_BUFS;
4345*495ae853SAndroid Build Coastguard Worker ps_op->u4_min_rec_bufs = MIN_OUT_BUFS;
4346*495ae853SAndroid Build Coastguard Worker ps_op->u4_min_nalu_info_bufs = MIN_OUT_BUFS;
4347*495ae853SAndroid Build Coastguard Worker
4348*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4349*495ae853SAndroid Build Coastguard Worker }
4350*495ae853SAndroid Build Coastguard Worker
4351*495ae853SAndroid Build Coastguard Worker /**
4352*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4353*495ae853SAndroid Build Coastguard Worker *
4354*495ae853SAndroid Build Coastguard Worker * @brief
4355*495ae853SAndroid Build Coastguard Worker * Sets the picture dimensions
4356*495ae853SAndroid Build Coastguard Worker *
4357*495ae853SAndroid Build Coastguard Worker * @par Description:
4358*495ae853SAndroid Build Coastguard Worker * Sets width, height, display width, display height and strides
4359*495ae853SAndroid Build Coastguard Worker *
4360*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4361*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4362*495ae853SAndroid Build Coastguard Worker *
4363*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4364*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4365*495ae853SAndroid Build Coastguard Worker *
4366*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4367*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4368*495ae853SAndroid Build Coastguard Worker *
4369*495ae853SAndroid Build Coastguard Worker * @returns error status
4370*495ae853SAndroid Build Coastguard Worker *
4371*495ae853SAndroid Build Coastguard Worker * @remarks none
4372*495ae853SAndroid Build Coastguard Worker *
4373*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4374*495ae853SAndroid Build Coastguard Worker */
isvce_set_dimensions(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4375*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_dimensions(void *pv_api_ip, void *pv_api_op,
4376*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4377*495ae853SAndroid Build Coastguard Worker {
4378*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_ip_t *ps_ip = pv_api_ip;
4379*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_op_t *ps_op = pv_api_op;
4380*495ae853SAndroid Build Coastguard Worker
4381*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4382*495ae853SAndroid Build Coastguard Worker
4383*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(
4384*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.u1_num_spatial_layers, ps_cfg->s_svc_params.d_spatial_res_ratio,
4385*495ae853SAndroid Build Coastguard Worker ps_ip->s_ive_ip.u4_wd, ps_ip->s_ive_ip.u4_ht, &ps_cfg->u4_wd, &ps_cfg->u4_ht);
4386*495ae853SAndroid Build Coastguard Worker
4387*495ae853SAndroid Build Coastguard Worker ASSERT(0 == (ps_cfg->u4_wd % MB_SIZE));
4388*495ae853SAndroid Build Coastguard Worker ASSERT(0 == (ps_cfg->u4_ht % MB_SIZE));
4389*495ae853SAndroid Build Coastguard Worker
4390*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_wd_mbs = ps_cfg->u4_wd / MB_SIZE;
4391*495ae853SAndroid Build Coastguard Worker ps_cfg->i4_ht_mbs = ps_cfg->u4_ht / MB_SIZE;
4392*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disp_wd = ps_cfg->u4_wd;
4393*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disp_ht = ps_cfg->u4_ht;
4394*495ae853SAndroid Build Coastguard Worker
4395*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4396*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4397*495ae853SAndroid Build Coastguard Worker
4398*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4399*495ae853SAndroid Build Coastguard Worker }
4400*495ae853SAndroid Build Coastguard Worker
4401*495ae853SAndroid Build Coastguard Worker /**
4402*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4403*495ae853SAndroid Build Coastguard Worker *
4404*495ae853SAndroid Build Coastguard Worker * @brief
4405*495ae853SAndroid Build Coastguard Worker * Provide dimensions used for encoding
4406*495ae853SAndroid Build Coastguard Worker *
4407*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4408*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4409*495ae853SAndroid Build Coastguard Worker *
4410*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4411*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4412*495ae853SAndroid Build Coastguard Worker *
4413*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4414*495ae853SAndroid Build Coastguard Worker * Pointer to config structure
4415*495ae853SAndroid Build Coastguard Worker *
4416*495ae853SAndroid Build Coastguard Worker * @returns error status
4417*495ae853SAndroid Build Coastguard Worker *
4418*495ae853SAndroid Build Coastguard Worker * @remarks none
4419*495ae853SAndroid Build Coastguard Worker *
4420*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4421*495ae853SAndroid Build Coastguard Worker */
isvce_get_enc_frame_dimensions(isvce_ctl_get_enc_dimensions_ip_t * ps_ip,isvce_ctl_get_enc_dimensions_op_t * ps_op,isvce_cfg_params_t * ps_cfg)4422*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_get_enc_frame_dimensions(isvce_ctl_get_enc_dimensions_ip_t *ps_ip,
4423*495ae853SAndroid Build Coastguard Worker isvce_ctl_get_enc_dimensions_op_t *ps_op,
4424*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4425*495ae853SAndroid Build Coastguard Worker {
4426*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = IVE_ERR_NONE;
4427*495ae853SAndroid Build Coastguard Worker
4428*495ae853SAndroid Build Coastguard Worker isvce_get_svc_compliant_dimensions(ps_cfg->s_svc_params.u1_num_spatial_layers,
4429*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params.d_spatial_res_ratio,
4430*495ae853SAndroid Build Coastguard Worker ps_ip->u4_inp_frame_wd, ps_ip->u4_inp_frame_ht,
4431*495ae853SAndroid Build Coastguard Worker &ps_op->u4_enc_frame_wd, &ps_op->u4_enc_frame_ht);
4432*495ae853SAndroid Build Coastguard Worker
4433*495ae853SAndroid Build Coastguard Worker ASSERT(ps_cfg->u4_wd == ps_op->u4_enc_frame_wd);
4434*495ae853SAndroid Build Coastguard Worker ASSERT(ps_cfg->u4_ht == ps_op->u4_enc_frame_ht);
4435*495ae853SAndroid Build Coastguard Worker
4436*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4437*495ae853SAndroid Build Coastguard Worker }
4438*495ae853SAndroid Build Coastguard Worker
4439*495ae853SAndroid Build Coastguard Worker /**
4440*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4441*495ae853SAndroid Build Coastguard Worker *
4442*495ae853SAndroid Build Coastguard Worker * @brief
4443*495ae853SAndroid Build Coastguard Worker * Sets source and target frame rates
4444*495ae853SAndroid Build Coastguard Worker *
4445*495ae853SAndroid Build Coastguard Worker * @par Description:
4446*495ae853SAndroid Build Coastguard Worker * Sets source and target frame rates
4447*495ae853SAndroid Build Coastguard Worker *
4448*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4449*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4450*495ae853SAndroid Build Coastguard Worker *
4451*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4452*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4453*495ae853SAndroid Build Coastguard Worker *
4454*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4455*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4456*495ae853SAndroid Build Coastguard Worker *
4457*495ae853SAndroid Build Coastguard Worker * @returns error status
4458*495ae853SAndroid Build Coastguard Worker *
4459*495ae853SAndroid Build Coastguard Worker * @remarks none
4460*495ae853SAndroid Build Coastguard Worker *
4461*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4462*495ae853SAndroid Build Coastguard Worker */
isvce_set_frame_rate(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4463*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_frame_rate(void *pv_api_ip, void *pv_api_op,
4464*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4465*495ae853SAndroid Build Coastguard Worker {
4466*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4467*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_ip_t *ps_ip = pv_api_ip;
4468*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_op_t *ps_op = pv_api_op;
4469*495ae853SAndroid Build Coastguard Worker
4470*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4471*495ae853SAndroid Build Coastguard Worker
4472*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_src_frame_rate = ps_ip->s_ive_ip.u4_src_frame_rate;
4473*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_tgt_frame_rate = ps_ip->s_ive_ip.u4_tgt_frame_rate;
4474*495ae853SAndroid Build Coastguard Worker
4475*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4476*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4477*495ae853SAndroid Build Coastguard Worker
4478*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4479*495ae853SAndroid Build Coastguard Worker }
4480*495ae853SAndroid Build Coastguard Worker
4481*495ae853SAndroid Build Coastguard Worker /**
4482*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4483*495ae853SAndroid Build Coastguard Worker *
4484*495ae853SAndroid Build Coastguard Worker * @brief
4485*495ae853SAndroid Build Coastguard Worker * Sets target bit rate
4486*495ae853SAndroid Build Coastguard Worker *
4487*495ae853SAndroid Build Coastguard Worker * @par Description:
4488*495ae853SAndroid Build Coastguard Worker * Sets target bit rate
4489*495ae853SAndroid Build Coastguard Worker *
4490*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4491*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4492*495ae853SAndroid Build Coastguard Worker *
4493*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4494*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4495*495ae853SAndroid Build Coastguard Worker *
4496*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4497*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4498*495ae853SAndroid Build Coastguard Worker *
4499*495ae853SAndroid Build Coastguard Worker * @returns error status
4500*495ae853SAndroid Build Coastguard Worker *
4501*495ae853SAndroid Build Coastguard Worker * @remarks none
4502*495ae853SAndroid Build Coastguard Worker *
4503*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4504*495ae853SAndroid Build Coastguard Worker */
isvce_set_bit_rate(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4505*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_bit_rate(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4506*495ae853SAndroid Build Coastguard Worker {
4507*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4508*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_ip_t *ps_ip = pv_api_ip;
4509*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_op_t *ps_op = pv_api_op;
4510*495ae853SAndroid Build Coastguard Worker WORD8 i;
4511*495ae853SAndroid Build Coastguard Worker
4512*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4513*495ae853SAndroid Build Coastguard Worker
4514*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_cfg->s_svc_params.u1_num_spatial_layers; i++)
4515*495ae853SAndroid Build Coastguard Worker {
4516*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_target_bitrate[i] = ps_ip->pu4_target_bitrate[i];
4517*495ae853SAndroid Build Coastguard Worker }
4518*495ae853SAndroid Build Coastguard Worker
4519*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4520*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4521*495ae853SAndroid Build Coastguard Worker
4522*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4523*495ae853SAndroid Build Coastguard Worker }
4524*495ae853SAndroid Build Coastguard Worker
4525*495ae853SAndroid Build Coastguard Worker /**
4526*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4527*495ae853SAndroid Build Coastguard Worker *
4528*495ae853SAndroid Build Coastguard Worker * @brief
4529*495ae853SAndroid Build Coastguard Worker * Sets frame type
4530*495ae853SAndroid Build Coastguard Worker *
4531*495ae853SAndroid Build Coastguard Worker * @par Description:
4532*495ae853SAndroid Build Coastguard Worker * Sets frame type
4533*495ae853SAndroid Build Coastguard Worker *
4534*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4535*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4536*495ae853SAndroid Build Coastguard Worker *
4537*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4538*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4539*495ae853SAndroid Build Coastguard Worker *
4540*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4541*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4542*495ae853SAndroid Build Coastguard Worker *
4543*495ae853SAndroid Build Coastguard Worker * @returns error status
4544*495ae853SAndroid Build Coastguard Worker *
4545*495ae853SAndroid Build Coastguard Worker * @remarks not a sticky tag
4546*495ae853SAndroid Build Coastguard Worker *
4547*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4548*495ae853SAndroid Build Coastguard Worker */
isvce_set_frame_type(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4549*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_frame_type(void *pv_api_ip, void *pv_api_op,
4550*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4551*495ae853SAndroid Build Coastguard Worker {
4552*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4553*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_ip_t *ps_ip = pv_api_ip;
4554*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_op_t *ps_op = pv_api_op;
4555*495ae853SAndroid Build Coastguard Worker
4556*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4557*495ae853SAndroid Build Coastguard Worker
4558*495ae853SAndroid Build Coastguard Worker ps_cfg->e_frame_type = ps_ip->s_ive_ip.e_frame_type;
4559*495ae853SAndroid Build Coastguard Worker
4560*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4561*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4562*495ae853SAndroid Build Coastguard Worker
4563*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4564*495ae853SAndroid Build Coastguard Worker }
4565*495ae853SAndroid Build Coastguard Worker
4566*495ae853SAndroid Build Coastguard Worker /**
4567*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4568*495ae853SAndroid Build Coastguard Worker *
4569*495ae853SAndroid Build Coastguard Worker * @brief
4570*495ae853SAndroid Build Coastguard Worker * Sets quantization params
4571*495ae853SAndroid Build Coastguard Worker *
4572*495ae853SAndroid Build Coastguard Worker * @par Description:
4573*495ae853SAndroid Build Coastguard Worker * Sets the max, min and default qp for I frame, P frame and B frame
4574*495ae853SAndroid Build Coastguard Worker *
4575*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4576*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4577*495ae853SAndroid Build Coastguard Worker *
4578*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4579*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4580*495ae853SAndroid Build Coastguard Worker *
4581*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4582*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4583*495ae853SAndroid Build Coastguard Worker *
4584*495ae853SAndroid Build Coastguard Worker * @returns error status
4585*495ae853SAndroid Build Coastguard Worker *
4586*495ae853SAndroid Build Coastguard Worker * @remarks none
4587*495ae853SAndroid Build Coastguard Worker *
4588*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4589*495ae853SAndroid Build Coastguard Worker */
isvce_set_qp(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4590*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_qp(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4591*495ae853SAndroid Build Coastguard Worker {
4592*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4593*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_ip_t *ps_set_qp_ip = pv_api_ip;
4594*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_op_t *ps_set_qp_op = pv_api_op;
4595*495ae853SAndroid Build Coastguard Worker WORD8 i;
4596*495ae853SAndroid Build Coastguard Worker
4597*495ae853SAndroid Build Coastguard Worker ps_set_qp_op->s_ive_op.u4_error_code = 0;
4598*495ae853SAndroid Build Coastguard Worker
4599*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_cfg->s_svc_params.u1_num_spatial_layers; i++)
4600*495ae853SAndroid Build Coastguard Worker {
4601*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_max[i] =
4602*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_max[i]);
4603*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_min[i] =
4604*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_min[i]);
4605*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp[i] = CLIP3(ps_set_qp_ip->pu4_i_qp_min[i], ps_set_qp_ip->pu4_i_qp_max[i],
4606*495ae853SAndroid Build Coastguard Worker ps_set_qp_ip->pu4_i_qp[i]);
4607*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_max[i] =
4608*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_max[i]);
4609*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_min[i] =
4610*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_min[i]);
4611*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp[i] = CLIP3(ps_set_qp_ip->pu4_i_qp_min[i], ps_set_qp_ip->pu4_i_qp_max[i],
4612*495ae853SAndroid Build Coastguard Worker ps_set_qp_ip->pu4_i_qp[i]);
4613*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_max[i] =
4614*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_max[i]);
4615*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp_min[i] =
4616*495ae853SAndroid Build Coastguard Worker CLIP3(MIN_H264_QP, MAX_H264_QP, (WORD32) ps_set_qp_ip->pu4_i_qp_min[i]);
4617*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_i_qp[i] = CLIP3(ps_set_qp_ip->pu4_i_qp_min[i], ps_set_qp_ip->pu4_i_qp_max[i],
4618*495ae853SAndroid Build Coastguard Worker ps_set_qp_ip->pu4_i_qp[i]);
4619*495ae853SAndroid Build Coastguard Worker }
4620*495ae853SAndroid Build Coastguard Worker
4621*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_set_qp_ip->s_ive_ip.u4_timestamp_high;
4622*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_set_qp_ip->s_ive_ip.u4_timestamp_low;
4623*495ae853SAndroid Build Coastguard Worker
4624*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4625*495ae853SAndroid Build Coastguard Worker }
4626*495ae853SAndroid Build Coastguard Worker
4627*495ae853SAndroid Build Coastguard Worker /**
4628*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4629*495ae853SAndroid Build Coastguard Worker *
4630*495ae853SAndroid Build Coastguard Worker * @brief
4631*495ae853SAndroid Build Coastguard Worker * Sets encoding mode
4632*495ae853SAndroid Build Coastguard Worker *
4633*495ae853SAndroid Build Coastguard Worker * @par Description:
4634*495ae853SAndroid Build Coastguard Worker * Sets encoding mode
4635*495ae853SAndroid Build Coastguard Worker *
4636*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4637*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4638*495ae853SAndroid Build Coastguard Worker *
4639*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4640*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4641*495ae853SAndroid Build Coastguard Worker *
4642*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4643*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4644*495ae853SAndroid Build Coastguard Worker *
4645*495ae853SAndroid Build Coastguard Worker * @returns error status
4646*495ae853SAndroid Build Coastguard Worker *
4647*495ae853SAndroid Build Coastguard Worker * @remarks none
4648*495ae853SAndroid Build Coastguard Worker *
4649*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4650*495ae853SAndroid Build Coastguard Worker */
isvce_set_enc_mode(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4651*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_enc_mode(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4652*495ae853SAndroid Build Coastguard Worker {
4653*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4654*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_ip_t *ps_ip = pv_api_ip;
4655*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_op_t *ps_op = pv_api_op;
4656*495ae853SAndroid Build Coastguard Worker
4657*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4658*495ae853SAndroid Build Coastguard Worker
4659*495ae853SAndroid Build Coastguard Worker ps_cfg->e_enc_mode = ps_ip->s_ive_ip.e_enc_mode;
4660*495ae853SAndroid Build Coastguard Worker
4661*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4662*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4663*495ae853SAndroid Build Coastguard Worker
4664*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4665*495ae853SAndroid Build Coastguard Worker }
4666*495ae853SAndroid Build Coastguard Worker
4667*495ae853SAndroid Build Coastguard Worker /**
4668*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4669*495ae853SAndroid Build Coastguard Worker *
4670*495ae853SAndroid Build Coastguard Worker * @brief
4671*495ae853SAndroid Build Coastguard Worker * Sets vbv parameters
4672*495ae853SAndroid Build Coastguard Worker *
4673*495ae853SAndroid Build Coastguard Worker * @par Description:
4674*495ae853SAndroid Build Coastguard Worker * Sets vbv parameters
4675*495ae853SAndroid Build Coastguard Worker *
4676*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4677*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4678*495ae853SAndroid Build Coastguard Worker *
4679*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4680*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4681*495ae853SAndroid Build Coastguard Worker *
4682*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4683*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4684*495ae853SAndroid Build Coastguard Worker *
4685*495ae853SAndroid Build Coastguard Worker * @returns error status
4686*495ae853SAndroid Build Coastguard Worker *
4687*495ae853SAndroid Build Coastguard Worker * @remarks none
4688*495ae853SAndroid Build Coastguard Worker *
4689*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4690*495ae853SAndroid Build Coastguard Worker */
isvce_set_vbv_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4691*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvce_set_vbv_params(void *pv_api_ip, void *pv_api_op,
4692*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4693*495ae853SAndroid Build Coastguard Worker {
4694*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4695*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_ip_t *ps_ip = pv_api_ip;
4696*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_op_t *ps_op = pv_api_op;
4697*495ae853SAndroid Build Coastguard Worker WORD8 i;
4698*495ae853SAndroid Build Coastguard Worker
4699*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4700*495ae853SAndroid Build Coastguard Worker
4701*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_cfg->s_svc_params.u1_num_spatial_layers; i++)
4702*495ae853SAndroid Build Coastguard Worker {
4703*495ae853SAndroid Build Coastguard Worker ps_cfg->au4_vbv_buffer_delay[i] = ps_ip->pu4_vbv_buffer_delay[i];
4704*495ae853SAndroid Build Coastguard Worker }
4705*495ae853SAndroid Build Coastguard Worker
4706*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4707*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4708*495ae853SAndroid Build Coastguard Worker
4709*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4710*495ae853SAndroid Build Coastguard Worker }
4711*495ae853SAndroid Build Coastguard Worker
4712*495ae853SAndroid Build Coastguard Worker /**
4713*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4714*495ae853SAndroid Build Coastguard Worker *
4715*495ae853SAndroid Build Coastguard Worker * @brief
4716*495ae853SAndroid Build Coastguard Worker * Sets AIR parameters
4717*495ae853SAndroid Build Coastguard Worker *
4718*495ae853SAndroid Build Coastguard Worker * @par Description:
4719*495ae853SAndroid Build Coastguard Worker * Sets AIR parameters
4720*495ae853SAndroid Build Coastguard Worker *
4721*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4722*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4723*495ae853SAndroid Build Coastguard Worker *
4724*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4725*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4726*495ae853SAndroid Build Coastguard Worker *
4727*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4728*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4729*495ae853SAndroid Build Coastguard Worker *
4730*495ae853SAndroid Build Coastguard Worker * @returns error status
4731*495ae853SAndroid Build Coastguard Worker *
4732*495ae853SAndroid Build Coastguard Worker * @remarks none
4733*495ae853SAndroid Build Coastguard Worker *
4734*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4735*495ae853SAndroid Build Coastguard Worker */
isvc_set_air_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4736*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvc_set_air_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4737*495ae853SAndroid Build Coastguard Worker {
4738*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4739*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_ip_t *ps_ip = pv_api_ip;
4740*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_op_t *ps_op = pv_api_op;
4741*495ae853SAndroid Build Coastguard Worker
4742*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4743*495ae853SAndroid Build Coastguard Worker
4744*495ae853SAndroid Build Coastguard Worker ps_cfg->e_air_mode = ps_ip->s_ive_ip.e_air_mode;
4745*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_air_refresh_period = ps_ip->s_ive_ip.u4_air_refresh_period;
4746*495ae853SAndroid Build Coastguard Worker
4747*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4748*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4749*495ae853SAndroid Build Coastguard Worker
4750*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4751*495ae853SAndroid Build Coastguard Worker }
4752*495ae853SAndroid Build Coastguard Worker
4753*495ae853SAndroid Build Coastguard Worker /**
4754*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4755*495ae853SAndroid Build Coastguard Worker *
4756*495ae853SAndroid Build Coastguard Worker * @brief
4757*495ae853SAndroid Build Coastguard Worker * Sets motion estimation parameters
4758*495ae853SAndroid Build Coastguard Worker *
4759*495ae853SAndroid Build Coastguard Worker * @par Description:
4760*495ae853SAndroid Build Coastguard Worker * Sets motion estimation parameters
4761*495ae853SAndroid Build Coastguard Worker *
4762*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4763*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4764*495ae853SAndroid Build Coastguard Worker *
4765*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4766*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4767*495ae853SAndroid Build Coastguard Worker *
4768*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4769*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4770*495ae853SAndroid Build Coastguard Worker *
4771*495ae853SAndroid Build Coastguard Worker * @returns error status
4772*495ae853SAndroid Build Coastguard Worker *
4773*495ae853SAndroid Build Coastguard Worker * @remarks none
4774*495ae853SAndroid Build Coastguard Worker *
4775*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4776*495ae853SAndroid Build Coastguard Worker */
isvc_set_me_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4777*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvc_set_me_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4778*495ae853SAndroid Build Coastguard Worker {
4779*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4780*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_ip_t *ps_ip = pv_api_ip;
4781*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_op_t *ps_op = pv_api_op;
4782*495ae853SAndroid Build Coastguard Worker
4783*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4784*495ae853SAndroid Build Coastguard Worker
4785*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_hpel = ps_ip->s_ive_ip.u4_enable_hpel;
4786*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_qpel = ps_ip->s_ive_ip.u4_enable_qpel;
4787*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_fast_sad = ps_ip->s_ive_ip.u4_enable_fast_sad;
4788*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_alt_ref = ps_ip->s_ive_ip.u4_enable_alt_ref;
4789*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_srch_rng_x = ps_ip->s_ive_ip.u4_srch_rng_x;
4790*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_srch_rng_y = ps_ip->s_ive_ip.u4_srch_rng_y;
4791*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_me_speed_preset = ps_ip->s_ive_ip.u4_me_speed_preset;
4792*495ae853SAndroid Build Coastguard Worker
4793*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4794*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4795*495ae853SAndroid Build Coastguard Worker
4796*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4797*495ae853SAndroid Build Coastguard Worker }
4798*495ae853SAndroid Build Coastguard Worker
4799*495ae853SAndroid Build Coastguard Worker /**
4800*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4801*495ae853SAndroid Build Coastguard Worker *
4802*495ae853SAndroid Build Coastguard Worker * @brief
4803*495ae853SAndroid Build Coastguard Worker * Sets Intra/Inter Prediction estimation parameters
4804*495ae853SAndroid Build Coastguard Worker *
4805*495ae853SAndroid Build Coastguard Worker * @par Description:
4806*495ae853SAndroid Build Coastguard Worker * Sets Intra/Inter Prediction estimation parameters
4807*495ae853SAndroid Build Coastguard Worker *
4808*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4809*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4810*495ae853SAndroid Build Coastguard Worker *
4811*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4812*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4813*495ae853SAndroid Build Coastguard Worker *
4814*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4815*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4816*495ae853SAndroid Build Coastguard Worker *
4817*495ae853SAndroid Build Coastguard Worker * @returns error status
4818*495ae853SAndroid Build Coastguard Worker *
4819*495ae853SAndroid Build Coastguard Worker * @remarks none
4820*495ae853SAndroid Build Coastguard Worker *
4821*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4822*495ae853SAndroid Build Coastguard Worker */
isvc_set_ipe_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4823*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvc_set_ipe_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4824*495ae853SAndroid Build Coastguard Worker {
4825*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4826*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_ip_t *ps_ip = pv_api_ip;
4827*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_op_t *ps_op = pv_api_op;
4828*495ae853SAndroid Build Coastguard Worker
4829*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4830*495ae853SAndroid Build Coastguard Worker
4831*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enable_intra_4x4 = ps_ip->s_ive_ip.u4_enable_intra_4x4;
4832*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_enc_speed_preset = ps_ip->s_ive_ip.u4_enc_speed_preset;
4833*495ae853SAndroid Build Coastguard Worker
4834*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4835*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4836*495ae853SAndroid Build Coastguard Worker
4837*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4838*495ae853SAndroid Build Coastguard Worker }
4839*495ae853SAndroid Build Coastguard Worker
4840*495ae853SAndroid Build Coastguard Worker /**
4841*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4842*495ae853SAndroid Build Coastguard Worker *
4843*495ae853SAndroid Build Coastguard Worker * @brief
4844*495ae853SAndroid Build Coastguard Worker * Sets GOP parameters
4845*495ae853SAndroid Build Coastguard Worker *
4846*495ae853SAndroid Build Coastguard Worker * @par Description:
4847*495ae853SAndroid Build Coastguard Worker * Sets GOP parameters
4848*495ae853SAndroid Build Coastguard Worker *
4849*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4850*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4851*495ae853SAndroid Build Coastguard Worker *
4852*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4853*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4854*495ae853SAndroid Build Coastguard Worker *
4855*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4856*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4857*495ae853SAndroid Build Coastguard Worker *
4858*495ae853SAndroid Build Coastguard Worker * @returns error status
4859*495ae853SAndroid Build Coastguard Worker *
4860*495ae853SAndroid Build Coastguard Worker * @remarks none
4861*495ae853SAndroid Build Coastguard Worker *
4862*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4863*495ae853SAndroid Build Coastguard Worker */
isvc_set_gop_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4864*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvc_set_gop_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4865*495ae853SAndroid Build Coastguard Worker {
4866*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4867*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_ip_t *ps_ip = pv_api_ip;
4868*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_op_t *ps_op = pv_api_op;
4869*495ae853SAndroid Build Coastguard Worker
4870*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4871*495ae853SAndroid Build Coastguard Worker
4872*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_i_frm_interval = ps_ip->s_ive_ip.u4_i_frm_interval;
4873*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_idr_frm_interval = ps_ip->s_ive_ip.u4_idr_frm_interval;
4874*495ae853SAndroid Build Coastguard Worker
4875*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4876*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4877*495ae853SAndroid Build Coastguard Worker
4878*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4879*495ae853SAndroid Build Coastguard Worker }
4880*495ae853SAndroid Build Coastguard Worker
4881*495ae853SAndroid Build Coastguard Worker /**
4882*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4883*495ae853SAndroid Build Coastguard Worker *
4884*495ae853SAndroid Build Coastguard Worker * @brief
4885*495ae853SAndroid Build Coastguard Worker * Sets profile parameters
4886*495ae853SAndroid Build Coastguard Worker *
4887*495ae853SAndroid Build Coastguard Worker * @par Description:
4888*495ae853SAndroid Build Coastguard Worker * Sets profile parameters
4889*495ae853SAndroid Build Coastguard Worker *
4890*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4891*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4892*495ae853SAndroid Build Coastguard Worker *
4893*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4894*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4895*495ae853SAndroid Build Coastguard Worker *
4896*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4897*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4898*495ae853SAndroid Build Coastguard Worker *
4899*495ae853SAndroid Build Coastguard Worker * @returns error status
4900*495ae853SAndroid Build Coastguard Worker *
4901*495ae853SAndroid Build Coastguard Worker * @remarks none
4902*495ae853SAndroid Build Coastguard Worker *
4903*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4904*495ae853SAndroid Build Coastguard Worker */
isvc_set_profile_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4905*495ae853SAndroid Build Coastguard Worker static IV_STATUS_T isvc_set_profile_params(void *pv_api_ip, void *pv_api_op,
4906*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
4907*495ae853SAndroid Build Coastguard Worker {
4908*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4909*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_ip_t *ps_ip = pv_api_ip;
4910*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_op_t *ps_op = pv_api_op;
4911*495ae853SAndroid Build Coastguard Worker
4912*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4913*495ae853SAndroid Build Coastguard Worker
4914*495ae853SAndroid Build Coastguard Worker ps_cfg->e_profile = ps_ip->s_ive_ip.e_profile;
4915*495ae853SAndroid Build Coastguard Worker
4916*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_entropy_coding_mode = ps_ip->s_ive_ip.u4_entropy_coding_mode;
4917*495ae853SAndroid Build Coastguard Worker
4918*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4919*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4920*495ae853SAndroid Build Coastguard Worker
4921*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4922*495ae853SAndroid Build Coastguard Worker }
4923*495ae853SAndroid Build Coastguard Worker
4924*495ae853SAndroid Build Coastguard Worker /**
4925*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4926*495ae853SAndroid Build Coastguard Worker *
4927*495ae853SAndroid Build Coastguard Worker * @brief
4928*495ae853SAndroid Build Coastguard Worker * Sets disable deblock level
4929*495ae853SAndroid Build Coastguard Worker *
4930*495ae853SAndroid Build Coastguard Worker * @par Description:
4931*495ae853SAndroid Build Coastguard Worker * Sets disable deblock level. Level 0 means no disabling and level 4 means
4932*495ae853SAndroid Build Coastguard Worker * disable completely. 1, 2, 3 are intermediate levels that control amount
4933*495ae853SAndroid Build Coastguard Worker * of deblocking done.
4934*495ae853SAndroid Build Coastguard Worker *
4935*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
4936*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
4937*495ae853SAndroid Build Coastguard Worker *
4938*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4939*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4940*495ae853SAndroid Build Coastguard Worker *
4941*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4942*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4943*495ae853SAndroid Build Coastguard Worker *
4944*495ae853SAndroid Build Coastguard Worker * @returns error status
4945*495ae853SAndroid Build Coastguard Worker *
4946*495ae853SAndroid Build Coastguard Worker * @remarks none
4947*495ae853SAndroid Build Coastguard Worker *
4948*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4949*495ae853SAndroid Build Coastguard Worker */
isvc_set_deblock_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4950*495ae853SAndroid Build Coastguard Worker static WORD32 isvc_set_deblock_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4951*495ae853SAndroid Build Coastguard Worker {
4952*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4953*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_ip_t *ps_ip = pv_api_ip;
4954*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_op_t *ps_op = pv_api_op;
4955*495ae853SAndroid Build Coastguard Worker
4956*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
4957*495ae853SAndroid Build Coastguard Worker
4958*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_disable_deblock_level = ps_ip->s_ive_ip.u4_disable_deblock_level;
4959*495ae853SAndroid Build Coastguard Worker
4960*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
4961*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
4962*495ae853SAndroid Build Coastguard Worker
4963*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
4964*495ae853SAndroid Build Coastguard Worker }
4965*495ae853SAndroid Build Coastguard Worker /**
4966*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4967*495ae853SAndroid Build Coastguard Worker *
4968*495ae853SAndroid Build Coastguard Worker * @brief
4969*495ae853SAndroid Build Coastguard Worker * Sets vui params
4970*495ae853SAndroid Build Coastguard Worker *
4971*495ae853SAndroid Build Coastguard Worker * @par Description:
4972*495ae853SAndroid Build Coastguard Worker * Video usability information
4973*495ae853SAndroid Build Coastguard Worker *
4974*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
4975*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
4976*495ae853SAndroid Build Coastguard Worker *
4977*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
4978*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
4979*495ae853SAndroid Build Coastguard Worker *
4980*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
4981*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
4982*495ae853SAndroid Build Coastguard Worker *
4983*495ae853SAndroid Build Coastguard Worker * @returns error status
4984*495ae853SAndroid Build Coastguard Worker *
4985*495ae853SAndroid Build Coastguard Worker * @remarks none
4986*495ae853SAndroid Build Coastguard Worker *
4987*495ae853SAndroid Build Coastguard Worker *******************************************************************************
4988*495ae853SAndroid Build Coastguard Worker */
isvce_set_vui_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)4989*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_vui_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
4990*495ae853SAndroid Build Coastguard Worker {
4991*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
4992*495ae853SAndroid Build Coastguard Worker isvce_vui_ip_t *ps_ip = pv_api_ip;
4993*495ae853SAndroid Build Coastguard Worker isvce_vui_op_t *ps_op = pv_api_op;
4994*495ae853SAndroid Build Coastguard Worker vui_t *ps_vui = &ps_cfg->s_vui;
4995*495ae853SAndroid Build Coastguard Worker
4996*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
4997*495ae853SAndroid Build Coastguard Worker
4998*495ae853SAndroid Build Coastguard Worker ps_vui->u1_aspect_ratio_info_present_flag = ps_ip->u1_aspect_ratio_info_present_flag;
4999*495ae853SAndroid Build Coastguard Worker ps_vui->u1_aspect_ratio_idc = ps_ip->u1_aspect_ratio_idc;
5000*495ae853SAndroid Build Coastguard Worker ps_vui->u2_sar_width = ps_ip->u2_sar_width;
5001*495ae853SAndroid Build Coastguard Worker ps_vui->u2_sar_height = ps_ip->u2_sar_height;
5002*495ae853SAndroid Build Coastguard Worker ps_vui->u1_overscan_info_present_flag = ps_ip->u1_overscan_info_present_flag;
5003*495ae853SAndroid Build Coastguard Worker ps_vui->u1_overscan_appropriate_flag = ps_ip->u1_overscan_appropriate_flag;
5004*495ae853SAndroid Build Coastguard Worker ps_vui->u1_video_signal_type_present_flag = ps_ip->u1_video_signal_type_present_flag;
5005*495ae853SAndroid Build Coastguard Worker ps_vui->u1_video_format = ps_ip->u1_video_format;
5006*495ae853SAndroid Build Coastguard Worker ps_vui->u1_video_full_range_flag = ps_ip->u1_video_full_range_flag;
5007*495ae853SAndroid Build Coastguard Worker ps_vui->u1_colour_description_present_flag = ps_ip->u1_colour_description_present_flag;
5008*495ae853SAndroid Build Coastguard Worker ps_vui->u1_colour_primaries = ps_ip->u1_colour_primaries;
5009*495ae853SAndroid Build Coastguard Worker ps_vui->u1_transfer_characteristics = ps_ip->u1_transfer_characteristics;
5010*495ae853SAndroid Build Coastguard Worker ps_vui->u1_matrix_coefficients = ps_ip->u1_matrix_coefficients;
5011*495ae853SAndroid Build Coastguard Worker ps_vui->u1_chroma_loc_info_present_flag = ps_ip->u1_chroma_loc_info_present_flag;
5012*495ae853SAndroid Build Coastguard Worker ps_vui->u1_chroma_sample_loc_type_top_field = ps_ip->u1_chroma_sample_loc_type_top_field;
5013*495ae853SAndroid Build Coastguard Worker ps_vui->u1_chroma_sample_loc_type_bottom_field = ps_ip->u1_chroma_sample_loc_type_bottom_field;
5014*495ae853SAndroid Build Coastguard Worker ps_vui->u1_vui_timing_info_present_flag = ps_ip->u1_vui_timing_info_present_flag;
5015*495ae853SAndroid Build Coastguard Worker ps_vui->u4_vui_num_units_in_tick = ps_ip->u4_vui_num_units_in_tick;
5016*495ae853SAndroid Build Coastguard Worker ps_vui->u4_vui_time_scale = ps_ip->u4_vui_time_scale;
5017*495ae853SAndroid Build Coastguard Worker ps_vui->u1_fixed_frame_rate_flag = ps_ip->u1_fixed_frame_rate_flag;
5018*495ae853SAndroid Build Coastguard Worker ps_vui->u1_nal_hrd_parameters_present_flag = ps_ip->u1_nal_hrd_parameters_present_flag;
5019*495ae853SAndroid Build Coastguard Worker ps_vui->u1_vcl_hrd_parameters_present_flag = ps_ip->u1_vcl_hrd_parameters_present_flag;
5020*495ae853SAndroid Build Coastguard Worker ps_vui->u1_low_delay_hrd_flag = ps_ip->u1_low_delay_hrd_flag;
5021*495ae853SAndroid Build Coastguard Worker ps_vui->u1_pic_struct_present_flag = ps_ip->u1_pic_struct_present_flag;
5022*495ae853SAndroid Build Coastguard Worker ps_vui->u1_bitstream_restriction_flag = ps_ip->u1_bitstream_restriction_flag;
5023*495ae853SAndroid Build Coastguard Worker ps_vui->u1_motion_vectors_over_pic_boundaries_flag =
5024*495ae853SAndroid Build Coastguard Worker ps_ip->u1_motion_vectors_over_pic_boundaries_flag;
5025*495ae853SAndroid Build Coastguard Worker ps_vui->u1_max_bytes_per_pic_denom = ps_ip->u1_max_bytes_per_pic_denom;
5026*495ae853SAndroid Build Coastguard Worker ps_vui->u1_max_bits_per_mb_denom = ps_ip->u1_max_bits_per_mb_denom;
5027*495ae853SAndroid Build Coastguard Worker ps_vui->u1_log2_max_mv_length_horizontal = ps_ip->u1_log2_max_mv_length_horizontal;
5028*495ae853SAndroid Build Coastguard Worker ps_vui->u1_log2_max_mv_length_vertical = ps_ip->u1_log2_max_mv_length_vertical;
5029*495ae853SAndroid Build Coastguard Worker ps_vui->u1_num_reorder_frames = ps_ip->u1_num_reorder_frames;
5030*495ae853SAndroid Build Coastguard Worker ps_vui->u1_max_dec_frame_buffering = ps_ip->u1_max_dec_frame_buffering;
5031*495ae853SAndroid Build Coastguard Worker
5032*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5033*495ae853SAndroid Build Coastguard Worker }
5034*495ae853SAndroid Build Coastguard Worker
5035*495ae853SAndroid Build Coastguard Worker /**
5036*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5037*495ae853SAndroid Build Coastguard Worker *
5038*495ae853SAndroid Build Coastguard Worker * @brief
5039*495ae853SAndroid Build Coastguard Worker * Sets Mastering display color volume sei params
5040*495ae853SAndroid Build Coastguard Worker *
5041*495ae853SAndroid Build Coastguard Worker * @par Description:
5042*495ae853SAndroid Build Coastguard Worker * Supplemental enhancement information
5043*495ae853SAndroid Build Coastguard Worker *
5044*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5045*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5046*495ae853SAndroid Build Coastguard Worker *
5047*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5048*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5049*495ae853SAndroid Build Coastguard Worker *
5050*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
5051*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
5052*495ae853SAndroid Build Coastguard Worker *
5053*495ae853SAndroid Build Coastguard Worker * @return error status
5054*495ae853SAndroid Build Coastguard Worker *
5055*495ae853SAndroid Build Coastguard Worker * @remarks none
5056*495ae853SAndroid Build Coastguard Worker *
5057*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5058*495ae853SAndroid Build Coastguard Worker */
isvce_set_sei_mdcv_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)5059*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_sei_mdcv_params(void *pv_api_ip, void *pv_api_op,
5060*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg)
5061*495ae853SAndroid Build Coastguard Worker {
5062*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
5063*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5064*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_ip_t *ps_ip = pv_api_ip;
5065*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_op_t *ps_op = pv_api_op;
5066*495ae853SAndroid Build Coastguard Worker sei_params_t *ps_sei = &ps_cfg->s_sei;
5067*495ae853SAndroid Build Coastguard Worker
5068*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
5069*495ae853SAndroid Build Coastguard Worker
5070*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = ps_ip->u1_sei_mdcv_params_present_flag;
5071*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_MDCV_PRIMARIES; i4_count++)
5072*495ae853SAndroid Build Coastguard Worker {
5073*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.au2_display_primaries_x[i4_count] =
5074*495ae853SAndroid Build Coastguard Worker ps_ip->au2_display_primaries_x[i4_count];
5075*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.au2_display_primaries_y[i4_count] =
5076*495ae853SAndroid Build Coastguard Worker ps_ip->au2_display_primaries_y[i4_count];
5077*495ae853SAndroid Build Coastguard Worker }
5078*495ae853SAndroid Build Coastguard Worker
5079*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u2_white_point_x = ps_ip->u2_white_point_x;
5080*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u2_white_point_y = ps_ip->u2_white_point_y;
5081*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance =
5082*495ae853SAndroid Build Coastguard Worker ps_ip->u4_max_display_mastering_luminance;
5083*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u4_min_display_mastering_luminance =
5084*495ae853SAndroid Build Coastguard Worker ps_ip->u4_min_display_mastering_luminance;
5085*495ae853SAndroid Build Coastguard Worker
5086*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->u4_timestamp_high;
5087*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->u4_timestamp_low;
5088*495ae853SAndroid Build Coastguard Worker
5089*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5090*495ae853SAndroid Build Coastguard Worker }
5091*495ae853SAndroid Build Coastguard Worker
5092*495ae853SAndroid Build Coastguard Worker /**
5093*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5094*495ae853SAndroid Build Coastguard Worker *
5095*495ae853SAndroid Build Coastguard Worker * @brief
5096*495ae853SAndroid Build Coastguard Worker * Sets content light level sei params
5097*495ae853SAndroid Build Coastguard Worker *
5098*495ae853SAndroid Build Coastguard Worker * @par Description:
5099*495ae853SAndroid Build Coastguard Worker * Supplemental enhancement information
5100*495ae853SAndroid Build Coastguard Worker *
5101*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5102*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5103*495ae853SAndroid Build Coastguard Worker *
5104*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5105*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5106*495ae853SAndroid Build Coastguard Worker *
5107*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
5108*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
5109*495ae853SAndroid Build Coastguard Worker *
5110*495ae853SAndroid Build Coastguard Worker * @return error status
5111*495ae853SAndroid Build Coastguard Worker *
5112*495ae853SAndroid Build Coastguard Worker * @remarks none
5113*495ae853SAndroid Build Coastguard Worker *
5114*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5115*495ae853SAndroid Build Coastguard Worker */
isvce_set_sei_cll_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)5116*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_sei_cll_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
5117*495ae853SAndroid Build Coastguard Worker {
5118*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5119*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_ip_t *ps_ip = pv_api_ip;
5120*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_op_t *ps_op = pv_api_op;
5121*495ae853SAndroid Build Coastguard Worker sei_params_t *ps_sei = &ps_cfg->s_sei;
5122*495ae853SAndroid Build Coastguard Worker
5123*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
5124*495ae853SAndroid Build Coastguard Worker
5125*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_cll_params_present_flag = ps_ip->u1_sei_cll_params_present_flag;
5126*495ae853SAndroid Build Coastguard Worker
5127*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_cll_params.u2_max_content_light_level = ps_ip->u2_max_content_light_level;
5128*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_cll_params.u2_max_pic_average_light_level = ps_ip->u2_max_pic_average_light_level;
5129*495ae853SAndroid Build Coastguard Worker
5130*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->u4_timestamp_high;
5131*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->u4_timestamp_low;
5132*495ae853SAndroid Build Coastguard Worker
5133*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5134*495ae853SAndroid Build Coastguard Worker }
5135*495ae853SAndroid Build Coastguard Worker
5136*495ae853SAndroid Build Coastguard Worker /**
5137*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5138*495ae853SAndroid Build Coastguard Worker *
5139*495ae853SAndroid Build Coastguard Worker * @brief
5140*495ae853SAndroid Build Coastguard Worker * Sets ambient viewing environment sei params
5141*495ae853SAndroid Build Coastguard Worker *
5142*495ae853SAndroid Build Coastguard Worker * @par Description:
5143*495ae853SAndroid Build Coastguard Worker * Supplemental enhancement information
5144*495ae853SAndroid Build Coastguard Worker *
5145*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5146*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5147*495ae853SAndroid Build Coastguard Worker *
5148*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5149*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5150*495ae853SAndroid Build Coastguard Worker *
5151*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
5152*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
5153*495ae853SAndroid Build Coastguard Worker *
5154*495ae853SAndroid Build Coastguard Worker * @return error status
5155*495ae853SAndroid Build Coastguard Worker *
5156*495ae853SAndroid Build Coastguard Worker * @remarks none
5157*495ae853SAndroid Build Coastguard Worker *
5158*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5159*495ae853SAndroid Build Coastguard Worker */
isvce_set_sei_ave_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)5160*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_sei_ave_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
5161*495ae853SAndroid Build Coastguard Worker {
5162*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5163*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_ip_t *ps_ip = pv_api_ip;
5164*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_op_t *ps_op = pv_api_op;
5165*495ae853SAndroid Build Coastguard Worker sei_params_t *ps_sei = &ps_cfg->s_sei;
5166*495ae853SAndroid Build Coastguard Worker
5167*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
5168*495ae853SAndroid Build Coastguard Worker
5169*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ave_params_present_flag = ps_ip->u1_sei_ave_params_present_flag;
5170*495ae853SAndroid Build Coastguard Worker
5171*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u4_ambient_illuminance = ps_ip->u4_ambient_illuminance;
5172*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u2_ambient_light_x = ps_ip->u2_ambient_light_x;
5173*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u2_ambient_light_y = ps_ip->u2_ambient_light_y;
5174*495ae853SAndroid Build Coastguard Worker
5175*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->u4_timestamp_high;
5176*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->u4_timestamp_low;
5177*495ae853SAndroid Build Coastguard Worker
5178*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5179*495ae853SAndroid Build Coastguard Worker }
5180*495ae853SAndroid Build Coastguard Worker
5181*495ae853SAndroid Build Coastguard Worker /**
5182*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5183*495ae853SAndroid Build Coastguard Worker *
5184*495ae853SAndroid Build Coastguard Worker * @brief
5185*495ae853SAndroid Build Coastguard Worker * Sets content color volume sei params
5186*495ae853SAndroid Build Coastguard Worker *
5187*495ae853SAndroid Build Coastguard Worker * @par Description:
5188*495ae853SAndroid Build Coastguard Worker * Supplemental enhancement information
5189*495ae853SAndroid Build Coastguard Worker *
5190*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5191*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5192*495ae853SAndroid Build Coastguard Worker *
5193*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5194*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5195*495ae853SAndroid Build Coastguard Worker *
5196*495ae853SAndroid Build Coastguard Worker * @param[out] ps_cfg
5197*495ae853SAndroid Build Coastguard Worker * Pointer to config structure to be updated
5198*495ae853SAndroid Build Coastguard Worker *
5199*495ae853SAndroid Build Coastguard Worker * @return error status
5200*495ae853SAndroid Build Coastguard Worker *
5201*495ae853SAndroid Build Coastguard Worker * @remarks none
5202*495ae853SAndroid Build Coastguard Worker *
5203*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5204*495ae853SAndroid Build Coastguard Worker */
isvce_set_sei_ccv_params(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)5205*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_sei_ccv_params(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
5206*495ae853SAndroid Build Coastguard Worker {
5207*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
5208*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5209*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_ip_t *ps_ip = pv_api_ip;
5210*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_op_t *ps_op = pv_api_op;
5211*495ae853SAndroid Build Coastguard Worker sei_params_t *ps_sei = &ps_cfg->s_sei;
5212*495ae853SAndroid Build Coastguard Worker
5213*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
5214*495ae853SAndroid Build Coastguard Worker
5215*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ccv_params_present_flag = ps_ip->u1_sei_ccv_params_present_flag;
5216*495ae853SAndroid Build Coastguard Worker
5217*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_cancel_flag = ps_ip->u1_ccv_cancel_flag;
5218*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_persistence_flag = ps_ip->u1_ccv_persistence_flag;
5219*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_primaries_present_flag = ps_ip->u1_ccv_primaries_present_flag;
5220*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag =
5221*495ae853SAndroid Build Coastguard Worker ps_ip->u1_ccv_min_luminance_value_present_flag;
5222*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag =
5223*495ae853SAndroid Build Coastguard Worker ps_ip->u1_ccv_max_luminance_value_present_flag;
5224*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_avg_luminance_value_present_flag =
5225*495ae853SAndroid Build Coastguard Worker ps_ip->u1_ccv_avg_luminance_value_present_flag;
5226*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_reserved_zero_2bits = ps_ip->u1_ccv_reserved_zero_2bits;
5227*495ae853SAndroid Build Coastguard Worker
5228*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_CCV_PRIMARIES; i4_count++)
5229*495ae853SAndroid Build Coastguard Worker {
5230*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.ai4_ccv_primaries_x[i4_count] =
5231*495ae853SAndroid Build Coastguard Worker ps_ip->ai4_ccv_primaries_x[i4_count];
5232*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.ai4_ccv_primaries_y[i4_count] =
5233*495ae853SAndroid Build Coastguard Worker ps_ip->ai4_ccv_primaries_y[i4_count];
5234*495ae853SAndroid Build Coastguard Worker }
5235*495ae853SAndroid Build Coastguard Worker
5236*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_min_luminance_value = ps_ip->u4_ccv_min_luminance_value;
5237*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_max_luminance_value = ps_ip->u4_ccv_max_luminance_value;
5238*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_avg_luminance_value = ps_ip->u4_ccv_avg_luminance_value;
5239*495ae853SAndroid Build Coastguard Worker
5240*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->u4_timestamp_high;
5241*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->u4_timestamp_low;
5242*495ae853SAndroid Build Coastguard Worker
5243*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5244*495ae853SAndroid Build Coastguard Worker }
5245*495ae853SAndroid Build Coastguard Worker
5246*495ae853SAndroid Build Coastguard Worker /**
5247*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5248*495ae853SAndroid Build Coastguard Worker *
5249*495ae853SAndroid Build Coastguard Worker * @brief
5250*495ae853SAndroid Build Coastguard Worker * Sets number of cores
5251*495ae853SAndroid Build Coastguard Worker *
5252*495ae853SAndroid Build Coastguard Worker * @par Description:
5253*495ae853SAndroid Build Coastguard Worker * Sets number of cores
5254*495ae853SAndroid Build Coastguard Worker *
5255*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
5256*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
5257*495ae853SAndroid Build Coastguard Worker *
5258*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5259*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5260*495ae853SAndroid Build Coastguard Worker *
5261*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5262*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5263*495ae853SAndroid Build Coastguard Worker *
5264*495ae853SAndroid Build Coastguard Worker * @returns error status
5265*495ae853SAndroid Build Coastguard Worker *
5266*495ae853SAndroid Build Coastguard Worker * @remarks The number of encoder threads is limited to MAX_PROCESS_THREADS
5267*495ae853SAndroid Build Coastguard Worker *
5268*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5269*495ae853SAndroid Build Coastguard Worker */
isvce_set_num_cores(void * pv_api_ip,void * pv_api_op,isvce_cfg_params_t * ps_cfg)5270*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_set_num_cores(void *pv_api_ip, void *pv_api_op, isvce_cfg_params_t *ps_cfg)
5271*495ae853SAndroid Build Coastguard Worker {
5272*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5273*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_ip_t *ps_ip = pv_api_ip;
5274*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_op_t *ps_op = pv_api_op;
5275*495ae853SAndroid Build Coastguard Worker
5276*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
5277*495ae853SAndroid Build Coastguard Worker
5278*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_num_cores = MIN(ps_ip->s_ive_ip.u4_num_cores, MAX_PROCESS_THREADS);
5279*495ae853SAndroid Build Coastguard Worker
5280*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_high = ps_ip->s_ive_ip.u4_timestamp_high;
5281*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_timestamp_low = ps_ip->s_ive_ip.u4_timestamp_low;
5282*495ae853SAndroid Build Coastguard Worker
5283*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5284*495ae853SAndroid Build Coastguard Worker }
5285*495ae853SAndroid Build Coastguard Worker
5286*495ae853SAndroid Build Coastguard Worker /**
5287*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5288*495ae853SAndroid Build Coastguard Worker *
5289*495ae853SAndroid Build Coastguard Worker * @brief
5290*495ae853SAndroid Build Coastguard Worker * Resets encoder state
5291*495ae853SAndroid Build Coastguard Worker *
5292*495ae853SAndroid Build Coastguard Worker * @par Description:
5293*495ae853SAndroid Build Coastguard Worker * Resets encoder state by calling isvce_init()
5294*495ae853SAndroid Build Coastguard Worker *
5295*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
5296*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
5297*495ae853SAndroid Build Coastguard Worker *
5298*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5299*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5300*495ae853SAndroid Build Coastguard Worker *
5301*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5302*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5303*495ae853SAndroid Build Coastguard Worker *
5304*495ae853SAndroid Build Coastguard Worker * @returns error status
5305*495ae853SAndroid Build Coastguard Worker *
5306*495ae853SAndroid Build Coastguard Worker * @remarks none
5307*495ae853SAndroid Build Coastguard Worker *
5308*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5309*495ae853SAndroid Build Coastguard Worker */
isvce_reset(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op)5310*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_reset(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
5311*495ae853SAndroid Build Coastguard Worker {
5312*495ae853SAndroid Build Coastguard Worker /* codec ctxt */
5313*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) (ps_codec_obj->pv_codec_handle);
5314*495ae853SAndroid Build Coastguard Worker
5315*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5316*495ae853SAndroid Build Coastguard Worker isvce_ctl_reset_op_t *ps_op = pv_api_op;
5317*495ae853SAndroid Build Coastguard Worker
5318*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
5319*495ae853SAndroid Build Coastguard Worker
5320*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = 0;
5321*495ae853SAndroid Build Coastguard Worker
5322*495ae853SAndroid Build Coastguard Worker if(ps_codec != NULL)
5323*495ae853SAndroid Build Coastguard Worker {
5324*495ae853SAndroid Build Coastguard Worker isvce_init(ps_codec);
5325*495ae853SAndroid Build Coastguard Worker }
5326*495ae853SAndroid Build Coastguard Worker else
5327*495ae853SAndroid Build Coastguard Worker {
5328*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = IH264E_INIT_NOT_DONE;
5329*495ae853SAndroid Build Coastguard Worker }
5330*495ae853SAndroid Build Coastguard Worker
5331*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5332*495ae853SAndroid Build Coastguard Worker }
5333*495ae853SAndroid Build Coastguard Worker
isvce_ctl_set_error_code(void * pv_api_op,ISVCE_CONTROL_API_COMMAND_TYPE_T e_sub_cmd)5334*495ae853SAndroid Build Coastguard Worker static void isvce_ctl_set_error_code(void *pv_api_op, ISVCE_CONTROL_API_COMMAND_TYPE_T e_sub_cmd)
5335*495ae853SAndroid Build Coastguard Worker {
5336*495ae853SAndroid Build Coastguard Worker switch(e_sub_cmd)
5337*495ae853SAndroid Build Coastguard Worker {
5338*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DIMENSIONS:
5339*495ae853SAndroid Build Coastguard Worker {
5340*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_dimensions_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5341*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5342*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_dimensions_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5343*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5344*495ae853SAndroid Build Coastguard Worker
5345*495ae853SAndroid Build Coastguard Worker break;
5346*495ae853SAndroid Build Coastguard Worker }
5347*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMERATE:
5348*495ae853SAndroid Build Coastguard Worker {
5349*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_frame_rate_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5350*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5351*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_frame_rate_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5352*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5353*495ae853SAndroid Build Coastguard Worker
5354*495ae853SAndroid Build Coastguard Worker break;
5355*495ae853SAndroid Build Coastguard Worker }
5356*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_BITRATE:
5357*495ae853SAndroid Build Coastguard Worker {
5358*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_bitrate_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1
5359*495ae853SAndroid Build Coastguard Worker << IVE_FATALERROR;
5360*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_bitrate_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5361*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5362*495ae853SAndroid Build Coastguard Worker
5363*495ae853SAndroid Build Coastguard Worker break;
5364*495ae853SAndroid Build Coastguard Worker }
5365*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMETYPE:
5366*495ae853SAndroid Build Coastguard Worker {
5367*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_frame_type_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5368*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5369*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_frame_type_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5370*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5371*495ae853SAndroid Build Coastguard Worker
5372*495ae853SAndroid Build Coastguard Worker break;
5373*495ae853SAndroid Build Coastguard Worker }
5374*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_QP:
5375*495ae853SAndroid Build Coastguard Worker {
5376*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_qp_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1 << IVE_FATALERROR;
5377*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_qp_op_t *) pv_api_op)->s_ive_op.u4_error_code |= IH264E_INIT_NOT_DONE;
5378*495ae853SAndroid Build Coastguard Worker
5379*495ae853SAndroid Build Coastguard Worker break;
5380*495ae853SAndroid Build Coastguard Worker }
5381*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ENC_MODE:
5382*495ae853SAndroid Build Coastguard Worker {
5383*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_enc_mode_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5384*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5385*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_enc_mode_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5386*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5387*495ae853SAndroid Build Coastguard Worker
5388*495ae853SAndroid Build Coastguard Worker break;
5389*495ae853SAndroid Build Coastguard Worker }
5390*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VBV_PARAMS:
5391*495ae853SAndroid Build Coastguard Worker {
5392*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_vbv_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5393*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5394*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_vbv_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5395*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5396*495ae853SAndroid Build Coastguard Worker
5397*495ae853SAndroid Build Coastguard Worker break;
5398*495ae853SAndroid Build Coastguard Worker }
5399*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_AIR_PARAMS:
5400*495ae853SAndroid Build Coastguard Worker {
5401*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_air_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5402*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5403*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_air_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5404*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5405*495ae853SAndroid Build Coastguard Worker
5406*495ae853SAndroid Build Coastguard Worker break;
5407*495ae853SAndroid Build Coastguard Worker }
5408*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ME_PARAMS:
5409*495ae853SAndroid Build Coastguard Worker {
5410*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_me_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5411*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5412*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_me_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5413*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5414*495ae853SAndroid Build Coastguard Worker
5415*495ae853SAndroid Build Coastguard Worker break;
5416*495ae853SAndroid Build Coastguard Worker }
5417*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_IPE_PARAMS:
5418*495ae853SAndroid Build Coastguard Worker {
5419*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_ipe_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5420*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5421*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_ipe_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5422*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5423*495ae853SAndroid Build Coastguard Worker
5424*495ae853SAndroid Build Coastguard Worker break;
5425*495ae853SAndroid Build Coastguard Worker }
5426*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_GOP_PARAMS:
5427*495ae853SAndroid Build Coastguard Worker {
5428*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_gop_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5429*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5430*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_gop_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5431*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5432*495ae853SAndroid Build Coastguard Worker
5433*495ae853SAndroid Build Coastguard Worker break;
5434*495ae853SAndroid Build Coastguard Worker }
5435*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_PROFILE_PARAMS:
5436*495ae853SAndroid Build Coastguard Worker {
5437*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_profile_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5438*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5439*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_profile_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5440*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5441*495ae853SAndroid Build Coastguard Worker
5442*495ae853SAndroid Build Coastguard Worker break;
5443*495ae853SAndroid Build Coastguard Worker }
5444*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DEBLOCK_PARAMS:
5445*495ae853SAndroid Build Coastguard Worker {
5446*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_deblock_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5447*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5448*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_deblock_params_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5449*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5450*495ae853SAndroid Build Coastguard Worker
5451*495ae853SAndroid Build Coastguard Worker break;
5452*495ae853SAndroid Build Coastguard Worker }
5453*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VUI_PARAMS:
5454*495ae853SAndroid Build Coastguard Worker {
5455*495ae853SAndroid Build Coastguard Worker ((isvce_vui_op_t *) pv_api_op)->u4_error_code |= 1 << IVE_FATALERROR;
5456*495ae853SAndroid Build Coastguard Worker ((isvce_vui_op_t *) pv_api_op)->u4_error_code |= IH264E_INIT_NOT_DONE;
5457*495ae853SAndroid Build Coastguard Worker
5458*495ae853SAndroid Build Coastguard Worker break;
5459*495ae853SAndroid Build Coastguard Worker }
5460*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_MDCV_PARAMS:
5461*495ae853SAndroid Build Coastguard Worker {
5462*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_mdcv_params_op_t *) pv_api_op)->u4_error_code |= 1
5463*495ae853SAndroid Build Coastguard Worker << IVE_FATALERROR;
5464*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_mdcv_params_op_t *) pv_api_op)->u4_error_code |=
5465*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5466*495ae853SAndroid Build Coastguard Worker
5467*495ae853SAndroid Build Coastguard Worker break;
5468*495ae853SAndroid Build Coastguard Worker }
5469*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CLL_PARAMS:
5470*495ae853SAndroid Build Coastguard Worker {
5471*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_cll_params_op_t *) pv_api_op)->u4_error_code |= 1 << IVE_FATALERROR;
5472*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_cll_params_op_t *) pv_api_op)->u4_error_code |=
5473*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5474*495ae853SAndroid Build Coastguard Worker
5475*495ae853SAndroid Build Coastguard Worker break;
5476*495ae853SAndroid Build Coastguard Worker }
5477*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_AVE_PARAMS:
5478*495ae853SAndroid Build Coastguard Worker {
5479*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_ave_params_op_t *) pv_api_op)->u4_error_code |= 1 << IVE_FATALERROR;
5480*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_ave_params_op_t *) pv_api_op)->u4_error_code |=
5481*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5482*495ae853SAndroid Build Coastguard Worker
5483*495ae853SAndroid Build Coastguard Worker break;
5484*495ae853SAndroid Build Coastguard Worker }
5485*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CCV_PARAMS:
5486*495ae853SAndroid Build Coastguard Worker {
5487*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_ccv_params_op_t *) pv_api_op)->u4_error_code |= 1 << IVE_FATALERROR;
5488*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_sei_ccv_params_op_t *) pv_api_op)->u4_error_code |=
5489*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5490*495ae853SAndroid Build Coastguard Worker
5491*495ae853SAndroid Build Coastguard Worker break;
5492*495ae853SAndroid Build Coastguard Worker }
5493*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_RESET:
5494*495ae853SAndroid Build Coastguard Worker {
5495*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_reset_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1 << IVE_FATALERROR;
5496*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_reset_op_t *) pv_api_op)->s_ive_op.u4_error_code |= IH264E_INIT_NOT_DONE;
5497*495ae853SAndroid Build Coastguard Worker
5498*495ae853SAndroid Build Coastguard Worker break;
5499*495ae853SAndroid Build Coastguard Worker }
5500*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SETDEFAULT:
5501*495ae853SAndroid Build Coastguard Worker {
5502*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_setdefault_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1
5503*495ae853SAndroid Build Coastguard Worker << IVE_FATALERROR;
5504*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_setdefault_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5505*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5506*495ae853SAndroid Build Coastguard Worker
5507*495ae853SAndroid Build Coastguard Worker break;
5508*495ae853SAndroid Build Coastguard Worker }
5509*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_FLUSH:
5510*495ae853SAndroid Build Coastguard Worker {
5511*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_flush_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1 << IVE_FATALERROR;
5512*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_flush_op_t *) pv_api_op)->s_ive_op.u4_error_code |= IH264E_INIT_NOT_DONE;
5513*495ae853SAndroid Build Coastguard Worker
5514*495ae853SAndroid Build Coastguard Worker break;
5515*495ae853SAndroid Build Coastguard Worker }
5516*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETBUFINFO:
5517*495ae853SAndroid Build Coastguard Worker {
5518*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_getbufinfo_op_t *) pv_api_op)->s_ive_op.u4_error_code |= 1
5519*495ae853SAndroid Build Coastguard Worker << IVE_FATALERROR;
5520*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_getbufinfo_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5521*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5522*495ae853SAndroid Build Coastguard Worker
5523*495ae853SAndroid Build Coastguard Worker break;
5524*495ae853SAndroid Build Coastguard Worker }
5525*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETVERSION:
5526*495ae853SAndroid Build Coastguard Worker {
5527*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_getversioninfo_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5528*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5529*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_getversioninfo_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5530*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5531*495ae853SAndroid Build Coastguard Worker
5532*495ae853SAndroid Build Coastguard Worker break;
5533*495ae853SAndroid Build Coastguard Worker }
5534*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_NUM_CORES:
5535*495ae853SAndroid Build Coastguard Worker {
5536*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_num_cores_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5537*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5538*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_set_num_cores_op_t *) pv_api_op)->s_ive_op.u4_error_code |=
5539*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5540*495ae853SAndroid Build Coastguard Worker
5541*495ae853SAndroid Build Coastguard Worker break;
5542*495ae853SAndroid Build Coastguard Worker }
5543*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GET_ENC_FRAME_DIMENSIONS:
5544*495ae853SAndroid Build Coastguard Worker {
5545*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_get_enc_dimensions_op_t *) pv_api_op)->u4_error_code |= 1 << IVE_FATALERROR;
5546*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_get_enc_dimensions_op_t *) pv_api_op)->u4_error_code |=
5547*495ae853SAndroid Build Coastguard Worker IH264E_INIT_NOT_DONE;
5548*495ae853SAndroid Build Coastguard Worker
5549*495ae853SAndroid Build Coastguard Worker break;
5550*495ae853SAndroid Build Coastguard Worker }
5551*495ae853SAndroid Build Coastguard Worker default:
5552*495ae853SAndroid Build Coastguard Worker {
5553*495ae853SAndroid Build Coastguard Worker ASSERT(0);
5554*495ae853SAndroid Build Coastguard Worker }
5555*495ae853SAndroid Build Coastguard Worker }
5556*495ae853SAndroid Build Coastguard Worker }
5557*495ae853SAndroid Build Coastguard Worker
5558*495ae853SAndroid Build Coastguard Worker /**
5559*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5560*495ae853SAndroid Build Coastguard Worker *
5561*495ae853SAndroid Build Coastguard Worker * @brief
5562*495ae853SAndroid Build Coastguard Worker * Codec control call
5563*495ae853SAndroid Build Coastguard Worker *
5564*495ae853SAndroid Build Coastguard Worker * @par Description:
5565*495ae853SAndroid Build Coastguard Worker * Codec control call which in turn calls appropriate calls based on
5566*495ae853SAndroid Build Coastguard Worker *sub-command
5567*495ae853SAndroid Build Coastguard Worker *
5568*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
5569*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
5570*495ae853SAndroid Build Coastguard Worker *
5571*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5572*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
5573*495ae853SAndroid Build Coastguard Worker *
5574*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5575*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
5576*495ae853SAndroid Build Coastguard Worker *
5577*495ae853SAndroid Build Coastguard Worker * @returns error status
5578*495ae853SAndroid Build Coastguard Worker *
5579*495ae853SAndroid Build Coastguard Worker * @remarks none
5580*495ae853SAndroid Build Coastguard Worker *
5581*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5582*495ae853SAndroid Build Coastguard Worker */
isvce_ctl(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op,ISVCE_CONTROL_API_COMMAND_TYPE_T e_ctl_cmd)5583*495ae853SAndroid Build Coastguard Worker static WORD32 isvce_ctl(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op,
5584*495ae853SAndroid Build Coastguard Worker ISVCE_CONTROL_API_COMMAND_TYPE_T e_ctl_cmd)
5585*495ae853SAndroid Build Coastguard Worker {
5586*495ae853SAndroid Build Coastguard Worker WORD32 i;
5587*495ae853SAndroid Build Coastguard Worker
5588*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = (isvce_codec_t *) ps_codec_obj->pv_codec_handle;
5589*495ae853SAndroid Build Coastguard Worker isvce_cfg_params_t *ps_cfg = NULL;
5590*495ae853SAndroid Build Coastguard Worker
5591*495ae853SAndroid Build Coastguard Worker IV_STATUS_T ret = IV_SUCCESS;
5592*495ae853SAndroid Build Coastguard Worker
5593*495ae853SAndroid Build Coastguard Worker /* control call is for configuring encoding params, this is not to be called
5594*495ae853SAndroid Build Coastguard Worker * before a successful init call */
5595*495ae853SAndroid Build Coastguard Worker if(ps_codec->i4_init_done != 1)
5596*495ae853SAndroid Build Coastguard Worker {
5597*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_error_code(pv_api_op, e_ctl_cmd);
5598*495ae853SAndroid Build Coastguard Worker
5599*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5600*495ae853SAndroid Build Coastguard Worker }
5601*495ae853SAndroid Build Coastguard Worker
5602*495ae853SAndroid Build Coastguard Worker /* make it thread safe */
5603*495ae853SAndroid Build Coastguard Worker ithread_mutex_lock(ps_codec->pv_ctl_mutex);
5604*495ae853SAndroid Build Coastguard Worker
5605*495ae853SAndroid Build Coastguard Worker /* find a free config param set to hold current parameters */
5606*495ae853SAndroid Build Coastguard Worker if(e_ctl_cmd != ISVCE_CMD_CTL_GET_ENC_FRAME_DIMENSIONS)
5607*495ae853SAndroid Build Coastguard Worker {
5608*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_ACTIVE_CONFIG_PARAMS; i++)
5609*495ae853SAndroid Build Coastguard Worker {
5610*495ae853SAndroid Build Coastguard Worker if(0 == ps_codec->as_cfg[i].u4_is_valid)
5611*495ae853SAndroid Build Coastguard Worker {
5612*495ae853SAndroid Build Coastguard Worker ps_cfg = &ps_codec->as_cfg[i];
5613*495ae853SAndroid Build Coastguard Worker break;
5614*495ae853SAndroid Build Coastguard Worker }
5615*495ae853SAndroid Build Coastguard Worker }
5616*495ae853SAndroid Build Coastguard Worker
5617*495ae853SAndroid Build Coastguard Worker /* If all are invalid, then start overwriting from the head config params */
5618*495ae853SAndroid Build Coastguard Worker if(NULL == ps_cfg)
5619*495ae853SAndroid Build Coastguard Worker {
5620*495ae853SAndroid Build Coastguard Worker ps_cfg = &ps_codec->as_cfg[0];
5621*495ae853SAndroid Build Coastguard Worker }
5622*495ae853SAndroid Build Coastguard Worker
5623*495ae853SAndroid Build Coastguard Worker ps_cfg->u4_is_valid = 1;
5624*495ae853SAndroid Build Coastguard Worker
5625*495ae853SAndroid Build Coastguard Worker ps_cfg->s_svc_params = ps_codec->s_cfg.s_svc_params;
5626*495ae853SAndroid Build Coastguard Worker ps_cfg->e_cmd = e_ctl_cmd;
5627*495ae853SAndroid Build Coastguard Worker }
5628*495ae853SAndroid Build Coastguard Worker
5629*495ae853SAndroid Build Coastguard Worker switch(e_ctl_cmd)
5630*495ae853SAndroid Build Coastguard Worker {
5631*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DIMENSIONS:
5632*495ae853SAndroid Build Coastguard Worker ret = isvce_set_dimensions(pv_api_ip, pv_api_op, ps_cfg);
5633*495ae853SAndroid Build Coastguard Worker break;
5634*495ae853SAndroid Build Coastguard Worker
5635*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMERATE:
5636*495ae853SAndroid Build Coastguard Worker ret = isvce_set_frame_rate(pv_api_ip, pv_api_op, ps_cfg);
5637*495ae853SAndroid Build Coastguard Worker break;
5638*495ae853SAndroid Build Coastguard Worker
5639*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_BITRATE:
5640*495ae853SAndroid Build Coastguard Worker ret = isvce_set_bit_rate(pv_api_ip, pv_api_op, ps_cfg);
5641*495ae853SAndroid Build Coastguard Worker break;
5642*495ae853SAndroid Build Coastguard Worker
5643*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_FRAMETYPE:
5644*495ae853SAndroid Build Coastguard Worker ret = isvce_set_frame_type(pv_api_ip, pv_api_op, ps_cfg);
5645*495ae853SAndroid Build Coastguard Worker break;
5646*495ae853SAndroid Build Coastguard Worker
5647*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_QP:
5648*495ae853SAndroid Build Coastguard Worker ret = isvce_set_qp(pv_api_ip, pv_api_op, ps_cfg);
5649*495ae853SAndroid Build Coastguard Worker break;
5650*495ae853SAndroid Build Coastguard Worker
5651*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ENC_MODE:
5652*495ae853SAndroid Build Coastguard Worker ret = isvce_set_enc_mode(pv_api_ip, pv_api_op, ps_cfg);
5653*495ae853SAndroid Build Coastguard Worker break;
5654*495ae853SAndroid Build Coastguard Worker
5655*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VBV_PARAMS:
5656*495ae853SAndroid Build Coastguard Worker ret = isvce_set_vbv_params(pv_api_ip, pv_api_op, ps_cfg);
5657*495ae853SAndroid Build Coastguard Worker break;
5658*495ae853SAndroid Build Coastguard Worker
5659*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_AIR_PARAMS:
5660*495ae853SAndroid Build Coastguard Worker ret = isvc_set_air_params(pv_api_ip, pv_api_op, ps_cfg);
5661*495ae853SAndroid Build Coastguard Worker break;
5662*495ae853SAndroid Build Coastguard Worker
5663*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_ME_PARAMS:
5664*495ae853SAndroid Build Coastguard Worker ret = isvc_set_me_params(pv_api_ip, pv_api_op, ps_cfg);
5665*495ae853SAndroid Build Coastguard Worker break;
5666*495ae853SAndroid Build Coastguard Worker
5667*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_IPE_PARAMS:
5668*495ae853SAndroid Build Coastguard Worker ret = isvc_set_ipe_params(pv_api_ip, pv_api_op, ps_cfg);
5669*495ae853SAndroid Build Coastguard Worker break;
5670*495ae853SAndroid Build Coastguard Worker
5671*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_GOP_PARAMS:
5672*495ae853SAndroid Build Coastguard Worker ret = isvc_set_gop_params(pv_api_ip, pv_api_op, ps_cfg);
5673*495ae853SAndroid Build Coastguard Worker break;
5674*495ae853SAndroid Build Coastguard Worker
5675*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_PROFILE_PARAMS:
5676*495ae853SAndroid Build Coastguard Worker ret = isvc_set_profile_params(pv_api_ip, pv_api_op, ps_cfg);
5677*495ae853SAndroid Build Coastguard Worker break;
5678*495ae853SAndroid Build Coastguard Worker
5679*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_DEBLOCK_PARAMS:
5680*495ae853SAndroid Build Coastguard Worker ret = isvc_set_deblock_params(pv_api_ip, pv_api_op, ps_cfg);
5681*495ae853SAndroid Build Coastguard Worker break;
5682*495ae853SAndroid Build Coastguard Worker
5683*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_VUI_PARAMS:
5684*495ae853SAndroid Build Coastguard Worker ret = isvce_set_vui_params(pv_api_ip, pv_api_op, ps_cfg);
5685*495ae853SAndroid Build Coastguard Worker break;
5686*495ae853SAndroid Build Coastguard Worker
5687*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_MDCV_PARAMS:
5688*495ae853SAndroid Build Coastguard Worker ret = isvce_set_sei_mdcv_params(pv_api_ip, pv_api_op, ps_cfg);
5689*495ae853SAndroid Build Coastguard Worker break;
5690*495ae853SAndroid Build Coastguard Worker
5691*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CLL_PARAMS:
5692*495ae853SAndroid Build Coastguard Worker ret = isvce_set_sei_cll_params(pv_api_ip, pv_api_op, ps_cfg);
5693*495ae853SAndroid Build Coastguard Worker break;
5694*495ae853SAndroid Build Coastguard Worker
5695*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_AVE_PARAMS:
5696*495ae853SAndroid Build Coastguard Worker ret = isvce_set_sei_ave_params(pv_api_ip, pv_api_op, ps_cfg);
5697*495ae853SAndroid Build Coastguard Worker break;
5698*495ae853SAndroid Build Coastguard Worker
5699*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_SEI_CCV_PARAMS:
5700*495ae853SAndroid Build Coastguard Worker ret = isvce_set_sei_ccv_params(pv_api_ip, pv_api_op, ps_cfg);
5701*495ae853SAndroid Build Coastguard Worker break;
5702*495ae853SAndroid Build Coastguard Worker
5703*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_RESET:
5704*495ae853SAndroid Build Coastguard Worker
5705*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5706*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5707*495ae853SAndroid Build Coastguard Worker
5708*495ae853SAndroid Build Coastguard Worker ret = isvce_reset(ps_codec_obj, pv_api_ip, pv_api_op);
5709*495ae853SAndroid Build Coastguard Worker break;
5710*495ae853SAndroid Build Coastguard Worker
5711*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SETDEFAULT:
5712*495ae853SAndroid Build Coastguard Worker {
5713*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5714*495ae853SAndroid Build Coastguard Worker isvce_ctl_setdefault_op_t *ps_op = pv_api_op;
5715*495ae853SAndroid Build Coastguard Worker
5716*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5717*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5718*495ae853SAndroid Build Coastguard Worker
5719*495ae853SAndroid Build Coastguard Worker /* error status */
5720*495ae853SAndroid Build Coastguard Worker ret = isvce_set_default_params(ps_cfg);
5721*495ae853SAndroid Build Coastguard Worker
5722*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = ret;
5723*495ae853SAndroid Build Coastguard Worker
5724*495ae853SAndroid Build Coastguard Worker break;
5725*495ae853SAndroid Build Coastguard Worker }
5726*495ae853SAndroid Build Coastguard Worker
5727*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_FLUSH:
5728*495ae853SAndroid Build Coastguard Worker
5729*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5730*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5731*495ae853SAndroid Build Coastguard Worker
5732*495ae853SAndroid Build Coastguard Worker ret = isvce_set_flush_mode(ps_codec_obj, pv_api_ip, pv_api_op);
5733*495ae853SAndroid Build Coastguard Worker break;
5734*495ae853SAndroid Build Coastguard Worker
5735*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETBUFINFO:
5736*495ae853SAndroid Build Coastguard Worker
5737*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5738*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5739*495ae853SAndroid Build Coastguard Worker
5740*495ae853SAndroid Build Coastguard Worker ret = isvce_get_buf_info(ps_codec_obj->pv_codec_handle, pv_api_ip, pv_api_op);
5741*495ae853SAndroid Build Coastguard Worker break;
5742*495ae853SAndroid Build Coastguard Worker
5743*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GETVERSION:
5744*495ae853SAndroid Build Coastguard Worker {
5745*495ae853SAndroid Build Coastguard Worker /* ctrl call I/O structures */
5746*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_ip_t *ps_ip = pv_api_ip;
5747*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_op_t *ps_op = pv_api_op;
5748*495ae853SAndroid Build Coastguard Worker
5749*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5750*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5751*495ae853SAndroid Build Coastguard Worker
5752*495ae853SAndroid Build Coastguard Worker /* error status */
5753*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = IV_SUCCESS;
5754*495ae853SAndroid Build Coastguard Worker
5755*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ive_ip.u4_version_bufsize <= 0)
5756*495ae853SAndroid Build Coastguard Worker {
5757*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = IH264E_CXA_VERS_BUF_INSUFFICIENT;
5758*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
5759*495ae853SAndroid Build Coastguard Worker }
5760*495ae853SAndroid Build Coastguard Worker else
5761*495ae853SAndroid Build Coastguard Worker {
5762*495ae853SAndroid Build Coastguard Worker ret = ih264e_get_version((CHAR *) ps_ip->s_ive_ip.pu1_version,
5763*495ae853SAndroid Build Coastguard Worker ps_ip->s_ive_ip.u4_version_bufsize);
5764*495ae853SAndroid Build Coastguard Worker
5765*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
5766*495ae853SAndroid Build Coastguard Worker {
5767*495ae853SAndroid Build Coastguard Worker ps_op->s_ive_op.u4_error_code = IH264E_CXA_VERS_BUF_INSUFFICIENT;
5768*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
5769*495ae853SAndroid Build Coastguard Worker }
5770*495ae853SAndroid Build Coastguard Worker }
5771*495ae853SAndroid Build Coastguard Worker break;
5772*495ae853SAndroid Build Coastguard Worker }
5773*495ae853SAndroid Build Coastguard Worker
5774*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_SET_NUM_CORES:
5775*495ae853SAndroid Build Coastguard Worker ret = isvce_set_num_cores(pv_api_ip, pv_api_op, ps_cfg);
5776*495ae853SAndroid Build Coastguard Worker break;
5777*495ae853SAndroid Build Coastguard Worker
5778*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_CTL_GET_ENC_FRAME_DIMENSIONS:
5779*495ae853SAndroid Build Coastguard Worker {
5780*495ae853SAndroid Build Coastguard Worker ps_cfg = NULL;
5781*495ae853SAndroid Build Coastguard Worker
5782*495ae853SAndroid Build Coastguard Worker for(i = 0; i < MAX_ACTIVE_CONFIG_PARAMS; i++)
5783*495ae853SAndroid Build Coastguard Worker {
5784*495ae853SAndroid Build Coastguard Worker if(ps_codec->as_cfg[i].u4_is_valid &&
5785*495ae853SAndroid Build Coastguard Worker (ps_codec->as_cfg[i].e_cmd == ISVCE_CMD_CTL_SET_DIMENSIONS))
5786*495ae853SAndroid Build Coastguard Worker {
5787*495ae853SAndroid Build Coastguard Worker ps_cfg = &ps_codec->as_cfg[i];
5788*495ae853SAndroid Build Coastguard Worker
5789*495ae853SAndroid Build Coastguard Worker break;
5790*495ae853SAndroid Build Coastguard Worker }
5791*495ae853SAndroid Build Coastguard Worker }
5792*495ae853SAndroid Build Coastguard Worker
5793*495ae853SAndroid Build Coastguard Worker if(NULL == ps_cfg)
5794*495ae853SAndroid Build Coastguard Worker {
5795*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_get_enc_dimensions_op_t *) pv_api_op)->u4_error_code |=
5796*495ae853SAndroid Build Coastguard Worker 1 << IVE_FATALERROR;
5797*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_get_enc_dimensions_op_t *) pv_api_op)->u4_error_code |=
5798*495ae853SAndroid Build Coastguard Worker IH264E_WIDTH_NOT_SUPPORTED;
5799*495ae853SAndroid Build Coastguard Worker ((isvce_ctl_get_enc_dimensions_op_t *) pv_api_op)->u4_error_code |=
5800*495ae853SAndroid Build Coastguard Worker IH264E_HEIGHT_NOT_SUPPORTED;
5801*495ae853SAndroid Build Coastguard Worker
5802*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5803*495ae853SAndroid Build Coastguard Worker }
5804*495ae853SAndroid Build Coastguard Worker
5805*495ae853SAndroid Build Coastguard Worker ret = isvce_get_enc_frame_dimensions((isvce_ctl_get_enc_dimensions_ip_t *) pv_api_ip,
5806*495ae853SAndroid Build Coastguard Worker (isvce_ctl_get_enc_dimensions_op_t *) pv_api_op,
5807*495ae853SAndroid Build Coastguard Worker ps_cfg);
5808*495ae853SAndroid Build Coastguard Worker
5809*495ae853SAndroid Build Coastguard Worker break;
5810*495ae853SAndroid Build Coastguard Worker }
5811*495ae853SAndroid Build Coastguard Worker
5812*495ae853SAndroid Build Coastguard Worker default:
5813*495ae853SAndroid Build Coastguard Worker /* invalidate config param struct as it is being served right away */
5814*495ae853SAndroid Build Coastguard Worker ps_codec->as_cfg[i].u4_is_valid = 0;
5815*495ae853SAndroid Build Coastguard Worker
5816*495ae853SAndroid Build Coastguard Worker DEBUG("Warning !! unrecognized control api command \n");
5817*495ae853SAndroid Build Coastguard Worker break;
5818*495ae853SAndroid Build Coastguard Worker }
5819*495ae853SAndroid Build Coastguard Worker
5820*495ae853SAndroid Build Coastguard Worker ithread_mutex_unlock(ps_codec->pv_ctl_mutex);
5821*495ae853SAndroid Build Coastguard Worker
5822*495ae853SAndroid Build Coastguard Worker return ret;
5823*495ae853SAndroid Build Coastguard Worker }
5824*495ae853SAndroid Build Coastguard Worker
5825*495ae853SAndroid Build Coastguard Worker /**
5826*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5827*495ae853SAndroid Build Coastguard Worker *
5828*495ae853SAndroid Build Coastguard Worker * @brief
5829*495ae853SAndroid Build Coastguard Worker * Codec entry point function. All the function calls to the codec are done
5830*495ae853SAndroid Build Coastguard Worker * using this function with different values specified in command
5831*495ae853SAndroid Build Coastguard Worker *
5832*495ae853SAndroid Build Coastguard Worker * @par Description:
5833*495ae853SAndroid Build Coastguard Worker * Arguments are tested for validity and then based on the command
5834*495ae853SAndroid Build Coastguard Worker * appropriate function is called
5835*495ae853SAndroid Build Coastguard Worker *
5836*495ae853SAndroid Build Coastguard Worker * @param[in] ps_handle
5837*495ae853SAndroid Build Coastguard Worker * API level handle for codec
5838*495ae853SAndroid Build Coastguard Worker *
5839*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
5840*495ae853SAndroid Build Coastguard Worker * Input argument structure
5841*495ae853SAndroid Build Coastguard Worker *
5842*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
5843*495ae853SAndroid Build Coastguard Worker * Output argument structure
5844*495ae853SAndroid Build Coastguard Worker *
5845*495ae853SAndroid Build Coastguard Worker * @returns error_status
5846*495ae853SAndroid Build Coastguard Worker *
5847*495ae853SAndroid Build Coastguard Worker * @remarks
5848*495ae853SAndroid Build Coastguard Worker *
5849*495ae853SAndroid Build Coastguard Worker *******************************************************************************
5850*495ae853SAndroid Build Coastguard Worker */
isvce_api_function(iv_obj_t * ps_handle,void * pv_api_ip,void * pv_api_op,isvce_api_cmds_t * ps_iv_api_cmds)5851*495ae853SAndroid Build Coastguard Worker IV_STATUS_T isvce_api_function(iv_obj_t *ps_handle, void *pv_api_ip, void *pv_api_op,
5852*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t *ps_iv_api_cmds)
5853*495ae853SAndroid Build Coastguard Worker {
5854*495ae853SAndroid Build Coastguard Worker IV_STATUS_T e_status;
5855*495ae853SAndroid Build Coastguard Worker WORD32 ret;
5856*495ae853SAndroid Build Coastguard Worker
5857*495ae853SAndroid Build Coastguard Worker ISVCE_API_COMMAND_TYPE_T e_cmd = ps_iv_api_cmds->e_cmd;
5858*495ae853SAndroid Build Coastguard Worker ISVCE_CONTROL_API_COMMAND_TYPE_T e_ctl_cmd = ps_iv_api_cmds->e_ctl_cmd;
5859*495ae853SAndroid Build Coastguard Worker
5860*495ae853SAndroid Build Coastguard Worker /* validate input / output structures */
5861*495ae853SAndroid Build Coastguard Worker e_status = api_check_struct_sanity(ps_handle, pv_api_ip, pv_api_op, ps_iv_api_cmds);
5862*495ae853SAndroid Build Coastguard Worker
5863*495ae853SAndroid Build Coastguard Worker if(e_status != IV_SUCCESS)
5864*495ae853SAndroid Build Coastguard Worker {
5865*495ae853SAndroid Build Coastguard Worker DEBUG("error code = %d\n", *((UWORD32 *) pv_api_op + 1));
5866*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5867*495ae853SAndroid Build Coastguard Worker }
5868*495ae853SAndroid Build Coastguard Worker
5869*495ae853SAndroid Build Coastguard Worker switch(e_cmd)
5870*495ae853SAndroid Build Coastguard Worker {
5871*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_GET_NUM_MEM_REC:
5872*495ae853SAndroid Build Coastguard Worker ret = isvce_get_num_rec(pv_api_ip, pv_api_op);
5873*495ae853SAndroid Build Coastguard Worker break;
5874*495ae853SAndroid Build Coastguard Worker
5875*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_FILL_NUM_MEM_REC:
5876*495ae853SAndroid Build Coastguard Worker ret = isvce_fill_num_mem_rec(pv_api_ip, pv_api_op);
5877*495ae853SAndroid Build Coastguard Worker break;
5878*495ae853SAndroid Build Coastguard Worker
5879*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_INIT:
5880*495ae853SAndroid Build Coastguard Worker ret = isvce_init_mem_rec(ps_handle, pv_api_ip, pv_api_op);
5881*495ae853SAndroid Build Coastguard Worker break;
5882*495ae853SAndroid Build Coastguard Worker
5883*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_RETRIEVE_MEMREC:
5884*495ae853SAndroid Build Coastguard Worker ret = isvce_retrieve_memrec(ps_handle, pv_api_ip, pv_api_op);
5885*495ae853SAndroid Build Coastguard Worker break;
5886*495ae853SAndroid Build Coastguard Worker
5887*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_CTL:
5888*495ae853SAndroid Build Coastguard Worker ret = isvce_ctl(ps_handle, pv_api_ip, pv_api_op, e_ctl_cmd);
5889*495ae853SAndroid Build Coastguard Worker break;
5890*495ae853SAndroid Build Coastguard Worker
5891*495ae853SAndroid Build Coastguard Worker case ISVCE_CMD_VIDEO_ENCODE:
5892*495ae853SAndroid Build Coastguard Worker ret = isvce_encode(ps_handle, pv_api_ip, pv_api_op);
5893*495ae853SAndroid Build Coastguard Worker break;
5894*495ae853SAndroid Build Coastguard Worker
5895*495ae853SAndroid Build Coastguard Worker default:
5896*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
5897*495ae853SAndroid Build Coastguard Worker break;
5898*495ae853SAndroid Build Coastguard Worker }
5899*495ae853SAndroid Build Coastguard Worker
5900*495ae853SAndroid Build Coastguard Worker return (IV_STATUS_T) ret;
5901*495ae853SAndroid Build Coastguard Worker }
5902