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  *  ih264_intra_pred_filters.h
24  *
25  * @brief
26  *  Declarations of functions used for intra prediction
27  *
28  * @author
29  *  Ittiam
30  *
31  * @remarks
32  *  None
33  *
34  *******************************************************************************
35  */
36 
37 #ifndef IH264_INTRA_PRED_FILTERS_H_
38 
39 #define IH264_INTRA_PRED_FILTERS_H_
40 
41 /*****************************************************************************/
42 /*  Macro Expansion                                                          */
43 /*****************************************************************************/
44 
45 /*! Filter (1,2,1) i.e (a + 2b + c) / 4 */
46 #define FILT121(a,b,c) ((a + (b<<1) + c + 2)>>2)
47 /*! Filter (1,1) i.e (a + b) / 2 */
48 #define FILT11(a,b) ((a + b + 1)>>1)
49 /*****************************************************************************/
50 /*  Global Variables                                                        */
51 /*****************************************************************************/
52 
53 /* Global variables used only in assembly files*/
54 extern const WORD8  ih264_gai1_intrapred_luma_plane_coeffs[];
55 extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs1[];
56 extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs2[];
57 extern const WORD8  ih264_gai1_intrapred_luma_8x8_horz_u[];
58 
59 /*****************************************************************************/
60 /* Extern Function Declarations                                              */
61 /*****************************************************************************/
62 
63 
64 typedef void ih264_intra_pred_ref_filtering_ft(UWORD8 *pu1_left,
65                                                UWORD8 *pu1_topleft,
66                                                UWORD8 *pu1_top,
67                                                UWORD8 *pu1_dst,
68                                                WORD32 left_strd,
69                                                WORD32 ngbr_avail);
70 
71 typedef void ih264_intra_pred_luma_ft(UWORD8 *pu1_src,
72                                       UWORD8 *pu1_dst,
73                                       WORD32 src_strd,
74                                       WORD32 dst_strd,
75                                       WORD32 ngbr_avail);
76 
77 /* No Neon Definitions */
78 
79 /* Luma 4x4 Intra pred filters */
80 
81 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert;
82 
83 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz;
84 
85 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc;
86 
87 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl;
88 
89 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr;
90 
91 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r;
92 
93 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d;
94 
95 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l;
96 
97 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u;
98 
99 /* Luma 8x8 Intra pred filters */
100 
101 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert;
102 
103 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz;
104 
105 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc;
106 
107 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl;
108 
109 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr;
110 
111 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r;
112 
113 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d;
114 
115 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l;
116 
117 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u;
118 
119 /* Luma 16x16 Intra pred filters */
120 
121 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert;
122 
123 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz;
124 
125 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc;
126 
127 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane;
128 
129 /* Chroma 8x8 Intra pred filters */
130 
131 typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft;
132 
133 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc;
134 
135 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz;
136 
137 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert;
138 
139 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane;
140 
141 
142 ih264_intra_pred_ref_filtering_ft  ih264_intra_pred_luma_8x8_mode_ref_filtering;
143 
144 /* A9 Definition */
145 
146 /* Luma 4x4 Intra pred filters */
147 
148 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_a9q;
149 
150 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_a9q;
151 
152 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_a9q;
153 
154 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_a9q;
155 
156 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_a9q;
157 
158 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_a9q;
159 
160 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_a9q;
161 
162 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_a9q;
163 
164 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_a9q;
165 
166 /* Luma 8x8 Intra pred filters */
167 
168 ih264_intra_pred_ref_filtering_ft  ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q;
169 
170 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_a9q;
171 
172 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_a9q;
173 
174 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_a9q;
175 
176 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_a9q;
177 
178 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_a9q;
179 
180 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_a9q;
181 
182 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_a9q;
183 
184 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_a9q;
185 
186 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_a9q;
187 
188 /* Luma 16x16 Intra pred filters */
189 
190 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_a9q;
191 
192 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_a9q;
193 
194 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_a9q;
195 
196 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_a9q;
197 
198 /* Chroma 8x8 Intra pred filters */
199 
200 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q;
201 
202 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q;
203 
204 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q;
205 
206 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_a9q;
207 
208 /* X86 Intrinsic Definitions */
209 
210 /* Luma 4x4 Intra pred filters */
211 
212 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_ssse3;
213 
214 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_ssse3;
215 
216 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_ssse3;
217 
218 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3;
219 
220 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3;
221 
222 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_ssse3;
223 
224 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_ssse3;
225 
226 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_ssse3;
227 
228 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_ssse3;
229 
230 /* Luma 8x8 Intra pred filters */
231 
232 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_ssse3;
233 
234 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_ssse3;
235 
236 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_ssse3;
237 
238 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3;
239 
240 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3;
241 
242 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_ssse3;
243 
244 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_ssse3;
245 
246 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_ssse3;
247 
248 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_ssse3;
249 
250 /* Luma 16x16 Intra pred filters */
251 
252 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_ssse3;
253 
254 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_ssse3;
255 
256 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_ssse3;
257 
258 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_ssse3;
259 
260 /* Chroma 8x8 Intra pred filters */
261 
262 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3;
263 
264 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3;
265 
266 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3;
267 
268 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3;
269 
270 /* AV8 Definition */
271 
272 /* Luma 4x4 Intra pred filters */
273 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_av8;
274 
275 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_av8;
276 
277 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_av8;
278 
279 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_av8;
280 
281 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_av8;
282 
283 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_av8;
284 
285 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_av8;
286 
287 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_av8;
288 
289 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_av8;
290 
291 /* Luma 8x8 Intra pred filters */
292 
293 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_av8;
294 
295 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_av8;
296 
297 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_av8;
298 
299 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_av8;
300 
301 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_av8;
302 
303 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_av8;
304 
305 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_av8;
306 
307 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_av8;
308 
309 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_av8;
310 
311 /* Luma 16x16 Intra pred filters */
312 
313 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_av8;
314 
315 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_av8;
316 
317 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_av8;
318 
319 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_av8;
320 
321 /* Chroma 8x8 Intra pred filters */
322 
323 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8;
324 
325 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8;
326 
327 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8;
328 
329 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8;
330 
331 #endif /* IH264_INTRA_PRED_FILTERS_H_ */
332