xref: /aosp_15_r20/external/libavc/common/ih264_intra_pred_filters.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
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 *******************************************************************************
23 * @file
24 *  ih264_intra_pred_filters.h
25 *
26 * @brief
27 *  Declarations of functions used for intra prediction
28 *
29 * @author
30 *  ittiam
31 *
32 * @remarks
33 *  none
34 *
35 *******************************************************************************
36 */
37 
38 #ifndef _IH264_INTRA_PRED_FILTERS_H_
39 #define _IH264_INTRA_PRED_FILTERS_H_
40 
41 /*****************************************************************************/
42 /*  Function Macros                                                          */
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 
48 /*! Filter (1,1) i.e (a + b) / 2 */
49 #define FILT11(a,b) ((a + b + 1) >> 1)
50 
51 /*****************************************************************************/
52 /*  Global Variables                                                        */
53 /*****************************************************************************/
54 /* Note: Global variables used only in assembly files */
55 extern const WORD8  ih264_gai1_intrapred_luma_plane_coeffs[];
56 extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs1[];
57 extern const WORD8  ih264_gai1_intrapred_chroma_plane_coeffs2[];
58 extern const WORD8  ih264_gai1_intrapred_luma_8x8_horz_u[];
59 
60 /*****************************************************************************/
61 /* Extern Function Declarations                                              */
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 typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft;
78 
79 /* C Declarations */
80 /* Luma 4x4 Intra pred filters */
81 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert;
82 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz;
83 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc;
84 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl;
85 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr;
86 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r;
87 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d;
88 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l;
89 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u;
90 /* Luma 8x8 Intra pred filters */
91 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert;
92 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz;
93 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc;
94 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl;
95 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr;
96 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r;
97 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d;
98 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l;
99 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u;
100 /* Luma 16x16 Intra pred filters */
101 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert;
102 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz;
103 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc;
104 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane;
105 /* Chroma 8x8 Intra pred filters */
106 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc;
107 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz;
108 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert;
109 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane;
110 ih264_intra_pred_ref_filtering_ft  ih264_intra_pred_luma_8x8_mode_ref_filtering;
111 
112 /* A9 Declarations */
113 /* Luma 4x4 Intra pred filters */
114 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_a9q;
115 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_a9q;
116 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_a9q;
117 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_a9q;
118 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_a9q;
119 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_a9q;
120 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_a9q;
121 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_a9q;
122 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_a9q;
123 /* Luma 8x8 Intra pred filters */
124 ih264_intra_pred_ref_filtering_ft  ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q;
125 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_a9q;
126 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_a9q;
127 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_a9q;
128 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_a9q;
129 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_a9q;
130 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_a9q;
131 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_a9q;
132 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_a9q;
133 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_a9q;
134 /* Luma 16x16 Intra pred filters */
135 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_a9q;
136 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_a9q;
137 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_a9q;
138 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_a9q;
139 /* Chroma 8x8 Intra pred filters */
140 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q;
141 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q;
142 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q;
143 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_a9q;
144 
145 /* SSSE3 Intrinsic Declarationss */
146 /* Luma 4x4 Intra pred filters */
147 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_ssse3;
148 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_ssse3;
149 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_ssse3;
150 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3;
151 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3;
152 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_ssse3;
153 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_ssse3;
154 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_ssse3;
155 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_ssse3;
156 /* Luma 8x8 Intra pred filters */
157 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_ssse3;
158 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_ssse3;
159 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_ssse3;
160 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3;
161 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3;
162 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_ssse3;
163 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_ssse3;
164 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_ssse3;
165 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_ssse3;
166 /* Luma 16x16 Intra pred filters */
167 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_ssse3;
168 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_ssse3;
169 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_ssse3;
170 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_ssse3;
171 /* Chroma 8x8 Intra pred filters */
172 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3;
173 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3;
174 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3;
175 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3;
176 
177 /* AV8 Declarations */
178 /* Luma 4x4 Intra pred filters */
179 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_av8;
180 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_av8;
181 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_dc_av8;
182 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dl_av8;
183 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_diag_dr_av8;
184 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_r_av8;
185 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_d_av8;
186 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_vert_l_av8;
187 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_4x4_mode_horz_u_av8;
188 /* Luma 8x8 Intra pred filters */
189 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_av8;
190 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_av8;
191 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_dc_av8;
192 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dl_av8;
193 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_diag_dr_av8;
194 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_r_av8;
195 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_d_av8;
196 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_vert_l_av8;
197 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_8x8_mode_horz_u_av8;
198 /* Luma 16x16 Intra pred filters */
199 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_vert_av8;
200 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_horz_av8;
201 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_dc_av8;
202 ih264_intra_pred_luma_ft  ih264_intra_pred_luma_16x16_mode_plane_av8;
203 /* Chroma 8x8 Intra pred filters */
204 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8;
205 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8;
206 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8;
207 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8;
208 
209 #endif /* _IH264_INTRA_PRED_FILTERS_H_ */
210