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_ipe_pass.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains interface defination of Encode loop pass function 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_IPE_PASS_H_ 37*c83a76b0SSuyog Pawar #define _IHEVCE_IPE_PASS_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* Constant Macros */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar #define IPE_TEST_DBG_L0 0 43*c83a76b0SSuyog Pawar #define IPE_TEST_DBG_L1 0 44*c83a76b0SSuyog Pawar #define IPE_TEST_DBG_L2 0 45*c83a76b0SSuyog Pawar #define IPE_TEST_DBG_L3 0 46*c83a76b0SSuyog Pawar #define IPE_TEST_DBG_L4 0 47*c83a76b0SSuyog Pawar 48*c83a76b0SSuyog Pawar #define IPE_ME_DBG_L0 0 49*c83a76b0SSuyog Pawar #define IPE_ME_DBG_L1 0 50*c83a76b0SSuyog Pawar 51*c83a76b0SSuyog Pawar #define INTRA_PART_DBG 0 // Dump Debug Information related to intra partitioning 52*c83a76b0SSuyog Pawar 53*c83a76b0SSuyog Pawar #define INTRA_NON_CTB_PIC_DBG 0 54*c83a76b0SSuyog Pawar 55*c83a76b0SSuyog Pawar #define IPE_MODE_MAP_DBG 0 56*c83a76b0SSuyog Pawar 57*c83a76b0SSuyog Pawar #define FAST_INTRA_8421_MODES_ENABLE 1 58*c83a76b0SSuyog Pawar 59*c83a76b0SSuyog Pawar #define FAST_PART_WITH_OPTION_4 1 60*c83a76b0SSuyog Pawar 61*c83a76b0SSuyog Pawar #define IPE_SAD_TYPE 0 /* 0 => Hadamard SAD, 1 => full SAD */ 62*c83a76b0SSuyog Pawar #define IPE_STEP_SIZE 1 /* Intra Prediction Mode Step Size During Analysis */ 63*c83a76b0SSuyog Pawar #define LAMBDA_DIV_FACTOR 1 64*c83a76b0SSuyog Pawar 65*c83a76b0SSuyog Pawar /*satd/q_scale is accumualted cu level*/ 66*c83a76b0SSuyog Pawar #define SATD_BY_ACT_Q_FAC 10 67*c83a76b0SSuyog Pawar 68*c83a76b0SSuyog Pawar /** defines the ratio of bits generated per cabac bin in Q8 format */ 69*c83a76b0SSuyog Pawar #define CABAC_BITS_PER_BIN 192 70*c83a76b0SSuyog Pawar 71*c83a76b0SSuyog Pawar /** define modulation factor for qp modulation */ 72*c83a76b0SSuyog Pawar #define INTRA_QP_MOD_FACTOR_NUM 16 73*c83a76b0SSuyog Pawar #define INTER_QP_MOD_FACTOR_NUM 4 74*c83a76b0SSuyog Pawar #define QP_MOD_FACTOR_DEN 2 75*c83a76b0SSuyog Pawar 76*c83a76b0SSuyog Pawar /*****************************************************************************/ 77*c83a76b0SSuyog Pawar /* Function Macros */ 78*c83a76b0SSuyog Pawar /*****************************************************************************/ 79*c83a76b0SSuyog Pawar 80*c83a76b0SSuyog Pawar /*****************************************************************************/ 81*c83a76b0SSuyog Pawar /* Typedefs */ 82*c83a76b0SSuyog Pawar /*****************************************************************************/ 83*c83a76b0SSuyog Pawar 84*c83a76b0SSuyog Pawar /*****************************************************************************/ 85*c83a76b0SSuyog Pawar /* Enums */ 86*c83a76b0SSuyog Pawar /*****************************************************************************/ 87*c83a76b0SSuyog Pawar typedef enum 88*c83a76b0SSuyog Pawar { 89*c83a76b0SSuyog Pawar CU_1TU = 0, 90*c83a76b0SSuyog Pawar CU_4TU, 91*c83a76b0SSuyog Pawar SUB_CU_1TU, 92*c83a76b0SSuyog Pawar SUB_CU_4TU 93*c83a76b0SSuyog Pawar } IPE_CU_TU_SPLIT_PATTERN; 94*c83a76b0SSuyog Pawar 95*c83a76b0SSuyog Pawar /*****************************************************************************/ 96*c83a76b0SSuyog Pawar /* Structure */ 97*c83a76b0SSuyog Pawar /*****************************************************************************/ 98*c83a76b0SSuyog Pawar 99*c83a76b0SSuyog Pawar /*****************************************************************************/ 100*c83a76b0SSuyog Pawar /* Extern Variable Declarations */ 101*c83a76b0SSuyog Pawar /*****************************************************************************/ 102*c83a76b0SSuyog Pawar 103*c83a76b0SSuyog Pawar /*****************************************************************************/ 104*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 105*c83a76b0SSuyog Pawar /*****************************************************************************/ 106*c83a76b0SSuyog Pawar WORD32 ihevce_ipe_get_num_mem_recs(void); 107*c83a76b0SSuyog Pawar 108*c83a76b0SSuyog Pawar WORD32 109*c83a76b0SSuyog Pawar ihevce_ipe_get_mem_recs(iv_mem_rec_t *ps_mem_tab, WORD32 i4_num_proc_thrds, WORD32 i4_mem_space); 110*c83a76b0SSuyog Pawar 111*c83a76b0SSuyog Pawar void *ihevce_ipe_init( 112*c83a76b0SSuyog Pawar iv_mem_rec_t *ps_mem_tab, 113*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_init_prms, 114*c83a76b0SSuyog Pawar WORD32 i4_num_proc_thrds, 115*c83a76b0SSuyog Pawar WORD32 i4_ref_id, 116*c83a76b0SSuyog Pawar func_selector_t *ps_func_selector, 117*c83a76b0SSuyog Pawar rc_quant_t *ps_rc_quant_ctxt, 118*c83a76b0SSuyog Pawar WORD32 i4_resolution_id, 119*c83a76b0SSuyog Pawar UWORD8 u1_is_popcnt_available); 120*c83a76b0SSuyog Pawar 121*c83a76b0SSuyog Pawar void ihevce_intra_pred_ref_filtering(UWORD8 *pu1_src, WORD32 nt, UWORD8 *pu1_dst); 122*c83a76b0SSuyog Pawar void ihevce_intra_pred_ref_filtering(UWORD8 *pu1_src, WORD32 nt, UWORD8 *pu1_dst); 123*c83a76b0SSuyog Pawar 124*c83a76b0SSuyog Pawar UWORD32 ihevce_ipe_pass_satd(WORD16 *pi2_coeff, WORD32 coeff_stride, WORD32 trans_size); 125*c83a76b0SSuyog Pawar 126*c83a76b0SSuyog Pawar void ihevce_ipe_process( 127*c83a76b0SSuyog Pawar void *pv_ctxt, 128*c83a76b0SSuyog Pawar frm_ctb_ctxt_t *ps_frm_ctb_prms, 129*c83a76b0SSuyog Pawar frm_lambda_ctxt_t *ps_frm_lamda, 130*c83a76b0SSuyog Pawar ihevce_lap_enc_buf_t *ps_curr_inp, 131*c83a76b0SSuyog Pawar pre_enc_L0_ipe_encloop_ctxt_t *ps_L0_IPE_curr_out_pre_enc, 132*c83a76b0SSuyog Pawar ctb_analyse_t *ps_ctb_out, 133*c83a76b0SSuyog Pawar //cu_analyse_t *ps_cu_out, 134*c83a76b0SSuyog Pawar ipe_l0_ctb_analyse_for_me_t *ps_ipe_ctb_out, 135*c83a76b0SSuyog Pawar void *pv_multi_thrd_ctxt, 136*c83a76b0SSuyog Pawar WORD32 slice_type, 137*c83a76b0SSuyog Pawar ihevce_ed_blk_t *ps_ed_pic_l1, 138*c83a76b0SSuyog Pawar ihevce_ed_blk_t *ps_ed_pic_l2, 139*c83a76b0SSuyog Pawar ihevce_ed_ctb_l1_t *ps_ed_ctb_l1_pic, 140*c83a76b0SSuyog Pawar WORD32 thrd_id, 141*c83a76b0SSuyog Pawar WORD32 i4_ping_pong); 142*c83a76b0SSuyog Pawar 143*c83a76b0SSuyog Pawar void ihevce_populate_ipe_ol_cu_lambda_prms( 144*c83a76b0SSuyog Pawar void *pv_ctxt, 145*c83a76b0SSuyog Pawar frm_lambda_ctxt_t *ps_frm_lamda, 146*c83a76b0SSuyog Pawar WORD32 i4_slice_type, 147*c83a76b0SSuyog Pawar WORD32 i4_temporal_lyr_id, 148*c83a76b0SSuyog Pawar WORD32 i4_lambda_type); 149*c83a76b0SSuyog Pawar 150*c83a76b0SSuyog Pawar void ihevce_get_ipe_ol_cu_lambda_prms(void *pv_ctxt, WORD32 i4_cur_cu_qp); 151*c83a76b0SSuyog Pawar 152*c83a76b0SSuyog Pawar void ihevce_populate_ipe_frame_init( 153*c83a76b0SSuyog Pawar void *pv_ctxt, 154*c83a76b0SSuyog Pawar ihevce_static_cfg_params_t *ps_stat_prms, 155*c83a76b0SSuyog Pawar WORD32 i4_curr_frm_qp, 156*c83a76b0SSuyog Pawar WORD32 i4_slice_type, 157*c83a76b0SSuyog Pawar WORD32 i4_thrd_id, 158*c83a76b0SSuyog Pawar pre_enc_me_ctxt_t *ps_curr_out, 159*c83a76b0SSuyog Pawar WORD8 i1_cu_qp_delta_enabled_flag, 160*c83a76b0SSuyog Pawar rc_quant_t *ps_rc_quant_ctxt, 161*c83a76b0SSuyog Pawar WORD32 i4_quality_preset, 162*c83a76b0SSuyog Pawar WORD32 i4_temporal_lyr_id, 163*c83a76b0SSuyog Pawar ihevce_lap_output_params_t *ps_lap_out); 164*c83a76b0SSuyog Pawar 165*c83a76b0SSuyog Pawar LWORD64 ihevce_ipe_get_frame_intra_satd_cost( 166*c83a76b0SSuyog Pawar void *pv_ctxt, 167*c83a76b0SSuyog Pawar LWORD64 *pi8_frame_satd_by_qpmod, 168*c83a76b0SSuyog Pawar LWORD64 *pi8_frame_acc_mode_bits_cost, 169*c83a76b0SSuyog Pawar LWORD64 *pi8_frame_acc_activity_factor, 170*c83a76b0SSuyog Pawar LWORD64 *pi8_frame_l0_acc_satd); 171*c83a76b0SSuyog Pawar #endif /* _IHEVCE_IPE_PASS_H_ */ 172