xref: /aosp_15_r20/external/libhevc/encoder/ihevce_error_check.c (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar 
21*c83a76b0SSuyog Pawar /*!
22*c83a76b0SSuyog Pawar ******************************************************************************
23*c83a76b0SSuyog Pawar * \file ihevce_error_checks.c
24*c83a76b0SSuyog Pawar *
25*c83a76b0SSuyog Pawar * \brief
26*c83a76b0SSuyog Pawar *    This file contains all the functions which checks the validity of the
27*c83a76b0SSuyog Pawar *    parameters passed to the encoder.
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * \date
30*c83a76b0SSuyog Pawar *    18/09/2012
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar * \author
33*c83a76b0SSuyog Pawar *    Ittiam
34*c83a76b0SSuyog Pawar *
35*c83a76b0SSuyog Pawar * List of Functions
36*c83a76b0SSuyog Pawar *    ihevce_get_level_index()
37*c83a76b0SSuyog Pawar *    ihevce_hle_validate_static_params()
38*c83a76b0SSuyog Pawar *    ihevce_validate_tile_config_params()
39*c83a76b0SSuyog Pawar *
40*c83a76b0SSuyog Pawar ******************************************************************************
41*c83a76b0SSuyog Pawar */
42*c83a76b0SSuyog Pawar 
43*c83a76b0SSuyog Pawar /*****************************************************************************/
44*c83a76b0SSuyog Pawar /* File Includes                                                             */
45*c83a76b0SSuyog Pawar /*****************************************************************************/
46*c83a76b0SSuyog Pawar /* System include files */
47*c83a76b0SSuyog Pawar #include <stdio.h>
48*c83a76b0SSuyog Pawar #include <string.h>
49*c83a76b0SSuyog Pawar #include <stdlib.h>
50*c83a76b0SSuyog Pawar #include <assert.h>
51*c83a76b0SSuyog Pawar #include <stdarg.h>
52*c83a76b0SSuyog Pawar #include <math.h>
53*c83a76b0SSuyog Pawar 
54*c83a76b0SSuyog Pawar /* User include files */
55*c83a76b0SSuyog Pawar #include "ihevc_typedefs.h"
56*c83a76b0SSuyog Pawar #include "itt_video_api.h"
57*c83a76b0SSuyog Pawar #include "ihevce_api.h"
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar #include "rc_cntrl_param.h"
60*c83a76b0SSuyog Pawar #include "rc_frame_info_collector.h"
61*c83a76b0SSuyog Pawar #include "rc_look_ahead_params.h"
62*c83a76b0SSuyog Pawar 
63*c83a76b0SSuyog Pawar #include "ihevc_defs.h"
64*c83a76b0SSuyog Pawar #include "ihevc_macros.h"
65*c83a76b0SSuyog Pawar #include "ihevc_debug.h"
66*c83a76b0SSuyog Pawar #include "ihevc_structs.h"
67*c83a76b0SSuyog Pawar #include "ihevc_platform_macros.h"
68*c83a76b0SSuyog Pawar #include "ihevc_deblk.h"
69*c83a76b0SSuyog Pawar #include "ihevc_itrans_recon.h"
70*c83a76b0SSuyog Pawar #include "ihevc_chroma_itrans_recon.h"
71*c83a76b0SSuyog Pawar #include "ihevc_chroma_intra_pred.h"
72*c83a76b0SSuyog Pawar #include "ihevc_intra_pred.h"
73*c83a76b0SSuyog Pawar #include "ihevc_inter_pred.h"
74*c83a76b0SSuyog Pawar #include "ihevc_mem_fns.h"
75*c83a76b0SSuyog Pawar #include "ihevc_padding.h"
76*c83a76b0SSuyog Pawar #include "ihevc_weighted_pred.h"
77*c83a76b0SSuyog Pawar #include "ihevc_sao.h"
78*c83a76b0SSuyog Pawar #include "ihevc_resi_trans.h"
79*c83a76b0SSuyog Pawar #include "ihevc_quant_iquant_ssd.h"
80*c83a76b0SSuyog Pawar #include "ihevc_cabac_tables.h"
81*c83a76b0SSuyog Pawar #include "ihevc_trans_tables.h"
82*c83a76b0SSuyog Pawar #include "ihevc_trans_macros.h"
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar #include "ihevce_defs.h"
85*c83a76b0SSuyog Pawar #include "ihevce_lap_enc_structs.h"
86*c83a76b0SSuyog Pawar #include "ihevce_hle_interface.h"
87*c83a76b0SSuyog Pawar #include "ihevce_multi_thrd_structs.h"
88*c83a76b0SSuyog Pawar #include "ihevce_multi_thrd_funcs.h"
89*c83a76b0SSuyog Pawar #include "ihevce_me_common_defs.h"
90*c83a76b0SSuyog Pawar #include "ihevce_had_satd.h"
91*c83a76b0SSuyog Pawar #include "ihevce_error_codes.h"
92*c83a76b0SSuyog Pawar #include "ihevce_error_checks.h"
93*c83a76b0SSuyog Pawar #include "ihevce_bitstream.h"
94*c83a76b0SSuyog Pawar #include "ihevce_cabac.h"
95*c83a76b0SSuyog Pawar #include "ihevce_rdoq_macros.h"
96*c83a76b0SSuyog Pawar #include "ihevce_function_selector.h"
97*c83a76b0SSuyog Pawar #include "ihevce_enc_structs.h"
98*c83a76b0SSuyog Pawar #include "ihevce_global_tables.h"
99*c83a76b0SSuyog Pawar #include "ihevce_trace.h"
100*c83a76b0SSuyog Pawar 
101*c83a76b0SSuyog Pawar /*****************************************************************************/
102*c83a76b0SSuyog Pawar /* Function Definitions                                                      */
103*c83a76b0SSuyog Pawar /*****************************************************************************/
104*c83a76b0SSuyog Pawar 
105*c83a76b0SSuyog Pawar /*!
106*c83a76b0SSuyog Pawar ******************************************************************************
107*c83a76b0SSuyog Pawar * \if Function name : ihevce_validate_tile_config_params \endif
108*c83a76b0SSuyog Pawar *
109*c83a76b0SSuyog Pawar * \brief
110*c83a76b0SSuyog Pawar *    This function validates the static parameters related to tiles
111*c83a76b0SSuyog Pawar *
112*c83a76b0SSuyog Pawar * \param[in] Encoder static config prms pointer
113*c83a76b0SSuyog Pawar *
114*c83a76b0SSuyog Pawar * \return
115*c83a76b0SSuyog Pawar *    None
116*c83a76b0SSuyog Pawar *
117*c83a76b0SSuyog Pawar * \author
118*c83a76b0SSuyog Pawar *    Ittiam
119*c83a76b0SSuyog Pawar *
120*c83a76b0SSuyog Pawar *****************************************************************************
121*c83a76b0SSuyog Pawar */
ihevce_validate_tile_config_params(ihevce_static_cfg_params_t * ps_static_cfg_prms)122*c83a76b0SSuyog Pawar WORD32 ihevce_validate_tile_config_params(ihevce_static_cfg_params_t *ps_static_cfg_prms)
123*c83a76b0SSuyog Pawar {
124*c83a76b0SSuyog Pawar     WORD32 error_code = IHEVCE_SUCCESS;
125*c83a76b0SSuyog Pawar     ihevce_sys_api_t *ps_sys_api = &ps_static_cfg_prms->s_sys_api;
126*c83a76b0SSuyog Pawar     void *pv_cb_handle = ps_sys_api->pv_cb_handle;
127*c83a76b0SSuyog Pawar 
128*c83a76b0SSuyog Pawar     /* As of now tiles are not supported */
129*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_app_tile_params.i4_tiles_enabled_flag != 0)
130*c83a76b0SSuyog Pawar     {
131*c83a76b0SSuyog Pawar         error_code = IHEVCE_BAD_TILE_CONFIGURATION;
132*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
133*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_tiles_enabled_flag should be set to 0 \n");
134*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
135*c83a76b0SSuyog Pawar     }
136*c83a76b0SSuyog Pawar 
137*c83a76b0SSuyog Pawar     return error_code;
138*c83a76b0SSuyog Pawar }
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar /*!
141*c83a76b0SSuyog Pawar ******************************************************************************
142*c83a76b0SSuyog Pawar * \if Function name : ihevce_hle_validate_static_params \endif
143*c83a76b0SSuyog Pawar *
144*c83a76b0SSuyog Pawar * \brief
145*c83a76b0SSuyog Pawar *    This function validates the static parameters before creating the encoder
146*c83a76b0SSuyog Pawar *    instance.
147*c83a76b0SSuyog Pawar *
148*c83a76b0SSuyog Pawar * \param[in] Encoder context pointer
149*c83a76b0SSuyog Pawar *
150*c83a76b0SSuyog Pawar * \return
151*c83a76b0SSuyog Pawar *    Error code
152*c83a76b0SSuyog Pawar *
153*c83a76b0SSuyog Pawar * \author
154*c83a76b0SSuyog Pawar *    Ittiam
155*c83a76b0SSuyog Pawar *
156*c83a76b0SSuyog Pawar *****************************************************************************
157*c83a76b0SSuyog Pawar */
ihevce_hle_validate_static_params(ihevce_static_cfg_params_t * ps_static_cfg_prms)158*c83a76b0SSuyog Pawar WORD32 ihevce_hle_validate_static_params(ihevce_static_cfg_params_t *ps_static_cfg_prms)
159*c83a76b0SSuyog Pawar {
160*c83a76b0SSuyog Pawar     WORD32 error_code;
161*c83a76b0SSuyog Pawar     WORD32 i4_resolution_id;
162*c83a76b0SSuyog Pawar     WORD32 ai4_num_bitrate_instances[IHEVCE_MAX_NUM_RESOLUTIONS] = { 1 };
163*c83a76b0SSuyog Pawar     WORD32 i4_num_resolutions;
164*c83a76b0SSuyog Pawar     ihevce_sys_api_t *ps_sys_api = &ps_static_cfg_prms->s_sys_api;
165*c83a76b0SSuyog Pawar     void *pv_cb_handle = ps_sys_api->pv_cb_handle;
166*c83a76b0SSuyog Pawar 
167*c83a76b0SSuyog Pawar     /* derive local variables */
168*c83a76b0SSuyog Pawar     i4_num_resolutions = ps_static_cfg_prms->s_tgt_lyr_prms.i4_num_res_layers;
169*c83a76b0SSuyog Pawar     for(i4_resolution_id = 0; i4_resolution_id < i4_num_resolutions; i4_resolution_id++)
170*c83a76b0SSuyog Pawar     {
171*c83a76b0SSuyog Pawar         ai4_num_bitrate_instances[i4_resolution_id] =
172*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
173*c83a76b0SSuyog Pawar                 .i4_num_bitrate_instances;
174*c83a76b0SSuyog Pawar     }
175*c83a76b0SSuyog Pawar     // clang-format off
176*c83a76b0SSuyog Pawar     if(0 != ps_static_cfg_prms->i4_log_dump_level)
177*c83a76b0SSuyog Pawar     {
178*c83a76b0SSuyog Pawar         /* Print all the config params */
179*c83a76b0SSuyog Pawar         if((0 == ps_static_cfg_prms->i4_res_id) && (0 == ps_static_cfg_prms->i4_br_id))
180*c83a76b0SSuyog Pawar         {
181*c83a76b0SSuyog Pawar             WORD32 i4_resolution_id_loop, i4_i;
182*c83a76b0SSuyog Pawar             WORD32 i4_num_res_layers = ps_static_cfg_prms->s_tgt_lyr_prms.i4_num_res_layers;
183*c83a76b0SSuyog Pawar 
184*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "**********************************************\n");
185*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "*********** STATIC PARAMS CONFIG *************\n");
186*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "**********************************************\n");
187*c83a76b0SSuyog Pawar 
188*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : ps_static_cfg_prms->s_src_prms \n");
189*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_width %d                    \n", ps_static_cfg_prms->s_src_prms.i4_width);
190*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_height %d                   \n", ps_static_cfg_prms->s_src_prms.i4_height);
191*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_frm_rate_num %d             \n", ps_static_cfg_prms->s_src_prms.i4_frm_rate_num);
192*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_frm_rate_denom %d           \n", ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom);
193*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_field_pic %d                \n", ps_static_cfg_prms->s_src_prms.i4_field_pic);
194*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_chr_format %d               \n", ps_static_cfg_prms->s_src_prms.i4_chr_format);
195*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_input_bit_depth %d          \n", ps_static_cfg_prms->s_src_prms.i4_input_bit_depth);
196*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_topfield_first %d           \n\n", ps_static_cfg_prms->s_src_prms.i4_topfield_first);
197*c83a76b0SSuyog Pawar 
198*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : ps_static_cfg_prms->s_tgt_lyr_prms \n");
199*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_num_res_layers %d               \n", i4_num_res_layers);
200*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_multi_res_layer_reuse %d        \n", ps_static_cfg_prms->s_tgt_lyr_prms.i4_multi_res_layer_reuse);
201*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_mbr_quality_setting %d          \n", ps_static_cfg_prms->s_tgt_lyr_prms.i4_mbr_quality_setting);
202*c83a76b0SSuyog Pawar 
203*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : For Each resolution,");
204*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : i4_target_width ");
205*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
206*c83a76b0SSuyog Pawar             {
207*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_width);
208*c83a76b0SSuyog Pawar             }
209*c83a76b0SSuyog Pawar 
210*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : i4_target_width ");
211*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
212*c83a76b0SSuyog Pawar             {
213*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_height);
214*c83a76b0SSuyog Pawar             }
215*c83a76b0SSuyog Pawar 
216*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : i4_frm_rate_scale_factor ");
217*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
218*c83a76b0SSuyog Pawar             {
219*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop,
220*c83a76b0SSuyog Pawar                     ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_frm_rate_scale_factor);
221*c83a76b0SSuyog Pawar             }
222*c83a76b0SSuyog Pawar 
223*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : i4_codec_level ");
224*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
225*c83a76b0SSuyog Pawar             {
226*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_codec_level);
227*c83a76b0SSuyog Pawar             }
228*c83a76b0SSuyog Pawar 
229*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : i4_num_bitrate_instances ");
230*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
231*c83a76b0SSuyog Pawar             {
232*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d", i4_resolution_id_loop,
233*c83a76b0SSuyog Pawar                     ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_num_bitrate_instances);
234*c83a76b0SSuyog Pawar             }
235*c83a76b0SSuyog Pawar 
236*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
237*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
238*c83a76b0SSuyog Pawar             {
239*c83a76b0SSuyog Pawar                 WORD32 i4_num_bitrate_instances, i4_br_loop;
240*c83a76b0SSuyog Pawar                 i4_num_bitrate_instances = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_num_bitrate_instances;
241*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_tgt_bitrate res_id %d ", i4_resolution_id_loop);
242*c83a76b0SSuyog Pawar                 for(i4_br_loop = 0; i4_br_loop < i4_num_bitrate_instances; i4_br_loop++)
243*c83a76b0SSuyog Pawar                 {
244*c83a76b0SSuyog Pawar                     PRINTF(
245*c83a76b0SSuyog Pawar                         ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "br_id %d %d ", i4_br_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].ai4_tgt_bitrate[i4_br_loop]);
246*c83a76b0SSuyog Pawar                 }
247*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
248*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_peak_bitrate res_id %d ", i4_resolution_id_loop);
249*c83a76b0SSuyog Pawar                 for(i4_br_loop = 0; i4_br_loop < i4_num_bitrate_instances; i4_br_loop++)
250*c83a76b0SSuyog Pawar                 {
251*c83a76b0SSuyog Pawar                     PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "br_id %d %d ", i4_br_loop,
252*c83a76b0SSuyog Pawar                         ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].ai4_peak_bitrate[i4_br_loop]);
253*c83a76b0SSuyog Pawar                 }
254*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
255*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : vbv_buffer_size res_id %d ", i4_resolution_id_loop);
256*c83a76b0SSuyog Pawar                 for(i4_br_loop = 0; i4_br_loop < i4_num_bitrate_instances; i4_br_loop++)
257*c83a76b0SSuyog Pawar                 {
258*c83a76b0SSuyog Pawar                     PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "br_id %d %d ", i4_br_loop,
259*c83a76b0SSuyog Pawar                         ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].ai4_max_vbv_buffer_size[i4_br_loop]);
260*c83a76b0SSuyog Pawar                 }
261*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
262*c83a76b0SSuyog Pawar             }
263*c83a76b0SSuyog Pawar 
264*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
265*c83a76b0SSuyog Pawar             {
266*c83a76b0SSuyog Pawar                 WORD32 i4_num_bitrate_instances, i4_br_loop;
267*c83a76b0SSuyog Pawar 
268*c83a76b0SSuyog Pawar                 i4_num_bitrate_instances = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_num_bitrate_instances;
269*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_frame_qp res_id %d ", i4_resolution_id_loop);
270*c83a76b0SSuyog Pawar                 for(i4_br_loop = 0; i4_br_loop < i4_num_bitrate_instances; i4_br_loop++)
271*c83a76b0SSuyog Pawar                 {
272*c83a76b0SSuyog Pawar                     PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "br_id %d %d ", i4_br_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].ai4_frame_qp[i4_br_loop]);
273*c83a76b0SSuyog Pawar                 }
274*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
275*c83a76b0SSuyog Pawar             }
276*c83a76b0SSuyog Pawar 
277*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_internal_bit_depth %d               \n", ps_static_cfg_prms->s_tgt_lyr_prms.i4_internal_bit_depth);
278*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_enable_temporal_scalability %d               \n", ps_static_cfg_prms->s_tgt_lyr_prms.i4_enable_temporal_scalability);
279*c83a76b0SSuyog Pawar 
280*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_quality_preset ");
281*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
282*c83a76b0SSuyog Pawar             {
283*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d", i4_resolution_id_loop, ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id_loop].i4_quality_preset);
284*c83a76b0SSuyog Pawar             }
285*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
286*c83a76b0SSuyog Pawar 
287*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_coding_tools_prms \n");
288*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_idr_period %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period);
289*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_min_idr_period %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_min_closed_gop_period);
290*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_cra_period %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period);
291*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_i_cra_period %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period);
292*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_temporal_layers %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers);
293*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_reference_frames %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_max_reference_frames);
294*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_deblocking_type %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_deblocking_type);
295*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_use_default_sc_mtx %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_use_default_sc_mtx);
296*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_enable_entropy_sync %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_enable_entropy_sync);
297*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_cropping_mode %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_cropping_mode);
298*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_vqet %d \n", ps_static_cfg_prms->s_coding_tools_prms.i4_vqet);
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar             switch(ps_static_cfg_prms->e_arch_type)
301*c83a76b0SSuyog Pawar             {
302*c83a76b0SSuyog Pawar             case ARCH_NA:
303*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : archType %d \n", 0);
304*c83a76b0SSuyog Pawar                 break;
305*c83a76b0SSuyog Pawar #ifdef ARM
306*c83a76b0SSuyog Pawar             case ARCH_ARM_NONEON:
307*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : archType %d \n", 4);
308*c83a76b0SSuyog Pawar                 break;
309*c83a76b0SSuyog Pawar #endif
310*c83a76b0SSuyog Pawar             default:
311*c83a76b0SSuyog Pawar                 break;
312*c83a76b0SSuyog Pawar             }
313*c83a76b0SSuyog Pawar 
314*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_config_prms \n");
315*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_num_frms_to_encode %d \n", ps_static_cfg_prms->s_config_prms.i4_num_frms_to_encode);
316*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_log2_cu_size %d \n", ps_static_cfg_prms->s_config_prms.i4_max_log2_cu_size);
317*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_log2_cu_size %d \n", ps_static_cfg_prms->s_config_prms.i4_min_log2_cu_size);
318*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_log2_cu_size %d \n", ps_static_cfg_prms->s_config_prms.i4_max_log2_tu_size);
319*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_log2_cu_size %d \n", ps_static_cfg_prms->s_config_prms.i4_min_log2_cu_size);
320*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_tr_tree_depth_I %d \n", ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_I);
321*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_tr_tree_depth_nI %d \n", ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_nI);
322*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_search_range_horz %d \n", ps_static_cfg_prms->s_config_prms.i4_max_search_range_horz);
323*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_search_range_vert %d \n", ps_static_cfg_prms->s_config_prms.i4_max_search_range_vert);
324*c83a76b0SSuyog Pawar 
325*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_multi_thrd_prms \n");
326*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_num_cores %d \n", ps_static_cfg_prms->s_multi_thrd_prms.i4_max_num_cores);
327*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_use_thrd_affinity %d \n", ps_static_cfg_prms->s_multi_thrd_prms.i4_use_thrd_affinity);
328*c83a76b0SSuyog Pawar 
329*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : rate control params \n");
330*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_rate_control_mode %d \n", ps_static_cfg_prms->s_config_prms.i4_rate_control_mode);
331*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_cu_level_rc %d \n", ps_static_cfg_prms->s_config_prms.i4_cu_level_rc);
332*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_pass %d \n", ps_static_cfg_prms->s_pass_prms.i4_pass);
333*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_vbr_max_peak_rate_dur %d \n", ps_static_cfg_prms->s_config_prms.i4_vbr_max_peak_rate_dur);
334*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_init_vbv_fullness %d \n", ps_static_cfg_prms->s_config_prms.i4_init_vbv_fullness);
335*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_stuffing_enable %d \n", ps_static_cfg_prms->s_config_prms.i4_stuffing_enable);
336*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_max_frame_qp %d \n", ps_static_cfg_prms->s_config_prms.i4_max_frame_qp);
337*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_min_frame_qp %d \n", ps_static_cfg_prms->s_config_prms.i4_min_frame_qp);
338*c83a76b0SSuyog Pawar 
339*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\n");
340*c83a76b0SSuyog Pawar 
341*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_lap_prms\n");
342*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_rc_look_ahead_pics %d \n", ps_static_cfg_prms->s_lap_prms.i4_rc_look_ahead_pics);
343*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_enable_wts_ofsts %d \n", ps_static_cfg_prms->s_lap_prms.i4_enable_wts_ofsts);
344*c83a76b0SSuyog Pawar 
345*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_out_strm_prms\n");
346*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_codec_type %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_codec_type);
347*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_codec_profile %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_codec_profile);
348*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_codec_tier %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier);
349*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_aud_enable_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_aud_enable_flags);
350*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_interop_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_interop_flags);
351*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sps_at_cdr_enable %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sps_at_cdr_enable);
352*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_vui_enable %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_vui_enable);
353*c83a76b0SSuyog Pawar #ifndef DISABLE_SEI
354*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_enable_flag %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_enable_flag);
355*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_payload_enable_flag %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_payload_enable_flag);
356*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_buffer_period_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_buffer_period_flags);
357*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_pic_timing_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_pic_timing_flags);
358*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_cll_enable %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_cll_enable);
359*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_sei_avg_cll %d \n", ps_static_cfg_prms->s_out_strm_prms.u2_sei_avg_cll);
360*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_sei_max_cll %d \n", ps_static_cfg_prms->s_out_strm_prms.u2_sei_max_cll);
361*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_recovery_point_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_recovery_point_flags);
362*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_mastering_disp_colour_vol_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_sei_mastering_disp_colour_vol_flags);
363*c83a76b0SSuyog Pawar             for(i4_i = 0; i4_i < 3; i4_i++)
364*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_display_primaries_x[i4_i] %d \n", ps_static_cfg_prms->s_out_strm_prms.au2_display_primaries_x[i4_i]);
365*c83a76b0SSuyog Pawar             for(i4_i = 0; i4_i < 3; i4_i++)
366*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_display_primaries_y[i4_i] %d \n", ps_static_cfg_prms->s_out_strm_prms.au2_display_primaries_y[i4_i]);
367*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_white_point_x %d \n", ps_static_cfg_prms->s_out_strm_prms.u2_white_point_x);
368*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u2_white_point_y %d \n", ps_static_cfg_prms->s_out_strm_prms.u2_white_point_y);
369*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u4_max_display_mastering_luminance %d \n", ps_static_cfg_prms->s_out_strm_prms.u4_max_display_mastering_luminance);
370*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u4_min_display_mastering_luminance %d \n", ps_static_cfg_prms->s_out_strm_prms.u4_min_display_mastering_luminance);
371*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_sei_hash_flags %d \n", ps_static_cfg_prms->s_out_strm_prms.i4_decoded_pic_hash_sei_flag);
372*c83a76b0SSuyog Pawar #endif
373*c83a76b0SSuyog Pawar 
374*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_app_tile_params\n");
375*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_tiles_enabled_flag %d \n", ps_static_cfg_prms->s_app_tile_params.i4_tiles_enabled_flag);
376*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_uniform_spacing_flag %d \n", ps_static_cfg_prms->s_app_tile_params.i4_uniform_spacing_flag);
377*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_num_tile_cols %d \n", ps_static_cfg_prms->s_app_tile_params.i4_num_tile_cols);
378*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_num_tile_rows %d \n", ps_static_cfg_prms->s_app_tile_params.i4_num_tile_rows);
379*c83a76b0SSuyog Pawar 
380*c83a76b0SSuyog Pawar             for(i4_i = 0; i4_i < ps_static_cfg_prms->s_app_tile_params.i4_num_tile_cols; i4_i++)
381*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_column_width[i4_i] %d \n", ps_static_cfg_prms->s_app_tile_params.ai4_column_width[i4_i]);
382*c83a76b0SSuyog Pawar 
383*c83a76b0SSuyog Pawar             for(i4_i = 0; i4_i < ps_static_cfg_prms->s_app_tile_params.i4_num_tile_rows; i4_i++)
384*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_row_height[i4_i] %d \n", ps_static_cfg_prms->s_app_tile_params.ai4_row_height[i4_i]);
385*c83a76b0SSuyog Pawar 
386*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_slice_params\n");
387*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_slice_segment_mode %d \n", ps_static_cfg_prms->s_slice_params.i4_slice_segment_mode);
388*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_slice_segment_argument %d \n", ps_static_cfg_prms->s_slice_params.i4_slice_segment_argument);
389*c83a76b0SSuyog Pawar 
390*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms->s_vui_sei_prms\n");
391*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_aspect_ratio_info_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_aspect_ratio_info_present_flag);
392*c83a76b0SSuyog Pawar 
393*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_aspect_ratio_idc ");
394*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
395*c83a76b0SSuyog Pawar             {
396*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_vui_sei_prms.au1_aspect_ratio_idc[i4_resolution_id_loop]);
397*c83a76b0SSuyog Pawar             }
398*c83a76b0SSuyog Pawar 
399*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : au2_sar_width ");
400*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
401*c83a76b0SSuyog Pawar             {
402*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_vui_sei_prms.au2_sar_width[i4_resolution_id_loop]);
403*c83a76b0SSuyog Pawar             }
404*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : au2_sar_width ");
405*c83a76b0SSuyog Pawar             for(i4_resolution_id_loop = 0; i4_resolution_id_loop < i4_num_res_layers; i4_resolution_id_loop++)
406*c83a76b0SSuyog Pawar             {
407*c83a76b0SSuyog Pawar                 PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "res_id %d %d ", i4_resolution_id_loop, ps_static_cfg_prms->s_vui_sei_prms.au2_sar_height[i4_resolution_id_loop]);
408*c83a76b0SSuyog Pawar             }
409*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : u1_overscan_info_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_overscan_info_present_flag);
410*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_overscan_appropriate_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_overscan_appropriate_flag);
411*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_video_signal_type_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_video_signal_type_present_flag);
412*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_video_format %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_video_format);
413*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_video_full_range_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_video_full_range_flag);
414*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_colour_description_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_colour_description_present_flag);
415*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_colour_primaries %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_colour_primaries);
416*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_transfer_characteristics %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_transfer_characteristics);
417*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_matrix_coefficients %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_matrix_coefficients);
418*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_chroma_loc_info_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_loc_info_present_flag);
419*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_chroma_sample_loc_type_top_field %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_sample_loc_type_top_field);
420*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_chroma_sample_loc_type_bottom_field %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_sample_loc_type_bottom_field);
421*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_timing_info_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_timing_info_present_flag);
422*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_vui_hrd_parameters_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_vui_hrd_parameters_present_flag);
423*c83a76b0SSuyog Pawar             PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : u1_nal_hrd_parameters_present_flag %d \n", ps_static_cfg_prms->s_vui_sei_prms.u1_nal_hrd_parameters_present_flag);
424*c83a76b0SSuyog Pawar         }
425*c83a76b0SSuyog Pawar 
426*c83a76b0SSuyog Pawar         PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "\nIHEVCE : ps_static_cfg_prms \n");
427*c83a76b0SSuyog Pawar         PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_enable_logo %d                   \n", ps_static_cfg_prms->i4_enable_logo);
428*c83a76b0SSuyog Pawar         PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_log_dump_level %d                \n", ps_static_cfg_prms->i4_log_dump_level);
429*c83a76b0SSuyog Pawar         PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "IHEVCE : i4_save_recon %d                    \n", ps_static_cfg_prms->i4_save_recon);
430*c83a76b0SSuyog Pawar 
431*c83a76b0SSuyog Pawar         PRINTF(ps_sys_api->pv_cb_handle, i4_res_id, i4_br_id, "**********************************************\n");
432*c83a76b0SSuyog Pawar     }
433*c83a76b0SSuyog Pawar     // clang-format on
434*c83a76b0SSuyog Pawar 
435*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_multi_thrd_prms.i4_num_proc_groups > MAX_NUMBER_PROC_GRPS)
436*c83a76b0SSuyog Pawar     {
437*c83a76b0SSuyog Pawar         error_code = IHEVCE_UNSUPPORTED_PROC_CONFIG;
438*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
439*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR:  Number of Processor Groups not supported \n");
440*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
441*c83a76b0SSuyog Pawar     }
442*c83a76b0SSuyog Pawar 
443*c83a76b0SSuyog Pawar     /* Error check for system-api callback functions */
444*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->ihevce_printf)
445*c83a76b0SSuyog Pawar     {
446*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
447*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
448*c83a76b0SSuyog Pawar     }
449*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fopen)
450*c83a76b0SSuyog Pawar     {
451*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
452*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
453*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fopen callback function not initiallized\n");
454*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
455*c83a76b0SSuyog Pawar     }
456*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fclose)
457*c83a76b0SSuyog Pawar     {
458*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
459*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
460*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fclose callback function not initiallized\n");
461*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
462*c83a76b0SSuyog Pawar     }
463*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fflush)
464*c83a76b0SSuyog Pawar     {
465*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
466*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
467*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fflush callback function not initiallized\n");
468*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
469*c83a76b0SSuyog Pawar     }
470*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fseek)
471*c83a76b0SSuyog Pawar     {
472*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
473*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
474*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fseek callback function not initiallized\n");
475*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
476*c83a76b0SSuyog Pawar     }
477*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fread)
478*c83a76b0SSuyog Pawar     {
479*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
480*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
481*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fread callback function not initiallized\n");
482*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
483*c83a76b0SSuyog Pawar     }
484*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fscanf)
485*c83a76b0SSuyog Pawar     {
486*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
487*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
488*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fscanf callback function not initiallized\n");
489*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
490*c83a76b0SSuyog Pawar     }
491*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->ihevce_sscanf)
492*c83a76b0SSuyog Pawar     {
493*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
494*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
495*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_sscanf callback function not initiallized\n");
496*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
497*c83a76b0SSuyog Pawar     }
498*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fprintf)
499*c83a76b0SSuyog Pawar     {
500*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
501*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
502*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fprintf callback function not initiallized\n");
503*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
504*c83a76b0SSuyog Pawar     }
505*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->s_file_io_api.ihevce_fwrite)
506*c83a76b0SSuyog Pawar     {
507*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
508*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
509*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_fwrite callback function not initiallized\n");
510*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
511*c83a76b0SSuyog Pawar     }
512*c83a76b0SSuyog Pawar     if(NULL == ps_sys_api->ihevce_sprintf)
513*c83a76b0SSuyog Pawar     {
514*c83a76b0SSuyog Pawar         error_code = IHEVCE_SYSTEM_APIS_NOT_INITIALLIZED;
515*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
516*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: ihevce_sprintf callback function not initiallized\n");
517*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
518*c83a76b0SSuyog Pawar     }
519*c83a76b0SSuyog Pawar 
520*c83a76b0SSuyog Pawar     /* Error check for static source parameters */
521*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_src_prms.i4_orig_width > HEVCE_MAX_WIDTH) ||
522*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_src_prms.i4_orig_width < 2))
523*c83a76b0SSuyog Pawar     {
524*c83a76b0SSuyog Pawar         error_code = IHEVCE_WIDTH_NOT_SUPPORTED;
525*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR:  i4_src_width out of range \n");
526*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
527*c83a76b0SSuyog Pawar     }
528*c83a76b0SSuyog Pawar 
529*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_src_prms.i4_orig_height > HEVCE_MAX_HEIGHT) ||
530*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_src_prms.i4_orig_height < 2))
531*c83a76b0SSuyog Pawar     {
532*c83a76b0SSuyog Pawar         error_code = IHEVCE_HEIGHT_NOT_SUPPORTED;
533*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR:  i4_src_height out of range \n");
534*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
535*c83a76b0SSuyog Pawar     }
536*c83a76b0SSuyog Pawar     /*check for odd resolution*/
537*c83a76b0SSuyog Pawar     if(0 != (ps_static_cfg_prms->s_src_prms.i4_width & 1))
538*c83a76b0SSuyog Pawar     {
539*c83a76b0SSuyog Pawar         error_code = IHEVCE_WIDTH_NOT_SUPPORTED;
540*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR:  i4_src_width not supported \n");
541*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
542*c83a76b0SSuyog Pawar     }
543*c83a76b0SSuyog Pawar     if(0 != (ps_static_cfg_prms->s_src_prms.i4_height & 1))
544*c83a76b0SSuyog Pawar     {
545*c83a76b0SSuyog Pawar         error_code = IHEVCE_HEIGHT_NOT_SUPPORTED;
546*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR:  i4_src_height not supported \n");
547*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
548*c83a76b0SSuyog Pawar     }
549*c83a76b0SSuyog Pawar 
550*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom != 1000) &&
551*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom != 1001))
552*c83a76b0SSuyog Pawar     {
553*c83a76b0SSuyog Pawar         error_code = IHEVCE_FRAME_RATE_NOT_SUPPORTED;
554*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: frame rate denom not supported \n");
555*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
556*c83a76b0SSuyog Pawar     }
557*c83a76b0SSuyog Pawar 
558*c83a76b0SSuyog Pawar     if((((ps_static_cfg_prms->s_src_prms.i4_frm_rate_num * 1.0) /
559*c83a76b0SSuyog Pawar           ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom) > MAX_FRAME_RATE) ||
560*c83a76b0SSuyog Pawar        (((ps_static_cfg_prms->s_src_prms.i4_frm_rate_num * 1.0) /
561*c83a76b0SSuyog Pawar           ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom) < MIN_FRAME_RATE))
562*c83a76b0SSuyog Pawar     {
563*c83a76b0SSuyog Pawar         error_code = IHEVCE_FRAME_RATE_NOT_SUPPORTED;
564*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
565*c83a76b0SSuyog Pawar             pv_cb_handle,
566*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Frame rate (%d / %d) is out of range [%.1f - %.1f]\n",
567*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_src_prms.i4_frm_rate_num,
568*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom,
569*c83a76b0SSuyog Pawar             MIN_FRAME_RATE, MAX_FRAME_RATE);
570*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
571*c83a76b0SSuyog Pawar     }
572*c83a76b0SSuyog Pawar 
573*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_src_prms.i4_field_pic != 0)
574*c83a76b0SSuyog Pawar     {
575*c83a76b0SSuyog Pawar         error_code = IHEVCE_CONTENT_TYPE_NOT_SUPPORTED;
576*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: Field encoding not supported \n");
577*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
578*c83a76b0SSuyog Pawar     }
579*c83a76b0SSuyog Pawar 
580*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_src_prms.inp_chr_format != IV_YUV_420SP_UV &&
581*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_src_prms.inp_chr_format != IV_YUV_420P)
582*c83a76b0SSuyog Pawar     {
583*c83a76b0SSuyog Pawar         error_code = IHEVCE_CHROMA_FORMAT_NOT_SUPPORTED;
584*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_input_chroma_format Invalid \n");
585*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
586*c83a76b0SSuyog Pawar     }
587*c83a76b0SSuyog Pawar 
588*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_src_prms.i4_chr_format != IV_YUV_420SP_UV)
589*c83a76b0SSuyog Pawar     {
590*c83a76b0SSuyog Pawar         error_code = IHEVCE_CHROMA_FORMAT_NOT_SUPPORTED;
591*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
592*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_internal_chroma_format Invalid \n");
593*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
594*c83a76b0SSuyog Pawar     }
595*c83a76b0SSuyog Pawar 
596*c83a76b0SSuyog Pawar     /* Check error for interoperability flags */
597*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_out_strm_prms.i4_interop_flags != 0)
598*c83a76b0SSuyog Pawar     {
599*c83a76b0SSuyog Pawar         error_code = IHEVCE_INTEROPERABILITY_FLAG_SUPPORTED;
600*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
601*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_interop_flags out of range, to be set to 0\n");
602*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
603*c83a76b0SSuyog Pawar     }
604*c83a76b0SSuyog Pawar 
605*c83a76b0SSuyog Pawar     /* Error check for static output stream parameters  */
606*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_out_strm_prms.i4_codec_type != 0)
607*c83a76b0SSuyog Pawar     {
608*c83a76b0SSuyog Pawar         error_code = IHEVCE_CODEC_NOT_SUPPORTED;
609*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
610*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_codec_type should be set to 0 \n");
611*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
612*c83a76b0SSuyog Pawar     }
613*c83a76b0SSuyog Pawar 
614*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_out_strm_prms.i4_codec_profile != 1)
615*c83a76b0SSuyog Pawar     {
616*c83a76b0SSuyog Pawar         error_code = IHEVCE_CODEC_PROFILE_NOT_SUPPORTED;
617*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
618*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_codec_profile should be set to 1 \n");
619*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
620*c83a76b0SSuyog Pawar     }
621*c83a76b0SSuyog Pawar 
622*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_tgt_lyr_prms.i4_internal_bit_depth != 8)
623*c83a76b0SSuyog Pawar     {
624*c83a76b0SSuyog Pawar         error_code = IHEVCE_OUTPUT_BIT_DEPTH_OUT_OF_RANGE;
625*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
626*c83a76b0SSuyog Pawar             pv_cb_handle,
627*c83a76b0SSuyog Pawar             "IHEVCE ERROR: (output_bit_depth = %d) not supported \n",
628*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.i4_internal_bit_depth);
629*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
630*c83a76b0SSuyog Pawar     }
631*c83a76b0SSuyog Pawar 
632*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_src_prms.i4_input_bit_depth != 8)
633*c83a76b0SSuyog Pawar     {
634*c83a76b0SSuyog Pawar         error_code = IHEVCE_INPUT_BIT_DEPTH_OUT_OF_RANGE;
635*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
636*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_input_bit_depth value not supported \n");
637*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
638*c83a76b0SSuyog Pawar     }
639*c83a76b0SSuyog Pawar 
640*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_out_strm_prms.i4_vui_enable > 1) ||
641*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_out_strm_prms.i4_vui_enable < 0))
642*c83a76b0SSuyog Pawar     {
643*c83a76b0SSuyog Pawar         error_code = IHEVCE_VUI_ENABLE_OUT_OF_RANGE;
644*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
645*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_vui_enable should be set to 1 or 0 \n");
646*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
647*c83a76b0SSuyog Pawar     }
648*c83a76b0SSuyog Pawar 
649*c83a76b0SSuyog Pawar #ifndef DISABLE_SEI
650*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_out_strm_prms.i4_sei_enable_flag > 1) ||
651*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_out_strm_prms.i4_sei_enable_flag < 0))
652*c83a76b0SSuyog Pawar     {
653*c83a76b0SSuyog Pawar         error_code = IHEVCE_SEI_ENABLE_OUT_OF_RANGE;
654*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
655*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_sei_enable_flags should be set to 1 or 0 \n");
656*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
657*c83a76b0SSuyog Pawar     }
658*c83a76b0SSuyog Pawar 
659*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_out_strm_prms.i4_sei_payload_enable_flag > 1) ||
660*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_out_strm_prms.i4_sei_payload_enable_flag < 0))
661*c83a76b0SSuyog Pawar     {
662*c83a76b0SSuyog Pawar         error_code = IHEVCE_SEI_PAYLOAD_ENABLE_OUT_OF_RANGE;
663*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
664*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_sei_payload_enable_flag should be set to 1 or 0 \n");
665*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
666*c83a76b0SSuyog Pawar     }
667*c83a76b0SSuyog Pawar #endif
668*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_multi_thrd_prms.i4_max_num_cores > MAX_NUM_CORES) ||
669*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_multi_thrd_prms.i4_max_num_cores < 1))
670*c83a76b0SSuyog Pawar     {
671*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_CORE_CONFIG;
672*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
673*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: Invalid Number of Cores configured\n");
674*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
675*c83a76b0SSuyog Pawar     }
676*c83a76b0SSuyog Pawar 
677*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->e_arch_type != ARCH_NA) &&
678*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->e_arch_type != ARCH_ARM_NONEON))
679*c83a76b0SSuyog Pawar     {
680*c83a76b0SSuyog Pawar         error_code = IHEVCE_ARCHITECTURE_TYPE_UNSUPPORTED;
681*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: unsupported archType \n");
682*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
683*c83a76b0SSuyog Pawar     }
684*c83a76b0SSuyog Pawar 
685*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_vqet != 0)
686*c83a76b0SSuyog Pawar     {
687*c83a76b0SSuyog Pawar         error_code = IHEVCE_VISUAL_QUALITY_ENHANCEMENTS_TOGGLER_VALUE_UNSUPPORTED;
688*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
689*c83a76b0SSuyog Pawar             pv_cb_handle,
690*c83a76b0SSuyog Pawar             "IHEVCE ERROR: visual_quality_enhancements_toggler should be set to 0 \n");
691*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
692*c83a76b0SSuyog Pawar     }
693*c83a76b0SSuyog Pawar 
694*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers < 0 ||
695*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers > 3)
696*c83a76b0SSuyog Pawar     {
697*c83a76b0SSuyog Pawar         error_code = IHEVCE_TEMPORAL_LAYERS_NOT_SUPPORTED;
698*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
699*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_max_temporal_layers out of range \n");
700*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
701*c83a76b0SSuyog Pawar     }
702*c83a76b0SSuyog Pawar 
703*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period < 0) ||
704*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period < 0) ||
705*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period < 0))
706*c83a76b0SSuyog Pawar     {
707*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_GOP_PERIOD;
708*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
709*c83a76b0SSuyog Pawar             pv_cb_handle,
710*c83a76b0SSuyog Pawar             "IHEVCE ERROR: gop period is not valid for the configured temporal layers\n");
711*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
712*c83a76b0SSuyog Pawar     }
713*c83a76b0SSuyog Pawar 
714*c83a76b0SSuyog Pawar     {
715*c83a76b0SSuyog Pawar         WORD32 i4_max_idr_period, i4_min_idr_period, i4_max_cra_period, i4_max_i_period;
716*c83a76b0SSuyog Pawar         WORD32 i4_max_i_distance;
717*c83a76b0SSuyog Pawar         WORD32 i4_min_i_distance = 0, i4_non_zero_idr_period = 0x7FFFFFFF,
718*c83a76b0SSuyog Pawar                i4_non_zero_cra_period = 0x7FFFFFFF, i4_non_zero_i_period = 0x7FFFFFFF;
719*c83a76b0SSuyog Pawar         i4_max_idr_period = ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period;
720*c83a76b0SSuyog Pawar         i4_min_idr_period = ps_static_cfg_prms->s_coding_tools_prms.i4_min_closed_gop_period;
721*c83a76b0SSuyog Pawar         i4_max_cra_period = ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period;
722*c83a76b0SSuyog Pawar         i4_max_i_period = ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period;
723*c83a76b0SSuyog Pawar         i4_max_i_distance = MAX(MAX(i4_max_idr_period, i4_max_cra_period), i4_max_i_period);
724*c83a76b0SSuyog Pawar         WORD32 num_b_frms =
725*c83a76b0SSuyog Pawar                 (1 << ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers) - 1;
726*c83a76b0SSuyog Pawar         if (i4_max_i_distance <= num_b_frms)
727*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers = 0;
728*c83a76b0SSuyog Pawar         WORD32 sub_gop_size = (1 << ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers)
729*c83a76b0SSuyog Pawar                 << ps_static_cfg_prms->s_src_prms.i4_field_pic;
730*c83a76b0SSuyog Pawar 
731*c83a76b0SSuyog Pawar         if(sub_gop_size > 1)
732*c83a76b0SSuyog Pawar         {
733*c83a76b0SSuyog Pawar             switch(sub_gop_size)
734*c83a76b0SSuyog Pawar             {
735*c83a76b0SSuyog Pawar             case 2:
736*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
737*c83a76b0SSuyog Pawar                     ALIGN2(i4_max_idr_period);
738*c83a76b0SSuyog Pawar 
739*c83a76b0SSuyog Pawar                 if(i4_max_idr_period > 1)
740*c83a76b0SSuyog Pawar                     ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
741*c83a76b0SSuyog Pawar                         ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period + 1;
742*c83a76b0SSuyog Pawar 
743*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period =
744*c83a76b0SSuyog Pawar                     ALIGN2(i4_max_cra_period);
745*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period =
746*c83a76b0SSuyog Pawar                     ALIGN2(i4_max_i_period);
747*c83a76b0SSuyog Pawar                 break;
748*c83a76b0SSuyog Pawar             case 4:
749*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
750*c83a76b0SSuyog Pawar                     ALIGN4(i4_max_idr_period);
751*c83a76b0SSuyog Pawar 
752*c83a76b0SSuyog Pawar                 if(i4_max_idr_period > 1)
753*c83a76b0SSuyog Pawar                     ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
754*c83a76b0SSuyog Pawar                         ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period + 1;
755*c83a76b0SSuyog Pawar 
756*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period =
757*c83a76b0SSuyog Pawar                     ALIGN4(i4_max_cra_period);
758*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period =
759*c83a76b0SSuyog Pawar                     ALIGN4(i4_max_i_period);
760*c83a76b0SSuyog Pawar                 break;
761*c83a76b0SSuyog Pawar             case 8:
762*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
763*c83a76b0SSuyog Pawar                     ALIGN8(i4_max_idr_period);
764*c83a76b0SSuyog Pawar 
765*c83a76b0SSuyog Pawar                 if(i4_max_idr_period > 1)
766*c83a76b0SSuyog Pawar                     ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period =
767*c83a76b0SSuyog Pawar                         ps_static_cfg_prms->s_coding_tools_prms.i4_max_closed_gop_period + 1;
768*c83a76b0SSuyog Pawar 
769*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_cra_open_gop_period =
770*c83a76b0SSuyog Pawar                     ALIGN8(i4_max_cra_period);
771*c83a76b0SSuyog Pawar                 ps_static_cfg_prms->s_coding_tools_prms.i4_max_i_open_gop_period =
772*c83a76b0SSuyog Pawar                     ALIGN8(i4_max_i_period);
773*c83a76b0SSuyog Pawar                 break;
774*c83a76b0SSuyog Pawar             }
775*c83a76b0SSuyog Pawar         }
776*c83a76b0SSuyog Pawar 
777*c83a76b0SSuyog Pawar         if(0 != i4_max_idr_period)
778*c83a76b0SSuyog Pawar         {
779*c83a76b0SSuyog Pawar             i4_non_zero_idr_period = i4_max_idr_period;
780*c83a76b0SSuyog Pawar         }
781*c83a76b0SSuyog Pawar         if(0 != i4_max_cra_period)
782*c83a76b0SSuyog Pawar         {
783*c83a76b0SSuyog Pawar             i4_non_zero_cra_period = i4_max_cra_period;
784*c83a76b0SSuyog Pawar         }
785*c83a76b0SSuyog Pawar         if(0 != i4_max_i_period)
786*c83a76b0SSuyog Pawar         {
787*c83a76b0SSuyog Pawar             i4_non_zero_i_period = i4_max_i_period;
788*c83a76b0SSuyog Pawar         }
789*c83a76b0SSuyog Pawar         i4_min_i_distance =
790*c83a76b0SSuyog Pawar             MIN(MIN(i4_non_zero_idr_period, i4_non_zero_cra_period), i4_non_zero_i_period);
791*c83a76b0SSuyog Pawar         if(i4_min_i_distance < sub_gop_size && i4_min_i_distance)
792*c83a76b0SSuyog Pawar         {
793*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_GOP_PERIOD;
794*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
795*c83a76b0SSuyog Pawar                 pv_cb_handle,
796*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: gop period is not valid for the configured temporal layers\n");
797*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
798*c83a76b0SSuyog Pawar         }
799*c83a76b0SSuyog Pawar 
800*c83a76b0SSuyog Pawar         if((i4_min_idr_period > i4_max_idr_period) || (i4_min_idr_period < 0))
801*c83a76b0SSuyog Pawar         {
802*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_GOP_PERIOD;
803*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
804*c83a76b0SSuyog Pawar                 pv_cb_handle,
805*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: gop period is not valid => min closed gop > max closed gop\n");
806*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
807*c83a76b0SSuyog Pawar         }
808*c83a76b0SSuyog Pawar         if(ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers && i4_max_i_distance == 1)
809*c83a76b0SSuyog Pawar         {
810*c83a76b0SSuyog Pawar             error_code = IHEVCE_TEMPORAL_LAYERS_NOT_SUPPORTED;
811*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
812*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: Invalid max temporal layer for I only encoding\n");
813*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
814*c83a76b0SSuyog Pawar         }
815*c83a76b0SSuyog Pawar         if((i4_max_idr_period < i4_max_cra_period || i4_max_idr_period < i4_max_i_period) &&
816*c83a76b0SSuyog Pawar            i4_max_idr_period)
817*c83a76b0SSuyog Pawar         {
818*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_GOP_PERIOD;
819*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
820*c83a76b0SSuyog Pawar                 pv_cb_handle,
821*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: MAX IDR period can't be less than Max CRA or I period\n");
822*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
823*c83a76b0SSuyog Pawar         }
824*c83a76b0SSuyog Pawar         if((i4_max_cra_period < i4_max_i_period) && i4_max_cra_period)
825*c83a76b0SSuyog Pawar         {
826*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_GOP_PERIOD;
827*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
828*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: MAX CRA period can't be less than Max I period\n");
829*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
830*c83a76b0SSuyog Pawar         }
831*c83a76b0SSuyog Pawar     }
832*c83a76b0SSuyog Pawar     if(0 != ps_static_cfg_prms->s_tgt_lyr_prms.i4_enable_temporal_scalability)
833*c83a76b0SSuyog Pawar     {
834*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_TEMPORAL_SCALABILITY;
835*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
836*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: Temporal scalability is not supported \n");
837*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
838*c83a76b0SSuyog Pawar     }
839*c83a76b0SSuyog Pawar 
840*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_max_reference_frames != -1)
841*c83a76b0SSuyog Pawar     {
842*c83a76b0SSuyog Pawar         error_code = IHEVCE_REF_FRAMES_NOT_SUPPORTED;
843*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
844*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: only supported value for i4_max_reference_frames is -1\n");
845*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
846*c83a76b0SSuyog Pawar     }
847*c83a76b0SSuyog Pawar 
848*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_weighted_pred_enable != 0 &&
849*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_weighted_pred_enable != 1)
850*c83a76b0SSuyog Pawar     {
851*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_WEIGHTED_PREDICTION_INPUT;
852*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_weighted_pred_enable invalid \n");
853*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
854*c83a76b0SSuyog Pawar     }
855*c83a76b0SSuyog Pawar 
856*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_deblocking_type != 0 &&
857*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_deblocking_type != 1 &&
858*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_deblocking_type != 2)
859*c83a76b0SSuyog Pawar     {
860*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_DEBLOCKING_TYPE_INPUT;
861*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_deblocking_type invalid\n");
862*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
863*c83a76b0SSuyog Pawar     }
864*c83a76b0SSuyog Pawar 
865*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_use_default_sc_mtx != 0 &&
866*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_use_default_sc_mtx != 1)
867*c83a76b0SSuyog Pawar     {
868*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_DEFAULT_SC_MATRIX_ENABLE_INPUT;
869*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_use_default_sc_mtx invalid \n");
870*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
871*c83a76b0SSuyog Pawar     }
872*c83a76b0SSuyog Pawar 
873*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_cropping_mode != 0 &&
874*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_coding_tools_prms.i4_cropping_mode != 1)
875*c83a76b0SSuyog Pawar     {
876*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_CROPPING_MODE;
877*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_cropping_mode invalid \n");
878*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
879*c83a76b0SSuyog Pawar     }
880*c83a76b0SSuyog Pawar 
881*c83a76b0SSuyog Pawar     /* Error checks for Static Config Parameters */
882*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_min_log2_cu_size != 3)
883*c83a76b0SSuyog Pawar     {
884*c83a76b0SSuyog Pawar         error_code = IHEVCE_MIN_CU_SIZE_INPUT_NOT_SUPPORTED;
885*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_min_log2_cu_size invalid \n");
886*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
887*c83a76b0SSuyog Pawar     }
888*c83a76b0SSuyog Pawar 
889*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_min_log2_tu_size != 2)
890*c83a76b0SSuyog Pawar     {
891*c83a76b0SSuyog Pawar         error_code = IHEVCE_MIN_TU_SIZE_INPUT_NOT_SUPPORTED;
892*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_min_log2_tu_size invalid \n");
893*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
894*c83a76b0SSuyog Pawar     }
895*c83a76b0SSuyog Pawar 
896*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_log2_cu_size < 4 ||
897*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_log2_cu_size > 6)
898*c83a76b0SSuyog Pawar     {
899*c83a76b0SSuyog Pawar         error_code = IHEVCE_MAX_CU_SIZE_INPUT_NOT_SUPPORTED;
900*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_max_log2_cu_size invalid \n");
901*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
902*c83a76b0SSuyog Pawar     }
903*c83a76b0SSuyog Pawar 
904*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_log2_tu_size < 2 ||
905*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_log2_tu_size > 5)
906*c83a76b0SSuyog Pawar     {
907*c83a76b0SSuyog Pawar         error_code = IHEVCE_MAX_TU_SIZE_INPUT_NOT_SUPPORTED;
908*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_max_log2_tu_size invalid \n");
909*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
910*c83a76b0SSuyog Pawar     }
911*c83a76b0SSuyog Pawar 
912*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_min_log2_cu_size == 4 &&
913*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_log2_tu_size == 5)
914*c83a76b0SSuyog Pawar     {
915*c83a76b0SSuyog Pawar         /* Because tu size should always be lesser than the cu size */
916*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_MAX_TU_SIZE;
917*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
918*c83a76b0SSuyog Pawar             pv_cb_handle,
919*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Invalid combination of i4_min_log2_cu_size and i4_max_log2_tu_size\n");
920*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
921*c83a76b0SSuyog Pawar     }
922*c83a76b0SSuyog Pawar 
923*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_I < 1 ||
924*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_I > 3)
925*c83a76b0SSuyog Pawar     {
926*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_TR_TREE_DEPTH_FOR_I_FRAME;
927*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
928*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_max_tr_tree_depth_I out of range\n");
929*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
930*c83a76b0SSuyog Pawar     }
931*c83a76b0SSuyog Pawar 
932*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_nI < 1 ||
933*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_tr_tree_depth_nI > 4)
934*c83a76b0SSuyog Pawar     {
935*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_TR_TREE_DEPTH;
936*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
937*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_max_tr_tree_depth_nI out of range\n");
938*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
939*c83a76b0SSuyog Pawar     }
940*c83a76b0SSuyog Pawar 
941*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_search_range_horz < 64 ||
942*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_search_range_horz > 512)
943*c83a76b0SSuyog Pawar     {
944*c83a76b0SSuyog Pawar         error_code = IHEVCE_UNSUPPORTED_HORIZONTAL_SEARCH_RANGE;
945*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
946*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_max_search_range_horz out of range\n");
947*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
948*c83a76b0SSuyog Pawar     }
949*c83a76b0SSuyog Pawar 
950*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_max_search_range_vert < 32 ||
951*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_max_search_range_vert > 256)
952*c83a76b0SSuyog Pawar     {
953*c83a76b0SSuyog Pawar         error_code = IHEVCE_UNSUPPORTED_VERTICAL_SEARCH_RANGE;
954*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
955*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_max_search_range_vert out of range\n");
956*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
957*c83a76b0SSuyog Pawar     }
958*c83a76b0SSuyog Pawar 
959*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_lap_prms.i4_rc_look_ahead_pics > NUM_LAP2_LOOK_AHEAD ||
960*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_lap_prms.i4_rc_look_ahead_pics < 0)
961*c83a76b0SSuyog Pawar     {
962*c83a76b0SSuyog Pawar         error_code = IHEVCE_UNSUPPORTED_LOOK_AHEAD;
963*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
964*c83a76b0SSuyog Pawar             pv_cb_handle,
965*c83a76b0SSuyog Pawar             "IHEVCE ERROR: rc look ahead pc must be in range of 0 to NUM_LAP2_LOOK_AHEAD\n");
966*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
967*c83a76b0SSuyog Pawar     }
968*c83a76b0SSuyog Pawar 
969*c83a76b0SSuyog Pawar     /* Num res instances should be less than equal to IHEVCE_MAX_NUM_RESOLUTIONS */
970*c83a76b0SSuyog Pawar     if((i4_num_resolutions < 1) || (i4_num_resolutions > IHEVCE_MAX_NUM_RESOLUTIONS))
971*c83a76b0SSuyog Pawar     {
972*c83a76b0SSuyog Pawar         error_code = IHEVCE_NUM_MAX_RESOLUTIONS_NOT_SUPPORTED;
973*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: invalid i4_num_resolutions \n");
974*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
975*c83a76b0SSuyog Pawar     }
976*c83a76b0SSuyog Pawar 
977*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->i4_res_id < 0) || (ps_static_cfg_prms->i4_res_id >= i4_num_resolutions))
978*c83a76b0SSuyog Pawar     {
979*c83a76b0SSuyog Pawar         error_code = IHEVCE_NUM_MAX_RESOLUTIONS_NOT_SUPPORTED;
980*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: invalid i4_num_resolutions \n");
981*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
982*c83a76b0SSuyog Pawar     }
983*c83a76b0SSuyog Pawar 
984*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->s_tgt_lyr_prms.i4_mres_single_out < 0) ||
985*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->s_tgt_lyr_prms.i4_mres_single_out > 1))
986*c83a76b0SSuyog Pawar     {
987*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_MRES_SINGLE_OUT;
988*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
989*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: invalid i4_mres_single_out value \n");
990*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
991*c83a76b0SSuyog Pawar     }
992*c83a76b0SSuyog Pawar 
993*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->i4_save_recon) &&
994*c83a76b0SSuyog Pawar        (1 == ps_static_cfg_prms->s_tgt_lyr_prms.i4_mres_single_out))
995*c83a76b0SSuyog Pawar     {
996*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
997*c83a76b0SSuyog Pawar             pv_cb_handle,
998*c83a76b0SSuyog Pawar             "IHEVCE WARNING: i4_save_recon not supported for mres single out case \n");
999*c83a76b0SSuyog Pawar         ps_static_cfg_prms->i4_save_recon = 0;
1000*c83a76b0SSuyog Pawar     }
1001*c83a76b0SSuyog Pawar 
1002*c83a76b0SSuyog Pawar     if((1 == i4_num_resolutions) && (1 == ps_static_cfg_prms->s_tgt_lyr_prms.i4_mres_single_out))
1003*c83a76b0SSuyog Pawar     {
1004*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1005*c83a76b0SSuyog Pawar             pv_cb_handle,
1006*c83a76b0SSuyog Pawar             "IHEVCE WARNING: i4_mres_single_out value changed to 0 for single resolution case \n");
1007*c83a76b0SSuyog Pawar         ps_static_cfg_prms->s_tgt_lyr_prms.i4_mres_single_out = 0;
1008*c83a76b0SSuyog Pawar     }
1009*c83a76b0SSuyog Pawar 
1010*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_tgt_lyr_prms.i4_mbr_quality_setting < 0 ||
1011*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_tgt_lyr_prms.i4_mbr_quality_setting > 3)
1012*c83a76b0SSuyog Pawar     {
1013*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_MBR_QUALITY_SETTING;
1014*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: invalid mbr quality setting\n");
1015*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1016*c83a76b0SSuyog Pawar     }
1017*c83a76b0SSuyog Pawar 
1018*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_tgt_lyr_prms.i4_multi_res_layer_reuse != 0)
1019*c83a76b0SSuyog Pawar     {
1020*c83a76b0SSuyog Pawar         error_code = IHEVCE_MULTI_RES_LAYER_REUSE_NOT_SUPPORTED;
1021*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1022*c83a76b0SSuyog Pawar             pv_cb_handle,
1023*c83a76b0SSuyog Pawar             "IHEVCE ERROR: reuse of info across resolution is not currently supported \n");
1024*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1025*c83a76b0SSuyog Pawar     }
1026*c83a76b0SSuyog Pawar 
1027*c83a76b0SSuyog Pawar     for(i4_resolution_id = 0; i4_resolution_id < i4_num_resolutions; i4_resolution_id++)
1028*c83a76b0SSuyog Pawar     {
1029*c83a76b0SSuyog Pawar         WORD32 codec_level_index, quality_preset, height, width, frm_rate_scale_factor;
1030*c83a76b0SSuyog Pawar         WORD32 br_ctr;
1031*c83a76b0SSuyog Pawar         UWORD32 u4_luma_sample_rate;
1032*c83a76b0SSuyog Pawar         WORD32 max_dpb_size;
1033*c83a76b0SSuyog Pawar         WORD32 i4_field_pic = ps_static_cfg_prms->s_src_prms.i4_field_pic;
1034*c83a76b0SSuyog Pawar 
1035*c83a76b0SSuyog Pawar         codec_level_index = ihevce_get_level_index(
1036*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_codec_level);
1037*c83a76b0SSuyog Pawar         quality_preset =
1038*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_quality_preset;
1039*c83a76b0SSuyog Pawar         height = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_height;
1040*c83a76b0SSuyog Pawar         width = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_width;
1041*c83a76b0SSuyog Pawar         frm_rate_scale_factor = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
1042*c83a76b0SSuyog Pawar                                     .i4_frm_rate_scale_factor;
1043*c83a76b0SSuyog Pawar         /* Check error for max picture size(luma) for the given level */
1044*c83a76b0SSuyog Pawar         if((width * height) > g_as_level_data[codec_level_index].i4_max_luma_picture_size)
1045*c83a76b0SSuyog Pawar         {
1046*c83a76b0SSuyog Pawar             error_code = IHEVCE_PIC_SIZE_NOT_SUPPORTED;
1047*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1048*c83a76b0SSuyog Pawar                 pv_cb_handle,
1049*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: (i4_tgt_width * i4_tgt_height) out of range for resolution number "
1050*c83a76b0SSuyog Pawar                 "'%d' codec level %d "
1051*c83a76b0SSuyog Pawar                 "\n",
1052*c83a76b0SSuyog Pawar                 i4_resolution_id,
1053*c83a76b0SSuyog Pawar                 codec_level_index);
1054*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1055*c83a76b0SSuyog Pawar         }
1056*c83a76b0SSuyog Pawar 
1057*c83a76b0SSuyog Pawar         if((width * height) <= (g_as_level_data[codec_level_index].i4_max_luma_picture_size >> 2))
1058*c83a76b0SSuyog Pawar         {
1059*c83a76b0SSuyog Pawar             max_dpb_size = 16;
1060*c83a76b0SSuyog Pawar         }
1061*c83a76b0SSuyog Pawar         else if((width * height) <= (g_as_level_data[codec_level_index].i4_max_luma_picture_size >> 1))
1062*c83a76b0SSuyog Pawar         {
1063*c83a76b0SSuyog Pawar             max_dpb_size = 12;
1064*c83a76b0SSuyog Pawar         }
1065*c83a76b0SSuyog Pawar         else if(
1066*c83a76b0SSuyog Pawar             (width * height) <=
1067*c83a76b0SSuyog Pawar             (3 * g_as_level_data[codec_level_index].i4_max_luma_picture_size >> 2))
1068*c83a76b0SSuyog Pawar         {
1069*c83a76b0SSuyog Pawar             max_dpb_size = 8;
1070*c83a76b0SSuyog Pawar         }
1071*c83a76b0SSuyog Pawar         else
1072*c83a76b0SSuyog Pawar         {
1073*c83a76b0SSuyog Pawar             max_dpb_size = 6;
1074*c83a76b0SSuyog Pawar         }
1075*c83a76b0SSuyog Pawar 
1076*c83a76b0SSuyog Pawar         /* DPB check */
1077*c83a76b0SSuyog Pawar         if((((DEFAULT_MAX_REFERENCE_PICS - i4_field_pic) /*max reference*/ + 2) << i4_field_pic) >
1078*c83a76b0SSuyog Pawar            max_dpb_size)
1079*c83a76b0SSuyog Pawar         {
1080*c83a76b0SSuyog Pawar             error_code = IHEVCE_CODEC_LEVEL_NOT_SUPPORTED;
1081*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1082*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: i4_codec_level should be set correct \n");
1083*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1084*c83a76b0SSuyog Pawar         }
1085*c83a76b0SSuyog Pawar 
1086*c83a76b0SSuyog Pawar         if((quality_preset > IHEVCE_QUALITY_P7) || (quality_preset < 0) || (quality_preset == 1))
1087*c83a76b0SSuyog Pawar         {
1088*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_QUALITY_PRESET_INPUT;
1089*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_quality_preset invalid \n");
1090*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1091*c83a76b0SSuyog Pawar         }
1092*c83a76b0SSuyog Pawar 
1093*c83a76b0SSuyog Pawar         /* Error checks for target width and height */
1094*c83a76b0SSuyog Pawar         if((height > HEVCE_MAX_HEIGHT) || (height < HEVCE_MIN_HEIGHT) ||
1095*c83a76b0SSuyog Pawar            (height != ps_static_cfg_prms->s_src_prms.i4_height))
1096*c83a76b0SSuyog Pawar         {
1097*c83a76b0SSuyog Pawar             error_code = IHEVCE_TGT_HEIGHT_NOT_SUPPORTED;
1098*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: Target height not supported\n");
1099*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1100*c83a76b0SSuyog Pawar         }
1101*c83a76b0SSuyog Pawar 
1102*c83a76b0SSuyog Pawar         if((width > HEVCE_MAX_WIDTH) || (width < HEVCE_MIN_WIDTH) ||
1103*c83a76b0SSuyog Pawar            (width != ps_static_cfg_prms->s_src_prms.i4_width))
1104*c83a76b0SSuyog Pawar         {
1105*c83a76b0SSuyog Pawar             error_code = IHEVCE_TGT_WIDTH_NOT_SUPPORTED;
1106*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: Target width not supported\n");
1107*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1108*c83a76b0SSuyog Pawar         }
1109*c83a76b0SSuyog Pawar 
1110*c83a76b0SSuyog Pawar         /* Error checks for the codec level */
1111*c83a76b0SSuyog Pawar         if(ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_codec_level >
1112*c83a76b0SSuyog Pawar            LEVEL6)
1113*c83a76b0SSuyog Pawar         {
1114*c83a76b0SSuyog Pawar             error_code = IHEVCE_CODEC_LEVEL_NOT_SUPPORTED;
1115*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1116*c83a76b0SSuyog Pawar                 pv_cb_handle,
1117*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: i4_codec_level should be set to a max value of 153 \n");
1118*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1119*c83a76b0SSuyog Pawar         }
1120*c83a76b0SSuyog Pawar 
1121*c83a76b0SSuyog Pawar         if(frm_rate_scale_factor != 1)
1122*c83a76b0SSuyog Pawar         {
1123*c83a76b0SSuyog Pawar             error_code = IHEVCE_TGT_FRAME_RATE_SCALING_NOT_SUPPORTED;
1124*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1125*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR:  Target frame rate scaler should be 1 \n");
1126*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1127*c83a76b0SSuyog Pawar         }
1128*c83a76b0SSuyog Pawar 
1129*c83a76b0SSuyog Pawar         u4_luma_sample_rate = (UWORD32)(width * height);
1130*c83a76b0SSuyog Pawar         u4_luma_sample_rate *= (UWORD32)(
1131*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_src_prms.i4_frm_rate_num /
1132*c83a76b0SSuyog Pawar             (ps_static_cfg_prms->s_src_prms.i4_frm_rate_denom * frm_rate_scale_factor));
1133*c83a76b0SSuyog Pawar         /* Check error for max samples rate (frame rate * luma picture size) for the given level */
1134*c83a76b0SSuyog Pawar         if(u4_luma_sample_rate > g_as_level_data[codec_level_index].u4_max_luma_sample_rate)
1135*c83a76b0SSuyog Pawar         {
1136*c83a76b0SSuyog Pawar             error_code = IHEVCE_LUMA_SAMPLE_RATE_NOT_SUPPORTED;
1137*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1138*c83a76b0SSuyog Pawar                 pv_cb_handle,
1139*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: input sample rate (i4_src_width * i4_src_height * i4_frm_rate_num / "
1140*c83a76b0SSuyog Pawar                 "i4_frm_rate_denom ) "
1141*c83a76b0SSuyog Pawar                 "exceeds u4_max_luma_sample_rate\n");
1142*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1143*c83a76b0SSuyog Pawar         }
1144*c83a76b0SSuyog Pawar 
1145*c83a76b0SSuyog Pawar         /* Num instances should be less than equal to IHEVCE_MAX_NUM_BITRATES */
1146*c83a76b0SSuyog Pawar         if((ai4_num_bitrate_instances[i4_resolution_id] < 1) ||
1147*c83a76b0SSuyog Pawar            (ai4_num_bitrate_instances[i4_resolution_id] > IHEVCE_MAX_NUM_BITRATES))
1148*c83a76b0SSuyog Pawar         {
1149*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_NUM_BR_INSTANCES;
1150*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1151*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid i4_num_bitrate_instances \n");
1152*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1153*c83a76b0SSuyog Pawar         }
1154*c83a76b0SSuyog Pawar 
1155*c83a76b0SSuyog Pawar         /* check for codec tier */
1156*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier > HIGH_TIER) ||
1157*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier < MAIN_TIER))
1158*c83a76b0SSuyog Pawar         {
1159*c83a76b0SSuyog Pawar             error_code = IHEVC_CODEC_TIER_NOT_SUPPORTED;
1160*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: Codec tier  out of range\n");
1161*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1162*c83a76b0SSuyog Pawar         }
1163*c83a76b0SSuyog Pawar 
1164*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_codec_level <
1165*c83a76b0SSuyog Pawar             120) &&
1166*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier == HIGH_TIER))
1167*c83a76b0SSuyog Pawar         {
1168*c83a76b0SSuyog Pawar             error_code = IHEVC_CODEC_TIER_NOT_SUPPORTED;
1169*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1170*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: Codec tier = HIGH TIER Not supported below Level 4\n");
1171*c83a76b0SSuyog Pawar             return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1172*c83a76b0SSuyog Pawar         }
1173*c83a76b0SSuyog Pawar 
1174*c83a76b0SSuyog Pawar         /* Check error for max bitrate for the given level */
1175*c83a76b0SSuyog Pawar         for(br_ctr = 0; br_ctr < ai4_num_bitrate_instances[i4_resolution_id]; br_ctr++)
1176*c83a76b0SSuyog Pawar         {
1177*c83a76b0SSuyog Pawar             WORD32 frame_qp = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
1178*c83a76b0SSuyog Pawar                                   .ai4_frame_qp[br_ctr];
1179*c83a76b0SSuyog Pawar             WORD32 tgt_bitrate = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
1180*c83a76b0SSuyog Pawar                                      .ai4_tgt_bitrate[br_ctr];
1181*c83a76b0SSuyog Pawar             WORD32 i4_max_bit_rate =
1182*c83a76b0SSuyog Pawar                 g_as_level_data[codec_level_index]
1183*c83a76b0SSuyog Pawar                     .i4_max_bit_rate[ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier];
1184*c83a76b0SSuyog Pawar             WORD32 peak_bitrate;
1185*c83a76b0SSuyog Pawar 
1186*c83a76b0SSuyog Pawar             if(frame_qp > MAX_HEVC_QP || frame_qp < MIN_HEVC_QP)
1187*c83a76b0SSuyog Pawar             {
1188*c83a76b0SSuyog Pawar                 error_code = IHEVCE_UNSUPPORTED_FRAME_QP;
1189*c83a76b0SSuyog Pawar                 ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_frame_qp out of range\n");
1190*c83a76b0SSuyog Pawar                 return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1191*c83a76b0SSuyog Pawar             }
1192*c83a76b0SSuyog Pawar 
1193*c83a76b0SSuyog Pawar             if(tgt_bitrate > i4_max_bit_rate * CBP_VCL_FACTOR || tgt_bitrate < MIN_BITRATE)
1194*c83a76b0SSuyog Pawar             {
1195*c83a76b0SSuyog Pawar                 error_code = IHEVCE_BITRATE_NOT_SUPPORTED;
1196*c83a76b0SSuyog Pawar                 ps_sys_api->ihevce_printf(
1197*c83a76b0SSuyog Pawar                     pv_cb_handle,
1198*c83a76b0SSuyog Pawar                     "IHEVCE ERROR: i4_tgt_bitrate %d out of range for resolution %dX%d "
1199*c83a76b0SSuyog Pawar                     "bitrate should be within [%d .. %d]\n",
1200*c83a76b0SSuyog Pawar                     tgt_bitrate,
1201*c83a76b0SSuyog Pawar                     width, height,
1202*c83a76b0SSuyog Pawar                     MIN_BITRATE, i4_max_bit_rate * CBP_VCL_FACTOR);
1203*c83a76b0SSuyog Pawar                 return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1204*c83a76b0SSuyog Pawar             }
1205*c83a76b0SSuyog Pawar 
1206*c83a76b0SSuyog Pawar             peak_bitrate = tgt_bitrate << 1;
1207*c83a76b0SSuyog Pawar             peak_bitrate = MIN(peak_bitrate, i4_max_bit_rate * 1000);
1208*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
1209*c83a76b0SSuyog Pawar                 .ai4_peak_bitrate[br_ctr] = peak_bitrate;
1210*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
1211*c83a76b0SSuyog Pawar                 .ai4_max_vbv_buffer_size[br_ctr] = peak_bitrate;
1212*c83a76b0SSuyog Pawar         }
1213*c83a76b0SSuyog Pawar     }
1214*c83a76b0SSuyog Pawar 
1215*c83a76b0SSuyog Pawar     if((ps_static_cfg_prms->i4_br_id < 0) ||
1216*c83a76b0SSuyog Pawar        (ps_static_cfg_prms->i4_br_id >= ai4_num_bitrate_instances[ps_static_cfg_prms->i4_res_id]))
1217*c83a76b0SSuyog Pawar     {
1218*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_NUM_BR_INSTANCES;
1219*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1220*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: invalid i4_num_bitrate_instances \n");
1221*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1222*c83a76b0SSuyog Pawar     }
1223*c83a76b0SSuyog Pawar 
1224*c83a76b0SSuyog Pawar     /* Check error for rate control mode for the given level */
1225*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_rate_control_mode != 2 &&
1226*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_rate_control_mode != 3 &&
1227*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_rate_control_mode != 5)
1228*c83a76b0SSuyog Pawar     {
1229*c83a76b0SSuyog Pawar         error_code = IHEVCE_RATE_CONTROL_MDOE_NOT_SUPPORTED;
1230*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1231*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_rate_control_mode out of range\n");
1232*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1233*c83a76b0SSuyog Pawar     }
1234*c83a76b0SSuyog Pawar 
1235*c83a76b0SSuyog Pawar     /* Check error for pass number */
1236*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_pass_prms.i4_pass != 0)
1237*c83a76b0SSuyog Pawar     {
1238*c83a76b0SSuyog Pawar         error_code = IHEVCE_RATE_CONTROL_PASS_INVALID;
1239*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_pass out of range\n");
1240*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1241*c83a76b0SSuyog Pawar     }
1242*c83a76b0SSuyog Pawar 
1243*c83a76b0SSuyog Pawar     /* Check error for cu level qp modultion for the given level */
1244*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_cu_level_rc != 0 &&
1245*c83a76b0SSuyog Pawar        ps_static_cfg_prms->s_config_prms.i4_cu_level_rc != 1)
1246*c83a76b0SSuyog Pawar     {
1247*c83a76b0SSuyog Pawar         error_code = IHEVCE_RATE_CONTROL_MDOE_NOT_SUPPORTED;
1248*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_cu_level_rc out of range\n");
1249*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1250*c83a76b0SSuyog Pawar     }
1251*c83a76b0SSuyog Pawar 
1252*c83a76b0SSuyog Pawar     /* size error checks for the api structures */
1253*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->i4_size != sizeof(ihevce_static_cfg_params_t))
1254*c83a76b0SSuyog Pawar     {
1255*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1256*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1257*c83a76b0SSuyog Pawar             pv_cb_handle,
1258*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_static_cfg_params_t is not matching with actual "
1259*c83a76b0SSuyog Pawar             "size");
1260*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1261*c83a76b0SSuyog Pawar     }
1262*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_src_prms.i4_size != sizeof(ihevce_src_params_t))
1263*c83a76b0SSuyog Pawar     {
1264*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1265*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1266*c83a76b0SSuyog Pawar             pv_cb_handle,
1267*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_src_params_t is not matching with actual size");
1268*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1269*c83a76b0SSuyog Pawar     }
1270*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_tgt_lyr_prms.i4_size != sizeof(ihevce_tgt_layer_params_t))
1271*c83a76b0SSuyog Pawar     {
1272*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1273*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1274*c83a76b0SSuyog Pawar             pv_cb_handle,
1275*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_tgt_layer_params_t is not matching with actual "
1276*c83a76b0SSuyog Pawar             "size");
1277*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1278*c83a76b0SSuyog Pawar     }
1279*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_out_strm_prms.i4_size != sizeof(ihevce_out_strm_params_t))
1280*c83a76b0SSuyog Pawar     {
1281*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1282*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1283*c83a76b0SSuyog Pawar             pv_cb_handle,
1284*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_out_strm_params_t is not matching with actual "
1285*c83a76b0SSuyog Pawar             "size");
1286*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1287*c83a76b0SSuyog Pawar     }
1288*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_coding_tools_prms.i4_size != sizeof(ihevce_coding_params_t))
1289*c83a76b0SSuyog Pawar     {
1290*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1291*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1292*c83a76b0SSuyog Pawar             pv_cb_handle,
1293*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_coding_params_t is not matching with actual "
1294*c83a76b0SSuyog Pawar             "size");
1295*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1296*c83a76b0SSuyog Pawar     }
1297*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_config_prms.i4_size != sizeof(ihevce_config_prms_t))
1298*c83a76b0SSuyog Pawar     {
1299*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1300*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1301*c83a76b0SSuyog Pawar             pv_cb_handle,
1302*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_config_prms_t is not matching with actual size");
1303*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1304*c83a76b0SSuyog Pawar     }
1305*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_multi_thrd_prms.i4_size != sizeof(ihevce_static_multi_thread_params_t))
1306*c83a76b0SSuyog Pawar     {
1307*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1308*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1309*c83a76b0SSuyog Pawar             pv_cb_handle,
1310*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_static_multi_thread_params_t is not matching "
1311*c83a76b0SSuyog Pawar             "with actual size");
1312*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1313*c83a76b0SSuyog Pawar     }
1314*c83a76b0SSuyog Pawar     for(i4_resolution_id = 0; i4_resolution_id < i4_num_resolutions; i4_resolution_id++)
1315*c83a76b0SSuyog Pawar     {
1316*c83a76b0SSuyog Pawar         if(ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_size !=
1317*c83a76b0SSuyog Pawar            sizeof(ihevce_tgt_params_t))
1318*c83a76b0SSuyog Pawar         {
1319*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_SIZE;
1320*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1321*c83a76b0SSuyog Pawar                 pv_cb_handle,
1322*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: Size element of ihevce_tgt_params_t is not matching with actual "
1323*c83a76b0SSuyog Pawar                 "size");
1324*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1325*c83a76b0SSuyog Pawar         }
1326*c83a76b0SSuyog Pawar     }
1327*c83a76b0SSuyog Pawar 
1328*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_lap_prms.i4_size != sizeof(ihevce_lap_params_t))
1329*c83a76b0SSuyog Pawar     {
1330*c83a76b0SSuyog Pawar         error_code = IHEVCE_INVALID_SIZE;
1331*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1332*c83a76b0SSuyog Pawar             pv_cb_handle,
1333*c83a76b0SSuyog Pawar             "IHEVCE ERROR: Size element of ihevce_lap_params_t is not matching with actual size");
1334*c83a76b0SSuyog Pawar         return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1335*c83a76b0SSuyog Pawar     }
1336*c83a76b0SSuyog Pawar 
1337*c83a76b0SSuyog Pawar     for(i4_resolution_id = 0; i4_resolution_id < i4_num_resolutions; i4_resolution_id++)
1338*c83a76b0SSuyog Pawar     {
1339*c83a76b0SSuyog Pawar         if(ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id].i4_size !=
1340*c83a76b0SSuyog Pawar            sizeof(ihevce_tgt_params_t))
1341*c83a76b0SSuyog Pawar         {
1342*c83a76b0SSuyog Pawar             error_code = IHEVCE_INVALID_SIZE;
1343*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1344*c83a76b0SSuyog Pawar                 pv_cb_handle,
1345*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: Size element of ihevce_tgt_params_t is not matching with actual "
1346*c83a76b0SSuyog Pawar                 "size");
1347*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1348*c83a76b0SSuyog Pawar         }
1349*c83a76b0SSuyog Pawar     }
1350*c83a76b0SSuyog Pawar 
1351*c83a76b0SSuyog Pawar #ifndef DISABLE_SEI
1352*c83a76b0SSuyog Pawar     /* Check SEI related error checks */
1353*c83a76b0SSuyog Pawar     if(1 == ps_static_cfg_prms->s_out_strm_prms.i4_sei_enable_flag)
1354*c83a76b0SSuyog Pawar     {
1355*c83a76b0SSuyog Pawar         WORD32 i;
1356*c83a76b0SSuyog Pawar         /* Check values for i4_sei_hash_flags */
1357*c83a76b0SSuyog Pawar         if(!((ps_static_cfg_prms->s_out_strm_prms.i4_decoded_pic_hash_sei_flag == 2) ||
1358*c83a76b0SSuyog Pawar              (ps_static_cfg_prms->s_out_strm_prms.i4_decoded_pic_hash_sei_flag == 3) ||
1359*c83a76b0SSuyog Pawar              (ps_static_cfg_prms->s_out_strm_prms.i4_decoded_pic_hash_sei_flag == 0)))
1360*c83a76b0SSuyog Pawar         {
1361*c83a76b0SSuyog Pawar             error_code = IHEVCE_SEI_HASH_VALUE_NOT_SUPPORTED;
1362*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1363*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: i4_sei_hash_flags out of range\n");
1364*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1365*c83a76b0SSuyog Pawar         }
1366*c83a76b0SSuyog Pawar 
1367*c83a76b0SSuyog Pawar         /* Content Light Level Info error check */
1368*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_out_strm_prms.i4_sei_cll_enable > 1) ||
1369*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_out_strm_prms.i4_sei_cll_enable < 0))
1370*c83a76b0SSuyog Pawar         {
1371*c83a76b0SSuyog Pawar             error_code = IHEVCE_SEI_CLL_ENABLE_OUT_OF_RANGE;
1372*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1373*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: i4_sei_cll_enable out of range\n");
1374*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1375*c83a76b0SSuyog Pawar         }
1376*c83a76b0SSuyog Pawar 
1377*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_out_strm_prms.i4_sei_buffer_period_flags ||
1378*c83a76b0SSuyog Pawar             ps_static_cfg_prms->s_out_strm_prms.i4_sei_pic_timing_flags) &&
1379*c83a76b0SSuyog Pawar            (!ps_static_cfg_prms->s_out_strm_prms.i4_vui_enable))
1380*c83a76b0SSuyog Pawar         {
1381*c83a76b0SSuyog Pawar             error_code = IHEVCE_SEI_ENABLED_VUI_DISABLED;
1382*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1383*c83a76b0SSuyog Pawar                 pv_cb_handle,
1384*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: Both SEI and VUI ought to be enabled when either "
1385*c83a76b0SSuyog Pawar                 "'i4_sei_buffer_period_flags' or "
1386*c83a76b0SSuyog Pawar                 "'i4_sei_pic_timing_flags' are enabled\n");
1387*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1388*c83a76b0SSuyog Pawar         }
1389*c83a76b0SSuyog Pawar 
1390*c83a76b0SSuyog Pawar         if((1 == ps_static_cfg_prms->s_out_strm_prms.i4_sei_buffer_period_flags) &&
1391*c83a76b0SSuyog Pawar            (3 == ps_static_cfg_prms->s_config_prms.i4_rate_control_mode))
1392*c83a76b0SSuyog Pawar         {
1393*c83a76b0SSuyog Pawar             error_code = IHEVCE_SEI_MESSAGES_DEPENDENCY;
1394*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1395*c83a76b0SSuyog Pawar                 pv_cb_handle,
1396*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: i4_sei_buffer_period_flags should be disabled for CQP mode of Rate "
1397*c83a76b0SSuyog Pawar                 "control \n");
1398*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1399*c83a76b0SSuyog Pawar         }
1400*c83a76b0SSuyog Pawar 
1401*c83a76b0SSuyog Pawar         /* Check values for i4_sei_mastering_disp_colour_vol_flags */
1402*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_out_strm_prms.i4_sei_mastering_disp_colour_vol_flags != 0) &&
1403*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_out_strm_prms.i4_sei_mastering_disp_colour_vol_flags != 1))
1404*c83a76b0SSuyog Pawar         {
1405*c83a76b0SSuyog Pawar             error_code = IHEVCE_MASTERING_DISP_COL_VOL_OUT_OF_RANGE;
1406*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1407*c83a76b0SSuyog Pawar                 pv_cb_handle,
1408*c83a76b0SSuyog Pawar                 "IHEVCE ERROR: i4_sei_mastering_disp_colour_vol_flags out of range\n");
1409*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1410*c83a76b0SSuyog Pawar         }
1411*c83a76b0SSuyog Pawar 
1412*c83a76b0SSuyog Pawar         if(1 == ps_static_cfg_prms->s_out_strm_prms.i4_sei_mastering_disp_colour_vol_flags)
1413*c83a76b0SSuyog Pawar         {
1414*c83a76b0SSuyog Pawar             /* Check values for u2_display_primaries_x and u2_display_primaries_y */
1415*c83a76b0SSuyog Pawar             for(i = 0; i < 3; i++)
1416*c83a76b0SSuyog Pawar             {
1417*c83a76b0SSuyog Pawar                 if((ps_static_cfg_prms->s_out_strm_prms.au2_display_primaries_x[i] > 50000))
1418*c83a76b0SSuyog Pawar                 {
1419*c83a76b0SSuyog Pawar                     error_code = IHEVCE_DISPLAY_PRIMARY_X_OUT_OF_RANGE;
1420*c83a76b0SSuyog Pawar                     ps_sys_api->ihevce_printf(
1421*c83a76b0SSuyog Pawar                         pv_cb_handle, "IHEVCE ERROR: au2_display_primaries_x out of range\n");
1422*c83a76b0SSuyog Pawar                     return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1423*c83a76b0SSuyog Pawar                 }
1424*c83a76b0SSuyog Pawar 
1425*c83a76b0SSuyog Pawar                 if((ps_static_cfg_prms->s_out_strm_prms.au2_display_primaries_y[i] > 50000))
1426*c83a76b0SSuyog Pawar                 {
1427*c83a76b0SSuyog Pawar                     error_code = IHEVCE_DISPLAY_PRIMARY_Y_OUT_OF_RANGE;
1428*c83a76b0SSuyog Pawar                     ps_sys_api->ihevce_printf(
1429*c83a76b0SSuyog Pawar                         pv_cb_handle, "IHEVCE ERROR: au2_display_primaries_y out of range\n");
1430*c83a76b0SSuyog Pawar                     return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1431*c83a76b0SSuyog Pawar                 }
1432*c83a76b0SSuyog Pawar             }
1433*c83a76b0SSuyog Pawar 
1434*c83a76b0SSuyog Pawar             if((ps_static_cfg_prms->s_out_strm_prms.u2_white_point_x > 50000))
1435*c83a76b0SSuyog Pawar             {
1436*c83a76b0SSuyog Pawar                 error_code = IHEVCE_WHITE_POINT_X_OUT_OF_RANGE;
1437*c83a76b0SSuyog Pawar                 ps_sys_api->ihevce_printf(
1438*c83a76b0SSuyog Pawar                     pv_cb_handle, "IHEVCE ERROR: u2_white_point_x out of range\n");
1439*c83a76b0SSuyog Pawar                 return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1440*c83a76b0SSuyog Pawar             }
1441*c83a76b0SSuyog Pawar 
1442*c83a76b0SSuyog Pawar             if((ps_static_cfg_prms->s_out_strm_prms.u2_white_point_y > 50000))
1443*c83a76b0SSuyog Pawar             {
1444*c83a76b0SSuyog Pawar                 error_code = IHEVCE_WHITE_POINT_Y_OUT_OF_RANGE;
1445*c83a76b0SSuyog Pawar                 ps_sys_api->ihevce_printf(
1446*c83a76b0SSuyog Pawar                     pv_cb_handle, "IHEVCE ERROR: u2_white_point_y out of range\n");
1447*c83a76b0SSuyog Pawar                 return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1448*c83a76b0SSuyog Pawar             }
1449*c83a76b0SSuyog Pawar 
1450*c83a76b0SSuyog Pawar             if(ps_static_cfg_prms->s_out_strm_prms.u4_max_display_mastering_luminance <=
1451*c83a76b0SSuyog Pawar                ps_static_cfg_prms->s_out_strm_prms.u4_min_display_mastering_luminance)
1452*c83a76b0SSuyog Pawar             {
1453*c83a76b0SSuyog Pawar                 error_code = IHEVCE_MAX_DISP_MATERING_LUM_OUT_OF_RANGE;
1454*c83a76b0SSuyog Pawar                 ps_sys_api->ihevce_printf(
1455*c83a76b0SSuyog Pawar                     pv_cb_handle,
1456*c83a76b0SSuyog Pawar                     "IHEVCE ERROR: u4_max_display_mastering_luminance should be greater then "
1457*c83a76b0SSuyog Pawar                     "u4_min_display_mastering_luminance \n");
1458*c83a76b0SSuyog Pawar                 return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1459*c83a76b0SSuyog Pawar             }
1460*c83a76b0SSuyog Pawar         }
1461*c83a76b0SSuyog Pawar     }
1462*c83a76b0SSuyog Pawar #endif
1463*c83a76b0SSuyog Pawar 
1464*c83a76b0SSuyog Pawar     if(1 == ps_static_cfg_prms->s_out_strm_prms.i4_vui_enable)
1465*c83a76b0SSuyog Pawar     {
1466*c83a76b0SSuyog Pawar         /* validate static vui parameters */
1467*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_aspect_ratio_info_present_flag & 0xFE) > 0))
1468*c83a76b0SSuyog Pawar         {
1469*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_ASPECT_RATIO_PARAMS;
1470*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1471*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid aspect ratio parameters\n");
1472*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1473*c83a76b0SSuyog Pawar         }
1474*c83a76b0SSuyog Pawar 
1475*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_overscan_info_present_flag & 0xFE) > 0) ||
1476*c83a76b0SSuyog Pawar            ((ps_static_cfg_prms->s_vui_sei_prms.u1_overscan_appropriate_flag & 0xFE) > 0))
1477*c83a76b0SSuyog Pawar         {
1478*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_OVERSCAN_PARAMS;
1479*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: invalid overscan parameters\n");
1480*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1481*c83a76b0SSuyog Pawar         }
1482*c83a76b0SSuyog Pawar 
1483*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_video_signal_type_present_flag & 0xFE) > 0) ||
1484*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_vui_sei_prms.u1_video_format > 5) ||
1485*c83a76b0SSuyog Pawar            ((ps_static_cfg_prms->s_vui_sei_prms.u1_video_full_range_flag & 0xFE) > 0))
1486*c83a76b0SSuyog Pawar         {
1487*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_VIDEO_PARAMS;
1488*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1489*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid video signal type parameters\n");
1490*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1491*c83a76b0SSuyog Pawar         }
1492*c83a76b0SSuyog Pawar 
1493*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_colour_description_present_flag & 0xFE) > 0))
1494*c83a76b0SSuyog Pawar         {
1495*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_COLOUR_PARAMS;
1496*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1497*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid colour description parameters\n");
1498*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1499*c83a76b0SSuyog Pawar         }
1500*c83a76b0SSuyog Pawar 
1501*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_loc_info_present_flag & 0xFE) > 0) ||
1502*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_sample_loc_type_top_field > 5) ||
1503*c83a76b0SSuyog Pawar            (ps_static_cfg_prms->s_vui_sei_prms.u1_chroma_sample_loc_type_bottom_field > 5))
1504*c83a76b0SSuyog Pawar         {
1505*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_CHROMA_PARAMS;
1506*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1507*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid chroma info parameters\n");
1508*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1509*c83a76b0SSuyog Pawar         }
1510*c83a76b0SSuyog Pawar 
1511*c83a76b0SSuyog Pawar         if((ps_static_cfg_prms->s_vui_sei_prms.u1_timing_info_present_flag & 0xFE) > 0)
1512*c83a76b0SSuyog Pawar         {
1513*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_TIMING_INFO_PARAM;
1514*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1515*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid timing info present flag\n");
1516*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1517*c83a76b0SSuyog Pawar         }
1518*c83a76b0SSuyog Pawar 
1519*c83a76b0SSuyog Pawar         if(((ps_static_cfg_prms->s_vui_sei_prms.u1_vui_hrd_parameters_present_flag & 0xFE) > 0) ||
1520*c83a76b0SSuyog Pawar            ((ps_static_cfg_prms->s_vui_sei_prms.u1_nal_hrd_parameters_present_flag & 0xFE) > 0))
1521*c83a76b0SSuyog Pawar         {
1522*c83a76b0SSuyog Pawar             error_code = IHEVC_INVALID_HRD_PRESENT_PARAMS;
1523*c83a76b0SSuyog Pawar             ps_sys_api->ihevce_printf(
1524*c83a76b0SSuyog Pawar                 pv_cb_handle, "IHEVCE ERROR: invalid vui or vcl hrd parameters present flag\n");
1525*c83a76b0SSuyog Pawar             return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
1526*c83a76b0SSuyog Pawar         }
1527*c83a76b0SSuyog Pawar     }
1528*c83a76b0SSuyog Pawar 
1529*c83a76b0SSuyog Pawar     error_code = ihevce_validate_tile_config_params(ps_static_cfg_prms);
1530*c83a76b0SSuyog Pawar     if(IHEVCE_SUCCESS != error_code)
1531*c83a76b0SSuyog Pawar     {
1532*c83a76b0SSuyog Pawar         return error_code;
1533*c83a76b0SSuyog Pawar     }
1534*c83a76b0SSuyog Pawar 
1535*c83a76b0SSuyog Pawar     if(ps_static_cfg_prms->s_slice_params.i4_slice_segment_mode != 0)
1536*c83a76b0SSuyog Pawar     {
1537*c83a76b0SSuyog Pawar         error_code = IHEVCE_BAD_SLICE_PARAMS;
1538*c83a76b0SSuyog Pawar         ps_sys_api->ihevce_printf(
1539*c83a76b0SSuyog Pawar             pv_cb_handle, "IHEVCE ERROR: i4_slice_segment_mode should be 0 \n");
1540*c83a76b0SSuyog Pawar         return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
1541*c83a76b0SSuyog Pawar     }
1542*c83a76b0SSuyog Pawar 
1543*c83a76b0SSuyog Pawar     return IHEVCE_SUCCESS;
1544*c83a76b0SSuyog Pawar }
1545*c83a76b0SSuyog Pawar 
1546*c83a76b0SSuyog Pawar /*!
1547*c83a76b0SSuyog Pawar ******************************************************************************
1548*c83a76b0SSuyog Pawar * \if Function name : ihevce_get_level_index \endif
1549*c83a76b0SSuyog Pawar *
1550*c83a76b0SSuyog Pawar * \brief
1551*c83a76b0SSuyog Pawar *    This function returns the index of level based on codec_level value
1552*c83a76b0SSuyog Pawar *    Please see the LEVEL_T enum def
1553*c83a76b0SSuyog Pawar *
1554*c83a76b0SSuyog Pawar * \param[in] Codec Level
1555*c83a76b0SSuyog Pawar *
1556*c83a76b0SSuyog Pawar * \return
1557*c83a76b0SSuyog Pawar *    Index of Codec level
1558*c83a76b0SSuyog Pawar *
1559*c83a76b0SSuyog Pawar * \author
1560*c83a76b0SSuyog Pawar *    Ittiam
1561*c83a76b0SSuyog Pawar *
1562*c83a76b0SSuyog Pawar *****************************************************************************
1563*c83a76b0SSuyog Pawar */
ihevce_get_level_index(WORD32 i4_codec_level)1564*c83a76b0SSuyog Pawar WORD32 ihevce_get_level_index(WORD32 i4_codec_level)
1565*c83a76b0SSuyog Pawar {
1566*c83a76b0SSuyog Pawar     switch(i4_codec_level)
1567*c83a76b0SSuyog Pawar     {
1568*c83a76b0SSuyog Pawar     case LEVEL1:
1569*c83a76b0SSuyog Pawar         return 0;
1570*c83a76b0SSuyog Pawar     case LEVEL2:
1571*c83a76b0SSuyog Pawar         return 1;
1572*c83a76b0SSuyog Pawar     case LEVEL2_1:
1573*c83a76b0SSuyog Pawar         return 2;
1574*c83a76b0SSuyog Pawar     case LEVEL3:
1575*c83a76b0SSuyog Pawar         return 3;
1576*c83a76b0SSuyog Pawar     case LEVEL3_1:
1577*c83a76b0SSuyog Pawar         return 4;
1578*c83a76b0SSuyog Pawar     case LEVEL4:
1579*c83a76b0SSuyog Pawar         return 5;
1580*c83a76b0SSuyog Pawar     case LEVEL4_1:
1581*c83a76b0SSuyog Pawar         return 6;
1582*c83a76b0SSuyog Pawar     case LEVEL5:
1583*c83a76b0SSuyog Pawar         return 7;
1584*c83a76b0SSuyog Pawar     case LEVEL5_1:
1585*c83a76b0SSuyog Pawar         return 8;
1586*c83a76b0SSuyog Pawar     case LEVEL5_2:
1587*c83a76b0SSuyog Pawar         return 9;
1588*c83a76b0SSuyog Pawar     case LEVEL6:
1589*c83a76b0SSuyog Pawar         return 10;
1590*c83a76b0SSuyog Pawar     case LEVEL6_1:
1591*c83a76b0SSuyog Pawar         return 11;
1592*c83a76b0SSuyog Pawar     case LEVEL6_2:
1593*c83a76b0SSuyog Pawar         return 12;
1594*c83a76b0SSuyog Pawar     default:
1595*c83a76b0SSuyog Pawar         return 0;
1596*c83a76b0SSuyog Pawar     }
1597*c83a76b0SSuyog Pawar }
1598