1 /*****************************************************************************
2  * pixel.h: msa pixel metrics
3  *****************************************************************************
4  * Copyright (C) 2015-2021 x264 project
5  *
6  * Authors: Mandar Sahastrabuddhe <mandar.sahastrabuddhe@imgtec.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
21  *
22  * This program is also available under a commercial proprietary license.
23  * For more information, contact us at licensing@x264.com.
24  *****************************************************************************/
25 
26 #ifndef X264_MIPS_PIXEL_H
27 #define X264_MIPS_PIXEL_H
28 
29 #define x264_pixel_sad_16x16_msa x264_template(pixel_sad_16x16_msa)
30 int32_t x264_pixel_sad_16x16_msa( uint8_t *p_src, intptr_t i_src_stride,
31                                   uint8_t *p_ref, intptr_t i_ref_stride );
32 #define x264_pixel_sad_16x8_msa x264_template(pixel_sad_16x8_msa)
33 int32_t x264_pixel_sad_16x8_msa( uint8_t *p_src, intptr_t i_src_stride,
34                                  uint8_t *p_ref, intptr_t i_ref_stride );
35 #define x264_pixel_sad_8x16_msa x264_template(pixel_sad_8x16_msa)
36 int32_t x264_pixel_sad_8x16_msa( uint8_t *p_src, intptr_t i_src_stride,
37                                  uint8_t *p_ref, intptr_t i_ref_stride );
38 #define x264_pixel_sad_8x8_msa x264_template(pixel_sad_8x8_msa)
39 int32_t x264_pixel_sad_8x8_msa( uint8_t *p_src, intptr_t i_src_stride,
40                                 uint8_t *p_ref, intptr_t i_ref_stride );
41 #define x264_pixel_sad_8x4_msa x264_template(pixel_sad_8x4_msa)
42 int32_t x264_pixel_sad_8x4_msa( uint8_t *p_src, intptr_t i_src_stride,
43                                 uint8_t *p_ref, intptr_t i_ref_stride );
44 #define x264_pixel_sad_4x16_msa x264_template(pixel_sad_4x16_msa)
45 int32_t x264_pixel_sad_4x16_msa( uint8_t *p_src, intptr_t i_src_stride,
46                                  uint8_t *p_ref, intptr_t i_ref_stride );
47 #define x264_pixel_sad_4x8_msa x264_template(pixel_sad_4x8_msa)
48 int32_t x264_pixel_sad_4x8_msa( uint8_t *p_src, intptr_t i_src_stride,
49                                 uint8_t *p_ref, intptr_t i_ref_stride );
50 #define x264_pixel_sad_4x4_msa x264_template(pixel_sad_4x4_msa)
51 int32_t x264_pixel_sad_4x4_msa( uint8_t *p_src, intptr_t i_src_stride,
52                                 uint8_t *p_ref, intptr_t i_ref_stride );
53 #define x264_pixel_sad_x4_16x16_msa x264_template(pixel_sad_x4_16x16_msa)
54 void x264_pixel_sad_x4_16x16_msa( uint8_t *p_src, uint8_t *p_ref0,
55                                   uint8_t *p_ref1, uint8_t *p_ref2,
56                                   uint8_t *p_ref3, intptr_t i_ref_stride,
57                                   int32_t p_sad_array[4] );
58 #define x264_pixel_sad_x4_16x8_msa x264_template(pixel_sad_x4_16x8_msa)
59 void x264_pixel_sad_x4_16x8_msa( uint8_t *p_src, uint8_t *p_ref0,
60                                  uint8_t *p_ref1, uint8_t *p_ref2,
61                                  uint8_t *p_ref3, intptr_t i_ref_stride,
62                                  int32_t p_sad_array[4] );
63 #define x264_pixel_sad_x4_8x16_msa x264_template(pixel_sad_x4_8x16_msa)
64 void x264_pixel_sad_x4_8x16_msa( uint8_t *p_src, uint8_t *p_ref0,
65                                  uint8_t *p_ref1, uint8_t *p_ref2,
66                                  uint8_t *p_ref3, intptr_t i_ref_stride,
67                                  int32_t p_sad_array[4] );
68 #define x264_pixel_sad_x4_8x8_msa x264_template(pixel_sad_x4_8x8_msa)
69 void x264_pixel_sad_x4_8x8_msa( uint8_t *p_src, uint8_t *p_ref0,
70                                 uint8_t *p_ref1, uint8_t *p_ref2,
71                                 uint8_t *p_ref3, intptr_t i_ref_stride,
72                                 int32_t p_sad_array[4] );
73 #define x264_pixel_sad_x4_8x4_msa x264_template(pixel_sad_x4_8x4_msa)
74 void x264_pixel_sad_x4_8x4_msa( uint8_t *p_src, uint8_t *p_ref0,
75                                 uint8_t *p_ref1, uint8_t *p_ref2,
76                                 uint8_t *p_ref3, intptr_t i_ref_stride,
77                                 int32_t p_sad_array[4] );
78 #define x264_pixel_sad_x4_4x8_msa x264_template(pixel_sad_x4_4x8_msa)
79 void x264_pixel_sad_x4_4x8_msa( uint8_t *p_src, uint8_t *p_ref0,
80                                 uint8_t *p_ref1, uint8_t *p_ref2,
81                                 uint8_t *p_ref3, intptr_t i_ref_stride,
82                                 int32_t p_sad_array[4] );
83 #define x264_pixel_sad_x4_4x4_msa x264_template(pixel_sad_x4_4x4_msa)
84 void x264_pixel_sad_x4_4x4_msa( uint8_t *p_src, uint8_t *p_ref0,
85                                 uint8_t *p_ref1, uint8_t *p_ref2,
86                                 uint8_t *p_ref3, intptr_t i_ref_stride,
87                                 int32_t p_sad_array[4] );
88 #define x264_pixel_sad_x3_16x16_msa x264_template(pixel_sad_x3_16x16_msa)
89 void x264_pixel_sad_x3_16x16_msa( uint8_t *p_src, uint8_t *p_ref0,
90                                   uint8_t *p_ref1, uint8_t *p_ref2,
91                                   intptr_t i_ref_stride,
92                                   int32_t p_sad_array[3] );
93 #define x264_pixel_sad_x3_16x8_msa x264_template(pixel_sad_x3_16x8_msa)
94 void x264_pixel_sad_x3_16x8_msa( uint8_t *p_src, uint8_t *p_ref0,
95                                  uint8_t *p_ref1, uint8_t *p_ref2,
96                                  intptr_t i_ref_stride,
97                                  int32_t p_sad_array[3] );
98 #define x264_pixel_sad_x3_8x16_msa x264_template(pixel_sad_x3_8x16_msa)
99 void x264_pixel_sad_x3_8x16_msa( uint8_t *p_src, uint8_t *p_ref0,
100                                  uint8_t *p_ref1, uint8_t *p_ref2,
101                                  intptr_t i_ref_stride,
102                                  int32_t p_sad_array[3] );
103 #define x264_pixel_sad_x3_8x8_msa x264_template(pixel_sad_x3_8x8_msa)
104 void x264_pixel_sad_x3_8x8_msa( uint8_t *p_src, uint8_t *p_ref0,
105                                 uint8_t *p_ref1, uint8_t *p_ref2,
106                                 intptr_t i_ref_stride,
107                                 int32_t p_sad_array[3] );
108 #define x264_pixel_sad_x3_8x4_msa x264_template(pixel_sad_x3_8x4_msa)
109 void x264_pixel_sad_x3_8x4_msa( uint8_t *p_src, uint8_t *p_ref0,
110                                 uint8_t *p_ref1, uint8_t *p_ref2,
111                                 intptr_t i_ref_stride,
112                                 int32_t p_sad_array[3] );
113 #define x264_pixel_sad_x3_4x8_msa x264_template(pixel_sad_x3_4x8_msa)
114 void x264_pixel_sad_x3_4x8_msa( uint8_t *p_src, uint8_t *p_ref0,
115                                 uint8_t *p_ref1, uint8_t *p_ref2,
116                                 intptr_t i_ref_stride,
117                                 int32_t p_sad_array[3] );
118 #define x264_pixel_sad_x3_4x4_msa x264_template(pixel_sad_x3_4x4_msa)
119 void x264_pixel_sad_x3_4x4_msa( uint8_t *p_src, uint8_t *p_ref0,
120                                 uint8_t *p_ref1, uint8_t *p_ref2,
121                                 intptr_t i_ref_stride,
122                                 int32_t p_sad_array[3] );
123 #define x264_pixel_ssd_16x16_msa x264_template(pixel_ssd_16x16_msa)
124 int32_t x264_pixel_ssd_16x16_msa( uint8_t *p_src, intptr_t i_src_stride,
125                                   uint8_t *p_ref, intptr_t i_ref_stride );
126 #define x264_pixel_ssd_16x8_msa x264_template(pixel_ssd_16x8_msa)
127 int32_t x264_pixel_ssd_16x8_msa( uint8_t *p_src, intptr_t i_src_stride,
128                                  uint8_t *p_ref, intptr_t i_ref_stride );
129 #define x264_pixel_ssd_8x16_msa x264_template(pixel_ssd_8x16_msa)
130 int32_t x264_pixel_ssd_8x16_msa( uint8_t *p_src, intptr_t i_src_stride,
131                                  uint8_t *p_ref, intptr_t i_ref_stride );
132 #define x264_pixel_ssd_8x8_msa x264_template(pixel_ssd_8x8_msa)
133 int32_t x264_pixel_ssd_8x8_msa( uint8_t *p_src, intptr_t i_src_stride,
134                                 uint8_t *p_ref, intptr_t i_ref_stride );
135 #define x264_pixel_ssd_8x4_msa x264_template(pixel_ssd_8x4_msa)
136 int32_t x264_pixel_ssd_8x4_msa( uint8_t *p_src, intptr_t i_src_stride,
137                                 uint8_t *p_ref, intptr_t i_ref_stride );
138 #define x264_pixel_ssd_4x16_msa x264_template(pixel_ssd_4x16_msa)
139 int32_t x264_pixel_ssd_4x16_msa( uint8_t *p_src, intptr_t i_src_stride,
140                                  uint8_t *p_ref, intptr_t i_ref_stride );
141 #define x264_pixel_ssd_4x8_msa x264_template(pixel_ssd_4x8_msa)
142 int32_t x264_pixel_ssd_4x8_msa( uint8_t *p_src, intptr_t i_src_stride,
143                                 uint8_t *p_ref, intptr_t i_ref_stride );
144 #define x264_pixel_ssd_4x4_msa x264_template(pixel_ssd_4x4_msa)
145 int32_t x264_pixel_ssd_4x4_msa( uint8_t *p_src, intptr_t i_src_stride,
146                                 uint8_t *p_ref, intptr_t i_ref_stride );
147 #define x264_intra_sad_x3_4x4_msa x264_template(intra_sad_x3_4x4_msa)
148 void x264_intra_sad_x3_4x4_msa( uint8_t *p_enc, uint8_t *p_dec,
149                                 int32_t p_sad_array[3] );
150 #define x264_intra_sad_x3_16x16_msa x264_template(intra_sad_x3_16x16_msa)
151 void x264_intra_sad_x3_16x16_msa( uint8_t *p_enc, uint8_t *p_dec,
152                                   int32_t p_sad_array[3] );
153 #define x264_intra_sad_x3_8x8_msa x264_template(intra_sad_x3_8x8_msa)
154 void x264_intra_sad_x3_8x8_msa( uint8_t *p_enc, uint8_t p_edge[36],
155                                 int32_t p_sad_array[3] );
156 #define x264_intra_sad_x3_8x8c_msa x264_template(intra_sad_x3_8x8c_msa)
157 void x264_intra_sad_x3_8x8c_msa( uint8_t *p_enc, uint8_t *p_dec,
158                                  int32_t p_sad_array[3] );
159 #define x264_ssim_4x4x2_core_msa x264_template(ssim_4x4x2_core_msa)
160 void x264_ssim_4x4x2_core_msa( const uint8_t *p_pix1, intptr_t i_stride1,
161                                const uint8_t *p_pix2, intptr_t i_stride2,
162                                int32_t i_sums[2][4] );
163 #define x264_pixel_hadamard_ac_8x8_msa x264_template(pixel_hadamard_ac_8x8_msa)
164 uint64_t x264_pixel_hadamard_ac_8x8_msa( uint8_t *p_pix, intptr_t i_stride );
165 #define x264_pixel_hadamard_ac_8x16_msa x264_template(pixel_hadamard_ac_8x16_msa)
166 uint64_t x264_pixel_hadamard_ac_8x16_msa( uint8_t *p_pix, intptr_t i_stride );
167 #define x264_pixel_hadamard_ac_16x8_msa x264_template(pixel_hadamard_ac_16x8_msa)
168 uint64_t x264_pixel_hadamard_ac_16x8_msa( uint8_t *p_pix, intptr_t i_stride );
169 #define x264_pixel_hadamard_ac_16x16_msa x264_template(pixel_hadamard_ac_16x16_msa)
170 uint64_t x264_pixel_hadamard_ac_16x16_msa( uint8_t *p_pix, intptr_t i_stride );
171 #define x264_pixel_satd_4x4_msa x264_template(pixel_satd_4x4_msa)
172 int32_t x264_pixel_satd_4x4_msa( uint8_t *p_pix1, intptr_t i_stride,
173                                  uint8_t *p_pix2, intptr_t i_stride2 );
174 #define x264_pixel_satd_4x8_msa x264_template(pixel_satd_4x8_msa)
175 int32_t x264_pixel_satd_4x8_msa( uint8_t *p_pix1, intptr_t i_stride,
176                                  uint8_t *p_pix2, intptr_t i_stride2 );
177 #define x264_pixel_satd_4x16_msa x264_template(pixel_satd_4x16_msa)
178 int32_t x264_pixel_satd_4x16_msa( uint8_t *p_pix1, intptr_t i_stride,
179                                   uint8_t *p_pix2, intptr_t i_stride2 );
180 #define x264_pixel_satd_8x4_msa x264_template(pixel_satd_8x4_msa)
181 int32_t x264_pixel_satd_8x4_msa( uint8_t *p_pix1, intptr_t i_stride,
182                                  uint8_t *p_pix2, intptr_t i_stride2 );
183 #define x264_pixel_satd_8x8_msa x264_template(pixel_satd_8x8_msa)
184 int32_t x264_pixel_satd_8x8_msa( uint8_t *p_pix1, intptr_t i_stride,
185                                  uint8_t *p_pix2, intptr_t i_stride2 );
186 #define x264_pixel_satd_8x16_msa x264_template(pixel_satd_8x16_msa)
187 int32_t x264_pixel_satd_8x16_msa( uint8_t *p_pix1, intptr_t i_stride,
188                                   uint8_t *p_pix2, intptr_t i_stride2 );
189 #define x264_pixel_satd_16x8_msa x264_template(pixel_satd_16x8_msa)
190 int32_t x264_pixel_satd_16x8_msa( uint8_t *p_pix1, intptr_t i_stride,
191                                   uint8_t *p_pix2, intptr_t i_stride2 );
192 #define x264_pixel_satd_16x16_msa x264_template(pixel_satd_16x16_msa)
193 int32_t x264_pixel_satd_16x16_msa( uint8_t *p_pix1, intptr_t i_stride,
194                                    uint8_t *p_pix2, intptr_t i_stride2 );
195 #define x264_pixel_sa8d_8x8_msa x264_template(pixel_sa8d_8x8_msa)
196 int32_t x264_pixel_sa8d_8x8_msa( uint8_t *p_pix1, intptr_t i_stride,
197                                  uint8_t *p_pix2, intptr_t i_stride2 );
198 #define x264_pixel_sa8d_16x16_msa x264_template(pixel_sa8d_16x16_msa)
199 int32_t x264_pixel_sa8d_16x16_msa( uint8_t *p_pix1, intptr_t i_stride,
200                                    uint8_t *p_pix2, intptr_t i_stride2 );
201 #define x264_intra_satd_x3_4x4_msa x264_template(intra_satd_x3_4x4_msa)
202 void x264_intra_satd_x3_4x4_msa( uint8_t *p_enc, uint8_t *p_dec,
203                                  int32_t p_sad_array[3] );
204 #define x264_intra_satd_x3_16x16_msa x264_template(intra_satd_x3_16x16_msa)
205 void x264_intra_satd_x3_16x16_msa( uint8_t *p_enc, uint8_t *p_dec,
206                                    int32_t p_sad_array[3] );
207 #define x264_intra_sa8d_x3_8x8_msa x264_template(intra_sa8d_x3_8x8_msa)
208 void x264_intra_sa8d_x3_8x8_msa( uint8_t *p_enc, uint8_t p_edge[36],
209                                  int32_t p_sad_array[3] );
210 #define x264_intra_satd_x3_8x8c_msa x264_template(intra_satd_x3_8x8c_msa)
211 void x264_intra_satd_x3_8x8c_msa( uint8_t *p_enc, uint8_t *p_dec,
212                                   int32_t p_sad_array[3] );
213 #define x264_pixel_var_16x16_msa x264_template(pixel_var_16x16_msa)
214 uint64_t x264_pixel_var_16x16_msa( uint8_t *p_pix, intptr_t i_stride );
215 #define x264_pixel_var_8x16_msa x264_template(pixel_var_8x16_msa)
216 uint64_t x264_pixel_var_8x16_msa( uint8_t *p_pix, intptr_t i_stride );
217 #define x264_pixel_var_8x8_msa x264_template(pixel_var_8x8_msa)
218 uint64_t x264_pixel_var_8x8_msa( uint8_t *p_pix, intptr_t i_stride );
219 #define x264_pixel_var2_8x16_msa x264_template(pixel_var2_8x16_msa)
220 int32_t x264_pixel_var2_8x16_msa( uint8_t *p_pix1, intptr_t i_stride1,
221                                   uint8_t *p_pix2, intptr_t i_stride2,
222                                   int32_t *p_ssd );
223 #define x264_pixel_var2_8x8_msa x264_template(pixel_var2_8x8_msa)
224 int32_t x264_pixel_var2_8x8_msa( uint8_t *p_pix1, intptr_t i_stride1,
225                                  uint8_t *p_pix2, intptr_t i_stride2,
226                                  int32_t *p_ssd );
227 
228 #endif
229