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*/
54extern const WORD8  ih264_gai1_intrapred_luma_plane_coeffs[];
55extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs1[];
56extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs2[];
57extern const WORD8  ih264_gai1_intrapred_luma_8x8_horz_u[];
58
59/*****************************************************************************/
60/* Extern Function Declarations                                              */
61/*****************************************************************************/
62
63
64typedef 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
71typedef 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
81ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert;
82
83ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz;
84
85ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc;
86
87ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl;
88
89ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr;
90
91ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r;
92
93ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d;
94
95ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l;
96
97ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u;
98
99/* Luma 8x8 Intra pred filters */
100
101ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert;
102
103ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz;
104
105ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc;
106
107ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl;
108
109ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr;
110
111ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r;
112
113ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d;
114
115ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l;
116
117ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u;
118
119/* Luma 16x16 Intra pred filters */
120
121ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert;
122
123ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz;
124
125ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc;
126
127ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane;
128
129/* Chroma 8x8 Intra pred filters */
130
131typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft;
132
133ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc;
134
135ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz;
136
137ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert;
138
139ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane;
140
141
142ih264_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
148ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_a9q;
149
150ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_a9q;
151
152ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_a9q;
153
154ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_a9q;
155
156ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_a9q;
157
158ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_a9q;
159
160ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_a9q;
161
162ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_a9q;
163
164ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_a9q;
165
166/* Luma 8x8 Intra pred filters */
167
168ih264_intra_pred_ref_filtering_ft  ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q;
169
170ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_a9q;
171
172ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_a9q;
173
174ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_a9q;
175
176ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_a9q;
177
178ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_a9q;
179
180ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_a9q;
181
182ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_a9q;
183
184ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_a9q;
185
186ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_a9q;
187
188/* Luma 16x16 Intra pred filters */
189
190ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_a9q;
191
192ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_a9q;
193
194ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_a9q;
195
196ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_a9q;
197
198/* Chroma 8x8 Intra pred filters */
199
200ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q;
201
202ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q;
203
204ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q;
205
206ih264_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
212ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_ssse3;
213
214ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_ssse3;
215
216ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_ssse3;
217
218ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3;
219
220ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3;
221
222ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_ssse3;
223
224ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_ssse3;
225
226ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_ssse3;
227
228ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_ssse3;
229
230/* Luma 8x8 Intra pred filters */
231
232ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_ssse3;
233
234ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_ssse3;
235
236ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_ssse3;
237
238ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3;
239
240ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3;
241
242ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_ssse3;
243
244ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_ssse3;
245
246ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_ssse3;
247
248ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_ssse3;
249
250/* Luma 16x16 Intra pred filters */
251
252ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_ssse3;
253
254ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_ssse3;
255
256ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_ssse3;
257
258ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_ssse3;
259
260/* Chroma 8x8 Intra pred filters */
261
262ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3;
263
264ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3;
265
266ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3;
267
268ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3;
269
270/* AV8 Definition */
271
272/* Luma 4x4 Intra pred filters */
273ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_av8;
274
275ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_av8;
276
277ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_av8;
278
279ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_av8;
280
281ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_av8;
282
283ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_av8;
284
285ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_av8;
286
287ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_av8;
288
289ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_av8;
290
291/* Luma 8x8 Intra pred filters */
292
293ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_av8;
294
295ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_av8;
296
297ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_av8;
298
299ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_av8;
300
301ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_av8;
302
303ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_av8;
304
305ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_av8;
306
307ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_av8;
308
309ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_av8;
310
311/* Luma 16x16 Intra pred filters */
312
313ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_av8;
314
315ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_av8;
316
317ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_av8;
318
319ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_av8;
320
321/* Chroma 8x8 Intra pred filters */
322
323ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8;
324
325ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8;
326
327ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8;
328
329ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8;
330
331#endif /* IH264_INTRA_PRED_FILTERS_H_ */
332