blob: 9baacb3cdb63931ac14b99239d4188987c107d39 [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
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 */
46typedef 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*/
68typedef 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 */
Harinarayanan K K134291e2015-06-18 16:03:38 +053093 WORD32 i4_srch_pos_idx;
Hamsalekha S8d3d3032015-03-13 21:24:58 +053094
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*/
116typedef struct
117{
118 /**
Harinarayanan K K134291e2015-06-18 16:03:38 +0530119 * Ref pointer to current MB luma for each ref list
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530120 */
Harinarayanan K K134291e2015-06-18 16:03:38 +0530121 UWORD8 *apu1_ref_buf_luma[MAX_NUM_REFLIST];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530122
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 */
Harinarayanan K K134291e2015-06-18 16:03:38 +0530193 UWORD32 u4_num_candidates[MAX_NUM_REFLIST + 1];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530194
195 /**
Harinarayanan K K134291e2015-06-18 16:03:38 +0530196 * Motion vector predictors derived from neighboring
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530197 * blocks for each of the six block partitions
198 */
Harinarayanan K K134291e2015-06-18 16:03:38 +0530199 ime_mv_t as_mv_init_search[MAX_NUM_REFLIST + 1][6];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530200
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
Harinarayanan K K134291e2015-06-18 16:03:38 +0530250 /* 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
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530256 /**
257 * Structure to store the MB partition info
Harinarayanan K K134291e2015-06-18 16:03:38 +0530258 * We need 1(L0)+1(L1)+1(bi)
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530259 */
Harinarayanan K K134291e2015-06-18 16:03:38 +0530260 mb_part_ctxt as_mb_part[MAX_NUM_REFLIST + 1];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530261 /*
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 /*
Harinarayanan K K134291e2015-06-18 16:03:38 +0530287 * Buffers for holding subpel and bipred temp buffers
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530288 */
Harinarayanan K K134291e2015-06-18 16:03:38 +0530289 UWORD8 *apu1_subpel_buffs[SUBPEL_BUFF_CNT];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530290
Harinarayanan K K134291e2015-06-18 16:03:38 +0530291 WORD32 u4_subpel_buf_strd;
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530292
293 /*
294 * Buffers to store the best halfpel plane*
295 */
296 UWORD8 *pu1_hpel_buf;
297
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530298} me_ctxt_t;
299
300
301#endif // _IME_STRUCTS_H_
302