1 /****************************************************************************** 2 * 3 * Copyright (C) 2018 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ***************************************************************************** 18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 /*! 21 ****************************************************************************** 22 * \file ihevce_decomp_pre_intra_pass.h 23 * 24 * \brief 25 * This file contains declarations related to frame decomposition done during 26 * pre intra processing 27 * 28 * \date 29 * 18/09/2012 30 * 31 * \author 32 * Ittiam 33 * 34 ****************************************************************************** 35 */ 36 37 #ifndef _IHEVCE_DECOMP_PRE_INTRA_PASS_H_ 38 #define _IHEVCE_DECOMP_PRE_INTRA_PASS_H_ 39 40 /*****************************************************************************/ 41 /* Typedefs */ 42 /*****************************************************************************/ 43 44 /*****************************************************************************/ 45 /* Globals */ 46 /*****************************************************************************/ 47 extern WORD32 g_i4_ip_funcs[MAX_NUM_IP_MODES]; 48 49 /*****************************************************************************/ 50 /* Constant Macros */ 51 /*****************************************************************************/ 52 #define POW_2_TO_1_BY_4 (1.1892) 53 #define POW_2_TO_3_BY_4 (1.6818) 54 55 /*****************************************************************************/ 56 /* Extern Function Declarations */ 57 /*****************************************************************************/ 58 void ihevce_ed_4x4_find_best_modes( 59 UWORD8 *pu1_src, 60 WORD32 src_stride, 61 UWORD8 *pu1_nbr, 62 UWORD16 *pu2_mode_bits_cost, 63 UWORD8 *pu1_best_modes, 64 WORD32 *pu1_best_sad_costs, 65 WORD32 u1_low_resol, 66 FT_SAD_COMPUTER *pf_4x4_sad_computer); 67 68 WORD32 ihevce_decomp_pre_intra_get_num_mem_recs(void); 69 70 WORD32 ihevce_decomp_pre_intra_get_mem_recs( 71 iv_mem_rec_t *ps_mem_tab, WORD32 i4_num_proc_thrds, WORD32 i4_mem_space); 72 73 void *ihevce_decomp_pre_intra_init( 74 iv_mem_rec_t *ps_mem_tab, 75 ihevce_static_cfg_params_t *ps_init_prms, 76 WORD32 i4_num_proc_thrds, 77 func_selector_t *ps_func_selector, 78 WORD32 i4_resolution_id, 79 UWORD8 u1_is_popcnt_available); 80 81 void ihevce_decomp_pre_intra_process( 82 void *pv_ctxt, 83 ihevce_lap_output_params_t *ps_lap_out_prms, 84 frm_ctb_ctxt_t *ps_frm_ctb_prms, 85 void *pv_multi_thrd_ctxt, 86 WORD32 thrd_id, 87 WORD32 i4_ping_pong, 88 ihevce_8x8_L0_satd_t *ps_layer0_cur_satd, 89 ihevce_8x8_L0_mean_t *ps_layer0_cur_mean); 90 91 void ihevce_decomp_pre_intra_frame_init( 92 void *pv_ctxt, 93 UWORD8 **ppu1_decomp_lyr_bufs, 94 WORD32 *pi4_lyr_buf_stride, 95 ihevce_ed_blk_t *ps_layer1_buf, 96 ihevce_ed_blk_t *ps_layer2_buf, 97 ihevce_ed_ctb_l1_t *ps_ed_ctb_l1, 98 WORD32 i4_ol_sad_lambda_qf, 99 WORD32 i4_slice_type, 100 ctb_analyse_t *ps_ctb_analyse); 101 102 /* Calculate the average activitiies at 16*16 (8*8 in L1) 103 and 32*32 (8*8 in L2) block sizes */ 104 void ihevce_decomp_pre_intra_curr_frame_pre_intra_deinit( 105 void *pv_pre_intra_ctxt, 106 pre_enc_me_ctxt_t *ps_curr_out, 107 WORD32 i4_is_last_thread, 108 frm_ctb_ctxt_t *ps_frm_ctb_prms, 109 WORD32 i4_temporal_lyr_id, 110 WORD32 i4_enable_noise_detection); 111 112 void ihevce_scale_by_2( 113 UWORD8 *pu1_src, 114 WORD32 src_stride, 115 UWORD8 *pu1_dst, 116 WORD32 dst_stride, 117 WORD32 wd, 118 WORD32 ht, 119 UWORD8 *pu1_wkg_mem, 120 WORD32 ht_offset, 121 WORD32 block_ht, 122 WORD32 wd_offset, 123 WORD32 block_wd, 124 FT_COPY_2D *pf_copy_2d, 125 FT_SCALING_FILTER_BY_2 *pf_scaling_filter_mxn); 126 127 void ihevce_ed_frame_init(void *pv_ed_ctxt, WORD32 i4_layer_no); 128 129 void ihevce_intra_populate_mode_bits_cost( 130 WORD32 top_intra_mode, 131 WORD32 left_intra_mode, 132 WORD32 available_top, 133 WORD32 available_left, 134 WORD32 cu_pos_y, 135 UWORD16 *mode_bits_cost, 136 WORD32 lambda); 137 138 WORD32 ihevce_cu_level_qp_mod( 139 WORD32 i4_qscale, 140 WORD32 i4_satd, 141 long double ld_curr_frame_log_avg, 142 float f_mod_strength, 143 WORD32 *pi4_8x8_act_factor, 144 WORD32 *pi4_qscale_mod, 145 rc_quant_t *ps_rc_quant_ctxt); 146 147 /*return intra SATD of entire frame*/ 148 LWORD64 ihevce_decomp_pre_intra_get_frame_satd(void *pv_ctxt, WORD32 *i4_width, WORD32 *i4_hieght); 149 150 LWORD64 ihevce_decomp_pre_intra_get_frame_satd_squared( 151 void *pv_ctxt, WORD32 *i4_width, WORD32 *i4_hieght); 152 153 #endif 154