1 /******************************************************************************
2 *
3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
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 /**
19 *******************************************************************************
20 * @file
21 *  ihevc_intra_pred.h
22 *
23 * @brief
24 *  Declarations for the fucntions defined in  ihevc_intra_pred_filters
25 *
26 * @author
27 *  Mamatha
28 *
29 *
30 * @remarks
31 *  None
32 *
33 *******************************************************************************
34 */
35 
36 #ifndef IHEVC_CHROMA_INTRA_PRED_H_
37 #define IHEVC_CHROMA_INTRA_PRED_H_
38 
39 /*****************************************************************************/
40 /* Function Declarations                                                     */
41 /*****************************************************************************/
42 typedef void ihevc_intra_pred_chroma_planar_ft(
43                 UWORD8 *pu1_ref,
44                 WORD32 src_strd,
45                 UWORD8 *pu1_dst,
46                 WORD32 dst_strd,
47                 WORD32 nt,
48                 WORD32 mode);
49 
50 typedef void ihevc_intra_pred_chroma_dc_ft(
51                 UWORD8 *pu1_ref,
52                 WORD32 src_strd,
53                 UWORD8 *pu1_dst,
54                 WORD32 dst_strd,
55                 WORD32 nt,
56                 WORD32 mode);
57 
58 typedef void ihevc_intra_pred_chroma_horz_ft(
59                 UWORD8 *pu1_ref,
60                 WORD32 src_strd,
61                 UWORD8 *pu1_dst,
62                 WORD32 dst_strd,
63                 WORD32 nt,
64                 WORD32 mode);
65 
66 typedef void ihevc_intra_pred_chroma_ver_ft(
67                 UWORD8 *pu1_ref,
68                 WORD32 src_strd,
69                 UWORD8 *pu1_dst,
70                 WORD32 dst_strd,
71                 WORD32 nt,
72                 WORD32 mode);
73 
74 typedef void ihevc_intra_pred_chroma_mode2_ft(
75                 UWORD8 *pu1_ref,
76                 WORD32 src_strd,
77                 UWORD8 *pu1_dst,
78                 WORD32 dst_strd,
79                 WORD32 nt,
80                 WORD32 mode);
81 
82 typedef void ihevc_intra_pred_chroma_mode_18_34_ft(
83                 UWORD8 *pu1_ref,
84                 WORD32 src_strd,
85                 UWORD8 *pu1_dst,
86                 WORD32 dst_strd,
87                 WORD32 nt,
88                 WORD32 mode);
89 
90 typedef void ihevc_intra_pred_chroma_mode_3_to_9_ft(
91                 UWORD8 *pu1_ref,
92                 WORD32 src_strd,
93                 UWORD8 *pu1_dst,
94                 WORD32 dst_strd,
95                 WORD32 nt,
96                 WORD32 mode);
97 
98 typedef void ihevc_intra_pred_chroma_mode_11_to_17_ft(
99                 UWORD8 *pu1_ref,
100                 WORD32 src_strd,
101                 UWORD8 *pu1_dst,
102                 WORD32 dst_strd,
103                 WORD32 nt,
104                 WORD32 mode);
105 
106 typedef void ihevc_intra_pred_chroma_mode_19_to_25_ft(
107                 UWORD8 *pu1_ref,
108                 WORD32 src_strd,
109                 UWORD8 *pu1_dst,
110                 WORD32 dst_strd,
111                 WORD32 nt,
112                 WORD32 mode);
113 
114 typedef void ihevc_intra_pred_chroma_mode_27_to_33_ft(
115                 UWORD8 *pu1_ref,
116                 WORD32 src_strd,
117                 UWORD8 *pu1_dst,
118                 WORD32 dst_strd,
119                 WORD32 nt,
120                 WORD32 mode);
121 
122 typedef void ihevc_intra_pred_chroma_ref_substitution_ft(UWORD8 *pu1_top_left,
123                                                          UWORD8 *pu1_top,
124                                                          UWORD8 *pu1_left,
125                                                          WORD32 src_strd,
126                                                          WORD32 nt,
127                                                          WORD32 nbr_flags,
128                                                          UWORD8 *pu1_dst,
129                                                          WORD32 dst_strd);
130 
131 typedef void ihevc_hbd_intra_pred_chroma_planar_ft(
132                 UWORD16 *pu2_ref,
133                 WORD32 src_strd,
134                 UWORD16 *pu2_dst,
135                 WORD32 dst_strd,
136                 WORD32 nt,
137                 WORD32 mode);
138 
139 
140 typedef void ihevc_hbd_intra_pred_chroma_dc_ft(
141                 UWORD16 *pu2_ref,
142                 WORD32 src_strd,
143                 UWORD16 *pu2_dst,
144                 WORD32 dst_strd,
145                 WORD32 nt,
146                 WORD32 mode);
147 
148 
149 typedef void ihevc_hbd_intra_pred_chroma_horz_ft(
150                 UWORD16 *pu2_ref,
151                 WORD32 src_strd,
152                 UWORD16 *pu2_dst,
153                 WORD32 dst_strd,
154                 WORD32 nt,
155                 WORD32 mode);
156 
157 typedef void ihevc_hbd_intra_pred_chroma_ver_ft(
158                 UWORD16 *pu2_ref,
159                 WORD32 src_strd,
160                 UWORD16 *pu2_dst,
161                 WORD32 dst_strd,
162                 WORD32 nt,
163                 WORD32 mode);
164 
165 
166 typedef void ihevc_hbd_intra_pred_chroma_mode2_ft(
167                 UWORD16 *pu2_ref,
168                 WORD32 src_strd,
169                 UWORD16 *pu2_dst,
170                 WORD32 dst_strd,
171                 WORD32 nt,
172                 WORD32 mode);
173 
174 
175 
176 typedef void ihevc_hbd_intra_pred_chroma_mode_18_34_ft(
177                 UWORD16 *pu2_ref,
178                 WORD32 src_strd,
179                 UWORD16 *pu2_dst,
180                 WORD32 dst_strd,
181                 WORD32 nt,
182                 WORD32 mode);
183 
184 typedef void ihevc_hbd_intra_pred_chroma_mode_3_to_9_ft(
185                 UWORD16 *pu2_ref,
186                 WORD32 src_strd,
187                 UWORD16 *pu2_dst,
188                 WORD32 dst_strd,
189                 WORD32 nt,
190                 WORD32 mode);
191 
192 
193 typedef void ihevc_hbd_intra_pred_chroma_mode_11_to_17_ft(
194                 UWORD16 *pu2_ref,
195                 WORD32 src_strd,
196                 UWORD16 *pu2_dst,
197                 WORD32 dst_strd,
198                 WORD32 nt,
199                 WORD32 mode);
200 
201 
202 
203 typedef void ihevc_hbd_intra_pred_chroma_mode_19_to_25_ft(
204                 UWORD16 *pu2_ref,
205                 WORD32 src_strd,
206                 UWORD16 *pu2_dst,
207                 WORD32 dst_strd,
208                 WORD32 nt,
209                 WORD32 mode);
210 
211 
212 typedef void ihevc_hbd_intra_pred_chroma_mode_27_to_33_ft(
213                 UWORD16 *pu2_ref,
214                 WORD32 src_strd,
215                 UWORD16 *pu2_dst,
216                 WORD32 dst_strd,
217                 WORD32 nt,
218                 WORD32 mode);
219 
220 
221 typedef void ihevc_hbd_intra_pred_chroma_ref_substitution_ft(UWORD16 *pu2_top_left,
222                                                              UWORD16 *pu2_top,
223                                                              UWORD16 *pu2_left,
224                                                              WORD32 src_strd,
225                                                              WORD32 nt,
226                                                              WORD32 nbr_flags,
227                                                              UWORD16 *pu2_dst,
228                                                              WORD32 dst_strd,
229                                                              UWORD8 bit_depth);
230 
231 /* C function declarations */
232 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar;
233 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc;
234 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz;
235 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver;
236 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2;
237 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34;
238 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9;
239 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17;
240 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25;
241 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33;
242 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution;
243 
244 ihevc_hbd_intra_pred_chroma_planar_ft ihevc_hbd_intra_pred_chroma_planar;
245 ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc;
246 ihevc_hbd_intra_pred_chroma_horz_ft ihevc_hbd_intra_pred_chroma_horz;
247 ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver;
248 ihevc_hbd_intra_pred_chroma_mode2_ft ihevc_hbd_intra_pred_chroma_mode2;
249 ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34;
250 ihevc_hbd_intra_pred_chroma_mode_3_to_9_ft ihevc_hbd_intra_pred_chroma_mode_3_to_9;
251 ihevc_hbd_intra_pred_chroma_mode_11_to_17_ft ihevc_hbd_intra_pred_chroma_mode_11_to_17;
252 ihevc_hbd_intra_pred_chroma_mode_19_to_25_ft ihevc_hbd_intra_pred_chroma_mode_19_to_25;
253 ihevc_hbd_intra_pred_chroma_mode_27_to_33_ft ihevc_hbd_intra_pred_chroma_mode_27_to_33;
254 ihevc_hbd_intra_pred_chroma_ref_substitution_ft ihevc_hbd_intra_pred_chroma_ref_substitution;
255 
256 /* C function declarations */
257 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar;
258 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc;
259 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz;
260 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver;
261 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2;
262 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34;
263 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9;
264 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17;
265 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25;
266 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33;
267 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution;
268 
269 /* A9Q function declarations */
270 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_a9q;
271 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_a9q;
272 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_a9q;
273 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_a9q;
274 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_a9q;
275 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_a9q;
276 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_a9q;
277 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_a9q;
278 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_a9q;
279 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_a9q;
280 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_a9q;
281 
282 /* SSE4.2 function declarations */
283 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_neonintr;
284 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_neonintr;
285 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_neonintr;
286 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_neonintr;
287 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_neonintr;
288 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_neonintr;
289 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_neonintr;
290 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_neonintr;
291 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_neonintr;
292 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_neonintr;
293 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_neonintr;
294 
295 /* SSSE3 function declarations */
296 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_ssse3;
297 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_ssse3;
298 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_ssse3;
299 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_ssse3;
300 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_ssse3;
301 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_ssse3;
302 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_ssse3;
303 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_ssse3;
304 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_ssse3;
305 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_ssse3;
306 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_ssse3;
307 
308 /* SSE4.2 function declarations */
309 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_sse42;
310 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_sse42;
311 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_sse42;
312 
313 ihevc_hbd_intra_pred_chroma_planar_ft ihevc_hbd_intra_pred_chroma_planar_sse42;
314 ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc_sse42;
315 ihevc_hbd_intra_pred_chroma_horz_ft ihevc_hbd_intra_pred_chroma_horz_sse42;
316 ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver_sse42;
317 ihevc_hbd_intra_pred_chroma_mode2_ft ihevc_hbd_intra_pred_chroma_mode2_sse42;
318 ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34_sse42;
319 ihevc_hbd_intra_pred_chroma_mode_3_to_9_ft ihevc_hbd_intra_pred_chroma_mode_3_to_9_sse42;
320 ihevc_hbd_intra_pred_chroma_mode_11_to_17_ft ihevc_hbd_intra_pred_chroma_mode_11_to_17_sse42;
321 ihevc_hbd_intra_pred_chroma_mode_19_to_25_ft ihevc_hbd_intra_pred_chroma_mode_19_to_25_sse42;
322 ihevc_hbd_intra_pred_chroma_mode_27_to_33_ft ihevc_hbd_intra_pred_chroma_mode_27_to_33_sse42;
323 ihevc_hbd_intra_pred_chroma_ref_substitution_ft ihevc_hbd_intra_pred_chroma_ref_substitution_sse42;
324 
325 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_a9a;
326 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_a9a;
327 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_a9a;
328 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_a9a;
329 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_a9a;
330 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_a9a;
331 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_a9a;
332 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_a9a;
333 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_a9a;
334 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_a9a;
335 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_a9a;
336 
337 /* AVX function declaration*/
338 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_avx;
339 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_avx;
340 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_avx;
341 
342 ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc_avx;
343 ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34_avx;
344 ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver_avx;
345 
346 /* armv8 function declarations */
347 ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_av8;
348 ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_av8;
349 ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_av8;
350 ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_av8;
351 ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_av8;
352 ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_av8;
353 ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_av8;
354 ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_av8;
355 ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_av8;
356 ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_av8;
357 ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_av8;
358 #endif /* IHEVC_CHROMA_INTRA_PRED_H_ */
359