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