@scrypted/libav 1.0.180 → 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 +3 -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,568 @@
1
+ /*!
2
+ * \copy
3
+ * Copyright (c) 2009-2018, 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 satd_sad_lasx.c
33
+ *
34
+ * \brief Loongson optimization
35
+ *
36
+ * \date 12/10/2021 Created
37
+ *
38
+ *************************************************************************************
39
+ */
40
+
41
+ #include <stdint.h>
42
+ #include "loongson_intrinsics.h"
43
+
44
+ #define HORISUM(in0, in1, out0) \
45
+ out0 = __lasx_xvabsd_bu(in0, in1); \
46
+ out0 = __lasx_xvhaddw_hu_bu(out0, out0); \
47
+ out0 = __lasx_xvhaddw_wu_hu(out0, out0); \
48
+ out0 = __lasx_xvhaddw_du_wu(out0, out0); \
49
+
50
+ int32_t WelsSampleSad4x4_lasx (uint8_t* pSample1, int32_t iStride1,
51
+ uint8_t* pSample2, int32_t iStride2) {
52
+ uint8_t *pSrc1 = pSample1;
53
+ uint8_t *pSrc2 = pSample2;
54
+ int32_t iStride0 = 0;
55
+ int32_t iStride1_tmp = iStride1 << 1;
56
+ int32_t iStride2_tmp = iStride2 << 1;
57
+
58
+ __m256i src1_0, src1_1, src1_2, src1_3;
59
+ __m256i src2_0, src2_1, src2_2, src2_3;
60
+
61
+ DUP4_ARG2(__lasx_xvldx,
62
+ pSrc1, iStride0,
63
+ pSrc1, iStride1,
64
+ pSrc1, iStride1_tmp,
65
+ pSrc1, iStride1_tmp + iStride1,
66
+ src1_0, src1_1, src1_2, src1_3);
67
+ DUP4_ARG2(__lasx_xvldx,
68
+ pSrc2, iStride0,
69
+ pSrc2, iStride2,
70
+ pSrc2, iStride2_tmp,
71
+ pSrc2, iStride2_tmp + iStride2,
72
+ src2_0, src2_1, src2_2, src2_3);
73
+
74
+ DUP2_ARG2(__lasx_xvpackev_w,
75
+ src1_0, src1_1, src1_2, src1_3,
76
+ src1_0, src1_2);
77
+ DUP2_ARG2(__lasx_xvpackev_w,
78
+ src2_0, src2_1, src2_2, src2_3,
79
+ src2_0, src2_2);
80
+ DUP2_ARG2(__lasx_xvpackev_d,
81
+ src1_0, src1_2, src2_0, src2_2,
82
+ src1_0, src2_0);
83
+
84
+ HORISUM(src1_0, src2_0, src1_0);
85
+
86
+ src1_0 = __lasx_xvhaddw_qu_du(src1_0, src1_0);
87
+
88
+ return __lasx_xvpickve2gr_d(src1_0, 0);
89
+ }
90
+
91
+ static inline
92
+ int32_t WelsSampleSad8x8x2_lasx (uint8_t* pSample1, int32_t iStride1,
93
+ uint8_t* pSample2, int32_t iStride2) {
94
+ uint8_t* pSrc1 = pSample1;
95
+ uint8_t* pSrc2 = pSample2;
96
+ int32_t iStride0 = 0;
97
+ int32_t iStride1_tmp2 = iStride1 << 1;
98
+ int32_t iStride1_tmp3 = iStride1_tmp2 + iStride1;
99
+ int32_t iStride1_tmp4 = iStride1 << 2;
100
+ int32_t iStride1_tmp5 = iStride1_tmp4 + iStride1;
101
+ int32_t iStride1_tmp6 = iStride1_tmp5 + iStride1;
102
+ int32_t iStride1_tmp7 = iStride1_tmp6 + iStride1;
103
+ int32_t iStride2_tmp2 = iStride2 << 1;
104
+ int32_t iStride2_tmp3 = iStride2_tmp2 + iStride2;
105
+ int32_t iStride2_tmp4 = iStride2 << 2;
106
+ int32_t iStride2_tmp5 = iStride2_tmp4 + iStride2;
107
+ int32_t iStride2_tmp6 = iStride2_tmp5 + iStride2;
108
+ int32_t iStride2_tmp7 = iStride2_tmp6 + iStride2;
109
+
110
+ __m256i src1_0, src1_1, src1_2, src1_3,
111
+ src1_4, src1_5, src1_6, src1_7;
112
+ __m256i src2_0, src2_1, src2_2, src2_3,
113
+ src2_4, src2_5, src2_6, src2_7;
114
+ DUP4_ARG2(__lasx_xvldx,
115
+ pSrc1, iStride0,
116
+ pSrc1, iStride1,
117
+ pSrc1, iStride1_tmp2,
118
+ pSrc1, iStride1_tmp3,
119
+ src1_0, src1_1, src1_2, src1_3);
120
+ DUP4_ARG2(__lasx_xvldx,
121
+ pSrc1, iStride1_tmp4,
122
+ pSrc1, iStride1_tmp5,
123
+ pSrc1, iStride1_tmp6,
124
+ pSrc1, iStride1_tmp7,
125
+ src1_4, src1_5, src1_6, src1_7);
126
+ DUP4_ARG2(__lasx_xvldx,
127
+ pSrc2, iStride0,
128
+ pSrc2, iStride2,
129
+ pSrc2, iStride2_tmp2,
130
+ pSrc2, iStride2_tmp3,
131
+ src2_0, src2_1, src2_2, src2_3);
132
+ DUP4_ARG2(__lasx_xvldx,
133
+ pSrc2, iStride2_tmp4,
134
+ pSrc2, iStride2_tmp5,
135
+ pSrc2, iStride2_tmp6,
136
+ pSrc2, iStride2_tmp7,
137
+ src2_4, src2_5, src2_6, src2_7);
138
+ DUP4_ARG3(__lasx_xvpermi_q,
139
+ src1_0, src1_1, 0x20,
140
+ src1_2, src1_3, 0x20,
141
+ src1_4, src1_5, 0x20,
142
+ src1_6, src1_7, 0x20,
143
+ src1_0, src1_2, src1_4, src1_6);
144
+ DUP4_ARG3(__lasx_xvpermi_q,
145
+ src2_0, src2_1, 0x20,
146
+ src2_2, src2_3, 0x20,
147
+ src2_4, src2_5, 0x20,
148
+ src2_6, src2_7, 0x20,
149
+ src2_0, src2_2, src2_4, src2_6);
150
+ src1_0 = __lasx_xvabsd_bu(src1_0, src2_0);
151
+ src1_2 = __lasx_xvabsd_bu(src1_2, src2_2);
152
+ src1_4 = __lasx_xvabsd_bu(src1_4, src2_4);
153
+ src1_6 = __lasx_xvabsd_bu(src1_6, src2_6);
154
+ src1_0 = __lasx_xvhaddw_hu_bu(src1_0, src1_0);
155
+ src1_2 = __lasx_xvhaddw_hu_bu(src1_2, src1_2);
156
+ src1_4 = __lasx_xvhaddw_hu_bu(src1_4, src1_4);
157
+ src1_6 = __lasx_xvhaddw_hu_bu(src1_6, src1_6);
158
+ src1_0 = __lasx_xvadd_h(src1_0, src1_2);
159
+ src1_0 = __lasx_xvadd_h(src1_0, src1_4);
160
+ src1_0 = __lasx_xvadd_h(src1_0, src1_6);
161
+ src1_0 = __lasx_xvhaddw_wu_hu(src1_0, src1_0);
162
+ src1_0 = __lasx_xvhaddw_du_wu(src1_0, src1_0);
163
+ src1_0 = __lasx_xvhaddw_qu_du(src1_0, src1_0);
164
+ return (__lasx_xvpickve2gr_w(src1_0, 0) +
165
+ __lasx_xvpickve2gr_w(src1_0, 4));
166
+ }
167
+
168
+ int32_t WelsSampleSad8x8_lasx (uint8_t* pSample1, int32_t iStride1,
169
+ uint8_t* pSample2, int32_t iStride2) {
170
+ uint8_t* pSrc1 = pSample1;
171
+ uint8_t* pSrc2 = pSample2;
172
+ int32_t iStride0 = 0;
173
+ int32_t iStride1_tmp2 = iStride1 << 1;
174
+ int32_t iStride1_tmp3 = iStride1_tmp2 + iStride1;
175
+ int32_t iStride1_tmp4 = iStride1 << 2;
176
+ int32_t iStride1_tmp5 = iStride1_tmp4 + iStride1;
177
+ int32_t iStride1_tmp6 = iStride1_tmp5 + iStride1;
178
+ int32_t iStride1_tmp7 = iStride1_tmp6 + iStride1;
179
+ int32_t iStride2_tmp2 = iStride2 << 1;
180
+ int32_t iStride2_tmp3 = iStride2_tmp2 + iStride2;
181
+ int32_t iStride2_tmp4 = iStride2 << 2;
182
+ int32_t iStride2_tmp5 = iStride2_tmp4 + iStride2;
183
+ int32_t iStride2_tmp6 = iStride2_tmp5 + iStride2;
184
+ int32_t iStride2_tmp7 = iStride2_tmp6 + iStride2;
185
+
186
+ __m256i src1_0, src1_1, src1_2, src1_3,
187
+ src1_4, src1_5, src1_6, src1_7;
188
+ __m256i src2_0, src2_1, src2_2, src2_3,
189
+ src2_4, src2_5, src2_6, src2_7;
190
+
191
+ DUP4_ARG2(__lasx_xvldx,
192
+ pSrc1, iStride0,
193
+ pSrc1, iStride1,
194
+ pSrc1, iStride1_tmp2,
195
+ pSrc1, iStride1_tmp3,
196
+ src1_0, src1_1, src1_2, src1_3);
197
+ DUP4_ARG2(__lasx_xvldx,
198
+ pSrc1, iStride1_tmp4,
199
+ pSrc1, iStride1_tmp5,
200
+ pSrc1, iStride1_tmp6,
201
+ pSrc1, iStride1_tmp7,
202
+ src1_4, src1_5, src1_6, src1_7);
203
+ DUP4_ARG2(__lasx_xvldx,
204
+ pSrc2, iStride0,
205
+ pSrc2, iStride2,
206
+ pSrc2, iStride2_tmp2,
207
+ pSrc2, iStride2_tmp3,
208
+ src2_0, src2_1, src2_2, src2_3);
209
+ DUP4_ARG2(__lasx_xvldx,
210
+ pSrc2, iStride2_tmp4,
211
+ pSrc2, iStride2_tmp5,
212
+ pSrc2, iStride2_tmp6,
213
+ pSrc2, iStride2_tmp7,
214
+ src2_4, src2_5, src2_6, src2_7);
215
+
216
+ DUP4_ARG2(__lasx_xvpackev_d,
217
+ src1_0, src1_1, src1_2, src1_3,
218
+ src1_4, src1_5, src1_6, src1_7,
219
+ src1_0, src1_2, src1_4, src1_6);
220
+ DUP2_ARG3(__lasx_xvpermi_q,
221
+ src1_0, src1_2, 0x20,
222
+ src1_4, src1_6, 0x20,
223
+ src1_0, src1_4);
224
+ DUP4_ARG2(__lasx_xvpackev_d,
225
+ src2_0, src2_1, src2_2, src2_3,
226
+ src2_4, src2_5, src2_6, src2_7,
227
+ src2_0, src2_2, src2_4, src2_6);
228
+ DUP2_ARG3(__lasx_xvpermi_q,
229
+ src2_0, src2_2, 0x20,
230
+ src2_4, src2_6, 0x20,
231
+ src2_0, src2_4);
232
+
233
+ HORISUM(src1_0, src2_0, src1_0);
234
+ HORISUM(src1_4, src2_4, src1_4);
235
+
236
+ src1_0 = __lasx_xvadd_d(src1_0, src1_4);
237
+ src1_0 = __lasx_xvhaddw_qu_du(src1_0, src1_0);
238
+
239
+ return (__lasx_xvpickve2gr_d(src1_0, 0) +
240
+ __lasx_xvpickve2gr_d(src1_0, 2));
241
+ }
242
+
243
+ int32_t WelsSampleSatd4x4_lasx (uint8_t* pSample1, int32_t iStride1,
244
+ uint8_t* pSample2, int32_t iStride2) {
245
+ int32_t iSatdSum;
246
+ uint8_t* pSrc1 = pSample1;
247
+ uint8_t* pSrc2 = pSample2;
248
+ int32_t iStride0 = 0;
249
+ int32_t iStride1_tmp = iStride1 << 1;
250
+ int32_t iStride2_tmp = iStride2 << 1;
251
+
252
+ __m256i src1_0, src1_1, src1_2, src1_3;
253
+ __m256i src2_0, src2_1, src2_2, src2_3;
254
+ __m256i iSample01, iSample23;
255
+ __m256i tmp0, tmp1, tmp2, tmp3;
256
+ __m256i zero = __lasx_xvldi(0);
257
+ v16i16 mask= {1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6};
258
+
259
+ DUP4_ARG2(__lasx_xvldx,
260
+ pSrc1, iStride0,
261
+ pSrc1, iStride1,
262
+ pSrc1, iStride1_tmp,
263
+ pSrc1, iStride1_tmp + iStride1,
264
+ src1_0, src1_1, src1_2, src1_3);
265
+ DUP4_ARG2(__lasx_xvldx,
266
+ pSrc2, iStride0,
267
+ pSrc2, iStride2,
268
+ pSrc2, iStride2_tmp,
269
+ pSrc2, iStride2_tmp + iStride2,
270
+ src2_0, src2_1, src2_2, src2_3);
271
+ DUP4_ARG2(__lasx_xvpackev_w,
272
+ src1_0, src1_1,
273
+ src1_2, src1_3,
274
+ src2_0, src2_1,
275
+ src2_2, src2_3,
276
+ src1_0, src1_2, src2_0, src2_2);
277
+ DUP2_ARG2(__lasx_xvpackev_d,
278
+ src1_0, src1_2,
279
+ src2_0, src2_2,
280
+ src1_0, src2_0);
281
+
282
+ tmp0 = __lasx_xvsubwev_h_bu(src1_0, src2_0);
283
+ tmp1 = __lasx_xvsubwod_h_bu(src1_0, src2_0);
284
+ tmp2 = __lasx_xvilvl_w(tmp0, tmp1);
285
+ tmp3 = __lasx_xvilvh_w(tmp0, tmp1);
286
+ tmp0 = __lasx_xvpermi_q(tmp3, tmp2, 0x20);
287
+ tmp0 = __lasx_xvshuf_h((__m256i)mask, tmp0, tmp0);
288
+
289
+ iSample01 = __lasx_xvhaddw_w_h(tmp0, tmp0);
290
+ iSample23 = __lasx_xvhsubw_w_h(tmp0, tmp0);
291
+ tmp0 = __lasx_xvhaddw_d_w(iSample01, iSample01);
292
+ tmp1 = __lasx_xvhaddw_d_w(iSample23, iSample23);
293
+ tmp2 = __lasx_xvhsubw_d_w(iSample23, iSample23);
294
+ tmp3 = __lasx_xvhsubw_d_w(iSample01, iSample01);
295
+
296
+ tmp1 = __lasx_xvpackev_w(tmp1, tmp0);
297
+ tmp3 = __lasx_xvpackev_w(tmp3, tmp2);
298
+ tmp0 = __lasx_xvpermi_q(tmp3, tmp1, 0x20);
299
+ tmp2 = __lasx_xvpermi_q(tmp3, tmp1, 0x31);
300
+ tmp0 = __lasx_xvpermi_w(tmp0, tmp0, 0x72);
301
+ tmp2 = __lasx_xvpermi_w(tmp2, tmp2, 0x72);
302
+
303
+ iSample01 = __lasx_xvadd_w(tmp0, tmp2);
304
+ iSample23 = __lasx_xvsub_w(tmp0, tmp2);
305
+
306
+ tmp0 = __lasx_xvhaddw_d_w(iSample01, iSample01);
307
+ tmp1 = __lasx_xvhaddw_d_w(iSample23, iSample23);
308
+ tmp2 = __lasx_xvhsubw_d_w(iSample23, iSample23);
309
+ tmp3 = __lasx_xvhsubw_d_w(iSample01, iSample01);
310
+
311
+ tmp0 = __lasx_xvpackev_w(tmp0, tmp1);
312
+ tmp2 = __lasx_xvpackev_w(tmp2, tmp3);
313
+
314
+ tmp0 = __lasx_xvabsd_w(tmp0, zero);
315
+ tmp2 = __lasx_xvabsd_w(tmp2, zero);
316
+ tmp0 = __lasx_xvadd_w(tmp0, tmp2);
317
+ tmp0 = __lasx_xvhaddw_d_w(tmp0, tmp0);
318
+ tmp0 = __lasx_xvhaddw_q_d(tmp0, tmp0);
319
+
320
+ iSatdSum = __lasx_xvpickve2gr_d(tmp0, 0) +
321
+ __lasx_xvpickve2gr_d(tmp0, 2);
322
+
323
+ return ((iSatdSum + 1) >> 1);
324
+ }
325
+
326
+ int32_t WelsSampleSad16x8_lasx (uint8_t* pSample1, int32_t iStride1,
327
+ uint8_t* pSample2, int32_t iStride2) {
328
+
329
+ return WelsSampleSad8x8x2_lasx (pSample1, iStride1,
330
+ pSample2, iStride2);
331
+ }
332
+
333
+ int32_t WelsSampleSad8x16_lasx (uint8_t* pSample1, int32_t iStride1,
334
+ uint8_t* pSample2, int32_t iStride2) {
335
+ int32_t iSadSum = 0;
336
+
337
+ iSadSum += WelsSampleSad8x8_lasx (pSample1, iStride1,
338
+ pSample2, iStride2);
339
+ iSadSum += WelsSampleSad8x8_lasx (pSample1 + (iStride1 << 3), iStride1,
340
+ pSample2 + (iStride2 << 3), iStride2);
341
+ return iSadSum;
342
+ }
343
+
344
+ int32_t WelsSampleSad16x16_lasx (uint8_t* pSample1, int32_t iStride1,
345
+ uint8_t* pSample2, int32_t iStride2) {
346
+ int32_t iSadSum = 0;
347
+
348
+ iSadSum += WelsSampleSad8x8x2_lasx (pSample1, iStride1,
349
+ pSample2, iStride2);
350
+ iSadSum += WelsSampleSad8x8x2_lasx (pSample1 + (iStride1 << 3), iStride1,
351
+ pSample2 + (iStride2 << 3), iStride2);
352
+ return iSadSum;
353
+ }
354
+
355
+ void WelsSampleSadFour4x4_lasx (uint8_t* iSample1, int32_t iStride1,
356
+ uint8_t* iSample2, int32_t iStride2,
357
+ int32_t* pSad) {
358
+ uint8_t *pSrc1 = iSample1;
359
+ uint8_t *pSrc2 = iSample2 - iStride2;
360
+ uint8_t *pSrc3 = iSample2 + iStride2;
361
+ uint8_t *pSrc4 = iSample2 - 1;
362
+ uint8_t *pSrc5 = iSample2 + 1;
363
+ int32_t iStride0 = 0;
364
+ int32_t iStride1_tmp = iStride1 << 1;
365
+ int32_t iStride2_tmp = iStride2 << 1;
366
+
367
+ __m256i src1_0, src1_1, src1_2, src1_3;
368
+ __m256i src2_0, src2_1, src2_2, src2_3;
369
+ __m256i cb0, cb1, cb2, cb3, cb4, cb5, cb6, cb7;
370
+
371
+ DUP4_ARG2(__lasx_xvldx,
372
+ pSrc1, iStride0,
373
+ pSrc1, iStride1,
374
+ pSrc1, iStride1_tmp,
375
+ pSrc1, iStride1_tmp + iStride1,
376
+ src1_0, src1_1, src1_2, src1_3);
377
+ DUP4_ARG2(__lasx_xvldx,
378
+ pSrc2, iStride0,
379
+ pSrc2, iStride2,
380
+ pSrc2, iStride2_tmp,
381
+ pSrc2, iStride2_tmp + iStride2,
382
+ src2_0, src2_1, src2_2, src2_3);
383
+ DUP4_ARG2(__lasx_xvpackev_w,
384
+ src1_0, src1_1, src1_2, src1_3,
385
+ src2_0, src2_1, src2_2, src2_3,
386
+ src1_0, src1_2, src2_0, src2_2);
387
+ DUP2_ARG2(__lasx_xvpackev_d,
388
+ src1_0, src1_2, src2_0, src2_2,
389
+ cb0, cb1); //16 16
390
+ DUP4_ARG2(__lasx_xvldx,
391
+ pSrc1, iStride0,
392
+ pSrc1, iStride1,
393
+ pSrc1, iStride1_tmp,
394
+ pSrc1, iStride1_tmp + iStride1,
395
+ src1_0, src1_1, src1_2, src1_3);
396
+ DUP4_ARG2(__lasx_xvldx,
397
+ pSrc3, iStride0,
398
+ pSrc3, iStride2,
399
+ pSrc3, iStride2_tmp,
400
+ pSrc3, iStride2_tmp + iStride2,
401
+ src2_0, src2_1, src2_2, src2_3);
402
+ DUP4_ARG2(__lasx_xvpackev_w,
403
+ src1_0, src1_1, src1_2, src1_3,
404
+ src2_0, src2_1, src2_2, src2_3,
405
+ src1_0, src1_2, src2_0, src2_2);
406
+ DUP2_ARG2(__lasx_xvpackev_d,
407
+ src1_0, src1_2, src2_0, src2_2,
408
+ cb2, cb3); //16 16
409
+ DUP4_ARG2(__lasx_xvldx,
410
+ pSrc1, iStride0,
411
+ pSrc1, iStride1,
412
+ pSrc1, iStride1_tmp,
413
+ pSrc1, iStride1_tmp + iStride1,
414
+ src1_0, src1_1, src1_2, src1_3);
415
+ DUP4_ARG2(__lasx_xvldx,
416
+ pSrc4, iStride0,
417
+ pSrc4, iStride2,
418
+ pSrc4, iStride2_tmp,
419
+ pSrc4, iStride2_tmp + iStride2,
420
+ src2_0, src2_1, src2_2, src2_3);
421
+ DUP4_ARG2(__lasx_xvpackev_w,
422
+ src1_0, src1_1, src1_2, src1_3,
423
+ src2_0, src2_1, src2_2, src2_3,
424
+ src1_0, src1_2, src2_0, src2_2);
425
+ DUP2_ARG2(__lasx_xvpackev_d,
426
+ src1_0, src1_2, src2_0, src2_2,
427
+ cb4, cb5); //16 16
428
+ DUP4_ARG2(__lasx_xvldx,
429
+ pSrc1, iStride0,
430
+ pSrc1, iStride1,
431
+ pSrc1, iStride1_tmp,
432
+ pSrc1, iStride1_tmp + iStride1,
433
+ src1_0, src1_1, src1_2, src1_3);
434
+ DUP4_ARG2(__lasx_xvldx,
435
+ pSrc5, iStride0,
436
+ pSrc5, iStride2,
437
+ pSrc5, iStride2_tmp,
438
+ pSrc5, iStride2_tmp + iStride2,
439
+ src2_0, src2_1, src2_2, src2_3);
440
+ DUP4_ARG2(__lasx_xvpackev_w,
441
+ src1_0, src1_1, src1_2, src1_3,
442
+ src2_0, src2_1, src2_2, src2_3,
443
+ src1_0, src1_2, src2_0, src2_2);
444
+ DUP2_ARG2(__lasx_xvpackev_d,
445
+ src1_0, src1_2, src2_0, src2_2,
446
+ cb6, cb7); //16 16
447
+
448
+ cb0 = __lasx_xvpermi_q(cb2, cb0, 0x20);
449
+ cb1 = __lasx_xvpermi_q(cb3, cb1, 0x20);
450
+ cb4 = __lasx_xvpermi_q(cb6, cb4, 0x20);
451
+ cb5 = __lasx_xvpermi_q(cb7, cb5, 0x20);
452
+
453
+ HORISUM(cb0, cb1, cb0);
454
+ HORISUM(cb4, cb5, cb4);
455
+
456
+ DUP2_ARG2(__lasx_xvhaddw_qu_du,
457
+ cb0, cb0, cb4, cb4,
458
+ cb0, cb4);
459
+
460
+ * (pSad) = __lasx_xvpickve2gr_d(cb0, 0);
461
+ * (pSad + 1) = __lasx_xvpickve2gr_d(cb0, 2);
462
+ * (pSad + 2) = __lasx_xvpickve2gr_d(cb4, 0);
463
+ * (pSad + 3) = __lasx_xvpickve2gr_d(cb4, 2);
464
+ }
465
+
466
+ void WelsSampleSadFour8x8_lasx (uint8_t* iSample1, int32_t iStride1,
467
+ uint8_t* iSample2, int32_t iStride2,
468
+ int32_t* pSad) {
469
+ * (pSad) = WelsSampleSad8x8_lasx (iSample1, iStride1,
470
+ (iSample2 - iStride2), iStride2);
471
+ * (pSad + 1) = WelsSampleSad8x8_lasx (iSample1, iStride1,
472
+ (iSample2 + iStride2), iStride2);
473
+ * (pSad + 2) = WelsSampleSad8x8_lasx (iSample1, iStride1,
474
+ (iSample2 - 1), iStride2);
475
+ * (pSad + 3) = WelsSampleSad8x8_lasx (iSample1, iStride1,
476
+ (iSample2 + 1), iStride2);
477
+ }
478
+
479
+ void WelsSampleSadFour8x16_lasx (uint8_t* iSample1, int32_t iStride1,
480
+ uint8_t* iSample2, int32_t iStride2,
481
+ int32_t* pSad) {
482
+ * (pSad) = WelsSampleSad8x16_lasx (iSample1, iStride1,
483
+ (iSample2 - iStride2), iStride2);
484
+ * (pSad + 1) = WelsSampleSad8x16_lasx (iSample1, iStride1,
485
+ (iSample2 + iStride2), iStride2);
486
+ * (pSad + 2) = WelsSampleSad8x16_lasx (iSample1, iStride1,
487
+ (iSample2 - 1), iStride2);
488
+ * (pSad + 3) = WelsSampleSad8x16_lasx (iSample1, iStride1,
489
+ (iSample2 + 1), iStride2);
490
+ }
491
+
492
+ void WelsSampleSadFour16x8_lasx (uint8_t* iSample1, int32_t iStride1,
493
+ uint8_t* iSample2, int32_t iStride2,
494
+ int32_t* pSad) {
495
+ * (pSad) = WelsSampleSad16x8_lasx (iSample1, iStride1,
496
+ (iSample2 - iStride2), iStride2);
497
+ * (pSad + 1) = WelsSampleSad16x8_lasx (iSample1, iStride1,
498
+ (iSample2 + iStride2), iStride2);
499
+ * (pSad + 2) = WelsSampleSad16x8_lasx (iSample1, iStride1,
500
+ (iSample2 - 1), iStride2);
501
+ * (pSad + 3) = WelsSampleSad16x8_lasx (iSample1, iStride1,
502
+ (iSample2 + 1), iStride2);
503
+ }
504
+
505
+ void WelsSampleSadFour16x16_lasx (uint8_t* iSample1, int32_t iStride1,
506
+ uint8_t* iSample2, int32_t iStride2,
507
+ int32_t* pSad) {
508
+ * (pSad) = WelsSampleSad16x16_lasx (iSample1, iStride1,
509
+ (iSample2 - iStride2), iStride2);
510
+ * (pSad + 1) = WelsSampleSad16x16_lasx (iSample1, iStride1,
511
+ (iSample2 + iStride2), iStride2);
512
+ * (pSad + 2) = WelsSampleSad16x16_lasx (iSample1, iStride1,
513
+ (iSample2 - 1), iStride2);
514
+ * (pSad + 3) = WelsSampleSad16x16_lasx (iSample1, iStride1,
515
+ (iSample2 + 1), iStride2);
516
+ }
517
+
518
+ int32_t WelsSampleSatd8x8_lasx (uint8_t* pSample1, int32_t iStride1,
519
+ uint8_t* pSample2, int32_t iStride2) {
520
+ int32_t iSatdSum = 0;
521
+
522
+ iSatdSum += WelsSampleSatd4x4_lasx (pSample1, iStride1,
523
+ pSample2, iStride2);
524
+ iSatdSum += WelsSampleSatd4x4_lasx (pSample1 + 4, iStride1,
525
+ pSample2 + 4, iStride2);
526
+ iSatdSum += WelsSampleSatd4x4_lasx (pSample1 + (iStride1 << 2), iStride1,
527
+ pSample2 + (iStride2 << 2), iStride2);
528
+ iSatdSum += WelsSampleSatd4x4_lasx (pSample1 + (iStride1 << 2) + 4, iStride1,
529
+ pSample2 + (iStride2 << 2) + 4, iStride2);
530
+ return iSatdSum;
531
+ }
532
+
533
+ int32_t WelsSampleSatd16x8_lasx (uint8_t* pSample1, int32_t iStride1,
534
+ uint8_t* pSample2, int32_t iStride2) {
535
+ int32_t iSatdSum = 0;
536
+
537
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1, iStride1,
538
+ pSample2, iStride2);
539
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1 + 8, iStride1,
540
+ pSample2 + 8, iStride2);
541
+ return iSatdSum;
542
+ }
543
+
544
+ int32_t WelsSampleSatd8x16_lasx (uint8_t* pSample1, int32_t iStride1,
545
+ uint8_t* pSample2, int32_t iStride2) {
546
+ int32_t iSatdSum = 0;
547
+
548
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1, iStride1,
549
+ pSample2, iStride2);
550
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1 + (iStride1 << 3), iStride1,
551
+ pSample2 + (iStride2 << 3), iStride2);
552
+ return iSatdSum;
553
+ }
554
+
555
+ int32_t WelsSampleSatd16x16_lasx (uint8_t* pSample1, int32_t iStride1,
556
+ uint8_t* pSample2, int32_t iStride2) {
557
+ int32_t iSatdSum = 0;
558
+
559
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1, iStride1,
560
+ pSample2, iStride2);
561
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1 + 8, iStride1,
562
+ pSample2 + 8, iStride2);
563
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1 + (iStride1 << 3), iStride1,
564
+ pSample2 + (iStride2 << 3), iStride2);
565
+ iSatdSum += WelsSampleSatd8x8_lasx (pSample1 + (iStride1 << 3) + 8, iStride1,
566
+ pSample2 + (iStride2 << 3) + 8, iStride2);
567
+ return iSatdSum;
568
+ }
@@ -0,0 +1,84 @@
1
+ cpp_sources = [
2
+ 'src/common_tables.cpp',
3
+ 'src/copy_mb.cpp',
4
+ 'src/cpu.cpp',
5
+ 'src/crt_util_safe_x.cpp',
6
+ 'src/deblocking_common.cpp',
7
+ 'src/expand_pic.cpp',
8
+ 'src/intra_pred_common.cpp',
9
+ 'src/mc.cpp',
10
+ 'src/memory_align.cpp',
11
+ 'src/sad_common.cpp',
12
+ 'src/utils.cpp',
13
+ 'src/welsCodecTrace.cpp',
14
+ 'src/WelsTaskThread.cpp',
15
+ 'src/WelsThread.cpp',
16
+ 'src/WelsThreadLib.cpp',
17
+ 'src/WelsThreadPool.cpp',
18
+ ]
19
+
20
+ objs_asm = []
21
+ if cpu_family in ['x86', 'x86_64']
22
+ asm_sources = [
23
+ 'x86/cpuid.asm',
24
+ 'x86/dct.asm',
25
+ 'x86/deblock.asm',
26
+ 'x86/expand_picture.asm',
27
+ 'x86/intra_pred_com.asm',
28
+ 'x86/mb_copy.asm',
29
+ 'x86/mc_chroma.asm',
30
+ 'x86/mc_luma.asm',
31
+ 'x86/satd_sad.asm',
32
+ 'x86/vaa.asm',
33
+ ]
34
+ objs_asm += asm_gen.process(asm_sources)
35
+ elif cpu_family == 'arm'
36
+ asm_sources = [
37
+ 'arm/copy_mb_neon.S',
38
+ 'arm/deblocking_neon.S',
39
+ 'arm/expand_picture_neon.S',
40
+ 'arm/intra_pred_common_neon.S',
41
+ 'arm/mc_neon.S',
42
+ ]
43
+ if use_asm_gen
44
+ objs_asm = asm_gen.process(asm_sources)
45
+ else
46
+ cpp_sources += asm_sources
47
+ endif
48
+ elif cpu_family == 'aarch64'
49
+ asm_sources = [
50
+ 'arm64/copy_mb_aarch64_neon.S',
51
+ 'arm64/deblocking_aarch64_neon.S',
52
+ 'arm64/expand_picture_aarch64_neon.S',
53
+ 'arm64/intra_pred_common_aarch64_neon.S',
54
+ 'arm64/mc_aarch64_neon.S',
55
+ ]
56
+ if use_asm_gen
57
+ objs_asm = asm_gen.process(asm_sources)
58
+ else
59
+ cpp_sources += asm_sources
60
+ endif
61
+ elif cpu_family in ['loongarch32', 'loongarch64']
62
+ asm_sources = [
63
+ 'loongarch/copy_mb_lsx.c',
64
+ 'loongarch/deblock_lsx.c',
65
+ 'loongarch/intra_pred_com_lsx.c',
66
+ 'loongarch/intra_pred_com_lasx.c',
67
+ 'loongarch/mc_chroma_lsx.c',
68
+ 'loongarch/mc_horver_lsx.c',
69
+ 'loongarch/satd_sad_lasx.c',
70
+ ]
71
+ cpp_sources += asm_sources
72
+ elif cpu_family == 'riscv64'
73
+ asm_sources = []
74
+ elif cpu_family == 'ppc'
75
+ asm_sources = []
76
+ elif cpu_family == 'ppc64'
77
+ asm_sources = []
78
+ else
79
+ error('Unsupported cpu_family @0@'.format(cpu_family))
80
+ endif
81
+
82
+ libcommon = static_library('common', cpp_sources, objs_asm,
83
+ include_directories: [inc, casm_inc],
84
+ dependencies: deps)