1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 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 23 * ime.h 24 * 25 * @brief 26 * Contains declarations of global variables for H264 encoder 27 * 28 * @author 29 * Ittiam 30 * 31 * @remarks 32 * 33 ******************************************************************************* 34 */ 35 36 #ifndef IME_H_ 37 #define IME_H_ 38 39 /*****************************************************************************/ 40 /* Constant Macros */ 41 /*****************************************************************************/ 42 43 /** 44 ****************************************************************************** 45 * @brief Number of iterations before exiting during diamond search 46 ****************************************************************************** 47 */ 48 #define NUM_LAYERS 16 49 50 /** 51 ****************************************************************************** 52 * @brief Skip Bias value for P slice 53 ****************************************************************************** 54 */ 55 #define SKIP_BIAS_P 2 56 57 /** 58 ****************************************************************************** 59 * @brief Skip Bias value for B slice 60 ****************************************************************************** 61 */ 62 #define SKIP_BIAS_B 16 63 64 /*****************************************************************************/ 65 /* Extern Function Declarations */ 66 /*****************************************************************************/ 67 68 69 /** 70 ******************************************************************************* 71 * 72 * @brief Diamond Search 73 * 74 * @par Description: 75 * This function computes the sad at vertices of several layers of diamond grid 76 * at a time. The number of layers of diamond grid that would be evaluated is 77 * configurable.The function computes the sad at vertices of a diamond grid. If 78 * the sad at the center of the diamond grid is lesser than the sad at any other 79 * point of the diamond grid, the function marks the candidate Mb partition as 80 * mv. 81 * 82 * @param[in] ps_mb_part 83 * pointer to current mb partition ctxt with respect to ME 84 * 85 * @param[in] ps_me_ctxt 86 * pointer to me context 87 * 88 * @param[in] u4_lambda 89 * lambda motion 90 * 91 * @param[in] u4_fast_flag 92 * enable/disable fast sad computation 93 * 94 * @returns mv pair & corresponding distortion and cost 95 * 96 * @remarks This module cannot be part of the final product due to its lack of 97 * computational feasibility. This is only for quality eval purposes. 98 * 99 ******************************************************************************* 100 */ 101 extern void ime_diamond_search_16x16(me_ctxt_t *ps_me_ctxt, WORD32 i4_reflist); 102 103 104 /** 105 ******************************************************************************* 106 * 107 * @brief This function computes the best motion vector among the tentative mv 108 * candidates chosen. 109 * 110 * @par Description: 111 * This function determines the position in the search window at which the motion 112 * estimation should begin in order to minimise the number of search iterations. 113 * 114 * @param[in] ps_mb_part 115 * pointer to current mb partition ctxt with respect to ME 116 * 117 * @param[in] u4_lambda_motion 118 * lambda motion 119 * 120 * @param[in] u4_fast_flag 121 * enable/disable fast sad computation 122 * 123 * @returns mv pair & corresponding distortion and cost 124 * 125 * @remarks none 126 * 127 ******************************************************************************* 128 */ 129 extern void ime_evaluate_init_srchposn_16x16(me_ctxt_t *ps_me_ctxt, 130 WORD32 i4_reflist); 131 132 /** 133 ******************************************************************************* 134 * 135 * @brief Searches for the best matching full pixel predictor within the search 136 * range 137 * 138 * @par Description: 139 * This function begins by computing the mv predict vector for the current mb. 140 * This is used for cost computations. Further basing on the algo. chosen, it 141 * looks through a set of candidate vectors that best represent the mb a least 142 * cost and returns this information. 143 * 144 * @param[in] ps_proc 145 * pointer to current proc ctxt 146 * 147 * @param[in] ps_me_ctxt 148 * pointer to me context 149 * 150 * @returns mv pair & corresponding distortion and cost 151 * 152 * @remarks none 153 * 154 ******************************************************************************* 155 */ 156 extern void ime_full_pel_motion_estimation_16x16(me_ctxt_t *ps_me_ctxt, 157 WORD32 i4_ref_list); 158 159 /** 160 ******************************************************************************* 161 * 162 * @brief Searches for the best matching sub pixel predictor within the search 163 * range 164 * 165 * @par Description: 166 * This function begins by searching across all sub pixel sample points 167 * around the full pel motion vector. The vector with least cost is chosen as 168 * the mv for the current mb. If the skip mode is not evaluated while analysing 169 * the initial search candidates then analyse it here and update the mv. 170 * 171 * @param[in] ps_proc 172 * pointer to current proc ctxt 173 * 174 * @param[in] ps_me_ctxt 175 * pointer to me context 176 * 177 * @returns none 178 * 179 * @remarks none 180 * 181 ******************************************************************************* 182 */ 183 extern void ime_sub_pel_motion_estimation_16x16(me_ctxt_t *ps_me_ctxt, 184 WORD32 i4_reflist); 185 186 /** 187 ******************************************************************************* 188 * 189 * @brief This function computes cost of skip macroblocks 190 * 191 * @par Description: 192 * 193 * @param[in] ps_me_ctxt 194 * pointer to me ctxt 195 * 196 * @param[in] ps_skip_mv 197 * pointer to skip mv 198 * 199 @param[in] is_slice_type_b 200 * Whether slice type is BSLICE or not 201 202 * @returns none 203 * 204 * @remarks 205 * NOTE: while computing the skip cost, do not enable early exit from compute 206 * sad function because, a negative bias gets added later 207 * 208 ******************************************************************************* 209 */ 210 extern void ime_compute_skip_cost(me_ctxt_t *ps_me_ctxt, 211 ime_mv_t *ps_skip_mv, 212 mb_part_ctxt *ps_smb_part_info, 213 UWORD32 u4_use_stat_sad, 214 WORD32 i4_reflist, 215 WORD32 is_slice_type_b); 216 217 218 #endif /* IME_H_ */ 219