xref: /aosp_15_r20/external/libhevc/encoder/ihevce_api.h (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 * \file ihevce_api.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contains definitions and structures which are shared between
26*c83a76b0SSuyog Pawar *    application and HEVC Encoder Processing interface layer
27*c83a76b0SSuyog Pawar *
28*c83a76b0SSuyog Pawar * \date
29*c83a76b0SSuyog Pawar *    18/09/2012
30*c83a76b0SSuyog Pawar *
31*c83a76b0SSuyog Pawar * \author
32*c83a76b0SSuyog Pawar *    Ittiam
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar ******************************************************************************
35*c83a76b0SSuyog Pawar */
36*c83a76b0SSuyog Pawar 
37*c83a76b0SSuyog Pawar #ifndef _IHEVCE_API_H_
38*c83a76b0SSuyog Pawar #define _IHEVCE_API_H_
39*c83a76b0SSuyog Pawar 
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
42*c83a76b0SSuyog Pawar /*****************************************************************************/
43*c83a76b0SSuyog Pawar #define IHEVCE_MAX_IO_BUFFERS 3
44*c83a76b0SSuyog Pawar 
45*c83a76b0SSuyog Pawar #define IHEVCE_EXTENDED_SAR 255
46*c83a76b0SSuyog Pawar 
47*c83a76b0SSuyog Pawar #define IHEVCE_MBR_CORE_WEIGHTAGE 0.25f
48*c83a76b0SSuyog Pawar 
49*c83a76b0SSuyog Pawar /** Maximum number of resolutions encoder can run */
50*c83a76b0SSuyog Pawar #define IHEVCE_MAX_NUM_RESOLUTIONS 1  //10
51*c83a76b0SSuyog Pawar 
52*c83a76b0SSuyog Pawar /** Maximum number of bit-rate instances encoder can run */
53*c83a76b0SSuyog Pawar #define IHEVCE_MAX_NUM_BITRATES 1  //5
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar #define MAX_NUM_CORES 8  // Supports upto 160 logical cores.
56*c83a76b0SSuyog Pawar 
57*c83a76b0SSuyog Pawar /* Max length of filenames */
58*c83a76b0SSuyog Pawar #define MAX_LEN_FILENAME 200
59*c83a76b0SSuyog Pawar 
60*c83a76b0SSuyog Pawar /* max number of tiles per row/cols */
61*c83a76b0SSuyog Pawar //Main/Main10 profile (=4096/256) //Don't change this
62*c83a76b0SSuyog Pawar #define MAX_TILE_COLUMNS 16
63*c83a76b0SSuyog Pawar //Main/Main10 profile (=2160/64)  //Don't change this
64*c83a76b0SSuyog Pawar #define MAX_TILE_ROWS 34
65*c83a76b0SSuyog Pawar 
66*c83a76b0SSuyog Pawar #define IHEVCE_ASYNCH_ERROR_START 0x0000E600
67*c83a76b0SSuyog Pawar #define IHEVCE_SYNCH_ERROR_START 0x0000E700
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar #define MAX_NUM_DYN_BITRATE_CMDS (IHEVCE_MAX_NUM_RESOLUTIONS * IHEVCE_MAX_NUM_BITRATES)
70*c83a76b0SSuyog Pawar 
71*c83a76b0SSuyog Pawar /* NAL units related definations */
72*c83a76b0SSuyog Pawar #define MAX_NUM_PREFIX_NALS_PER_AU 20
73*c83a76b0SSuyog Pawar #define MAX_NUM_SUFFIX_NALS_PER_AU 20
74*c83a76b0SSuyog Pawar #define MAX_NUM_VCL_NALS_PER_AU 200 /* as per level 5.1 from spec */
75*c83a76b0SSuyog Pawar 
76*c83a76b0SSuyog Pawar /* Maximum number of processor groups supported */
77*c83a76b0SSuyog Pawar #define MAX_NUMBER_PROC_GRPS 4
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar /** @brief maximum length of CC User Data in a single frame */
80*c83a76b0SSuyog Pawar #define MAX_SEI_PAYLOAD_PER_TLV (0x200)
81*c83a76b0SSuyog Pawar 
82*c83a76b0SSuyog Pawar #define MAX_NUMBER_OF_SEI_PAYLOAD (10)
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar #define IHEVCE_COMMANDS_TAG_MASK (0x0000FFFF)
85*c83a76b0SSuyog Pawar 
86*c83a76b0SSuyog Pawar // Upper 16 bits are used to communicate payload type
87*c83a76b0SSuyog Pawar #define IHEVCE_PAYLOAD_TYPE_MASK (0xFFFF0000)
88*c83a76b0SSuyog Pawar 
89*c83a76b0SSuyog Pawar #define IHEVCE_PAYLOAD_TYPE_SHIFT (16)
90*c83a76b0SSuyog Pawar 
91*c83a76b0SSuyog Pawar #define MAX_FRAME_RATE  300.0
92*c83a76b0SSuyog Pawar #define MIN_FRAME_RATE  1.0
93*c83a76b0SSuyog Pawar 
94*c83a76b0SSuyog Pawar /*****************************************************************************/
95*c83a76b0SSuyog Pawar /* Enums                                                                     */
96*c83a76b0SSuyog Pawar /*****************************************************************************/
97*c83a76b0SSuyog Pawar /**
98*c83a76b0SSuyog Pawar  *  @brief      Enumerations for Quality config.
99*c83a76b0SSuyog Pawar  */
100*c83a76b0SSuyog Pawar typedef enum
101*c83a76b0SSuyog Pawar {
102*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_DUMMY = 0xFFFFFFFF,
103*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P0 = 0,
104*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P2 = 2,
105*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P3,
106*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P4,
107*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P5,
108*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P6,
109*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_P7,
110*c83a76b0SSuyog Pawar     IHEVCE_NUM_QUALITY_PRESET
111*c83a76b0SSuyog Pawar } IHEVCE_QUALITY_CONFIG_T;
112*c83a76b0SSuyog Pawar 
113*c83a76b0SSuyog Pawar /*****************************************************************************/
114*c83a76b0SSuyog Pawar /* Enums                                                                     */
115*c83a76b0SSuyog Pawar /*****************************************************************************/
116*c83a76b0SSuyog Pawar /**
117*c83a76b0SSuyog Pawar  *  @brief      Enumerations for Quality config for auxilary bitrate in case of MBR.
118*c83a76b0SSuyog Pawar  */
119*c83a76b0SSuyog Pawar typedef enum
120*c83a76b0SSuyog Pawar {
121*c83a76b0SSuyog Pawar     IHEVCE_MBR_DUMMY = -1,
122*c83a76b0SSuyog Pawar     IHEVCE_MBR_HIGH_QUALITY = 0,
123*c83a76b0SSuyog Pawar     IHEVCE_MBR_MEDIUM_SPEED,
124*c83a76b0SSuyog Pawar     IHEVCE_MBR_HIGH_SPEED,
125*c83a76b0SSuyog Pawar     IHEVCE_MBR_EXTREME_SPEED
126*c83a76b0SSuyog Pawar } IHEVCE_QUALITY_CONFIG_MBR_T;
127*c83a76b0SSuyog Pawar 
128*c83a76b0SSuyog Pawar /**
129*c83a76b0SSuyog Pawar  *  @brief      Enumerations for Rate Control config.
130*c83a76b0SSuyog Pawar  */
131*c83a76b0SSuyog Pawar typedef enum
132*c83a76b0SSuyog Pawar {
133*c83a76b0SSuyog Pawar     IHEVCE_RC_DUMMY = 0xFFFFFFFF,
134*c83a76b0SSuyog Pawar     IHEVCE_RC_LOW_DELAY = 1,
135*c83a76b0SSuyog Pawar     IHEVCE_RC_STORAGE = 2,
136*c83a76b0SSuyog Pawar     IHEVCE_RC_TWOPASS = 3,
137*c83a76b0SSuyog Pawar     IHEVCE_RC_NONE = 4,
138*c83a76b0SSuyog Pawar     IHEVCE_RC_USER_DEFINED = 5,
139*c83a76b0SSuyog Pawar     IHEVCE_RC_RATECONTROLPRESET_DEFAULT = IHEVCE_RC_LOW_DELAY
140*c83a76b0SSuyog Pawar } IHEVCE_RATE_CONTROL_CONFIG_T;
141*c83a76b0SSuyog Pawar 
142*c83a76b0SSuyog Pawar /**
143*c83a76b0SSuyog Pawar  *  @brief      Enumerations for Intra Refresh config.
144*c83a76b0SSuyog Pawar  */
145*c83a76b0SSuyog Pawar typedef enum
146*c83a76b0SSuyog Pawar {
147*c83a76b0SSuyog Pawar     IHEVCE_REFRESH_DUMMY = 0,
148*c83a76b0SSuyog Pawar     IHEVCE_I_SILICE = 1,
149*c83a76b0SSuyog Pawar     IHEVCE_COLUMN_BASED = 2,
150*c83a76b0SSuyog Pawar     IHEVCE_DBR = 3,
151*c83a76b0SSuyog Pawar     IHEVCE_GDR = 4
152*c83a76b0SSuyog Pawar } IHEVCE_REFRESH_CONFIG_T;
153*c83a76b0SSuyog Pawar 
154*c83a76b0SSuyog Pawar /**
155*c83a76b0SSuyog Pawar  *  @brief      Enumerations for ASYNCH Control Commands Tags.
156*c83a76b0SSuyog Pawar  */
157*c83a76b0SSuyog Pawar typedef enum
158*c83a76b0SSuyog Pawar {
159*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_API_END_TAG = 0xFFFF,
160*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_API_SETBITRATE_TAG = 0x01,
161*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_API_SET_RF_TAG = 0x02,
162*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_API_FORCE_CLOSE_TAG = 0x03
163*c83a76b0SSuyog Pawar } IHEVCE_ASYNCH_API_COMMAND_TAG_T;
164*c83a76b0SSuyog Pawar 
165*c83a76b0SSuyog Pawar typedef enum
166*c83a76b0SSuyog Pawar {
167*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_ERR_NO_END_TAG = IHEVCE_ASYNCH_ERROR_START + 0x01,
168*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_ERR_TLV_ERROR = IHEVCE_ASYNCH_ERROR_START + 0x02,
169*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_ASYNCH_ERROR_START + 0x03,
170*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_ERR_BR_NOT_BYTE = IHEVCE_ASYNCH_ERROR_START + 0x04,
171*c83a76b0SSuyog Pawar     IHEVCE_ASYNCH_FORCE_CLOSE_NOT_SUPPORTED = IHEVCE_ASYNCH_ERROR_START + 0x05
172*c83a76b0SSuyog Pawar } IHEVCE_ASYNCH_ERROR_TAG_T;
173*c83a76b0SSuyog Pawar 
174*c83a76b0SSuyog Pawar /**
175*c83a76b0SSuyog Pawar  *  @brief      Enumerations for SYNCH Control Commands Tags.
176*c83a76b0SSuyog Pawar  */
177*c83a76b0SSuyog Pawar typedef enum
178*c83a76b0SSuyog Pawar {
179*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_END_TAG = 0xFFFF,
180*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_FLUSH_TAG = 0x21,
181*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_FORCE_IDR_TAG = 0x22,
182*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_REG_KEYFRAME_SEI_TAG = 0x23,
183*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_REG_ALLFRAME_SEI_TAG = 0x24,
184*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_API_SET_RES_TAG = 0x25
185*c83a76b0SSuyog Pawar } IHEVCE_SYNCH_API_COMMAND_TAG_T;
186*c83a76b0SSuyog Pawar 
187*c83a76b0SSuyog Pawar typedef enum
188*c83a76b0SSuyog Pawar {
189*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_NO_END_TAG = IHEVCE_SYNCH_ERROR_START + 0x11,
190*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_TLV_ERROR = IHEVCE_SYNCH_ERROR_START + 0x12,
191*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_SYNCH_ERROR_START + 0x13,
192*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_NO_PADDING = IHEVCE_SYNCH_ERROR_START + 0x14,
193*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_WRONG_LENGTH = IHEVCE_SYNCH_ERROR_START + 0x15,
194*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_FREQ_FORCE_IDR_RECEIVED = IHEVCE_SYNCH_ERROR_START + 0x16,
195*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_TOO_MANY_SEI_MSG = IHEVCE_SYNCH_ERROR_START + 0x17,
196*c83a76b0SSuyog Pawar     IHEVCE_SYNCH_ERR_SET_RES_NOT_SUPPORTED = IHEVCE_SYNCH_ERROR_START + 0x18
197*c83a76b0SSuyog Pawar } IHEVCE_SYNCH_ERROR_TAG_T;
198*c83a76b0SSuyog Pawar 
199*c83a76b0SSuyog Pawar /**
200*c83a76b0SSuyog Pawar  *  @brief      Enumerations for output status identifier
201*c83a76b0SSuyog Pawar  */
202*c83a76b0SSuyog Pawar typedef enum
203*c83a76b0SSuyog Pawar {
204*c83a76b0SSuyog Pawar     IHEVCE_PROCESS = 0,
205*c83a76b0SSuyog Pawar     IHEVCE_CONTROL_STS,
206*c83a76b0SSuyog Pawar     IHEVCE_CREATE_STS,
207*c83a76b0SSuyog Pawar } IHEVCE_OUT_STS_ID_T;
208*c83a76b0SSuyog Pawar 
209*c83a76b0SSuyog Pawar /**
210*c83a76b0SSuyog Pawar   * Scenetype enums
211*c83a76b0SSuyog Pawar   */
212*c83a76b0SSuyog Pawar typedef enum
213*c83a76b0SSuyog Pawar {
214*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_NORMAL = 0,
215*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_SCENE_CUT,
216*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_FLASH,
217*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_FADE_IN,
218*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_FADE_OUT,
219*c83a76b0SSuyog Pawar     IHEVCE_SCENE_TYPE_DISSOLVE,
220*c83a76b0SSuyog Pawar     IHEVCE_MAX_NUM_SCENE_TYPES
221*c83a76b0SSuyog Pawar } IHEVCE_SCENE_TYPE;
222*c83a76b0SSuyog Pawar 
223*c83a76b0SSuyog Pawar /**
224*c83a76b0SSuyog Pawar   * Type of data. Used for scanning the config file
225*c83a76b0SSuyog Pawar   */
226*c83a76b0SSuyog Pawar typedef enum
227*c83a76b0SSuyog Pawar {
228*c83a76b0SSuyog Pawar     IHEVCE_STRING = 0,
229*c83a76b0SSuyog Pawar     IHEVCE_INT,
230*c83a76b0SSuyog Pawar     IHEVCE_FLOAT
231*c83a76b0SSuyog Pawar } IHEVCE_DATA_TYPE;
232*c83a76b0SSuyog Pawar 
233*c83a76b0SSuyog Pawar /*****************************************************************************/
234*c83a76b0SSuyog Pawar /* Structure                                                                 */
235*c83a76b0SSuyog Pawar /*****************************************************************************/
236*c83a76b0SSuyog Pawar 
237*c83a76b0SSuyog Pawar /**
238*c83a76b0SSuyog Pawar  *  @brief      Structure to describe the properties of Source of encoder.
239*c83a76b0SSuyog Pawar  */
240*c83a76b0SSuyog Pawar typedef struct
241*c83a76b0SSuyog Pawar {
242*c83a76b0SSuyog Pawar     /** Used for checking version compatibility  */
243*c83a76b0SSuyog Pawar     WORD32 i4_size;
244*c83a76b0SSuyog Pawar 
245*c83a76b0SSuyog Pawar     /**  Input chroma format
246*c83a76b0SSuyog Pawar      * @sa : IV_COLOR_FORMAT_T
247*c83a76b0SSuyog Pawar      */
248*c83a76b0SSuyog Pawar     WORD32 inp_chr_format;
249*c83a76b0SSuyog Pawar 
250*c83a76b0SSuyog Pawar     /**  Internal chroma format
251*c83a76b0SSuyog Pawar      * @sa : IV_COLOR_FORMAT_T
252*c83a76b0SSuyog Pawar      */
253*c83a76b0SSuyog Pawar     WORD32 i4_chr_format;
254*c83a76b0SSuyog Pawar 
255*c83a76b0SSuyog Pawar     /** Width of input luma */
256*c83a76b0SSuyog Pawar     WORD32 i4_width;
257*c83a76b0SSuyog Pawar 
258*c83a76b0SSuyog Pawar     /** Height of input luma */
259*c83a76b0SSuyog Pawar     WORD32 i4_height;
260*c83a76b0SSuyog Pawar 
261*c83a76b0SSuyog Pawar     /** Configured Width of input luma */
262*c83a76b0SSuyog Pawar     WORD32 i4_orig_width;
263*c83a76b0SSuyog Pawar 
264*c83a76b0SSuyog Pawar     /** Configured Height of input luma */
265*c83a76b0SSuyog Pawar     WORD32 i4_orig_height;
266*c83a76b0SSuyog Pawar 
267*c83a76b0SSuyog Pawar     /** Width of each pixel in bits */
268*c83a76b0SSuyog Pawar     WORD32 i4_input_bit_depth;
269*c83a76b0SSuyog Pawar 
270*c83a76b0SSuyog Pawar     /** Input Content Type
271*c83a76b0SSuyog Pawar      * @sa : IV_CONTENT_TYPE_T
272*c83a76b0SSuyog Pawar      */
273*c83a76b0SSuyog Pawar     WORD32 i4_field_pic;
274*c83a76b0SSuyog Pawar 
275*c83a76b0SSuyog Pawar     /** Frame/Field rate numerator
276*c83a76b0SSuyog Pawar      * (final fps = frame_rate_num/frame_rate_denom)
277*c83a76b0SSuyog Pawar      */
278*c83a76b0SSuyog Pawar     WORD32 i4_frm_rate_num;
279*c83a76b0SSuyog Pawar 
280*c83a76b0SSuyog Pawar     /** Can be 1000 or 1001 to allow proper representation
281*c83a76b0SSuyog Pawar      *  of fractional frame-rates
282*c83a76b0SSuyog Pawar      */
283*c83a76b0SSuyog Pawar     WORD32 i4_frm_rate_denom;
284*c83a76b0SSuyog Pawar 
285*c83a76b0SSuyog Pawar     /**
286*c83a76b0SSuyog Pawar      *  Whether Top field is encoded first or bottom
287*c83a76b0SSuyog Pawar      */
288*c83a76b0SSuyog Pawar     WORD32 i4_topfield_first;
289*c83a76b0SSuyog Pawar 
290*c83a76b0SSuyog Pawar } ihevce_src_params_t;
291*c83a76b0SSuyog Pawar 
292*c83a76b0SSuyog Pawar /*****************************************************************************/
293*c83a76b0SSuyog Pawar /* Structure                                                                 */
294*c83a76b0SSuyog Pawar /*****************************************************************************/
295*c83a76b0SSuyog Pawar /**
296*c83a76b0SSuyog Pawar  *  @brief      Structure to describe attributes of a layer.
297*c83a76b0SSuyog Pawar  */
298*c83a76b0SSuyog Pawar typedef struct
299*c83a76b0SSuyog Pawar {
300*c83a76b0SSuyog Pawar     /** Used for checking version compatibility  */
301*c83a76b0SSuyog Pawar     WORD32 i4_size;
302*c83a76b0SSuyog Pawar 
303*c83a76b0SSuyog Pawar     /** Width of input luma */
304*c83a76b0SSuyog Pawar     WORD32 i4_width;
305*c83a76b0SSuyog Pawar 
306*c83a76b0SSuyog Pawar     /** Height of input luma */
307*c83a76b0SSuyog Pawar     WORD32 i4_height;
308*c83a76b0SSuyog Pawar 
309*c83a76b0SSuyog Pawar     /** Frame/Field rate
310*c83a76b0SSuyog Pawar      * (final fps = src frame_rate_num/src frame_rate_denom/i4_frm_rate_scale_factor)
311*c83a76b0SSuyog Pawar      */
312*c83a76b0SSuyog Pawar     WORD32 i4_frm_rate_scale_factor;
313*c83a76b0SSuyog Pawar 
314*c83a76b0SSuyog Pawar     /** Quality vs. complexity
315*c83a76b0SSuyog Pawar      * @sa : IHEVCE_QUALITY_CONFIG_T
316*c83a76b0SSuyog Pawar      */
317*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_CONFIG_T i4_quality_preset;
318*c83a76b0SSuyog Pawar 
319*c83a76b0SSuyog Pawar     /** 0 : Level 4, any level above this not supported */
320*c83a76b0SSuyog Pawar     WORD32 i4_codec_level;
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar     /** Number of bit-rate instances for the current layer
323*c83a76b0SSuyog Pawar     */
324*c83a76b0SSuyog Pawar     WORD32 i4_num_bitrate_instances;
325*c83a76b0SSuyog Pawar 
326*c83a76b0SSuyog Pawar     /** Target Bit-rate in bits for Constant bitrate cases  */
327*c83a76b0SSuyog Pawar     WORD32 ai4_tgt_bitrate[IHEVCE_MAX_NUM_BITRATES];
328*c83a76b0SSuyog Pawar 
329*c83a76b0SSuyog Pawar     /** Peak Bit-rate in bits for each bitrate */
330*c83a76b0SSuyog Pawar     WORD32 ai4_peak_bitrate[IHEVCE_MAX_NUM_BITRATES];
331*c83a76b0SSuyog Pawar 
332*c83a76b0SSuyog Pawar     /** Maximum VBV buffer size in bits for each and each bitrate */
333*c83a76b0SSuyog Pawar     WORD32 ai4_max_vbv_buffer_size[IHEVCE_MAX_NUM_BITRATES];
334*c83a76b0SSuyog Pawar 
335*c83a76b0SSuyog Pawar     /** Frame level Qp for Constant Qp mode */
336*c83a76b0SSuyog Pawar     WORD32 ai4_frame_qp[IHEVCE_MAX_NUM_BITRATES];
337*c83a76b0SSuyog Pawar 
338*c83a76b0SSuyog Pawar } ihevce_tgt_params_t;
339*c83a76b0SSuyog Pawar 
340*c83a76b0SSuyog Pawar /*****************************************************************************/
341*c83a76b0SSuyog Pawar /* Structure                                                                 */
342*c83a76b0SSuyog Pawar /*****************************************************************************/
343*c83a76b0SSuyog Pawar /**
344*c83a76b0SSuyog Pawar  *  @brief      Structure to describe the properties of target
345*c83a76b0SSuyog Pawar                 resolution of encoder.
346*c83a76b0SSuyog Pawar  */
347*c83a76b0SSuyog Pawar typedef struct
348*c83a76b0SSuyog Pawar {
349*c83a76b0SSuyog Pawar     /** Used for checking version compatibility  */
350*c83a76b0SSuyog Pawar     WORD32 i4_size;
351*c83a76b0SSuyog Pawar 
352*c83a76b0SSuyog Pawar     /**  Number of resolution layers
353*c83a76b0SSuyog Pawar      */
354*c83a76b0SSuyog Pawar     WORD32 i4_num_res_layers;
355*c83a76b0SSuyog Pawar 
356*c83a76b0SSuyog Pawar     /*  Applicable only for multi res cases.
357*c83a76b0SSuyog Pawar      Output of only one resolution to be dumped */
358*c83a76b0SSuyog Pawar 
359*c83a76b0SSuyog Pawar     WORD32 i4_mres_single_out;
360*c83a76b0SSuyog Pawar 
361*c83a76b0SSuyog Pawar     /* Specify starting resolution id for mres single out case.
362*c83a76b0SSuyog Pawar      This is only valid in mres_single out mode */
363*c83a76b0SSuyog Pawar 
364*c83a76b0SSuyog Pawar     WORD32 i4_start_res_id;
365*c83a76b0SSuyog Pawar 
366*c83a76b0SSuyog Pawar     /**  To enable reuse across layers
367*c83a76b0SSuyog Pawar      */
368*c83a76b0SSuyog Pawar     WORD32 i4_multi_res_layer_reuse;
369*c83a76b0SSuyog Pawar 
370*c83a76b0SSuyog Pawar     /** Quality vs. complexity for auxilary bitrates
371*c83a76b0SSuyog Pawar      * @sa : IHEVCE_QUALITY_CONFIG_MBR_T
372*c83a76b0SSuyog Pawar      */
373*c83a76b0SSuyog Pawar     IHEVCE_QUALITY_CONFIG_MBR_T i4_mbr_quality_setting;
374*c83a76b0SSuyog Pawar 
375*c83a76b0SSuyog Pawar     /**
376*c83a76b0SSuyog Pawar      *Bit depth used by encoder
377*c83a76b0SSuyog Pawar      */
378*c83a76b0SSuyog Pawar     WORD32 i4_internal_bit_depth;
379*c83a76b0SSuyog Pawar 
380*c83a76b0SSuyog Pawar     /**
381*c83a76b0SSuyog Pawar     *Temporal scalability enable Flag
382*c83a76b0SSuyog Pawar     */
383*c83a76b0SSuyog Pawar     WORD32 i4_enable_temporal_scalability;
384*c83a76b0SSuyog Pawar 
385*c83a76b0SSuyog Pawar     /** Resolution and frame rate scaling factors for
386*c83a76b0SSuyog Pawar      *  each layer
387*c83a76b0SSuyog Pawar      */
388*c83a76b0SSuyog Pawar     ihevce_tgt_params_t as_tgt_params[IHEVCE_MAX_NUM_RESOLUTIONS];
389*c83a76b0SSuyog Pawar 
390*c83a76b0SSuyog Pawar     /*Scaler handle */
391*c83a76b0SSuyog Pawar     void *pv_scaler_handle;
392*c83a76b0SSuyog Pawar 
393*c83a76b0SSuyog Pawar     /*Function pointer for scaling luma data*/
394*c83a76b0SSuyog Pawar     void (*pf_scale_luma)(
395*c83a76b0SSuyog Pawar         void *pv_scaler_handle,
396*c83a76b0SSuyog Pawar         UWORD8 *pu1_in_buf,
397*c83a76b0SSuyog Pawar         WORD32 i4_inp_width,
398*c83a76b0SSuyog Pawar         WORD32 i4_inp_height,
399*c83a76b0SSuyog Pawar         WORD32 i4_inp_stride,
400*c83a76b0SSuyog Pawar         UWORD8 *pu1_out_buf,
401*c83a76b0SSuyog Pawar         WORD32 i4_out_width,
402*c83a76b0SSuyog Pawar         WORD32 i4_out_height,
403*c83a76b0SSuyog Pawar         WORD32 i4_out_stride);
404*c83a76b0SSuyog Pawar 
405*c83a76b0SSuyog Pawar     /*Function pointer for scaling chroma data*/
406*c83a76b0SSuyog Pawar     void (*pf_scale_chroma)(
407*c83a76b0SSuyog Pawar         void *pv_scaler_handle,
408*c83a76b0SSuyog Pawar         UWORD8 *pu1_in_buf,
409*c83a76b0SSuyog Pawar         WORD32 i4_inp_width,
410*c83a76b0SSuyog Pawar         WORD32 i4_inp_height,
411*c83a76b0SSuyog Pawar         WORD32 i4_inp_stride,
412*c83a76b0SSuyog Pawar         UWORD8 *pu1_out_buf,
413*c83a76b0SSuyog Pawar         WORD32 i4_out_width,
414*c83a76b0SSuyog Pawar         WORD32 i4_out_height,
415*c83a76b0SSuyog Pawar         WORD32 i4_out_stride);
416*c83a76b0SSuyog Pawar 
417*c83a76b0SSuyog Pawar } ihevce_tgt_layer_params_t;
418*c83a76b0SSuyog Pawar 
419*c83a76b0SSuyog Pawar /**
420*c83a76b0SSuyog Pawar  *  @brief    Structure to describe the stream level
421*c83a76b0SSuyog Pawar  *            properties encoder should adhere to
422*c83a76b0SSuyog Pawar  */
423*c83a76b0SSuyog Pawar typedef struct
424*c83a76b0SSuyog Pawar {
425*c83a76b0SSuyog Pawar     /** Used for checking version compatibility */
426*c83a76b0SSuyog Pawar     WORD32 i4_size;
427*c83a76b0SSuyog Pawar 
428*c83a76b0SSuyog Pawar     /**  0 - HEVC , no other value supported */
429*c83a76b0SSuyog Pawar     WORD32 i4_codec_type;
430*c83a76b0SSuyog Pawar 
431*c83a76b0SSuyog Pawar     /**1 : Main Profile ,2: Main 10 Profile. no other value supported */
432*c83a76b0SSuyog Pawar     WORD32 i4_codec_profile;
433*c83a76b0SSuyog Pawar 
434*c83a76b0SSuyog Pawar     /** 0: Main Tier ,1: High Tier. no other value supported */
435*c83a76b0SSuyog Pawar     WORD32 i4_codec_tier;
436*c83a76b0SSuyog Pawar 
437*c83a76b0SSuyog Pawar     /** Enable VUI output  1: enable 0 : disable */
438*c83a76b0SSuyog Pawar     WORD32 i4_vui_enable;
439*c83a76b0SSuyog Pawar 
440*c83a76b0SSuyog Pawar     /** Enable specific SEI messages in the stream
441*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
442*c83a76b0SSuyog Pawar      */
443*c83a76b0SSuyog Pawar     WORD32 i4_sei_enable_flag;
444*c83a76b0SSuyog Pawar 
445*c83a76b0SSuyog Pawar     /** Enable specific SEI payload (other than pic timing and buffering period) messages in the stream
446*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
447*c83a76b0SSuyog Pawar      */
448*c83a76b0SSuyog Pawar     WORD32 i4_sei_payload_enable_flag;
449*c83a76b0SSuyog Pawar 
450*c83a76b0SSuyog Pawar     /** Enable specific SEI buffering period messages in the stream
451*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
452*c83a76b0SSuyog Pawar      */
453*c83a76b0SSuyog Pawar     WORD32 i4_sei_buffer_period_flags;
454*c83a76b0SSuyog Pawar 
455*c83a76b0SSuyog Pawar     /** Enable specific SEI Picture timing messages in the stream
456*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
457*c83a76b0SSuyog Pawar      */
458*c83a76b0SSuyog Pawar     WORD32 i4_sei_pic_timing_flags;
459*c83a76b0SSuyog Pawar 
460*c83a76b0SSuyog Pawar     /** Enable specific SEI recovery point messages in the stream
461*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
462*c83a76b0SSuyog Pawar      */
463*c83a76b0SSuyog Pawar     WORD32 i4_sei_recovery_point_flags;
464*c83a76b0SSuyog Pawar 
465*c83a76b0SSuyog Pawar     /** Enable specific SEI mastering display colour volume in the stream
466*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
467*c83a76b0SSuyog Pawar      */
468*c83a76b0SSuyog Pawar     WORD32 i4_sei_mastering_disp_colour_vol_flags;
469*c83a76b0SSuyog Pawar 
470*c83a76b0SSuyog Pawar     /**
471*c83a76b0SSuyog Pawar      * Array to store the display_primaries_x values
472*c83a76b0SSuyog Pawar      */
473*c83a76b0SSuyog Pawar     UWORD16 au2_display_primaries_x[3];
474*c83a76b0SSuyog Pawar 
475*c83a76b0SSuyog Pawar     /**
476*c83a76b0SSuyog Pawar      * Array to store the display_primaries_y values
477*c83a76b0SSuyog Pawar      */
478*c83a76b0SSuyog Pawar     UWORD16 au2_display_primaries_y[3];
479*c83a76b0SSuyog Pawar 
480*c83a76b0SSuyog Pawar     /**
481*c83a76b0SSuyog Pawar      * Variable to store the white point x value
482*c83a76b0SSuyog Pawar      */
483*c83a76b0SSuyog Pawar     UWORD16 u2_white_point_x;
484*c83a76b0SSuyog Pawar 
485*c83a76b0SSuyog Pawar     /**
486*c83a76b0SSuyog Pawar      * Variable to store the white point y value
487*c83a76b0SSuyog Pawar      */
488*c83a76b0SSuyog Pawar     UWORD16 u2_white_point_y;
489*c83a76b0SSuyog Pawar 
490*c83a76b0SSuyog Pawar     /**
491*c83a76b0SSuyog Pawar      * Variable to store the max display mastering luminance value
492*c83a76b0SSuyog Pawar      */
493*c83a76b0SSuyog Pawar     UWORD32 u4_max_display_mastering_luminance;
494*c83a76b0SSuyog Pawar 
495*c83a76b0SSuyog Pawar     /**
496*c83a76b0SSuyog Pawar      * Variable to store the min display mastering luminance value
497*c83a76b0SSuyog Pawar      */
498*c83a76b0SSuyog Pawar     UWORD32 u4_min_display_mastering_luminance;
499*c83a76b0SSuyog Pawar 
500*c83a76b0SSuyog Pawar     /**
501*c83a76b0SSuyog Pawar      * Enable Content Level Light Info
502*c83a76b0SSuyog Pawar      */
503*c83a76b0SSuyog Pawar     WORD32 i4_sei_cll_enable;
504*c83a76b0SSuyog Pawar 
505*c83a76b0SSuyog Pawar     /**
506*c83a76b0SSuyog Pawar      * 16bit unsigned number which indicates the maximum pixel intensity of all samples in bit-stream in units of 1 candela per square metre
507*c83a76b0SSuyog Pawar      */
508*c83a76b0SSuyog Pawar     UWORD16 u2_sei_max_cll;
509*c83a76b0SSuyog Pawar 
510*c83a76b0SSuyog Pawar     /**
511*c83a76b0SSuyog Pawar      * 16bit unsigned number which indicates the average pixel intensity of all samples in bit-stream in units of 1 candela per square metre
512*c83a76b0SSuyog Pawar      */
513*c83a76b0SSuyog Pawar     UWORD16 u2_sei_avg_cll;
514*c83a76b0SSuyog Pawar 
515*c83a76b0SSuyog Pawar     /** Enable/Disable SEI Hash on the Decoded picture & Hash type
516*c83a76b0SSuyog Pawar      *  3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable
517*c83a76b0SSuyog Pawar      */
518*c83a76b0SSuyog Pawar     WORD32 i4_decoded_pic_hash_sei_flag;
519*c83a76b0SSuyog Pawar 
520*c83a76b0SSuyog Pawar     /** Enable specific AUD messages in the stream
521*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
522*c83a76b0SSuyog Pawar      */
523*c83a76b0SSuyog Pawar     WORD32 i4_aud_enable_flags;
524*c83a76b0SSuyog Pawar 
525*c83a76b0SSuyog Pawar     /** Enable EOS messages in the stream
526*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
527*c83a76b0SSuyog Pawar      */
528*c83a76b0SSuyog Pawar     WORD32 i4_eos_enable_flags;
529*c83a76b0SSuyog Pawar 
530*c83a76b0SSuyog Pawar     /** Enable automatic insertion of SPS at each CDR
531*c83a76b0SSuyog Pawar      *  1: enable 0 : disable
532*c83a76b0SSuyog Pawar      */
533*c83a76b0SSuyog Pawar     WORD32 i4_sps_at_cdr_enable;
534*c83a76b0SSuyog Pawar 
535*c83a76b0SSuyog Pawar     WORD32 i4_interop_flags;
536*c83a76b0SSuyog Pawar 
537*c83a76b0SSuyog Pawar } ihevce_out_strm_params_t;
538*c83a76b0SSuyog Pawar 
539*c83a76b0SSuyog Pawar /**
540*c83a76b0SSuyog Pawar  *  @brief   Structure to describe the Encoding Coding tools
541*c83a76b0SSuyog Pawar  *           to be used by the Encoder
542*c83a76b0SSuyog Pawar  */
543*c83a76b0SSuyog Pawar typedef struct
544*c83a76b0SSuyog Pawar {
545*c83a76b0SSuyog Pawar     /** Used for checking version compatibility*/
546*c83a76b0SSuyog Pawar     WORD32 i4_size;
547*c83a76b0SSuyog Pawar 
548*c83a76b0SSuyog Pawar     /** Max spacing between IDR frames -
549*c83a76b0SSuyog Pawar       *  0 indicates only at the beginning
550*c83a76b0SSuyog Pawar       */
551*c83a76b0SSuyog Pawar     WORD32 i4_max_closed_gop_period;
552*c83a76b0SSuyog Pawar 
553*c83a76b0SSuyog Pawar     /** Min spacing between IDR frames  -
554*c83a76b0SSuyog Pawar      *  Max = Min provides fixed segment length
555*c83a76b0SSuyog Pawar      */
556*c83a76b0SSuyog Pawar     WORD32 i4_min_closed_gop_period;
557*c83a76b0SSuyog Pawar 
558*c83a76b0SSuyog Pawar     /** Max spacing between CRA frames -
559*c83a76b0SSuyog Pawar       *
560*c83a76b0SSuyog Pawar       */
561*c83a76b0SSuyog Pawar     WORD32 i4_max_cra_open_gop_period;
562*c83a76b0SSuyog Pawar 
563*c83a76b0SSuyog Pawar     /** Max spacing between I frames  -
564*c83a76b0SSuyog Pawar      *
565*c83a76b0SSuyog Pawar      */
566*c83a76b0SSuyog Pawar     WORD32 i4_max_i_open_gop_period;
567*c83a76b0SSuyog Pawar 
568*c83a76b0SSuyog Pawar     /** Maximum number of dyadic temporal layers */
569*c83a76b0SSuyog Pawar     WORD32 i4_max_temporal_layers;
570*c83a76b0SSuyog Pawar 
571*c83a76b0SSuyog Pawar     /** Maximum number of reference frames */
572*c83a76b0SSuyog Pawar     WORD32 i4_max_reference_frames;
573*c83a76b0SSuyog Pawar 
574*c83a76b0SSuyog Pawar     /** Enable weighted prediction
575*c83a76b0SSuyog Pawar      * 0 - disabled (default); 1 -enabled
576*c83a76b0SSuyog Pawar      */
577*c83a76b0SSuyog Pawar     WORD32 i4_weighted_pred_enable;
578*c83a76b0SSuyog Pawar 
579*c83a76b0SSuyog Pawar     /**  Deblocking type 0 - no deblocking;
580*c83a76b0SSuyog Pawar      *  1 - default; 2 - disable across slices
581*c83a76b0SSuyog Pawar      */
582*c83a76b0SSuyog Pawar     WORD32 i4_deblocking_type;
583*c83a76b0SSuyog Pawar 
584*c83a76b0SSuyog Pawar     /** Use default scaling matrices
585*c83a76b0SSuyog Pawar      * 0 - disabled; 1 - enabled (default)
586*c83a76b0SSuyog Pawar      */
587*c83a76b0SSuyog Pawar     WORD32 i4_use_default_sc_mtx;
588*c83a76b0SSuyog Pawar 
589*c83a76b0SSuyog Pawar     /** Cropping mode for cases  where frame dimensions
590*c83a76b0SSuyog Pawar      *  are not multiple of MIN CU size
591*c83a76b0SSuyog Pawar      *  1 - enable padding to min_cu multiple and generate cropping flags;
592*c83a76b0SSuyog Pawar      *  0 - report error
593*c83a76b0SSuyog Pawar      */
594*c83a76b0SSuyog Pawar     WORD32 i4_cropping_mode;
595*c83a76b0SSuyog Pawar 
596*c83a76b0SSuyog Pawar     /** 0 - no slices; 1 - packet based; 2 - CU based */
597*c83a76b0SSuyog Pawar     WORD32 i4_slice_type;
598*c83a76b0SSuyog Pawar 
599*c83a76b0SSuyog Pawar     /** Use default scaling matrices
600*c83a76b0SSuyog Pawar      * 0 - disabled; 1 - enabled (default)
601*c83a76b0SSuyog Pawar      */
602*c83a76b0SSuyog Pawar     WORD32 i4_enable_entropy_sync;
603*c83a76b0SSuyog Pawar 
604*c83a76b0SSuyog Pawar     /** VQET control parameter */
605*c83a76b0SSuyog Pawar     WORD32 i4_vqet;
606*c83a76b0SSuyog Pawar 
607*c83a76b0SSuyog Pawar } ihevce_coding_params_t;
608*c83a76b0SSuyog Pawar 
609*c83a76b0SSuyog Pawar /**
610*c83a76b0SSuyog Pawar  *  @brief  Structure to describe the Configurable parameters of Encoder
611*c83a76b0SSuyog Pawar  */
612*c83a76b0SSuyog Pawar typedef struct
613*c83a76b0SSuyog Pawar {
614*c83a76b0SSuyog Pawar     /** Used for checking version compatibility */
615*c83a76b0SSuyog Pawar     WORD32 i4_size;
616*c83a76b0SSuyog Pawar 
617*c83a76b0SSuyog Pawar     /* ---------- Tiles related parameters ------------ */
618*c83a76b0SSuyog Pawar 
619*c83a76b0SSuyog Pawar     /* ----------- CU related parameters -------------- */
620*c83a76b0SSuyog Pawar 
621*c83a76b0SSuyog Pawar     /** 4 - 16x16; 5 - 32x32 (default); 6 - 64x64 */
622*c83a76b0SSuyog Pawar     WORD32 i4_max_log2_cu_size;
623*c83a76b0SSuyog Pawar 
624*c83a76b0SSuyog Pawar     /** 3 - 8x8; 4 - 16x16 (default); 5 - 32x32 ; 6 - 64x64 */
625*c83a76b0SSuyog Pawar     WORD32 i4_min_log2_cu_size;
626*c83a76b0SSuyog Pawar 
627*c83a76b0SSuyog Pawar     /** 2 - 4x4 (default) ; 3 - 8x8; 4 - 16x16; 5 - 32x32 */
628*c83a76b0SSuyog Pawar     WORD32 i4_min_log2_tu_size;
629*c83a76b0SSuyog Pawar 
630*c83a76b0SSuyog Pawar     /** 2 - 4x4; 3 - 8x8 (default); 4 - 16x16; 5 - 32x32 */
631*c83a76b0SSuyog Pawar     WORD32 i4_max_log2_tu_size;
632*c83a76b0SSuyog Pawar 
633*c83a76b0SSuyog Pawar     /** Max transform tree depth for intra */
634*c83a76b0SSuyog Pawar     WORD32 i4_max_tr_tree_depth_I;
635*c83a76b0SSuyog Pawar 
636*c83a76b0SSuyog Pawar     /** Max transform tree depth for inter */
637*c83a76b0SSuyog Pawar     WORD32 i4_max_tr_tree_depth_nI;
638*c83a76b0SSuyog Pawar 
639*c83a76b0SSuyog Pawar     /* ---------- Rate Control related parameters ------ */
640*c83a76b0SSuyog Pawar 
641*c83a76b0SSuyog Pawar     /** Rate control mode  0 - constant qp (default); 1- CBR  */
642*c83a76b0SSuyog Pawar     WORD32 i4_rate_control_mode;
643*c83a76b0SSuyog Pawar 
644*c83a76b0SSuyog Pawar     /** CU level Qp modulation
645*c83a76b0SSuyog Pawar         0 - No Qp modulation at CU level;
646*c83a76b0SSuyog Pawar         1 - QP modulation level 1
647*c83a76b0SSuyog Pawar         2 - QP modulation level 2
648*c83a76b0SSuyog Pawar         3 - QP modulation level 3*/
649*c83a76b0SSuyog Pawar     WORD32 i4_cu_level_rc;
650*c83a76b0SSuyog Pawar 
651*c83a76b0SSuyog Pawar     /* Unused variable retained for backward compatibility*/
652*c83a76b0SSuyog Pawar     WORD32 i4_rate_factor;
653*c83a76b0SSuyog Pawar 
654*c83a76b0SSuyog Pawar     /** Enable stuffing 0 - disabled (default); 1 -enabled */
655*c83a76b0SSuyog Pawar     WORD32 i4_stuffing_enable;
656*c83a76b0SSuyog Pawar 
657*c83a76b0SSuyog Pawar     /*The max deivaiton allowed from file size (used only in VBR, in CBR vbv buffer size dictates the deviaiton allowed)*/
658*c83a76b0SSuyog Pawar     WORD32 i4_vbr_max_peak_rate_dur;
659*c83a76b0SSuyog Pawar 
660*c83a76b0SSuyog Pawar     /*Number of frames to encode. required to control allowed bit deviation at any point of time*/
661*c83a76b0SSuyog Pawar     WORD32 i4_num_frms_to_encode;
662*c83a76b0SSuyog Pawar 
663*c83a76b0SSuyog Pawar     /** Initial buffer fullness when decoding starts */
664*c83a76b0SSuyog Pawar     WORD32 i4_init_vbv_fullness;
665*c83a76b0SSuyog Pawar 
666*c83a76b0SSuyog Pawar     /** Frame level I frame max qp in rate control mode */
667*c83a76b0SSuyog Pawar     WORD32 i4_max_frame_qp;
668*c83a76b0SSuyog Pawar 
669*c83a76b0SSuyog Pawar     /** Frame level I frame min qp in rate control mode */
670*c83a76b0SSuyog Pawar     WORD32 i4_min_frame_qp;
671*c83a76b0SSuyog Pawar     /* --------- ME related parameters ---------------- */
672*c83a76b0SSuyog Pawar 
673*c83a76b0SSuyog Pawar     /** Maximum search range in full pel units. horizontal direction */
674*c83a76b0SSuyog Pawar     WORD32 i4_max_search_range_horz;
675*c83a76b0SSuyog Pawar 
676*c83a76b0SSuyog Pawar     /** Maximum search range in full pel units.  vertical direction */
677*c83a76b0SSuyog Pawar     WORD32 i4_max_search_range_vert;
678*c83a76b0SSuyog Pawar } ihevce_config_prms_t;
679*c83a76b0SSuyog Pawar 
680*c83a76b0SSuyog Pawar /**
681*c83a76b0SSuyog Pawar  *  @brief    Structure to describe Dynamic configuralbe
682*c83a76b0SSuyog Pawar  *            parameters of encoder
683*c83a76b0SSuyog Pawar  *
684*c83a76b0SSuyog Pawar  *            these new params can be passed as async commands
685*c83a76b0SSuyog Pawar  *            to the encoder by sending a IHEVCE_CMD_CTL_SETPARAMS command
686*c83a76b0SSuyog Pawar  */
687*c83a76b0SSuyog Pawar typedef struct
688*c83a76b0SSuyog Pawar {
689*c83a76b0SSuyog Pawar     /** Used for checking version compatibility */
690*c83a76b0SSuyog Pawar     WORD32 i4_size;
691*c83a76b0SSuyog Pawar 
692*c83a76b0SSuyog Pawar     /** Resolution ID  of the stream for which bitrate change needs to be applied */
693*c83a76b0SSuyog Pawar     WORD32 i4_tgt_res_id;
694*c83a76b0SSuyog Pawar 
695*c83a76b0SSuyog Pawar     /** Bitrate ID in the Resolution ID  of the stream for which bitrate change needs to be applied */
696*c83a76b0SSuyog Pawar     WORD32 i4_tgt_br_id;
697*c83a76b0SSuyog Pawar 
698*c83a76b0SSuyog Pawar     /** New Target Bit-rate for on the fly change */
699*c83a76b0SSuyog Pawar     WORD32 i4_new_tgt_bitrate;
700*c83a76b0SSuyog Pawar 
701*c83a76b0SSuyog Pawar     /** New Peak Bit-rate for on the fly change */
702*c83a76b0SSuyog Pawar     WORD32 i4_new_peak_bitrate;
703*c83a76b0SSuyog Pawar } ihevce_dyn_config_prms_t;
704*c83a76b0SSuyog Pawar 
705*c83a76b0SSuyog Pawar /**
706*c83a76b0SSuyog Pawar  *  @brief    Structure to describe Dynamic configuralbe
707*c83a76b0SSuyog Pawar  *            parameters of encoder for dynamic resolution change
708*c83a76b0SSuyog Pawar  *
709*c83a76b0SSuyog Pawar  *            these new params can be passed as synchromous commands
710*c83a76b0SSuyog Pawar  *            to the encoder by sending a IHEVCE_SYNCH_API_SET_RES_TAG command
711*c83a76b0SSuyog Pawar  */
712*c83a76b0SSuyog Pawar typedef struct
713*c83a76b0SSuyog Pawar {
714*c83a76b0SSuyog Pawar     /** Resolution ID  of the stream for which bitrate change needs to be applied */
715*c83a76b0SSuyog Pawar     WORD32 i4_new_res_id;
716*c83a76b0SSuyog Pawar 
717*c83a76b0SSuyog Pawar     /** New Target Bit-rate for on the fly change */
718*c83a76b0SSuyog Pawar     WORD32 i4_new_tgt_bitrate;
719*c83a76b0SSuyog Pawar 
720*c83a76b0SSuyog Pawar } ihevce_dyn_res_prms_t;
721*c83a76b0SSuyog Pawar 
722*c83a76b0SSuyog Pawar /**
723*c83a76b0SSuyog Pawar  *  @brief    Structure to describe the Look Ahead
724*c83a76b0SSuyog Pawar  *            Processing Parameters of Encoder
725*c83a76b0SSuyog Pawar  */
726*c83a76b0SSuyog Pawar typedef struct
727*c83a76b0SSuyog Pawar {
728*c83a76b0SSuyog Pawar     /** Used for checking version compatibility */
729*c83a76b0SSuyog Pawar     WORD32 i4_size;
730*c83a76b0SSuyog Pawar 
731*c83a76b0SSuyog Pawar     /** Number of frames to look-ahead for RC and adaptive quant -
732*c83a76b0SSuyog Pawar      * counts each fields as one frame for interlaced
733*c83a76b0SSuyog Pawar      */
734*c83a76b0SSuyog Pawar     WORD32 i4_rc_look_ahead_pics;
735*c83a76b0SSuyog Pawar 
736*c83a76b0SSuyog Pawar     /** Enable computation of weights & offsets for weighted prediction */
737*c83a76b0SSuyog Pawar     WORD32 i4_enable_wts_ofsts;
738*c83a76b0SSuyog Pawar 
739*c83a76b0SSuyog Pawar     /* Enables denoiser as a part of video preprocessing. */
740*c83a76b0SSuyog Pawar     WORD32 i4_denoise_enable;
741*c83a76b0SSuyog Pawar 
742*c83a76b0SSuyog Pawar     /* Enable this flag if input is interlaced and output is progressive */
743*c83a76b0SSuyog Pawar     WORD32 i4_deinterlacer_enable;
744*c83a76b0SSuyog Pawar 
745*c83a76b0SSuyog Pawar } ihevce_lap_params_t;
746*c83a76b0SSuyog Pawar 
747*c83a76b0SSuyog Pawar /**
748*c83a76b0SSuyog Pawar  *  @brief    Structure to describe the parameters
749*c83a76b0SSuyog Pawar  *            related to multi-bitrate encoding
750*c83a76b0SSuyog Pawar  */
751*c83a76b0SSuyog Pawar typedef struct
752*c83a76b0SSuyog Pawar {
753*c83a76b0SSuyog Pawar     /** Number of bit-rate instances */
754*c83a76b0SSuyog Pawar     WORD32 i4_num_bitrate_instances;
755*c83a76b0SSuyog Pawar 
756*c83a76b0SSuyog Pawar     /* Number of intra modes to be evaluated for derived instance */
757*c83a76b0SSuyog Pawar     WORD32 i4_num_modes_intra;
758*c83a76b0SSuyog Pawar 
759*c83a76b0SSuyog Pawar     /* Number of inter modes to be evaluated for derived instance */
760*c83a76b0SSuyog Pawar     WORD32 i4_num_modes_inter;
761*c83a76b0SSuyog Pawar 
762*c83a76b0SSuyog Pawar } ihevce_mbr_params_t;
763*c83a76b0SSuyog Pawar 
764*c83a76b0SSuyog Pawar /**
765*c83a76b0SSuyog Pawar  *  @brief  Vui/Sei parameters of Encoder
766*c83a76b0SSuyog Pawar  */
767*c83a76b0SSuyog Pawar typedef struct
768*c83a76b0SSuyog Pawar {
769*c83a76b0SSuyog Pawar     /**
770*c83a76b0SSuyog Pawar     *  indicates the presence of aspect_ratio
771*c83a76b0SSuyog Pawar     */
772*c83a76b0SSuyog Pawar     UWORD8 u1_aspect_ratio_info_present_flag;
773*c83a76b0SSuyog Pawar 
774*c83a76b0SSuyog Pawar     /**
775*c83a76b0SSuyog Pawar     *  specifies the aspect ratio of the luma samples
776*c83a76b0SSuyog Pawar     */
777*c83a76b0SSuyog Pawar     UWORD8 au1_aspect_ratio_idc[IHEVCE_MAX_NUM_RESOLUTIONS];
778*c83a76b0SSuyog Pawar 
779*c83a76b0SSuyog Pawar     /**
780*c83a76b0SSuyog Pawar     *  width of the luma samples. user dependent
781*c83a76b0SSuyog Pawar     */
782*c83a76b0SSuyog Pawar     UWORD16 au2_sar_width[IHEVCE_MAX_NUM_RESOLUTIONS];
783*c83a76b0SSuyog Pawar 
784*c83a76b0SSuyog Pawar     /**
785*c83a76b0SSuyog Pawar     *  height of the luma samples. user dependent
786*c83a76b0SSuyog Pawar     */
787*c83a76b0SSuyog Pawar     UWORD16 au2_sar_height[IHEVCE_MAX_NUM_RESOLUTIONS];
788*c83a76b0SSuyog Pawar 
789*c83a76b0SSuyog Pawar     /**
790*c83a76b0SSuyog Pawar     * if 1, specifies that the overscan_appropriate_flag is present
791*c83a76b0SSuyog Pawar     * if 0, the preferred display method for the video signal is unspecified
792*c83a76b0SSuyog Pawar     */
793*c83a76b0SSuyog Pawar     UWORD8 u1_overscan_info_present_flag;
794*c83a76b0SSuyog Pawar 
795*c83a76b0SSuyog Pawar     /**
796*c83a76b0SSuyog Pawar     * if 1,indicates that the cropped decoded pictures output
797*c83a76b0SSuyog Pawar     * are suitable for display using overscan
798*c83a76b0SSuyog Pawar     */
799*c83a76b0SSuyog Pawar     UWORD8 u1_overscan_appropriate_flag;
800*c83a76b0SSuyog Pawar 
801*c83a76b0SSuyog Pawar     /**
802*c83a76b0SSuyog Pawar     * if 1 specifies that video_format, video_full_range_flag and
803*c83a76b0SSuyog Pawar     * colour_description_present_flag are present
804*c83a76b0SSuyog Pawar     */
805*c83a76b0SSuyog Pawar     UWORD8 u1_video_signal_type_present_flag;
806*c83a76b0SSuyog Pawar 
807*c83a76b0SSuyog Pawar     /**
808*c83a76b0SSuyog Pawar     *
809*c83a76b0SSuyog Pawar     */
810*c83a76b0SSuyog Pawar     UWORD8 u1_video_format;
811*c83a76b0SSuyog Pawar 
812*c83a76b0SSuyog Pawar     /**
813*c83a76b0SSuyog Pawar     * indicates the black level and range of the luma and chroma signals
814*c83a76b0SSuyog Pawar     */
815*c83a76b0SSuyog Pawar     UWORD8 u1_video_full_range_flag;
816*c83a76b0SSuyog Pawar 
817*c83a76b0SSuyog Pawar     /**
818*c83a76b0SSuyog Pawar     * if 1,to 1 specifies that colour_primaries, transfer_characteristics
819*c83a76b0SSuyog Pawar     * and matrix_coefficients are present
820*c83a76b0SSuyog Pawar     */
821*c83a76b0SSuyog Pawar     UWORD8 u1_colour_description_present_flag;
822*c83a76b0SSuyog Pawar 
823*c83a76b0SSuyog Pawar     /**
824*c83a76b0SSuyog Pawar     * indicates the chromaticity coordinates of the source primaries
825*c83a76b0SSuyog Pawar     */
826*c83a76b0SSuyog Pawar     UWORD8 u1_colour_primaries;
827*c83a76b0SSuyog Pawar 
828*c83a76b0SSuyog Pawar     /**
829*c83a76b0SSuyog Pawar     * indicates the opto-electronic transfer characteristic of the source picture
830*c83a76b0SSuyog Pawar     */
831*c83a76b0SSuyog Pawar     UWORD8 u1_transfer_characteristics;
832*c83a76b0SSuyog Pawar 
833*c83a76b0SSuyog Pawar     /**
834*c83a76b0SSuyog Pawar     * the matrix coefficients used in deriving luma and chroma signals
835*c83a76b0SSuyog Pawar     * from the green, blue, and red primaries
836*c83a76b0SSuyog Pawar     */
837*c83a76b0SSuyog Pawar     UWORD8 u1_matrix_coefficients;
838*c83a76b0SSuyog Pawar 
839*c83a76b0SSuyog Pawar     /**
840*c83a76b0SSuyog Pawar     * if 1, specifies that chroma_sample_loc_type_top_field and
841*c83a76b0SSuyog Pawar     * chroma_sample_loc_type_bottom_field are present
842*c83a76b0SSuyog Pawar     */
843*c83a76b0SSuyog Pawar     UWORD8 u1_chroma_loc_info_present_flag;
844*c83a76b0SSuyog Pawar 
845*c83a76b0SSuyog Pawar     /**
846*c83a76b0SSuyog Pawar     * location of chroma samples
847*c83a76b0SSuyog Pawar     */
848*c83a76b0SSuyog Pawar     UWORD8 u1_chroma_sample_loc_type_top_field;
849*c83a76b0SSuyog Pawar 
850*c83a76b0SSuyog Pawar     UWORD8 u1_chroma_sample_loc_type_bottom_field;
851*c83a76b0SSuyog Pawar 
852*c83a76b0SSuyog Pawar     /**
853*c83a76b0SSuyog Pawar     *  to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue
854*c83a76b0SSuyog Pawar     */
855*c83a76b0SSuyog Pawar     UWORD8 u1_vui_hrd_parameters_present_flag;
856*c83a76b0SSuyog Pawar 
857*c83a76b0SSuyog Pawar     /**
858*c83a76b0SSuyog Pawar     *  VUI level HRD parameters
859*c83a76b0SSuyog Pawar     */
860*c83a76b0SSuyog Pawar     //hrd_params_t s_vui_hrd_parameters;
861*c83a76b0SSuyog Pawar 
862*c83a76b0SSuyog Pawar     /**
863*c83a76b0SSuyog Pawar     *   HRD parameter Indicates the presence of the
864*c83a76b0SSuyog Pawar     *   num_units_in_ticks, time_scale flag
865*c83a76b0SSuyog Pawar     */
866*c83a76b0SSuyog Pawar     UWORD8 u1_timing_info_present_flag;
867*c83a76b0SSuyog Pawar 
868*c83a76b0SSuyog Pawar     /**
869*c83a76b0SSuyog Pawar     * Nal- hrd parameters flag
870*c83a76b0SSuyog Pawar     */
871*c83a76b0SSuyog Pawar     UWORD8 u1_nal_hrd_parameters_present_flag;
872*c83a76b0SSuyog Pawar 
873*c83a76b0SSuyog Pawar } ihevce_vui_sei_params_t;
874*c83a76b0SSuyog Pawar 
875*c83a76b0SSuyog Pawar /**
876*c83a76b0SSuyog Pawar  *  @brief  Multi thread related parameters passed to the encoder during create
877*c83a76b0SSuyog Pawar  */
878*c83a76b0SSuyog Pawar 
879*c83a76b0SSuyog Pawar typedef struct
880*c83a76b0SSuyog Pawar {
881*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
882*c83a76b0SSuyog Pawar     WORD32 i4_size;
883*c83a76b0SSuyog Pawar 
884*c83a76b0SSuyog Pawar     /** Total number of logical cores, which are assigned to be used by the encoder
885*c83a76b0SSuyog Pawar      */
886*c83a76b0SSuyog Pawar     WORD32 i4_max_num_cores;
887*c83a76b0SSuyog Pawar 
888*c83a76b0SSuyog Pawar     /** Total number of groups in the machine on which encoder is run.
889*c83a76b0SSuyog Pawar      */
890*c83a76b0SSuyog Pawar     WORD32 i4_num_proc_groups;
891*c83a76b0SSuyog Pawar 
892*c83a76b0SSuyog Pawar     /** Total number of logical cores present per processor group of the machine.
893*c83a76b0SSuyog Pawar      */
894*c83a76b0SSuyog Pawar     WORD32 ai4_num_cores_per_grp[MAX_NUMBER_PROC_GRPS];
895*c83a76b0SSuyog Pawar 
896*c83a76b0SSuyog Pawar     /** Flag to enableUse thread affintiy feature
897*c83a76b0SSuyog Pawar      * 0: Thread affinity disabled
898*c83a76b0SSuyog Pawar      * 1: Thread affinity enabled
899*c83a76b0SSuyog Pawar      */
900*c83a76b0SSuyog Pawar     WORD32 i4_use_thrd_affinity;
901*c83a76b0SSuyog Pawar 
902*c83a76b0SSuyog Pawar     /**
903*c83a76b0SSuyog Pawar      * Memory allocation control flag: Reserved (to be used later)
904*c83a76b0SSuyog Pawar      */
905*c83a76b0SSuyog Pawar     WORD32 i4_memory_alloc_ctrl_flag;
906*c83a76b0SSuyog Pawar 
907*c83a76b0SSuyog Pawar     /**
908*c83a76b0SSuyog Pawar      * Array of thread affinity masks for frame processing threads
909*c83a76b0SSuyog Pawar      * PRE Enc Group
910*c83a76b0SSuyog Pawar      */
911*c83a76b0SSuyog Pawar     ULWORD64 au8_core_aff_mask[MAX_NUM_CORES];
912*c83a76b0SSuyog Pawar 
913*c83a76b0SSuyog Pawar } ihevce_static_multi_thread_params_t;
914*c83a76b0SSuyog Pawar 
915*c83a76b0SSuyog Pawar /**
916*c83a76b0SSuyog Pawar  *  @brief  File IO APIs
917*c83a76b0SSuyog Pawar  */
918*c83a76b0SSuyog Pawar typedef struct
919*c83a76b0SSuyog Pawar {
920*c83a76b0SSuyog Pawar     FILE *(*ihevce_fopen)(void *pv_cb_handle, const char *pi1_filename, const char *pi1_mode);
921*c83a76b0SSuyog Pawar 
922*c83a76b0SSuyog Pawar     int (*ihevce_fclose)(void *pv_cb_handle, FILE *pf_stream);
923*c83a76b0SSuyog Pawar 
924*c83a76b0SSuyog Pawar     int (*ihevce_fflush)(void *pv_cb_handle, FILE *pf_stream);
925*c83a76b0SSuyog Pawar 
926*c83a76b0SSuyog Pawar     int (*ihevce_fseek)(void *pv_cb_handle, FILE *pf_stream, long i4_offset, int i4_origin);
927*c83a76b0SSuyog Pawar 
928*c83a76b0SSuyog Pawar     size_t (*ihevce_fread)(
929*c83a76b0SSuyog Pawar         void *pv_cb_handle, void *pv_ptr, size_t u4_size, size_t u4_count, FILE *pf_stream);
930*c83a76b0SSuyog Pawar 
931*c83a76b0SSuyog Pawar     int (*ihevce_fscanf)(
932*c83a76b0SSuyog Pawar         void *pv_cb_handle,
933*c83a76b0SSuyog Pawar         IHEVCE_DATA_TYPE e_data_type,
934*c83a76b0SSuyog Pawar         FILE *file_ptr,
935*c83a76b0SSuyog Pawar         const char *format,
936*c83a76b0SSuyog Pawar         void *pv_dst);
937*c83a76b0SSuyog Pawar 
938*c83a76b0SSuyog Pawar     int (*ihevce_fprintf)(void *pv_cb_handle, FILE *pf_stream, const char *pi1_format, ...);
939*c83a76b0SSuyog Pawar 
940*c83a76b0SSuyog Pawar     size_t (*ihevce_fwrite)(
941*c83a76b0SSuyog Pawar         void *pv_cb_handle, const void *pv_ptr, size_t i4_size, size_t i4_count, FILE *pf_stream);
942*c83a76b0SSuyog Pawar 
943*c83a76b0SSuyog Pawar     char *(*ihevce_fgets)(void *pv_cb_handle, char *pi1_str, int i4_size, FILE *pf_stream);
944*c83a76b0SSuyog Pawar 
945*c83a76b0SSuyog Pawar } ihevce_file_io_api_t;
946*c83a76b0SSuyog Pawar 
947*c83a76b0SSuyog Pawar /**
948*c83a76b0SSuyog Pawar  *  @brief  System APIs to implement call back functions in encoder
949*c83a76b0SSuyog Pawar  */
950*c83a76b0SSuyog Pawar typedef struct
951*c83a76b0SSuyog Pawar {
952*c83a76b0SSuyog Pawar     /*Call back handle for all system api*/
953*c83a76b0SSuyog Pawar     void *pv_cb_handle;
954*c83a76b0SSuyog Pawar 
955*c83a76b0SSuyog Pawar     /* Console APIs */
956*c83a76b0SSuyog Pawar     int (*ihevce_printf)(void *pv_cb_handle, const char *i1_str, ...);
957*c83a76b0SSuyog Pawar 
958*c83a76b0SSuyog Pawar     //int   (*ihevce_scanf)    (void *pv_handle, const char *i1_str, ...);
959*c83a76b0SSuyog Pawar 
960*c83a76b0SSuyog Pawar     int (*ihevce_sscanf)(void *pv_cb_handle, const char *pv_src, const char *format, int *p_dst_int);
961*c83a76b0SSuyog Pawar 
962*c83a76b0SSuyog Pawar     int (*ihevce_sprintf)(void *pv_cb_handle, char *pi1_str, const char *format, ...);
963*c83a76b0SSuyog Pawar 
964*c83a76b0SSuyog Pawar     int (*ihevce_sprintf_s)(
965*c83a76b0SSuyog Pawar         void *pv_cb_handle, char *pi1_str, size_t i4_size, const char *format, ...);
966*c83a76b0SSuyog Pawar 
967*c83a76b0SSuyog Pawar     /* File I/O APIs */
968*c83a76b0SSuyog Pawar     ihevce_file_io_api_t s_file_io_api;
969*c83a76b0SSuyog Pawar 
970*c83a76b0SSuyog Pawar } ihevce_sys_api_t;
971*c83a76b0SSuyog Pawar 
972*c83a76b0SSuyog Pawar /**
973*c83a76b0SSuyog Pawar  *  @brief    Structure to describe multipass related params
974*c83a76b0SSuyog Pawar  */
975*c83a76b0SSuyog Pawar typedef struct
976*c83a76b0SSuyog Pawar {
977*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
978*c83a76b0SSuyog Pawar     WORD32 i4_size;
979*c83a76b0SSuyog Pawar 
980*c83a76b0SSuyog Pawar     /* 0:Normal mode 1: only dumps stat 2: 2nd pass reads from stat file and rewrites the same file*/
981*c83a76b0SSuyog Pawar     WORD32 i4_pass;
982*c83a76b0SSuyog Pawar 
983*c83a76b0SSuyog Pawar     /* Flag to specify the algorithm used for bit-distribution
984*c83a76b0SSuyog Pawar     in second pass */
985*c83a76b0SSuyog Pawar     WORD32 i4_multi_pass_algo_mode;
986*c83a76b0SSuyog Pawar 
987*c83a76b0SSuyog Pawar     /* Stat file to read or write data of frame statistics */
988*c83a76b0SSuyog Pawar     WORD8 *pi1_frame_stats_filename;
989*c83a76b0SSuyog Pawar 
990*c83a76b0SSuyog Pawar     /* stat file to read or write data of gop level statstics*/
991*c83a76b0SSuyog Pawar     WORD8 *pi1_gop_stats_filename;
992*c83a76b0SSuyog Pawar 
993*c83a76b0SSuyog Pawar     /* Stat file to read or write CTB level data*/
994*c83a76b0SSuyog Pawar     WORD8 *pi1_sub_frames_stats_filename;
995*c83a76b0SSuyog Pawar 
996*c83a76b0SSuyog Pawar } ihevce_pass_prms_t;
997*c83a76b0SSuyog Pawar 
998*c83a76b0SSuyog Pawar /**
999*c83a76b0SSuyog Pawar  *  @brief    Structure to describe tile params
1000*c83a76b0SSuyog Pawar  */
1001*c83a76b0SSuyog Pawar typedef struct
1002*c83a76b0SSuyog Pawar {
1003*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1004*c83a76b0SSuyog Pawar     WORD32 i4_size;
1005*c83a76b0SSuyog Pawar 
1006*c83a76b0SSuyog Pawar     /* flag to indicate tile encoding enabled/disabled */
1007*c83a76b0SSuyog Pawar     WORD32 i4_tiles_enabled_flag;
1008*c83a76b0SSuyog Pawar 
1009*c83a76b0SSuyog Pawar     /* flag to indicate unifrom spacing of tiles */
1010*c83a76b0SSuyog Pawar     WORD32 i4_uniform_spacing_flag;
1011*c83a76b0SSuyog Pawar 
1012*c83a76b0SSuyog Pawar     /* num syntactical tiles in a frame */
1013*c83a76b0SSuyog Pawar     WORD32 i4_num_tile_cols;
1014*c83a76b0SSuyog Pawar     WORD32 i4_num_tile_rows;
1015*c83a76b0SSuyog Pawar 
1016*c83a76b0SSuyog Pawar     /* Column width array to store width of each tile column */
1017*c83a76b0SSuyog Pawar     WORD32 ai4_column_width[MAX_TILE_COLUMNS];
1018*c83a76b0SSuyog Pawar 
1019*c83a76b0SSuyog Pawar     /* Row height array to store height of each tile row */
1020*c83a76b0SSuyog Pawar     WORD32 ai4_row_height[MAX_TILE_ROWS];
1021*c83a76b0SSuyog Pawar 
1022*c83a76b0SSuyog Pawar } ihevce_app_tile_params_t;
1023*c83a76b0SSuyog Pawar 
1024*c83a76b0SSuyog Pawar /**
1025*c83a76b0SSuyog Pawar  *  @brief    Structure to describe slice params
1026*c83a76b0SSuyog Pawar  */
1027*c83a76b0SSuyog Pawar typedef struct
1028*c83a76b0SSuyog Pawar {
1029*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1030*c83a76b0SSuyog Pawar     WORD32 i4_size;
1031*c83a76b0SSuyog Pawar 
1032*c83a76b0SSuyog Pawar     /** Flag to control dependent slices.
1033*c83a76b0SSuyog Pawar     0: Disable all slice segment limits
1034*c83a76b0SSuyog Pawar     1: Enforce max number of CTBs
1035*c83a76b0SSuyog Pawar     2: Enforce max number of bytes **/
1036*c83a76b0SSuyog Pawar     WORD32 i4_slice_segment_mode;
1037*c83a76b0SSuyog Pawar 
1038*c83a76b0SSuyog Pawar     /** Depending on i4_slice_segment_mode being:
1039*c83a76b0SSuyog Pawar     1: max number of CTBs per slice segment
1040*c83a76b0SSuyog Pawar     2: max number of bytes per slice segment **/
1041*c83a76b0SSuyog Pawar     WORD32 i4_slice_segment_argument;
1042*c83a76b0SSuyog Pawar 
1043*c83a76b0SSuyog Pawar } ihevce_slice_params_t;
1044*c83a76b0SSuyog Pawar 
1045*c83a76b0SSuyog Pawar /**
1046*c83a76b0SSuyog Pawar  *  @brief  Static configuration parameters of Encoder
1047*c83a76b0SSuyog Pawar  */
1048*c83a76b0SSuyog Pawar typedef struct
1049*c83a76b0SSuyog Pawar {
1050*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1051*c83a76b0SSuyog Pawar     WORD32 i4_size;
1052*c83a76b0SSuyog Pawar 
1053*c83a76b0SSuyog Pawar     /** Structure describing the input parameters - Applciatiopn should populate
1054*c83a76b0SSuyog Pawar      * maximum values in this structure . Run time values
1055*c83a76b0SSuyog Pawar      * should always be lessthan create time values
1056*c83a76b0SSuyog Pawar      */
1057*c83a76b0SSuyog Pawar     ihevce_src_params_t s_src_prms;
1058*c83a76b0SSuyog Pawar 
1059*c83a76b0SSuyog Pawar     /** Parmeters for target use-case */
1060*c83a76b0SSuyog Pawar     ihevce_tgt_layer_params_t s_tgt_lyr_prms;
1061*c83a76b0SSuyog Pawar 
1062*c83a76b0SSuyog Pawar     /** Output stream parameters */
1063*c83a76b0SSuyog Pawar     ihevce_out_strm_params_t s_out_strm_prms;
1064*c83a76b0SSuyog Pawar 
1065*c83a76b0SSuyog Pawar     /** Coding parameters for the encoder */
1066*c83a76b0SSuyog Pawar     ihevce_coding_params_t s_coding_tools_prms;
1067*c83a76b0SSuyog Pawar 
1068*c83a76b0SSuyog Pawar     /** Configurable parameters for Encoder */
1069*c83a76b0SSuyog Pawar     ihevce_config_prms_t s_config_prms;
1070*c83a76b0SSuyog Pawar 
1071*c83a76b0SSuyog Pawar     /** VUI SEI app parameters*/
1072*c83a76b0SSuyog Pawar     ihevce_vui_sei_params_t s_vui_sei_prms;
1073*c83a76b0SSuyog Pawar 
1074*c83a76b0SSuyog Pawar     /** Multi threads specific pamrameters */
1075*c83a76b0SSuyog Pawar     ihevce_static_multi_thread_params_t s_multi_thrd_prms;
1076*c83a76b0SSuyog Pawar 
1077*c83a76b0SSuyog Pawar     /** Look-ahead processor related parameters */
1078*c83a76b0SSuyog Pawar     ihevce_lap_params_t s_lap_prms;
1079*c83a76b0SSuyog Pawar 
1080*c83a76b0SSuyog Pawar     /** Save Recon flag */
1081*c83a76b0SSuyog Pawar     WORD32 i4_save_recon;
1082*c83a76b0SSuyog Pawar 
1083*c83a76b0SSuyog Pawar     /** Compute PSNR Flag */
1084*c83a76b0SSuyog Pawar     /*  0: No logs
1085*c83a76b0SSuyog Pawar         1: (Frame level:Bits generation + POC) + (summary level: BitRate)
1086*c83a76b0SSuyog Pawar         2: (Frame level:Bits generation + POC + Qp + Pic-type) + (summary level: BitRate + PSNR)
1087*c83a76b0SSuyog Pawar     */
1088*c83a76b0SSuyog Pawar     WORD32 i4_log_dump_level;
1089*c83a76b0SSuyog Pawar 
1090*c83a76b0SSuyog Pawar     WORD32 i4_enable_csv_dump;
1091*c83a76b0SSuyog Pawar 
1092*c83a76b0SSuyog Pawar     FILE *apF_csv_file[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
1093*c83a76b0SSuyog Pawar 
1094*c83a76b0SSuyog Pawar     /** Enable Logo for Eval versions */
1095*c83a76b0SSuyog Pawar     WORD32 i4_enable_logo;
1096*c83a76b0SSuyog Pawar 
1097*c83a76b0SSuyog Pawar     /* API structure for exporting console and file I/O operation */
1098*c83a76b0SSuyog Pawar     ihevce_sys_api_t s_sys_api;
1099*c83a76b0SSuyog Pawar 
1100*c83a76b0SSuyog Pawar     /* Structure to describe multipass related params */
1101*c83a76b0SSuyog Pawar     ihevce_pass_prms_t s_pass_prms;
1102*c83a76b0SSuyog Pawar 
1103*c83a76b0SSuyog Pawar     /* Structure to describe tile params */
1104*c83a76b0SSuyog Pawar     ihevce_app_tile_params_t s_app_tile_params;
1105*c83a76b0SSuyog Pawar 
1106*c83a76b0SSuyog Pawar     /** Structure to describe slice segment params */
1107*c83a76b0SSuyog Pawar     ihevce_slice_params_t s_slice_params;
1108*c83a76b0SSuyog Pawar 
1109*c83a76b0SSuyog Pawar     /** Resolution ID of the current encoder context **/
1110*c83a76b0SSuyog Pawar     WORD32 i4_res_id;
1111*c83a76b0SSuyog Pawar 
1112*c83a76b0SSuyog Pawar     /** Bitrate ID of the current encoder context **/
1113*c83a76b0SSuyog Pawar     WORD32 i4_br_id;
1114*c83a76b0SSuyog Pawar 
1115*c83a76b0SSuyog Pawar     /* Architecture type */
1116*c83a76b0SSuyog Pawar     IV_ARCH_T e_arch_type;
1117*c83a76b0SSuyog Pawar 
1118*c83a76b0SSuyog Pawar     /* Control to free the entropy output buffers   */
1119*c83a76b0SSuyog Pawar     /* 1  for non_blocking mode */
1120*c83a76b0SSuyog Pawar     /* and 0 for blocking mode */
1121*c83a76b0SSuyog Pawar     WORD32 i4_outbuf_buf_free_control;
1122*c83a76b0SSuyog Pawar 
1123*c83a76b0SSuyog Pawar } ihevce_static_cfg_params_t;
1124*c83a76b0SSuyog Pawar 
1125*c83a76b0SSuyog Pawar /**
1126*c83a76b0SSuyog Pawar  *  @brief  Input structure in which input data and
1127*c83a76b0SSuyog Pawar  *          other parameters are sent to Encoder
1128*c83a76b0SSuyog Pawar  */
1129*c83a76b0SSuyog Pawar typedef struct
1130*c83a76b0SSuyog Pawar {
1131*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1132*c83a76b0SSuyog Pawar     WORD32 i4_size;
1133*c83a76b0SSuyog Pawar 
1134*c83a76b0SSuyog Pawar     /** Buffer id for the current buffer */
1135*c83a76b0SSuyog Pawar     WORD32 i4_buf_id;
1136*c83a76b0SSuyog Pawar 
1137*c83a76b0SSuyog Pawar     /** is bottom field  0 = top field,  1 = bottom field  */
1138*c83a76b0SSuyog Pawar     WORD32 i4_bottom_field;
1139*c83a76b0SSuyog Pawar 
1140*c83a76b0SSuyog Pawar     /** top field first input in case of interlaced case */
1141*c83a76b0SSuyog Pawar     WORD32 i4_topfield_first;
1142*c83a76b0SSuyog Pawar 
1143*c83a76b0SSuyog Pawar     /** input time stamp in terms of ticks: lower 32  */
1144*c83a76b0SSuyog Pawar     WORD32 i4_inp_timestamp_low;
1145*c83a76b0SSuyog Pawar 
1146*c83a76b0SSuyog Pawar     /** input time stamp in terms of ticks: higher 32 */
1147*c83a76b0SSuyog Pawar     WORD32 i4_inp_timestamp_high;
1148*c83a76b0SSuyog Pawar 
1149*c83a76b0SSuyog Pawar     /**  colour format of input,
1150*c83a76b0SSuyog Pawar      * should be same as create time value
1151*c83a76b0SSuyog Pawar      */
1152*c83a76b0SSuyog Pawar     WORD32 u1_colour_format;
1153*c83a76b0SSuyog Pawar 
1154*c83a76b0SSuyog Pawar     /**
1155*c83a76b0SSuyog Pawar      * Input frame buffer valid flag
1156*c83a76b0SSuyog Pawar      * 1 : valid data is present in the s_input_buf
1157*c83a76b0SSuyog Pawar      * 0 : Only command buffer is valid input buffer is a non valid input (dumy input)
1158*c83a76b0SSuyog Pawar      */
1159*c83a76b0SSuyog Pawar     WORD32 i4_inp_frm_data_valid_flag;
1160*c83a76b0SSuyog Pawar 
1161*c83a76b0SSuyog Pawar     /** Synchronous control commands buffer
1162*c83a76b0SSuyog Pawar      * this will an Tag Length Value (TLV) buffer.
1163*c83a76b0SSuyog Pawar      * All commands must be terminated with a tag
1164*c83a76b0SSuyog Pawar      * Tag should be set to IHEVCE_SYNCH_API_END_TAG
1165*c83a76b0SSuyog Pawar      */
1166*c83a76b0SSuyog Pawar     void *pv_synch_ctrl_bufs;
1167*c83a76b0SSuyog Pawar 
1168*c83a76b0SSuyog Pawar     /**
1169*c83a76b0SSuyog Pawar      * Synchronous control commands buffer
1170*c83a76b0SSuyog Pawar      * size in number of bytes
1171*c83a76b0SSuyog Pawar      */
1172*c83a76b0SSuyog Pawar     WORD32 i4_cmd_buf_size;
1173*c83a76b0SSuyog Pawar 
1174*c83a76b0SSuyog Pawar     /** for system use if run time buffer allocation is used*/
1175*c83a76b0SSuyog Pawar     void *pv_metadata;
1176*c83a76b0SSuyog Pawar 
1177*c83a76b0SSuyog Pawar     /** for system to pass frame context from Input to Output
1178*c83a76b0SSuyog Pawar        Same pointer will be returned on the output buffer of this frame */
1179*c83a76b0SSuyog Pawar     void *pv_app_frm_ctxt;
1180*c83a76b0SSuyog Pawar 
1181*c83a76b0SSuyog Pawar     /** Input YUV buffers pointers and related parameters
1182*c83a76b0SSuyog Pawar      *   are set in this structure
1183*c83a76b0SSuyog Pawar      */
1184*c83a76b0SSuyog Pawar     iv_yuv_buf_t s_input_buf;
1185*c83a76b0SSuyog Pawar 
1186*c83a76b0SSuyog Pawar } iv_input_data_ctrl_buffs_t;
1187*c83a76b0SSuyog Pawar 
1188*c83a76b0SSuyog Pawar /**
1189*c83a76b0SSuyog Pawar  *  @brief  Input structure in which input async control
1190*c83a76b0SSuyog Pawar  *          commands are sent to Encoder
1191*c83a76b0SSuyog Pawar  */
1192*c83a76b0SSuyog Pawar typedef struct
1193*c83a76b0SSuyog Pawar {
1194*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1195*c83a76b0SSuyog Pawar     WORD32 i4_size;
1196*c83a76b0SSuyog Pawar 
1197*c83a76b0SSuyog Pawar     /** Buffer id for the current buffer */
1198*c83a76b0SSuyog Pawar     WORD32 i4_buf_id;
1199*c83a76b0SSuyog Pawar 
1200*c83a76b0SSuyog Pawar     /** Asynchronous control commands buffer
1201*c83a76b0SSuyog Pawar      * this will an Tag Length Value (TLV) buffer.
1202*c83a76b0SSuyog Pawar      * The buffer must be ended with a IHEVCE_ASYNCH_API_END_TAG
1203*c83a76b0SSuyog Pawar      */
1204*c83a76b0SSuyog Pawar     void *pv_asynch_ctrl_bufs;
1205*c83a76b0SSuyog Pawar 
1206*c83a76b0SSuyog Pawar     /**
1207*c83a76b0SSuyog Pawar     * Asynchronous control commands buffer
1208*c83a76b0SSuyog Pawar     * size in number of bytes
1209*c83a76b0SSuyog Pawar     */
1210*c83a76b0SSuyog Pawar     WORD32 i4_cmd_buf_size;
1211*c83a76b0SSuyog Pawar 
1212*c83a76b0SSuyog Pawar } iv_input_ctrl_buffs_t;
1213*c83a76b0SSuyog Pawar 
1214*c83a76b0SSuyog Pawar /**
1215*c83a76b0SSuyog Pawar  *  @brief  Ouput structure in which ouput data
1216*c83a76b0SSuyog Pawar  *          and related parameters are sent from Encoder
1217*c83a76b0SSuyog Pawar  */
1218*c83a76b0SSuyog Pawar typedef struct
1219*c83a76b0SSuyog Pawar {
1220*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1221*c83a76b0SSuyog Pawar     WORD32 i4_size;
1222*c83a76b0SSuyog Pawar 
1223*c83a76b0SSuyog Pawar     /** Buffer id for the current buffer */
1224*c83a76b0SSuyog Pawar     WORD32 i4_buf_id;
1225*c83a76b0SSuyog Pawar 
1226*c83a76b0SSuyog Pawar     /** processing status of the current output returned */
1227*c83a76b0SSuyog Pawar     WORD32 i4_process_ret_sts;
1228*c83a76b0SSuyog Pawar 
1229*c83a76b0SSuyog Pawar     /** if error encountered the  error code */
1230*c83a76b0SSuyog Pawar     WORD32 i4_process_error_code;
1231*c83a76b0SSuyog Pawar 
1232*c83a76b0SSuyog Pawar     /** picture type of the current encoded output */
1233*c83a76b0SSuyog Pawar     IV_PICTURE_CODING_TYPE_T i4_encoded_frame_type;
1234*c83a76b0SSuyog Pawar 
1235*c83a76b0SSuyog Pawar     /** output time stamp of curr encoded buffer : lower 32  */
1236*c83a76b0SSuyog Pawar     WORD32 i4_out_timestamp_low;
1237*c83a76b0SSuyog Pawar 
1238*c83a76b0SSuyog Pawar     /** output time stamp of curr encoded buffer : higher 32  */
1239*c83a76b0SSuyog Pawar     WORD32 i4_out_timestamp_high;
1240*c83a76b0SSuyog Pawar 
1241*c83a76b0SSuyog Pawar     /** skip status of the current encoded output */
1242*c83a76b0SSuyog Pawar     WORD32 i4_frame_skipped;
1243*c83a76b0SSuyog Pawar 
1244*c83a76b0SSuyog Pawar     /** bytes generated in the output buffer */
1245*c83a76b0SSuyog Pawar     WORD32 i4_bytes_generated;
1246*c83a76b0SSuyog Pawar 
1247*c83a76b0SSuyog Pawar     /** End flag to communicate this is last frame output from encoder */
1248*c83a76b0SSuyog Pawar     WORD32 i4_end_flag;
1249*c83a76b0SSuyog Pawar 
1250*c83a76b0SSuyog Pawar     /** End flag to communicate encoder that this is the last buffer from application
1251*c83a76b0SSuyog Pawar         1 - Last buf, 0 - Not last buffer. No other values are supported.
1252*c83a76b0SSuyog Pawar         Application has to set the appropriate value before queing in encoder queue */
1253*c83a76b0SSuyog Pawar     WORD32 i4_is_last_buf;
1254*c83a76b0SSuyog Pawar 
1255*c83a76b0SSuyog Pawar     /** DBF level after the dynamic bitrate change
1256*c83a76b0SSuyog Pawar         -1 - Value not set by codec
1257*c83a76b0SSuyog Pawar         Encoder sets to positive value when bitrate change control call is done*/
1258*c83a76b0SSuyog Pawar     LWORD64 i8_cur_vbv_level;
1259*c83a76b0SSuyog Pawar 
1260*c83a76b0SSuyog Pawar     /** Output buffer pointer */
1261*c83a76b0SSuyog Pawar     void *pv_bitstream_bufs;
1262*c83a76b0SSuyog Pawar 
1263*c83a76b0SSuyog Pawar     /** Output buffer size */
1264*c83a76b0SSuyog Pawar     WORD32 i4_bitstream_buf_size;
1265*c83a76b0SSuyog Pawar 
1266*c83a76b0SSuyog Pawar     /** Can be used for tracking purpose if run time buffer allocation is used*/
1267*c83a76b0SSuyog Pawar     void *pv_metadata;
1268*c83a76b0SSuyog Pawar 
1269*c83a76b0SSuyog Pawar     /** for system to retrive frame context from Input to Output */
1270*c83a76b0SSuyog Pawar     void *pv_app_frm_ctxt;
1271*c83a76b0SSuyog Pawar 
1272*c83a76b0SSuyog Pawar     /** Can be used for tracking the buffer that is sent back during callback */
1273*c83a76b0SSuyog Pawar     WORD32 i4_cb_buf_id;
1274*c83a76b0SSuyog Pawar 
1275*c83a76b0SSuyog Pawar     /** Number of Prefix Non-VCL NAL units in the output buffer */
1276*c83a76b0SSuyog Pawar     WORD32 i4_num_non_vcl_prefix_nals;
1277*c83a76b0SSuyog Pawar 
1278*c83a76b0SSuyog Pawar     /** Number of Suffix Non-VCL NAL units in the output buffer */
1279*c83a76b0SSuyog Pawar     WORD32 i4_num_non_vcl_suffix_nals;
1280*c83a76b0SSuyog Pawar 
1281*c83a76b0SSuyog Pawar     /** Number of VCL NAL units in the output buffer */
1282*c83a76b0SSuyog Pawar     WORD32 i4_num_vcl_nals;
1283*c83a76b0SSuyog Pawar 
1284*c83a76b0SSuyog Pawar     /************************************************************************/
1285*c83a76b0SSuyog Pawar     /* Size of each NAL based on type: Non-VCL Prefix/ VCL / Non-VCL Suffix */
1286*c83a76b0SSuyog Pawar     /*                                                                      */
1287*c83a76b0SSuyog Pawar     /* Ordering of NALS in output buffer is as follows:                     */
1288*c83a76b0SSuyog Pawar     /* Non-VCL Prefix NALs ->  VCL NALs -> Non-VCL Suffix NALs              */
1289*c83a76b0SSuyog Pawar     /*                                                                      */
1290*c83a76b0SSuyog Pawar     /* As there are no holes between adjacent NALs, these sizes can be used */
1291*c83a76b0SSuyog Pawar     /* to compute the offsets w.r.t start of the output buffer              */
1292*c83a76b0SSuyog Pawar     /************************************************************************/
1293*c83a76b0SSuyog Pawar 
1294*c83a76b0SSuyog Pawar     /** Array to the store the size in bytes of Prefix Non-VCL NAL units */
1295*c83a76b0SSuyog Pawar     WORD32 ai4_size_non_vcl_prefix_nals[MAX_NUM_PREFIX_NALS_PER_AU];
1296*c83a76b0SSuyog Pawar 
1297*c83a76b0SSuyog Pawar     /* Array to the store the size in bytes of Suffix Non-VCL NAL units */
1298*c83a76b0SSuyog Pawar     WORD32 ai4_size_non_vcl_suffix_nals[MAX_NUM_SUFFIX_NALS_PER_AU];
1299*c83a76b0SSuyog Pawar 
1300*c83a76b0SSuyog Pawar     /** Array to the store the size in bytes of VCL NAL units */
1301*c83a76b0SSuyog Pawar     WORD32 ai4_size_vcl_nals[MAX_NUM_VCL_NALS_PER_AU];
1302*c83a76b0SSuyog Pawar 
1303*c83a76b0SSuyog Pawar } iv_output_data_buffs_t;
1304*c83a76b0SSuyog Pawar 
1305*c83a76b0SSuyog Pawar /**
1306*c83a76b0SSuyog Pawar  *  @brief  Output structure in which output async control
1307*c83a76b0SSuyog Pawar  *          acknowledgement are sent from Encoder
1308*c83a76b0SSuyog Pawar  */
1309*c83a76b0SSuyog Pawar typedef struct
1310*c83a76b0SSuyog Pawar {
1311*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1312*c83a76b0SSuyog Pawar     WORD32 i4_size;
1313*c83a76b0SSuyog Pawar 
1314*c83a76b0SSuyog Pawar     /** Buffer id for the current buffer */
1315*c83a76b0SSuyog Pawar     WORD32 i4_buf_id;
1316*c83a76b0SSuyog Pawar 
1317*c83a76b0SSuyog Pawar     /** Asynchronous control commands ack buffer
1318*c83a76b0SSuyog Pawar      * this will an Tag Length Value (TLV) buffer.
1319*c83a76b0SSuyog Pawar      */
1320*c83a76b0SSuyog Pawar     void *pv_status_bufs;
1321*c83a76b0SSuyog Pawar 
1322*c83a76b0SSuyog Pawar } iv_output_status_buffs_t;
1323*c83a76b0SSuyog Pawar 
1324*c83a76b0SSuyog Pawar /**
1325*c83a76b0SSuyog Pawar  *  @brief  structure in which recon data
1326*c83a76b0SSuyog Pawar  *          and related parameters are sent from Encoder
1327*c83a76b0SSuyog Pawar  */
1328*c83a76b0SSuyog Pawar typedef struct
1329*c83a76b0SSuyog Pawar {
1330*c83a76b0SSuyog Pawar     /** Kept for maintaining backwards compatibility in future */
1331*c83a76b0SSuyog Pawar     WORD32 i4_size;
1332*c83a76b0SSuyog Pawar 
1333*c83a76b0SSuyog Pawar     /** Buffer id for the current buffer */
1334*c83a76b0SSuyog Pawar     WORD32 i4_buf_id;
1335*c83a76b0SSuyog Pawar 
1336*c83a76b0SSuyog Pawar     /** POC of the current buffer */
1337*c83a76b0SSuyog Pawar     WORD32 i4_poc;
1338*c83a76b0SSuyog Pawar 
1339*c83a76b0SSuyog Pawar     /** End flag to communicate this is last frame output from encoder */
1340*c83a76b0SSuyog Pawar     WORD32 i4_end_flag;
1341*c83a76b0SSuyog Pawar 
1342*c83a76b0SSuyog Pawar     /** End flag to communicate encoder that this is the last buffer from application
1343*c83a76b0SSuyog Pawar         1 - Last buf, 0 - Not last buffer. No other values are supported.
1344*c83a76b0SSuyog Pawar         Application has to set the appropriate value before queing in encoder queue */
1345*c83a76b0SSuyog Pawar     WORD32 i4_is_last_buf;
1346*c83a76b0SSuyog Pawar 
1347*c83a76b0SSuyog Pawar     /** Recon luma buffer pointer */
1348*c83a76b0SSuyog Pawar     void *pv_y_buf;
1349*c83a76b0SSuyog Pawar 
1350*c83a76b0SSuyog Pawar     /** Recon cb buffer pointer */
1351*c83a76b0SSuyog Pawar     void *pv_cb_buf;
1352*c83a76b0SSuyog Pawar 
1353*c83a76b0SSuyog Pawar     /** Recon cr buffer pointer */
1354*c83a76b0SSuyog Pawar     void *pv_cr_buf;
1355*c83a76b0SSuyog Pawar 
1356*c83a76b0SSuyog Pawar     /** Luma size **/
1357*c83a76b0SSuyog Pawar     WORD32 i4_y_pixels;
1358*c83a76b0SSuyog Pawar 
1359*c83a76b0SSuyog Pawar     /** Chroma size **/
1360*c83a76b0SSuyog Pawar     WORD32 i4_uv_pixels;
1361*c83a76b0SSuyog Pawar 
1362*c83a76b0SSuyog Pawar } iv_recon_data_buffs_t;
1363*c83a76b0SSuyog Pawar 
1364*c83a76b0SSuyog Pawar /* @brief iv_res_layer_output_bufs_req_t: This structure contains the parameters
1365*c83a76b0SSuyog Pawar  * related to output (data and control) buffer requirements of the codec for all
1366*c83a76b0SSuyog Pawar  * target resolution layers
1367*c83a76b0SSuyog Pawar  * Application can call the memory query API to get these requirements
1368*c83a76b0SSuyog Pawar  */
1369*c83a76b0SSuyog Pawar 
1370*c83a76b0SSuyog Pawar typedef struct
1371*c83a76b0SSuyog Pawar {
1372*c83a76b0SSuyog Pawar     /** i4_size of the structure : used for verison tracking */
1373*c83a76b0SSuyog Pawar     WORD32 i4_size;
1374*c83a76b0SSuyog Pawar 
1375*c83a76b0SSuyog Pawar     /*Memory requirements for each of target resolutions*/
1376*c83a76b0SSuyog Pawar     iv_output_bufs_req_t s_output_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
1377*c83a76b0SSuyog Pawar 
1378*c83a76b0SSuyog Pawar } iv_res_layer_output_bufs_req_t;
1379*c83a76b0SSuyog Pawar 
1380*c83a76b0SSuyog Pawar /* @brief iv_res_layer_recon_bufs_req_t: This structure contains the parameters
1381*c83a76b0SSuyog Pawar  * related to recon buffer requirements of the codec for all target resolution layers
1382*c83a76b0SSuyog Pawar  * Application can call the memory query API to get these requirements
1383*c83a76b0SSuyog Pawar  */
1384*c83a76b0SSuyog Pawar 
1385*c83a76b0SSuyog Pawar typedef struct
1386*c83a76b0SSuyog Pawar {
1387*c83a76b0SSuyog Pawar     /** i4_size of the structure : used for verison tracking */
1388*c83a76b0SSuyog Pawar     WORD32 i4_size;
1389*c83a76b0SSuyog Pawar 
1390*c83a76b0SSuyog Pawar     /*Memory requirements for each of target resolutions*/
1391*c83a76b0SSuyog Pawar     iv_recon_bufs_req_t s_recon_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES];
1392*c83a76b0SSuyog Pawar } iv_res_layer_recon_bufs_req_t;
1393*c83a76b0SSuyog Pawar 
1394*c83a76b0SSuyog Pawar /* @brief iv_res_layer_output_data_buffs_desc_t: This structure contains
1395*c83a76b0SSuyog Pawar  * the parameters related to output data buffers for all target resolution layers
1396*c83a76b0SSuyog Pawar  */
1397*c83a76b0SSuyog Pawar 
1398*c83a76b0SSuyog Pawar typedef struct
1399*c83a76b0SSuyog Pawar {
1400*c83a76b0SSuyog Pawar     /** i4_size of the structure : used for verison tracking */
1401*c83a76b0SSuyog Pawar     WORD32 i4_size;
1402*c83a76b0SSuyog Pawar 
1403*c83a76b0SSuyog Pawar     /*Output buffer requirements of each taregt resolution layer*/
1404*c83a76b0SSuyog Pawar     iv_output_data_buffs_desc_t s_output_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS]
1405*c83a76b0SSuyog Pawar                                                    [IHEVCE_MAX_NUM_BITRATES];
1406*c83a76b0SSuyog Pawar 
1407*c83a76b0SSuyog Pawar } iv_res_layer_output_data_buffs_desc_t;
1408*c83a76b0SSuyog Pawar 
1409*c83a76b0SSuyog Pawar /* @brief iv_res_layer_output_status_buffs_desc_t: This structure contains
1410*c83a76b0SSuyog Pawar  * the parameters related to recon data buffers for all target resolution layers
1411*c83a76b0SSuyog Pawar  */
1412*c83a76b0SSuyog Pawar 
1413*c83a76b0SSuyog Pawar typedef struct
1414*c83a76b0SSuyog Pawar {
1415*c83a76b0SSuyog Pawar     /** i4_size of the structure : used for verison tracking */
1416*c83a76b0SSuyog Pawar     WORD32 i4_size;
1417*c83a76b0SSuyog Pawar 
1418*c83a76b0SSuyog Pawar     /*Output buffer requirements of each taregt resolution layer*/
1419*c83a76b0SSuyog Pawar     iv_recon_data_buffs_desc_t s_recon_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS]
1420*c83a76b0SSuyog Pawar                                                  [IHEVCE_MAX_NUM_BITRATES];
1421*c83a76b0SSuyog Pawar 
1422*c83a76b0SSuyog Pawar } iv_res_layer_recon_data_buffs_desc_t;
1423*c83a76b0SSuyog Pawar 
1424*c83a76b0SSuyog Pawar #endif  // _IHEVCE_API_H_
1425