xref: /aosp_15_r20/external/libhevc/encoder/ihevce_had_satd.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 ihevce_had_satd.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    This file contains function prototypes of HAD and SATD functions
26*c83a76b0SSuyog Pawar *
27*c83a76b0SSuyog Pawar * \date
28*c83a76b0SSuyog Pawar *    18/09/2012
29*c83a76b0SSuyog Pawar *
30*c83a76b0SSuyog Pawar * \author
31*c83a76b0SSuyog Pawar *    Ittiam
32*c83a76b0SSuyog Pawar *
33*c83a76b0SSuyog Pawar ******************************************************************************
34*c83a76b0SSuyog Pawar */
35*c83a76b0SSuyog Pawar 
36*c83a76b0SSuyog Pawar #ifndef _IHEVCE_HAD_SATD_H_
37*c83a76b0SSuyog Pawar #define _IHEVCE_HAD_SATD_H_
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar /*****************************************************************************/
40*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
41*c83a76b0SSuyog Pawar /*****************************************************************************/
42*c83a76b0SSuyog Pawar 
43*c83a76b0SSuyog Pawar /*****************************************************************************/
44*c83a76b0SSuyog Pawar /* Function Macros                                                           */
45*c83a76b0SSuyog Pawar /*****************************************************************************/
46*c83a76b0SSuyog Pawar 
47*c83a76b0SSuyog Pawar /*****************************************************************************/
48*c83a76b0SSuyog Pawar /* Typedefs                                                                  */
49*c83a76b0SSuyog Pawar /*****************************************************************************/
50*c83a76b0SSuyog Pawar 
51*c83a76b0SSuyog Pawar /*****************************************************************************/
52*c83a76b0SSuyog Pawar /* Enums                                                                     */
53*c83a76b0SSuyog Pawar /*****************************************************************************/
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar /* @breif enum for hadamard transform block sizes supported : 4x4 to 32x32 */
56*c83a76b0SSuyog Pawar typedef enum
57*c83a76b0SSuyog Pawar {
58*c83a76b0SSuyog Pawar     HAD_4x4 = 0,
59*c83a76b0SSuyog Pawar     HAD_8x8 = 1,
60*c83a76b0SSuyog Pawar     HAD_16x16 = 2,
61*c83a76b0SSuyog Pawar     HAD_32x32 = 3,
62*c83a76b0SSuyog Pawar     HAD_INVALID = 4
63*c83a76b0SSuyog Pawar } HAD_SIZE_T;
64*c83a76b0SSuyog Pawar 
65*c83a76b0SSuyog Pawar /*****************************************************************************/
66*c83a76b0SSuyog Pawar /* Structure                                                                 */
67*c83a76b0SSuyog Pawar /*****************************************************************************/
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar /*****************************************************************************/
70*c83a76b0SSuyog Pawar /* Extern Function Declarations                                              */
71*c83a76b0SSuyog Pawar /*****************************************************************************/
72*c83a76b0SSuyog Pawar 
73*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_4x4_8bit(
74*c83a76b0SSuyog Pawar     UWORD8 *pu1_origin,
75*c83a76b0SSuyog Pawar     WORD32 src_strd,
76*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred_buf,
77*c83a76b0SSuyog Pawar     WORD32 pred_strd,
78*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
79*c83a76b0SSuyog Pawar     WORD32 dst_strd);
80*c83a76b0SSuyog Pawar 
81*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_8x8_8bit(
82*c83a76b0SSuyog Pawar     UWORD8 *pu1_origin,
83*c83a76b0SSuyog Pawar     WORD32 src_strd,
84*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred_buf,
85*c83a76b0SSuyog Pawar     WORD32 pred_strd,
86*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
87*c83a76b0SSuyog Pawar     WORD32 dst_strd);
88*c83a76b0SSuyog Pawar 
89*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_ac_had_8x8_8bit(
90*c83a76b0SSuyog Pawar     UWORD8 *pu1_origin,
91*c83a76b0SSuyog Pawar     WORD32 src_strd,
92*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred_buf,
93*c83a76b0SSuyog Pawar     WORD32 pred_strd,
94*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
95*c83a76b0SSuyog Pawar     WORD32 dst_strd);
96*c83a76b0SSuyog Pawar 
97*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_16x16_8bit(
98*c83a76b0SSuyog Pawar     UWORD8 *pu1_origin,
99*c83a76b0SSuyog Pawar     WORD32 src_strd,
100*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred_buf,
101*c83a76b0SSuyog Pawar     WORD32 pred_strd,
102*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
103*c83a76b0SSuyog Pawar     WORD32 dst_strd);
104*c83a76b0SSuyog Pawar 
105*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_32x32_8bit(
106*c83a76b0SSuyog Pawar     UWORD8 *pu1_origin,
107*c83a76b0SSuyog Pawar     WORD32 src_strd,
108*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred_buf,
109*c83a76b0SSuyog Pawar     WORD32 pred_strd,
110*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
111*c83a76b0SSuyog Pawar     WORD32 dst_strd);
112*c83a76b0SSuyog Pawar 
113*c83a76b0SSuyog Pawar typedef WORD32 FT_HAD_16X16_R(
114*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
115*c83a76b0SSuyog Pawar     WORD32 src_strd,
116*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
117*c83a76b0SSuyog Pawar     WORD32 pred_strd,
118*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
119*c83a76b0SSuyog Pawar     WORD32 dst_strd,
120*c83a76b0SSuyog Pawar     WORD32 **ppi4_hsad,
121*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_split,
122*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_early_cbf,
123*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
124*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row,
125*c83a76b0SSuyog Pawar     WORD32 lambda,
126*c83a76b0SSuyog Pawar     WORD32 lambda_q_shift,
127*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
128*c83a76b0SSuyog Pawar     WORD32 i4_cur_depth,
129*c83a76b0SSuyog Pawar     WORD32 i4_max_depth,
130*c83a76b0SSuyog Pawar     WORD32 i4_max_tr_size,
131*c83a76b0SSuyog Pawar     WORD32 *pi4_tu_split_cost,
132*c83a76b0SSuyog Pawar     void *pv_func_sel);
133*c83a76b0SSuyog Pawar 
134*c83a76b0SSuyog Pawar typedef UWORD32 FT_HAD_32X32_USING_16X16(
135*c83a76b0SSuyog Pawar     WORD16 *pi2_16x16_had,
136*c83a76b0SSuyog Pawar     WORD32 had16_strd,
137*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
138*c83a76b0SSuyog Pawar     WORD32 dst_strd,
139*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
140*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
141*c83a76b0SSuyog Pawar 
142*c83a76b0SSuyog Pawar typedef UWORD32 ihevce_compute_16x16HAD_using_8x8_ft(
143*c83a76b0SSuyog Pawar     WORD16 *pi2_8x8_had,
144*c83a76b0SSuyog Pawar     WORD32 had8_strd,
145*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
146*c83a76b0SSuyog Pawar     WORD32 dst_strd,
147*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
148*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
149*c83a76b0SSuyog Pawar 
150*c83a76b0SSuyog Pawar typedef WORD32 FT_HAD_8X8_USING_4_4X4_R(
151*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
152*c83a76b0SSuyog Pawar     WORD32 src_strd,
153*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
154*c83a76b0SSuyog Pawar     WORD32 pred_strd,
155*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
156*c83a76b0SSuyog Pawar     WORD32 dst_strd,
157*c83a76b0SSuyog Pawar     WORD32 **ppi4_hsad,
158*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_split,
159*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_early_cbf,
160*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
161*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row,
162*c83a76b0SSuyog Pawar     WORD32 lambda,
163*c83a76b0SSuyog Pawar     WORD32 lambda_q_shift,
164*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
165*c83a76b0SSuyog Pawar     WORD32 i4_cur_depth,
166*c83a76b0SSuyog Pawar     WORD32 i4_max_depth,
167*c83a76b0SSuyog Pawar     WORD32 i4_max_tr_size,
168*c83a76b0SSuyog Pawar     WORD32 *pi4_tu_split_cost,
169*c83a76b0SSuyog Pawar     void *pv_func_sel);
170*c83a76b0SSuyog Pawar 
171*c83a76b0SSuyog Pawar WORD32 ihevce_had_16x16_r_noise_detect(
172*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
173*c83a76b0SSuyog Pawar     WORD32 src_strd,
174*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
175*c83a76b0SSuyog Pawar     WORD32 pred_strd,
176*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
177*c83a76b0SSuyog Pawar     WORD32 dst_strd,
178*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
179*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row,
180*c83a76b0SSuyog Pawar     WORD32 scaling_for_pred);
181*c83a76b0SSuyog Pawar 
182*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_8x8HAD_using_4x4_noise_detect(
183*c83a76b0SSuyog Pawar     WORD16 *pi2_4x4_had,
184*c83a76b0SSuyog Pawar     WORD32 had4_strd,
185*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
186*c83a76b0SSuyog Pawar     WORD32 dst_strd,
187*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
188*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
189*c83a76b0SSuyog Pawar void ihevce_had4_4x4_noise_detect(
190*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
191*c83a76b0SSuyog Pawar     WORD32 src_strd,
192*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
193*c83a76b0SSuyog Pawar     WORD32 pred_strd,
194*c83a76b0SSuyog Pawar     WORD16 *pi2_dst4x4,
195*c83a76b0SSuyog Pawar     WORD16 *pi2_residue,
196*c83a76b0SSuyog Pawar     WORD32 dst_strd,
197*c83a76b0SSuyog Pawar     WORD32 scaling_for_pred);
198*c83a76b0SSuyog Pawar 
199*c83a76b0SSuyog Pawar void ihevce_had_8x8_using_4_4x4_noise_detect(
200*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
201*c83a76b0SSuyog Pawar     WORD32 src_strd,
202*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
203*c83a76b0SSuyog Pawar     WORD32 pred_strd,
204*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
205*c83a76b0SSuyog Pawar     WORD32 dst_strd,
206*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
207*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row,
208*c83a76b0SSuyog Pawar     WORD32 scaling_for_pred);
209*c83a76b0SSuyog Pawar 
210*c83a76b0SSuyog Pawar void ihevce_had_8x8_using_4_4x4(
211*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
212*c83a76b0SSuyog Pawar     WORD32 src_strd,
213*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
214*c83a76b0SSuyog Pawar     WORD32 pred_strd,
215*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
216*c83a76b0SSuyog Pawar     WORD32 dst_strd,
217*c83a76b0SSuyog Pawar     WORD32 **ppi4_hsad,
218*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
219*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row);
220*c83a76b0SSuyog Pawar 
221*c83a76b0SSuyog Pawar typedef void ihevce_had_nxn_r_ft(
222*c83a76b0SSuyog Pawar     UWORD8 *pu1_src,
223*c83a76b0SSuyog Pawar     WORD32 src_strd,
224*c83a76b0SSuyog Pawar     UWORD8 *pu1_pred,
225*c83a76b0SSuyog Pawar     WORD32 pred_strd,
226*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
227*c83a76b0SSuyog Pawar     WORD32 dst_strd,
228*c83a76b0SSuyog Pawar     WORD32 **ppi4_hsad,
229*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_split,
230*c83a76b0SSuyog Pawar     WORD32 **ppi4_tu_early_cbf,
231*c83a76b0SSuyog Pawar     WORD32 pos_x_y_4x4,
232*c83a76b0SSuyog Pawar     WORD32 num_4x4_in_row,
233*c83a76b0SSuyog Pawar     WORD32 lambda,
234*c83a76b0SSuyog Pawar     WORD32 lambda_q_shift,
235*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
236*c83a76b0SSuyog Pawar     WORD32 i4_cur_depth,
237*c83a76b0SSuyog Pawar     WORD32 i4_max_depth,
238*c83a76b0SSuyog Pawar     WORD32 i4_max_tr_size,
239*c83a76b0SSuyog Pawar     WORD32 *pi4_tu_split_cost,
240*c83a76b0SSuyog Pawar     void *pv_func_sel);
241*c83a76b0SSuyog Pawar 
242*c83a76b0SSuyog Pawar UWORD32 ihevce_mat_add_shift_satd_16bit(
243*c83a76b0SSuyog Pawar     WORD16 *pi2_buf1,
244*c83a76b0SSuyog Pawar     WORD32 buf1_strd,
245*c83a76b0SSuyog Pawar     WORD16 *pi2_buf2,
246*c83a76b0SSuyog Pawar     WORD32 buf2_strd,
247*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
248*c83a76b0SSuyog Pawar     WORD32 dst_strd,
249*c83a76b0SSuyog Pawar     WORD32 size,
250*c83a76b0SSuyog Pawar     WORD32 shift,
251*c83a76b0SSuyog Pawar     WORD32 threshold,
252*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
253*c83a76b0SSuyog Pawar 
254*c83a76b0SSuyog Pawar UWORD32 ihevce_mat_sub_shift_satd_16bit(
255*c83a76b0SSuyog Pawar     WORD16 *pi2_buf1,
256*c83a76b0SSuyog Pawar     WORD32 buf1_strd,
257*c83a76b0SSuyog Pawar     WORD16 *pi2_buf2,
258*c83a76b0SSuyog Pawar     WORD32 buf2_strd,
259*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
260*c83a76b0SSuyog Pawar     WORD32 dst_strd,
261*c83a76b0SSuyog Pawar     WORD32 size,
262*c83a76b0SSuyog Pawar     WORD32 shift,
263*c83a76b0SSuyog Pawar     WORD32 threshold,
264*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
265*c83a76b0SSuyog Pawar 
266*c83a76b0SSuyog Pawar void ihevce_mat_add_16bit(
267*c83a76b0SSuyog Pawar     WORD16 *pi2_buf1,
268*c83a76b0SSuyog Pawar     WORD32 buf1_strd,
269*c83a76b0SSuyog Pawar     WORD16 *pi2_buf2,
270*c83a76b0SSuyog Pawar     WORD32 buf2_strd,
271*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
272*c83a76b0SSuyog Pawar     WORD32 dst_strd,
273*c83a76b0SSuyog Pawar     WORD32 size,
274*c83a76b0SSuyog Pawar     WORD32 threshold);
275*c83a76b0SSuyog Pawar 
276*c83a76b0SSuyog Pawar void ihevce_mat_sub_16bit(
277*c83a76b0SSuyog Pawar     WORD16 *pi2_buf1,
278*c83a76b0SSuyog Pawar     WORD32 buf1_strd,
279*c83a76b0SSuyog Pawar     WORD16 *pi2_buf2,
280*c83a76b0SSuyog Pawar     WORD32 buf2_strd,
281*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
282*c83a76b0SSuyog Pawar     WORD32 dst_strd,
283*c83a76b0SSuyog Pawar     WORD32 size,
284*c83a76b0SSuyog Pawar     WORD32 threshold);
285*c83a76b0SSuyog Pawar 
286*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_16x16HAD_using_8x8_noise_detect(
287*c83a76b0SSuyog Pawar     WORD16 *pi2_8x8_had,
288*c83a76b0SSuyog Pawar     WORD32 had8_strd,
289*c83a76b0SSuyog Pawar     WORD16 *pi2_dst,
290*c83a76b0SSuyog Pawar     WORD32 dst_strd,
291*c83a76b0SSuyog Pawar     WORD32 i4_frm_qstep,
292*c83a76b0SSuyog Pawar     WORD32 *pi4_cbf);
293*c83a76b0SSuyog Pawar 
294*c83a76b0SSuyog Pawar /******* C declarations ****************/
295*c83a76b0SSuyog Pawar FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r;
296*c83a76b0SSuyog Pawar FT_HAD_16X16_R ihevce_had_16x16_r;
297*c83a76b0SSuyog Pawar FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16;
298*c83a76b0SSuyog Pawar 
299*c83a76b0SSuyog Pawar /******** A9Q declarations **********/
300*c83a76b0SSuyog Pawar FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r_neon;
301*c83a76b0SSuyog Pawar FT_HAD_16X16_R ihevce_had_16x16_r_neon;
302*c83a76b0SSuyog Pawar FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16_neon;
303*c83a76b0SSuyog Pawar 
304*c83a76b0SSuyog Pawar #endif /* _IHEVCE_HAD_SATD_H_ */
305