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