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_lap_enc_structs.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains structure definations shared between Encoder and LAP 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 18/09/2012 29*c83a76b0SSuyog Pawar * 30*c83a76b0SSuyog Pawar * \author 31*c83a76b0SSuyog Pawar * Ittiam 32*c83a76b0SSuyog Pawar * 33*c83a76b0SSuyog Pawar ****************************************************************************** 34*c83a76b0SSuyog Pawar */ 35*c83a76b0SSuyog Pawar 36*c83a76b0SSuyog Pawar #ifndef _IHEVCE_LAP_ENC_STRUCTS_H_ 37*c83a76b0SSuyog Pawar #define _IHEVCE_LAP_ENC_STRUCTS_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* Constant Macros */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar #define MAX_NUM_BUFS_LAP_ENC 15 43*c83a76b0SSuyog Pawar #define MAX_REF_PICS 16 44*c83a76b0SSuyog Pawar #define MAX_PICS_FOR_SGI 16 /*max pics to be hold for Sub-Gop Interleave*/ 45*c83a76b0SSuyog Pawar #define MAX_DUPLICATE_ENTRIES_IN_REF_LIST 2 46*c83a76b0SSuyog Pawar #define MAX_LAP_WINDOW_SIZE 60 47*c83a76b0SSuyog Pawar #define MAX_SUB_GOP_SIZE 16 48*c83a76b0SSuyog Pawar #define MAX_SCENE_NUM 30 49*c83a76b0SSuyog Pawar #define INIT_HEVCE_QP_RC (-300) 50*c83a76b0SSuyog Pawar #define MAX_TEMPORAL_LAYERS 3 51*c83a76b0SSuyog Pawar #define NUM_LAP2_LOOK_AHEAD 25 52*c83a76b0SSuyog Pawar 53*c83a76b0SSuyog Pawar #define INFINITE_GOP_CDR_TIME_S 3 54*c83a76b0SSuyog Pawar #define FRAME_PARALLEL_LVL 0 55*c83a76b0SSuyog Pawar #define NUM_SG_INTERLEAVED (1 + FRAME_PARALLEL_LVL) 56*c83a76b0SSuyog Pawar 57*c83a76b0SSuyog Pawar #define MAX_NUM_ENC_LOOP_PARALLEL 1 58*c83a76b0SSuyog Pawar #define MAX_NUM_ME_PARALLEL 1 59*c83a76b0SSuyog Pawar #define DIST_MODE_3_NON_REF_B 0 // disabled for normal cases 60*c83a76b0SSuyog Pawar 61*c83a76b0SSuyog Pawar #define DENOM_DEFAULT 7 62*c83a76b0SSuyog Pawar #define WGHT_DEFAULT (1 << DENOM_DEFAULT) 63*c83a76b0SSuyog Pawar 64*c83a76b0SSuyog Pawar #define MAX_NON_REF_B_PICS_IN_QUEUE_SGI MAX_PICS_FOR_SGI //ELP_RC 65*c83a76b0SSuyog Pawar 66*c83a76b0SSuyog Pawar /*minimum stagger in non sequential operation*/ 67*c83a76b0SSuyog Pawar #define MIN_L1_L0_STAGGER_NON_SEQ 1 68*c83a76b0SSuyog Pawar 69*c83a76b0SSuyog Pawar /* Enable or disable Psedo presets*/ 70*c83a76b0SSuyog Pawar #undef PSEUDO_PRESETS 71*c83a76b0SSuyog Pawar 72*c83a76b0SSuyog Pawar /** 73*c83a76b0SSuyog Pawar ******************************************************************************* 74*c83a76b0SSuyog Pawar @brief Ivalid POC value since negative POCs are also valid as per syntax 75*c83a76b0SSuyog Pawar ******************************************************************************* 76*c83a76b0SSuyog Pawar */ 77*c83a76b0SSuyog Pawar #define INVALID_POC -16384 78*c83a76b0SSuyog Pawar /*****************************************************************************/ 79*c83a76b0SSuyog Pawar /* Function Macros */ 80*c83a76b0SSuyog Pawar /*****************************************************************************/ 81*c83a76b0SSuyog Pawar 82*c83a76b0SSuyog Pawar /*****************************************************************************/ 83*c83a76b0SSuyog Pawar /* Typedefs */ 84*c83a76b0SSuyog Pawar /*****************************************************************************/ 85*c83a76b0SSuyog Pawar 86*c83a76b0SSuyog Pawar /*****************************************************************************/ 87*c83a76b0SSuyog Pawar /* Enums */ 88*c83a76b0SSuyog Pawar /*****************************************************************************/ 89*c83a76b0SSuyog Pawar /* Scenetype enums */ 90*c83a76b0SSuyog Pawar typedef enum SCENE_TYPE_E 91*c83a76b0SSuyog Pawar { 92*c83a76b0SSuyog Pawar SCENE_TYPE_NORMAL = 0, 93*c83a76b0SSuyog Pawar SCENE_TYPE_SCENE_CUT, 94*c83a76b0SSuyog Pawar SCENE_TYPE_FLASH, 95*c83a76b0SSuyog Pawar SCENE_TYPE_FADE_IN, 96*c83a76b0SSuyog Pawar SCENE_TYPE_FADE_OUT, 97*c83a76b0SSuyog Pawar SCENE_TYPE_DISSOLVE, 98*c83a76b0SSuyog Pawar SCENE_TYPE_PAUSE_TO_RESUME, 99*c83a76b0SSuyog Pawar MAX_NUM_SCENE_TYPES 100*c83a76b0SSuyog Pawar } SCENE_TYPE_E; 101*c83a76b0SSuyog Pawar /*****************************************************************************/ 102*c83a76b0SSuyog Pawar /* Structure */ 103*c83a76b0SSuyog Pawar /*****************************************************************************/ 104*c83a76b0SSuyog Pawar 105*c83a76b0SSuyog Pawar /** 106*c83a76b0SSuyog Pawar ****************************************************************************** 107*c83a76b0SSuyog Pawar * @brief Logo structure 108*c83a76b0SSuyog Pawar ****************************************************************************** 109*c83a76b0SSuyog Pawar */ 110*c83a76b0SSuyog Pawar 111*c83a76b0SSuyog Pawar typedef struct 112*c83a76b0SSuyog Pawar { 113*c83a76b0SSuyog Pawar /** i4_is_logo_on : Specifies if logo is on or off */ 114*c83a76b0SSuyog Pawar WORD32 i4_is_logo_on; 115*c83a76b0SSuyog Pawar 116*c83a76b0SSuyog Pawar /** logo_width : Width of the logo in pixels */ 117*c83a76b0SSuyog Pawar WORD32 logo_width; 118*c83a76b0SSuyog Pawar 119*c83a76b0SSuyog Pawar /** logo_height : Width of the logo in pixels */ 120*c83a76b0SSuyog Pawar WORD32 logo_height; 121*c83a76b0SSuyog Pawar 122*c83a76b0SSuyog Pawar /** logo_x_offset : horizontal offset for logo from the right end of pic */ 123*c83a76b0SSuyog Pawar WORD32 logo_x_offset; 124*c83a76b0SSuyog Pawar 125*c83a76b0SSuyog Pawar /** logo_y_offset : vertical offset for logo from the bottom end of pic */ 126*c83a76b0SSuyog Pawar WORD32 logo_y_offset; 127*c83a76b0SSuyog Pawar 128*c83a76b0SSuyog Pawar } ihevce_logo_attrs_t; 129*c83a76b0SSuyog Pawar 130*c83a76b0SSuyog Pawar typedef struct 131*c83a76b0SSuyog Pawar { 132*c83a76b0SSuyog Pawar /** 133*c83a76b0SSuyog Pawar * Input YUV buffers pointers and related parameters 134*c83a76b0SSuyog Pawar */ 135*c83a76b0SSuyog Pawar ihevce_lap_params_t s_lap_params; 136*c83a76b0SSuyog Pawar 137*c83a76b0SSuyog Pawar /** Width of input luma */ 138*c83a76b0SSuyog Pawar WORD32 i4_width; 139*c83a76b0SSuyog Pawar 140*c83a76b0SSuyog Pawar /** Height of input luma */ 141*c83a76b0SSuyog Pawar WORD32 i4_height; 142*c83a76b0SSuyog Pawar 143*c83a76b0SSuyog Pawar /** Max closed gop period : Max spacing between IDR frames */ 144*c83a76b0SSuyog Pawar WORD32 i4_max_closed_gop_period; 145*c83a76b0SSuyog Pawar 146*c83a76b0SSuyog Pawar /** Min closed gop period : Min spacing between IDR frames */ 147*c83a76b0SSuyog Pawar WORD32 i4_min_closed_gop_period; 148*c83a76b0SSuyog Pawar 149*c83a76b0SSuyog Pawar /** Max CRA open gop period: Max spacing between CRA frames */ 150*c83a76b0SSuyog Pawar WORD32 i4_max_cra_open_gop_period; 151*c83a76b0SSuyog Pawar 152*c83a76b0SSuyog Pawar /** Max i open gop period: Max spacing between I frames */ 153*c83a76b0SSuyog Pawar WORD32 i4_max_i_open_gop_period; 154*c83a76b0SSuyog Pawar 155*c83a76b0SSuyog Pawar /** limits Max gopsize = 2 ^ i4_max_temporal_layers - 1 */ 156*c83a76b0SSuyog Pawar WORD32 i4_max_temporal_layers; 157*c83a76b0SSuyog Pawar 158*c83a76b0SSuyog Pawar /** Minimum temporal ID from which B-pictures are coded; Tid=1 (default) 0 (no B) */ 159*c83a76b0SSuyog Pawar WORD32 i4_min_temporal_id_for_b; 160*c83a76b0SSuyog Pawar 161*c83a76b0SSuyog Pawar /** Maximum number of reference frames */ 162*c83a76b0SSuyog Pawar WORD32 i4_max_reference_frames; 163*c83a76b0SSuyog Pawar 164*c83a76b0SSuyog Pawar /** Interlace field */ 165*c83a76b0SSuyog Pawar WORD32 i4_src_interlace_field; 166*c83a76b0SSuyog Pawar 167*c83a76b0SSuyog Pawar /* Frame rate*/ 168*c83a76b0SSuyog Pawar WORD32 i4_frame_rate; 169*c83a76b0SSuyog Pawar 170*c83a76b0SSuyog Pawar /** Enable Logo flag */ 171*c83a76b0SSuyog Pawar WORD32 i4_enable_logo; 172*c83a76b0SSuyog Pawar 173*c83a76b0SSuyog Pawar /** Bit Depth */ 174*c83a76b0SSuyog Pawar WORD32 i4_internal_bit_depth; 175*c83a76b0SSuyog Pawar 176*c83a76b0SSuyog Pawar WORD32 i4_input_bit_depth; 177*c83a76b0SSuyog Pawar 178*c83a76b0SSuyog Pawar /* 0 - 400; 1 - 420; 2 - 422; 3 - 444 */ 179*c83a76b0SSuyog Pawar UWORD8 u1_chroma_array_type; 180*c83a76b0SSuyog Pawar 181*c83a76b0SSuyog Pawar WORD32 ai4_quality_preset[IHEVCE_MAX_NUM_RESOLUTIONS]; 182*c83a76b0SSuyog Pawar 183*c83a76b0SSuyog Pawar WORD32 i4_rc_pass_num; 184*c83a76b0SSuyog Pawar 185*c83a76b0SSuyog Pawar /* If enable, enables blu ray compatibility of op*/ 186*c83a76b0SSuyog Pawar WORD32 i4_blu_ray_spec; 187*c83a76b0SSuyog Pawar 188*c83a76b0SSuyog Pawar IV_ARCH_T e_arch_type; 189*c83a76b0SSuyog Pawar 190*c83a76b0SSuyog Pawar UWORD8 u1_is_popcnt_available; 191*c83a76b0SSuyog Pawar 192*c83a76b0SSuyog Pawar WORD32 i4_mres_single_out; 193*c83a76b0SSuyog Pawar 194*c83a76b0SSuyog Pawar WORD32 i4_luma_size_copy_src_logo; 195*c83a76b0SSuyog Pawar 196*c83a76b0SSuyog Pawar } ihevce_lap_static_params_t; 197*c83a76b0SSuyog Pawar 198*c83a76b0SSuyog Pawar /** 199*c83a76b0SSuyog Pawar * @biref luma and chroma weight and offset container structure 200*c83a76b0SSuyog Pawar */ 201*c83a76b0SSuyog Pawar typedef struct 202*c83a76b0SSuyog Pawar { 203*c83a76b0SSuyog Pawar /** 204*c83a76b0SSuyog Pawar * flag to control the weighted pred for luma component of 205*c83a76b0SSuyog Pawar * this reference frame 206*c83a76b0SSuyog Pawar * Range [0 : 1] 207*c83a76b0SSuyog Pawar */ 208*c83a76b0SSuyog Pawar UWORD8 u1_luma_weight_enable_flag; 209*c83a76b0SSuyog Pawar 210*c83a76b0SSuyog Pawar /** 211*c83a76b0SSuyog Pawar * flag to control the weighted pred for chroma component of 212*c83a76b0SSuyog Pawar * this reference frame 213*c83a76b0SSuyog Pawar * Range [0 : 1] 214*c83a76b0SSuyog Pawar */ 215*c83a76b0SSuyog Pawar UWORD8 u1_chroma_weight_enable_flag; 216*c83a76b0SSuyog Pawar 217*c83a76b0SSuyog Pawar /** 218*c83a76b0SSuyog Pawar * luma weight factor for a reference frame, 219*c83a76b0SSuyog Pawar * Range [0 : 128] 220*c83a76b0SSuyog Pawar * Default = 1 << as_wght_offst 221*c83a76b0SSuyog Pawar */ 222*c83a76b0SSuyog Pawar WORD16 i2_luma_weight; 223*c83a76b0SSuyog Pawar 224*c83a76b0SSuyog Pawar /** 225*c83a76b0SSuyog Pawar * luma offset to be added after weighing for reference frame 226*c83a76b0SSuyog Pawar * Range [-128 : 127] 227*c83a76b0SSuyog Pawar * Default = 0 228*c83a76b0SSuyog Pawar */ 229*c83a76b0SSuyog Pawar WORD16 i2_luma_offset; 230*c83a76b0SSuyog Pawar 231*c83a76b0SSuyog Pawar /** 232*c83a76b0SSuyog Pawar * chroma weight factor for a reference frame, Default = 1 233*c83a76b0SSuyog Pawar */ 234*c83a76b0SSuyog Pawar WORD16 i2_cb_weight; 235*c83a76b0SSuyog Pawar 236*c83a76b0SSuyog Pawar /** 237*c83a76b0SSuyog Pawar * chroma offset to be added after weighing for reference frame, Default = 0 238*c83a76b0SSuyog Pawar */ 239*c83a76b0SSuyog Pawar WORD16 i2_cb_offset; 240*c83a76b0SSuyog Pawar 241*c83a76b0SSuyog Pawar /** 242*c83a76b0SSuyog Pawar * chroma weight factor for a reference frame, Default = 1 243*c83a76b0SSuyog Pawar */ 244*c83a76b0SSuyog Pawar WORD16 i2_cr_weight; 245*c83a76b0SSuyog Pawar 246*c83a76b0SSuyog Pawar /** 247*c83a76b0SSuyog Pawar * chroma offset to be added after weighing for reference frame, Default = 0 248*c83a76b0SSuyog Pawar */ 249*c83a76b0SSuyog Pawar WORD16 i2_cr_offset; 250*c83a76b0SSuyog Pawar 251*c83a76b0SSuyog Pawar } ihevce_wght_offst_t; 252*c83a76b0SSuyog Pawar 253*c83a76b0SSuyog Pawar /** 254*c83a76b0SSuyog Pawar * @biref defines the attributes of a reference picture 255*c83a76b0SSuyog Pawar */ 256*c83a76b0SSuyog Pawar typedef struct 257*c83a76b0SSuyog Pawar { 258*c83a76b0SSuyog Pawar /** 259*c83a76b0SSuyog Pawar * weighted prediction attribute for each duplicate entry of a ref pic 260*c83a76b0SSuyog Pawar * Note : Duplicate entries help in using same reference with different 261*c83a76b0SSuyog Pawar * weights and offsets. Example being partial flashes in scence 262*c83a76b0SSuyog Pawar */ 263*c83a76b0SSuyog Pawar ihevce_wght_offst_t as_wght_off[MAX_DUPLICATE_ENTRIES_IN_REF_LIST]; 264*c83a76b0SSuyog Pawar 265*c83a76b0SSuyog Pawar /** 266*c83a76b0SSuyog Pawar * delta POC of reference frame w.r.t current Picture POC, 267*c83a76b0SSuyog Pawar */ 268*c83a76b0SSuyog Pawar WORD32 i4_ref_pic_delta_poc; 269*c83a76b0SSuyog Pawar 270*c83a76b0SSuyog Pawar /** 271*c83a76b0SSuyog Pawar * flag indicating if this reference frame is to be used as 272*c83a76b0SSuyog Pawar * reference by current picture 273*c83a76b0SSuyog Pawar * shall be 0 or 1 274*c83a76b0SSuyog Pawar */ 275*c83a76b0SSuyog Pawar WORD32 i4_used_by_cur_pic_flag; 276*c83a76b0SSuyog Pawar 277*c83a76b0SSuyog Pawar /** 278*c83a76b0SSuyog Pawar * Indicates the number of duplicate entries of a reference picture 279*c83a76b0SSuyog Pawar * in the reference picture list. A reference picture may see multiple 280*c83a76b0SSuyog Pawar * entries in the reference picture list, since that allows the LAP to 281*c83a76b0SSuyog Pawar * assign multiple weighting related parameters to a single reference picture. 282*c83a76b0SSuyog Pawar * Range [1, MAX_DUPLICATE_ENTRIES_IN_REF_LIST] 283*c83a76b0SSuyog Pawar * 284*c83a76b0SSuyog Pawar * Used only when weighted prediction is enabled 285*c83a76b0SSuyog Pawar * 286*c83a76b0SSuyog Pawar */ 287*c83a76b0SSuyog Pawar WORD32 i4_num_duplicate_entries_in_ref_list; 288*c83a76b0SSuyog Pawar 289*c83a76b0SSuyog Pawar } ihevce_ref_pic_attrs_t; 290*c83a76b0SSuyog Pawar 291*c83a76b0SSuyog Pawar /* @brief IV_YUV_BUF_T: This structure defines attributes 292*c83a76b0SSuyog Pawar * for the input yuv used in enc and lap buffer 293*c83a76b0SSuyog Pawar */ 294*c83a76b0SSuyog Pawar typedef struct 295*c83a76b0SSuyog Pawar { 296*c83a76b0SSuyog Pawar /** i4_size of the structure */ 297*c83a76b0SSuyog Pawar WORD32 i4_size; 298*c83a76b0SSuyog Pawar 299*c83a76b0SSuyog Pawar /** Pointer to Luma (Y) Buffer */ 300*c83a76b0SSuyog Pawar void *pv_y_buf; 301*c83a76b0SSuyog Pawar 302*c83a76b0SSuyog Pawar /** Pointer to Chroma (Cb) Buffer */ 303*c83a76b0SSuyog Pawar void *pv_u_buf; 304*c83a76b0SSuyog Pawar 305*c83a76b0SSuyog Pawar /** Pointer to Chroma (Cr) Buffer */ 306*c83a76b0SSuyog Pawar void *pv_v_buf; 307*c83a76b0SSuyog Pawar 308*c83a76b0SSuyog Pawar /** Width of the Luma (Y) Buffer in pixels */ 309*c83a76b0SSuyog Pawar WORD32 i4_y_wd; 310*c83a76b0SSuyog Pawar 311*c83a76b0SSuyog Pawar /** Height of the Luma (Y) Buffer in pixels */ 312*c83a76b0SSuyog Pawar WORD32 i4_y_ht; 313*c83a76b0SSuyog Pawar 314*c83a76b0SSuyog Pawar /** Stride/Pitch of the Luma (Y) Buffer */ 315*c83a76b0SSuyog Pawar WORD32 i4_y_strd; 316*c83a76b0SSuyog Pawar 317*c83a76b0SSuyog Pawar /** Luma Process start offset : x dir. */ 318*c83a76b0SSuyog Pawar WORD32 i4_start_offset_x; 319*c83a76b0SSuyog Pawar 320*c83a76b0SSuyog Pawar /** Luma Process start offset : y dir. */ 321*c83a76b0SSuyog Pawar WORD32 i4_start_offset_y; 322*c83a76b0SSuyog Pawar 323*c83a76b0SSuyog Pawar /** Width of the Chroma (Cb / Cr) Buffer in pixels */ 324*c83a76b0SSuyog Pawar WORD32 i4_uv_wd; 325*c83a76b0SSuyog Pawar 326*c83a76b0SSuyog Pawar /** Height of the Chroma (Cb / Cr) Buffer in pixels */ 327*c83a76b0SSuyog Pawar WORD32 i4_uv_ht; 328*c83a76b0SSuyog Pawar 329*c83a76b0SSuyog Pawar /** Stride/Pitch of the Chroma (Cb / Cr) Buffer */ 330*c83a76b0SSuyog Pawar WORD32 i4_uv_strd; 331*c83a76b0SSuyog Pawar 332*c83a76b0SSuyog Pawar } iv_enc_yuv_buf_t; 333*c83a76b0SSuyog Pawar 334*c83a76b0SSuyog Pawar typedef struct 335*c83a76b0SSuyog Pawar { 336*c83a76b0SSuyog Pawar /** i4_size of the structure */ 337*c83a76b0SSuyog Pawar WORD32 i4_size; 338*c83a76b0SSuyog Pawar 339*c83a76b0SSuyog Pawar /** Pointer to Luma (Y) Buffer */ 340*c83a76b0SSuyog Pawar void *pv_y_buf; 341*c83a76b0SSuyog Pawar 342*c83a76b0SSuyog Pawar /** Pointer to Chroma (Cb) Buffer */ 343*c83a76b0SSuyog Pawar void *pv_u_buf; 344*c83a76b0SSuyog Pawar 345*c83a76b0SSuyog Pawar /** Pointer to Chroma (Cr) Buffer */ 346*c83a76b0SSuyog Pawar void *pv_v_buf; 347*c83a76b0SSuyog Pawar 348*c83a76b0SSuyog Pawar } iv_enc_yuv_buf_src_t; 349*c83a76b0SSuyog Pawar 350*c83a76b0SSuyog Pawar typedef struct 351*c83a76b0SSuyog Pawar { 352*c83a76b0SSuyog Pawar /*********** common params for both lap_out and rc_lap_out ****************/ 353*c83a76b0SSuyog Pawar 354*c83a76b0SSuyog Pawar /* hevc pic types : IDR/CDR/I/P/B etc */ 355*c83a76b0SSuyog Pawar WORD32 i4_pic_type; 356*c83a76b0SSuyog Pawar /* picture order count */ 357*c83a76b0SSuyog Pawar WORD32 i4_poc; 358*c83a76b0SSuyog Pawar /* temporal layer of the current picture */ 359*c83a76b0SSuyog Pawar WORD32 i4_temporal_lyr_id; 360*c83a76b0SSuyog Pawar /** 361*c83a76b0SSuyog Pawar * indicates if the current frame is reference pic 362*c83a76b0SSuyog Pawar * 0 : not ref pic 363*c83a76b0SSuyog Pawar * 1 : ref pic at lower layers (w.r.t to highest layer id) 364*c83a76b0SSuyog Pawar * 2 : ref pic at highest temporal layer id layer 365*c83a76b0SSuyog Pawar */ 366*c83a76b0SSuyog Pawar WORD32 i4_is_ref_pic; 367*c83a76b0SSuyog Pawar /** 368*c83a76b0SSuyog Pawar * Scene type such as Scene Cut, fade in/ out, dissolve, flash etc 369*c83a76b0SSuyog Pawar * enum used is IHEVCE_SCENE_TYPE 370*c83a76b0SSuyog Pawar */ 371*c83a76b0SSuyog Pawar WORD32 i4_scene_type; 372*c83a76b0SSuyog Pawar /** 373*c83a76b0SSuyog Pawar * Scene number helps to identify the reference frames 374*c83a76b0SSuyog Pawar * for the current frame of same scene and 375*c83a76b0SSuyog Pawar * also it can be used to reset the RC model 376*c83a76b0SSuyog Pawar * for each layer whenever scene cut happens 377*c83a76b0SSuyog Pawar */ 378*c83a76b0SSuyog Pawar UWORD32 u4_scene_num; 379*c83a76b0SSuyog Pawar /*display order num*/ 380*c83a76b0SSuyog Pawar WORD32 i4_display_num; 381*c83a76b0SSuyog Pawar 382*c83a76b0SSuyog Pawar WORD32 i4_quality_preset; 383*c83a76b0SSuyog Pawar 384*c83a76b0SSuyog Pawar /*********** parameters specific to lap_out structure **************/ 385*c83a76b0SSuyog Pawar /* cra pic type flag */ 386*c83a76b0SSuyog Pawar WORD32 i4_is_cra_pic; 387*c83a76b0SSuyog Pawar /** IDR GOP number */ 388*c83a76b0SSuyog Pawar WORD32 i4_idr_gop_num; 389*c83a76b0SSuyog Pawar /** weighted prediction enable flag */ 390*c83a76b0SSuyog Pawar WORD8 i1_weighted_pred_flag; 391*c83a76b0SSuyog Pawar /** weighted bipred enable flag */ 392*c83a76b0SSuyog Pawar WORD8 i1_weighted_bipred_flag; 393*c83a76b0SSuyog Pawar /* number of references for current pic */ 394*c83a76b0SSuyog Pawar WORD32 i4_num_ref_pics; 395*c83a76b0SSuyog Pawar /** 396*c83a76b0SSuyog Pawar * common denominator used for luma weights across all ref pics 397*c83a76b0SSuyog Pawar * Default = 0, Shall be in the range [0:7] 398*c83a76b0SSuyog Pawar */ 399*c83a76b0SSuyog Pawar WORD32 i4_log2_luma_wght_denom; 400*c83a76b0SSuyog Pawar /** 401*c83a76b0SSuyog Pawar * common denominator used for chroma weights across all ref pics 402*c83a76b0SSuyog Pawar * Default = 0, Shall be in the range [0:7] 403*c83a76b0SSuyog Pawar */ 404*c83a76b0SSuyog Pawar WORD32 i4_log2_chroma_wght_denom; 405*c83a76b0SSuyog Pawar /* ref pics to str current Picture POC */ 406*c83a76b0SSuyog Pawar ihevce_ref_pic_attrs_t as_ref_pics[MAX_REF_PICS]; 407*c83a76b0SSuyog Pawar /* Structure for the ITTIAM logo */ 408*c83a76b0SSuyog Pawar ihevce_logo_attrs_t s_logo_ctxt; 409*c83a76b0SSuyog Pawar /* first field flag */ 410*c83a76b0SSuyog Pawar WORD32 i4_first_field; 411*c83a76b0SSuyog Pawar /* associated IRAP poc */ 412*c83a76b0SSuyog Pawar WORD32 i4_assoc_IRAP_poc; 413*c83a76b0SSuyog Pawar WORD32 i4_is_prev_pic_in_Tid0_same_scene; 414*c83a76b0SSuyog Pawar 415*c83a76b0SSuyog Pawar WORD32 i4_is_I_in_any_field; 416*c83a76b0SSuyog Pawar WORD32 i4_used; 417*c83a76b0SSuyog Pawar 418*c83a76b0SSuyog Pawar WORD32 i4_end_flag; 419*c83a76b0SSuyog Pawar WORD32 i4_force_idr_flag; 420*c83a76b0SSuyog Pawar WORD32 i4_out_flush_flag; 421*c83a76b0SSuyog Pawar WORD32 i4_first_frm_new_res; 422*c83a76b0SSuyog Pawar 423*c83a76b0SSuyog Pawar /***** Spatial QP offset related *****/ 424*c83a76b0SSuyog Pawar float f_strength; 425*c83a76b0SSuyog Pawar 426*c83a76b0SSuyog Pawar long double ld_curr_frame_8x8_log_avg[2]; 427*c83a76b0SSuyog Pawar long double ld_curr_frame_16x16_log_avg[3]; 428*c83a76b0SSuyog Pawar long double ld_curr_frame_32x32_log_avg[3]; 429*c83a76b0SSuyog Pawar 430*c83a76b0SSuyog Pawar LWORD64 i8_curr_frame_8x8_avg_act[2]; 431*c83a76b0SSuyog Pawar LWORD64 i8_curr_frame_16x16_avg_act[3]; 432*c83a76b0SSuyog Pawar LWORD64 i8_curr_frame_32x32_avg_act[3]; 433*c83a76b0SSuyog Pawar 434*c83a76b0SSuyog Pawar WORD32 i4_i_pic_lamda_offset; 435*c83a76b0SSuyog Pawar 436*c83a76b0SSuyog Pawar double f_i_pic_lamda_modifier; 437*c83a76b0SSuyog Pawar 438*c83a76b0SSuyog Pawar WORD32 i4_curr_frm_qp; 439*c83a76b0SSuyog Pawar 440*c83a76b0SSuyog Pawar iv_enc_yuv_buf_t s_input_buf; 441*c83a76b0SSuyog Pawar 442*c83a76b0SSuyog Pawar /** Frame - level L0 satd accum*/ 443*c83a76b0SSuyog Pawar LWORD64 i8_frame_l0_acc_satd; 444*c83a76b0SSuyog Pawar 445*c83a76b0SSuyog Pawar /* Frame - level L1 Activity factor */ 446*c83a76b0SSuyog Pawar LWORD64 i8_frame_level_activity_fact; 447*c83a76b0SSuyog Pawar /*bits esimated for frame calulated for sub pic rc bit control */ 448*c83a76b0SSuyog Pawar WORD32 ai4_frame_bits_estimated[IHEVCE_MAX_NUM_BITRATES]; 449*c83a76b0SSuyog Pawar float f_pred_factor; 450*c83a76b0SSuyog Pawar 451*c83a76b0SSuyog Pawar } ihevce_lap_output_params_t; 452*c83a76b0SSuyog Pawar 453*c83a76b0SSuyog Pawar /** 454*c83a76b0SSuyog Pawar ****************************************************************************** 455*c83a76b0SSuyog Pawar * @brief Encoder and LAP I/O structutre 456*c83a76b0SSuyog Pawar * s_input_buf : input buffer will be populated by applciation 457*c83a76b0SSuyog Pawar * when LAP gets this buffer only input will be populated 458*c83a76b0SSuyog Pawar * During the time of seeting the encode order for current buffer 459*c83a76b0SSuyog Pawar * LAP should populate the s_lap_out structure. 460*c83a76b0SSuyog Pawar ****************************************************************************** 461*c83a76b0SSuyog Pawar */ 462*c83a76b0SSuyog Pawar typedef struct 463*c83a76b0SSuyog Pawar { 464*c83a76b0SSuyog Pawar /** 465*c83a76b0SSuyog Pawar * Input YUV buffers pointers and related parameters 466*c83a76b0SSuyog Pawar */ 467*c83a76b0SSuyog Pawar iv_input_data_ctrl_buffs_t s_input_buf; 468*c83a76b0SSuyog Pawar 469*c83a76b0SSuyog Pawar /** 470*c83a76b0SSuyog Pawar * Following parameters are output of LAP 471*c83a76b0SSuyog Pawar * for the current buffer to be encoded 472*c83a76b0SSuyog Pawar */ 473*c83a76b0SSuyog Pawar ihevce_lap_output_params_t s_lap_out; 474*c83a76b0SSuyog Pawar /** 475*c83a76b0SSuyog Pawar * Following parameters are output of LAP 476*c83a76b0SSuyog Pawar * for the current buffer to be encoded, 477*c83a76b0SSuyog Pawar * which are RC specific parameters 478*c83a76b0SSuyog Pawar */ 479*c83a76b0SSuyog Pawar rc_lap_out_params_t s_rc_lap_out; 480*c83a76b0SSuyog Pawar 481*c83a76b0SSuyog Pawar /** 482*c83a76b0SSuyog Pawar * Following parameters are context of LAP QUEUE 483*c83a76b0SSuyog Pawar */ 484*c83a76b0SSuyog Pawar frame_info_t s_frame_info; 485*c83a76b0SSuyog Pawar } ihevce_lap_enc_buf_t; 486*c83a76b0SSuyog Pawar 487*c83a76b0SSuyog Pawar /*****************************************************************************/ 488*c83a76b0SSuyog Pawar /* Extern Variable Declarations */ 489*c83a76b0SSuyog Pawar /*****************************************************************************/ 490*c83a76b0SSuyog Pawar 491*c83a76b0SSuyog Pawar /*****************************************************************************/ 492*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 493*c83a76b0SSuyog Pawar /*****************************************************************************/ 494*c83a76b0SSuyog Pawar 495*c83a76b0SSuyog Pawar #endif /* _IHEVCE_LAP_ENC_STRUCTS_H_ */ 496