xref: /aosp_15_r20/external/libhevc/common/ihevc_resi_trans.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar /**
21*c83a76b0SSuyog Pawar *******************************************************************************
22*c83a76b0SSuyog Pawar * @file
23*c83a76b0SSuyog Pawar *  ihevc_resi_trans.h
24*c83a76b0SSuyog Pawar *
25*c83a76b0SSuyog Pawar * @brief
26*c83a76b0SSuyog Pawar *  Functions declarations for residue and forward transform
27*c83a76b0SSuyog Pawar *
28*c83a76b0SSuyog Pawar * @author
29*c83a76b0SSuyog Pawar *  Ittiam
30*c83a76b0SSuyog Pawar *
31*c83a76b0SSuyog Pawar * @remarks
32*c83a76b0SSuyog Pawar *  None
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar *******************************************************************************
35*c83a76b0SSuyog Pawar */
36*c83a76b0SSuyog Pawar #ifndef _IHEVC_RESI_TRANS_H_
37*c83a76b0SSuyog Pawar #define _IHEVC_RESI_TRANS_H_
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_resi_trans_4x4_ttype1_ft(UWORD8 *pu1_src,
40*c83a76b0SSuyog Pawar                                     UWORD8 *pu1_pred,
41*c83a76b0SSuyog Pawar                                     WORD32 *pi4_temp,
42*c83a76b0SSuyog Pawar                                     WORD16 *pi2_dst,
43*c83a76b0SSuyog Pawar                                     WORD32 src_strd,
44*c83a76b0SSuyog Pawar                                     WORD32 pred_strd,
45*c83a76b0SSuyog Pawar                                     WORD32 dst_strd,
46*c83a76b0SSuyog Pawar                                     CHROMA_PLANE_ID_T e_chroma_plane);
47*c83a76b0SSuyog Pawar 
48*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_hbd_resi_trans_4x4_ttype1_ft(UWORD16 *pu2_src,
49*c83a76b0SSuyog Pawar                                     UWORD16 *pu2_pred,
50*c83a76b0SSuyog Pawar                                     WORD32 *pi4_temp,
51*c83a76b0SSuyog Pawar                                     WORD16 *pi2_dst,
52*c83a76b0SSuyog Pawar                                     WORD32 src_strd,
53*c83a76b0SSuyog Pawar                                     WORD32 pred_strd,
54*c83a76b0SSuyog Pawar                                     WORD32 dst_strd,
55*c83a76b0SSuyog Pawar                                     CHROMA_PLANE_ID_T e_chroma_plane,
56*c83a76b0SSuyog Pawar                                     UWORD8 bit_depth);
57*c83a76b0SSuyog Pawar 
58*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_resi_trans_4x4_ft(UWORD8 *pu1_src,
59*c83a76b0SSuyog Pawar                              UWORD8 *pu1_pred,
60*c83a76b0SSuyog Pawar                              WORD32 *pi4_temp,
61*c83a76b0SSuyog Pawar                              WORD16 *pi2_dst,
62*c83a76b0SSuyog Pawar                              WORD32 src_strd,
63*c83a76b0SSuyog Pawar                              WORD32 pred_strd,
64*c83a76b0SSuyog Pawar                              WORD32 dst_strd,
65*c83a76b0SSuyog Pawar                              CHROMA_PLANE_ID_T e_chroma_plane);
66*c83a76b0SSuyog Pawar 
67*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_hbd_resi_trans_4x4_ft
68*c83a76b0SSuyog Pawar     (
69*c83a76b0SSuyog Pawar     UWORD16 *pu2_src,
70*c83a76b0SSuyog Pawar     UWORD16 *pu2_pred,
71*c83a76b0SSuyog Pawar     WORD32 *pi4_temp,
72*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
73*c83a76b0SSuyog Pawar     WORD32 src_strd,
74*c83a76b0SSuyog Pawar     WORD32 pred_strd,
75*c83a76b0SSuyog Pawar     WORD32 dst_strd_chr_flag,
76*c83a76b0SSuyog Pawar     UWORD8 bit_depth
77*c83a76b0SSuyog Pawar     );
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_resi_trans_8x8_ft(UWORD8 *pu1_src,
80*c83a76b0SSuyog Pawar                              UWORD8 *pu1_pred,
81*c83a76b0SSuyog Pawar                              WORD32 *pi4_temp,
82*c83a76b0SSuyog Pawar                              WORD16 *pi2_dst,
83*c83a76b0SSuyog Pawar                              WORD32 src_strd,
84*c83a76b0SSuyog Pawar                              WORD32 pred_strd,
85*c83a76b0SSuyog Pawar                              WORD32 dst_strd,
86*c83a76b0SSuyog Pawar                              CHROMA_PLANE_ID_T e_chroma_plane);
87*c83a76b0SSuyog Pawar 
88*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_hbd_resi_trans_8x8_ft
89*c83a76b0SSuyog Pawar     (
90*c83a76b0SSuyog Pawar     UWORD16 *pu2_src,
91*c83a76b0SSuyog Pawar     UWORD16 *pu2_pred,
92*c83a76b0SSuyog Pawar     WORD32 *pi4_temp,
93*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
94*c83a76b0SSuyog Pawar     WORD32 src_strd,
95*c83a76b0SSuyog Pawar     WORD32 pred_strd,
96*c83a76b0SSuyog Pawar     WORD32 dst_strd_chr_flag,
97*c83a76b0SSuyog Pawar     UWORD8 bit_depth
98*c83a76b0SSuyog Pawar     );
99*c83a76b0SSuyog Pawar 
100*c83a76b0SSuyog Pawar 
101*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_resi_trans_16x16_ft(UWORD8 *pu1_src,
102*c83a76b0SSuyog Pawar                                UWORD8 *pu1_pred,
103*c83a76b0SSuyog Pawar                                WORD32 *pi4_temp,
104*c83a76b0SSuyog Pawar                                WORD16 *pi2_dst,
105*c83a76b0SSuyog Pawar                                WORD32 src_strd,
106*c83a76b0SSuyog Pawar                                WORD32 pred_strd,
107*c83a76b0SSuyog Pawar                                WORD32 dst_strd,
108*c83a76b0SSuyog Pawar                                CHROMA_PLANE_ID_T e_chroma_plane);
109*c83a76b0SSuyog Pawar 
110*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_hbd_resi_trans_16x16_ft(UWORD16 *pu2_src,
111*c83a76b0SSuyog Pawar                                UWORD16 *pu2_pred,
112*c83a76b0SSuyog Pawar                                WORD32 *pi4_temp,
113*c83a76b0SSuyog Pawar                                WORD16 *pi2_dst,
114*c83a76b0SSuyog Pawar                                WORD32 src_strd,
115*c83a76b0SSuyog Pawar                                WORD32 pred_strd,
116*c83a76b0SSuyog Pawar                                WORD32 dst_strd,
117*c83a76b0SSuyog Pawar                                CHROMA_PLANE_ID_T e_chroma_plane,
118*c83a76b0SSuyog Pawar                                UWORD8 bit_depth);
119*c83a76b0SSuyog Pawar 
120*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_resi_trans_32x32_ft(UWORD8 *pu1_src,
121*c83a76b0SSuyog Pawar                                UWORD8 *pu1_pred,
122*c83a76b0SSuyog Pawar                                WORD32 *pi4_temp,
123*c83a76b0SSuyog Pawar                                WORD16 *pi2_dst,
124*c83a76b0SSuyog Pawar                                WORD32 src_strd,
125*c83a76b0SSuyog Pawar                                WORD32 pred_strd,
126*c83a76b0SSuyog Pawar                                WORD32 dst_strd,
127*c83a76b0SSuyog Pawar                                CHROMA_PLANE_ID_T e_chroma_plane);
128*c83a76b0SSuyog Pawar 
129*c83a76b0SSuyog Pawar typedef UWORD32 ihevc_hbd_resi_trans_32x32_ft(UWORD16 *pu2_src,
130*c83a76b0SSuyog Pawar                                UWORD16 *pu2_pred,
131*c83a76b0SSuyog Pawar                                WORD32 *pi4_temp,
132*c83a76b0SSuyog Pawar                                WORD16 *pi2_dst,
133*c83a76b0SSuyog Pawar                                WORD32 src_strd,
134*c83a76b0SSuyog Pawar                                WORD32 pred_strd,
135*c83a76b0SSuyog Pawar                                WORD32 dst_strd,
136*c83a76b0SSuyog Pawar                                CHROMA_PLANE_ID_T e_chroma_plane,
137*c83a76b0SSuyog Pawar                                UWORD8 bit_depth);
138*c83a76b0SSuyog Pawar 
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar typedef void ihevc_resi_trans_4x4_16bit_ft(WORD16 *pi2_src,
141*c83a76b0SSuyog Pawar                           UWORD8 *pu1_pred,
142*c83a76b0SSuyog Pawar                           WORD16 *pi2_tmp,
143*c83a76b0SSuyog Pawar                           WORD16 *pi2_dst,
144*c83a76b0SSuyog Pawar                           WORD32 src_strd,
145*c83a76b0SSuyog Pawar                           WORD32 pred_strd,
146*c83a76b0SSuyog Pawar                           WORD32 dst_strd);
147*c83a76b0SSuyog Pawar 
148*c83a76b0SSuyog Pawar typedef void ihevc_resi_trans_8x8_16bit_ft(WORD16 *pi2_src,
149*c83a76b0SSuyog Pawar                           UWORD8 *pu1_pred,
150*c83a76b0SSuyog Pawar                           WORD16 *pi2_tmp,
151*c83a76b0SSuyog Pawar                           WORD16 *pi2_dst,
152*c83a76b0SSuyog Pawar                           WORD32 src_strd,
153*c83a76b0SSuyog Pawar                           WORD32 pred_strd,
154*c83a76b0SSuyog Pawar                           WORD32 dst_strd);
155*c83a76b0SSuyog Pawar 
156*c83a76b0SSuyog Pawar typedef void ihevc_resi_trans_16x16_16bit_ft(WORD16 *pi2_src,
157*c83a76b0SSuyog Pawar                             UWORD8 *pu1_pred,
158*c83a76b0SSuyog Pawar                             WORD16 *pi2_tmp,
159*c83a76b0SSuyog Pawar                             WORD16 *pi2_dst,
160*c83a76b0SSuyog Pawar                             WORD32 src_strd,
161*c83a76b0SSuyog Pawar                             WORD32 pred_strd,
162*c83a76b0SSuyog Pawar                             WORD32 dst_strd);
163*c83a76b0SSuyog Pawar 
164*c83a76b0SSuyog Pawar typedef void ihevc_resi_trans_32x32_16bit_ft(WORD16 *pi2_src,
165*c83a76b0SSuyog Pawar                             UWORD8 *pu1_pred,
166*c83a76b0SSuyog Pawar                             WORD16 *pi2_tmp,
167*c83a76b0SSuyog Pawar                             WORD16 *pi2_dst,
168*c83a76b0SSuyog Pawar                             WORD32 src_strd,
169*c83a76b0SSuyog Pawar                             WORD32 pred_strd,
170*c83a76b0SSuyog Pawar                             WORD32 dst_strd);
171*c83a76b0SSuyog Pawar 
172*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ttype1_ft ihevc_resi_trans_4x4_ttype1;
173*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ft ihevc_resi_trans_4x4;
174*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8;
175*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16;
176*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32;
177*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_16bit_ft ihevc_resi_trans_4x4_16bit;
178*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_16bit_ft ihevc_resi_trans_8x8_16bit;
179*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_16bit_ft ihevc_resi_trans_16x16_16bit;
180*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_16bit_ft ihevc_resi_trans_32x32_16bit;
181*c83a76b0SSuyog Pawar 
182*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ttype1_ft ihevc_resi_trans_4x4_ttype1_sse42;
183*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ft ihevc_resi_trans_4x4_sse42;
184*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8_sse42;
185*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16_sse42;
186*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32_sse42;
187*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_16bit_ft ihevc_resi_trans_4x4_16bit_sse42;
188*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_16bit_ft ihevc_resi_trans_8x8_16bit_sse42;
189*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_16bit_ft ihevc_resi_trans_16x16_16bit_sse42;
190*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_16bit_ft ihevc_resi_trans_32x32_16bit_sse42;
191*c83a76b0SSuyog Pawar 
192*c83a76b0SSuyog Pawar 
193*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ttype1_ft ihevc_resi_trans_4x4_ttype1_avx;
194*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ft ihevc_resi_trans_4x4_avx;
195*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8_avx;
196*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16_avx;
197*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32_avx;
198*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_16bit_ft ihevc_resi_trans_4x4_16bit_avx;
199*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_16bit_ft ihevc_resi_trans_8x8_16bit_avx;
200*c83a76b0SSuyog Pawar 
201*c83a76b0SSuyog Pawar #ifndef  DISABLE_AVX2
202*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8_avx2;
203*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16_avx2;
204*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32_avx2;
205*c83a76b0SSuyog Pawar #endif
206*c83a76b0SSuyog Pawar 
207*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ttype1_ft ihevc_hbd_resi_trans_4x4_ttype1;
208*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ft ihevc_hbd_resi_trans_4x4;
209*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_8x8_ft ihevc_hbd_resi_trans_8x8;
210*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_16x16_ft ihevc_hbd_resi_trans_16x16;
211*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_32x32_ft ihevc_hbd_resi_trans_32x32;
212*c83a76b0SSuyog Pawar 
213*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ttype1_ft ihevc_hbd_resi_trans_4x4_ttype1_sse42;
214*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ft ihevc_hbd_resi_trans_4x4_sse42;
215*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_8x8_ft ihevc_hbd_resi_trans_8x8_sse42;
216*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_16x16_ft ihevc_hbd_resi_trans_16x16_sse42;
217*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_32x32_ft ihevc_hbd_resi_trans_32x32_sse42;
218*c83a76b0SSuyog Pawar 
219*c83a76b0SSuyog Pawar 
220*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ttype1_ft ihevc_hbd_resi_trans_4x4_ttype1_avx;
221*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_4x4_ft ihevc_hbd_resi_trans_4x4_avx;
222*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_8x8_ft ihevc_hbd_resi_trans_8x8_avx;
223*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_16x16_ft ihevc_hbd_resi_trans_16x16_avx;
224*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_32x32_ft ihevc_hbd_resi_trans_32x32_avx;
225*c83a76b0SSuyog Pawar 
226*c83a76b0SSuyog Pawar /* AVX2 declarations */
227*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_8x8_ft ihevc_hbd_resi_trans_8x8_avx2;
228*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_16x16_ft ihevc_hbd_resi_trans_16x16_avx2;
229*c83a76b0SSuyog Pawar ihevc_hbd_resi_trans_32x32_ft ihevc_hbd_resi_trans_32x32_avx2;
230*c83a76b0SSuyog Pawar 
231*c83a76b0SSuyog Pawar /*A9 declarations*/
232*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16_a9q;
233*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ft ihevc_resi_trans_4x4_a9q;
234*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8_a9q;
235*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ttype1_ft ihevc_resi_trans_4x4_ttype1_a9q;
236*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32_a9q;
237*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ft ihevc_resi_trans_4x4_neon;
238*c83a76b0SSuyog Pawar ihevc_resi_trans_4x4_ttype1_ft ihevc_resi_trans_4x4_ttype1_neon;
239*c83a76b0SSuyog Pawar ihevc_resi_trans_8x8_ft ihevc_resi_trans_8x8_neon;
240*c83a76b0SSuyog Pawar ihevc_resi_trans_16x16_ft ihevc_resi_trans_16x16_neon;
241*c83a76b0SSuyog Pawar ihevc_resi_trans_32x32_ft ihevc_resi_trans_32x32_neon;
242*c83a76b0SSuyog Pawar 
243*c83a76b0SSuyog Pawar #endif /*_IHEVC_RESI_TRANS_H_*/
244