1*c83a76b0SSuyog Pawar /****************************************************************************** 2*c83a76b0SSuyog Pawar * 3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project 4*c83a76b0SSuyog Pawar * 5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License"); 6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License. 7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at: 8*c83a76b0SSuyog Pawar * 9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0 10*c83a76b0SSuyog Pawar * 11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software 12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS, 13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and 15*c83a76b0SSuyog Pawar * limitations under the License. 16*c83a76b0SSuyog Pawar * 17*c83a76b0SSuyog Pawar ***************************************************************************** 18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*c83a76b0SSuyog Pawar */ 20*c83a76b0SSuyog Pawar 21*c83a76b0SSuyog Pawar /** 22*c83a76b0SSuyog Pawar ****************************************************************************** 23*c83a76b0SSuyog Pawar * @file 24*c83a76b0SSuyog Pawar * ihevce_lap_structs.h 25*c83a76b0SSuyog Pawar * 26*c83a76b0SSuyog Pawar * @brief 27*c83a76b0SSuyog Pawar * This file contains structure definitions related to look-ahead processing 28*c83a76b0SSuyog Pawar * 29*c83a76b0SSuyog Pawar * @author 30*c83a76b0SSuyog Pawar * ittiam 31*c83a76b0SSuyog Pawar * 32*c83a76b0SSuyog Pawar ****************************************************************************** 33*c83a76b0SSuyog Pawar */ 34*c83a76b0SSuyog Pawar 35*c83a76b0SSuyog Pawar #ifndef _IHEVCE_LAP_STRUCTS_H_ 36*c83a76b0SSuyog Pawar #define _IHEVCE_LAP_STRUCTS_H_ 37*c83a76b0SSuyog Pawar 38*c83a76b0SSuyog Pawar /*****************************************************************************/ 39*c83a76b0SSuyog Pawar /* Constant Macros */ 40*c83a76b0SSuyog Pawar /*****************************************************************************/ 41*c83a76b0SSuyog Pawar #define EVAL_VERSION 0 42*c83a76b0SSuyog Pawar #define EVAL_MODE_FORCE_LOGO 0 43*c83a76b0SSuyog Pawar #define MAX_FRAMES_EVAL_VERSION 50000 44*c83a76b0SSuyog Pawar #define LAP_DEBUG_PRINT 0 45*c83a76b0SSuyog Pawar #define FORCE_IDR_TEST 1 46*c83a76b0SSuyog Pawar #define MAX_NUM_ENC_NODES 8 47*c83a76b0SSuyog Pawar #define MAX_QUEUE_LENGTH (MAX_LAP_WINDOW_SIZE + MAX_SUB_GOP_SIZE + 2) 48*c83a76b0SSuyog Pawar #define MAX_SUBGOP_IN_ENCODE_QUEUE 4 49*c83a76b0SSuyog Pawar 50*c83a76b0SSuyog Pawar #if(MAX_SUBGOP_IN_ENCODE_QUEUE) & (MAX_SUBGOP_IN_ENCODE_QUEUE - 1) 51*c83a76b0SSuyog Pawar #error max_subgop_in_encode_queue must be a power of 2 52*c83a76b0SSuyog Pawar #endif 53*c83a76b0SSuyog Pawar 54*c83a76b0SSuyog Pawar /*****************************************************************************/ 55*c83a76b0SSuyog Pawar /* Enums */ 56*c83a76b0SSuyog Pawar /*****************************************************************************/ 57*c83a76b0SSuyog Pawar typedef enum 58*c83a76b0SSuyog Pawar { 59*c83a76b0SSuyog Pawar LAP_CTXT = 0, 60*c83a76b0SSuyog Pawar LAP_NODE_MEM, 61*c83a76b0SSuyog Pawar NUM_LAP_MEM_RECS, 62*c83a76b0SSuyog Pawar } LAP_MEM_T; 63*c83a76b0SSuyog Pawar 64*c83a76b0SSuyog Pawar /*****************************************************************************/ 65*c83a76b0SSuyog Pawar /* Structures */ 66*c83a76b0SSuyog Pawar /*****************************************************************************/ 67*c83a76b0SSuyog Pawar 68*c83a76b0SSuyog Pawar /* Picture types */ 69*c83a76b0SSuyog Pawar typedef enum PIC_TYPE_E 70*c83a76b0SSuyog Pawar { 71*c83a76b0SSuyog Pawar PIC_TYPE_NA = -1, /* Invalid frame type*/ 72*c83a76b0SSuyog Pawar PIC_TYPE_I, /* I frame */ 73*c83a76b0SSuyog Pawar PIC_TYPE_P, /* P frame */ 74*c83a76b0SSuyog Pawar PIC_TYPE_B, /* B frame */ 75*c83a76b0SSuyog Pawar PIC_TYPE_IDR, /* IDR frame */ 76*c83a76b0SSuyog Pawar PIC_TYPE_CRA, /* CRA frame */ 77*c83a76b0SSuyog Pawar MAX_NUM_PIC_TYPES 78*c83a76b0SSuyog Pawar } PIC_TYPE_E; 79*c83a76b0SSuyog Pawar 80*c83a76b0SSuyog Pawar typedef struct ihevce_encode_node_t 81*c83a76b0SSuyog Pawar { 82*c83a76b0SSuyog Pawar WORD32 data; 83*c83a76b0SSuyog Pawar void *pv_left_node; 84*c83a76b0SSuyog Pawar void *pv_right_node; 85*c83a76b0SSuyog Pawar WORD32 i4_hierachical_layer; 86*c83a76b0SSuyog Pawar WORD32 i4_interlace_field; 87*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_lap_top_buff; 88*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_lap_bottom_buff; 89*c83a76b0SSuyog Pawar 90*c83a76b0SSuyog Pawar } ihevce_encode_node_t; 91*c83a76b0SSuyog Pawar 92*c83a76b0SSuyog Pawar /** 93*c83a76b0SSuyog Pawar ****************************************************************************** 94*c83a76b0SSuyog Pawar * @brief lap context 95*c83a76b0SSuyog Pawar ****************************************************************************** 96*c83a76b0SSuyog Pawar */ 97*c83a76b0SSuyog Pawar typedef struct 98*c83a76b0SSuyog Pawar { 99*c83a76b0SSuyog Pawar // cfg params 100*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t s_static_cfg_params; 101*c83a76b0SSuyog Pawar ihevce_lap_static_params_t s_lap_static_params; 102*c83a76b0SSuyog Pawar 103*c83a76b0SSuyog Pawar //pic reorder info 104*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *aps_lap_inp_buf[MAX_QUEUE_LENGTH]; 105*c83a76b0SSuyog Pawar 106*c83a76b0SSuyog Pawar ihevce_encode_node_t *aps_encode_node[1]; 107*c83a76b0SSuyog Pawar 108*c83a76b0SSuyog Pawar /** Array of nodes in encode order*/ 109*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *api4_encode_order_array[MAX_NUM_ENC_NODES]; 110*c83a76b0SSuyog Pawar 111*c83a76b0SSuyog Pawar /** Array of lap output in lap encode array*/ 112*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *api4_lap_out_buf[MAX_SUBGOP_IN_ENCODE_QUEUE][MAX_NUM_ENC_NODES]; 113*c83a76b0SSuyog Pawar 114*c83a76b0SSuyog Pawar /** Array of nodes in capture order*/ 115*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *api4_capture_order_array[MAX_NUM_ENC_NODES]; 116*c83a76b0SSuyog Pawar 117*c83a76b0SSuyog Pawar /**Array of POCS in encode order*/ 118*c83a76b0SSuyog Pawar WORD32 ai4_encode_order_poc[MAX_NUM_ENC_NODES]; 119*c83a76b0SSuyog Pawar 120*c83a76b0SSuyog Pawar /**Array of POCS in capture order*/ 121*c83a76b0SSuyog Pawar WORD32 ai4_capture_order_poc[MAX_NUM_ENC_NODES]; 122*c83a76b0SSuyog Pawar 123*c83a76b0SSuyog Pawar /** Pointer to POC in encode order*/ 124*c83a76b0SSuyog Pawar WORD32 *pi4_encode_poc_ptr; 125*c83a76b0SSuyog Pawar 126*c83a76b0SSuyog Pawar /** Pointer to POC in capture order*/ 127*c83a76b0SSuyog Pawar WORD32 *pi4_capture_poc_ptr; 128*c83a76b0SSuyog Pawar 129*c83a76b0SSuyog Pawar WORD32 ai4_pic_type_to_be_removed[NUM_LAP2_LOOK_AHEAD]; 130*c83a76b0SSuyog Pawar 131*c83a76b0SSuyog Pawar WORD32 ai4_num_buffer[MAX_SUBGOP_IN_ENCODE_QUEUE]; 132*c83a76b0SSuyog Pawar 133*c83a76b0SSuyog Pawar void *pv_prev_inp_buf; 134*c83a76b0SSuyog Pawar 135*c83a76b0SSuyog Pawar WORD32 i4_buf_enq_idx; 136*c83a76b0SSuyog Pawar WORD32 i4_buf_deq_idx; 137*c83a76b0SSuyog Pawar WORD32 i4_lap_out_idx; 138*c83a76b0SSuyog Pawar WORD32 i4_capture_idx; 139*c83a76b0SSuyog Pawar WORD32 i4_idr_flag; 140*c83a76b0SSuyog Pawar WORD32 i4_num_bufs_encode_order; 141*c83a76b0SSuyog Pawar WORD32 i4_deq_idx; 142*c83a76b0SSuyog Pawar WORD32 i4_enq_idx; 143*c83a76b0SSuyog Pawar // poc info 144*c83a76b0SSuyog Pawar WORD32 ref_poc_array[MAX_REF_PICS]; 145*c83a76b0SSuyog Pawar WORD8 ai1_pic_type[10]; 146*c83a76b0SSuyog Pawar WORD32 i4_curr_poc; 147*c83a76b0SSuyog Pawar WORD32 i4_cra_poc; 148*c83a76b0SSuyog Pawar WORD32 i4_assoc_IRAP_poc; 149*c83a76b0SSuyog Pawar // counters 150*c83a76b0SSuyog Pawar WORD32 i4_max_idr_period; 151*c83a76b0SSuyog Pawar WORD32 i4_min_idr_period; 152*c83a76b0SSuyog Pawar WORD32 i4_max_cra_period; 153*c83a76b0SSuyog Pawar WORD32 i4_max_i_period; 154*c83a76b0SSuyog Pawar WORD32 i4_idr_counter; 155*c83a76b0SSuyog Pawar WORD32 i4_cra_counter; 156*c83a76b0SSuyog Pawar WORD32 i4_i_counter; 157*c83a76b0SSuyog Pawar WORD32 i4_idr_gop_num; 158*c83a76b0SSuyog Pawar WORD32 i4_curr_ref_pics; 159*c83a76b0SSuyog Pawar WORD32 i4_display_num; 160*c83a76b0SSuyog Pawar WORD32 i4_num_frm_type_decided; 161*c83a76b0SSuyog Pawar WORD32 i4_frm_gop_idx; 162*c83a76b0SSuyog Pawar WORD32 i4_is_all_i_pic_in_seq; 163*c83a76b0SSuyog Pawar WORD32 i4_next_start_ctr; 164*c83a76b0SSuyog Pawar WORD32 i4_fixed_open_gop_period; 165*c83a76b0SSuyog Pawar WORD32 i4_fixed_i_period; 166*c83a76b0SSuyog Pawar // misc 167*c83a76b0SSuyog Pawar WORD32 i4_enable_logo; 168*c83a76b0SSuyog Pawar WORD32 i4_cra_i_pic_flag; 169*c83a76b0SSuyog Pawar WORD32 i4_force_end_flag; 170*c83a76b0SSuyog Pawar WORD32 i4_sub_gop_size; 171*c83a76b0SSuyog Pawar WORD32 i4_sub_gop_size_idr; 172*c83a76b0SSuyog Pawar WORD32 i4_dyn_sub_gop_size; 173*c83a76b0SSuyog Pawar WORD32 end_flag; 174*c83a76b0SSuyog Pawar WORD32 i4_immediate_idr_case; 175*c83a76b0SSuyog Pawar WORD32 i4_max_buf_in_enc_order; 176*c83a76b0SSuyog Pawar WORD32 i4_end_flag_pic_idx; 177*c83a76b0SSuyog Pawar WORD32 i4_lap2_counter; 178*c83a76b0SSuyog Pawar WORD32 i4_rc_lap_period; 179*c83a76b0SSuyog Pawar WORD32 i4_gop_period; 180*c83a76b0SSuyog Pawar WORD32 i4_no_back_to_back_i_avoidance; 181*c83a76b0SSuyog Pawar WORD32 i4_sub_gop_pic_idx; 182*c83a76b0SSuyog Pawar WORD32 i4_force_idr_pos; 183*c83a76b0SSuyog Pawar WORD32 i4_num_dummy_pic; 184*c83a76b0SSuyog Pawar WORD32 i4_sub_gop_end; 185*c83a76b0SSuyog Pawar WORD32 i4_lap_encode_idx; 186*c83a76b0SSuyog Pawar WORD32 i4_deq_lap_buf; 187*c83a76b0SSuyog Pawar } lap_struct_t; 188*c83a76b0SSuyog Pawar 189*c83a76b0SSuyog Pawar void ihevce_populate_tree_nodes( 190*c83a76b0SSuyog Pawar ihevce_encode_node_t *encode_parent_node_t, 191*c83a76b0SSuyog Pawar ihevce_encode_node_t *encode_node_t, 192*c83a76b0SSuyog Pawar WORD32 *loop_count, 193*c83a76b0SSuyog Pawar WORD32 layer, 194*c83a76b0SSuyog Pawar WORD32 hier_layer); 195*c83a76b0SSuyog Pawar 196*c83a76b0SSuyog Pawar #endif /* _IHEVCE_LAP_STRUCTS_H_ */ 197