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/*****************************************************************************/
42typedef 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
50typedef 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
58typedef 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
66typedef 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
74typedef 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
82typedef 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
90typedef 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
98typedef 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
106typedef 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
114typedef 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
122typedef 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
131typedef 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
140typedef 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
149typedef 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
157typedef 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
166typedef 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
176typedef 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
184typedef 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
193typedef 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
203typedef 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
212typedef 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
221typedef 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 */
232ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar;
233ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc;
234ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz;
235ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver;
236ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2;
237ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34;
238ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9;
239ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17;
240ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25;
241ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33;
242ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution;
243
244ihevc_hbd_intra_pred_chroma_planar_ft ihevc_hbd_intra_pred_chroma_planar;
245ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc;
246ihevc_hbd_intra_pred_chroma_horz_ft ihevc_hbd_intra_pred_chroma_horz;
247ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver;
248ihevc_hbd_intra_pred_chroma_mode2_ft ihevc_hbd_intra_pred_chroma_mode2;
249ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34;
250ihevc_hbd_intra_pred_chroma_mode_3_to_9_ft ihevc_hbd_intra_pred_chroma_mode_3_to_9;
251ihevc_hbd_intra_pred_chroma_mode_11_to_17_ft ihevc_hbd_intra_pred_chroma_mode_11_to_17;
252ihevc_hbd_intra_pred_chroma_mode_19_to_25_ft ihevc_hbd_intra_pred_chroma_mode_19_to_25;
253ihevc_hbd_intra_pred_chroma_mode_27_to_33_ft ihevc_hbd_intra_pred_chroma_mode_27_to_33;
254ihevc_hbd_intra_pred_chroma_ref_substitution_ft ihevc_hbd_intra_pred_chroma_ref_substitution;
255
256/* C function declarations */
257ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar;
258ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc;
259ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz;
260ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver;
261ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2;
262ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34;
263ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9;
264ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17;
265ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25;
266ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33;
267ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution;
268
269/* A9Q function declarations */
270ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_a9q;
271ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_a9q;
272ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_a9q;
273ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_a9q;
274ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_a9q;
275ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_a9q;
276ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_a9q;
277ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_a9q;
278ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_a9q;
279ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_a9q;
280ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_a9q;
281
282/* SSE4.2 function declarations */
283ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_neonintr;
284ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_neonintr;
285ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_neonintr;
286ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_neonintr;
287ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_neonintr;
288ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_neonintr;
289ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_neonintr;
290ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_neonintr;
291ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_neonintr;
292ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_neonintr;
293ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_neonintr;
294
295/* SSSE3 function declarations */
296ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_ssse3;
297ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_ssse3;
298ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_ssse3;
299ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_ssse3;
300ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_ssse3;
301ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_ssse3;
302ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_ssse3;
303ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_ssse3;
304ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_ssse3;
305ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_ssse3;
306ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_ssse3;
307
308/* SSE4.2 function declarations */
309ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_sse42;
310ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_sse42;
311ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_sse42;
312
313ihevc_hbd_intra_pred_chroma_planar_ft ihevc_hbd_intra_pred_chroma_planar_sse42;
314ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc_sse42;
315ihevc_hbd_intra_pred_chroma_horz_ft ihevc_hbd_intra_pred_chroma_horz_sse42;
316ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver_sse42;
317ihevc_hbd_intra_pred_chroma_mode2_ft ihevc_hbd_intra_pred_chroma_mode2_sse42;
318ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34_sse42;
319ihevc_hbd_intra_pred_chroma_mode_3_to_9_ft ihevc_hbd_intra_pred_chroma_mode_3_to_9_sse42;
320ihevc_hbd_intra_pred_chroma_mode_11_to_17_ft ihevc_hbd_intra_pred_chroma_mode_11_to_17_sse42;
321ihevc_hbd_intra_pred_chroma_mode_19_to_25_ft ihevc_hbd_intra_pred_chroma_mode_19_to_25_sse42;
322ihevc_hbd_intra_pred_chroma_mode_27_to_33_ft ihevc_hbd_intra_pred_chroma_mode_27_to_33_sse42;
323ihevc_hbd_intra_pred_chroma_ref_substitution_ft ihevc_hbd_intra_pred_chroma_ref_substitution_sse42;
324
325ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_a9a;
326ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_a9a;
327ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_a9a;
328ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_a9a;
329ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_a9a;
330ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_a9a;
331ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_a9a;
332ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_a9a;
333ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_a9a;
334ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_a9a;
335ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_a9a;
336
337/* AVX function declaration*/
338ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_avx;
339ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_avx;
340ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_avx;
341
342ihevc_hbd_intra_pred_chroma_dc_ft ihevc_hbd_intra_pred_chroma_dc_avx;
343ihevc_hbd_intra_pred_chroma_mode_18_34_ft ihevc_hbd_intra_pred_chroma_mode_18_34_avx;
344ihevc_hbd_intra_pred_chroma_ver_ft ihevc_hbd_intra_pred_chroma_ver_avx;
345
346/* armv8 function declarations */
347ihevc_intra_pred_chroma_planar_ft ihevc_intra_pred_chroma_planar_av8;
348ihevc_intra_pred_chroma_dc_ft ihevc_intra_pred_chroma_dc_av8;
349ihevc_intra_pred_chroma_horz_ft ihevc_intra_pred_chroma_horz_av8;
350ihevc_intra_pred_chroma_ver_ft ihevc_intra_pred_chroma_ver_av8;
351ihevc_intra_pred_chroma_mode2_ft ihevc_intra_pred_chroma_mode2_av8;
352ihevc_intra_pred_chroma_mode_18_34_ft ihevc_intra_pred_chroma_mode_18_34_av8;
353ihevc_intra_pred_chroma_mode_3_to_9_ft ihevc_intra_pred_chroma_mode_3_to_9_av8;
354ihevc_intra_pred_chroma_mode_11_to_17_ft ihevc_intra_pred_chroma_mode_11_to_17_av8;
355ihevc_intra_pred_chroma_mode_19_to_25_ft ihevc_intra_pred_chroma_mode_19_to_25_av8;
356ihevc_intra_pred_chroma_mode_27_to_33_ft ihevc_intra_pred_chroma_mode_27_to_33_av8;
357ihevc_intra_pred_chroma_ref_substitution_ft ihevc_intra_pred_chroma_ref_substitution_av8;
358#endif /* IHEVC_CHROMA_INTRA_PRED_H_ */
359