@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,903 @@
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
+ .macro LOAD_4x4_DATA_FOR_DCT arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
37
+ // { // input: \arg0~\arg3, src1*, src1_stride, src2*, src2_stride
38
+ vld2.16 {\arg0[0],\arg1[0]}, [\arg4], \arg5
39
+ vld2.16 {\arg2[0],\arg3[0]}, [\arg6], \arg7
40
+ vld2.16 {\arg0[1],\arg1[1]}, [\arg4], \arg5
41
+ vld2.16 {\arg2[1],\arg3[1]}, [\arg6], \arg7
42
+
43
+ vld2.16 {\arg0[2],\arg1[2]}, [\arg4], \arg5
44
+ vld2.16 {\arg2[2],\arg3[2]}, [\arg6], \arg7
45
+ vld2.16 {\arg0[3],\arg1[3]}, [\arg4], \arg5
46
+ vld2.16 {\arg2[3],\arg3[3]}, [\arg6], \arg7
47
+ // }
48
+ .endm
49
+
50
+ .macro LOAD_8x8_DATA_FOR_DCT arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
51
+ // { // input: \arg0~\arg3, src1*, src2*; untouched r2:src1_stride &r4:src2_stride
52
+ vld1.64 {\arg0}, [\arg8], r2
53
+ vld1.64 {\arg4}, [\arg9], r4
54
+ vld1.64 {\arg1}, [\arg8], r2
55
+ vld1.64 {\arg5}, [\arg9], r4
56
+
57
+ vld1.64 {\arg2}, [\arg8], r2
58
+ vld1.64 {\arg6}, [\arg9], r4
59
+ vld1.64 {\arg3}, [\arg8], r2
60
+ vld1.64 {\arg7}, [\arg9], r4
61
+ // }
62
+ .endm
63
+
64
+ .macro DCT_ROW_TRANSFORM_TOTAL_16BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
65
+ // { // input: src_d[0]~[3], working: [4]~[7]
66
+ vadd.s16 \arg4, \arg0, \arg3 //int16 s[0] = data[i] + data[i3];
67
+ vsub.s16 \arg7, \arg0, \arg3 //int16 s[3] = data[i] - data[i3];
68
+ vadd.s16 \arg5, \arg1, \arg2 //int16 s[1] = data[i1] + data[i2];
69
+ vsub.s16 \arg6, \arg1, \arg2 //int16 s[2] = data[i1] - data[i2];
70
+
71
+ vadd.s16 \arg0, \arg4, \arg5 //int16 dct[i ] = s[0] + s[1];
72
+ vsub.s16 \arg2, \arg4, \arg5 //int16 dct[i2] = s[0] - s[1];
73
+ vshl.s16 \arg1, \arg7, #1
74
+ vshl.s16 \arg3, \arg6, #1
75
+ vadd.s16 \arg1, \arg1, \arg6 //int16 dct[i1] = (s[3] << 1) + s[2];
76
+ vsub.s16 \arg3, \arg7, \arg3 //int16 dct[i3] = s[3] - (s[2] << 1);
77
+ // }
78
+ .endm
79
+
80
+ .macro MATRIX_TRANSFORM_EACH_16BITS arg0, arg1, arg2, arg3
81
+ // { // input & output: src_d[0]~[3];[0 1 2 3]+[4 5 6 7]+[8 9 10 11]+[12 13 14 15]
82
+ vtrn.s16 \arg0, \arg1 //[0 1 2 3]+[4 5 6 7]-->[0 4 2 6]+[1 5 3 7]
83
+ vtrn.s16 \arg2, \arg3 //[8 9 10 11]+[12 13 14 15]-->[8 12 10 14]+[9 13 11 15]
84
+ vtrn.32 \arg0, \arg2 //[0 4 2 6]+[8 12 10 14]-->[0 4 8 12]+[2 6 10 14]
85
+ vtrn.32 \arg1, \arg3 //[1 5 3 7]+[9 13 11 15]-->[1 5 9 13]+[3 7 11 15]
86
+ // }
87
+ .endm
88
+
89
+ .macro NEWQUANT_COEF_EACH_16BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
90
+ // { // input: coef, ff (dst), ff_d0, ff_d1, mf_d0, md_d1
91
+ veor.s16 \arg6, \arg6 // init 0 , and keep 0;
92
+ vaba.s16 \arg1, \arg0, \arg6 // f + abs(coef - 0)
93
+ vmull.s16 \arg7, \arg2, \arg4
94
+ vmull.s16 \arg8, \arg3, \arg5
95
+ vshr.s32 \arg7, #16
96
+ vshr.s32 \arg8, #16
97
+ vmovn.s32 \arg2, \arg7
98
+ vmovn.s32 \arg3, \arg8
99
+
100
+ vcgt.s16 \arg7, \arg0, #0 // if true, location of coef == 11111111
101
+ vbif.s16 \arg6, \arg1, \arg7 // if (x<0) reserved part; else keep 0 untouched
102
+ vshl.s16 \arg6, #1
103
+ vsub.s16 \arg1, \arg1, \arg6 // if x > 0, -= 0; else x-= 2x
104
+ // }
105
+ .endm
106
+
107
+ .macro NEWQUANT_COEF_EACH_16BITS_MAX arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
108
+ // { // input: coef, ff (dst), ff_d0, ff_d1, mf_d0(max), md_d1
109
+ veor.s16 \arg6, \arg6 // init 0 , and keep 0;
110
+ vaba.s16 \arg1, \arg0, \arg6 // f + abs(coef - 0)
111
+ vmull.s16 \arg7, \arg2, \arg4
112
+ vmull.s16 \arg8, \arg3, \arg5
113
+ vshr.s32 \arg7, #16
114
+ vshr.s32 \arg8, #16
115
+ vmovn.s32 \arg2, \arg7
116
+ vmovn.s32 \arg3, \arg8
117
+
118
+ vcgt.s16 \arg7, \arg0, #0 // if true, location of coef == 11111111
119
+ vbif.s16 \arg6, \arg1, \arg7 // if (x<0) reserved part; else keep 0 untouched
120
+ vshl.s16 \arg6, #1
121
+ vmax.s16 \arg9, \arg2, \arg3
122
+ vsub.s16 \arg1, \arg1, \arg6 // if x > 0, -= 0; else x-= 2x
123
+ // }
124
+ .endm
125
+
126
+ .macro QUANT_DUALWORD_COEF_EACH_16BITS arg0, arg1, arg2, arg3, arg4
127
+ // { // input: coef, ff (dst), mf , working_d (all 0), working_q
128
+ vaba.s16 \arg1, \arg0, \arg3 // f + abs(coef - 0)
129
+ vmull.s16 \arg4, \arg1, \arg2 // *= mf
130
+ vshr.s32 \arg4, #16
131
+ vmovn.s32 \arg1, \arg4 // >> 16
132
+
133
+ vcgt.s16 \arg2, \arg0, #0 // if true, location of coef == 11111111
134
+ vbif.s16 \arg3, \arg1, \arg2 // if (x<0) reserved part; else keep 0 untouched
135
+ vshl.s16 \arg3, #1
136
+ vsub.s16 \arg1, \arg1, \arg3 // if x > 0, -= 0; else x-= 2x
137
+ // }
138
+ .endm
139
+
140
+ .macro DC_ZERO_COUNT_IN_DUALWORD arg0, arg1, arg2
141
+ // { // input: coef, dst_d, working_d (all 0x01)
142
+ vceq.s16 \arg1, \arg0, #0
143
+ vand.s16 \arg1, \arg2
144
+ vpadd.s16 \arg1, \arg1, \arg1
145
+ vpadd.s16 \arg1, \arg1, \arg1
146
+ // }
147
+ .endm
148
+
149
+ .macro SELECT_MAX_IN_ABS_COEF arg0, arg1, arg2, arg3, arg4
150
+ // { // input: coef_0, coef_1, max_q (identy to follow two), output: max_d0, max_d1
151
+ vmax.s16 \arg2, \arg0, \arg1 // max 1st in \arg3 & max 2nd in \arg4
152
+ vpmax.s16 \arg3, \arg3, \arg4 // max 1st in \arg3[0][1] & max 2nd in \arg3[2][3]
153
+ vpmax.s16 \arg3, \arg3, \arg4 // max 1st in \arg3[0][1]
154
+ // }
155
+ .endm
156
+
157
+ .macro ZERO_COUNT_IN_2_QUARWORD arg0, arg1, arg2, arg3, arg4, arg5, arg6
158
+ // { // input: coef_0 (identy to \arg3 \arg4), coef_1(identy to \arg5 \arg6), mask_q
159
+ vceq.s16 \arg0, #0
160
+ vceq.s16 \arg1, #0
161
+ vand.s16 \arg0, \arg2
162
+ vand.s16 \arg1, \arg2
163
+
164
+ vpadd.s16 \arg3, \arg3, \arg5
165
+ vpadd.s16 \arg4, \arg4, \arg6
166
+ vpadd.s16 \arg3, \arg3, \arg4 // 8-->4
167
+ vpadd.s16 \arg3, \arg3, \arg3
168
+ vpadd.s16 \arg3, \arg3, \arg3
169
+ // }
170
+ .endm
171
+
172
+ .macro HDM_QUANT_2x2_TOTAL_16BITS arg0, arg1, arg2
173
+ // { // input: src_d[0]~[3], working_d, dst_d
174
+ vshr.s64 \arg1, \arg0, #32
175
+ vadd.s16 \arg2, \arg0, \arg1 // [0] = rs[0] + rs[32];[1] = rs[16] + rs[48];
176
+ vsub.s16 \arg1, \arg0, \arg1 // [0] = rs[0] - rs[32];[1] = rs[16] - rs[48];
177
+ vtrn.s16 \arg2, \arg1
178
+ vtrn.s32 \arg2, \arg1
179
+ // }
180
+ .endm
181
+
182
+ .macro IHDM_4x4_TOTAL_16BITS arg0, arg1, arg2
183
+ // { // input: each src_d[0]~[3](dst), working_q0, working_q1, working_q2
184
+ vshr.s64 \arg1, \arg0, #32
185
+ vadd.s16 \arg2, \arg0, \arg1 // [0] = rs[0] + rs[2];[1] = rs[1] + rs[3];
186
+ vsub.s16 \arg1, \arg0, \arg1 // [0] = rs[0] - rs[2];[1] = rs[1] - rs[3];
187
+ vtrn.s16 \arg2, \arg1
188
+ vrev32.16 \arg1, \arg1
189
+ vtrn.s32 \arg2, \arg1 // [0] = rs[0] + rs[2];[1] = rs[0] - rs[2];[2] = rs[1] - rs[3];[3] = rs[1] + rs[3];
190
+
191
+ vrev64.16 \arg1, \arg2
192
+ vadd.s16 \arg0, \arg2, \arg1 // [0] = rs[0] + rs[3];[1] = rs[1] + rs[2];
193
+ vsub.s16 \arg1, \arg2, \arg1
194
+ vrev32.16 \arg1, \arg1 // [0] = rs[1] - rs[2];[1] = rs[0] - rs[3];
195
+ vtrn.s32 \arg0, \arg1 // [0] = rs[0] + rs[3];[1] = rs[1] + rs[2];[2] = rs[1] - rs[2];[3] = rs[0] - rs[3];
196
+ // }
197
+ .endm
198
+
199
+ .macro MB_PRED_8BITS_ADD_DCT_16BITS_CLIP arg0, arg1, arg2, arg3, arg4, arg5
200
+ // { // input: pred_d[0]/[1](output), dct_q0/1, working_q0/1;
201
+ vmovl.u8 \arg4,\arg0
202
+ vmovl.u8 \arg5,\arg1
203
+ vadd.s16 \arg4,\arg2
204
+ vadd.s16 \arg5,\arg3
205
+ vqmovun.s16 \arg0,\arg4
206
+ vqmovun.s16 \arg1,\arg5
207
+ // }
208
+ .endm
209
+
210
+ .macro ROW_TRANSFORM_1_STEP_TOTAL_16BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
211
+ // { // input: src_d[0]~[3], output: e_d[0]~[3];
212
+ vadd.s16 \arg4, \arg0, \arg2 //int16 e[i][0] = src[0] + src[2];
213
+ vsub.s16 \arg5, \arg0, \arg2 //int16 e[i][1] = src[0] - src[2];
214
+ vshr.s16 \arg6, \arg1, #1
215
+ vshr.s16 \arg7, \arg3, #1
216
+ vsub.s16 \arg6, \arg6, \arg3 //int16 e[i][2] = (src[1]>>1)-src[3];
217
+ vadd.s16 \arg7, \arg1, \arg7 //int16 e[i][3] = src[1] + (src[3]>>1);
218
+ // }
219
+ .endm
220
+
221
+ .macro TRANSFORM_TOTAL_16BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 // both row & col transform used
222
+ // { // output: f_q[0]~[3], input: e_q[0]~[3];
223
+ vadd.s16 \arg0, \arg4, \arg7 //int16 f[i][0] = e[i][0] + e[i][3];
224
+ vadd.s16 \arg1, \arg5, \arg6 //int16 f[i][1] = e[i][1] + e[i][2];
225
+ vsub.s16 \arg2, \arg5, \arg6 //int16 f[i][2] = e[i][1] - e[i][2];
226
+ vsub.s16 \arg3, \arg4, \arg7 //int16 f[i][3] = e[i][0] - e[i][3];
227
+ // }
228
+ .endm
229
+
230
+
231
+ .macro ROW_TRANSFORM_0_STEP arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
232
+ // { // input: src_d[0]~[3], output: e_q[0]~[3];
233
+ vaddl.s16 \arg4, \arg0, \arg2 //int32 e[i][0] = src[0] + src[2];
234
+ vsubl.s16 \arg5, \arg0, \arg2 //int32 e[i][1] = src[0] - src[2];
235
+ vsubl.s16 \arg6, \arg1, \arg3 //int32 e[i][2] = src[1] - src[3];
236
+ vaddl.s16 \arg7, \arg1, \arg3 //int32 e[i][3] = src[1] + src[3];
237
+ // }
238
+ .endm
239
+
240
+ .macro ROW_TRANSFORM_1_STEP arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
241
+ // { // input: src_d[0]~[3], output: e_q[0]~[3]; working: \arg8 \arg9
242
+ vaddl.s16 \arg4, \arg0, \arg2 //int32 e[i][0] = src[0] + src[2];
243
+ vsubl.s16 \arg5, \arg0, \arg2 //int32 e[i][1] = src[0] - src[2];
244
+ vshr.s16 \arg8, \arg1, #1
245
+ vshr.s16 \arg9, \arg3, #1
246
+ vsubl.s16 \arg6, \arg8, \arg3 //int32 e[i][2] = (src[1]>>1)-src[3];
247
+ vaddl.s16 \arg7, \arg1, \arg9 //int32 e[i][3] = src[1] + (src[3]>>1);
248
+ // }
249
+ .endm
250
+
251
+ .macro TRANSFORM_4BYTES arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 // both row & col transform used
252
+ // { // output: f_q[0]~[3], input: e_q[0]~[3];
253
+ vadd.s32 \arg0, \arg4, \arg7 //int16 f[i][0] = e[i][0] + e[i][3];
254
+ vadd.s32 \arg1, \arg5, \arg6 //int16 f[i][1] = e[i][1] + e[i][2];
255
+ vsub.s32 \arg2, \arg5, \arg6 //int16 f[i][2] = e[i][1] - e[i][2];
256
+ vsub.s32 \arg3, \arg4, \arg7 //int16 f[i][3] = e[i][0] - e[i][3];
257
+ // }
258
+ .endm
259
+
260
+ .macro COL_TRANSFORM_0_STEP arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
261
+ // { // input: src_q[0]~[3], output: e_q[0]~[3];
262
+ vadd.s32 \arg4, \arg0, \arg2 //int32 e[0][j] = f[0][j] + f[2][j];
263
+ vsub.s32 \arg5, \arg0, \arg2 //int32 e[1][j] = f[0][j] - f[2][j];
264
+ vsub.s32 \arg6, \arg1, \arg3 //int32 e[2][j] = (f[1][j]>>1) - f[3][j];
265
+ vadd.s32 \arg7, \arg1, \arg3 //int32 e[3][j] = f[1][j] + (f[3][j]>>1);
266
+ // }
267
+ .endm
268
+
269
+ .macro COL_TRANSFORM_1_STEP arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7
270
+ // { // input: src_q[0]~[3], output: e_q[0]~[3];
271
+ vadd.s32 \arg4, \arg0, \arg2 //int32 e[0][j] = f[0][j] + f[2][j];
272
+ vsub.s32 \arg5, \arg0, \arg2 //int32 e[1][j] = f[0][j] - f[2][j];
273
+ vshr.s32 \arg6, \arg1, #1
274
+ vshr.s32 \arg7, \arg3, #1
275
+ vsub.s32 \arg6, \arg6, \arg3 //int32 e[2][j] = (f[1][j]>>1) - f[3][j];
276
+ vadd.s32 \arg7, \arg1, \arg7 //int32 e[3][j] = f[1][j] + (f[3][j]>>1);
277
+ // }
278
+ .endm
279
+
280
+
281
+ WELS_ASM_FUNC_BEGIN WelsDctT4_neon
282
+ push {r4}
283
+ ldr r4, [sp, #4]
284
+
285
+ LOAD_4x4_DATA_FOR_DCT d4, d5, d6, d7, r1, r2, r3, r4
286
+
287
+ vsubl.u8 q0, d4, d6
288
+ vsubl.u8 q1, d5, d7
289
+ vtrn.s32 q0, q1
290
+ vswp d1, d2
291
+
292
+ // horizontal transform
293
+ DCT_ROW_TRANSFORM_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
294
+
295
+ // transform element
296
+ MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
297
+
298
+ // vertical transform
299
+ DCT_ROW_TRANSFORM_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
300
+
301
+ // transform element
302
+ MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
303
+
304
+ vst1.s16 {q0, q1}, [r0]!
305
+
306
+ pop {r4}
307
+ WELS_ASM_FUNC_END
308
+
309
+
310
+ WELS_ASM_FUNC_BEGIN WelsDctFourT4_neon
311
+ push {r4}
312
+ ldr r4, [sp, #4]
313
+
314
+ LOAD_8x8_DATA_FOR_DCT d16, d17, d18, d19, d20, d21, d22, d23, r1, r3
315
+
316
+ vsubl.u8 q0, d16, d20
317
+ vsubl.u8 q1, d17, d21
318
+ vsubl.u8 q2, d18, d22
319
+ vsubl.u8 q3, d19, d23
320
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
321
+
322
+ // horizontal transform
323
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
324
+
325
+ // transform element
326
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
327
+
328
+ // vertical transform
329
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
330
+
331
+ vswp d1, d2
332
+ vswp d5, d6
333
+ vswp q1, q2
334
+ vst1.s16 {q0, q1}, [r0]!
335
+ vst1.s16 {q2, q3}, [r0]!
336
+
337
+ ////////////////
338
+ LOAD_8x8_DATA_FOR_DCT d16, d17, d18, d19, d20, d21, d22, d23, r1, r3
339
+
340
+ vsubl.u8 q0, d16, d20
341
+ vsubl.u8 q1, d17, d21
342
+ vsubl.u8 q2, d18, d22
343
+ vsubl.u8 q3, d19, d23
344
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
345
+
346
+ // horizontal transform
347
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
348
+
349
+ // transform element
350
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
351
+
352
+ // vertical transform
353
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
354
+
355
+ vswp d1, d2
356
+ vswp d5, d6
357
+ vswp q1, q2
358
+ vst1.s16 {q0, q1}, [r0]!
359
+ vst1.s16 {q2, q3}, [r0]!
360
+
361
+ pop {r4}
362
+ WELS_ASM_FUNC_END
363
+
364
+
365
+ WELS_ASM_FUNC_BEGIN WelsQuant4x4_neon
366
+ vld1.s16 {q2}, [r1]
367
+ vld1.s16 {q0, q1}, [r0]
368
+ vld1.s16 {q3}, [r2]
369
+
370
+ vmov q8, q2
371
+
372
+ NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q9, q10, q11
373
+ vst1.s16 {q2}, [r0]!
374
+
375
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
376
+ vst1.s16 {q8}, [r0]!
377
+
378
+ WELS_ASM_FUNC_END
379
+
380
+
381
+ WELS_ASM_FUNC_BEGIN WelsQuant4x4Dc_neon
382
+
383
+ vld1.s16 {q0, q1}, [r0]
384
+ vdup.s16 q2, r1 // even ff range [0, 768]
385
+ vdup.s16 q3, r2
386
+
387
+ vmov q8, q2
388
+
389
+ NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q9, q10, q11
390
+ vst1.s16 {q2}, [r0]!
391
+
392
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
393
+ vst1.s16 {q8}, [r0]!
394
+
395
+ WELS_ASM_FUNC_END
396
+
397
+
398
+ WELS_ASM_FUNC_BEGIN WelsQuantFour4x4_neon
399
+ vld1.s16 {q2}, [r1]
400
+ vld1.s16 {q3}, [r2]
401
+ mov r1, r0
402
+
403
+ vld1.s16 {q0, q1}, [r0]!
404
+ vmov q8, q2
405
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
406
+ vst1.s16 {q8}, [r1]!
407
+ vmov q8, q2
408
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
409
+ vst1.s16 {q8}, [r1]!
410
+
411
+ vld1.s16 {q0, q1}, [r0]!
412
+ vmov q8, q2
413
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
414
+ vst1.s16 {q8}, [r1]!
415
+ vmov q8, q2
416
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
417
+ vst1.s16 {q8}, [r1]!
418
+
419
+ vld1.s16 {q0, q1}, [r0]!
420
+ vmov q8, q2
421
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
422
+ vst1.s16 {q8}, [r1]!
423
+ vmov q8, q2
424
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
425
+ vst1.s16 {q8}, [r1]!
426
+
427
+ vld1.s16 {q0, q1}, [r0]!
428
+ vmov q8, q2
429
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
430
+ vst1.s16 {q8}, [r1]!
431
+ vmov q8, q2
432
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
433
+ vst1.s16 {q8}, [r1]!
434
+
435
+ WELS_ASM_FUNC_END
436
+
437
+
438
+ WELS_ASM_FUNC_BEGIN WelsQuantFour4x4Max_neon
439
+ vld1.s16 {q2}, [r1]
440
+ vld1.s16 {q3}, [r2]
441
+ mov r1, r0
442
+
443
+ vld1.s16 {q0, q1}, [r0]!
444
+ vmov q8, q2
445
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d26
446
+ vst1.s16 {q8}, [r1]!
447
+ vmov q12, q2
448
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d28
449
+ vst1.s16 {q12}, [r1]! // then 1st 16 elem in d26 & d28
450
+
451
+ vld1.s16 {q0, q1}, [r0]!
452
+ vmov q8, q2
453
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d27
454
+ vst1.s16 {q8}, [r1]!
455
+ vmov q12, q2
456
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d29
457
+ vst1.s16 {q12}, [r1]! // then 2nd 16 elem in d27 & d29
458
+
459
+ SELECT_MAX_IN_ABS_COEF q13, q14, q0, d0, d1
460
+ vst1.s32 {d0[0]}, [r3]!
461
+
462
+ ///////////
463
+ vld1.s16 {q0, q1}, [r0]!
464
+ vmov q8, q2
465
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d26
466
+ vst1.s16 {q8}, [r1]!
467
+ vmov q12, q2
468
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d28
469
+ vst1.s16 {q12}, [r1]! // then 3rd 16 elem in d26 & d28
470
+
471
+ vld1.s16 {q0, q1}, [r0]!
472
+ vmov q8, q2
473
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d27
474
+ vst1.s16 {q8}, [r1]!
475
+ vmov q12, q2
476
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d29
477
+ vst1.s16 {q12}, [r1]! // then 4th 16 elem in d27 & d29
478
+
479
+ SELECT_MAX_IN_ABS_COEF q13, q14, q0, d0, d1
480
+ vst1.s32 {d0[0]}, [r3]!
481
+
482
+ WELS_ASM_FUNC_END
483
+
484
+
485
+ WELS_ASM_FUNC_BEGIN WelsHadamardT4Dc_neon
486
+ push {r2,r3}
487
+ mov r2, #64 // 2*16*sizeof(int16_t)
488
+ add r3, r1, #32
489
+
490
+ vld1.s16 {d0}, [r1], r2
491
+ vld1.s16 {d1}, [r3], r2
492
+ vld1.s16 {d4}, [r1], r2
493
+ vld1.s16 {d5}, [r3], r2
494
+ vld1.s16 {d2}, [r1], r2
495
+ vld1.s16 {d3}, [r3], r2
496
+ vld1.s16 {d6}, [r1], r2
497
+ vld1.s16 {d7}, [r3], r2
498
+ vtrn.16 q0, q2 // d0[0 4], d1[1 5]
499
+ vtrn.16 q1, q3 // d2[2 6], d3[3 7]
500
+
501
+ vld1.s16 {d16}, [r1], r2
502
+ vld1.s16 {d17}, [r3], r2
503
+ vld1.s16 {d20}, [r1], r2
504
+ vld1.s16 {d21}, [r3], r2
505
+ vld1.s16 {d18}, [r1], r2
506
+ vld1.s16 {d19}, [r3], r2
507
+ vld1.s16 {d22}, [r1], r2
508
+ vld1.s16 {d23}, [r3], r2
509
+ vtrn.16 q8, q10 //d16[08 12],d17[09 13]
510
+ vtrn.16 q9, q11 //d18[10 14],d19[11 15]
511
+
512
+ vtrn.32 q0, q8 // d0 [0 4 08 12] = dct[idx], d1[1 5 09 13] = dct[idx+16]
513
+ vtrn.32 q1, q9 // d2 [2 6 10 14] = dct[idx+64], d3[3 7 11 15] = dct[idx+80]
514
+
515
+ ROW_TRANSFORM_0_STEP d0, d1, d3, d2, q8, q11, q10, q9
516
+
517
+ TRANSFORM_4BYTES q0, q1, q3, q2, q8, q11, q10, q9
518
+
519
+ // transform element 32bits
520
+ vtrn.s32 q0, q1 //[0 1 2 3]+[4 5 6 7]-->[0 4 2 6]+[1 5 3 7]
521
+ vtrn.s32 q2, q3 //[8 9 10 11]+[12 13 14 15]-->[8 12 10 14]+[9 13 11 15]
522
+ vswp d1, d4 //[0 4 2 6]+[8 12 10 14]-->[0 4 8 12]+[2 6 10 14]
523
+ vswp d3, d6 //[1 5 3 7]+[9 13 11 15]-->[1 5 9 13]+[3 7 11 15]
524
+
525
+ COL_TRANSFORM_0_STEP q0, q1, q3, q2, q8, q11, q10, q9
526
+
527
+ TRANSFORM_4BYTES q0, q1, q3, q2, q8, q11, q10, q9
528
+
529
+ vrshrn.s32 d16, q0, #1
530
+ vrshrn.s32 d17, q1, #1
531
+ vrshrn.s32 d18, q2, #1
532
+ vrshrn.s32 d19, q3, #1
533
+ vst1.16 {q8, q9}, [r0] //store
534
+
535
+ pop {r2,r3}
536
+ WELS_ASM_FUNC_END
537
+
538
+
539
+ WELS_ASM_FUNC_BEGIN WelsHadamardQuant2x2_neon
540
+
541
+ vdup.s16 d1, r1 //ff
542
+ vdup.s16 d2, r2 //mf
543
+ veor d3, d3
544
+
545
+ mov r1, #32
546
+ mov r2, r0
547
+
548
+ vld1.s16 {d0[0]}, [r0], r1 //rs[00]
549
+ vst1.s16 {d3[0]}, [r2], r1 //rs[00]=0
550
+ vld1.s16 {d0[1]}, [r0], r1 //rs[16]
551
+ vst1.s16 {d3[0]}, [r2], r1 //rs[16]=0
552
+ vld1.s16 {d0[2]}, [r0], r1 //rs[32]
553
+ vst1.s16 {d3[0]}, [r2], r1 //rs[32]=0
554
+ vld1.s16 {d0[3]}, [r0], r1 //rs[48]
555
+ vst1.s16 {d3[0]}, [r2], r1 //rs[48]=0
556
+
557
+ HDM_QUANT_2x2_TOTAL_16BITS d0, d4, d5 // output d5
558
+
559
+ HDM_QUANT_2x2_TOTAL_16BITS d5, d4, d0 // output d0
560
+
561
+ QUANT_DUALWORD_COEF_EACH_16BITS d0, d1, d2, d3, q2
562
+
563
+ vst1.s16 d1, [r3] // store to dct
564
+ ldr r2, [sp, #0]
565
+ vst1.s16 d1, [r2] // store to block
566
+
567
+ mov r1, #1
568
+ vdup.s16 d3, r1
569
+ DC_ZERO_COUNT_IN_DUALWORD d1, d0, d3
570
+
571
+ vmov r0, r1, d0
572
+ and r0, #0x07 // range [0~4]
573
+ rsb r0, #4
574
+ WELS_ASM_FUNC_END
575
+
576
+
577
+ WELS_ASM_FUNC_BEGIN WelsHadamardQuant2x2SkipKernel_neon
578
+
579
+ vdup.s16 d3, r1
580
+ mov r1, #32
581
+ vld1.s16 {d0[0]}, [r0], r1 //rs[00]
582
+ vld1.s16 {d0[1]}, [r0], r1 //rs[16]
583
+ vld1.s16 {d0[2]}, [r0], r1 //rs[32]
584
+ vld1.s16 {d0[3]}, [r0], r1 //rs[48]
585
+
586
+ HDM_QUANT_2x2_TOTAL_16BITS d0, d1, d2 // output d2
587
+
588
+ HDM_QUANT_2x2_TOTAL_16BITS d2, d1, d0 // output d0
589
+
590
+ vabs.s16 d1, d0
591
+ vcgt.s16 d1, d1, d3 // abs(dct[i])>threshold;
592
+ vmov r0, r1, d1
593
+ orr r0, r1
594
+ WELS_ASM_FUNC_END
595
+
596
+
597
+ WELS_ASM_FUNC_BEGIN WelsGetNoneZeroCount_neon
598
+ push {r1}
599
+ vld1.s16 {q0, q1}, [r0]
600
+ vmov.s16 q8, #1
601
+
602
+ ZERO_COUNT_IN_2_QUARWORD q0, q1, q8, d0, d1, d2, d3
603
+ vmov r0, r1, d0
604
+ and r0, #0x1F // range [0~16]
605
+ rsb r0, #16
606
+ pop {r1}
607
+ WELS_ASM_FUNC_END
608
+
609
+
610
+ WELS_ASM_FUNC_BEGIN WelsDequant4x4_neon
611
+ vld1.s16 {q0, q1}, [r0]
612
+ vld1.u16 {q2}, [r1]
613
+
614
+ vmul.s16 q8, q0, q2
615
+ vmul.s16 q9, q1, q2
616
+
617
+ vst1.s16 {q8, q9}, [r0]
618
+ WELS_ASM_FUNC_END
619
+
620
+
621
+ WELS_ASM_FUNC_BEGIN WelsDequantFour4x4_neon
622
+ vld1.u16 {q12}, [r1]
623
+ mov r1, r0
624
+ vld1.s16 {q0, q1}, [r0]!
625
+ vld1.s16 {q2, q3}, [r0]!
626
+ vmul.s16 q0, q0, q12
627
+ vld1.s16 {q8, q9}, [r0]!
628
+ vmul.s16 q1, q1, q12
629
+ vld1.s16 {q10, q11}, [r0]!
630
+
631
+ vst1.s16 {q0, q1}, [r1]!
632
+
633
+ vmul.s16 q2, q2, q12
634
+ vmul.s16 q3, q3, q12
635
+ vmul.s16 q8, q8, q12
636
+ vst1.s16 {q2, q3}, [r1]!
637
+
638
+ vmul.s16 q9, q9, q12
639
+ vmul.s16 q10, q10, q12
640
+ vmul.s16 q11, q11, q12
641
+ vst1.s16 {q8, q9}, [r1]!
642
+ vst1.s16 {q10, q11}, [r1]!
643
+
644
+ WELS_ASM_FUNC_END
645
+
646
+
647
+ WELS_ASM_FUNC_BEGIN WelsDequantIHadamard4x4_neon
648
+
649
+ vld1.s16 {q0, q1}, [r0]
650
+ vdup.s16 q8, r1
651
+
652
+ IHDM_4x4_TOTAL_16BITS q0, q2, q3
653
+ IHDM_4x4_TOTAL_16BITS q1, q2, q3
654
+
655
+ MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
656
+
657
+ IHDM_4x4_TOTAL_16BITS q0, q2, q3
658
+ vmul.s16 q0, q8
659
+
660
+ IHDM_4x4_TOTAL_16BITS q1, q2, q3
661
+ vmul.s16 q1, q8
662
+
663
+ MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
664
+ vst1.s16 {q0, q1}, [r0]
665
+ WELS_ASM_FUNC_END
666
+
667
+
668
+ WELS_ASM_FUNC_BEGIN WelsIDctT4Rec_neon
669
+ vld1.u32 {d16[0]}, [r2], r3
670
+ push {r4}
671
+ ldr r4, [sp, #4]
672
+ vld1.u32 {d16[1]}, [r2], r3
673
+
674
+ vld4.s16 {d0, d1, d2, d3}, [r4] // cost 3 cycles!
675
+ vld1.u32 {d17[0]}, [r2], r3
676
+ vld1.u32 {d17[1]}, [r2], r3 // q7 is pred
677
+
678
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
679
+
680
+ TRANSFORM_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
681
+
682
+ MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
683
+
684
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
685
+
686
+ TRANSFORM_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
687
+ vrshr.s16 d0, d0, #6
688
+ vrshr.s16 d1, d1, #6
689
+ vrshr.s16 d2, d2, #6
690
+ vrshr.s16 d3, d3, #6
691
+
692
+ //after rounding 6, clip into [0, 255]
693
+ vmovl.u8 q2,d16
694
+ vadd.s16 q0,q2
695
+ vqmovun.s16 d16,q0
696
+ vst1.32 {d16[0]},[r0],r1
697
+ vst1.32 {d16[1]},[r0],r1
698
+
699
+ vmovl.u8 q2,d17
700
+ vadd.s16 q1,q2
701
+ vqmovun.s16 d17,q1
702
+ vst1.32 {d17[0]},[r0],r1
703
+ vst1.32 {d17[1]},[r0]
704
+
705
+ pop {r4}
706
+ WELS_ASM_FUNC_END
707
+
708
+
709
+ WELS_ASM_FUNC_BEGIN WelsIDctFourT4Rec_neon
710
+
711
+ vld1.u64 {d24}, [r2], r3
712
+ push {r4}
713
+ ldr r4, [sp, #4]
714
+ vld1.u64 {d25}, [r2], r3
715
+
716
+ vld4.s16 {d0, d1, d2, d3}, [r4]! // cost 3 cycles!
717
+ vld1.u64 {d26}, [r2], r3
718
+ vld1.u64 {d27}, [r2], r3
719
+ vld4.s16 {d4, d5, d6, d7}, [r4]! // cost 3 cycles!
720
+ vswp d1, d4
721
+ vswp d3, d6
722
+ vswp q1, q2 // q0~q3
723
+
724
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
725
+
726
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
727
+
728
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
729
+
730
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
731
+
732
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
733
+ vrshr.s16 q0, q0, #6
734
+ vrshr.s16 q1, q1, #6
735
+ vrshr.s16 q2, q2, #6
736
+ vrshr.s16 q3, q3, #6
737
+
738
+ //after rounding 6, clip into [0, 255]
739
+ vmovl.u8 q8,d24
740
+ vadd.s16 q0,q8
741
+ vqmovun.s16 d24,q0
742
+ vst1.u8 {d24},[r0],r1
743
+
744
+ vmovl.u8 q8,d25
745
+ vadd.s16 q1,q8
746
+ vqmovun.s16 d25,q1
747
+ vst1.u8 {d25},[r0],r1
748
+
749
+ vmovl.u8 q8,d26
750
+ vadd.s16 q2,q8
751
+ vqmovun.s16 d26,q2
752
+ vst1.u8 {d26},[r0],r1
753
+
754
+ vmovl.u8 q8,d27
755
+ vadd.s16 q3,q8
756
+ vqmovun.s16 d27,q3
757
+ vst1.u8 {d27},[r0],r1
758
+
759
+ vld1.u64 {d24}, [r2], r3
760
+ vld1.u64 {d25}, [r2], r3
761
+
762
+ vld4.s16 {d0, d1, d2, d3}, [r4]! // cost 3 cycles!
763
+ vld1.u64 {d26}, [r2], r3
764
+ vld1.u64 {d27}, [r2], r3
765
+ vld4.s16 {d4, d5, d6, d7}, [r4]! // cost 3 cycles!
766
+ vswp d1, d4
767
+ vswp d3, d6
768
+ vswp q1, q2 // q0~q3
769
+
770
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
771
+
772
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
773
+
774
+ MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
775
+
776
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
777
+
778
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
779
+ vrshr.s16 q0, q0, #6
780
+ vrshr.s16 q1, q1, #6
781
+ vrshr.s16 q2, q2, #6
782
+ vrshr.s16 q3, q3, #6
783
+
784
+ //after rounding 6, clip into [0, 255]
785
+ vmovl.u8 q8,d24
786
+ vadd.s16 q0,q8
787
+ vqmovun.s16 d24,q0
788
+ vst1.u8 {d24},[r0],r1
789
+
790
+ vmovl.u8 q8,d25
791
+ vadd.s16 q1,q8
792
+ vqmovun.s16 d25,q1
793
+ vst1.u8 {d25},[r0],r1
794
+
795
+ vmovl.u8 q8,d26
796
+ vadd.s16 q2,q8
797
+ vqmovun.s16 d26,q2
798
+ vst1.u8 {d26},[r0],r1
799
+
800
+ vmovl.u8 q8,d27
801
+ vadd.s16 q3,q8
802
+ vqmovun.s16 d27,q3
803
+ vst1.u8 {d27},[r0],r1
804
+
805
+ pop {r4}
806
+ WELS_ASM_FUNC_END
807
+
808
+
809
+ WELS_ASM_FUNC_BEGIN WelsIDctRecI16x16Dc_neon
810
+ push {r4}
811
+ ldr r4, [sp, #4]
812
+
813
+ vld1.s16 {q8,q9}, [r4]
814
+ vrshr.s16 q8, q8, #6
815
+ vrshr.s16 q9, q9, #6
816
+
817
+ vdup.s16 d20, d16[0]
818
+ vdup.s16 d21, d16[1]
819
+ vdup.s16 d22, d16[2]
820
+ vdup.s16 d23, d16[3]
821
+
822
+ vld1.u8 {q0}, [r2], r3
823
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
824
+ vst1.u8 {q0}, [r0], r1
825
+
826
+ vld1.u8 {q0}, [r2], r3
827
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
828
+ vst1.u8 {q0}, [r0], r1
829
+
830
+ vld1.u8 {q0}, [r2], r3
831
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
832
+ vst1.u8 {q0}, [r0], r1
833
+
834
+ vld1.u8 {q0}, [r2], r3
835
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
836
+ vst1.u8 {q0}, [r0], r1
837
+
838
+ vdup.s16 d20, d17[0]
839
+ vdup.s16 d21, d17[1]
840
+ vdup.s16 d22, d17[2]
841
+ vdup.s16 d23, d17[3]
842
+
843
+ vld1.u8 {q0}, [r2], r3
844
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
845
+ vst1.u8 {q0}, [r0], r1
846
+
847
+ vld1.u8 {q0}, [r2], r3
848
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
849
+ vst1.u8 {q0}, [r0], r1
850
+
851
+ vld1.u8 {q0}, [r2], r3
852
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
853
+ vst1.u8 {q0}, [r0], r1
854
+
855
+ vld1.u8 {q0}, [r2], r3
856
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
857
+ vst1.u8 {q0}, [r0], r1
858
+
859
+ vdup.s16 d20, d18[0]
860
+ vdup.s16 d21, d18[1]
861
+ vdup.s16 d22, d18[2]
862
+ vdup.s16 d23, d18[3]
863
+
864
+ vld1.u8 {q0}, [r2], r3
865
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
866
+ vst1.u8 {q0}, [r0], r1
867
+
868
+ vld1.u8 {q0}, [r2], r3
869
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
870
+ vst1.u8 {q0}, [r0], r1
871
+
872
+ vld1.u8 {q0}, [r2], r3
873
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
874
+ vst1.u8 {q0}, [r0], r1
875
+
876
+ vld1.u8 {q0}, [r2], r3
877
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
878
+ vst1.u8 {q0}, [r0], r1
879
+
880
+ vdup.s16 d20, d19[0]
881
+ vdup.s16 d21, d19[1]
882
+ vdup.s16 d22, d19[2]
883
+ vdup.s16 d23, d19[3]
884
+
885
+ vld1.u8 {q0}, [r2], r3
886
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
887
+ vst1.u8 {q0}, [r0], r1
888
+
889
+ vld1.u8 {q0}, [r2], r3
890
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
891
+ vst1.u8 {q0}, [r0], r1
892
+
893
+ vld1.u8 {q0}, [r2], r3
894
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
895
+ vst1.u8 {q0}, [r0], r1
896
+
897
+ vld1.u8 {q0}, [r2], r3
898
+ MB_PRED_8BITS_ADD_DCT_16BITS_CLIP d0, d1, q10, q11, q12, q13
899
+ vst1.u8 {q0}, [r0], r1
900
+
901
+ pop {r4}
902
+ WELS_ASM_FUNC_END
903
+ #endif