pixel.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*****************************************************************************
  2. * pixel.h: msa pixel metrics
  3. *****************************************************************************
  4. * Copyright (C) 2015-2018 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. #ifndef X264_MIPS_PIXEL_H
  26. #define X264_MIPS_PIXEL_H
  27. #define x264_pixel_sad_16x16_msa x264_template(pixel_sad_16x16_msa)
  28. int32_t x264_pixel_sad_16x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  29. uint8_t *p_ref, intptr_t i_ref_stride );
  30. #define x264_pixel_sad_16x8_msa x264_template(pixel_sad_16x8_msa)
  31. int32_t x264_pixel_sad_16x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  32. uint8_t *p_ref, intptr_t i_ref_stride );
  33. #define x264_pixel_sad_8x16_msa x264_template(pixel_sad_8x16_msa)
  34. int32_t x264_pixel_sad_8x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  35. uint8_t *p_ref, intptr_t i_ref_stride );
  36. #define x264_pixel_sad_8x8_msa x264_template(pixel_sad_8x8_msa)
  37. int32_t x264_pixel_sad_8x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  38. uint8_t *p_ref, intptr_t i_ref_stride );
  39. #define x264_pixel_sad_8x4_msa x264_template(pixel_sad_8x4_msa)
  40. int32_t x264_pixel_sad_8x4_msa( uint8_t *p_src, intptr_t i_src_stride,
  41. uint8_t *p_ref, intptr_t i_ref_stride );
  42. #define x264_pixel_sad_4x16_msa x264_template(pixel_sad_4x16_msa)
  43. int32_t x264_pixel_sad_4x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  44. uint8_t *p_ref, intptr_t i_ref_stride );
  45. #define x264_pixel_sad_4x8_msa x264_template(pixel_sad_4x8_msa)
  46. int32_t x264_pixel_sad_4x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  47. uint8_t *p_ref, intptr_t i_ref_stride );
  48. #define x264_pixel_sad_4x4_msa x264_template(pixel_sad_4x4_msa)
  49. int32_t x264_pixel_sad_4x4_msa( uint8_t *p_src, intptr_t i_src_stride,
  50. uint8_t *p_ref, intptr_t i_ref_stride );
  51. #define x264_pixel_sad_x4_16x16_msa x264_template(pixel_sad_x4_16x16_msa)
  52. void x264_pixel_sad_x4_16x16_msa( uint8_t *p_src, uint8_t *p_ref0,
  53. uint8_t *p_ref1, uint8_t *p_ref2,
  54. uint8_t *p_ref3, intptr_t i_ref_stride,
  55. int32_t p_sad_array[4] );
  56. #define x264_pixel_sad_x4_16x8_msa x264_template(pixel_sad_x4_16x8_msa)
  57. void x264_pixel_sad_x4_16x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  58. uint8_t *p_ref1, uint8_t *p_ref2,
  59. uint8_t *p_ref3, intptr_t i_ref_stride,
  60. int32_t p_sad_array[4] );
  61. #define x264_pixel_sad_x4_8x16_msa x264_template(pixel_sad_x4_8x16_msa)
  62. void x264_pixel_sad_x4_8x16_msa( uint8_t *p_src, uint8_t *p_ref0,
  63. uint8_t *p_ref1, uint8_t *p_ref2,
  64. uint8_t *p_ref3, intptr_t i_ref_stride,
  65. int32_t p_sad_array[4] );
  66. #define x264_pixel_sad_x4_8x8_msa x264_template(pixel_sad_x4_8x8_msa)
  67. void x264_pixel_sad_x4_8x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  68. uint8_t *p_ref1, uint8_t *p_ref2,
  69. uint8_t *p_ref3, intptr_t i_ref_stride,
  70. int32_t p_sad_array[4] );
  71. #define x264_pixel_sad_x4_8x4_msa x264_template(pixel_sad_x4_8x4_msa)
  72. void x264_pixel_sad_x4_8x4_msa( uint8_t *p_src, uint8_t *p_ref0,
  73. uint8_t *p_ref1, uint8_t *p_ref2,
  74. uint8_t *p_ref3, intptr_t i_ref_stride,
  75. int32_t p_sad_array[4] );
  76. #define x264_pixel_sad_x4_4x8_msa x264_template(pixel_sad_x4_4x8_msa)
  77. void x264_pixel_sad_x4_4x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  78. uint8_t *p_ref1, uint8_t *p_ref2,
  79. uint8_t *p_ref3, intptr_t i_ref_stride,
  80. int32_t p_sad_array[4] );
  81. #define x264_pixel_sad_x4_4x4_msa x264_template(pixel_sad_x4_4x4_msa)
  82. void x264_pixel_sad_x4_4x4_msa( uint8_t *p_src, uint8_t *p_ref0,
  83. uint8_t *p_ref1, uint8_t *p_ref2,
  84. uint8_t *p_ref3, intptr_t i_ref_stride,
  85. int32_t p_sad_array[4] );
  86. #define x264_pixel_sad_x3_16x16_msa x264_template(pixel_sad_x3_16x16_msa)
  87. void x264_pixel_sad_x3_16x16_msa( uint8_t *p_src, uint8_t *p_ref0,
  88. uint8_t *p_ref1, uint8_t *p_ref2,
  89. intptr_t i_ref_stride,
  90. int32_t p_sad_array[3] );
  91. #define x264_pixel_sad_x3_16x8_msa x264_template(pixel_sad_x3_16x8_msa)
  92. void x264_pixel_sad_x3_16x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  93. uint8_t *p_ref1, uint8_t *p_ref2,
  94. intptr_t i_ref_stride,
  95. int32_t p_sad_array[3] );
  96. #define x264_pixel_sad_x3_8x16_msa x264_template(pixel_sad_x3_8x16_msa)
  97. void x264_pixel_sad_x3_8x16_msa( uint8_t *p_src, uint8_t *p_ref0,
  98. uint8_t *p_ref1, uint8_t *p_ref2,
  99. intptr_t i_ref_stride,
  100. int32_t p_sad_array[3] );
  101. #define x264_pixel_sad_x3_8x8_msa x264_template(pixel_sad_x3_8x8_msa)
  102. void x264_pixel_sad_x3_8x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  103. uint8_t *p_ref1, uint8_t *p_ref2,
  104. intptr_t i_ref_stride,
  105. int32_t p_sad_array[3] );
  106. #define x264_pixel_sad_x3_8x4_msa x264_template(pixel_sad_x3_8x4_msa)
  107. void x264_pixel_sad_x3_8x4_msa( uint8_t *p_src, uint8_t *p_ref0,
  108. uint8_t *p_ref1, uint8_t *p_ref2,
  109. intptr_t i_ref_stride,
  110. int32_t p_sad_array[3] );
  111. #define x264_pixel_sad_x3_4x8_msa x264_template(pixel_sad_x3_4x8_msa)
  112. void x264_pixel_sad_x3_4x8_msa( uint8_t *p_src, uint8_t *p_ref0,
  113. uint8_t *p_ref1, uint8_t *p_ref2,
  114. intptr_t i_ref_stride,
  115. int32_t p_sad_array[3] );
  116. #define x264_pixel_sad_x3_4x4_msa x264_template(pixel_sad_x3_4x4_msa)
  117. void x264_pixel_sad_x3_4x4_msa( uint8_t *p_src, uint8_t *p_ref0,
  118. uint8_t *p_ref1, uint8_t *p_ref2,
  119. intptr_t i_ref_stride,
  120. int32_t p_sad_array[3] );
  121. #define x264_pixel_ssd_16x16_msa x264_template(pixel_ssd_16x16_msa)
  122. int32_t x264_pixel_ssd_16x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  123. uint8_t *p_ref, intptr_t i_ref_stride );
  124. #define x264_pixel_ssd_16x8_msa x264_template(pixel_ssd_16x8_msa)
  125. int32_t x264_pixel_ssd_16x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  126. uint8_t *p_ref, intptr_t i_ref_stride );
  127. #define x264_pixel_ssd_8x16_msa x264_template(pixel_ssd_8x16_msa)
  128. int32_t x264_pixel_ssd_8x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  129. uint8_t *p_ref, intptr_t i_ref_stride );
  130. #define x264_pixel_ssd_8x8_msa x264_template(pixel_ssd_8x8_msa)
  131. int32_t x264_pixel_ssd_8x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  132. uint8_t *p_ref, intptr_t i_ref_stride );
  133. #define x264_pixel_ssd_8x4_msa x264_template(pixel_ssd_8x4_msa)
  134. int32_t x264_pixel_ssd_8x4_msa( uint8_t *p_src, intptr_t i_src_stride,
  135. uint8_t *p_ref, intptr_t i_ref_stride );
  136. #define x264_pixel_ssd_4x16_msa x264_template(pixel_ssd_4x16_msa)
  137. int32_t x264_pixel_ssd_4x16_msa( uint8_t *p_src, intptr_t i_src_stride,
  138. uint8_t *p_ref, intptr_t i_ref_stride );
  139. #define x264_pixel_ssd_4x8_msa x264_template(pixel_ssd_4x8_msa)
  140. int32_t x264_pixel_ssd_4x8_msa( uint8_t *p_src, intptr_t i_src_stride,
  141. uint8_t *p_ref, intptr_t i_ref_stride );
  142. #define x264_pixel_ssd_4x4_msa x264_template(pixel_ssd_4x4_msa)
  143. int32_t x264_pixel_ssd_4x4_msa( uint8_t *p_src, intptr_t i_src_stride,
  144. uint8_t *p_ref, intptr_t i_ref_stride );
  145. #define x264_intra_sad_x3_4x4_msa x264_template(intra_sad_x3_4x4_msa)
  146. void x264_intra_sad_x3_4x4_msa( uint8_t *p_enc, uint8_t *p_dec,
  147. int32_t p_sad_array[3] );
  148. #define x264_intra_sad_x3_16x16_msa x264_template(intra_sad_x3_16x16_msa)
  149. void x264_intra_sad_x3_16x16_msa( uint8_t *p_enc, uint8_t *p_dec,
  150. int32_t p_sad_array[3] );
  151. #define x264_intra_sad_x3_8x8_msa x264_template(intra_sad_x3_8x8_msa)
  152. void x264_intra_sad_x3_8x8_msa( uint8_t *p_enc, uint8_t p_edge[36],
  153. int32_t p_sad_array[3] );
  154. #define x264_intra_sad_x3_8x8c_msa x264_template(intra_sad_x3_8x8c_msa)
  155. void x264_intra_sad_x3_8x8c_msa( uint8_t *p_enc, uint8_t *p_dec,
  156. int32_t p_sad_array[3] );
  157. #define x264_ssim_4x4x2_core_msa x264_template(ssim_4x4x2_core_msa)
  158. void x264_ssim_4x4x2_core_msa( const uint8_t *p_pix1, intptr_t i_stride1,
  159. const uint8_t *p_pix2, intptr_t i_stride2,
  160. int32_t i_sums[2][4] );
  161. #define x264_pixel_hadamard_ac_8x8_msa x264_template(pixel_hadamard_ac_8x8_msa)
  162. uint64_t x264_pixel_hadamard_ac_8x8_msa( uint8_t *p_pix, intptr_t i_stride );
  163. #define x264_pixel_hadamard_ac_8x16_msa x264_template(pixel_hadamard_ac_8x16_msa)
  164. uint64_t x264_pixel_hadamard_ac_8x16_msa( uint8_t *p_pix, intptr_t i_stride );
  165. #define x264_pixel_hadamard_ac_16x8_msa x264_template(pixel_hadamard_ac_16x8_msa)
  166. uint64_t x264_pixel_hadamard_ac_16x8_msa( uint8_t *p_pix, intptr_t i_stride );
  167. #define x264_pixel_hadamard_ac_16x16_msa x264_template(pixel_hadamard_ac_16x16_msa)
  168. uint64_t x264_pixel_hadamard_ac_16x16_msa( uint8_t *p_pix, intptr_t i_stride );
  169. #define x264_pixel_satd_4x4_msa x264_template(pixel_satd_4x4_msa)
  170. int32_t x264_pixel_satd_4x4_msa( uint8_t *p_pix1, intptr_t i_stride,
  171. uint8_t *p_pix2, intptr_t i_stride2 );
  172. #define x264_pixel_satd_4x8_msa x264_template(pixel_satd_4x8_msa)
  173. int32_t x264_pixel_satd_4x8_msa( uint8_t *p_pix1, intptr_t i_stride,
  174. uint8_t *p_pix2, intptr_t i_stride2 );
  175. #define x264_pixel_satd_4x16_msa x264_template(pixel_satd_4x16_msa)
  176. int32_t x264_pixel_satd_4x16_msa( uint8_t *p_pix1, intptr_t i_stride,
  177. uint8_t *p_pix2, intptr_t i_stride2 );
  178. #define x264_pixel_satd_8x4_msa x264_template(pixel_satd_8x4_msa)
  179. int32_t x264_pixel_satd_8x4_msa( uint8_t *p_pix1, intptr_t i_stride,
  180. uint8_t *p_pix2, intptr_t i_stride2 );
  181. #define x264_pixel_satd_8x8_msa x264_template(pixel_satd_8x8_msa)
  182. int32_t x264_pixel_satd_8x8_msa( uint8_t *p_pix1, intptr_t i_stride,
  183. uint8_t *p_pix2, intptr_t i_stride2 );
  184. #define x264_pixel_satd_8x16_msa x264_template(pixel_satd_8x16_msa)
  185. int32_t x264_pixel_satd_8x16_msa( uint8_t *p_pix1, intptr_t i_stride,
  186. uint8_t *p_pix2, intptr_t i_stride2 );
  187. #define x264_pixel_satd_16x8_msa x264_template(pixel_satd_16x8_msa)
  188. int32_t x264_pixel_satd_16x8_msa( uint8_t *p_pix1, intptr_t i_stride,
  189. uint8_t *p_pix2, intptr_t i_stride2 );
  190. #define x264_pixel_satd_16x16_msa x264_template(pixel_satd_16x16_msa)
  191. int32_t x264_pixel_satd_16x16_msa( uint8_t *p_pix1, intptr_t i_stride,
  192. uint8_t *p_pix2, intptr_t i_stride2 );
  193. #define x264_pixel_sa8d_8x8_msa x264_template(pixel_sa8d_8x8_msa)
  194. int32_t x264_pixel_sa8d_8x8_msa( uint8_t *p_pix1, intptr_t i_stride,
  195. uint8_t *p_pix2, intptr_t i_stride2 );
  196. #define x264_pixel_sa8d_16x16_msa x264_template(pixel_sa8d_16x16_msa)
  197. int32_t x264_pixel_sa8d_16x16_msa( uint8_t *p_pix1, intptr_t i_stride,
  198. uint8_t *p_pix2, intptr_t i_stride2 );
  199. #define x264_intra_satd_x3_4x4_msa x264_template(intra_satd_x3_4x4_msa)
  200. void x264_intra_satd_x3_4x4_msa( uint8_t *p_enc, uint8_t *p_dec,
  201. int32_t p_sad_array[3] );
  202. #define x264_intra_satd_x3_16x16_msa x264_template(intra_satd_x3_16x16_msa)
  203. void x264_intra_satd_x3_16x16_msa( uint8_t *p_enc, uint8_t *p_dec,
  204. int32_t p_sad_array[3] );
  205. #define x264_intra_sa8d_x3_8x8_msa x264_template(intra_sa8d_x3_8x8_msa)
  206. void x264_intra_sa8d_x3_8x8_msa( uint8_t *p_enc, uint8_t p_edge[36],
  207. int32_t p_sad_array[3] );
  208. #define x264_intra_satd_x3_8x8c_msa x264_template(intra_satd_x3_8x8c_msa)
  209. void x264_intra_satd_x3_8x8c_msa( uint8_t *p_enc, uint8_t *p_dec,
  210. int32_t p_sad_array[3] );
  211. #define x264_pixel_var_16x16_msa x264_template(pixel_var_16x16_msa)
  212. uint64_t x264_pixel_var_16x16_msa( uint8_t *p_pix, intptr_t i_stride );
  213. #define x264_pixel_var_8x16_msa x264_template(pixel_var_8x16_msa)
  214. uint64_t x264_pixel_var_8x16_msa( uint8_t *p_pix, intptr_t i_stride );
  215. #define x264_pixel_var_8x8_msa x264_template(pixel_var_8x8_msa)
  216. uint64_t x264_pixel_var_8x8_msa( uint8_t *p_pix, intptr_t i_stride );
  217. #define x264_pixel_var2_8x16_msa x264_template(pixel_var2_8x16_msa)
  218. int32_t x264_pixel_var2_8x16_msa( uint8_t *p_pix1, intptr_t i_stride1,
  219. uint8_t *p_pix2, intptr_t i_stride2,
  220. int32_t *p_ssd );
  221. #define x264_pixel_var2_8x8_msa x264_template(pixel_var2_8x8_msa)
  222. int32_t x264_pixel_var2_8x8_msa( uint8_t *p_pix1, intptr_t i_stride1,
  223. uint8_t *p_pix2, intptr_t i_stride2,
  224. int32_t *p_ssd );
  225. #endif