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 * ih264e_me.h 24 * 25 * @brief 26 * 27 * 28 * @author 29 * Ittiam 30 * 31 * @par List of Functions: 32 * - 33 * 34 * @remarks 35 * None 36 * 37 ******************************************************************************* 38 */ 39 40 #ifndef _IME_STRUCTS_H_ 41 #define _IME_STRUCTS_H_ 42 43 /** 44 * Motion vector 45 */ 46 typedef struct 47 { 48 /** 49 * Horizontal Motion Vector 50 */ 51 WORD16 i2_mvx; 52 53 /** 54 * Vertical Motion Vector 55 */ 56 WORD16 i2_mvy; 57 } ime_mv_t; 58 59 60 /** 61 ************************************************************************** 62 * @brief mb_part_ctxt 63 * 64 * Structure that would hold the information for individual MB partitions 65 * gathered during the full pel ME stage 66 ************************************************************************** 67 */ 68 typedef struct 69 { 70 /** 71 * best mvs 72 */ 73 ime_mv_t s_mv_curr; 74 75 /** 76 * mv predictor 77 */ 78 ime_mv_t s_mv_pred; 79 80 /** 81 * SAD associated with the MB partition 82 */ 83 WORD32 i4_mb_distortion; 84 85 /** 86 * cost for the MB partition 87 */ 88 WORD32 i4_mb_cost; 89 90 /** 91 * Search position for least cost among the list of candidates 92 */ 93 WORD32 i4_srch_pos_idx; 94 95 /** 96 * Search position for least cost among the list of candidates 97 */ 98 UWORD32 u4_exit; 99 100 /* 101 * Buffer corresponding to best half pel cost 102 */ 103 UWORD8 *pu1_best_hpel_buf; 104 105 } mb_part_ctxt; 106 107 108 /** 109 ************************************************************************** 110 * @brief me_ctxt_t 111 * 112 * Structure encapsulating the parameters used in the motion estimation 113 * context 114 ************************************************************************** 115 */ 116 typedef struct 117 { 118 /** 119 * Ref pointer to current MB luma for each ref list 120 */ 121 UWORD8 *apu1_ref_buf_luma[MAX_NUM_REFLIST]; 122 123 /** 124 * Src pointer to current MB luma 125 */ 126 UWORD8 *pu1_src_buf_luma; 127 128 /** 129 * source stride 130 * (strides for luma and chroma are the same) 131 */ 132 WORD32 i4_src_strd; 133 134 /** 135 * recon stride 136 * (strides for luma and chroma are the same) 137 */ 138 WORD32 i4_rec_strd; 139 140 /** 141 * Offset for half pel x plane from the pic buf 142 */ 143 UWORD32 u4_half_x_offset; 144 145 /** 146 * Offset for half pel y plane from half x plane 147 */ 148 UWORD32 u4_half_y_offset; 149 150 /** 151 * Offset for half pel xy plane from half y plane 152 */ 153 UWORD32 u4_half_xy_offset; 154 155 /** 156 * Search range in the X, Y axis in terms of pixels 157 */ 158 WORD32 ai2_srch_boundaries[2]; 159 160 /** 161 * Search range in the north direction in terms of pixels 162 */ 163 WORD32 i4_srch_range_n; 164 165 /** 166 * Search range in the south direction in terms of pixels 167 */ 168 WORD32 i4_srch_range_s; 169 170 /** 171 * Search range in the east direction in terms of pixels 172 */ 173 WORD32 i4_srch_range_e; 174 175 /** 176 * Search range in the west direction in terms of pixels 177 */ 178 WORD32 i4_srch_range_w; 179 180 /** 181 * left mb motion vector 182 */ 183 ime_mv_t s_left_mv; 184 185 /** 186 * top left mb motion vector 187 */ 188 ime_mv_t s_top_left_mv; 189 190 /** 191 * Number of valid candidates for the Initial search position 192 */ 193 UWORD32 u4_num_candidates[MAX_NUM_REFLIST + 1]; 194 195 /** 196 * Motion vector predictors derived from neighboring 197 * blocks for each of the six block partitions 198 */ 199 ime_mv_t as_mv_init_search[MAX_NUM_REFLIST + 1][6]; 200 201 /** 202 * mv bits 203 */ 204 UWORD8 *pu1_mv_bits; 205 206 /** 207 * lambda (lagrange multiplier for cost computation) 208 */ 209 UWORD32 u4_lambda_motion; 210 211 /** 212 * enabled fast sad computation 213 */ 214 UWORD32 u4_enable_fast_sad; 215 216 /* 217 * Enable SKIP block prediction based on SATQD 218 */ 219 UWORD32 u4_enable_stat_sad; 220 221 /* 222 * Minimum distortion to search for 223 * */ 224 WORD32 i4_min_sad; 225 226 /* 227 * Signal that minimum sad has been reached in ME 228 * */ 229 UWORD32 u4_min_sad_reached; 230 231 /** 232 * Flag to enable/disbale half pel motion estimation 233 */ 234 UWORD32 u4_enable_hpel; 235 236 /** 237 * Diamond search Iteration Max Cnt 238 */ 239 UWORD32 u4_num_layers; 240 241 /** 242 * encoder me speed 243 */ 244 UWORD32 u4_me_speed_preset; 245 246 UWORD32 u4_left_is_intra; 247 248 UWORD32 u4_left_is_skip; 249 250 /* skip_type can be PREDL0, PREDL1 or BIPRED */ 251 WORD32 i4_skip_type; 252 253 /* Biasing given for skip prediction */ 254 WORD32 i4_skip_bias[2]; 255 256 /** 257 * Structure to store the MB partition info 258 * We need 1(L0)+1(L1)+1(bi) 259 */ 260 mb_part_ctxt as_mb_part[MAX_NUM_REFLIST + 1]; 261 /* 262 * Threshold to compare the sad with 263 */ 264 UWORD16 *pu2_sad_thrsh; 265 266 /** 267 * fn ptrs for compute sad routines 268 */ 269 ime_compute_sad_ft *pf_ime_compute_sad_16x16[2]; 270 ime_compute_sad_ft *pf_ime_compute_sad_16x8; 271 ime_compute_sad4_diamond *pf_ime_compute_sad4_diamond; 272 ime_compute_sad3_diamond *pf_ime_compute_sad3_diamond; 273 ime_compute_sad2_diamond *pf_ime_compute_sad2_diamond; 274 ime_sub_pel_compute_sad_16x16_ft *pf_ime_sub_pel_compute_sad_16x16; 275 276 /* 277 * Function poitners for SATQD 278 */ 279 ime_compute_sad_stat *pf_ime_compute_sad_stat_luma_16x16; 280 281 /** 282 * Qp 283 */ 284 UWORD8 u1_mb_qp; 285 286 /* 287 * Buffers for holding subpel and bipred temp buffers 288 */ 289 UWORD8 *apu1_subpel_buffs[SUBPEL_BUFF_CNT]; 290 291 WORD32 u4_subpel_buf_strd; 292 293 /* 294 * Buffers to store the best halfpel plane* 295 */ 296 UWORD8 *pu1_hpel_buf; 297 298 } me_ctxt_t; 299 300 301 #endif // _IME_STRUCTS_H_ 302 303