/****************************************************************************** * * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ /*! ****************************************************************************** * \file ihevce_ipe_pass.h * * \brief * This file contains interface defination of Encode loop pass function * * \date * 18/09/2012 * * \author * Ittiam * ****************************************************************************** */ #ifndef _IHEVCE_IPE_PASS_H_ #define _IHEVCE_IPE_PASS_H_ /*****************************************************************************/ /* Constant Macros */ /*****************************************************************************/ #define IPE_TEST_DBG_L0 0 #define IPE_TEST_DBG_L1 0 #define IPE_TEST_DBG_L2 0 #define IPE_TEST_DBG_L3 0 #define IPE_TEST_DBG_L4 0 #define IPE_ME_DBG_L0 0 #define IPE_ME_DBG_L1 0 #define INTRA_PART_DBG 0 // Dump Debug Information related to intra partitioning #define INTRA_NON_CTB_PIC_DBG 0 #define IPE_MODE_MAP_DBG 0 #define FAST_INTRA_8421_MODES_ENABLE 1 #define FAST_PART_WITH_OPTION_4 1 #define IPE_SAD_TYPE 0 /* 0 => Hadamard SAD, 1 => full SAD */ #define IPE_STEP_SIZE 1 /* Intra Prediction Mode Step Size During Analysis */ #define LAMBDA_DIV_FACTOR 1 /*satd/q_scale is accumualted cu level*/ #define SATD_BY_ACT_Q_FAC 10 /** defines the ratio of bits generated per cabac bin in Q8 format */ #define CABAC_BITS_PER_BIN 192 /** define modulation factor for qp modulation */ #define INTRA_QP_MOD_FACTOR_NUM 16 #define INTER_QP_MOD_FACTOR_NUM 4 #define QP_MOD_FACTOR_DEN 2 /*****************************************************************************/ /* Function Macros */ /*****************************************************************************/ /*****************************************************************************/ /* Typedefs */ /*****************************************************************************/ /*****************************************************************************/ /* Enums */ /*****************************************************************************/ typedef enum { CU_1TU = 0, CU_4TU, SUB_CU_1TU, SUB_CU_4TU } IPE_CU_TU_SPLIT_PATTERN; /*****************************************************************************/ /* Structure */ /*****************************************************************************/ /*****************************************************************************/ /* Extern Variable Declarations */ /*****************************************************************************/ /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ WORD32 ihevce_ipe_get_num_mem_recs(void); WORD32 ihevce_ipe_get_mem_recs(iv_mem_rec_t *ps_mem_tab, WORD32 i4_num_proc_thrds, WORD32 i4_mem_space); void *ihevce_ipe_init( iv_mem_rec_t *ps_mem_tab, ihevce_static_cfg_params_t *ps_init_prms, WORD32 i4_num_proc_thrds, WORD32 i4_ref_id, func_selector_t *ps_func_selector, rc_quant_t *ps_rc_quant_ctxt, WORD32 i4_resolution_id, UWORD8 u1_is_popcnt_available); void ihevce_intra_pred_ref_filtering(UWORD8 *pu1_src, WORD32 nt, UWORD8 *pu1_dst); void ihevce_intra_pred_ref_filtering(UWORD8 *pu1_src, WORD32 nt, UWORD8 *pu1_dst); UWORD32 ihevce_ipe_pass_satd(WORD16 *pi2_coeff, WORD32 coeff_stride, WORD32 trans_size); void ihevce_ipe_process( void *pv_ctxt, frm_ctb_ctxt_t *ps_frm_ctb_prms, frm_lambda_ctxt_t *ps_frm_lamda, ihevce_lap_enc_buf_t *ps_curr_inp, pre_enc_L0_ipe_encloop_ctxt_t *ps_L0_IPE_curr_out_pre_enc, ctb_analyse_t *ps_ctb_out, //cu_analyse_t *ps_cu_out, ipe_l0_ctb_analyse_for_me_t *ps_ipe_ctb_out, void *pv_multi_thrd_ctxt, WORD32 slice_type, ihevce_ed_blk_t *ps_ed_pic_l1, ihevce_ed_blk_t *ps_ed_pic_l2, ihevce_ed_ctb_l1_t *ps_ed_ctb_l1_pic, WORD32 thrd_id, WORD32 i4_ping_pong); void ihevce_populate_ipe_ol_cu_lambda_prms( void *pv_ctxt, frm_lambda_ctxt_t *ps_frm_lamda, WORD32 i4_slice_type, WORD32 i4_temporal_lyr_id, WORD32 i4_lambda_type); void ihevce_get_ipe_ol_cu_lambda_prms(void *pv_ctxt, WORD32 i4_cur_cu_qp); void ihevce_populate_ipe_frame_init( void *pv_ctxt, ihevce_static_cfg_params_t *ps_stat_prms, WORD32 i4_curr_frm_qp, WORD32 i4_slice_type, WORD32 i4_thrd_id, pre_enc_me_ctxt_t *ps_curr_out, WORD8 i1_cu_qp_delta_enabled_flag, rc_quant_t *ps_rc_quant_ctxt, WORD32 i4_quality_preset, WORD32 i4_temporal_lyr_id, ihevce_lap_output_params_t *ps_lap_out); LWORD64 ihevce_ipe_get_frame_intra_satd_cost( void *pv_ctxt, LWORD64 *pi8_frame_satd_by_qpmod, LWORD64 *pi8_frame_acc_mode_bits_cost, LWORD64 *pi8_frame_acc_activity_factor, LWORD64 *pi8_frame_l0_acc_satd); #endif /* _IHEVCE_IPE_PASS_H_ */