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