@scrypted/libav 1.0.179 → 1.0.181

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 (340) hide show
  1. package/_openh264install/include/wels/codec_api.h +592 -0
  2. package/_openh264install/include/wels/codec_app_def.h +820 -0
  3. package/_openh264install/include/wels/codec_def.h +216 -0
  4. package/_openh264install/include/wels/codec_ver.h +15 -0
  5. package/_openh264install/lib/libopenh264.a +0 -0
  6. package/_openh264install/lib/pkgconfig/openh264.pc +10 -0
  7. package/binding.gyp +4 -0
  8. package/openh264/.reviewboardrc +3 -0
  9. package/openh264/.travis.yml +42 -0
  10. package/openh264/CODING_STYLE +8 -0
  11. package/openh264/CONTRIBUTORS +55 -0
  12. package/openh264/LICENSE +23 -0
  13. package/openh264/Makefile +408 -0
  14. package/openh264/README.md +197 -0
  15. package/openh264/RELEASES +467 -0
  16. package/openh264/SECURITY.md +16 -0
  17. package/openh264/autotest/codec_comparision/run_MultiCodecComparision.sh +431 -0
  18. package/openh264/autotest/performanceTest/android/run_AutoTest_android.sh +180 -0
  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 +193 -0
  22. package/openh264/autotest/performanceTest/ios/uiascript.js +19 -0
  23. package/openh264/autotest/performanceTest/parsePerfData.sh +107 -0
  24. package/openh264/autotest/performanceTest/run_perfTest.sh +122 -0
  25. package/openh264/autotest/unitTest/android/run_AutoTest_android.sh +112 -0
  26. package/openh264/autotest/unitTest/ios/run_AutoTest_ios.sh +167 -0
  27. package/openh264/autotest/unitTest/run_ParseUTxml.sh +70 -0
  28. package/openh264/autotest/unitTest/run_unitTest.sh +98 -0
  29. package/openh264/build.gradle +30 -0
  30. package/openh264/code-coverage.sh +6 -0
  31. package/openh264/codec/api/meson.build +1 -0
  32. package/openh264/codec/api/wels/codec_api.h +592 -0
  33. package/openh264/codec/api/wels/codec_app_def.h +820 -0
  34. package/openh264/codec/api/wels/codec_def.h +216 -0
  35. package/openh264/codec/api/wels/codec_ver.h +15 -0
  36. package/openh264/codec/api/wels/meson.build +9 -0
  37. package/openh264/codec/common/arm/arm_arch_common_macro.S +83 -0
  38. package/openh264/codec/common/arm/copy_mb_neon.S +161 -0
  39. package/openh264/codec/common/arm/deblocking_neon.S +857 -0
  40. package/openh264/codec/common/arm/expand_picture_neon.S +154 -0
  41. package/openh264/codec/common/arm/intra_pred_common_neon.S +82 -0
  42. package/openh264/codec/common/arm/mc_neon.S +2283 -0
  43. package/openh264/codec/common/arm64/arm_aarch64_common.h +85 -0
  44. package/openh264/codec/common/arm64/arm_arch64_common_macro.S +79 -0
  45. package/openh264/codec/common/arm64/copy_mb_aarch64_neon.S +202 -0
  46. package/openh264/codec/common/arm64/deblocking_aarch64_neon.S +852 -0
  47. package/openh264/codec/common/arm64/expand_picture_aarch64_neon.S +150 -0
  48. package/openh264/codec/common/arm64/intra_pred_common_aarch64_neon.S +58 -0
  49. package/openh264/codec/common/arm64/mc_aarch64_neon.S +2614 -0
  50. package/openh264/codec/common/generate_version.sh +28 -0
  51. package/openh264/codec/common/inc/WelsList.h +287 -0
  52. package/openh264/codec/common/inc/WelsLock.h +97 -0
  53. package/openh264/codec/common/inc/WelsTask.h +75 -0
  54. package/openh264/codec/common/inc/WelsTaskThread.h +83 -0
  55. package/openh264/codec/common/inc/WelsThread.h +106 -0
  56. package/openh264/codec/common/inc/WelsThreadLib.h +151 -0
  57. package/openh264/codec/common/inc/WelsThreadPool.h +124 -0
  58. package/openh264/codec/common/inc/asmdefs_mmi.h +345 -0
  59. package/openh264/codec/common/inc/copy_mb.h +103 -0
  60. package/openh264/codec/common/inc/cpu.h +81 -0
  61. package/openh264/codec/common/inc/cpu_core.h +103 -0
  62. package/openh264/codec/common/inc/crt_util_safe_x.h +104 -0
  63. package/openh264/codec/common/inc/deblocking_common.h +124 -0
  64. package/openh264/codec/common/inc/expand_pic.h +107 -0
  65. package/openh264/codec/common/inc/golomb_common.h +166 -0
  66. package/openh264/codec/common/inc/intra_pred_common.h +86 -0
  67. package/openh264/codec/common/inc/loongson_intrinsics.h +1919 -0
  68. package/openh264/codec/common/inc/ls_defines.h +130 -0
  69. package/openh264/codec/common/inc/macros.h +329 -0
  70. package/openh264/codec/common/inc/mc.h +407 -0
  71. package/openh264/codec/common/inc/measure_time.h +88 -0
  72. package/openh264/codec/common/inc/memory_align.h +116 -0
  73. package/openh264/codec/common/inc/msa_macros.h +2393 -0
  74. package/openh264/codec/common/inc/sad_common.h +139 -0
  75. package/openh264/codec/common/inc/typedefs.h +86 -0
  76. package/openh264/codec/common/inc/utils.h +95 -0
  77. package/openh264/codec/common/inc/version.h +10 -0
  78. package/openh264/codec/common/inc/version_gen.h.template +6 -0
  79. package/openh264/codec/common/inc/welsCodecTrace.h +64 -0
  80. package/openh264/codec/common/inc/wels_common_defs.h +373 -0
  81. package/openh264/codec/common/inc/wels_const_common.h +63 -0
  82. package/openh264/codec/common/loongarch/copy_mb_lsx.c +194 -0
  83. package/openh264/codec/common/loongarch/deblock_lsx.c +1489 -0
  84. package/openh264/codec/common/loongarch/intra_pred_com_lasx.c +112 -0
  85. package/openh264/codec/common/loongarch/intra_pred_com_lsx.c +91 -0
  86. package/openh264/codec/common/loongarch/mc_chroma_lsx.c +192 -0
  87. package/openh264/codec/common/loongarch/mc_horver_lsx.c +654 -0
  88. package/openh264/codec/common/loongarch/satd_sad_lasx.c +568 -0
  89. package/openh264/codec/common/meson.build +84 -0
  90. package/openh264/codec/common/mips/copy_mb_mmi.c +477 -0
  91. package/openh264/codec/common/mips/copy_mb_msa.c +80 -0
  92. package/openh264/codec/common/mips/deblock_mmi.c +2826 -0
  93. package/openh264/codec/common/mips/deblock_msa.c +1024 -0
  94. package/openh264/codec/common/mips/expand_picture_mmi.c +673 -0
  95. package/openh264/codec/common/mips/intra_pred_com_mmi.c +548 -0
  96. package/openh264/codec/common/mips/satd_sad_mmi.c +2154 -0
  97. package/openh264/codec/common/targets.mk +136 -0
  98. package/openh264/codec/common/x86/asm_inc.asm +743 -0
  99. package/openh264/codec/common/x86/cpuid.asm +263 -0
  100. package/openh264/codec/common/x86/dct.asm +1036 -0
  101. package/openh264/codec/common/x86/deblock.asm +848 -0
  102. package/openh264/codec/common/x86/expand_picture.asm +728 -0
  103. package/openh264/codec/common/x86/intra_pred_com.asm +117 -0
  104. package/openh264/codec/common/x86/mb_copy.asm +615 -0
  105. package/openh264/codec/common/x86/mc_chroma.asm +313 -0
  106. package/openh264/codec/common/x86/mc_luma.asm +4490 -0
  107. package/openh264/codec/common/x86/satd_sad.asm +2734 -0
  108. package/openh264/codec/common/x86/vaa.asm +411 -0
  109. package/openh264/codec/console/common/inc/read_config.h +68 -0
  110. package/openh264/codec/console/common/meson.build +12 -0
  111. package/openh264/codec/console/common/targets.mk +20 -0
  112. package/openh264/codec/console/dec/inc/d3d9_utils.h +148 -0
  113. package/openh264/codec/console/dec/meson.build +15 -0
  114. package/openh264/codec/console/dec/targets.mk +20 -0
  115. package/openh264/codec/console/enc/meson.build +9 -0
  116. package/openh264/codec/console/enc/targets.mk +19 -0
  117. package/openh264/codec/console/meson.build +3 -0
  118. package/openh264/codec/decoder/core/arm/block_add_neon.S +129 -0
  119. package/openh264/codec/decoder/core/arm/intra_pred_neon.S +635 -0
  120. package/openh264/codec/decoder/core/arm64/block_add_aarch64_neon.S +131 -0
  121. package/openh264/codec/decoder/core/arm64/intra_pred_aarch64_neon.S +524 -0
  122. package/openh264/codec/decoder/core/inc/au_parser.h +199 -0
  123. package/openh264/codec/decoder/core/inc/bit_stream.h +62 -0
  124. package/openh264/codec/decoder/core/inc/cabac_decoder.h +111 -0
  125. package/openh264/codec/decoder/core/inc/deblocking.h +118 -0
  126. package/openh264/codec/decoder/core/inc/dec_frame.h +156 -0
  127. package/openh264/codec/decoder/core/inc/dec_golomb.h +344 -0
  128. package/openh264/codec/decoder/core/inc/decode_mb_aux.h +83 -0
  129. package/openh264/codec/decoder/core/inc/decode_slice.h +104 -0
  130. package/openh264/codec/decoder/core/inc/decoder.h +186 -0
  131. package/openh264/codec/decoder/core/inc/decoder_context.h +590 -0
  132. package/openh264/codec/decoder/core/inc/decoder_core.h +206 -0
  133. package/openh264/codec/decoder/core/inc/error_code.h +222 -0
  134. package/openh264/codec/decoder/core/inc/error_concealment.h +68 -0
  135. package/openh264/codec/decoder/core/inc/fmo.h +114 -0
  136. package/openh264/codec/decoder/core/inc/get_intra_predictor.h +191 -0
  137. package/openh264/codec/decoder/core/inc/manage_dec_ref.h +62 -0
  138. package/openh264/codec/decoder/core/inc/mb_cache.h +80 -0
  139. package/openh264/codec/decoder/core/inc/memmgr_nal_unit.h +66 -0
  140. package/openh264/codec/decoder/core/inc/mv_pred.h +195 -0
  141. package/openh264/codec/decoder/core/inc/nal_prefix.h +56 -0
  142. package/openh264/codec/decoder/core/inc/nalu.h +79 -0
  143. package/openh264/codec/decoder/core/inc/parameter_sets.h +217 -0
  144. package/openh264/codec/decoder/core/inc/parse_mb_syn_cabac.h +89 -0
  145. package/openh264/codec/decoder/core/inc/parse_mb_syn_cavlc.h +137 -0
  146. package/openh264/codec/decoder/core/inc/pic_queue.h +62 -0
  147. package/openh264/codec/decoder/core/inc/picture.h +112 -0
  148. package/openh264/codec/decoder/core/inc/rec_mb.h +104 -0
  149. package/openh264/codec/decoder/core/inc/slice.h +208 -0
  150. package/openh264/codec/decoder/core/inc/vlc_decoder.h +177 -0
  151. package/openh264/codec/decoder/core/inc/wels_common_basis.h +317 -0
  152. package/openh264/codec/decoder/core/inc/wels_const.h +65 -0
  153. package/openh264/codec/decoder/core/inc/wels_decoder_thread.h +170 -0
  154. package/openh264/codec/decoder/core/loongarch/mb_aux_lsx.c +296 -0
  155. package/openh264/codec/decoder/core/mips/dct_mmi.c +786 -0
  156. package/openh264/codec/decoder/core/x86/dct.asm +72 -0
  157. package/openh264/codec/decoder/core/x86/intra_pred.asm +1456 -0
  158. package/openh264/codec/decoder/meson.build +69 -0
  159. package/openh264/codec/decoder/plus/inc/welsDecoderExt.h +170 -0
  160. package/openh264/codec/decoder/targets.mk +115 -0
  161. package/openh264/codec/encoder/core/arm/intra_pred_neon.S +589 -0
  162. package/openh264/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S +735 -0
  163. package/openh264/codec/encoder/core/arm/memory_neon.S +62 -0
  164. package/openh264/codec/encoder/core/arm/pixel_neon.S +882 -0
  165. package/openh264/codec/encoder/core/arm/reconstruct_neon.S +903 -0
  166. package/openh264/codec/encoder/core/arm/svc_motion_estimation.S +366 -0
  167. package/openh264/codec/encoder/core/arm64/intra_pred_aarch64_neon.S +505 -0
  168. package/openh264/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S +611 -0
  169. package/openh264/codec/encoder/core/arm64/memory_aarch64_neon.S +63 -0
  170. package/openh264/codec/encoder/core/arm64/pixel_aarch64_neon.S +621 -0
  171. package/openh264/codec/encoder/core/arm64/reconstruct_aarch64_neon.S +717 -0
  172. package/openh264/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S +350 -0
  173. package/openh264/codec/encoder/core/inc/as264_common.h +138 -0
  174. package/openh264/codec/encoder/core/inc/au_set.h +152 -0
  175. package/openh264/codec/encoder/core/inc/deblocking.h +92 -0
  176. package/openh264/codec/encoder/core/inc/decode_mb_aux.h +112 -0
  177. package/openh264/codec/encoder/core/inc/dq_map.h +58 -0
  178. package/openh264/codec/encoder/core/inc/encode_mb_aux.h +199 -0
  179. package/openh264/codec/encoder/core/inc/encoder.h +148 -0
  180. package/openh264/codec/encoder/core/inc/encoder_context.h +240 -0
  181. package/openh264/codec/encoder/core/inc/extern.h +124 -0
  182. package/openh264/codec/encoder/core/inc/get_intra_predictor.h +186 -0
  183. package/openh264/codec/encoder/core/inc/mb_cache.h +141 -0
  184. package/openh264/codec/encoder/core/inc/md.h +181 -0
  185. package/openh264/codec/encoder/core/inc/mt_defs.h +91 -0
  186. package/openh264/codec/encoder/core/inc/mv_pred.h +191 -0
  187. package/openh264/codec/encoder/core/inc/nal_encap.h +143 -0
  188. package/openh264/codec/encoder/core/inc/param_svc.h +576 -0
  189. package/openh264/codec/encoder/core/inc/parameter_sets.h +181 -0
  190. package/openh264/codec/encoder/core/inc/paraset_strategy.h +310 -0
  191. package/openh264/codec/encoder/core/inc/picture.h +137 -0
  192. package/openh264/codec/encoder/core/inc/picture_handle.h +66 -0
  193. package/openh264/codec/encoder/core/inc/rc.h +284 -0
  194. package/openh264/codec/encoder/core/inc/ref_list_mgr_svc.h +148 -0
  195. package/openh264/codec/encoder/core/inc/sample.h +154 -0
  196. package/openh264/codec/encoder/core/inc/set_mb_syn_cabac.h +127 -0
  197. package/openh264/codec/encoder/core/inc/set_mb_syn_cavlc.h +92 -0
  198. package/openh264/codec/encoder/core/inc/slice.h +212 -0
  199. package/openh264/codec/encoder/core/inc/slice_multi_threading.h +97 -0
  200. package/openh264/codec/encoder/core/inc/stat.h +102 -0
  201. package/openh264/codec/encoder/core/inc/svc_base_layer_md.h +102 -0
  202. package/openh264/codec/encoder/core/inc/svc_enc_frame.h +136 -0
  203. package/openh264/codec/encoder/core/inc/svc_enc_golomb.h +123 -0
  204. package/openh264/codec/encoder/core/inc/svc_enc_macroblock.h +82 -0
  205. package/openh264/codec/encoder/core/inc/svc_enc_slice_segment.h +212 -0
  206. package/openh264/codec/encoder/core/inc/svc_encode_mb.h +63 -0
  207. package/openh264/codec/encoder/core/inc/svc_encode_slice.h +184 -0
  208. package/openh264/codec/encoder/core/inc/svc_mode_decision.h +94 -0
  209. package/openh264/codec/encoder/core/inc/svc_motion_estimate.h +369 -0
  210. package/openh264/codec/encoder/core/inc/svc_set_mb_syn.h +70 -0
  211. package/openh264/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h +67 -0
  212. package/openh264/codec/encoder/core/inc/vlc_encoder.h +92 -0
  213. package/openh264/codec/encoder/core/inc/wels_common_basis.h +160 -0
  214. package/openh264/codec/encoder/core/inc/wels_const.h +174 -0
  215. package/openh264/codec/encoder/core/inc/wels_func_ptr_def.h +300 -0
  216. package/openh264/codec/encoder/core/inc/wels_preprocess.h +251 -0
  217. package/openh264/codec/encoder/core/inc/wels_task_base.h +79 -0
  218. package/openh264/codec/encoder/core/inc/wels_task_encoder.h +142 -0
  219. package/openh264/codec/encoder/core/inc/wels_task_management.h +135 -0
  220. package/openh264/codec/encoder/core/inc/wels_transpose_matrix.h +58 -0
  221. package/openh264/codec/encoder/core/loongarch/dct_lasx.c +452 -0
  222. package/openh264/codec/encoder/core/loongarch/get_intra_predictor_lsx.c +166 -0
  223. package/openh264/codec/encoder/core/loongarch/quant_lsx.c +153 -0
  224. package/openh264/codec/encoder/core/loongarch/sample_lasx.c +87 -0
  225. package/openh264/codec/encoder/core/loongarch/svc_motion_estimate_lsx.c +104 -0
  226. package/openh264/codec/encoder/core/mips/dct_mmi.c +529 -0
  227. package/openh264/codec/encoder/core/mips/quant_mmi.c +553 -0
  228. package/openh264/codec/encoder/core/mips/score_mmi.c +324 -0
  229. package/openh264/codec/encoder/core/x86/coeff.asm +695 -0
  230. package/openh264/codec/encoder/core/x86/dct.asm +108 -0
  231. package/openh264/codec/encoder/core/x86/intra_pred.asm +1129 -0
  232. package/openh264/codec/encoder/core/x86/matrix_transpose.asm +395 -0
  233. package/openh264/codec/encoder/core/x86/memzero.asm +132 -0
  234. package/openh264/codec/encoder/core/x86/quant.asm +507 -0
  235. package/openh264/codec/encoder/core/x86/sample_sc.asm +1829 -0
  236. package/openh264/codec/encoder/core/x86/score.asm +363 -0
  237. package/openh264/codec/encoder/meson.build +98 -0
  238. package/openh264/codec/encoder/plus/inc/welsEncoderExt.h +129 -0
  239. package/openh264/codec/encoder/targets.mk +146 -0
  240. package/openh264/codec/meson.build +9 -0
  241. package/openh264/codec/processing/interface/IWelsVP.h +310 -0
  242. package/openh264/codec/processing/meson.build +71 -0
  243. package/openh264/codec/processing/targets.mk +117 -0
  244. package/openh264/docs/doxygen/Doxyfile +1865 -0
  245. package/openh264/docs/doxygen/Home.rest +25 -0
  246. package/openh264/docs/doxygen/ISVCDecoder.rest +19 -0
  247. package/openh264/docs/doxygen/ISVCEncoder.rest +16 -0
  248. package/openh264/docs/doxygen/UsageExampleForDecoder.rest +10 -0
  249. package/openh264/docs/doxygen/UsageExampleForEncoder.rest +15 -0
  250. package/openh264/docs/doxygen2rst.py +619 -0
  251. package/openh264/gmpopenh264.info +4 -0
  252. package/openh264/gradlew +172 -0
  253. package/openh264/meson.build +218 -0
  254. package/openh264/meson_options.txt +1 -0
  255. package/openh264/module/RefCounted.h +141 -0
  256. package/openh264/module/gmp-openh264.cpp +1196 -0
  257. package/openh264/module/targets.mk +14 -0
  258. package/openh264/module/task_utils.h +38 -0
  259. package/openh264/module/task_utils.py +207 -0
  260. package/openh264/module/task_utils_generated.h +2087 -0
  261. package/openh264/openh264.def +7 -0
  262. package/openh264/openh264.pc.in +10 -0
  263. package/openh264/openh264.rc +61 -0
  264. package/openh264/openh264.rc.template +61 -0
  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 +1 -0
  280. package/openh264/res/CiscoVT2people_320x192_12fps.yuv +1 -0
  281. package/openh264/res/Cisco_Absolute_Power_1280x720_30fps.yuv +3607 -0
  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 +1 -0
  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 +91 -0
  325. package/openh264/settings.gradle +4 -0
  326. package/openh264/subprojects/gtest.wrap +10 -0
  327. package/openh264/testbin/AutoBuild_Windows_VS2008.bat +59 -0
  328. package/openh264/testbin/CmdLineExample.sh +7 -0
  329. package/openh264/testbin/CmdLineReadMe +22 -0
  330. package/openh264/testbin/layer2.cfg +37 -0
  331. package/openh264/testbin/layer2_arbitrary_res.cfg +37 -0
  332. package/openh264/testbin/layer2_vd.cfg +38 -0
  333. package/openh264/testbin/layer2_vd_rc.cfg +38 -0
  334. package/openh264/testbin/welsenc.cfg +71 -0
  335. package/openh264/testbin/welsenc_arbitrary_res.cfg +70 -0
  336. package/openh264/testbin/welsenc_ios.cfg +71 -0
  337. package/openh264/testbin/welsenc_vd_1d.cfg +70 -0
  338. package/openh264/testbin/welsenc_vd_rc.cfg +69 -0
  339. package/openh264/ut.def +2 -0
  340. package/package.json +1 -1
@@ -0,0 +1,452 @@
1
+ /*!
2
+ * \copy
3
+ * Copyright (c) 2022, Cisco Systems
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions
8
+ * are met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ *
13
+ * * Redistributions in binary form must reproduce the above copyright
14
+ * notice, this list of conditions and the following disclaimer in
15
+ * the documentation and/or other materials provided with the
16
+ * distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ * POSSIBILITY OF SUCH DAMAGE.
30
+ *
31
+ *
32
+ * \file dct_lasx.c
33
+ *
34
+ * \brief Loongson optimization
35
+ *
36
+ * \date 15/02/2022 Created
37
+ *
38
+ *************************************************************************************
39
+ */
40
+ #include <stdint.h>
41
+ #include "loongson_intrinsics.h"
42
+
43
+ #define CALC_TEMPS_AND_PDCT(src0, src1, src2, src3, \
44
+ dst0, dst1, dst2, dst3) \
45
+ do { \
46
+ __m256i tms0, tms1, tms2, tms3; \
47
+ tms0 = __lasx_xvadd_h(src0, src3); \
48
+ tms1 = __lasx_xvadd_h(src1, src2); \
49
+ tms2 = __lasx_xvsub_h(src1, src2); \
50
+ tms3 = __lasx_xvsub_h(src0, src3); \
51
+ dst0 = __lasx_xvadd_h(tms0, tms1); \
52
+ dst1 = __lasx_xvslli_h(tms3, 1); \
53
+ dst1 = __lasx_xvadd_h(dst1, tms2); \
54
+ dst2 = __lasx_xvsub_h(tms0, tms1); \
55
+ dst3 = __lasx_xvslli_h(tms2, 1); \
56
+ dst3 = __lasx_xvsub_h(tms3, dst3); \
57
+ }while(0)
58
+
59
+ /****************************************************************************
60
+ * DCT functions
61
+ ****************************************************************************/
62
+ void WelsDctT4_lasx (int16_t* pDct, uint8_t* pPixel1,
63
+ int32_t iStride1, uint8_t* pPixel2,
64
+ int32_t iStride2) {
65
+ int32_t iStride0 = 0;
66
+ int32_t iStride1_x2 = iStride1 << 1;
67
+ int32_t iStride1_x3 = iStride1_x2 + iStride1;
68
+ int32_t iStride2_x2 = iStride2 << 1;
69
+ int32_t iStride2_x3 = iStride2_x2 + iStride2;
70
+
71
+ __m256i src0, src1, src2, src3, src4, src5, src6, src7;
72
+ __m256i dst0, dst1, dst2, dst3;
73
+
74
+ DUP4_ARG2(__lasx_xvldx,
75
+ pPixel1, iStride0,
76
+ pPixel1, iStride1,
77
+ pPixel1, iStride1_x2,
78
+ pPixel1, iStride1_x3,
79
+ src0, src1, src2, src3);
80
+ DUP4_ARG2(__lasx_xvldx,
81
+ pPixel2, iStride0,
82
+ pPixel2, iStride2,
83
+ pPixel2, iStride2_x2,
84
+ pPixel2, iStride2_x3,
85
+ src4, src5, src6, src7);
86
+ DUP4_ARG2(__lasx_xvilvl_b,
87
+ src0, src4,
88
+ src1, src5,
89
+ src2, src6,
90
+ src3, src7,
91
+ src0, src1, src2, src3);
92
+ DUP4_ARG2(__lasx_xvhsubw_hu_bu,
93
+ src0, src0,
94
+ src1, src1,
95
+ src2, src2,
96
+ src3, src3,
97
+ src0, src1, src2, src3);
98
+ LASX_TRANSPOSE4x4_H(src0, src1, src2, src3,
99
+ src0, src1, src2, src3);
100
+ CALC_TEMPS_AND_PDCT(src0, src1, src2, src3,
101
+ dst0, dst1, dst2, dst3);
102
+ LASX_TRANSPOSE4x4_H(dst0, dst1, dst2, dst3,
103
+ src0, src1, src2, src3);
104
+ CALC_TEMPS_AND_PDCT(src0, src1, src2, src3,
105
+ dst0, dst1, dst2, dst3);
106
+ dst0 = __lasx_xvpackev_d(dst1, dst0);
107
+ dst2 = __lasx_xvpackev_d(dst3, dst2);
108
+ dst0 = __lasx_xvpermi_q(dst2, dst0, 0x20);
109
+ __lasx_xvst(dst0, pDct, 0);
110
+ }
111
+
112
+ void WelsDctFourT4_lasx (int16_t* pDct, uint8_t* pPixel1,
113
+ int32_t iStride1, uint8_t* pPixel2,
114
+ int32_t iStride2) {
115
+ int32_t stride_1 = iStride1 << 2;
116
+ int32_t stride_2 = iStride2 << 2;
117
+ int32_t iStride0 = 0;
118
+ int32_t iStride1_x2 = iStride1 << 1;
119
+ int32_t iStride1_x3 = iStride1_x2 + iStride1;
120
+ int32_t iStride2_x2 = iStride2 << 1;
121
+ int32_t iStride2_x3 = iStride2_x2 + iStride2;
122
+ uint8_t *psrc10 = pPixel1, *psrc11 = pPixel2;
123
+ uint8_t *psrc20 = pPixel1 + stride_1, *psrc21 = pPixel2 + stride_2;
124
+
125
+ __m256i src0, src1, src2, src3, src4, src5, src6, src7,
126
+ src8, src9, src10, src11, src12, src13, src14 ,src15;
127
+ __m256i tmp0, tmp1, tmp2, tmp3, dst0, dst1, dst2, dst3, dst4,
128
+ dst5, dst6, dst7;
129
+
130
+ DUP4_ARG2(__lasx_xvldx,
131
+ psrc10, iStride0,
132
+ psrc10, iStride1,
133
+ psrc10, iStride1_x2,
134
+ psrc10, iStride1_x3,
135
+ src0, src1, src2, src3);
136
+ DUP4_ARG2(__lasx_xvldx,
137
+ psrc11, iStride0,
138
+ psrc11, iStride2,
139
+ psrc11, iStride2_x2,
140
+ psrc11, iStride2_x3,
141
+ src4, src5, src6, src7);
142
+ DUP4_ARG2(__lasx_xvldx,
143
+ psrc20, iStride0,
144
+ psrc20, iStride1,
145
+ psrc20, iStride1_x2,
146
+ psrc20, iStride1_x3,
147
+ src8, src9, src10, src11);
148
+ DUP4_ARG2(__lasx_xvldx,
149
+ psrc21, iStride0,
150
+ psrc21, iStride2,
151
+ psrc21, iStride2_x2,
152
+ psrc21, iStride2_x3,
153
+ src12, src13, src14, src15);
154
+ DUP4_ARG2(__lasx_xvilvl_b,
155
+ src0, src4,
156
+ src1, src5,
157
+ src2, src6,
158
+ src3, src7,
159
+ src0, src1, src2, src3);
160
+ DUP4_ARG2(__lasx_xvilvl_b,
161
+ src8, src12,
162
+ src9, src13,
163
+ src10, src14,
164
+ src11, src15,
165
+ src8, src9, src10, src11);
166
+ DUP4_ARG2(__lasx_xvhsubw_hu_bu,
167
+ src0, src0,
168
+ src1, src1,
169
+ src2, src2,
170
+ src3, src3,
171
+ src0, src1, src2, src3);
172
+ DUP4_ARG2(__lasx_xvhsubw_hu_bu,
173
+ src8, src8,
174
+ src9, src9,
175
+ src10, src10,
176
+ src11, src11,
177
+ src8, src9, src10 ,src11);
178
+ LASX_TRANSPOSE8x8_H(src0, src1, src2, src3, src8, src9, src10, src11,
179
+ src0, src1, src2, src3, src8, src9, src10, src11);
180
+ DUP4_ARG3(__lasx_xvpermi_q,
181
+ src8, src0, 0x20,
182
+ src9, src1, 0x20,
183
+ src10,src2, 0x20,
184
+ src11,src3, 0x20,
185
+ src0, src1, src2, src3);
186
+ CALC_TEMPS_AND_PDCT(src0, src1, src2, src3,
187
+ dst0, dst1, dst2, dst3);
188
+ DUP4_ARG3(__lasx_xvpermi_q,
189
+ dst0, dst0, 0x31,
190
+ dst1, dst1, 0x31,
191
+ dst2, dst2, 0x31,
192
+ dst3, dst3, 0x31,
193
+ dst4, dst5, dst6, dst7);
194
+ LASX_TRANSPOSE8x8_H(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7,
195
+ dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7);
196
+ DUP4_ARG3(__lasx_xvpermi_q,
197
+ dst4, dst0, 0x20,
198
+ dst5, dst1, 0x20,
199
+ dst6, dst2, 0x20,
200
+ dst7, dst3, 0x20,
201
+ dst0, dst1, dst2, dst3);
202
+ CALC_TEMPS_AND_PDCT(dst0, dst1, dst2, dst3,
203
+ dst0, dst1, dst2, dst3);
204
+ DUP2_ARG2(__lasx_xvpackev_d,
205
+ dst1, dst0,
206
+ dst3, dst2,
207
+ tmp0, tmp1);
208
+ DUP2_ARG2(__lasx_xvpackod_d,
209
+ dst1, dst0,
210
+ dst3, dst2,
211
+ tmp2, tmp3);
212
+ DUP2_ARG3(__lasx_xvpermi_q,
213
+ tmp1, tmp0, 0x20,
214
+ tmp3, tmp2, 0x20,
215
+ dst0, dst1);
216
+ DUP2_ARG3(__lasx_xvpermi_q,
217
+ tmp1, tmp0, 0x31,
218
+ tmp3, tmp2, 0x31,
219
+ dst2, dst3);
220
+ __lasx_xvst(dst0, pDct, 0);
221
+ __lasx_xvst(dst1, pDct, 32);
222
+ __lasx_xvst(dst2, pDct, 64);
223
+ __lasx_xvst(dst3, pDct, 96);
224
+ }
225
+
226
+ /****************************************************************************
227
+ * IDCT functions, final output = prediction(CS) + IDCT(scaled_coeff)
228
+ ****************************************************************************/
229
+ void WelsIDctT4Rec_lasx (uint8_t* pRec, int32_t iStride,
230
+ uint8_t* pPred, int32_t iPredStride,
231
+ int16_t* pDct) {
232
+ int32_t iDstStride_x2 = iStride << 1;
233
+ int32_t iDstStride_x3 = iStride + iDstStride_x2;
234
+ int32_t iPredStride_x2 = iPredStride << 1;
235
+ int32_t iPredStride_x3 = iPredStride + iPredStride_x2;
236
+
237
+ __m256i src0, src1, src2, src3, src4, src5, src6, src7,
238
+ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7,
239
+ dst0, dst1, dst2, dst3;
240
+
241
+ src0 = __lasx_xvld(pDct, 0);
242
+ src4 = __lasx_xvld(pPred, 0);
243
+ src5 = __lasx_xvldx(pPred, iPredStride);
244
+ src6 = __lasx_xvldx(pPred, iPredStride_x2);
245
+ src7 = __lasx_xvldx(pPred, iPredStride_x3);
246
+
247
+ src1 = __lasx_xvpickve_d(src0, 1);
248
+ src2 = __lasx_xvpickve_d(src0, 2);
249
+ src3 = __lasx_xvpickve_d(src0, 3);
250
+
251
+ LASX_TRANSPOSE4x4_H(src0, src1, src2, src3,
252
+ src0, src1, src2, src3);
253
+ //horizon
254
+ tmp0 = __lasx_xvadd_h(src0, src2); //0+2 sumu
255
+ tmp1 = __lasx_xvsrai_h(src3, 1);
256
+ tmp1 = __lasx_xvadd_h(src1, tmp1); //1+3 sumd
257
+ tmp2 = __lasx_xvsub_h(src0, src2); //0-2 delu
258
+ tmp3 = __lasx_xvsrai_h(src1, 1);
259
+ tmp3 = __lasx_xvsub_h(tmp3, src3); //1-3 deld
260
+
261
+ src0 = __lasx_xvadd_h(tmp0 ,tmp1); //0 4 8 12
262
+ src1 = __lasx_xvadd_h(tmp2, tmp3); //1 5 9 13
263
+ src2 = __lasx_xvsub_h(tmp2, tmp3); //2 6 10 14
264
+ src3 = __lasx_xvsub_h(tmp0, tmp1); //3 7 11 15
265
+ //vertical
266
+ LASX_TRANSPOSE4x4_H(src0, src1, src2, src3,
267
+ src0, src1, src2, src3);
268
+ tmp0 = __lasx_xvadd_h(src0, src2); //suml
269
+ tmp1 = __lasx_xvsrai_h(src3, 1);
270
+ tmp1 = __lasx_xvadd_h(src1, tmp1); //sumr
271
+ tmp2 = __lasx_xvsub_h(src0, src2); //dell
272
+ tmp3 = __lasx_xvsrai_h(src1, 1);
273
+ tmp3 = __lasx_xvsub_h(tmp3, src3); //delr
274
+
275
+ dst0 = __lasx_xvadd_h(tmp0, tmp1);
276
+ dst1 = __lasx_xvadd_h(tmp2, tmp3);
277
+ dst2 = __lasx_xvsub_h(tmp2, tmp3);
278
+ dst3 = __lasx_xvsub_h(tmp0, tmp1);
279
+ DUP4_ARG2(__lasx_xvsrari_h,
280
+ dst0, 6,
281
+ dst1, 6,
282
+ dst2, 6,
283
+ dst3, 6,
284
+ dst0, dst1, dst2, dst3);
285
+ DUP4_ARG1(__lasx_vext2xv_hu_bu,
286
+ src4, src5, src6, src7,
287
+ tmp4, tmp5, tmp6, tmp7);
288
+ DUP4_ARG2(__lasx_xvsadd_h,
289
+ tmp4, dst0,
290
+ tmp5, dst1,
291
+ tmp6, dst2,
292
+ tmp7, dst3,
293
+ dst0, dst1, dst2, dst3);
294
+ DUP4_ARG1(__lasx_xvclip255_h,
295
+ dst0, dst1, dst2, dst3,
296
+ dst0, dst1, dst2, dst3);
297
+ DUP2_ARG2(__lasx_xvpickev_b,
298
+ dst1, dst0,
299
+ dst3, dst2,
300
+ dst0, dst2);
301
+ __lasx_xvstelm_w(dst0, pRec, 0, 0);
302
+ __lasx_xvstelm_w(dst0, pRec + iStride, 0, 2);
303
+ __lasx_xvstelm_w(dst2, pRec + iDstStride_x2, 0, 0);
304
+ __lasx_xvstelm_w(dst2, pRec + iDstStride_x3, 0, 2);
305
+ }
306
+
307
+ void WelsIDctFourT4Rec_lasx (uint8_t* pRec, int32_t iStride,
308
+ uint8_t* pPred, int32_t iPredStride,
309
+ int16_t* pDct) {
310
+ __m256i src0, src1, src2, src3, src4, src5, src6, src7;
311
+ __m256i sumu, delu, sumd, deld, SumL, DelL, DelR, SumR;
312
+ __m256i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
313
+ __m256i tmp0;
314
+ DUP4_ARG2(__lasx_xvld,
315
+ pDct, 0,
316
+ pDct, 32,
317
+ pDct, 64,
318
+ pDct, 96,
319
+ src0, src2, src4, src6);
320
+ DUP4_ARG3(__lasx_xvpermi_q,
321
+ src0, src0, 0x31,
322
+ src2, src2, 0x31,
323
+ src4, src4, 0x31,
324
+ src6, src6, 0x31,
325
+ src1, src3, src5, src7);
326
+ LASX_TRANSPOSE8x8_H(src0, src1, src2, src3, src4, src5, src6, src7,
327
+ src0, src1, src2, src3, src4, src5, src6, src7);
328
+ sumu = __lasx_xvadd_h(src0, src2);
329
+ delu = __lasx_xvsub_h(src0, src2);
330
+ tmp0 = __lasx_xvsrai_h(src3, 1);
331
+ sumd = __lasx_xvadd_h(src1, tmp0);
332
+ tmp0 = __lasx_xvsrai_h(src1, 1);
333
+ deld = __lasx_xvsub_h(tmp0, src3);
334
+ src0 = __lasx_xvadd_h(sumu, sumd);
335
+ src1 = __lasx_xvadd_h(delu, deld);
336
+ src2 = __lasx_xvsub_h(delu, deld);
337
+ src3 = __lasx_xvsub_h(sumu, sumd);
338
+ sumu = __lasx_xvadd_h(src4, src6);
339
+ delu = __lasx_xvsub_h(src4, src6);
340
+ tmp0 = __lasx_xvsrai_h(src7, 1);
341
+ sumd = __lasx_xvadd_h(src5, tmp0);
342
+ tmp0 = __lasx_xvsrai_h(src5, 1);
343
+ deld = __lasx_xvsub_h(tmp0, src7);
344
+ src4 = __lasx_xvadd_h(sumu, sumd);
345
+ src5 = __lasx_xvadd_h(delu, deld);
346
+ src6 = __lasx_xvsub_h(delu, deld);
347
+ src7 = __lasx_xvsub_h(sumu, sumd);
348
+ LASX_TRANSPOSE8x8_H(src0, src1, src2, src3, src4, src5, src6, src7,
349
+ src0, src1, src2, src3, src4, src5, src6, src7);
350
+ src0 = __lasx_xvpermi_q(src2, src0, 0x20);
351
+ src1 = __lasx_xvpermi_q(src3, src1, 0x20);
352
+ src4 = __lasx_xvpermi_q(src6, src4, 0x20);
353
+ src5 = __lasx_xvpermi_q(src7, src5, 0x20);
354
+ SumL = __lasx_xvadd_h(src0, src1);
355
+ DelL = __lasx_xvsub_h(src0, src1);
356
+ tmp0 = __lasx_xvsrai_h(src0, 1);
357
+ DelR = __lasx_xvsub_h(tmp0, src1);
358
+ tmp0 = __lasx_xvsrai_h(src1, 1);
359
+ SumR = __lasx_xvadd_h(src0, tmp0);
360
+ SumR = __lasx_xvbsrl_v(SumR, 8);
361
+ DelR = __lasx_xvbsrl_v(DelR, 8);
362
+ src0 = __lasx_xvadd_h(SumL, SumR);
363
+ src1 = __lasx_xvadd_h(DelL, DelR);
364
+ src2 = __lasx_xvsub_h(DelL, DelR);
365
+ src3 = __lasx_xvsub_h(SumL, SumR);
366
+ SumL = __lasx_xvadd_h(src4, src5);
367
+ DelL = __lasx_xvsub_h(src4, src5);
368
+ tmp0 = __lasx_xvsrai_h(src4, 1);
369
+ DelR = __lasx_xvsub_h(tmp0, src5);
370
+ tmp0 = __lasx_xvsrai_h(src5, 1);
371
+ SumR = __lasx_xvadd_h(src4, tmp0);
372
+ SumR = __lasx_xvbsrl_v(SumR, 8);
373
+ DelR = __lasx_xvbsrl_v(DelR, 8);
374
+ src4 = __lasx_xvadd_h(SumL, SumR);
375
+ src5 = __lasx_xvadd_h(DelL, DelR);
376
+ src6 = __lasx_xvsub_h(DelL, DelR);
377
+ src7 = __lasx_xvsub_h(SumL, SumR);
378
+ DUP4_ARG2(__lasx_xvsrari_h,
379
+ src0, 6,
380
+ src1, 6,
381
+ src2, 6,
382
+ src3, 6,
383
+ src0, src1, src2, src3);
384
+ DUP4_ARG2(__lasx_xvsrari_h,
385
+ src4, 6,
386
+ src5, 6,
387
+ src6, 6,
388
+ src7, 6,
389
+ src4, src5, src6, src7);
390
+ DUP4_ARG2(__lasx_xvpermi_d,
391
+ src0, 0xd8,
392
+ src1, 0xd8,
393
+ src2, 0xd8,
394
+ src3, 0xd8,
395
+ src0, src1, src2, src3);
396
+ DUP4_ARG2(__lasx_xvpermi_d,
397
+ src4, 0xd8,
398
+ src5, 0xd8,
399
+ src6, 0xd8,
400
+ src7, 0xd8,
401
+ src4, src5, src6, src7);
402
+ DUP4_ARG2(__lasx_xvldx,
403
+ pPred, iPredStride*0,
404
+ pPred, iPredStride,
405
+ pPred, iPredStride*2,
406
+ pPred, iPredStride*3,
407
+ vec0, vec1, vec2, vec3);
408
+ pPred += iPredStride*4;
409
+ DUP4_ARG2(__lasx_xvldx,
410
+ pPred, iPredStride*0,
411
+ pPred, iPredStride,
412
+ pPred, iPredStride*2,
413
+ pPred, iPredStride*3,
414
+ vec4, vec5, vec6, vec7);
415
+ DUP4_ARG1(__lasx_vext2xv_hu_bu,
416
+ vec0, vec1, vec2, vec3,
417
+ vec0, vec1, vec2, vec3);
418
+ DUP4_ARG1(__lasx_vext2xv_hu_bu,
419
+ vec4, vec5, vec6, vec7,
420
+ vec4, vec5, vec6, vec7);
421
+ DUP4_ARG2(__lasx_xvsadd_h,
422
+ src0, vec0,
423
+ src1, vec1,
424
+ src2, vec2,
425
+ src3, vec3,
426
+ src0, src1, src2, src3);
427
+ DUP4_ARG2(__lasx_xvsadd_h,
428
+ src4, vec4,
429
+ src5, vec5,
430
+ src6, vec6,
431
+ src7, vec7,
432
+ src4, src5, src6, src7);
433
+ DUP4_ARG1(__lasx_xvclip255_h,
434
+ src0, src1, src2, src3,
435
+ src0, src1, src2, src3);
436
+ DUP4_ARG1(__lasx_xvclip255_h,
437
+ src4, src5, src6, src7,
438
+ src4, src5, src6, src7);
439
+ DUP4_ARG2(__lasx_xvpickev_b,
440
+ src1, src0, src3, src2,
441
+ src5, src4, src7, src6,
442
+ src0, src2, src4, src6);
443
+ __lasx_xvstelm_d(src0, pRec, 0, 0);
444
+ __lasx_xvstelm_d(src0, pRec + iStride, 0, 1);
445
+ __lasx_xvstelm_d(src2, pRec + iStride*2, 0, 0);
446
+ __lasx_xvstelm_d(src2, pRec + iStride*3, 0, 1);
447
+ pRec += iStride*4;
448
+ __lasx_xvstelm_d(src4, pRec, 0, 0);
449
+ __lasx_xvstelm_d(src4, pRec + iStride, 0, 1);
450
+ __lasx_xvstelm_d(src6, pRec + iStride*2, 0, 0);
451
+ __lasx_xvstelm_d(src6, pRec + iStride*3, 0, 1);
452
+ }
@@ -0,0 +1,166 @@
1
+ /*!
2
+ **********************************************************************************
3
+ * Copyright (c) 2022 Loongson Technology Corporation Limited
4
+ * Contributed by Lu Wang <wanglu@loongson.cn>
5
+ *
6
+ * \copy
7
+ * Copyright (c) 2009-2013, Cisco Systems
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ *
14
+ * * Redistributions of source code must retain the above copyright
15
+ * notice, this list of conditions and the following disclaimer.
16
+ *
17
+ * * Redistributions in binary form must reproduce the above copyright
18
+ * notice, this list of conditions and the following disclaimer in
19
+ * the documentation and/or other materials provided with the
20
+ * distribution.
21
+ *
22
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ * POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ *
36
+ * \file get_intra_predictor_lsx.c
37
+ *
38
+ * \brief Loongson optimization
39
+ *
40
+ * \date 03/03/2022 Created
41
+ *
42
+ *************************************************************************************
43
+ */
44
+ #include <stdint.h>
45
+ #include "loongson_intrinsics.h"
46
+
47
+ void WelsI16x16LumaPredPlane_lsx (uint8_t* pPred, uint8_t* pRef,
48
+ const int32_t kiStride) {
49
+ int32_t iLTshift = 0, iTopshift = 0;
50
+ int32_t iLeftshift = 0, iTopSum = 0, iLeftSum = 0;
51
+ int32_t i, j;
52
+ uint8_t* pTop = &pRef[-kiStride];
53
+ uint8_t* pLeft = &pRef[-1];
54
+ int32_t iPredStride = 16;
55
+ int32_t kiStride_x2 = kiStride << 1;
56
+ int32_t kiStride_x3 = kiStride_x2 + kiStride;
57
+ int32_t kiStride_x4 = kiStride << 2;
58
+ int32_t kiStride_x5 = kiStride_x4 + kiStride;
59
+ int32_t kiStride_x6 = kiStride_x4 + kiStride_x2;
60
+ int32_t kiStride_x7 = kiStride_x4 + kiStride_x3;
61
+ int32_t kiStride_x8 = kiStride << 3;
62
+
63
+ __m128i q0, q1, q2, q3, q4, q5, q6, q7, p0, p1, p2;
64
+ __m128i q0_l, q1_l, q2_l, q3_l, q4_l, q5_l, q6_l, q7_l, p0_l, p1_l;
65
+ __m128i TopSum, LeftSum, sum, sum0, sum1, uiTmp, uiTmp0, uiTmp1;
66
+ __m128i iLTshift_vec, iLeftshift_vec, iLeftshift_vec0;
67
+ __m128i iTopshift_vec, iTopshift_vec0, iTopshift_vec1;
68
+ __m128i tmp, flags, num;
69
+ __m128i zero = __lsx_vldi(0);
70
+ __m128i i_vec = {0x0004000300020001, 0x0008000700060005};
71
+ __m128i shuf = {0x0001020304050607, 0x0f0e0d0c0b0a0908};
72
+ __m128i not_255 = {0xff00ff00ff00ff00, 0xff00ff00ff00ff00};
73
+ __m128i sixteen = {0x10001000100010, 0x10001000100010};
74
+ __m128i t0 = {0xfffcfffbfffafff9, 0x0000fffffffefffd};
75
+ __m128i t1 = {0x0004000300020001, 0x0008000700060005};
76
+
77
+ DUP2_ARG2(__lsx_vldx, pTop, 8, pTop, -1, p0, p1);
78
+ p1 = __lsx_vshuf_b(p1, p1, shuf);
79
+ DUP2_ARG2(__lsx_vilvl_b, zero, p0, zero, p1, p0_l, p1_l);
80
+
81
+ p2 = __lsx_vsub_h(p0_l, p1_l);
82
+ TopSum = __lsx_vmul_h(i_vec, p2);
83
+ tmp = __lsx_vbsrl_v(TopSum, 8);
84
+ TopSum = __lsx_vadd_h(TopSum, tmp);
85
+ tmp = __lsx_vbsrl_v(TopSum, 4);
86
+ TopSum = __lsx_vadd_h(TopSum, tmp);
87
+ tmp = __lsx_vbsrl_v(TopSum, 2);
88
+ TopSum = __lsx_vadd_h(TopSum, tmp);
89
+ iTopSum = __lsx_vpickve2gr_h(TopSum, 0);
90
+
91
+ pLeft += kiStride_x7;
92
+ DUP4_ARG2(__lsx_vldx, pLeft, kiStride, pLeft, kiStride_x2, pLeft, kiStride_x3,
93
+ pLeft, kiStride_x4, q0, q1, q2, q3);
94
+ DUP4_ARG2(__lsx_vldx, pLeft, kiStride_x5, pLeft, kiStride_x6, pLeft, kiStride_x7,
95
+ pLeft, kiStride_x8, q4, q5, q6, q7);
96
+ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3,
97
+ q0_l, q1_l, q2_l, q3_l);
98
+ DUP4_ARG2(__lsx_vilvl_b, zero, q4, zero, q5, zero, q6, zero, q7,
99
+ q4_l, q5_l, q6_l, q7_l);
100
+ LSX_TRANSPOSE8x8_H(q0_l, q1_l, q2_l, q3_l, q4_l, q5_l, q6_l, q7_l,
101
+ p0, q1, q2, q3, q4, q5, q6, q7);
102
+
103
+ DUP4_ARG2(__lsx_vldx, pLeft, -kiStride, pLeft, -kiStride_x2, pLeft, -kiStride_x3,
104
+ pLeft, -kiStride_x4, q0, q1, q2, q3);
105
+ DUP4_ARG2(__lsx_vldx, pLeft, -kiStride_x5, pLeft, -kiStride_x6, pLeft, -kiStride_x7,
106
+ pLeft, -kiStride_x8, q4, q5, q6, q7);
107
+ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3,
108
+ q0_l, q1_l, q2_l, q3_l);
109
+ DUP4_ARG2(__lsx_vilvl_b, zero, q4, zero, q5, zero, q6, zero, q7,
110
+ q4_l, q5_l, q6_l, q7_l);
111
+ LSX_TRANSPOSE8x8_H(q0_l, q1_l, q2_l, q3_l, q4_l, q5_l, q6_l, q7_l,
112
+ q0, q1, q2, q3, q4, q5, q6, q7);
113
+
114
+ q1 = __lsx_vsub_h(p0, q0);
115
+ LeftSum = __lsx_vmul_h(i_vec, q1);
116
+ tmp = __lsx_vbsrl_v(LeftSum, 8);
117
+ LeftSum = __lsx_vadd_h(LeftSum, tmp);
118
+ tmp = __lsx_vbsrl_v(LeftSum, 4);
119
+ LeftSum = __lsx_vadd_h(LeftSum, tmp);
120
+ tmp = __lsx_vbsrl_v(LeftSum, 2);
121
+ LeftSum = __lsx_vadd_h(LeftSum, tmp);
122
+ iLeftSum = __lsx_vpickve2gr_h(LeftSum, 0);
123
+
124
+ iLTshift = (pLeft[kiStride_x8] + pTop[15]) << 4;
125
+ iTopshift = ((iTopSum << 2) + iTopSum + 32) >> 6;
126
+ iLeftshift = ((iLeftSum << 2) + iLeftSum + 32) >> 6;
127
+
128
+ DUP2_ARG1(__lsx_vreplgr2vr_h, iLTshift, iTopshift,
129
+ iLTshift_vec, iTopshift_vec);
130
+ iLeftshift_vec = __lsx_vreplgr2vr_h(iLeftshift);
131
+
132
+ DUP2_ARG2(__lsx_vmul_h, iTopshift_vec, t0, iTopshift_vec, t1,
133
+ iTopshift_vec0, iTopshift_vec1);
134
+ DUP2_ARG2(__lsx_vadd_h, iLTshift_vec, iTopshift_vec0, sum0, sixteen, sum0, sum0);
135
+ DUP2_ARG2(__lsx_vadd_h, iLTshift_vec, iTopshift_vec1, sum1, sixteen, sum1, sum1);
136
+
137
+ for (i = 0; i < 16; i++) {
138
+ j = i - 7;
139
+ num = __lsx_vreplgr2vr_h(j);
140
+ iLeftshift_vec0 = __lsx_vmul_h(iLeftshift_vec, num);
141
+
142
+ sum = __lsx_vadd_h(sum0, iLeftshift_vec0);
143
+ sum = __lsx_vsrai_h(sum, 5);
144
+ flags = __lsx_vand_v(sum, not_255);
145
+ flags = __lsx_vseq_h(flags, zero);
146
+ tmp = __lsx_vslt_h(zero, sum);
147
+ uiTmp = __lsx_vand_v(flags, sum);
148
+ flags = __lsx_vnor_v(flags, flags);
149
+ tmp = __lsx_vand_v(flags, tmp);
150
+ uiTmp0 = __lsx_vadd_h(uiTmp, tmp);
151
+
152
+ sum = __lsx_vadd_h(sum1, iLeftshift_vec0);
153
+ sum = __lsx_vsrai_h(sum, 5);
154
+ flags = __lsx_vand_v(sum, not_255);
155
+ flags = __lsx_vseq_h(flags, zero);
156
+ tmp = __lsx_vslt_h(zero, sum);
157
+ uiTmp = __lsx_vand_v(flags, sum);
158
+ flags = __lsx_vnor_v(flags, flags);
159
+ tmp = __lsx_vand_v(flags, tmp);
160
+ uiTmp1 = __lsx_vadd_h(uiTmp, tmp);
161
+
162
+ uiTmp = __lsx_vpickev_b(uiTmp1, uiTmp0);
163
+ __lsx_vst(uiTmp, pPred, 0);
164
+ pPred += iPredStride;
165
+ }
166
+ }