hevcdsp_mips.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. /*
  2. * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com)
  3. *
  4. * This file is part of FFmpeg.
  5. *
  6. * FFmpeg is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * FFmpeg is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with FFmpeg; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. #ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H
  21. #define AVCODEC_MIPS_HEVCDSP_MIPS_H
  22. #include "libavcodec/hevcdsp.h"
  23. #define MC(PEL, DIR, WIDTH) \
  24. void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_msa(int16_t *dst, \
  25. uint8_t *src, \
  26. ptrdiff_t src_stride, \
  27. int height, \
  28. intptr_t mx, \
  29. intptr_t my, \
  30. int width)
  31. MC(pel, pixels, 4);
  32. MC(pel, pixels, 6);
  33. MC(pel, pixels, 8);
  34. MC(pel, pixels, 12);
  35. MC(pel, pixels, 16);
  36. MC(pel, pixels, 24);
  37. MC(pel, pixels, 32);
  38. MC(pel, pixels, 48);
  39. MC(pel, pixels, 64);
  40. MC(qpel, h, 4);
  41. MC(qpel, h, 8);
  42. MC(qpel, h, 12);
  43. MC(qpel, h, 16);
  44. MC(qpel, h, 24);
  45. MC(qpel, h, 32);
  46. MC(qpel, h, 48);
  47. MC(qpel, h, 64);
  48. MC(qpel, v, 4);
  49. MC(qpel, v, 8);
  50. MC(qpel, v, 12);
  51. MC(qpel, v, 16);
  52. MC(qpel, v, 24);
  53. MC(qpel, v, 32);
  54. MC(qpel, v, 48);
  55. MC(qpel, v, 64);
  56. MC(qpel, hv, 4);
  57. MC(qpel, hv, 8);
  58. MC(qpel, hv, 12);
  59. MC(qpel, hv, 16);
  60. MC(qpel, hv, 24);
  61. MC(qpel, hv, 32);
  62. MC(qpel, hv, 48);
  63. MC(qpel, hv, 64);
  64. MC(epel, h, 4);
  65. MC(epel, h, 6);
  66. MC(epel, h, 8);
  67. MC(epel, h, 12);
  68. MC(epel, h, 16);
  69. MC(epel, h, 24);
  70. MC(epel, h, 32);
  71. MC(epel, h, 48);
  72. MC(epel, h, 64);
  73. MC(epel, v, 4);
  74. MC(epel, v, 6);
  75. MC(epel, v, 8);
  76. MC(epel, v, 12);
  77. MC(epel, v, 16);
  78. MC(epel, v, 24);
  79. MC(epel, v, 32);
  80. MC(epel, v, 48);
  81. MC(epel, v, 64);
  82. MC(epel, hv, 4);
  83. MC(epel, hv, 6);
  84. MC(epel, hv, 8);
  85. MC(epel, hv, 12);
  86. MC(epel, hv, 16);
  87. MC(epel, hv, 24);
  88. MC(epel, hv, 32);
  89. MC(epel, hv, 48);
  90. MC(epel, hv, 64);
  91. #undef MC
  92. #define UNI_MC(PEL, DIR, WIDTH) \
  93. void ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \
  94. ptrdiff_t dst_stride, \
  95. uint8_t *src, \
  96. ptrdiff_t src_stride, \
  97. int height, \
  98. intptr_t mx, \
  99. intptr_t my, \
  100. int width)
  101. UNI_MC(pel, pixels, 4);
  102. UNI_MC(pel, pixels, 6);
  103. UNI_MC(pel, pixels, 8);
  104. UNI_MC(pel, pixels, 12);
  105. UNI_MC(pel, pixels, 16);
  106. UNI_MC(pel, pixels, 24);
  107. UNI_MC(pel, pixels, 32);
  108. UNI_MC(pel, pixels, 48);
  109. UNI_MC(pel, pixels, 64);
  110. UNI_MC(qpel, h, 4);
  111. UNI_MC(qpel, h, 8);
  112. UNI_MC(qpel, h, 12);
  113. UNI_MC(qpel, h, 16);
  114. UNI_MC(qpel, h, 24);
  115. UNI_MC(qpel, h, 32);
  116. UNI_MC(qpel, h, 48);
  117. UNI_MC(qpel, h, 64);
  118. UNI_MC(qpel, v, 4);
  119. UNI_MC(qpel, v, 8);
  120. UNI_MC(qpel, v, 12);
  121. UNI_MC(qpel, v, 16);
  122. UNI_MC(qpel, v, 24);
  123. UNI_MC(qpel, v, 32);
  124. UNI_MC(qpel, v, 48);
  125. UNI_MC(qpel, v, 64);
  126. UNI_MC(qpel, hv, 4);
  127. UNI_MC(qpel, hv, 8);
  128. UNI_MC(qpel, hv, 12);
  129. UNI_MC(qpel, hv, 16);
  130. UNI_MC(qpel, hv, 24);
  131. UNI_MC(qpel, hv, 32);
  132. UNI_MC(qpel, hv, 48);
  133. UNI_MC(qpel, hv, 64);
  134. UNI_MC(epel, h, 4);
  135. UNI_MC(epel, h, 6);
  136. UNI_MC(epel, h, 8);
  137. UNI_MC(epel, h, 12);
  138. UNI_MC(epel, h, 16);
  139. UNI_MC(epel, h, 24);
  140. UNI_MC(epel, h, 32);
  141. UNI_MC(epel, h, 48);
  142. UNI_MC(epel, h, 64);
  143. UNI_MC(epel, v, 4);
  144. UNI_MC(epel, v, 6);
  145. UNI_MC(epel, v, 8);
  146. UNI_MC(epel, v, 12);
  147. UNI_MC(epel, v, 16);
  148. UNI_MC(epel, v, 24);
  149. UNI_MC(epel, v, 32);
  150. UNI_MC(epel, v, 48);
  151. UNI_MC(epel, v, 64);
  152. UNI_MC(epel, hv, 4);
  153. UNI_MC(epel, hv, 6);
  154. UNI_MC(epel, hv, 8);
  155. UNI_MC(epel, hv, 12);
  156. UNI_MC(epel, hv, 16);
  157. UNI_MC(epel, hv, 24);
  158. UNI_MC(epel, hv, 32);
  159. UNI_MC(epel, hv, 48);
  160. UNI_MC(epel, hv, 64);
  161. #undef UNI_MC
  162. #define UNI_W_MC(PEL, DIR, WIDTH) \
  163. void ff_hevc_put_hevc_uni_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \
  164. ptrdiff_t \
  165. dst_stride, \
  166. uint8_t *src, \
  167. ptrdiff_t \
  168. src_stride, \
  169. int height, \
  170. int denom, \
  171. int weight, \
  172. int offset, \
  173. intptr_t mx, \
  174. intptr_t my, \
  175. int width)
  176. UNI_W_MC(pel, pixels, 4);
  177. UNI_W_MC(pel, pixels, 6);
  178. UNI_W_MC(pel, pixels, 8);
  179. UNI_W_MC(pel, pixels, 12);
  180. UNI_W_MC(pel, pixels, 16);
  181. UNI_W_MC(pel, pixels, 24);
  182. UNI_W_MC(pel, pixels, 32);
  183. UNI_W_MC(pel, pixels, 48);
  184. UNI_W_MC(pel, pixels, 64);
  185. UNI_W_MC(qpel, h, 4);
  186. UNI_W_MC(qpel, h, 8);
  187. UNI_W_MC(qpel, h, 12);
  188. UNI_W_MC(qpel, h, 16);
  189. UNI_W_MC(qpel, h, 24);
  190. UNI_W_MC(qpel, h, 32);
  191. UNI_W_MC(qpel, h, 48);
  192. UNI_W_MC(qpel, h, 64);
  193. UNI_W_MC(qpel, v, 4);
  194. UNI_W_MC(qpel, v, 8);
  195. UNI_W_MC(qpel, v, 12);
  196. UNI_W_MC(qpel, v, 16);
  197. UNI_W_MC(qpel, v, 24);
  198. UNI_W_MC(qpel, v, 32);
  199. UNI_W_MC(qpel, v, 48);
  200. UNI_W_MC(qpel, v, 64);
  201. UNI_W_MC(qpel, hv, 4);
  202. UNI_W_MC(qpel, hv, 8);
  203. UNI_W_MC(qpel, hv, 12);
  204. UNI_W_MC(qpel, hv, 16);
  205. UNI_W_MC(qpel, hv, 24);
  206. UNI_W_MC(qpel, hv, 32);
  207. UNI_W_MC(qpel, hv, 48);
  208. UNI_W_MC(qpel, hv, 64);
  209. UNI_W_MC(epel, h, 4);
  210. UNI_W_MC(epel, h, 6);
  211. UNI_W_MC(epel, h, 8);
  212. UNI_W_MC(epel, h, 12);
  213. UNI_W_MC(epel, h, 16);
  214. UNI_W_MC(epel, h, 24);
  215. UNI_W_MC(epel, h, 32);
  216. UNI_W_MC(epel, h, 48);
  217. UNI_W_MC(epel, h, 64);
  218. UNI_W_MC(epel, v, 4);
  219. UNI_W_MC(epel, v, 6);
  220. UNI_W_MC(epel, v, 8);
  221. UNI_W_MC(epel, v, 12);
  222. UNI_W_MC(epel, v, 16);
  223. UNI_W_MC(epel, v, 24);
  224. UNI_W_MC(epel, v, 32);
  225. UNI_W_MC(epel, v, 48);
  226. UNI_W_MC(epel, v, 64);
  227. UNI_W_MC(epel, hv, 4);
  228. UNI_W_MC(epel, hv, 6);
  229. UNI_W_MC(epel, hv, 8);
  230. UNI_W_MC(epel, hv, 12);
  231. UNI_W_MC(epel, hv, 16);
  232. UNI_W_MC(epel, hv, 24);
  233. UNI_W_MC(epel, hv, 32);
  234. UNI_W_MC(epel, hv, 48);
  235. UNI_W_MC(epel, hv, 64);
  236. #undef UNI_W_MC
  237. #define BI_MC(PEL, DIR, WIDTH) \
  238. void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \
  239. ptrdiff_t dst_stride, \
  240. uint8_t *src, \
  241. ptrdiff_t src_stride, \
  242. int16_t *src_16bit, \
  243. int height, \
  244. intptr_t mx, \
  245. intptr_t my, \
  246. int width)
  247. BI_MC(pel, pixels, 4);
  248. BI_MC(pel, pixels, 6);
  249. BI_MC(pel, pixels, 8);
  250. BI_MC(pel, pixels, 12);
  251. BI_MC(pel, pixels, 16);
  252. BI_MC(pel, pixels, 24);
  253. BI_MC(pel, pixels, 32);
  254. BI_MC(pel, pixels, 48);
  255. BI_MC(pel, pixels, 64);
  256. BI_MC(qpel, h, 4);
  257. BI_MC(qpel, h, 8);
  258. BI_MC(qpel, h, 12);
  259. BI_MC(qpel, h, 16);
  260. BI_MC(qpel, h, 24);
  261. BI_MC(qpel, h, 32);
  262. BI_MC(qpel, h, 48);
  263. BI_MC(qpel, h, 64);
  264. BI_MC(qpel, v, 4);
  265. BI_MC(qpel, v, 8);
  266. BI_MC(qpel, v, 12);
  267. BI_MC(qpel, v, 16);
  268. BI_MC(qpel, v, 24);
  269. BI_MC(qpel, v, 32);
  270. BI_MC(qpel, v, 48);
  271. BI_MC(qpel, v, 64);
  272. BI_MC(qpel, hv, 4);
  273. BI_MC(qpel, hv, 8);
  274. BI_MC(qpel, hv, 12);
  275. BI_MC(qpel, hv, 16);
  276. BI_MC(qpel, hv, 24);
  277. BI_MC(qpel, hv, 32);
  278. BI_MC(qpel, hv, 48);
  279. BI_MC(qpel, hv, 64);
  280. BI_MC(epel, h, 4);
  281. BI_MC(epel, h, 6);
  282. BI_MC(epel, h, 8);
  283. BI_MC(epel, h, 12);
  284. BI_MC(epel, h, 16);
  285. BI_MC(epel, h, 24);
  286. BI_MC(epel, h, 32);
  287. BI_MC(epel, h, 48);
  288. BI_MC(epel, h, 64);
  289. BI_MC(epel, v, 4);
  290. BI_MC(epel, v, 6);
  291. BI_MC(epel, v, 8);
  292. BI_MC(epel, v, 12);
  293. BI_MC(epel, v, 16);
  294. BI_MC(epel, v, 24);
  295. BI_MC(epel, v, 32);
  296. BI_MC(epel, v, 48);
  297. BI_MC(epel, v, 64);
  298. BI_MC(epel, hv, 4);
  299. BI_MC(epel, hv, 6);
  300. BI_MC(epel, hv, 8);
  301. BI_MC(epel, hv, 12);
  302. BI_MC(epel, hv, 16);
  303. BI_MC(epel, hv, 24);
  304. BI_MC(epel, hv, 32);
  305. BI_MC(epel, hv, 48);
  306. BI_MC(epel, hv, 64);
  307. #undef BI_MC
  308. #define BI_W_MC(PEL, DIR, WIDTH) \
  309. void ff_hevc_put_hevc_bi_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \
  310. ptrdiff_t \
  311. dst_stride, \
  312. uint8_t *src, \
  313. ptrdiff_t \
  314. src_stride, \
  315. int16_t *src_16bit, \
  316. int height, \
  317. int denom, \
  318. int weight0, \
  319. int weight1, \
  320. int offset0, \
  321. int offset1, \
  322. intptr_t mx, \
  323. intptr_t my, \
  324. int width)
  325. BI_W_MC(pel, pixels, 4);
  326. BI_W_MC(pel, pixels, 6);
  327. BI_W_MC(pel, pixels, 8);
  328. BI_W_MC(pel, pixels, 12);
  329. BI_W_MC(pel, pixels, 16);
  330. BI_W_MC(pel, pixels, 24);
  331. BI_W_MC(pel, pixels, 32);
  332. BI_W_MC(pel, pixels, 48);
  333. BI_W_MC(pel, pixels, 64);
  334. BI_W_MC(qpel, h, 4);
  335. BI_W_MC(qpel, h, 8);
  336. BI_W_MC(qpel, h, 12);
  337. BI_W_MC(qpel, h, 16);
  338. BI_W_MC(qpel, h, 24);
  339. BI_W_MC(qpel, h, 32);
  340. BI_W_MC(qpel, h, 48);
  341. BI_W_MC(qpel, h, 64);
  342. BI_W_MC(qpel, v, 4);
  343. BI_W_MC(qpel, v, 8);
  344. BI_W_MC(qpel, v, 12);
  345. BI_W_MC(qpel, v, 16);
  346. BI_W_MC(qpel, v, 24);
  347. BI_W_MC(qpel, v, 32);
  348. BI_W_MC(qpel, v, 48);
  349. BI_W_MC(qpel, v, 64);
  350. BI_W_MC(qpel, hv, 4);
  351. BI_W_MC(qpel, hv, 8);
  352. BI_W_MC(qpel, hv, 12);
  353. BI_W_MC(qpel, hv, 16);
  354. BI_W_MC(qpel, hv, 24);
  355. BI_W_MC(qpel, hv, 32);
  356. BI_W_MC(qpel, hv, 48);
  357. BI_W_MC(qpel, hv, 64);
  358. BI_W_MC(epel, h, 4);
  359. BI_W_MC(epel, h, 6);
  360. BI_W_MC(epel, h, 8);
  361. BI_W_MC(epel, h, 12);
  362. BI_W_MC(epel, h, 16);
  363. BI_W_MC(epel, h, 24);
  364. BI_W_MC(epel, h, 32);
  365. BI_W_MC(epel, h, 48);
  366. BI_W_MC(epel, h, 64);
  367. BI_W_MC(epel, v, 4);
  368. BI_W_MC(epel, v, 6);
  369. BI_W_MC(epel, v, 8);
  370. BI_W_MC(epel, v, 12);
  371. BI_W_MC(epel, v, 16);
  372. BI_W_MC(epel, v, 24);
  373. BI_W_MC(epel, v, 32);
  374. BI_W_MC(epel, v, 48);
  375. BI_W_MC(epel, v, 64);
  376. BI_W_MC(epel, hv, 4);
  377. BI_W_MC(epel, hv, 6);
  378. BI_W_MC(epel, hv, 8);
  379. BI_W_MC(epel, hv, 12);
  380. BI_W_MC(epel, hv, 16);
  381. BI_W_MC(epel, hv, 24);
  382. BI_W_MC(epel, hv, 32);
  383. BI_W_MC(epel, hv, 48);
  384. BI_W_MC(epel, hv, 64);
  385. #undef BI_W_MC
  386. void ff_hevc_loop_filter_luma_h_8_msa(uint8_t *src,
  387. ptrdiff_t src_stride,
  388. int32_t beta, int32_t *tc,
  389. uint8_t *no_p, uint8_t *no_q);
  390. void ff_hevc_loop_filter_luma_v_8_msa(uint8_t *src,
  391. ptrdiff_t src_stride,
  392. int32_t beta, int32_t *tc,
  393. uint8_t *no_p, uint8_t *no_q);
  394. void ff_hevc_loop_filter_chroma_h_8_msa(uint8_t *src,
  395. ptrdiff_t src_stride,
  396. int32_t *tc, uint8_t *no_p,
  397. uint8_t *no_q);
  398. void ff_hevc_loop_filter_chroma_v_8_msa(uint8_t *src,
  399. ptrdiff_t src_stride,
  400. int32_t *tc, uint8_t *no_p,
  401. uint8_t *no_q);
  402. void ff_hevc_sao_band_filter_0_8_msa(uint8_t *dst, uint8_t *src,
  403. ptrdiff_t stride_dst, ptrdiff_t stride_src,
  404. int16_t *sao_offset_val, int sao_left_class,
  405. int width, int height);
  406. void ff_hevc_sao_edge_filter_8_msa(uint8_t *dst, uint8_t *src,
  407. ptrdiff_t stride_dst,
  408. int16_t *sao_offset_val,
  409. int eo, int width, int height);
  410. void ff_hevc_idct_4x4_msa(int16_t *coeffs, int col_limit);
  411. void ff_hevc_idct_8x8_msa(int16_t *coeffs, int col_limit);
  412. void ff_hevc_idct_16x16_msa(int16_t *coeffs, int col_limit);
  413. void ff_hevc_idct_32x32_msa(int16_t *coeffs, int col_limit);
  414. void ff_hevc_idct_dc_4x4_msa(int16_t *coeffs);
  415. void ff_hevc_idct_dc_8x8_msa(int16_t *coeffs);
  416. void ff_hevc_idct_dc_16x16_msa(int16_t *coeffs);
  417. void ff_hevc_idct_dc_32x32_msa(int16_t *coeffs);
  418. void ff_hevc_addblk_4x4_msa(uint8_t *dst, int16_t *pi16Coeffs,
  419. ptrdiff_t stride);
  420. void ff_hevc_addblk_8x8_msa(uint8_t *dst, int16_t *pi16Coeffs,
  421. ptrdiff_t stride);
  422. void ff_hevc_addblk_16x16_msa(uint8_t *dst, int16_t *pi16Coeffs,
  423. ptrdiff_t stride);
  424. void ff_hevc_addblk_32x32_msa(uint8_t *dst, int16_t *pi16Coeffs,
  425. ptrdiff_t stride);
  426. void ff_hevc_idct_luma_4x4_msa(int16_t *pi16Coeffs);
  427. /* Loongson optimization */
  428. #define L_MC(PEL, DIR, WIDTH, TYPE) \
  429. void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_##TYPE(int16_t *dst, \
  430. uint8_t *src, \
  431. ptrdiff_t src_stride, \
  432. int height, \
  433. intptr_t mx, \
  434. intptr_t my, \
  435. int width)
  436. L_MC(qpel, h, 4, mmi);
  437. L_MC(qpel, h, 8, mmi);
  438. L_MC(qpel, h, 12, mmi);
  439. L_MC(qpel, h, 16, mmi);
  440. L_MC(qpel, h, 24, mmi);
  441. L_MC(qpel, h, 32, mmi);
  442. L_MC(qpel, h, 48, mmi);
  443. L_MC(qpel, h, 64, mmi);
  444. L_MC(qpel, hv, 4, mmi);
  445. L_MC(qpel, hv, 8, mmi);
  446. L_MC(qpel, hv, 12, mmi);
  447. L_MC(qpel, hv, 16, mmi);
  448. L_MC(qpel, hv, 24, mmi);
  449. L_MC(qpel, hv, 32, mmi);
  450. L_MC(qpel, hv, 48, mmi);
  451. L_MC(qpel, hv, 64, mmi);
  452. #define L_BI_MC(PEL, DIR, WIDTH, TYPE) \
  453. void ff_hevc_put_hevc_##PEL##_bi_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \
  454. ptrdiff_t dst_stride, \
  455. uint8_t *src, \
  456. ptrdiff_t src_stride, \
  457. int16_t *src2, \
  458. int height, \
  459. intptr_t mx, \
  460. intptr_t my, \
  461. int width)
  462. L_BI_MC(pel, pixels, 8, mmi);
  463. L_BI_MC(pel, pixels, 16, mmi);
  464. L_BI_MC(pel, pixels, 24, mmi);
  465. L_BI_MC(pel, pixels, 32, mmi);
  466. L_BI_MC(pel, pixels, 48, mmi);
  467. L_BI_MC(pel, pixels, 64, mmi);
  468. L_BI_MC(qpel, hv, 4, mmi);
  469. L_BI_MC(qpel, hv, 8, mmi);
  470. L_BI_MC(qpel, hv, 12, mmi);
  471. L_BI_MC(qpel, hv, 16, mmi);
  472. L_BI_MC(qpel, hv, 24, mmi);
  473. L_BI_MC(qpel, hv, 32, mmi);
  474. L_BI_MC(qpel, hv, 48, mmi);
  475. L_BI_MC(qpel, hv, 64, mmi);
  476. L_BI_MC(qpel, h, 4, mmi);
  477. L_BI_MC(qpel, h, 8, mmi);
  478. L_BI_MC(qpel, h, 12, mmi);
  479. L_BI_MC(qpel, h, 16, mmi);
  480. L_BI_MC(qpel, h, 24, mmi);
  481. L_BI_MC(qpel, h, 32, mmi);
  482. L_BI_MC(qpel, h, 48, mmi);
  483. L_BI_MC(qpel, h, 64, mmi);
  484. L_BI_MC(epel, hv, 4, mmi);
  485. L_BI_MC(epel, hv, 8, mmi);
  486. L_BI_MC(epel, hv, 12, mmi);
  487. L_BI_MC(epel, hv, 16, mmi);
  488. L_BI_MC(epel, hv, 24, mmi);
  489. L_BI_MC(epel, hv, 32, mmi);
  490. #undef L_BI_MC
  491. #define L_UNI_MC(PEL, DIR, WIDTH, TYPE) \
  492. void ff_hevc_put_hevc_##PEL##_uni_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \
  493. ptrdiff_t dst_stride, \
  494. uint8_t *src, \
  495. ptrdiff_t src_stride, \
  496. int height, \
  497. intptr_t mx, \
  498. intptr_t my, \
  499. int width)
  500. L_UNI_MC(qpel, hv, 4, mmi);
  501. L_UNI_MC(qpel, hv, 8, mmi);
  502. L_UNI_MC(qpel, hv, 12, mmi);
  503. L_UNI_MC(qpel, hv, 16, mmi);
  504. L_UNI_MC(qpel, hv, 24, mmi);
  505. L_UNI_MC(qpel, hv, 32, mmi);
  506. L_UNI_MC(qpel, hv, 48, mmi);
  507. L_UNI_MC(qpel, hv, 64, mmi);
  508. #undef L_UNI_MC
  509. #endif // #ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H