@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,735 @@
1
+ /*!
2
+ * \copy
3
+ * Copyright (c) 2013, 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
+
33
+ #ifdef HAVE_NEON
34
+ #include "arm_arch_common_macro.S"
35
+
36
+
37
+ //The data sequence will be used
38
+ .macro GET_8BYTE_DATA_L0 arg0, arg1, arg2
39
+ vld1.8 {\arg0[0]}, [\arg1], \arg2
40
+ vld1.8 {\arg0[1]}, [\arg1], \arg2
41
+ vld1.8 {\arg0[2]}, [\arg1], \arg2
42
+ vld1.8 {\arg0[3]}, [\arg1], \arg2
43
+ vld1.8 {\arg0[4]}, [\arg1], \arg2
44
+ vld1.8 {\arg0[5]}, [\arg1], \arg2
45
+ vld1.8 {\arg0[6]}, [\arg1], \arg2
46
+ vld1.8 {\arg0[7]}, [\arg1], \arg2
47
+ .endm
48
+
49
+ .macro HDM_TRANSFORM_4X4_L0 arg0, arg1, arg2,arg3, arg4, arg5, arg6, arg7, arg8
50
+
51
+ //Do the vertical transform
52
+ vaddl.u8 q0, \arg0, \arg1 //{0,4,8,12,1,5,9,13}
53
+ vsubl.u8 q1, \arg0, \arg1 //{2,6,10,14,3,7,11,15}
54
+ vswp d1, d2
55
+ vadd.s16 q2, q0, q1 //{0,1,2,3,4,5,6,7}
56
+ vsub.s16 q1, q0, q1 //{12,13,14,15,8,9,10,11}
57
+
58
+ //Do the horizontal transform
59
+ vtrn.32 q2, q1
60
+ vadd.s16 q0, q2, q1
61
+ vsub.s16 q1, q2, q1
62
+
63
+ vtrn.16 q0, q1
64
+ vadd.s16 q2, q0, q1
65
+ vsub.s16 q1, q0, q1
66
+
67
+ vmov.s16 d0, d4
68
+ vmov.s16 d1, d2
69
+
70
+ vabs.s16 d3, d3
71
+
72
+ //16x16_v
73
+ vtrn.32 d0, d1 //{0,1,3,2}
74
+ vaba.s16 \arg5, d0, \arg2 //16x16_v
75
+ vaba.s16 \arg5, d1, \arg8
76
+ vaba.s16 \arg5, d5, \arg8
77
+ vadd.u16 \arg5, d3
78
+
79
+ //16x16_h
80
+ vtrn.16 d4, d5 //{0,4,12,8}
81
+ vaba.s16 \arg6, d4, \arg3 //16x16_h
82
+ vabs.s16 d2, d2
83
+ vabs.s16 d5, d5
84
+ vadd.u16 d2, d3
85
+ vadd.u16 d2, d5
86
+ vadd.u16 \arg6, d2
87
+
88
+ //16x16_dc_both
89
+ vaba.s16 \arg7, d4, \arg4 //16x16_dc_both
90
+ vadd.u16 \arg7, d2
91
+ .endm
92
+
93
+ WELS_ASM_FUNC_BEGIN WelsIntra16x16Combined3Satd_neon
94
+ stmdb sp!, {r4-r7, lr}
95
+ vpush {q4-q7}
96
+
97
+ //Get the top line data to 'q15'(16 bytes)
98
+ sub r7, r0, r1
99
+ vld1.8 {q15}, [r7]
100
+
101
+ //Get the left colume data to 'q14' (16 bytes)
102
+ sub r7, r0, #1
103
+ GET_8BYTE_DATA_L0 d28, r7, r1
104
+ GET_8BYTE_DATA_L0 d29, r7, r1
105
+
106
+ //Calculate the mean value and save to 'q13->d27(reserve the d26)' (2 bytes)
107
+ //Calculate the 16x16_dc_both mode SATD
108
+ vaddl.u8 q0, d30, d31
109
+ vaddl.u8 q1, d28, d29
110
+ vadd.u16 q0, q1
111
+ vadd.u16 d0, d1
112
+ vpaddl.u16 d0, d0
113
+ vpaddl.u32 d0, d0
114
+
115
+ //Calculate the mean value
116
+ vrshr.u16 d0, #5
117
+ vshl.u16 d27, d0, #4
118
+
119
+
120
+ //Calculate the 16x16_v mode SATD and save to "q11, 12"
121
+ vshll.u8 q0, d30, #2
122
+ vshll.u8 q1, d31, #2
123
+ vtrn.32 q0, q1
124
+ vadd.s16 q2, q0, q1
125
+ vsub.s16 q1, q0, q1
126
+ vtrn.16 q2, q1
127
+ vadd.s16 q12, q2, q1
128
+ vsub.s16 q11, q2, q1
129
+ vtrn.32 q12, q11 //{0,1,3,2, 4,5,7,6} q12
130
+ //{8,9,11,10, 12,13,15,14} q11
131
+ //Calculate the 16x16_h mode SATD and save to "q9, q10"
132
+ vshll.u8 q0, d28, #2
133
+ vshll.u8 q1, d29, #2
134
+ vtrn.32 q0, q1
135
+ vadd.s16 q2, q0, q1
136
+ vsub.s16 q1, q0, q1
137
+ vtrn.16 q2, q1
138
+ vadd.s16 q10, q2, q1
139
+ vsub.s16 q9, q2, q1
140
+ vtrn.32 q10, q9 //{0,1,3,2, 4,5,7,6} q10
141
+ //{8,9,11,10, 12,13,15,14} q9
142
+
143
+ vmov.i32 d17, #0//Save the SATD of DC_BOTH
144
+ vmov.i32 d16, #0//Save the SATD of H
145
+ vmov.i32 d15, #0//Save the SATD of V
146
+ vmov.i32 d14, #0//For zero D register
147
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
148
+ vld1.32 {q3}, [r2], r3
149
+ vld1.32 {q4}, [r2], r3
150
+ vld1.32 {q5}, [r2], r3
151
+ vld1.32 {q6}, [r2], r3
152
+ vtrn.32 q3, q4
153
+ vtrn.32 q5, q6
154
+
155
+ HDM_TRANSFORM_4X4_L0 d6, d10, d24, d20, d27, d15, d16, d17, d14
156
+ HDM_TRANSFORM_4X4_L0 d7, d11, d22, d20, d27, d15, d16, d17, d14
157
+ HDM_TRANSFORM_4X4_L0 d8, d12, d25, d20, d27, d15, d16, d17, d14
158
+ HDM_TRANSFORM_4X4_L0 d9, d13, d23, d20, d27, d15, d16, d17, d14
159
+
160
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
161
+ vld1.32 {q3}, [r2], r3
162
+ vld1.32 {q4}, [r2], r3
163
+ vld1.32 {q5}, [r2], r3
164
+ vld1.32 {q6}, [r2], r3
165
+ vtrn.32 q3, q4
166
+ vtrn.32 q5, q6
167
+
168
+ HDM_TRANSFORM_4X4_L0 d6, d10, d24, d21, d27, d15, d16, d17, d14
169
+ HDM_TRANSFORM_4X4_L0 d7, d11, d22, d21, d27, d15, d16, d17, d14
170
+ HDM_TRANSFORM_4X4_L0 d8, d12, d25, d21, d27, d15, d16, d17, d14
171
+ HDM_TRANSFORM_4X4_L0 d9, d13, d23, d21, d27, d15, d16, d17, d14
172
+
173
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
174
+ vld1.32 {q3}, [r2], r3
175
+ vld1.32 {q4}, [r2], r3
176
+ vld1.32 {q5}, [r2], r3
177
+ vld1.32 {q6}, [r2], r3
178
+ vtrn.32 q3, q4
179
+ vtrn.32 q5, q6
180
+
181
+ HDM_TRANSFORM_4X4_L0 d6, d10, d24, d18, d27, d15, d16, d17, d14
182
+ HDM_TRANSFORM_4X4_L0 d7, d11, d22, d18, d27, d15, d16, d17, d14
183
+ HDM_TRANSFORM_4X4_L0 d8, d12, d25, d18, d27, d15, d16, d17, d14
184
+ HDM_TRANSFORM_4X4_L0 d9, d13, d23, d18, d27, d15, d16, d17, d14
185
+
186
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
187
+ vld1.32 {q3}, [r2], r3
188
+ vld1.32 {q4}, [r2], r3
189
+ vld1.32 {q5}, [r2], r3
190
+ vld1.32 {q6}, [r2], r3
191
+ vtrn.32 q3, q4
192
+ vtrn.32 q5, q6
193
+
194
+ HDM_TRANSFORM_4X4_L0 d6, d10, d24, d19, d27, d15, d16, d17, d14
195
+ HDM_TRANSFORM_4X4_L0 d7, d11, d22, d19, d27, d15, d16, d17, d14
196
+ HDM_TRANSFORM_4X4_L0 d8, d12, d25, d19, d27, d15, d16, d17, d14
197
+ HDM_TRANSFORM_4X4_L0 d9, d13, d23, d19, d27, d15, d16, d17, d14
198
+
199
+ //Get the data from stack
200
+ ldr r5, [sp, #84] //the addr of Best_mode
201
+ ldr r6, [sp, #88] //the value of i_lambda
202
+
203
+ //vadd.u16 d24, d25
204
+ vrshr.u16 d15, #1
205
+ vpaddl.u16 d15, d15
206
+ vpaddl.u32 d15, d15
207
+ vmov.u32 r0, d15[0]
208
+
209
+ //vadd.u16 d22, d23
210
+ vrshr.u16 d16, #1
211
+ vpaddl.u16 d16, d16
212
+ vpaddl.u32 d16, d16
213
+ vmov.u32 r1, d16[0]
214
+ add r1, r1, r6, lsl #1
215
+
216
+ //vadd.u16 d20, d21
217
+ vrshr.u16 d17, #1
218
+ vpaddl.u16 d17, d17
219
+ vpaddl.u32 d17, d17
220
+ vmov.u32 r2, d17[0]
221
+ add r2, r2, r6, lsl #1
222
+
223
+ mov r4, #0
224
+ cmp r1, r0
225
+ movcc r0, r1
226
+ movcc r4, #1
227
+ cmp r2, r0
228
+ movcc r0, r2
229
+ movcc r4, #2
230
+
231
+ str r4, [r5]
232
+
233
+ vpop {q4-q7}
234
+ ldmia sp!, {r4-r7, lr}
235
+ WELS_ASM_FUNC_END
236
+
237
+
238
+ WELS_ASM_FUNC_BEGIN WelsIntra16x16Combined3Sad_neon
239
+ stmdb sp!, {r4-r7, lr}
240
+
241
+ //Get the top line data to 'q15'(16 bytes)
242
+ sub r4, r0, r1
243
+ vld1.8 {q15}, [r4]
244
+
245
+ //Get the left colume data to 'q14' (16 bytes)
246
+ sub r4, r0, #1
247
+ GET_8BYTE_DATA_L0 d28, r4, r1
248
+ GET_8BYTE_DATA_L0 d29, r4, r1
249
+
250
+ //Calculate the mean value and save to 'q13' (8 bytes)
251
+ //Calculate the 16x16_dc_both mode SATD
252
+ vaddl.u8 q0, d30, d31
253
+ vaddl.u8 q1, d28, d29
254
+ vadd.u16 q0, q1
255
+ vadd.u16 d0, d1
256
+ vpaddl.u16 d0, d0
257
+ vpaddl.u32 d0, d0
258
+
259
+ //Calculate the mean value
260
+ vrshr.u16 d0, d0, #5
261
+ vdup.8 q13, d0[0]
262
+
263
+ sub r4, r0, #1
264
+
265
+ vmov.i32 q12, #0//Save the SATD of DC_BOTH
266
+ vmov.i32 q11, #0//Save the SATD of H
267
+ vmov.i32 q10, #0//Save the SATD of V
268
+
269
+ mov lr, #16
270
+ sad_intra_16x16_x3_opt_loop0:
271
+ //Get the left colume data to 'd0' (16 bytes)
272
+ vld1.8 {d0[]}, [r4], r1
273
+
274
+ //Load the p_enc data and save to "q1 ~ q2"--- 16X4 bytes
275
+ vld1.8 {q1}, [r2], r3
276
+
277
+ subs lr, #1
278
+ //Do the SAD for top colume
279
+ vabal.u8 q12, d30, d2
280
+ vabal.u8 q12, d31, d3
281
+
282
+ //Do the SAD for left colume
283
+ vabal.u8 q11, d0, d2
284
+ vabal.u8 q11, d0, d3
285
+
286
+ //Do the SAD for mean value
287
+ vabal.u8 q10, d26, d2
288
+ vabal.u8 q10, d26, d3
289
+
290
+ bne sad_intra_16x16_x3_opt_loop0
291
+
292
+ //Get the data from stack
293
+ ldr r5, [sp, #20] //the addr of Best_mode
294
+ ldr r6, [sp, #24] //the value of i_lambda
295
+
296
+ vadd.u16 d24, d25
297
+ vpaddl.u16 d24, d24
298
+ vpaddl.u32 d24, d24
299
+ vmov.u32 r0, d24[0]
300
+
301
+ vadd.u16 d22, d23
302
+ vpaddl.u16 d22, d22
303
+ vpaddl.u32 d22, d22
304
+ vmov.u32 r1, d22[0]
305
+ add r1, r1, r6, lsl #1
306
+
307
+ vadd.u16 d20, d21
308
+ vpaddl.u16 d20, d20
309
+ vpaddl.u32 d20, d20
310
+ vmov.u32 r2, d20[0]
311
+ add r2, r2, r6, lsl #1
312
+
313
+ mov r4, #0
314
+ cmp r1, r0
315
+ movcc r0, r1
316
+ movcc r4, #1
317
+ cmp r2, r0
318
+ movcc r0, r2
319
+ movcc r4, #2
320
+
321
+ str r4, [r5]
322
+
323
+ ldmia sp!, {r4-r7, lr}
324
+ WELS_ASM_FUNC_END
325
+
326
+
327
+ WELS_ASM_FUNC_BEGIN WelsIntra8x8Combined3Sad_neon
328
+ stmdb sp!, {r4-r7, lr}
329
+
330
+ //Get the data from stack
331
+ ldr r4, [sp, #32] //p_dec_cr
332
+ ldr r5, [sp, #36] //p_enc_cr
333
+
334
+ //Get the left colume data to 'd28(cb), d30(cr)' (16 bytes)
335
+ sub r6, r0, #1
336
+ GET_8BYTE_DATA_L0 d28, r6, r1
337
+ sub r6, r4, #1
338
+ GET_8BYTE_DATA_L0 d30, r6, r1
339
+
340
+ //Get the top line data to 'd29(cb), d31(cr)'(16 bytes)
341
+ sub r6, r0, r1
342
+ vld1.8 {d29}, [r6]
343
+ sub r6, r4, r1
344
+ vld1.8 {d31}, [r6]
345
+
346
+ //Calculate the sum of left column and top row
347
+ vmov.i32 q0, q14
348
+ vpaddl.u8 q0, q0
349
+ vpaddl.u16 q0, q0
350
+ vadd.u32 d2, d0, d1 //'m1' save to d2
351
+ vrshr.u32 q0, q0, #2 //calculate 'm2','m3'
352
+ vrshr.u32 d2, d2, #3 //calculate 'm4'
353
+
354
+ //duplicate the 'mx' to a vector line
355
+ vdup.8 d27, d2[0]
356
+ vdup.8 d26, d1[4]
357
+ vtrn.32 d27, d26
358
+
359
+ vdup.8 d26, d0[4]
360
+ vdup.8 d25, d2[4]
361
+ vtrn.32 d26, d25 //Save to "d27, d26"
362
+
363
+ vmov.i32 q0, q15
364
+ vpaddl.u8 q0, q0
365
+ vpaddl.u16 q0, q0
366
+ vadd.u32 d2, d0, d1 //'m1' save to d2
367
+ vrshr.u32 q0, q0, #2 //calculate 'm2','m3'
368
+ vrshr.u32 d2, d2, #3 //calculate 'm4'
369
+
370
+ //duplicate the 'mx' to a vector line
371
+ vdup.8 d25, d2[0]
372
+ vdup.8 d24, d1[4]
373
+ vtrn.32 d25, d24
374
+
375
+ vdup.8 d24, d0[4]
376
+ vdup.8 d23, d2[4]
377
+ vtrn.32 d24, d23 //Save to "d25, d24"
378
+
379
+ vmov.i32 q11, #0//Save the SATD of DC_BOTH
380
+ vmov.i32 q10, #0//Save the SATD of H
381
+ vmov.i32 q9 , #0//Save the SATD of V
382
+ sub r6, r0, #1
383
+ sub r7, r4, #1
384
+ mov lr, #4
385
+ sad_intra_8x8_x3_opt_loop0:
386
+
387
+ //Load the p_enc data and save to "q1 ~ q2"--- 16X4 bytes
388
+ vld1.8 {d0}, [r2], r3
389
+ vld1.8 {d1}, [r5], r3
390
+
391
+ //Get the left colume data to 'd0' (16 bytes)
392
+ vld1.8 {d2[]}, [r6], r1
393
+ vld1.8 {d3[]}, [r7], r1
394
+
395
+ subs lr, #1
396
+
397
+
398
+ //Do the SAD for top colume
399
+ vabal.u8 q11, d29, d0
400
+ vabal.u8 q11, d31, d1
401
+
402
+ //Do the SAD for left colume
403
+ vabal.u8 q10, d2, d0
404
+ vabal.u8 q10, d3, d1
405
+
406
+ //Do the SAD for mean value
407
+ vabal.u8 q9, d27, d0
408
+ vabal.u8 q9, d25, d1
409
+
410
+
411
+ bne sad_intra_8x8_x3_opt_loop0
412
+
413
+ mov lr, #4
414
+ sad_intra_8x8_x3_opt_loop1:
415
+
416
+ //Load the p_enc data and save to "q1 ~ q2"--- 16X4 bytes
417
+ vld1.8 {d0}, [r2], r3
418
+ vld1.8 {d1}, [r5], r3
419
+
420
+ //Get the left colume data to 'd0' (16 bytes)
421
+ vld1.8 {d2[]}, [r6], r1
422
+ vld1.8 {d3[]}, [r7], r1
423
+
424
+ subs lr, #1
425
+
426
+
427
+ //Do the SAD for top colume
428
+ vabal.u8 q11, d29, d0
429
+ vabal.u8 q11, d31, d1
430
+
431
+ //Do the SAD for left colume
432
+ vabal.u8 q10, d2, d0
433
+ vabal.u8 q10, d3, d1
434
+
435
+ //Do the SAD for mean value
436
+ vabal.u8 q9, d26, d0
437
+ vabal.u8 q9, d24, d1
438
+
439
+
440
+ bne sad_intra_8x8_x3_opt_loop1
441
+ //Get the data from stack
442
+ ldr r5, [sp, #20] //the addr of Best_mode
443
+ ldr r6, [sp, #24] //the value of i_lambda
444
+
445
+ vadd.u16 d22, d23
446
+ vpaddl.u16 d22, d22
447
+ vpaddl.u32 d22, d22
448
+ vmov.u32 r0, d22[0]
449
+ add r0, r0, r6, lsl #1
450
+
451
+ vadd.u16 d20, d21
452
+ vpaddl.u16 d20, d20
453
+ vpaddl.u32 d20, d20
454
+ vmov.u32 r1, d20[0]
455
+ add r1, r1, r6, lsl #1
456
+
457
+ vadd.u16 d18, d19
458
+ vpaddl.u16 d18, d18
459
+ vpaddl.u32 d18, d18
460
+ vmov.u32 r2, d18[0]
461
+
462
+ mov r4, #2
463
+ cmp r1, r0
464
+ movcc r0, r1
465
+ movcc r4, #1
466
+ cmp r2, r0
467
+ movcc r0, r2
468
+ movcc r4, #0
469
+
470
+ str r4, [r5]
471
+
472
+ ldmia sp!, {r4-r7, lr}
473
+ WELS_ASM_FUNC_END
474
+
475
+
476
+ WELS_ASM_FUNC_BEGIN WelsIntra8x8Combined3Satd_neon
477
+ stmdb sp!, {r4-r7, lr}
478
+ vpush {q4-q7}
479
+
480
+ //Get the data from stack
481
+ ldr r4, [sp, #96] //p_dec_cr
482
+ ldr r5, [sp, #100] //p_enc_cr
483
+
484
+ //Get the top line data to 'd29(cb), d31(cr)'(16 bytes)
485
+ sub r6, r0, r1
486
+ vld1.8 {d29}, [r6]
487
+ sub r6, r4, r1
488
+ vld1.8 {d31}, [r6]
489
+
490
+ //Get the left colume data to 'd28(cb), d30(cr)' (16 bytes)
491
+ sub r6, r0, #1
492
+ GET_8BYTE_DATA_L0 d28, r6, r1
493
+ sub r6, r4, #1
494
+ GET_8BYTE_DATA_L0 d30, r6, r1
495
+
496
+ //Calculate the 16x16_v mode SATD and save to "q12, 13"
497
+ vshll.u8 q0, d29, #2
498
+ vshll.u8 q1, d31, #2
499
+ vtrn.32 q0, q1
500
+ vadd.s16 q2, q0, q1
501
+ vsub.s16 q1, q0, q1
502
+ vtrn.16 q2, q1
503
+ vadd.s16 q13, q2, q1
504
+ vsub.s16 q12, q2, q1
505
+ vtrn.32 q13, q12 //{0,1,3,2, 4,5,7,6} q13
506
+ //{8,9,11,10, 12,13,15,14} q12
507
+ //Calculate the 16x16_h mode SATD and save to "q10, q11"
508
+ vshll.u8 q0, d28, #2
509
+ vshll.u8 q1, d30, #2
510
+ vtrn.32 q0, q1
511
+ vadd.s16 q2, q0, q1
512
+ vsub.s16 q1, q0, q1
513
+ vtrn.16 q2, q1
514
+ vadd.s16 q11, q2, q1
515
+ vsub.s16 q10, q2, q1
516
+ vtrn.32 q11, q10 //{0,1,3,2, 4,5,7,6} q11
517
+ //{8,9,11,10, 12,13,15,14} q10
518
+
519
+ //Calculate the sum of left column and top row
520
+ //vmov.i32 q0, q14
521
+ vpaddl.u8 q0, q14
522
+ vpaddl.u16 q0, q0
523
+ vadd.u32 d2, d0, d1
524
+
525
+ vpaddl.u8 q2, q15
526
+ vpaddl.u16 q2, q2
527
+ vadd.u32 d3, d4, d5
528
+
529
+ vtrn.32 q0, q2
530
+ vrshr.u32 q1, #3
531
+ vrshr.u32 q2, #2
532
+ vshll.u32 q9, d4, #4 // {2cb, 2cr} q9
533
+ vshll.u32 q8, d5, #4 // {1cb, 1cr} q8
534
+ vshll.u32 q7, d2, #4 // {0cb, 3cb} q7
535
+ vshll.u32 q6, d3, #4 // {0cr, 3cr} q6
536
+
537
+
538
+ vmov.i32 d28, #0//Save the SATD of DC_BOTH
539
+ vmov.i32 d10, #0//Save the SATD of H
540
+ vmov.i32 d11, #0//Save the SATD of V
541
+ vmov.i32 d30, #0//For zero D register
542
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
543
+ vld1.32 {d6}, [r2], r3
544
+ vld1.32 {d7}, [r2], r3
545
+ vld1.32 {d8}, [r2], r3
546
+ vld1.32 {d9}, [r2], r3
547
+ vtrn.32 d6, d7
548
+ vtrn.32 d8, d9
549
+ HDM_TRANSFORM_4X4_L0 d6, d8, d26, d22, d14, d11, d10, d28, d30
550
+ HDM_TRANSFORM_4X4_L0 d7, d9, d27, d22, d16, d11, d10, d28, d30
551
+
552
+ vld1.32 {d6}, [r5], r3
553
+ vld1.32 {d7}, [r5], r3
554
+ vld1.32 {d8}, [r5], r3
555
+ vld1.32 {d9}, [r5], r3
556
+ vtrn.32 d6, d7
557
+ vtrn.32 d8, d9
558
+ HDM_TRANSFORM_4X4_L0 d6, d8, d24, d20, d12, d11, d10, d28, d30
559
+ HDM_TRANSFORM_4X4_L0 d7, d9, d25, d20, d17, d11, d10, d28, d30
560
+
561
+ //Load the p_enc data and save to "q3 ~ q6"--- 16X4 bytes
562
+ vld1.32 {d6}, [r2], r3
563
+ vld1.32 {d7}, [r2], r3
564
+ vld1.32 {d8}, [r2], r3
565
+ vld1.32 {d9}, [r2], r3
566
+ vtrn.32 d6, d7
567
+ vtrn.32 d8, d9
568
+ HDM_TRANSFORM_4X4_L0 d6, d8, d26, d23, d18, d11, d10, d28, d30
569
+ HDM_TRANSFORM_4X4_L0 d7, d9, d27, d23, d15, d11, d10, d28, d30
570
+
571
+ vld1.32 {d6}, [r5], r3
572
+ vld1.32 {d7}, [r5], r3
573
+ vld1.32 {d8}, [r5], r3
574
+ vld1.32 {d9}, [r5], r3
575
+ vtrn.32 d6, d7
576
+ vtrn.32 d8, d9
577
+ HDM_TRANSFORM_4X4_L0 d6, d8, d24, d21, d19, d11, d10, d28, d30
578
+ HDM_TRANSFORM_4X4_L0 d7, d9, d25, d21, d13, d11, d10, d28, d30
579
+
580
+ //Get the data from stack
581
+ ldr r5, [sp, #84] //the addr of Best_mode
582
+ ldr r6, [sp, #88] //the value of i_lambda
583
+
584
+ vrshr.u16 d11, #1
585
+ vpaddl.u16 d11, d11
586
+ vpaddl.u32 d11, d11
587
+ vmov.u32 lr, d11[0]
588
+ add lr, lr, r6, lsl #1
589
+
590
+ vrshr.u16 d10, #1
591
+ vpaddl.u16 d10, d10
592
+ vpaddl.u32 d10, d10
593
+ vmov.u32 r3, d10[0]
594
+ add r3, r3, r6, lsl #1
595
+
596
+ vrshr.u16 d28, #1
597
+ vpaddl.u16 d28, d28
598
+ vpaddl.u32 d28, d28
599
+ vmov.u32 r2, d28[0]
600
+
601
+ mov r6, #2
602
+ cmp r3, lr
603
+ movcc lr, r3
604
+ movcc r6, #1
605
+ cmp r2, lr
606
+ movcc lr, r2
607
+ movcc r6, #0
608
+
609
+ str r6, [r5]
610
+ mov r0, lr
611
+
612
+ vpop {q4-q7}
613
+ ldmia sp!, {r4-r7, lr}
614
+ WELS_ASM_FUNC_END
615
+
616
+
617
+ WELS_ASM_FUNC_BEGIN WelsIntra4x4Combined3Satd_neon
618
+ stmdb sp!, {r4-r7, lr}
619
+
620
+ //Get the top line data to 'd31[0~3]'(4 bytes)
621
+ sub r7, r0, r1
622
+ vld1.32 {d31[0]}, [r7]
623
+
624
+ //Get the left colume data to 'd31[4~7]' (4 bytes)
625
+ sub r7, r0, #1
626
+ vld1.8 {d31[4]}, [r7], r1
627
+ vld1.8 {d31[5]}, [r7], r1
628
+ vld1.8 {d31[6]}, [r7], r1
629
+ vld1.8 {d31[7]}, [r7], r1
630
+
631
+ //Calculate the mean value and save to 'd30' (2 bytes)
632
+ vpaddl.u8 d0, d31
633
+ vpaddl.u16 d0, d0
634
+ vpaddl.u32 d0, d0
635
+ //Calculate the mean value
636
+ vrshr.u16 d0, #3
637
+ vshl.u16 d30, d0, #4
638
+
639
+ //Calculate the 16x16_v mode SATD and save to "d29"
640
+ //Calculate the 16x16_h mode SATD and save to "d28"
641
+ vshll.u8 q0, d31, #2
642
+ vtrn.32 d0, d1
643
+ vadd.s16 d2, d0, d1
644
+ vsub.s16 d1, d0, d1
645
+ vtrn.16 d2, d1
646
+ vadd.s16 d29, d2, d1
647
+ vsub.s16 d28, d2, d1
648
+ vtrn.32 d29, d28 //{0,1,3,2 top} d29
649
+ //{0,1,3,2 left} d28
650
+
651
+ vmov.i32 d27, #0//Save the SATD of DC_BOTH
652
+ vmov.i32 d26, #0//Save the SATD of H
653
+ vmov.i32 d25, #0//Save the SATD of V
654
+ vmov.i32 d24, #0//For zero D register
655
+
656
+ //Load the p_enc data and save to "d22,d23"--- 4X4 bytes
657
+ vld1.32 {d23[0]}, [r2], r3
658
+ vld1.32 {d23[1]}, [r2], r3
659
+ vld1.32 {d22[0]}, [r2], r3
660
+ vld1.32 {d22[1]}, [r2], r3
661
+
662
+ HDM_TRANSFORM_4X4_L0 d23, d22, d29, d28, d30, d25, d26, d27, d24
663
+
664
+ //Get the data from stack
665
+ ldr r5, [sp, #28] //the value of lambda2
666
+ ldr r6, [sp, #32] //the value of lambda1
667
+ ldr r7, [sp, #36] //the value of lambda0
668
+
669
+ vrshr.u16 d25, #1
670
+ vpaddl.u16 d25, d25
671
+ vpaddl.u32 d25, d25
672
+ vmov.u32 r0, d25[0]
673
+ add r0, r7
674
+
675
+ vrshr.u16 d26, #1
676
+ vpaddl.u16 d26, d26
677
+ vpaddl.u32 d26, d26
678
+ vmov.u32 r1, d26[0]
679
+ add r1, r6
680
+
681
+ vrshr.u16 d27, #1
682
+ vpaddl.u16 d27, d27
683
+ vpaddl.u32 d27, d27
684
+ vmov.u32 r2, d27[0]
685
+ add r2, r5
686
+
687
+ ldr r5, [sp, #20] //p_dst
688
+ ldr r6, [sp, #24] //the addr of Best_mode
689
+
690
+ mov r4, r0
691
+ cmp r1, r4
692
+ movcc r4, r1
693
+ cmp r2, r4
694
+ movcc r4, r2
695
+
696
+ //The compare sequence affect the resule
697
+ cmp r4, r2
698
+ bne satd_intra_4x4_x3_opt_jump0
699
+ mov r0, #2
700
+ str r0, [r6]
701
+ vshr.u32 d0, d30, #4 // {2cb, 2cr} q9
702
+ vdup.8 q1, d0[0]
703
+ vst1.8 {q1}, [r5]
704
+ //...
705
+ bl satd_intra_4x4_x3_opt_end
706
+ satd_intra_4x4_x3_opt_jump0:
707
+
708
+ cmp r4, r1
709
+ bne satd_intra_4x4_x3_opt_jump1
710
+ mov r0, #1
711
+ str r0, [r6]
712
+ vdup.8 d0, d31[4]
713
+ vdup.8 d1, d31[5]
714
+ vdup.8 d2, d31[6]
715
+ vdup.8 d3, d31[7]
716
+ vst4.32 {d0[0],d1[0],d2[0],d3[0]}, [r5]
717
+
718
+ bl satd_intra_4x4_x3_opt_end
719
+ satd_intra_4x4_x3_opt_jump1:
720
+
721
+ mov r0, #0
722
+ str r0, [r6]
723
+ vst1.32 {d31[0]}, [r5]!
724
+ vst1.32 {d31[0]}, [r5]!
725
+ vst1.32 {d31[0]}, [r5]!
726
+ vst1.32 {d31[0]}, [r5]!
727
+
728
+
729
+ satd_intra_4x4_x3_opt_end:
730
+ mov r0, r4
731
+
732
+ ldmia sp!, {r4-r7, lr}
733
+ WELS_ASM_FUNC_END
734
+
735
+ #endif