@scrypted/libav 1.0.181 → 1.0.182

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/package.json +1 -1
  2. package/_openh264install/include/wels/codec_api.h +0 -592
  3. package/_openh264install/include/wels/codec_app_def.h +0 -820
  4. package/_openh264install/include/wels/codec_def.h +0 -216
  5. package/_openh264install/include/wels/codec_ver.h +0 -15
  6. package/_openh264install/lib/libopenh264.a +0 -0
  7. package/_openh264install/lib/pkgconfig/openh264.pc +0 -10
  8. package/openh264/.reviewboardrc +0 -3
  9. package/openh264/.travis.yml +0 -42
  10. package/openh264/CODING_STYLE +0 -8
  11. package/openh264/CONTRIBUTORS +0 -55
  12. package/openh264/LICENSE +0 -23
  13. package/openh264/Makefile +0 -408
  14. package/openh264/README.md +0 -197
  15. package/openh264/RELEASES +0 -467
  16. package/openh264/SECURITY.md +0 -16
  17. package/openh264/autotest/codec_comparision/run_MultiCodecComparision.sh +0 -431
  18. package/openh264/autotest/performanceTest/android/run_AutoTest_android.sh +0 -180
  19. package/openh264/autotest/performanceTest/ios/fruitstrap +0 -0
  20. package/openh264/autotest/performanceTest/ios/iFileTransfer +0 -0
  21. package/openh264/autotest/performanceTest/ios/run_AutoTest_ios.sh +0 -193
  22. package/openh264/autotest/performanceTest/ios/uiascript.js +0 -19
  23. package/openh264/autotest/performanceTest/parsePerfData.sh +0 -107
  24. package/openh264/autotest/performanceTest/run_perfTest.sh +0 -122
  25. package/openh264/autotest/unitTest/android/run_AutoTest_android.sh +0 -112
  26. package/openh264/autotest/unitTest/ios/run_AutoTest_ios.sh +0 -167
  27. package/openh264/autotest/unitTest/run_ParseUTxml.sh +0 -70
  28. package/openh264/autotest/unitTest/run_unitTest.sh +0 -98
  29. package/openh264/build.gradle +0 -30
  30. package/openh264/code-coverage.sh +0 -6
  31. package/openh264/codec/api/meson.build +0 -1
  32. package/openh264/codec/api/wels/codec_api.h +0 -592
  33. package/openh264/codec/api/wels/codec_app_def.h +0 -820
  34. package/openh264/codec/api/wels/codec_def.h +0 -216
  35. package/openh264/codec/api/wels/codec_ver.h +0 -15
  36. package/openh264/codec/api/wels/meson.build +0 -9
  37. package/openh264/codec/common/arm/arm_arch_common_macro.S +0 -83
  38. package/openh264/codec/common/arm/copy_mb_neon.S +0 -161
  39. package/openh264/codec/common/arm/deblocking_neon.S +0 -857
  40. package/openh264/codec/common/arm/expand_picture_neon.S +0 -154
  41. package/openh264/codec/common/arm/intra_pred_common_neon.S +0 -82
  42. package/openh264/codec/common/arm/mc_neon.S +0 -2283
  43. package/openh264/codec/common/arm64/arm_aarch64_common.h +0 -85
  44. package/openh264/codec/common/arm64/arm_arch64_common_macro.S +0 -79
  45. package/openh264/codec/common/arm64/copy_mb_aarch64_neon.S +0 -202
  46. package/openh264/codec/common/arm64/deblocking_aarch64_neon.S +0 -852
  47. package/openh264/codec/common/arm64/expand_picture_aarch64_neon.S +0 -150
  48. package/openh264/codec/common/arm64/intra_pred_common_aarch64_neon.S +0 -58
  49. package/openh264/codec/common/arm64/mc_aarch64_neon.S +0 -2614
  50. package/openh264/codec/common/generate_version.sh +0 -28
  51. package/openh264/codec/common/inc/WelsList.h +0 -287
  52. package/openh264/codec/common/inc/WelsLock.h +0 -97
  53. package/openh264/codec/common/inc/WelsTask.h +0 -75
  54. package/openh264/codec/common/inc/WelsTaskThread.h +0 -83
  55. package/openh264/codec/common/inc/WelsThread.h +0 -106
  56. package/openh264/codec/common/inc/WelsThreadLib.h +0 -151
  57. package/openh264/codec/common/inc/WelsThreadPool.h +0 -124
  58. package/openh264/codec/common/inc/asmdefs_mmi.h +0 -345
  59. package/openh264/codec/common/inc/copy_mb.h +0 -103
  60. package/openh264/codec/common/inc/cpu.h +0 -81
  61. package/openh264/codec/common/inc/cpu_core.h +0 -103
  62. package/openh264/codec/common/inc/crt_util_safe_x.h +0 -104
  63. package/openh264/codec/common/inc/deblocking_common.h +0 -124
  64. package/openh264/codec/common/inc/expand_pic.h +0 -107
  65. package/openh264/codec/common/inc/golomb_common.h +0 -166
  66. package/openh264/codec/common/inc/intra_pred_common.h +0 -86
  67. package/openh264/codec/common/inc/loongson_intrinsics.h +0 -1919
  68. package/openh264/codec/common/inc/ls_defines.h +0 -130
  69. package/openh264/codec/common/inc/macros.h +0 -329
  70. package/openh264/codec/common/inc/mc.h +0 -407
  71. package/openh264/codec/common/inc/measure_time.h +0 -88
  72. package/openh264/codec/common/inc/memory_align.h +0 -116
  73. package/openh264/codec/common/inc/msa_macros.h +0 -2393
  74. package/openh264/codec/common/inc/sad_common.h +0 -139
  75. package/openh264/codec/common/inc/typedefs.h +0 -86
  76. package/openh264/codec/common/inc/utils.h +0 -95
  77. package/openh264/codec/common/inc/version.h +0 -10
  78. package/openh264/codec/common/inc/version_gen.h.template +0 -6
  79. package/openh264/codec/common/inc/welsCodecTrace.h +0 -64
  80. package/openh264/codec/common/inc/wels_common_defs.h +0 -373
  81. package/openh264/codec/common/inc/wels_const_common.h +0 -63
  82. package/openh264/codec/common/loongarch/copy_mb_lsx.c +0 -194
  83. package/openh264/codec/common/loongarch/deblock_lsx.c +0 -1489
  84. package/openh264/codec/common/loongarch/intra_pred_com_lasx.c +0 -112
  85. package/openh264/codec/common/loongarch/intra_pred_com_lsx.c +0 -91
  86. package/openh264/codec/common/loongarch/mc_chroma_lsx.c +0 -192
  87. package/openh264/codec/common/loongarch/mc_horver_lsx.c +0 -654
  88. package/openh264/codec/common/loongarch/satd_sad_lasx.c +0 -568
  89. package/openh264/codec/common/meson.build +0 -84
  90. package/openh264/codec/common/mips/copy_mb_mmi.c +0 -477
  91. package/openh264/codec/common/mips/copy_mb_msa.c +0 -80
  92. package/openh264/codec/common/mips/deblock_mmi.c +0 -2826
  93. package/openh264/codec/common/mips/deblock_msa.c +0 -1024
  94. package/openh264/codec/common/mips/expand_picture_mmi.c +0 -673
  95. package/openh264/codec/common/mips/intra_pred_com_mmi.c +0 -548
  96. package/openh264/codec/common/mips/satd_sad_mmi.c +0 -2154
  97. package/openh264/codec/common/targets.mk +0 -136
  98. package/openh264/codec/common/x86/asm_inc.asm +0 -743
  99. package/openh264/codec/common/x86/cpuid.asm +0 -263
  100. package/openh264/codec/common/x86/dct.asm +0 -1036
  101. package/openh264/codec/common/x86/deblock.asm +0 -848
  102. package/openh264/codec/common/x86/expand_picture.asm +0 -728
  103. package/openh264/codec/common/x86/intra_pred_com.asm +0 -117
  104. package/openh264/codec/common/x86/mb_copy.asm +0 -615
  105. package/openh264/codec/common/x86/mc_chroma.asm +0 -313
  106. package/openh264/codec/common/x86/mc_luma.asm +0 -4490
  107. package/openh264/codec/common/x86/satd_sad.asm +0 -2734
  108. package/openh264/codec/common/x86/vaa.asm +0 -411
  109. package/openh264/codec/console/common/inc/read_config.h +0 -68
  110. package/openh264/codec/console/common/meson.build +0 -12
  111. package/openh264/codec/console/common/targets.mk +0 -20
  112. package/openh264/codec/console/dec/inc/d3d9_utils.h +0 -148
  113. package/openh264/codec/console/dec/meson.build +0 -15
  114. package/openh264/codec/console/dec/targets.mk +0 -20
  115. package/openh264/codec/console/enc/meson.build +0 -9
  116. package/openh264/codec/console/enc/targets.mk +0 -19
  117. package/openh264/codec/console/meson.build +0 -3
  118. package/openh264/codec/decoder/core/arm/block_add_neon.S +0 -129
  119. package/openh264/codec/decoder/core/arm/intra_pred_neon.S +0 -635
  120. package/openh264/codec/decoder/core/arm64/block_add_aarch64_neon.S +0 -131
  121. package/openh264/codec/decoder/core/arm64/intra_pred_aarch64_neon.S +0 -524
  122. package/openh264/codec/decoder/core/inc/au_parser.h +0 -199
  123. package/openh264/codec/decoder/core/inc/bit_stream.h +0 -62
  124. package/openh264/codec/decoder/core/inc/cabac_decoder.h +0 -111
  125. package/openh264/codec/decoder/core/inc/deblocking.h +0 -118
  126. package/openh264/codec/decoder/core/inc/dec_frame.h +0 -156
  127. package/openh264/codec/decoder/core/inc/dec_golomb.h +0 -344
  128. package/openh264/codec/decoder/core/inc/decode_mb_aux.h +0 -83
  129. package/openh264/codec/decoder/core/inc/decode_slice.h +0 -104
  130. package/openh264/codec/decoder/core/inc/decoder.h +0 -186
  131. package/openh264/codec/decoder/core/inc/decoder_context.h +0 -590
  132. package/openh264/codec/decoder/core/inc/decoder_core.h +0 -206
  133. package/openh264/codec/decoder/core/inc/error_code.h +0 -222
  134. package/openh264/codec/decoder/core/inc/error_concealment.h +0 -68
  135. package/openh264/codec/decoder/core/inc/fmo.h +0 -114
  136. package/openh264/codec/decoder/core/inc/get_intra_predictor.h +0 -191
  137. package/openh264/codec/decoder/core/inc/manage_dec_ref.h +0 -62
  138. package/openh264/codec/decoder/core/inc/mb_cache.h +0 -80
  139. package/openh264/codec/decoder/core/inc/memmgr_nal_unit.h +0 -66
  140. package/openh264/codec/decoder/core/inc/mv_pred.h +0 -195
  141. package/openh264/codec/decoder/core/inc/nal_prefix.h +0 -56
  142. package/openh264/codec/decoder/core/inc/nalu.h +0 -79
  143. package/openh264/codec/decoder/core/inc/parameter_sets.h +0 -217
  144. package/openh264/codec/decoder/core/inc/parse_mb_syn_cabac.h +0 -89
  145. package/openh264/codec/decoder/core/inc/parse_mb_syn_cavlc.h +0 -137
  146. package/openh264/codec/decoder/core/inc/pic_queue.h +0 -62
  147. package/openh264/codec/decoder/core/inc/picture.h +0 -112
  148. package/openh264/codec/decoder/core/inc/rec_mb.h +0 -104
  149. package/openh264/codec/decoder/core/inc/slice.h +0 -208
  150. package/openh264/codec/decoder/core/inc/vlc_decoder.h +0 -177
  151. package/openh264/codec/decoder/core/inc/wels_common_basis.h +0 -317
  152. package/openh264/codec/decoder/core/inc/wels_const.h +0 -65
  153. package/openh264/codec/decoder/core/inc/wels_decoder_thread.h +0 -170
  154. package/openh264/codec/decoder/core/loongarch/mb_aux_lsx.c +0 -296
  155. package/openh264/codec/decoder/core/mips/dct_mmi.c +0 -786
  156. package/openh264/codec/decoder/core/x86/dct.asm +0 -72
  157. package/openh264/codec/decoder/core/x86/intra_pred.asm +0 -1456
  158. package/openh264/codec/decoder/meson.build +0 -69
  159. package/openh264/codec/decoder/plus/inc/welsDecoderExt.h +0 -170
  160. package/openh264/codec/decoder/targets.mk +0 -115
  161. package/openh264/codec/encoder/core/arm/intra_pred_neon.S +0 -589
  162. package/openh264/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S +0 -735
  163. package/openh264/codec/encoder/core/arm/memory_neon.S +0 -62
  164. package/openh264/codec/encoder/core/arm/pixel_neon.S +0 -882
  165. package/openh264/codec/encoder/core/arm/reconstruct_neon.S +0 -903
  166. package/openh264/codec/encoder/core/arm/svc_motion_estimation.S +0 -366
  167. package/openh264/codec/encoder/core/arm64/intra_pred_aarch64_neon.S +0 -505
  168. package/openh264/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S +0 -611
  169. package/openh264/codec/encoder/core/arm64/memory_aarch64_neon.S +0 -63
  170. package/openh264/codec/encoder/core/arm64/pixel_aarch64_neon.S +0 -621
  171. package/openh264/codec/encoder/core/arm64/reconstruct_aarch64_neon.S +0 -717
  172. package/openh264/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S +0 -350
  173. package/openh264/codec/encoder/core/inc/as264_common.h +0 -138
  174. package/openh264/codec/encoder/core/inc/au_set.h +0 -152
  175. package/openh264/codec/encoder/core/inc/deblocking.h +0 -92
  176. package/openh264/codec/encoder/core/inc/decode_mb_aux.h +0 -112
  177. package/openh264/codec/encoder/core/inc/dq_map.h +0 -58
  178. package/openh264/codec/encoder/core/inc/encode_mb_aux.h +0 -199
  179. package/openh264/codec/encoder/core/inc/encoder.h +0 -148
  180. package/openh264/codec/encoder/core/inc/encoder_context.h +0 -240
  181. package/openh264/codec/encoder/core/inc/extern.h +0 -124
  182. package/openh264/codec/encoder/core/inc/get_intra_predictor.h +0 -186
  183. package/openh264/codec/encoder/core/inc/mb_cache.h +0 -141
  184. package/openh264/codec/encoder/core/inc/md.h +0 -181
  185. package/openh264/codec/encoder/core/inc/mt_defs.h +0 -91
  186. package/openh264/codec/encoder/core/inc/mv_pred.h +0 -191
  187. package/openh264/codec/encoder/core/inc/nal_encap.h +0 -143
  188. package/openh264/codec/encoder/core/inc/param_svc.h +0 -576
  189. package/openh264/codec/encoder/core/inc/parameter_sets.h +0 -181
  190. package/openh264/codec/encoder/core/inc/paraset_strategy.h +0 -310
  191. package/openh264/codec/encoder/core/inc/picture.h +0 -137
  192. package/openh264/codec/encoder/core/inc/picture_handle.h +0 -66
  193. package/openh264/codec/encoder/core/inc/rc.h +0 -284
  194. package/openh264/codec/encoder/core/inc/ref_list_mgr_svc.h +0 -148
  195. package/openh264/codec/encoder/core/inc/sample.h +0 -154
  196. package/openh264/codec/encoder/core/inc/set_mb_syn_cabac.h +0 -127
  197. package/openh264/codec/encoder/core/inc/set_mb_syn_cavlc.h +0 -92
  198. package/openh264/codec/encoder/core/inc/slice.h +0 -212
  199. package/openh264/codec/encoder/core/inc/slice_multi_threading.h +0 -97
  200. package/openh264/codec/encoder/core/inc/stat.h +0 -102
  201. package/openh264/codec/encoder/core/inc/svc_base_layer_md.h +0 -102
  202. package/openh264/codec/encoder/core/inc/svc_enc_frame.h +0 -136
  203. package/openh264/codec/encoder/core/inc/svc_enc_golomb.h +0 -123
  204. package/openh264/codec/encoder/core/inc/svc_enc_macroblock.h +0 -82
  205. package/openh264/codec/encoder/core/inc/svc_enc_slice_segment.h +0 -212
  206. package/openh264/codec/encoder/core/inc/svc_encode_mb.h +0 -63
  207. package/openh264/codec/encoder/core/inc/svc_encode_slice.h +0 -184
  208. package/openh264/codec/encoder/core/inc/svc_mode_decision.h +0 -94
  209. package/openh264/codec/encoder/core/inc/svc_motion_estimate.h +0 -369
  210. package/openh264/codec/encoder/core/inc/svc_set_mb_syn.h +0 -70
  211. package/openh264/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h +0 -67
  212. package/openh264/codec/encoder/core/inc/vlc_encoder.h +0 -92
  213. package/openh264/codec/encoder/core/inc/wels_common_basis.h +0 -160
  214. package/openh264/codec/encoder/core/inc/wels_const.h +0 -174
  215. package/openh264/codec/encoder/core/inc/wels_func_ptr_def.h +0 -300
  216. package/openh264/codec/encoder/core/inc/wels_preprocess.h +0 -251
  217. package/openh264/codec/encoder/core/inc/wels_task_base.h +0 -79
  218. package/openh264/codec/encoder/core/inc/wels_task_encoder.h +0 -142
  219. package/openh264/codec/encoder/core/inc/wels_task_management.h +0 -135
  220. package/openh264/codec/encoder/core/inc/wels_transpose_matrix.h +0 -58
  221. package/openh264/codec/encoder/core/loongarch/dct_lasx.c +0 -452
  222. package/openh264/codec/encoder/core/loongarch/get_intra_predictor_lsx.c +0 -166
  223. package/openh264/codec/encoder/core/loongarch/quant_lsx.c +0 -153
  224. package/openh264/codec/encoder/core/loongarch/sample_lasx.c +0 -87
  225. package/openh264/codec/encoder/core/loongarch/svc_motion_estimate_lsx.c +0 -104
  226. package/openh264/codec/encoder/core/mips/dct_mmi.c +0 -529
  227. package/openh264/codec/encoder/core/mips/quant_mmi.c +0 -553
  228. package/openh264/codec/encoder/core/mips/score_mmi.c +0 -324
  229. package/openh264/codec/encoder/core/x86/coeff.asm +0 -695
  230. package/openh264/codec/encoder/core/x86/dct.asm +0 -108
  231. package/openh264/codec/encoder/core/x86/intra_pred.asm +0 -1129
  232. package/openh264/codec/encoder/core/x86/matrix_transpose.asm +0 -395
  233. package/openh264/codec/encoder/core/x86/memzero.asm +0 -132
  234. package/openh264/codec/encoder/core/x86/quant.asm +0 -507
  235. package/openh264/codec/encoder/core/x86/sample_sc.asm +0 -1829
  236. package/openh264/codec/encoder/core/x86/score.asm +0 -363
  237. package/openh264/codec/encoder/meson.build +0 -98
  238. package/openh264/codec/encoder/plus/inc/welsEncoderExt.h +0 -129
  239. package/openh264/codec/encoder/targets.mk +0 -146
  240. package/openh264/codec/meson.build +0 -9
  241. package/openh264/codec/processing/interface/IWelsVP.h +0 -310
  242. package/openh264/codec/processing/meson.build +0 -71
  243. package/openh264/codec/processing/targets.mk +0 -117
  244. package/openh264/docs/doxygen/Doxyfile +0 -1865
  245. package/openh264/docs/doxygen/Home.rest +0 -25
  246. package/openh264/docs/doxygen/ISVCDecoder.rest +0 -19
  247. package/openh264/docs/doxygen/ISVCEncoder.rest +0 -16
  248. package/openh264/docs/doxygen/UsageExampleForDecoder.rest +0 -10
  249. package/openh264/docs/doxygen/UsageExampleForEncoder.rest +0 -15
  250. package/openh264/docs/doxygen2rst.py +0 -619
  251. package/openh264/gmpopenh264.info +0 -4
  252. package/openh264/gradlew +0 -172
  253. package/openh264/meson.build +0 -218
  254. package/openh264/meson_options.txt +0 -1
  255. package/openh264/module/RefCounted.h +0 -141
  256. package/openh264/module/gmp-openh264.cpp +0 -1196
  257. package/openh264/module/targets.mk +0 -14
  258. package/openh264/module/task_utils.h +0 -38
  259. package/openh264/module/task_utils.py +0 -207
  260. package/openh264/module/task_utils_generated.h +0 -2087
  261. package/openh264/openh264.def +0 -7
  262. package/openh264/openh264.pc.in +0 -10
  263. package/openh264/openh264.rc +0 -61
  264. package/openh264/openh264.rc.template +0 -61
  265. package/openh264/res/Adobe_PDF_sample_a_1024x768_50Frms.264 +0 -0
  266. package/openh264/res/BA1_FT_C.264 +0 -0
  267. package/openh264/res/BA1_Sony_D.jsv +0 -0
  268. package/openh264/res/BAMQ1_JVC_C.264 +0 -0
  269. package/openh264/res/BAMQ2_JVC_C.264 +0 -0
  270. package/openh264/res/BANM_MW_D.264 +0 -0
  271. package/openh264/res/BASQP1_Sony_C.jsv +0 -0
  272. package/openh264/res/BA_MW_D.264 +0 -0
  273. package/openh264/res/BA_MW_D_IDR_LOST.264 +0 -0
  274. package/openh264/res/BA_MW_D_P_LOST.264 +0 -0
  275. package/openh264/res/CI1_FT_B.264 +0 -0
  276. package/openh264/res/CI_MW_D.264 +0 -0
  277. package/openh264/res/CVFC1_Sony_C.jsv +0 -0
  278. package/openh264/res/CVPCMNL1_SVA_C.264 +0 -0
  279. package/openh264/res/CiscoVT2people_160x96_6fps.yuv +0 -1
  280. package/openh264/res/CiscoVT2people_320x192_12fps.yuv +0 -1
  281. package/openh264/res/Cisco_Absolute_Power_1280x720_30fps.yuv +0 -3607
  282. package/openh264/res/Cisco_Adobe_PDF_sample_a_1024x768_CAVLC_Bframe_9.264 +0 -0
  283. package/openh264/res/Cisco_Men_whisper_640x320_CABAC_Bframe_9.264 +0 -0
  284. package/openh264/res/Cisco_Men_whisper_640x320_CAVLC_Bframe_9.264 +0 -0
  285. package/openh264/res/Error_I_P.264 +0 -0
  286. package/openh264/res/LS_SVA_D.264 +0 -0
  287. package/openh264/res/MIDR_MW_D.264 +0 -0
  288. package/openh264/res/MPS_MW_A.264 +0 -0
  289. package/openh264/res/MR1_BT_A.h264 +0 -0
  290. package/openh264/res/MR1_MW_A.264 +0 -0
  291. package/openh264/res/MR2_MW_A.264 +0 -0
  292. package/openh264/res/MR2_TANDBERG_E.264 +0 -0
  293. package/openh264/res/NL1_Sony_D.jsv +0 -0
  294. package/openh264/res/NLMQ1_JVC_C.264 +0 -0
  295. package/openh264/res/NLMQ2_JVC_C.264 +0 -0
  296. package/openh264/res/NRF_MW_E.264 +0 -0
  297. package/openh264/res/QCIF_2P_I_allIPCM.264 +0 -0
  298. package/openh264/res/SVA_BA1_B.264 +0 -0
  299. package/openh264/res/SVA_BA2_D.264 +0 -0
  300. package/openh264/res/SVA_Base_B.264 +0 -0
  301. package/openh264/res/SVA_CL1_E.264 +0 -0
  302. package/openh264/res/SVA_FM1_E.264 +0 -0
  303. package/openh264/res/SVA_NL1_B.264 +0 -0
  304. package/openh264/res/SVA_NL2_E.264 +0 -0
  305. package/openh264/res/SarVui.264 +0 -0
  306. package/openh264/res/Static.264 +0 -0
  307. package/openh264/res/Static_152_100.yuv +0 -1
  308. package/openh264/res/VID_1280x544_cabac_temporal_direct.264 +0 -0
  309. package/openh264/res/VID_1280x544_cavlc_temporal_direct.264 +0 -0
  310. package/openh264/res/VID_1280x720_cabac_temporal_direct.264 +0 -0
  311. package/openh264/res/VID_1280x720_cavlc_temporal_direct.264 +0 -0
  312. package/openh264/res/VID_1920x1080_cabac_temporal_direct.264 +0 -0
  313. package/openh264/res/VID_1920x1080_cavlc_temporal_direct.264 +0 -0
  314. package/openh264/res/Zhling_1280x720.264 +0 -0
  315. package/openh264/res/jm_1080p_allslice.264 +0 -0
  316. package/openh264/res/sps_subsetsps_bothVUI.264 +0 -0
  317. package/openh264/res/test_cif_I_CABAC_PCM.264 +0 -0
  318. package/openh264/res/test_cif_I_CABAC_slice.264 +0 -0
  319. package/openh264/res/test_cif_P_CABAC_slice.264 +0 -0
  320. package/openh264/res/test_qcif_cabac.264 +0 -0
  321. package/openh264/res/test_scalinglist_jm.264 +0 -0
  322. package/openh264/res/test_vd_1d.264 +0 -0
  323. package/openh264/res/test_vd_rc.264 +0 -0
  324. package/openh264/run_Test.sh +0 -91
  325. package/openh264/settings.gradle +0 -4
  326. package/openh264/subprojects/gtest.wrap +0 -10
  327. package/openh264/testbin/AutoBuild_Windows_VS2008.bat +0 -59
  328. package/openh264/testbin/CmdLineExample.sh +0 -7
  329. package/openh264/testbin/CmdLineReadMe +0 -22
  330. package/openh264/testbin/layer2.cfg +0 -37
  331. package/openh264/testbin/layer2_arbitrary_res.cfg +0 -37
  332. package/openh264/testbin/layer2_vd.cfg +0 -38
  333. package/openh264/testbin/layer2_vd_rc.cfg +0 -38
  334. package/openh264/testbin/welsenc.cfg +0 -71
  335. package/openh264/testbin/welsenc_arbitrary_res.cfg +0 -70
  336. package/openh264/testbin/welsenc_ios.cfg +0 -71
  337. package/openh264/testbin/welsenc_vd_1d.cfg +0 -70
  338. package/openh264/testbin/welsenc_vd_rc.cfg +0 -69
  339. package/openh264/ut.def +0 -2
@@ -1,1489 +0,0 @@
1
- /*!
2
- **********************************************************************************
3
- * Copyright (c) 2022 Loongson Technology Corporation Limited
4
- * Contributed by Lu Wang <wanglu@loongson.cn>
5
- * Jin Bo <jinbo@loongson.cn>
6
- *
7
- * \copy
8
- * Copyright (c) 2013, Cisco Systems
9
- * All rights reserved.
10
- *
11
- * Redistribution and use in source and binary forms, with or without
12
- * modification, are permitted provided that the following conditions
13
- * are met:
14
- *
15
- * * Redistributions of source code must retain the above copyright
16
- * notice, this list of conditions and the following disclaimer.
17
- *
18
- * * Redistributions in binary form must reproduce the above copyright
19
- * notice, this list of conditions and the following disclaimer in
20
- * the documentation and/or other materials provided with the
21
- * distribution.
22
- *
23
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
- * POSSIBILITY OF SUCH DAMAGE.
35
- *
36
- * \file deblock_lsx.c
37
- *
38
- * \brief Loongson optimization
39
- *
40
- * \date 22/2/2022 Created
41
- *
42
- **********************************************************************************
43
- */
44
-
45
- #include <stdint.h>
46
- #include "loongson_intrinsics.h"
47
-
48
- void DeblockLumaLt4V_lsx (uint8_t* pPix, int32_t iStrideX,
49
- int32_t iAlpha, int32_t iBeta, int8_t* pTc) {
50
- __m128i p0, p1, p2, q0, q1, q2;
51
- __m128i p0_l, p1_l, p2_l, q0_l, q1_l, q2_l;
52
- __m128i p0_h, p1_h, p2_h, q0_h, q1_h, q2_h;
53
- __m128i t0, t1, t2, t3, t;
54
- __m128i t0_l, t0_h, t1_l, t1_h, t2_l, t2_h;
55
- __m128i iTc, iTc0, negiTc, negiTc0, f, flags;
56
- __m128i iTc_l, iTc_h, negiTc_l, negiTc_h;
57
- __m128i iTc0_l, iTc0_h, negiTc0_l, negiTc0_h;
58
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0;
59
-
60
- __m128i zero = __lsx_vldi(0);
61
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
62
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
63
- __m128i shuf = {0x0101010100000000, 0x0303030302020202};
64
- __m128i not_255 = {0xff00ff00ff00ff00, 0xff00ff00ff00ff00};
65
- int32_t iStrideX_x0 = 0;
66
- int32_t iStrideX_x2 = iStrideX << 1;
67
- int32_t iStrideX_x3 = iStrideX_x2 + iStrideX;
68
-
69
- iTc0 = __lsx_vldx(pTc, 0);
70
- iTc0 = __lsx_vshuf_b(iTc0, iTc0, shuf);
71
- negiTc0 = __lsx_vneg_b(iTc0);
72
- iTc = iTc0;
73
-
74
- DUP4_ARG2(__lsx_vldx, pPix, -iStrideX, pPix, -iStrideX_x2, pPix, -iStrideX_x3,
75
- pPix, iStrideX_x0, p0, p1, p2, q0);
76
- DUP2_ARG2(__lsx_vldx, pPix, iStrideX, pPix, iStrideX_x2, q1, q2);
77
-
78
- DUP4_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, q1, q0, p2, p0,
79
- bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0);
80
- bDetaQ2Q0 = __lsx_vabsd_bu(q2, q0);
81
- DUP4_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaQ1Q0, beta,
82
- bDetaP2P0, beta, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0);
83
- bDetaQ2Q0 = __lsx_vslt_bu(bDetaQ2Q0, beta);
84
-
85
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, p2, zero, q0,
86
- p0_l, p1_l, p2_l, q0_l);
87
- DUP2_ARG2(__lsx_vilvl_b, zero, q1, zero, q2, q1_l, q2_l);
88
- DUP4_ARG2(__lsx_vilvh_b, zero, p0, zero, p1, zero, p2, zero, q0,
89
- p0_h, p1_h, p2_h, q0_h);
90
- DUP2_ARG2(__lsx_vilvh_b, zero, q1, zero, q2, q1_h, q2_h);
91
-
92
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, f, bDetaQ1Q0, f, f);
93
- flags = __lsx_vsle_b(zero, iTc0);
94
- DUP2_ARG2(__lsx_vand_v, f, flags, flags, bDetaP2P0, flags, flags);
95
- flags = __lsx_vandi_b(flags, 1);
96
- iTc = __lsx_vadd_b(iTc, flags);
97
- flags = __lsx_vsle_b(zero, iTc0);
98
- DUP2_ARG2(__lsx_vand_v, f, flags, flags, bDetaQ2Q0, flags, flags);
99
- flags = __lsx_vandi_b(flags, 1);
100
- iTc = __lsx_vadd_b(iTc, flags);
101
- negiTc = __lsx_vneg_b(iTc);
102
-
103
- flags = __lsx_vslt_b(iTc0, zero);
104
- iTc0_l = __lsx_vilvl_b(flags, iTc0);
105
- iTc0_h = __lsx_vilvh_b(flags, iTc0);
106
- flags = __lsx_vslt_b(negiTc0, zero);
107
- negiTc0_l = __lsx_vilvl_b(flags, negiTc0);
108
- negiTc0_h = __lsx_vilvh_b(flags, negiTc0);
109
-
110
- flags = __lsx_vslt_b(iTc, zero);
111
- iTc_l = __lsx_vilvl_b(flags, iTc);
112
- iTc_h = __lsx_vilvh_b(flags, iTc);
113
- flags = __lsx_vslt_b(negiTc, zero);
114
- negiTc_l = __lsx_vilvl_b(flags, negiTc);
115
- negiTc_h = __lsx_vilvh_b(flags, negiTc);
116
-
117
- t0_l = __lsx_vadd_h(p0_l, q0_l);
118
- t0_l = __lsx_vaddi_hu(t0_l, 1);
119
- t0_l = __lsx_vsrai_h(t0_l, 1);
120
- t0_l = __lsx_vadd_h(p2_l, t0_l);
121
- t = __lsx_vslli_h(p1_l, 1);
122
- t0_l = __lsx_vsub_h(t0_l, t);
123
- t0_l = __lsx_vsrai_h(t0_l, 1);
124
- t0_l = __lsx_vmin_h(iTc0_l, t0_l);
125
- t0_l = __lsx_vmax_h(negiTc0_l, t0_l);
126
- t0_l = __lsx_vadd_h(p1_l, t0_l);
127
-
128
- t1_l = __lsx_vadd_h(p0_l, q0_l);
129
- t1_l = __lsx_vaddi_hu(t1_l, 1);
130
- t1_l = __lsx_vsrai_h(t1_l, 1);
131
- t1_l = __lsx_vadd_h(q2_l, t1_l);
132
- t = __lsx_vslli_h(q1_l, 1);
133
- t1_l = __lsx_vsub_h(t1_l, t);
134
- t1_l = __lsx_vsrai_h(t1_l, 1);
135
- t1_l = __lsx_vmin_h(iTc0_l, t1_l);
136
- t1_l = __lsx_vmax_h(negiTc0_l, t1_l);
137
- t1_l = __lsx_vadd_h(q1_l, t1_l);
138
-
139
- t0_h = __lsx_vadd_h(p0_h, q0_h);
140
- t0_h = __lsx_vaddi_hu(t0_h, 1);
141
- t0_h = __lsx_vsrai_h(t0_h, 1);
142
- t0_h = __lsx_vadd_h(p2_h, t0_h);
143
- t = __lsx_vslli_h(p1_h, 1);
144
- t0_h = __lsx_vsub_h(t0_h, t);
145
- t0_h = __lsx_vsrai_h(t0_h, 1);
146
- t0_h = __lsx_vmin_h(iTc0_h, t0_h);
147
- t0_h = __lsx_vmax_h(negiTc0_h, t0_h);
148
- t0_h = __lsx_vadd_h(p1_h, t0_h);
149
-
150
- t1_h = __lsx_vadd_h(p0_h, q0_h);
151
- t1_h = __lsx_vaddi_hu(t1_h, 1);
152
- t1_h = __lsx_vsrai_h(t1_h, 1);
153
- t1_h = __lsx_vadd_h(q2_h, t1_h);
154
- t = __lsx_vslli_h(q1_h, 1);
155
- t1_h = __lsx_vsub_h(t1_h, t);
156
- t1_h = __lsx_vsrai_h(t1_h, 1);
157
- t1_h = __lsx_vmin_h(iTc0_h, t1_h);
158
- t1_h = __lsx_vmax_h(negiTc0_h, t1_h);
159
- t1_h = __lsx_vadd_h(q1_h, t1_h);
160
-
161
- t2_l = __lsx_vsub_h(q0_l, p0_l);
162
- t2_l = __lsx_vslli_h(t2_l, 2);
163
- t2_l = __lsx_vadd_h(t2_l, p1_l);
164
- t2_l = __lsx_vsub_h(t2_l, q1_l);
165
- t2_l = __lsx_vaddi_hu(t2_l, 4);
166
- t2_l = __lsx_vsrai_h(t2_l, 3);
167
- t2_l = __lsx_vmin_h(iTc_l, t2_l);
168
- t2_l = __lsx_vmax_h(negiTc_l, t2_l);
169
-
170
- t2_h = __lsx_vsub_h(q0_h, p0_h);
171
- t2_h = __lsx_vslli_h(t2_h, 2);
172
- t2_h = __lsx_vadd_h(t2_h, p1_h);
173
- t2_h = __lsx_vsub_h(t2_h, q1_h);
174
- t2_h = __lsx_vaddi_hu(t2_h, 4);
175
- t2_h = __lsx_vsrai_h(t2_h, 3);
176
- t2_h = __lsx_vmin_h(iTc_h, t2_h);
177
- t2_h = __lsx_vmax_h(negiTc_h, t2_h);
178
-
179
- p0_l = __lsx_vadd_h(p0_l, t2_l);
180
- p1_l = __lsx_vand_v(p0_l, not_255);
181
- p2_l = __lsx_vsle_h(zero, p0_l);
182
- flags = __lsx_vseq_h(p1_l, zero);
183
- p0_l = __lsx_vand_v(p0_l, flags);
184
- flags = __lsx_vnor_v(flags,flags);
185
- p2_l = __lsx_vand_v(p2_l, flags);
186
- p0_l = __lsx_vadd_h(p0_l, p2_l);
187
-
188
- q0_l = __lsx_vsub_h(q0_l, t2_l);
189
- q1_l = __lsx_vand_v(q0_l, not_255);
190
- q2_l = __lsx_vsle_h(zero, q0_l);
191
- flags = __lsx_vseq_h(q1_l, zero);
192
- q0_l = __lsx_vand_v(q0_l, flags);
193
- flags = __lsx_vnor_v(flags, flags);
194
- q2_l = __lsx_vand_v(q2_l, flags);
195
- q0_l = __lsx_vadd_h(q0_l, q2_l);
196
-
197
- p0_h = __lsx_vadd_h(p0_h, t2_h);
198
- p1_h = __lsx_vand_v(p0_h, not_255);
199
- p2_h = __lsx_vsle_h(zero, p0_h);
200
- flags = __lsx_vseq_h(p1_h, zero);
201
- p0_h = __lsx_vand_v(p0_h, flags);
202
- flags = __lsx_vnor_v(flags, flags);
203
- p2_h = __lsx_vand_v(p2_h, flags);
204
- p0_h = __lsx_vadd_h(p0_h, p2_h);
205
-
206
- q0_h = __lsx_vsub_h(q0_h, t2_h);
207
- q1_h = __lsx_vand_v(q0_h, not_255);
208
- q2_h = __lsx_vsle_h(zero, q0_h);
209
- flags = __lsx_vseq_h(q1_h, zero);
210
- q0_h = __lsx_vand_v(q0_h, flags);
211
- flags = __lsx_vnor_v(flags, flags);
212
- q2_h = __lsx_vand_v(q2_h, flags);
213
- q0_h = __lsx_vadd_h(q0_h, q2_h);
214
-
215
- DUP4_ARG2(__lsx_vpickev_b, t0_h, t0_l, t1_h, t1_l,
216
- p0_h, p0_l, q0_h, q0_l, t0, t1, t2, t3);
217
-
218
- flags = __lsx_vsle_b(zero, iTc0);
219
- flags = __lsx_vand_v(flags, f);
220
- t2 = __lsx_vand_v(t2, flags);
221
- t = __lsx_vnor_v(flags,flags);
222
- p0 = __lsx_vand_v(p0, t);
223
- p0 = __lsx_vadd_b(t2, p0);
224
- t3 = __lsx_vand_v(t3, flags);
225
- t = __lsx_vnor_v(flags,flags);
226
- q0 = __lsx_vand_v(q0, t);
227
- q0 = __lsx_vadd_b(t3, q0);
228
-
229
- DUP2_ARG2(__lsx_vand_v, flags, bDetaP2P0, t0, t, t, t0);
230
- t = __lsx_vnor_v(t, t);
231
- p1 = __lsx_vand_v(p1, t);
232
- p1 = __lsx_vadd_b(t0, p1);
233
- DUP2_ARG2(__lsx_vand_v, flags, bDetaQ2Q0, t1, t, t, t1);
234
- t = __lsx_vnor_v(t, t);
235
- q1 = __lsx_vand_v(q1, t);
236
- q1 = __lsx_vadd_b(t1, q1);
237
-
238
- __lsx_vstx(p1, pPix, -iStrideX_x2);
239
- __lsx_vstx(p0, pPix, -iStrideX);
240
- __lsx_vstx(q0, pPix, iStrideX_x0);
241
- __lsx_vstx(q1, pPix, iStrideX);
242
- }
243
-
244
- void DeblockLumaLt4H_lsx (uint8_t* pPix, int32_t iStrideY,
245
- int32_t iAlpha, int32_t iBeta, int8_t* pTc) {
246
- __m128i p0, p1, p2, q0, q1, q2;
247
- __m128i p0_l, p1_l, p2_l, q0_l, q1_l, q2_l;
248
- __m128i p0_h, p1_h, p2_h, q0_h, q1_h, q2_h;
249
- __m128i t0, t1, t2, t3, t;
250
- __m128i t0_l, t0_h, t1_l, t1_h, t2_l, t2_h;
251
- __m128i iTc, iTc0, negiTc, negiTc0, f, flags;
252
- __m128i iTc_l, iTc_h, negiTc_l, negiTc_h;
253
- __m128i iTc0_l, iTc0_h, negiTc0_l, negiTc0_h;
254
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0;
255
-
256
- __m128i zero = __lsx_vldi(0);
257
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
258
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
259
- __m128i shuf = {0x0101010100000000, 0x0303030302020202};
260
- __m128i not_255 = {0xff00ff00ff00ff00, 0xff00ff00ff00ff00};
261
- int32_t iStrideY_x0 = 0;
262
- int32_t iStrideY_x2 = iStrideY << 1;
263
- int32_t iStrideY_x3 = iStrideY_x2 + iStrideY;
264
- int32_t iStrideY_x4 = iStrideY << 2;
265
-
266
- iTc0 = __lsx_vldx(pTc, 0);
267
- iTc0 = __lsx_vshuf_b(iTc0, iTc0, shuf);
268
- negiTc0 = __lsx_vneg_b(iTc0);
269
- iTc = iTc0;
270
-
271
- pPix -= 3;
272
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
273
- pPix, iStrideY_x3, p0_l, p1_l, p2_l, q0_l);
274
- pPix += iStrideY_x4;
275
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
276
- pPix, iStrideY_x3, p0_h, p1_h, p2_h, q0_h);
277
- pPix += iStrideY_x4;
278
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
279
- pPix, iStrideY_x3, q1_l, q2_l, t0_l, t1_l);
280
- pPix += iStrideY_x4;
281
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
282
- pPix, iStrideY_x3, q1_h, q2_h, t0_h, t1_h);
283
- LSX_TRANSPOSE16x8_B(p0_l, p1_l, p2_l, q0_l, p0_h, p1_h, p2_h, q0_h, q1_l, q2_l,
284
- t0_l, t1_l, q1_h, q2_h, t0_h, t1_h, p2, p1, p0, q0, q1, q2,
285
- t, f);
286
-
287
- DUP4_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, q1, q0, p2, p0,
288
- bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0);
289
- bDetaQ2Q0 = __lsx_vabsd_bu(q2, q0);
290
- DUP4_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaQ1Q0, beta,
291
- bDetaP2P0, beta, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0);
292
- bDetaQ2Q0 = __lsx_vslt_bu(bDetaQ2Q0, beta);
293
-
294
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, p2, zero, q0,
295
- p0_l, p1_l, p2_l, q0_l);
296
- DUP2_ARG2(__lsx_vilvl_b, zero, q1, zero, q2, q1_l, q2_l);
297
- DUP4_ARG2(__lsx_vilvh_b, zero, p0, zero, p1, zero, p2, zero, q0,
298
- p0_h, p1_h, p2_h, q0_h);
299
- DUP2_ARG2(__lsx_vilvh_b, zero, q1, zero, q2, q1_h, q2_h);
300
-
301
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, f, bDetaQ1Q0, f, f);
302
- flags = __lsx_vsle_b(zero, iTc0);
303
- DUP2_ARG2(__lsx_vand_v, f, flags, flags, bDetaP2P0, flags, flags);
304
- flags = __lsx_vandi_b(flags, 1);
305
- iTc = __lsx_vadd_b(iTc, flags);
306
- flags = __lsx_vsle_b(zero, iTc0);
307
- DUP2_ARG2(__lsx_vand_v, f, flags, flags, bDetaQ2Q0, flags, flags);
308
- flags = __lsx_vandi_b(flags, 1);
309
- iTc = __lsx_vadd_b(iTc, flags);
310
- negiTc = __lsx_vneg_b(iTc);
311
-
312
- flags = __lsx_vslt_b(iTc0, zero);
313
- iTc0_l = __lsx_vilvl_b(flags, iTc0);
314
- iTc0_h = __lsx_vilvh_b(flags, iTc0);
315
- flags = __lsx_vslt_b(negiTc0, zero);
316
- negiTc0_l = __lsx_vilvl_b(flags, negiTc0);
317
- negiTc0_h = __lsx_vilvh_b(flags, negiTc0);
318
-
319
- flags = __lsx_vslt_b(iTc, zero);
320
- iTc_l = __lsx_vilvl_b(flags, iTc);
321
- iTc_h = __lsx_vilvh_b(flags, iTc);
322
- flags = __lsx_vslt_b(negiTc, zero);
323
- negiTc_l = __lsx_vilvl_b(flags, negiTc);
324
- negiTc_h = __lsx_vilvh_b(flags, negiTc);
325
-
326
- t0_l = __lsx_vadd_h(p0_l, q0_l);
327
- t0_l = __lsx_vaddi_hu(t0_l, 1);
328
- t0_l = __lsx_vsrai_h(t0_l, 1);
329
- t0_l = __lsx_vadd_h(p2_l, t0_l);
330
- t = __lsx_vslli_h(p1_l, 1);
331
- t0_l = __lsx_vsub_h(t0_l, t);
332
- t0_l = __lsx_vsrai_h(t0_l, 1);
333
- t0_l = __lsx_vmin_h(iTc0_l, t0_l);
334
- t0_l = __lsx_vmax_h(negiTc0_l, t0_l);
335
- t0_l = __lsx_vadd_h(p1_l, t0_l);
336
-
337
- t1_l = __lsx_vadd_h(p0_l, q0_l);
338
- t1_l = __lsx_vaddi_hu(t1_l, 1);
339
- t1_l = __lsx_vsrai_h(t1_l, 1);
340
- t1_l = __lsx_vadd_h(q2_l, t1_l);
341
- t = __lsx_vslli_h(q1_l, 1);
342
- t1_l = __lsx_vsub_h(t1_l, t);
343
- t1_l = __lsx_vsrai_h(t1_l, 1);
344
- t1_l = __lsx_vmin_h(iTc0_l, t1_l);
345
- t1_l = __lsx_vmax_h(negiTc0_l, t1_l);
346
- t1_l = __lsx_vadd_h(q1_l, t1_l);
347
-
348
- t0_h = __lsx_vadd_h(p0_h, q0_h);
349
- t0_h = __lsx_vaddi_hu(t0_h, 1);
350
- t0_h = __lsx_vsrai_h(t0_h, 1);
351
- t0_h = __lsx_vadd_h(p2_h, t0_h);
352
- t = __lsx_vslli_h(p1_h, 1);
353
- t0_h = __lsx_vsub_h(t0_h, t);
354
- t0_h = __lsx_vsrai_h(t0_h, 1);
355
- t0_h = __lsx_vmin_h(iTc0_h, t0_h);
356
- t0_h = __lsx_vmax_h(negiTc0_h, t0_h);
357
- t0_h = __lsx_vadd_h(p1_h, t0_h);
358
-
359
- t1_h = __lsx_vadd_h(p0_h, q0_h);
360
- t1_h = __lsx_vaddi_hu(t1_h, 1);
361
- t1_h = __lsx_vsrai_h(t1_h, 1);
362
- t1_h = __lsx_vadd_h(q2_h, t1_h);
363
- t = __lsx_vslli_h(q1_h, 1);
364
- t1_h = __lsx_vsub_h(t1_h, t);
365
- t1_h = __lsx_vsrai_h(t1_h, 1);
366
- t1_h = __lsx_vmin_h(iTc0_h, t1_h);
367
- t1_h = __lsx_vmax_h(negiTc0_h, t1_h);
368
- t1_h = __lsx_vadd_h(q1_h, t1_h);
369
-
370
- t2_l = __lsx_vsub_h(q0_l, p0_l);
371
- t2_l = __lsx_vslli_h(t2_l, 2);
372
- t2_l = __lsx_vadd_h(t2_l, p1_l);
373
- t2_l = __lsx_vsub_h(t2_l, q1_l);
374
- t2_l = __lsx_vaddi_hu(t2_l, 4);
375
- t2_l = __lsx_vsrai_h(t2_l, 3);
376
- t2_l = __lsx_vmin_h(iTc_l, t2_l);
377
- t2_l = __lsx_vmax_h(negiTc_l, t2_l);
378
-
379
- t2_h = __lsx_vsub_h(q0_h, p0_h);
380
- t2_h = __lsx_vslli_h(t2_h, 2);
381
- t2_h = __lsx_vadd_h(t2_h, p1_h);
382
- t2_h = __lsx_vsub_h(t2_h, q1_h);
383
- t2_h = __lsx_vaddi_hu(t2_h, 4);
384
- t2_h = __lsx_vsrai_h(t2_h, 3);
385
- t2_h = __lsx_vmin_h(iTc_h, t2_h);
386
- t2_h = __lsx_vmax_h(negiTc_h, t2_h);
387
-
388
- p0_l = __lsx_vadd_h(p0_l, t2_l);
389
- p1_l = __lsx_vand_v(p0_l, not_255);
390
- p2_l = __lsx_vsle_h(zero, p0_l);
391
- flags = __lsx_vseq_h(p1_l, zero);
392
- p0_l = __lsx_vand_v(p0_l, flags);
393
- flags = __lsx_vnor_v(flags,flags);
394
- p2_l = __lsx_vand_v(p2_l, flags);
395
- p0_l = __lsx_vadd_h(p0_l, p2_l);
396
-
397
- q0_l = __lsx_vsub_h(q0_l, t2_l);
398
- q1_l = __lsx_vand_v(q0_l, not_255);
399
- q2_l = __lsx_vsle_h(zero, q0_l);
400
- flags = __lsx_vseq_h(q1_l, zero);
401
- q0_l = __lsx_vand_v(q0_l, flags);
402
- flags = __lsx_vnor_v(flags, flags);
403
- q2_l = __lsx_vand_v(q2_l, flags);
404
- q0_l = __lsx_vadd_h(q0_l, q2_l);
405
-
406
- p0_h = __lsx_vadd_h(p0_h, t2_h);
407
- p1_h = __lsx_vand_v(p0_h, not_255);
408
- p2_h = __lsx_vsle_h(zero, p0_h);
409
- flags = __lsx_vseq_h(p1_h, zero);
410
- p0_h = __lsx_vand_v(p0_h, flags);
411
- flags = __lsx_vnor_v(flags, flags);
412
- p2_h = __lsx_vand_v(p2_h, flags);
413
- p0_h = __lsx_vadd_h(p0_h, p2_h);
414
-
415
- q0_h = __lsx_vsub_h(q0_h, t2_h);
416
- q1_h = __lsx_vand_v(q0_h, not_255);
417
- q2_h = __lsx_vsle_h(zero, q0_h);
418
- flags = __lsx_vseq_h(q1_h, zero);
419
- q0_h = __lsx_vand_v(q0_h, flags);
420
- flags = __lsx_vnor_v(flags, flags);
421
- q2_h = __lsx_vand_v(q2_h, flags);
422
- q0_h = __lsx_vadd_h(q0_h, q2_h);
423
-
424
- DUP4_ARG2(__lsx_vpickev_b, t0_h, t0_l, t1_h, t1_l,
425
- p0_h, p0_l, q0_h, q0_l, t0, t1, t2, t3);
426
-
427
- flags = __lsx_vsle_b(zero, iTc0);
428
- flags = __lsx_vand_v(flags, f);
429
- t2 = __lsx_vand_v(t2, flags);
430
- t = __lsx_vnor_v(flags,flags);
431
- p0 = __lsx_vand_v(p0, t);
432
- p0 = __lsx_vadd_b(t2, p0);
433
- t3 = __lsx_vand_v(t3, flags);
434
- t = __lsx_vnor_v(flags,flags);
435
- q0 = __lsx_vand_v(q0, t);
436
- q0 = __lsx_vadd_b(t3, q0);
437
-
438
- DUP2_ARG2(__lsx_vand_v, flags, bDetaP2P0, t0, t, t, t0);
439
- t = __lsx_vnor_v(t, t);
440
- p1 = __lsx_vand_v(p1, t);
441
- p1 = __lsx_vadd_b(t0, p1);
442
- DUP2_ARG2(__lsx_vand_v, flags, bDetaQ2Q0, t1, t, t, t1);
443
- t = __lsx_vnor_v(t, t);
444
- q1 = __lsx_vand_v(q1, t);
445
- q1 = __lsx_vadd_b(t1, q1);
446
-
447
- DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, t0, t2);
448
- DUP2_ARG2(__lsx_vilvh_b, p0, p1, q1, q0, t1, t3);
449
- DUP2_ARG2(__lsx_vilvl_h, t2, t0, t3, t1, p0, p2);
450
- DUP2_ARG2(__lsx_vilvh_h, t2, t0, t3, t1, p1, q0);
451
-
452
- pPix -= iStrideY_x4;
453
- pPix -= iStrideY_x4;
454
- pPix -= iStrideY_x4 - 1;
455
- __lsx_vstelm_w(p0, pPix, 0, 0);
456
- __lsx_vstelm_w(p0, pPix + iStrideY, 0, 1);
457
- __lsx_vstelm_w(p0, pPix + iStrideY_x2, 0, 2);
458
- __lsx_vstelm_w(p0, pPix + iStrideY_x3, 0, 3);
459
- pPix += iStrideY_x4;
460
- __lsx_vstelm_w(p1, pPix, 0, 0);
461
- __lsx_vstelm_w(p1, pPix + iStrideY, 0, 1);
462
- __lsx_vstelm_w(p1, pPix + iStrideY_x2, 0, 2);
463
- __lsx_vstelm_w(p1, pPix + iStrideY_x3, 0, 3);
464
- pPix += iStrideY_x4;
465
- __lsx_vstelm_w(p2, pPix, 0, 0);
466
- __lsx_vstelm_w(p2, pPix + iStrideY, 0, 1);
467
- __lsx_vstelm_w(p2, pPix + iStrideY_x2, 0, 2);
468
- __lsx_vstelm_w(p2, pPix + iStrideY_x3, 0, 3);
469
- pPix += iStrideY_x4;
470
- __lsx_vstelm_w(q0, pPix, 0, 0);
471
- __lsx_vstelm_w(q0, pPix + iStrideY, 0, 1);
472
- __lsx_vstelm_w(q0, pPix + iStrideY_x2, 0, 2);
473
- __lsx_vstelm_w(q0, pPix + iStrideY_x3, 0, 3);
474
- }
475
-
476
- void DeblockLumaEq4V_lsx(uint8_t *pPix, int32_t iStride, int32_t iAlpha,
477
- int32_t iBeta) {
478
- int32_t iStride0 = 0;
479
- int32_t iStride_x2 = iStride << 1;
480
- int32_t iStride_x3 = iStride + iStride_x2;
481
- int32_t iStride_x4 = iStride << 2;
482
- __m128i p0, p1, p2, p3, q0, q1, q2, q3;
483
- __m128i p0_l, p1_l, p2_l, p3_l, q0_l, q1_l, q2_l, q3_l;
484
- __m128i p0_h, p1_h, p2_h, p3_h, q0_h, q1_h, q2_h, q3_h;
485
- __m128i t0, t1, t2, t0_con1, s0, s1, s2, s0_con1;
486
- __m128i alpha, beta;
487
- __m128i iDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0;
488
- __m128i mask0, mask1;
489
-
490
- DUP4_ARG2(__lsx_vldx,
491
- pPix, -iStride_x4,
492
- pPix, -iStride_x3,
493
- pPix, -iStride_x2,
494
- pPix, -iStride,
495
- p3, p2, p1, p0);
496
- DUP4_ARG2(__lsx_vldx,
497
- pPix, iStride_x3,
498
- pPix, iStride_x2,
499
- pPix, iStride,
500
- pPix, iStride0,
501
- q3, q2, q1, q0);
502
- alpha = __lsx_vreplgr2vr_b(iAlpha);
503
- beta = __lsx_vreplgr2vr_b(iBeta);
504
- iDetaP0Q0 = __lsx_vabsd_bu(p0, q0);
505
- DUP4_ARG2(__lsx_vabsd_bu,
506
- p1, p0,
507
- q1, q0,
508
- p2, p0,
509
- q2, q0,
510
- bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0);
511
- DUP4_ARG2(__lsx_vslt_bu,
512
- bDetaP1P0, beta,
513
- bDetaQ1Q0, beta,
514
- bDetaP2P0, beta,
515
- bDetaQ2Q0, beta,
516
- bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0);
517
- DUP4_ARG2(__lsx_vsllwil_hu_bu,
518
- p0, 0,
519
- p1, 0,
520
- p2, 0,
521
- p3, 0,
522
- p0_l, p1_l, p2_l, p3_l);
523
- DUP4_ARG1(__lsx_vexth_hu_bu,
524
- p0,
525
- p1,
526
- p2,
527
- p3,
528
- p0_h, p1_h, p2_h, p3_h);
529
- DUP4_ARG2(__lsx_vsllwil_hu_bu,
530
- q0, 0,
531
- q1, 0,
532
- q2, 0,
533
- q3, 0,
534
- q0_l, q1_l, q2_l, q3_l);
535
- DUP4_ARG1(__lsx_vexth_hu_bu,
536
- q0,
537
- q1,
538
- q2,
539
- q3,
540
- q0_h, q1_h, q2_h, q3_h);
541
- //(iDetaP0Q0 < iAlpha) && bDetaP1P0 && bDetaQ1Q0
542
- mask0 = __lsx_vslt_bu(iDetaP0Q0, alpha);
543
- mask0 &= bDetaP1P0;
544
- mask0 &= bDetaQ1Q0;
545
- //iDetaP0Q0 < ((iAlpha >> 2) + 2)
546
- mask1 = __lsx_vsrli_b(alpha, 2);
547
- mask1 = __lsx_vaddi_bu(mask1, 2);
548
- mask1 = __lsx_vslt_bu(iDetaP0Q0, mask1);
549
- //low part
550
- //p0
551
- t0 = __lsx_vadd_h(__lsx_vslli_h(p1_l, 1), p2_l);
552
- t0 = __lsx_vadd_h(__lsx_vslli_h(p0_l, 1), t0);
553
- t0 = __lsx_vadd_h(__lsx_vslli_h(q0_l, 1), t0);
554
- t0 = __lsx_vadd_h(q1_l, t0);
555
- t0 = __lsx_vsrari_h(t0, 3);
556
- //p1
557
- t1 = __lsx_vadd_h(p2_l, p1_l);
558
- t1 = __lsx_vadd_h(p0_l, t1);
559
- t1 = __lsx_vadd_h(q0_l, t1);
560
- t1 = __lsx_vsrari_h(t1, 2);
561
- //p2
562
- t2 = __lsx_vadd_h(__lsx_vslli_h(p3_l, 1), p2_l);
563
- t2 = __lsx_vadd_h(__lsx_vslli_h(p2_l, 1), t2);
564
- t2 = __lsx_vadd_h(p1_l, t2);
565
- t2 = __lsx_vadd_h(p0_l, t2);
566
- t2 = __lsx_vadd_h(q0_l, t2);
567
- t2 = __lsx_vsrari_h(t2, 3);
568
- //p0 condition 1
569
- t0_con1 = __lsx_vadd_h(__lsx_vslli_h(p1_l, 1), p0_l);
570
- t0_con1 = __lsx_vadd_h(q1_l, t0_con1);
571
- t0_con1 = __lsx_vsrari_h(t0_con1, 2);
572
- //q0
573
- s0 = __lsx_vadd_h(__lsx_vslli_h(p0_l, 1), p1_l);
574
- s0 = __lsx_vadd_h(__lsx_vslli_h(q0_l, 1), s0);
575
- s0 = __lsx_vadd_h(__lsx_vslli_h(q1_l, 1), s0);
576
- s0 = __lsx_vadd_h(q2_l, s0);
577
- s0 = __lsx_vsrari_h(s0, 3);
578
- //q1
579
- s1 = __lsx_vadd_h(p0_l, q0_l);
580
- s1 = __lsx_vadd_h(q1_l, s1);
581
- s1 = __lsx_vadd_h(q2_l, s1);
582
- s1 = __lsx_vsrari_h(s1, 2);
583
- //q2
584
- s2 = __lsx_vadd_h(__lsx_vslli_h(q3_l, 1), q2_l);
585
- s2 = __lsx_vadd_h(__lsx_vslli_h(q2_l, 1), s2);
586
- s2 = __lsx_vadd_h(q1_l, s2);
587
- s2 = __lsx_vadd_h(q0_l, s2);
588
- s2 = __lsx_vadd_h(p0_l, s2);
589
- s2 = __lsx_vsrari_h(s2, 3);
590
- //q0 condition 1
591
- s0_con1 = __lsx_vadd_h(__lsx_vslli_h(q1_l, 1), q0_l);
592
- s0_con1 = __lsx_vadd_h(p1_l, s0_con1);
593
- s0_con1 = __lsx_vsrari_h(s0_con1, 2);
594
- //move back
595
- p0_l = t0; p1_l = t1; p2_l = t2;
596
- q0_l = s0; q1_l = s1; q2_l = s2;
597
- p3_l = t0_con1; q3_l = s0_con1;
598
-
599
- //high part
600
- //p0
601
- t0 = __lsx_vadd_h(__lsx_vslli_h(p1_h, 1), p2_h);
602
- t0 = __lsx_vadd_h(__lsx_vslli_h(p0_h, 1), t0);
603
- t0 = __lsx_vadd_h(__lsx_vslli_h(q0_h, 1), t0);
604
- t0 = __lsx_vadd_h(q1_h, t0);
605
- t0 = __lsx_vsrari_h(t0, 3);
606
- //p1
607
- t1 = __lsx_vadd_h(p2_h, p1_h);
608
- t1 = __lsx_vadd_h(p0_h, t1);
609
- t1 = __lsx_vadd_h(q0_h, t1);
610
- t1 = __lsx_vsrari_h(t1, 2);
611
- //p2
612
- t2 = __lsx_vadd_h(__lsx_vslli_h(p3_h, 1), p2_h);
613
- t2 = __lsx_vadd_h(__lsx_vslli_h(p2_h, 1), t2);
614
- t2 = __lsx_vadd_h(p1_h, t2);
615
- t2 = __lsx_vadd_h(p0_h, t2);
616
- t2 = __lsx_vadd_h(q0_h, t2);
617
- t2 = __lsx_vsrari_h(t2, 3);
618
- //p0 condition 1
619
- t0_con1 = __lsx_vadd_h(__lsx_vslli_h(p1_h, 1), p0_h);
620
- t0_con1 = __lsx_vadd_h(q1_h, t0_con1);
621
- t0_con1 = __lsx_vsrari_h(t0_con1, 2);
622
- //q0
623
- s0 = __lsx_vadd_h(__lsx_vslli_h(p0_h, 1), p1_h);
624
- s0 = __lsx_vadd_h(__lsx_vslli_h(q0_h, 1), s0);
625
- s0 = __lsx_vadd_h(__lsx_vslli_h(q1_h, 1), s0);
626
- s0 = __lsx_vadd_h(q2_h, s0);
627
- s0 = __lsx_vsrari_h(s0, 3);
628
- //q1
629
- s1 = __lsx_vadd_h(p0_h, q0_h);
630
- s1 = __lsx_vadd_h(q1_h, s1);
631
- s1 = __lsx_vadd_h(q2_h, s1);
632
- s1 = __lsx_vsrari_h(s1, 2);
633
- //q2
634
- s2 = __lsx_vadd_h(__lsx_vslli_h(q3_h, 1), q2_h);
635
- s2 = __lsx_vadd_h(__lsx_vslli_h(q2_h, 1), s2);
636
- s2 = __lsx_vadd_h(q1_h, s2);
637
- s2 = __lsx_vadd_h(q0_h, s2);
638
- s2 = __lsx_vadd_h(p0_h, s2);
639
- s2 = __lsx_vsrari_h(s2, 3);
640
- //q0 condition 1
641
- s0_con1 = __lsx_vadd_h(__lsx_vslli_h(q1_h, 1), q0_h);
642
- s0_con1 = __lsx_vadd_h(p1_h, s0_con1);
643
- s0_con1 = __lsx_vsrari_h(s0_con1, 2);
644
- //move back
645
- p0_h = t0; p1_h = t1; p2_h = t2;
646
- q0_h = s0; q1_h = s1; q2_h = s2;
647
- p3_h = t0_con1; q3_h = s0_con1;
648
-
649
- //pack low part and high part
650
- DUP4_ARG2(__lsx_vpickev_b,
651
- p0_h, p0_l,
652
- p1_h, p1_l,
653
- p2_h, p2_l,
654
- q0_h, q0_l,
655
- t0, t1, t2, s0);
656
- DUP4_ARG2(__lsx_vpickev_b,
657
- q1_h, q1_l,
658
- q2_h, q2_l,
659
- p3_h, p3_l,
660
- q3_h, q3_l,
661
- s1, s2, t0_con1, s0_con1);
662
- t0 = t0 & mask0 & mask1 & bDetaP2P0;
663
- t0 = __lsx_vadd_b(t0, t0_con1 & mask0 & mask1 & (~bDetaP2P0));
664
- t0 = __lsx_vadd_b(t0, t0_con1 & mask0 & (~mask1));
665
- t1 = t1 & mask0 & mask1 & bDetaP2P0;
666
- t2 = t2 & mask0 & mask1 & bDetaP2P0;
667
- s0 = s0 & mask0 & mask1 & bDetaQ2Q0;
668
- s0 = __lsx_vadd_b(s0, s0_con1 & mask0 & mask1 & (~bDetaQ2Q0));
669
- s0 = __lsx_vadd_b(s0, s0_con1 & mask0 & (~mask1));
670
- s1 = s1 & mask0 & mask1 & bDetaQ2Q0;
671
- s2 = s2 & mask0 & mask1 & bDetaQ2Q0;
672
- p0 = __lsx_vadd_b(t0, p0 & (~mask0));
673
- p1 = __lsx_vadd_b(t1, p1 & ~(mask0 & mask1 & bDetaP2P0));
674
- p2 = __lsx_vadd_b(t2, p2 & ~(mask0 & mask1 & bDetaP2P0));
675
- q0 = __lsx_vadd_b(s0, q0 & (~mask0));
676
- q1 = __lsx_vadd_b(s1, q1 & ~(mask0 & mask1 & bDetaQ2Q0));
677
- q2 = __lsx_vadd_b(s2, q2 & ~(mask0 & mask1 & bDetaQ2Q0));
678
- //Store back
679
- __lsx_vstx(p2, pPix, -iStride_x3);
680
- __lsx_vstx(p1, pPix, -iStride_x2);
681
- __lsx_vstx(p0, pPix, -iStride);
682
- __lsx_vstx(q0, pPix, iStride0);
683
- __lsx_vstx(q1, pPix, iStride);
684
- __lsx_vstx(q2, pPix, iStride_x2);
685
- }
686
-
687
- void DeblockLumaEq4H_lsx (uint8_t* pPix, int32_t iStrideY, int32_t iAlpha, int32_t iBeta) {
688
- __m128i p0, p1, p2, p3, q0, q1, q2, q3;
689
- __m128i p0_l, p1_l, p2_l, p3_l, q0_l, q1_l, q2_l, q3_l;
690
- __m128i p0_h, p1_h, p2_h, p3_h, q0_h, q1_h, q2_h, q3_h;
691
- __m128i t0, t1, t2, t3, t4, t5, t6, t7, temp;
692
- __m128i t0_l, t0_h, t1_l, t1_h, t2_l, t2_h;
693
- __m128i t3_l, t3_h, t4_l, t4_h, t5_l, t5_h;
694
- __m128i t6_l, t6_h, t7_l, t7_h;
695
- __m128i f0, f1, f2, f3, fn;
696
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0;
697
-
698
- __m128i zero = __lsx_vldi(0);
699
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
700
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
701
- int32_t iStrideY_x0 = 0;
702
- int32_t iStrideY_x2 = iStrideY << 1;
703
- int32_t iStrideY_x3 = iStrideY_x2 + iStrideY;
704
- int32_t iStrideY_x4 = iStrideY << 2;
705
-
706
- // Load data from pPix
707
- pPix -= 4;
708
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
709
- pPix, iStrideY_x3, p0_l, p1_l, p2_l, q0_l);
710
- pPix += iStrideY_x4;
711
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
712
- pPix, iStrideY_x3, p0_h, p1_h, p2_h, q0_h);
713
- pPix += iStrideY_x4;
714
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
715
- pPix, iStrideY_x3, q1_l, q2_l, t0_l, t1_l);
716
- pPix += iStrideY_x4;
717
- DUP4_ARG2(__lsx_vldx, pPix, iStrideY_x0, pPix, iStrideY, pPix, iStrideY_x2,
718
- pPix, iStrideY_x3, q1_h, q2_h, t0_h, t1_h);
719
- LSX_TRANSPOSE16x8_B(p0_l, p1_l, p2_l, q0_l, p0_h, p1_h, p2_h, q0_h, q1_l, q2_l,
720
- t0_l, t1_l, q1_h, q2_h, t0_h, t1_h, p3, p2, p1, p0, q0, q1,
721
- q2, q3);
722
-
723
- // Calculate condition mask
724
- bDetaP0Q0 = __lsx_vabsd_bu(p0, q0);
725
- DUP4_ARG2(__lsx_vabsd_bu, p1, p0, q1, q0, p2, p0, q2, q0,
726
- bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0);
727
- DUP4_ARG2(__lsx_vslt_bu, bDetaP1P0, beta, bDetaQ1Q0, beta, bDetaP2P0, beta,
728
- bDetaQ2Q0, beta, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0);
729
-
730
- // Unsigned extend p0, p1, p2, p3, q0, q1, q2, q3 from 8 bits to 16 bits
731
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, p2, zero, q0,
732
- p0_l, p1_l, p2_l, q0_l);
733
- DUP4_ARG2(__lsx_vilvh_b, zero, p0, zero, p1, zero, p2, zero, q0,
734
- p0_h, p1_h, p2_h, q0_h);
735
- DUP2_ARG2(__lsx_vilvl_b, zero, q1, zero, q2, q1_l, q2_l);
736
- DUP2_ARG2(__lsx_vilvh_b, zero, q1, zero, q2, q1_h, q2_h);
737
- DUP2_ARG2(__lsx_vilvl_b, zero, p3, zero, q3, p3_l, q3_l);
738
- DUP2_ARG2(__lsx_vilvh_b, zero, p3, zero, q3, p3_h, q3_h);
739
-
740
- // Calculate the low part
741
- // (p2 + (p1 * (1 << 1)) + (p0 * (1 << 1)) + (q0 * (1 << 1)) + q1 + 4) >> 3
742
- t0_l = __lsx_vslli_h(p1_l, 1);
743
- t0_l = __lsx_vadd_h(t0_l, p2_l);
744
- temp = __lsx_vslli_h(p0_l, 1);
745
- t0_l = __lsx_vadd_h(t0_l, temp);
746
- temp = __lsx_vslli_h(q0_l, 1);
747
- t0_l = __lsx_vadd_h(t0_l, temp);
748
- t0_l = __lsx_vadd_h(t0_l, q1_l);
749
- t0_l = __lsx_vaddi_hu(t0_l, 4);
750
- t0_l = __lsx_vsrai_h(t0_l, 3);
751
-
752
- // (p2 + p1 + p0 + q0 + 2) >> 2
753
- t1_l = __lsx_vadd_h(p2_l, p1_l);
754
- t1_l = __lsx_vadd_h(t1_l, p0_l);
755
- t1_l = __lsx_vadd_h(t1_l, q0_l);
756
- t1_l = __lsx_vaddi_hu(t1_l, 2);
757
- t1_l = __lsx_vsrai_h(t1_l, 2);
758
-
759
- // ((p3 * (1 << 1)) + p2 + (p2 * (1 << 1)) + p1 + p0 + q0 + 4) >> 3
760
- t2_l = __lsx_vslli_h(p3_l, 1);
761
- t2_l = __lsx_vadd_h(t2_l, p2_l);
762
- temp = __lsx_vslli_h(p2_l, 1);
763
- t2_l = __lsx_vadd_h(t2_l, temp);
764
- t2_l = __lsx_vadd_h(t2_l, p1_l);
765
- t2_l = __lsx_vadd_h(t2_l, p0_l);
766
- t2_l = __lsx_vadd_h(t2_l, q0_l);
767
- t2_l = __lsx_vaddi_hu(t2_l, 4);
768
- t2_l = __lsx_vsrai_h(t2_l, 3);
769
-
770
- // ((p1 * (1 << 1)) + p0 + q1 + 2) >> 2
771
- t3_l = __lsx_vslli_h(p1_l, 1);
772
- t3_l = __lsx_vadd_h(t3_l, p0_l);
773
- t3_l = __lsx_vadd_h(t3_l, q1_l);
774
- t3_l = __lsx_vaddi_hu(t3_l, 2);
775
- t3_l = __lsx_vsrai_h(t3_l, 2);
776
-
777
- // (p1 + (p0 * (1 << 1)) + (q0 * (1 << 1)) + (q1 * (1 << 1)) + q2 + 4) >> 3
778
- t4_l = __lsx_vslli_h(p0_l, 1);
779
- t4_l = __lsx_vadd_h(t4_l, p1_l);
780
- temp = __lsx_vslli_h(q0_l, 1);
781
- t4_l = __lsx_vadd_h(t4_l, temp);
782
- temp = __lsx_vslli_h(q1_l, 1);
783
- t4_l = __lsx_vadd_h(t4_l, temp);
784
- t4_l = __lsx_vadd_h(t4_l, q2_l);
785
- t4_l = __lsx_vaddi_hu(t4_l, 4);
786
- t4_l = __lsx_vsrai_h(t4_l, 3);
787
-
788
- // (p0 + q0 + q1 + q2 + 2) >> 2
789
- t5_l = __lsx_vadd_h(p0_l, q0_l);
790
- t5_l = __lsx_vadd_h(t5_l, q1_l);
791
- t5_l = __lsx_vadd_h(t5_l, q2_l);
792
- t5_l = __lsx_vaddi_hu(t5_l, 2);
793
- t5_l = __lsx_vsrai_h(t5_l, 2);
794
-
795
- // ((q3 * (1 << 1)) + q2 + (q2 * (1 << 1)) + q1 + q0 + p0 + 4) >> 3
796
- t6_l = __lsx_vslli_h(q3_l, 1);
797
- t6_l = __lsx_vadd_h(t6_l, q2_l);
798
- temp = __lsx_vslli_h(q2_l, 1);
799
- t6_l = __lsx_vadd_h(t6_l, temp);
800
- t6_l = __lsx_vadd_h(t6_l, q1_l);
801
- t6_l = __lsx_vadd_h(t6_l, q0_l);
802
- t6_l = __lsx_vadd_h(t6_l, p0_l);
803
- t6_l = __lsx_vaddi_hu(t6_l, 4);
804
- t6_l = __lsx_vsrai_h(t6_l, 3);
805
-
806
- // ((q1 * (1 << 1)) + q0 + p1 + 2) >> 2
807
- t7_l = __lsx_vslli_h(q1_l, 1);
808
- t7_l = __lsx_vadd_h(t7_l, q0_l);
809
- t7_l = __lsx_vadd_h(t7_l, p1_l);
810
- t7_l = __lsx_vaddi_hu(t7_l, 2);
811
- t7_l = __lsx_vsrai_h(t7_l, 2);
812
-
813
- // Calculate the high part
814
- // (p2 + (p1 * (1 << 1)) + (p0 * (1 << 1)) + (q0 * (1 << 1)) + q1 + 4) >> 3
815
- t0_h = __lsx_vslli_h(p1_h, 1);
816
- t0_h = __lsx_vadd_h(t0_h, p2_h);
817
- temp = __lsx_vslli_h(p0_h, 1);
818
- t0_h = __lsx_vadd_h(t0_h, temp);
819
- temp = __lsx_vslli_h(q0_h, 1);
820
- t0_h = __lsx_vadd_h(t0_h, temp);
821
- t0_h = __lsx_vadd_h(t0_h, q1_h);
822
- t0_h = __lsx_vaddi_hu(t0_h, 4);
823
- t0_h = __lsx_vsrai_h(t0_h, 3);
824
-
825
- // (p2 + p1 + p0 + q0 + 2) >> 2
826
- t1_h = __lsx_vadd_h(p2_h, p1_h);
827
- t1_h = __lsx_vadd_h(t1_h, p0_h);
828
- t1_h = __lsx_vadd_h(t1_h, q0_h);
829
- t1_h = __lsx_vaddi_hu(t1_h, 2);
830
- t1_h = __lsx_vsrai_h(t1_h, 2);
831
-
832
- // ((p3 * (1 << 1)) + p2 + (p2 * (1 << 1)) + p1 + p0 + q0 + 4) >> 3
833
- t2_h = __lsx_vslli_h(p3_h, 1);
834
- t2_h = __lsx_vadd_h(t2_h, p2_h);
835
- temp = __lsx_vslli_h(p2_h, 1);
836
- t2_h = __lsx_vadd_h(t2_h, temp);
837
- t2_h = __lsx_vadd_h(t2_h, p1_h);
838
- t2_h = __lsx_vadd_h(t2_h, p0_h);
839
- t2_h = __lsx_vadd_h(t2_h, q0_h);
840
- t2_h = __lsx_vaddi_hu(t2_h, 4);
841
- t2_h = __lsx_vsrai_h(t2_h, 3);
842
-
843
- // ((p1 * (1 << 1)) + p0 + q1 + 2) >> 2
844
- t3_h = __lsx_vslli_h(p1_h, 1);
845
- t3_h = __lsx_vadd_h(t3_h, p0_h);
846
- t3_h = __lsx_vadd_h(t3_h, q1_h);
847
- t3_h = __lsx_vaddi_hu(t3_h, 2);
848
- t3_h = __lsx_vsrai_h(t3_h, 2);
849
-
850
- // (p1 + (p0 * (1 << 1)) + (q0 * (1 << 1)) + (q1 * (1 << 1)) + q2 + 4) >> 3
851
- t4_h = __lsx_vslli_h(p0_h, 1);
852
- t4_h = __lsx_vadd_h(t4_h, p1_h);
853
- temp = __lsx_vslli_h(q0_h, 1);
854
- t4_h = __lsx_vadd_h(t4_h, temp);
855
- temp = __lsx_vslli_h(q1_h, 1);
856
- t4_h = __lsx_vadd_h(t4_h, temp);
857
- t4_h = __lsx_vadd_h(t4_h, q2_h);
858
- t4_h = __lsx_vaddi_hu(t4_h, 4);
859
- t4_h = __lsx_vsrai_h(t4_h, 3);
860
-
861
- // (p0 + q0 + q1 + q2 + 2) >> 2
862
- t5_h = __lsx_vadd_h(p0_h, q0_h);
863
- t5_h = __lsx_vadd_h(t5_h, q1_h);
864
- t5_h = __lsx_vadd_h(t5_h, q2_h);
865
- t5_h = __lsx_vaddi_hu(t5_h, 2);
866
- t5_h = __lsx_vsrai_h(t5_h, 2);
867
-
868
- // ((q3 * (1 << 1)) + q2 + (q2 * (1 << 1)) + q1 + q0 + p0 + 4) >> 3
869
- t6_h = __lsx_vslli_h(q3_h, 1);
870
- t6_h = __lsx_vadd_h(t6_h, q2_h);
871
- temp = __lsx_vslli_h(q2_h, 1);
872
- t6_h = __lsx_vadd_h(t6_h, temp);
873
- t6_h = __lsx_vadd_h(t6_h, q1_h);
874
- t6_h = __lsx_vadd_h(t6_h, q0_h);
875
- t6_h = __lsx_vadd_h(t6_h, p0_h);
876
- t6_h = __lsx_vaddi_hu(t6_h, 4);
877
- t6_h = __lsx_vsrai_h(t6_h, 3);
878
-
879
- // ((q1 * (1 << 1)) + q0 + p1 + 2) >> 2
880
- t7_h = __lsx_vslli_h(q1_h, 1);
881
- t7_h = __lsx_vadd_h(t7_h, q0_h);
882
- t7_h = __lsx_vadd_h(t7_h, p1_h);
883
- t7_h = __lsx_vaddi_hu(t7_h, 2);
884
- t7_h = __lsx_vsrai_h(t7_h, 2);
885
-
886
- // Combined low and high
887
- DUP4_ARG2(__lsx_vpickev_b, t0_h, t0_l, t1_h, t1_l, t2_h, t2_l,
888
- t3_h, t3_l, t0, t1, t2, t3);
889
- DUP4_ARG2(__lsx_vpickev_b, t4_h, t4_l, t5_h, t5_l, t6_h, t6_l,
890
- t7_h, t7_l, t4, t5, t6, t7);
891
-
892
- f0 = __lsx_vslt_bu(bDetaP0Q0, alpha);
893
- f0 = __lsx_vand_v(f0, bDetaP1P0);
894
- f0 = __lsx_vand_v(f0, bDetaQ1Q0);
895
-
896
- f1 = __lsx_vsrli_b(alpha, 2);
897
- f1 = __lsx_vaddi_bu(f1, 2);
898
- f1 = __lsx_vslt_bu(bDetaP0Q0, f1);
899
-
900
- // t0
901
- f2 = __lsx_vand_v(f0, f1);
902
- fn = __lsx_vand_v(f2, bDetaP2P0);
903
- f3 = __lsx_vand_v(fn, t0);
904
- f2 = __lsx_vnor_v(bDetaP2P0, bDetaP2P0);
905
- fn = __lsx_vand_v(f0, f2);
906
- fn = __lsx_vand_v(fn, f1);
907
- t0 = __lsx_vand_v(fn, t3);
908
- t0 = __lsx_vadd_b(f3, t0);
909
- fn = __lsx_vnor_v(f1, f1);
910
- fn = __lsx_vand_v(fn, f0);
911
- f3 = __lsx_vand_v(fn, t3);
912
- t0 = __lsx_vadd_b(f3, t0);
913
-
914
- // t1
915
- f2 = __lsx_vand_v(f0, f1);
916
- f2 = __lsx_vand_v(f2, bDetaP2P0);
917
- t1 = __lsx_vand_v(f2, t1);
918
-
919
- // t2
920
- f2 = __lsx_vand_v(f0, f1);
921
- f2 = __lsx_vand_v(f2, bDetaP2P0);
922
- t2 = __lsx_vand_v(f2, t2);
923
-
924
- // t3
925
- f2 = __lsx_vand_v(f0, f1);
926
- fn = __lsx_vand_v(f2, bDetaQ2Q0);
927
- f3 = __lsx_vand_v(fn, t4);
928
- fn = __lsx_vnor_v(bDetaQ2Q0, bDetaQ2Q0);
929
- fn = __lsx_vand_v(fn, f2);
930
- t3 = __lsx_vand_v(fn, t7);
931
- t3 = __lsx_vadd_b(f3, t3);
932
- fn = __lsx_vnor_v(f1, f1);
933
- fn = __lsx_vand_v(fn, f0);
934
- f3 = __lsx_vand_v(fn, t7);
935
- t3 = __lsx_vadd_b(f3, t3);
936
-
937
- // t4
938
- f2 = __lsx_vand_v(f0, f1);
939
- f2 = __lsx_vand_v(f2, bDetaQ2Q0);
940
- t4 = __lsx_vand_v(f2, t5);
941
-
942
- // t5
943
- f2 = __lsx_vand_v(f0, f1);
944
- f2 = __lsx_vand_v(f2, bDetaQ2Q0);
945
- t5 = __lsx_vand_v(f2, t6);
946
-
947
- // p0
948
- fn = __lsx_vnor_v(f0, f0);
949
- p0 = __lsx_vand_v(fn, p0);
950
- p0 = __lsx_vadd_b(p0, t0);
951
-
952
- // p1
953
- f2 = __lsx_vand_v(f0, f1);
954
- f2 = __lsx_vand_v(f2, bDetaP2P0);
955
- fn = __lsx_vnor_v(f2, f2);
956
- p1 = __lsx_vand_v(fn, p1);
957
- p1 = __lsx_vadd_b(t1, p1);
958
-
959
- // p2
960
- f2 = __lsx_vand_v(f0, f1);
961
- f2 = __lsx_vand_v(f2, bDetaP2P0);
962
- fn = __lsx_vnor_v(f2, f2);
963
- p2 = __lsx_vand_v(fn, p2);
964
- p2 = __lsx_vadd_b(t2, p2);
965
-
966
- // q0
967
- fn = __lsx_vnor_v(f0, f0);
968
- q0 = __lsx_vand_v(fn, q0);
969
- q0 = __lsx_vadd_b(q0, t3);
970
-
971
- // q1
972
- f2 = __lsx_vand_v(f0, f1);
973
- f2 = __lsx_vand_v(f2, bDetaQ2Q0);
974
- fn = __lsx_vnor_v(f2, f2);
975
- q1 = __lsx_vand_v(fn, q1);
976
- q1 = __lsx_vadd_b(q1, t4);
977
-
978
- // q2
979
- f2 = __lsx_vand_v(f0, f1);
980
- f2 = __lsx_vand_v(f2, bDetaQ2Q0);
981
- fn = __lsx_vnor_v(f2, f2);
982
- q2 = __lsx_vand_v(fn, q2);
983
- q2 = __lsx_vadd_b(q2, t5);
984
-
985
- DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, t0, t1);
986
- DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, t2, t3);
987
-
988
- DUP2_ARG2(__lsx_vilvl_h, t1, t0, t3, t2, p0, p1);
989
- DUP2_ARG2(__lsx_vilvh_h, t1, t0, t3, t2, p2, p3);
990
-
991
- t1 = __lsx_vilvl_b(q2, q1);
992
- t2 = __lsx_vilvh_b(q2, q1);
993
-
994
- // Store data to pPix
995
- pPix -= iStrideY_x4;
996
- pPix -= iStrideY_x4;
997
- pPix -= iStrideY_x4;
998
- pPix += 1;
999
- __lsx_vstelm_w(p0, pPix, 0, 0);
1000
- __lsx_vstelm_w(p0, pPix + iStrideY, 0, 1);
1001
- __lsx_vstelm_w(p0, pPix + iStrideY_x2, 0, 2);
1002
- __lsx_vstelm_w(p0, pPix + iStrideY_x3, 0, 3);
1003
- pPix += iStrideY_x4;
1004
- __lsx_vstelm_w(p2, pPix, 0, 0);
1005
- __lsx_vstelm_w(p2, pPix + iStrideY, 0, 1);
1006
- __lsx_vstelm_w(p2, pPix + iStrideY_x2, 0, 2);
1007
- __lsx_vstelm_w(p2, pPix + iStrideY_x3, 0, 3);
1008
- pPix += iStrideY_x4;
1009
- __lsx_vstelm_w(p1, pPix, 0, 0);
1010
- __lsx_vstelm_w(p1, pPix + iStrideY, 0, 1);
1011
- __lsx_vstelm_w(p1, pPix + iStrideY_x2, 0, 2);
1012
- __lsx_vstelm_w(p1, pPix + iStrideY_x3, 0, 3);
1013
- pPix += iStrideY_x4;
1014
- __lsx_vstelm_w(p3, pPix, 0, 0);
1015
- __lsx_vstelm_w(p3, pPix + iStrideY, 0, 1);
1016
- __lsx_vstelm_w(p3, pPix + iStrideY_x2, 0, 2);
1017
- __lsx_vstelm_w(p3, pPix + iStrideY_x3, 0, 3);
1018
-
1019
- pPix -= iStrideY_x4;
1020
- pPix -= iStrideY_x4;
1021
- pPix -= iStrideY_x4;
1022
- pPix += 4;
1023
- __lsx_vstelm_h(t1, pPix, 0, 0);
1024
- __lsx_vstelm_h(t1, pPix + iStrideY, 0, 1);
1025
- __lsx_vstelm_h(t1, pPix + iStrideY_x2, 0, 2);
1026
- __lsx_vstelm_h(t1, pPix + iStrideY_x3, 0, 3);
1027
- pPix += iStrideY_x4;
1028
- __lsx_vstelm_h(t1, pPix, 0, 4);
1029
- __lsx_vstelm_h(t1, pPix + iStrideY, 0, 5);
1030
- __lsx_vstelm_h(t1, pPix + iStrideY_x2, 0, 6);
1031
- __lsx_vstelm_h(t1, pPix + iStrideY_x3, 0, 7);
1032
- pPix += iStrideY_x4;
1033
- __lsx_vstelm_h(t2, pPix, 0, 0);
1034
- __lsx_vstelm_h(t2, pPix + iStrideY, 0, 1);
1035
- __lsx_vstelm_h(t2, pPix + iStrideY_x2, 0, 2);
1036
- __lsx_vstelm_h(t2, pPix + iStrideY_x3, 0, 3);
1037
- pPix += iStrideY_x4;
1038
- __lsx_vstelm_h(t2, pPix, 0, 4);
1039
- __lsx_vstelm_h(t2, pPix + iStrideY, 0, 5);
1040
- __lsx_vstelm_h(t2, pPix + iStrideY_x2, 0, 6);
1041
- __lsx_vstelm_h(t2, pPix + iStrideY_x3, 0, 7);
1042
- }
1043
-
1044
- void DeblockChromaLt4V_lsx (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideX,
1045
- int32_t iAlpha, int32_t iBeta, int8_t* pTc) {
1046
- __m128i p0, p1, q0, q1, t0, t1, tp;
1047
- __m128i p0_l, p1_l, p2_l, q0_l, q1_l, q2_l;
1048
- __m128i iTc0, negiTc0, iTc0_l, negiTc0_l;
1049
- __m128i flags, flag, iDeta_l;
1050
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0;
1051
-
1052
- __m128i zero = __lsx_vldi(0);
1053
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
1054
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
1055
- __m128i shuf = {0x0303020201010000, 0x0};
1056
- __m128i not_255 = {0xff00ff00ff00ff00, 0xff00ff00ff00ff00};
1057
-
1058
- int32_t iStrideX_x0 = 0;
1059
- int32_t iStrideX_x2 = iStrideX << 1;
1060
-
1061
- iTc0 = __lsx_vldx(pTc, 0);
1062
- iTc0 = __lsx_vshuf_b(iTc0, iTc0, shuf);
1063
- negiTc0 = __lsx_vneg_b(iTc0);
1064
-
1065
- flag = __lsx_vslt_b(iTc0, zero);
1066
- iTc0_l = __lsx_vilvl_b(flag, iTc0);
1067
- flag = __lsx_vslt_b(negiTc0, zero);
1068
- negiTc0_l = __lsx_vilvl_b(flag, negiTc0);
1069
-
1070
- // Load data from pPixCb
1071
- DUP4_ARG2(__lsx_vldx, pPixCb, -iStrideX, pPixCb, -iStrideX_x2, pPixCb,
1072
- iStrideX_x0, pPixCb, iStrideX, p0, p1, q0, q1);
1073
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1074
- p0_l, p1_l, q0_l, q1_l);
1075
- // Calculate condition mask
1076
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1077
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1078
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1079
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1080
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1081
-
1082
- // Calculate the low part
1083
- // WELS_CLIP3 ((((q0 - p0) * (1 << 2)) + (p1 - q1) + 4) >> 3, -iTc0, iTc0)
1084
- iDeta_l = __lsx_vsub_h(q0_l, p0_l);
1085
- iDeta_l = __lsx_vslli_h(iDeta_l, 2);
1086
- iDeta_l = __lsx_vadd_h(iDeta_l, p1_l);
1087
- iDeta_l = __lsx_vsub_h(iDeta_l, q1_l);
1088
- iDeta_l = __lsx_vaddi_hu(iDeta_l, 4);
1089
- iDeta_l = __lsx_vsrai_h(iDeta_l, 3);
1090
- iDeta_l = __lsx_vmin_h(iTc0_l, iDeta_l);
1091
- iDeta_l = __lsx_vmax_h(negiTc0_l, iDeta_l);
1092
-
1093
- // WelsClip1 (p0 + iDeta)
1094
- p0_l = __lsx_vadd_h(p0_l, iDeta_l);
1095
- p1_l = __lsx_vand_v(p0_l, not_255);
1096
- p2_l = __lsx_vsle_h(zero, p0_l);
1097
- flag = __lsx_vseq_h(p1_l, zero);
1098
- p0_l = __lsx_vand_v(p0_l, flag);
1099
- flag = __lsx_vnor_v(flag,flag);
1100
- p2_l = __lsx_vand_v(p2_l, flag);
1101
- p0_l = __lsx_vadd_h(p0_l, p2_l);
1102
-
1103
- // WelsClip1 (q0 - iDeta)
1104
- q0_l = __lsx_vsub_h(q0_l, iDeta_l);
1105
- q1_l = __lsx_vand_v(q0_l, not_255);
1106
- q2_l = __lsx_vsle_h(zero, q0_l);
1107
- flag = __lsx_vseq_h(q1_l, zero);
1108
- q0_l = __lsx_vand_v(q0_l, flag);
1109
- flag = __lsx_vnor_v(flag, flag);
1110
- q2_l = __lsx_vand_v(q2_l, flag);
1111
- q0_l = __lsx_vadd_h(q0_l, q2_l);
1112
-
1113
- DUP2_ARG2(__lsx_vpickev_b, zero, p0_l, zero, q0_l, t0, t1);
1114
- flag = __lsx_vsle_b(zero, iTc0);
1115
- flag = __lsx_vand_v(flag, flags);
1116
- t0 = __lsx_vand_v(t0, flag);
1117
- tp = __lsx_vnor_v(flag,flag);
1118
- p0 = __lsx_vand_v(p0, tp);
1119
- p0 = __lsx_vadd_b(t0, p0);
1120
- t1 = __lsx_vand_v(t1, flag);
1121
- tp = __lsx_vnor_v(flag,flag);
1122
- q0 = __lsx_vand_v(q0, tp);
1123
- q0 = __lsx_vadd_b(t1, q0);
1124
-
1125
- // Store data to pPixCb
1126
- __lsx_vstelm_d(p0, pPixCb - iStrideX, 0, 0);
1127
- __lsx_vstelm_d(q0, pPixCb, 0, 0);
1128
-
1129
- // Load data from pPixCr
1130
- DUP4_ARG2(__lsx_vldx, pPixCr, -iStrideX, pPixCr, -iStrideX_x2, pPixCr,
1131
- iStrideX_x0, pPixCr, iStrideX, p0, p1, q0, q1);
1132
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1133
- p0_l, p1_l, q0_l, q1_l);
1134
- // Calculate condition mask
1135
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1136
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1137
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1138
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1139
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1140
-
1141
- // Calculate the low part
1142
- // WELS_CLIP3 ((((q0 - p0) * (1 << 2)) + (p1 - q1) + 4) >> 3, -iTc0, iTc0)
1143
- iDeta_l = __lsx_vsub_h(q0_l, p0_l);
1144
- iDeta_l = __lsx_vslli_h(iDeta_l, 2);
1145
- iDeta_l = __lsx_vadd_h(iDeta_l, p1_l);
1146
- iDeta_l = __lsx_vsub_h(iDeta_l, q1_l);
1147
- iDeta_l = __lsx_vaddi_hu(iDeta_l, 4);
1148
- iDeta_l = __lsx_vsrai_h(iDeta_l, 3);
1149
- iDeta_l = __lsx_vmin_h(iTc0_l, iDeta_l);
1150
- iDeta_l = __lsx_vmax_h(negiTc0_l, iDeta_l);
1151
-
1152
- // WelsClip1 (p0 + iDeta)
1153
- p0_l = __lsx_vadd_h(p0_l, iDeta_l);
1154
- p1_l = __lsx_vand_v(p0_l, not_255);
1155
- p2_l = __lsx_vsle_h(zero, p0_l);
1156
- flag = __lsx_vseq_h(p1_l, zero);
1157
- p0_l = __lsx_vand_v(p0_l, flag);
1158
- flag = __lsx_vnor_v(flag,flag);
1159
- p2_l = __lsx_vand_v(p2_l, flag);
1160
- p0_l = __lsx_vadd_h(p0_l, p2_l);
1161
-
1162
- // WelsClip1 (q0 - iDeta)
1163
- q0_l = __lsx_vsub_h(q0_l, iDeta_l);
1164
- q1_l = __lsx_vand_v(q0_l, not_255);
1165
- q2_l = __lsx_vsle_h(zero, q0_l);
1166
- flag = __lsx_vseq_h(q1_l, zero);
1167
- q0_l = __lsx_vand_v(q0_l, flag);
1168
- flag = __lsx_vnor_v(flag, flag);
1169
- q2_l = __lsx_vand_v(q2_l, flag);
1170
- q0_l = __lsx_vadd_h(q0_l, q2_l);
1171
-
1172
- DUP2_ARG2(__lsx_vpickev_b, zero, p0_l, zero, q0_l, t0, t1);
1173
- flag = __lsx_vsle_b(zero, iTc0);
1174
- flag = __lsx_vand_v(flag, flags);
1175
- t0 = __lsx_vand_v(t0, flag);
1176
- tp = __lsx_vnor_v(flag,flag);
1177
- p0 = __lsx_vand_v(p0, tp);
1178
- p0 = __lsx_vadd_b(t0, p0);
1179
- t1 = __lsx_vand_v(t1, flag);
1180
- tp = __lsx_vnor_v(flag,flag);
1181
- q0 = __lsx_vand_v(q0, tp);
1182
- q0 = __lsx_vadd_b(t1, q0);
1183
-
1184
- // Store data to pPixCr
1185
- __lsx_vstelm_d(p0, pPixCr - iStrideX, 0, 0);
1186
- __lsx_vstelm_d(q0, pPixCr, 0, 0);
1187
- }
1188
-
1189
- void DeblockChromaLt4H_lsx (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideY,
1190
- int32_t iAlpha, int32_t iBeta, int8_t* pTc) {
1191
- __m128i p0, p1, q0, q1, t0, t1, t2, t3, tp;
1192
- __m128i p0_l, p1_l, p2_l, q0_l, q1_l, q2_l;
1193
- __m128i iTc0, negiTc0, iTc0_l, negiTc0_l;
1194
- __m128i flags, flag, iDeta_l;
1195
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0;
1196
-
1197
- __m128i zero = __lsx_vldi(0);
1198
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
1199
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
1200
- __m128i shuf = {0x0303020201010000, 0x0};
1201
- __m128i not_255 = {0xff00ff00ff00ff00, 0xff00ff00ff00ff00};
1202
-
1203
- int32_t iStrideY_x0 = 0;
1204
- int32_t iStrideY_x2 = iStrideY << 1;
1205
- int32_t iStrideY_x3 = iStrideY_x2 + iStrideY;
1206
- int32_t iStrideY_x4 = iStrideY << 2;
1207
-
1208
- iTc0 = __lsx_vldx(pTc, 0);
1209
- iTc0 = __lsx_vshuf_b(iTc0, iTc0, shuf);
1210
- negiTc0 = __lsx_vneg_b(iTc0);
1211
-
1212
- flag = __lsx_vslt_b(iTc0, zero);
1213
- iTc0_l = __lsx_vilvl_b(flag, iTc0);
1214
- flag = __lsx_vslt_b(negiTc0, zero);
1215
- negiTc0_l = __lsx_vilvl_b(flag, negiTc0);
1216
-
1217
- // Load data from pPixCb
1218
- pPixCb -= 2;
1219
- DUP4_ARG2(__lsx_vldx, pPixCb, iStrideY_x0, pPixCb, iStrideY, pPixCb,
1220
- iStrideY_x2, pPixCb, iStrideY_x3, p1, p0, q0, q1);
1221
- pPixCb += iStrideY_x4;
1222
- DUP4_ARG2(__lsx_vldx, pPixCb, iStrideY_x0, pPixCb, iStrideY, pPixCb,
1223
- iStrideY_x2, pPixCb, iStrideY_x3, t0, t1, t2, t3);
1224
- LSX_TRANSPOSE8x4_B(p1, p0, q0, q1, t0, t1, t2, t3, p1, p0, q0, q1);
1225
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1226
- p0_l, p1_l, q0_l, q1_l);
1227
-
1228
- // Calculate condition mask
1229
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1230
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1231
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1232
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1233
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1234
-
1235
- // Calculate the low part
1236
- // WELS_CLIP3 ((((q0 - p0) * (1 << 2)) + (p1 - q1) + 4) >> 3, -iTc0, iTc0)
1237
- iDeta_l = __lsx_vsub_h(q0_l, p0_l);
1238
- iDeta_l = __lsx_vslli_h(iDeta_l, 2);
1239
- iDeta_l = __lsx_vadd_h(iDeta_l, p1_l);
1240
- iDeta_l = __lsx_vsub_h(iDeta_l, q1_l);
1241
- iDeta_l = __lsx_vaddi_hu(iDeta_l, 4);
1242
- iDeta_l = __lsx_vsrai_h(iDeta_l, 3);
1243
- iDeta_l = __lsx_vmin_h(iTc0_l, iDeta_l);
1244
- iDeta_l = __lsx_vmax_h(negiTc0_l, iDeta_l);
1245
-
1246
- // WelsClip1 (p0 + iDeta)
1247
- p0_l = __lsx_vadd_h(p0_l, iDeta_l);
1248
- p1_l = __lsx_vand_v(p0_l, not_255);
1249
- p2_l = __lsx_vsle_h(zero, p0_l);
1250
- flag = __lsx_vseq_h(p1_l, zero);
1251
- p0_l = __lsx_vand_v(p0_l, flag);
1252
- flag = __lsx_vnor_v(flag,flag);
1253
- p2_l = __lsx_vand_v(p2_l, flag);
1254
- p0_l = __lsx_vadd_h(p0_l, p2_l);
1255
-
1256
- // WelsClip1 (q0 - iDeta)
1257
- q0_l = __lsx_vsub_h(q0_l, iDeta_l);
1258
- q1_l = __lsx_vand_v(q0_l, not_255);
1259
- q2_l = __lsx_vsle_h(zero, q0_l);
1260
- flag = __lsx_vseq_h(q1_l, zero);
1261
- q0_l = __lsx_vand_v(q0_l, flag);
1262
- flag = __lsx_vnor_v(flag, flag);
1263
- q2_l = __lsx_vand_v(q2_l, flag);
1264
- q0_l = __lsx_vadd_h(q0_l, q2_l);
1265
-
1266
- DUP2_ARG2(__lsx_vpickev_b, zero, p0_l, zero, q0_l, t0, t1);
1267
- flag = __lsx_vsle_b(zero, iTc0);
1268
- flag = __lsx_vand_v(flag, flags);
1269
- t0 = __lsx_vand_v(t0, flag);
1270
- tp = __lsx_vnor_v(flag,flag);
1271
- p0 = __lsx_vand_v(p0, tp);
1272
- p0 = __lsx_vadd_b(t0, p0);
1273
- t1 = __lsx_vand_v(t1, flag);
1274
- tp = __lsx_vnor_v(flag,flag);
1275
- q0 = __lsx_vand_v(q0, tp);
1276
- q0 = __lsx_vadd_b(t1, q0);
1277
- p0 = __lsx_vilvl_b(q0, p0);
1278
-
1279
- // Store data to pPixCb
1280
- pPixCb -= iStrideY_x4 - 1;
1281
- __lsx_vstelm_h(p0, pPixCb, 0, 0);
1282
- __lsx_vstelm_h(p0, pPixCb + iStrideY, 0, 1);
1283
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x2, 0, 2);
1284
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x3, 0, 3);
1285
- pPixCb += iStrideY_x4;
1286
- __lsx_vstelm_h(p0, pPixCb, 0, 4);
1287
- __lsx_vstelm_h(p0, pPixCb + iStrideY, 0, 5);
1288
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x2, 0, 6);
1289
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x3, 0, 7);
1290
-
1291
- // Load data from pPixCr
1292
- pPixCr -= 2;
1293
- DUP4_ARG2(__lsx_vldx, pPixCr, iStrideY_x0, pPixCr, iStrideY, pPixCr,
1294
- iStrideY_x2, pPixCr, iStrideY_x3, p1, p0, q0, q1);
1295
- pPixCr += iStrideY_x4;
1296
- DUP4_ARG2(__lsx_vldx, pPixCr, iStrideY_x0, pPixCr, iStrideY, pPixCr,
1297
- iStrideY_x2, pPixCr, iStrideY_x3, t0, t1, t2, t3);
1298
- LSX_TRANSPOSE8x4_B(p1, p0, q0, q1, t0, t1, t2, t3, p1, p0, q0, q1);
1299
-
1300
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1301
- p0_l, p1_l, q0_l, q1_l);
1302
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1303
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1304
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1305
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1306
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1307
-
1308
- // Calculate the low part
1309
- // WELS_CLIP3 ((((q0 - p0) * (1 << 2)) + (p1 - q1) + 4) >> 3, -iTc0, iTc0)
1310
- iDeta_l = __lsx_vsub_h(q0_l, p0_l);
1311
- iDeta_l = __lsx_vslli_h(iDeta_l, 2);
1312
- iDeta_l = __lsx_vadd_h(iDeta_l, p1_l);
1313
- iDeta_l = __lsx_vsub_h(iDeta_l, q1_l);
1314
- iDeta_l = __lsx_vaddi_hu(iDeta_l, 4);
1315
- iDeta_l = __lsx_vsrai_h(iDeta_l, 3);
1316
- iDeta_l = __lsx_vmin_h(iTc0_l, iDeta_l);
1317
- iDeta_l = __lsx_vmax_h(negiTc0_l, iDeta_l);
1318
-
1319
- // WelsClip1 (p0 + iDeta)
1320
- p0_l = __lsx_vadd_h(p0_l, iDeta_l);
1321
- p1_l = __lsx_vand_v(p0_l, not_255);
1322
- p2_l = __lsx_vsle_h(zero, p0_l);
1323
- flag = __lsx_vseq_h(p1_l, zero);
1324
- p0_l = __lsx_vand_v(p0_l, flag);
1325
- flag = __lsx_vnor_v(flag,flag);
1326
- p2_l = __lsx_vand_v(p2_l, flag);
1327
- p0_l = __lsx_vadd_h(p0_l, p2_l);
1328
-
1329
- // WelsClip1 (q0 - iDeta)
1330
- q0_l = __lsx_vsub_h(q0_l, iDeta_l);
1331
- q1_l = __lsx_vand_v(q0_l, not_255);
1332
- q2_l = __lsx_vsle_h(zero, q0_l);
1333
- flag = __lsx_vseq_h(q1_l, zero);
1334
- q0_l = __lsx_vand_v(q0_l, flag);
1335
- flag = __lsx_vnor_v(flag, flag);
1336
- q2_l = __lsx_vand_v(q2_l, flag);
1337
- q0_l = __lsx_vadd_h(q0_l, q2_l);
1338
-
1339
- DUP2_ARG2(__lsx_vpickev_b, zero, p0_l, zero, q0_l, t0, t1);
1340
- flag = __lsx_vsle_b(zero, iTc0);
1341
- flag = __lsx_vand_v(flag, flags);
1342
- t0 = __lsx_vand_v(t0, flag);
1343
- tp = __lsx_vnor_v(flag,flag);
1344
- p0 = __lsx_vand_v(p0, tp);
1345
- p0 = __lsx_vadd_b(t0, p0);
1346
- t1 = __lsx_vand_v(t1, flag);
1347
- tp = __lsx_vnor_v(flag,flag);
1348
- q0 = __lsx_vand_v(q0, tp);
1349
- q0 = __lsx_vadd_b(t1, q0);
1350
- p0 = __lsx_vilvl_b(q0, p0);
1351
-
1352
- // Store data to pPixCr
1353
- pPixCr -= iStrideY_x4 - 1;
1354
- __lsx_vstelm_h(p0, pPixCr, 0, 0);
1355
- __lsx_vstelm_h(p0, pPixCr + iStrideY, 0, 1);
1356
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x2, 0, 2);
1357
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x3, 0, 3);
1358
- pPixCr += iStrideY_x4;
1359
- __lsx_vstelm_h(p0, pPixCr, 0, 4);
1360
- __lsx_vstelm_h(p0, pPixCr + iStrideY, 0, 5);
1361
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x2, 0, 6);
1362
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x3, 0, 7);
1363
- }
1364
-
1365
- void DeblockChromaEq4H_lsx (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideY,
1366
- int32_t iAlpha, int32_t iBeta) {
1367
- __m128i p0, p1, q0, q1, t0, t1, t2, t3, tp;
1368
- __m128i p0_l, p1_l, p2_l, q0_l, q1_l, q2_l;
1369
- __m128i bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags;
1370
-
1371
- __m128i zero = __lsx_vldi(0);
1372
- __m128i alpha = __lsx_vreplgr2vr_b(iAlpha);
1373
- __m128i beta = __lsx_vreplgr2vr_b(iBeta);
1374
-
1375
- int32_t iStrideY_x0 = 0;
1376
- int32_t iStrideY_x2 = iStrideY << 1;
1377
- int32_t iStrideY_x3 = iStrideY_x2 + iStrideY;
1378
- int32_t iStrideY_x4 = iStrideY << 2;
1379
-
1380
- // Load data from pPixCb
1381
- pPixCb -= 2;
1382
- DUP4_ARG2(__lsx_vldx, pPixCb, iStrideY_x0, pPixCb, iStrideY, pPixCb,
1383
- iStrideY_x2, pPixCb, iStrideY_x3, p1, p0, q0, q1);
1384
- pPixCb += iStrideY_x4;
1385
- DUP4_ARG2(__lsx_vldx, pPixCb, iStrideY_x0, pPixCb, iStrideY, pPixCb,
1386
- iStrideY_x2, pPixCb, iStrideY_x3, t0, t1, t2, t3);
1387
- LSX_TRANSPOSE8x4_B(p1, p0, q0, q1, t0, t1, t2, t3, p1, p0, q0, q1);
1388
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1389
- p0_l, p1_l, q0_l, q1_l);
1390
-
1391
- // Calculate condition mask
1392
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1393
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1394
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1395
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1396
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1397
-
1398
- // ((p1 * (1 << 1)) + p0 + q1 + 2) >> 2
1399
- p2_l = __lsx_vslli_h(p1_l, 1);
1400
- p2_l = __lsx_vadd_h(p2_l, p0_l);
1401
- p2_l = __lsx_vadd_h(p2_l, q1_l);
1402
- p2_l = __lsx_vaddi_hu(p2_l, 2);
1403
- p2_l = __lsx_vsrai_h(p2_l, 2);
1404
-
1405
- // ((q1 * (1 << 1)) + q0 + p1 + 2) >> 2
1406
- q2_l = __lsx_vslli_h(q1_l, 1);
1407
- q2_l = __lsx_vadd_h(q2_l, q0_l);
1408
- q2_l = __lsx_vadd_h(q2_l, p1_l);
1409
- q2_l = __lsx_vaddi_hu(q2_l, 2);
1410
- q2_l = __lsx_vsrai_h(q2_l, 2);
1411
-
1412
- DUP2_ARG2(__lsx_vpickev_b, zero, p2_l, zero, q2_l, t0, t1);
1413
- t0 = __lsx_vand_v(t0, flags);
1414
- tp = __lsx_vnor_v(flags,flags);
1415
- p0 = __lsx_vand_v(p0, tp);
1416
- p0 = __lsx_vadd_b(t0, p0);
1417
- t1 = __lsx_vand_v(t1, flags);
1418
- tp = __lsx_vnor_v(flags,flags);
1419
- q0 = __lsx_vand_v(q0, tp);
1420
- q0 = __lsx_vadd_b(t1, q0);
1421
- p0 = __lsx_vilvl_b(q0, p0);
1422
-
1423
- // Store data to pPixCb
1424
- pPixCb -= iStrideY_x4 - 1;
1425
- __lsx_vstelm_h(p0, pPixCb, 0, 0);
1426
- __lsx_vstelm_h(p0, pPixCb + iStrideY, 0, 1);
1427
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x2, 0, 2);
1428
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x3, 0, 3);
1429
- pPixCb += iStrideY_x4;
1430
- __lsx_vstelm_h(p0, pPixCb, 0, 4);
1431
- __lsx_vstelm_h(p0, pPixCb + iStrideY, 0, 5);
1432
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x2, 0, 6);
1433
- __lsx_vstelm_h(p0, pPixCb + iStrideY_x3, 0, 7);
1434
-
1435
- // Load data from pPixCr
1436
- pPixCr -= 2;
1437
- DUP4_ARG2(__lsx_vldx, pPixCr, iStrideY_x0, pPixCr, iStrideY, pPixCr,
1438
- iStrideY_x2, pPixCr, iStrideY_x3, p1, p0, q0, q1);
1439
- pPixCr += iStrideY_x4;
1440
- DUP4_ARG2(__lsx_vldx, pPixCr, iStrideY_x0, pPixCr, iStrideY, pPixCr,
1441
- iStrideY_x2, pPixCr, iStrideY_x3, t0, t1, t2, t3);
1442
- LSX_TRANSPOSE8x4_B(p1, p0, q0, q1, t0, t1, t2, t3, p1, p0, q0, q1);
1443
- DUP4_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, zero, q0, zero, q1,
1444
- p0_l, p1_l, q0_l, q1_l);
1445
-
1446
- // Calculate condition mask
1447
- DUP2_ARG2(__lsx_vabsd_bu, p0, q0, p1, p0, bDetaP0Q0, bDetaP1P0);
1448
- bDetaQ1Q0 = __lsx_vabsd_bu(q1, q0);
1449
- DUP2_ARG2(__lsx_vslt_bu, bDetaP0Q0, alpha, bDetaP1P0, beta, bDetaP0Q0, bDetaP1P0);
1450
- bDetaQ1Q0 = __lsx_vslt_bu(bDetaQ1Q0, beta);
1451
- DUP2_ARG2(__lsx_vand_v, bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, flags, flags, flags);
1452
-
1453
- // ((p1 * (1 << 1)) + p0 + q1 + 2) >> 2
1454
- p2_l = __lsx_vslli_h(p1_l, 1);
1455
- p2_l = __lsx_vadd_h(p2_l, p0_l);
1456
- p2_l = __lsx_vadd_h(p2_l, q1_l);
1457
- p2_l = __lsx_vaddi_hu(p2_l, 2);
1458
- p2_l = __lsx_vsrai_h(p2_l, 2);
1459
-
1460
- // ((q1 * (1 << 1)) + q0 + p1 + 2) >> 2
1461
- q2_l = __lsx_vslli_h(q1_l, 1);
1462
- q2_l = __lsx_vadd_h(q2_l, q0_l);
1463
- q2_l = __lsx_vadd_h(q2_l, p1_l);
1464
- q2_l = __lsx_vaddi_hu(q2_l, 2);
1465
- q2_l = __lsx_vsrai_h(q2_l, 2);
1466
-
1467
- DUP2_ARG2(__lsx_vpickev_b, zero, p2_l, zero, q2_l, t0, t1);
1468
- t0 = __lsx_vand_v(t0, flags);
1469
- tp = __lsx_vnor_v(flags,flags);
1470
- p0 = __lsx_vand_v(p0, tp);
1471
- p0 = __lsx_vadd_b(t0, p0);
1472
- t1 = __lsx_vand_v(t1, flags);
1473
- tp = __lsx_vnor_v(flags,flags);
1474
- q0 = __lsx_vand_v(q0, tp);
1475
- q0 = __lsx_vadd_b(t1, q0);
1476
- p0 = __lsx_vilvl_b(q0, p0);
1477
-
1478
- // Store data to pPixCr
1479
- pPixCr -= iStrideY_x4 - 1;
1480
- __lsx_vstelm_h(p0, pPixCr, 0, 0);
1481
- __lsx_vstelm_h(p0, pPixCr + iStrideY, 0, 1);
1482
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x2, 0, 2);
1483
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x3, 0, 3);
1484
- pPixCr += iStrideY_x4;
1485
- __lsx_vstelm_h(p0, pPixCr, 0, 4);
1486
- __lsx_vstelm_h(p0, pPixCr + iStrideY, 0, 5);
1487
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x2, 0, 6);
1488
- __lsx_vstelm_h(p0, pPixCr + iStrideY_x3, 0, 7);
1489
- }