@scrypted/libav 1.0.179 → 1.0.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/_openh264install/include/wels/codec_api.h +592 -0
  2. package/_openh264install/include/wels/codec_app_def.h +820 -0
  3. package/_openh264install/include/wels/codec_def.h +216 -0
  4. package/_openh264install/include/wels/codec_ver.h +15 -0
  5. package/_openh264install/lib/libopenh264.a +0 -0
  6. package/_openh264install/lib/pkgconfig/openh264.pc +10 -0
  7. package/binding.gyp +4 -0
  8. package/openh264/.reviewboardrc +3 -0
  9. package/openh264/.travis.yml +42 -0
  10. package/openh264/CODING_STYLE +8 -0
  11. package/openh264/CONTRIBUTORS +55 -0
  12. package/openh264/LICENSE +23 -0
  13. package/openh264/Makefile +408 -0
  14. package/openh264/README.md +197 -0
  15. package/openh264/RELEASES +467 -0
  16. package/openh264/SECURITY.md +16 -0
  17. package/openh264/autotest/codec_comparision/run_MultiCodecComparision.sh +431 -0
  18. package/openh264/autotest/performanceTest/android/run_AutoTest_android.sh +180 -0
  19. package/openh264/autotest/performanceTest/ios/fruitstrap +0 -0
  20. package/openh264/autotest/performanceTest/ios/iFileTransfer +0 -0
  21. package/openh264/autotest/performanceTest/ios/run_AutoTest_ios.sh +193 -0
  22. package/openh264/autotest/performanceTest/ios/uiascript.js +19 -0
  23. package/openh264/autotest/performanceTest/parsePerfData.sh +107 -0
  24. package/openh264/autotest/performanceTest/run_perfTest.sh +122 -0
  25. package/openh264/autotest/unitTest/android/run_AutoTest_android.sh +112 -0
  26. package/openh264/autotest/unitTest/ios/run_AutoTest_ios.sh +167 -0
  27. package/openh264/autotest/unitTest/run_ParseUTxml.sh +70 -0
  28. package/openh264/autotest/unitTest/run_unitTest.sh +98 -0
  29. package/openh264/build.gradle +30 -0
  30. package/openh264/code-coverage.sh +6 -0
  31. package/openh264/codec/api/meson.build +1 -0
  32. package/openh264/codec/api/wels/codec_api.h +592 -0
  33. package/openh264/codec/api/wels/codec_app_def.h +820 -0
  34. package/openh264/codec/api/wels/codec_def.h +216 -0
  35. package/openh264/codec/api/wels/codec_ver.h +15 -0
  36. package/openh264/codec/api/wels/meson.build +9 -0
  37. package/openh264/codec/common/arm/arm_arch_common_macro.S +83 -0
  38. package/openh264/codec/common/arm/copy_mb_neon.S +161 -0
  39. package/openh264/codec/common/arm/deblocking_neon.S +857 -0
  40. package/openh264/codec/common/arm/expand_picture_neon.S +154 -0
  41. package/openh264/codec/common/arm/intra_pred_common_neon.S +82 -0
  42. package/openh264/codec/common/arm/mc_neon.S +2283 -0
  43. package/openh264/codec/common/arm64/arm_aarch64_common.h +85 -0
  44. package/openh264/codec/common/arm64/arm_arch64_common_macro.S +79 -0
  45. package/openh264/codec/common/arm64/copy_mb_aarch64_neon.S +202 -0
  46. package/openh264/codec/common/arm64/deblocking_aarch64_neon.S +852 -0
  47. package/openh264/codec/common/arm64/expand_picture_aarch64_neon.S +150 -0
  48. package/openh264/codec/common/arm64/intra_pred_common_aarch64_neon.S +58 -0
  49. package/openh264/codec/common/arm64/mc_aarch64_neon.S +2614 -0
  50. package/openh264/codec/common/generate_version.sh +28 -0
  51. package/openh264/codec/common/inc/WelsList.h +287 -0
  52. package/openh264/codec/common/inc/WelsLock.h +97 -0
  53. package/openh264/codec/common/inc/WelsTask.h +75 -0
  54. package/openh264/codec/common/inc/WelsTaskThread.h +83 -0
  55. package/openh264/codec/common/inc/WelsThread.h +106 -0
  56. package/openh264/codec/common/inc/WelsThreadLib.h +151 -0
  57. package/openh264/codec/common/inc/WelsThreadPool.h +124 -0
  58. package/openh264/codec/common/inc/asmdefs_mmi.h +345 -0
  59. package/openh264/codec/common/inc/copy_mb.h +103 -0
  60. package/openh264/codec/common/inc/cpu.h +81 -0
  61. package/openh264/codec/common/inc/cpu_core.h +103 -0
  62. package/openh264/codec/common/inc/crt_util_safe_x.h +104 -0
  63. package/openh264/codec/common/inc/deblocking_common.h +124 -0
  64. package/openh264/codec/common/inc/expand_pic.h +107 -0
  65. package/openh264/codec/common/inc/golomb_common.h +166 -0
  66. package/openh264/codec/common/inc/intra_pred_common.h +86 -0
  67. package/openh264/codec/common/inc/loongson_intrinsics.h +1919 -0
  68. package/openh264/codec/common/inc/ls_defines.h +130 -0
  69. package/openh264/codec/common/inc/macros.h +329 -0
  70. package/openh264/codec/common/inc/mc.h +407 -0
  71. package/openh264/codec/common/inc/measure_time.h +88 -0
  72. package/openh264/codec/common/inc/memory_align.h +116 -0
  73. package/openh264/codec/common/inc/msa_macros.h +2393 -0
  74. package/openh264/codec/common/inc/sad_common.h +139 -0
  75. package/openh264/codec/common/inc/typedefs.h +86 -0
  76. package/openh264/codec/common/inc/utils.h +95 -0
  77. package/openh264/codec/common/inc/version.h +10 -0
  78. package/openh264/codec/common/inc/version_gen.h.template +6 -0
  79. package/openh264/codec/common/inc/welsCodecTrace.h +64 -0
  80. package/openh264/codec/common/inc/wels_common_defs.h +373 -0
  81. package/openh264/codec/common/inc/wels_const_common.h +63 -0
  82. package/openh264/codec/common/loongarch/copy_mb_lsx.c +194 -0
  83. package/openh264/codec/common/loongarch/deblock_lsx.c +1489 -0
  84. package/openh264/codec/common/loongarch/intra_pred_com_lasx.c +112 -0
  85. package/openh264/codec/common/loongarch/intra_pred_com_lsx.c +91 -0
  86. package/openh264/codec/common/loongarch/mc_chroma_lsx.c +192 -0
  87. package/openh264/codec/common/loongarch/mc_horver_lsx.c +654 -0
  88. package/openh264/codec/common/loongarch/satd_sad_lasx.c +568 -0
  89. package/openh264/codec/common/meson.build +84 -0
  90. package/openh264/codec/common/mips/copy_mb_mmi.c +477 -0
  91. package/openh264/codec/common/mips/copy_mb_msa.c +80 -0
  92. package/openh264/codec/common/mips/deblock_mmi.c +2826 -0
  93. package/openh264/codec/common/mips/deblock_msa.c +1024 -0
  94. package/openh264/codec/common/mips/expand_picture_mmi.c +673 -0
  95. package/openh264/codec/common/mips/intra_pred_com_mmi.c +548 -0
  96. package/openh264/codec/common/mips/satd_sad_mmi.c +2154 -0
  97. package/openh264/codec/common/targets.mk +136 -0
  98. package/openh264/codec/common/x86/asm_inc.asm +743 -0
  99. package/openh264/codec/common/x86/cpuid.asm +263 -0
  100. package/openh264/codec/common/x86/dct.asm +1036 -0
  101. package/openh264/codec/common/x86/deblock.asm +848 -0
  102. package/openh264/codec/common/x86/expand_picture.asm +728 -0
  103. package/openh264/codec/common/x86/intra_pred_com.asm +117 -0
  104. package/openh264/codec/common/x86/mb_copy.asm +615 -0
  105. package/openh264/codec/common/x86/mc_chroma.asm +313 -0
  106. package/openh264/codec/common/x86/mc_luma.asm +4490 -0
  107. package/openh264/codec/common/x86/satd_sad.asm +2734 -0
  108. package/openh264/codec/common/x86/vaa.asm +411 -0
  109. package/openh264/codec/console/common/inc/read_config.h +68 -0
  110. package/openh264/codec/console/common/meson.build +12 -0
  111. package/openh264/codec/console/common/targets.mk +20 -0
  112. package/openh264/codec/console/dec/inc/d3d9_utils.h +148 -0
  113. package/openh264/codec/console/dec/meson.build +15 -0
  114. package/openh264/codec/console/dec/targets.mk +20 -0
  115. package/openh264/codec/console/enc/meson.build +9 -0
  116. package/openh264/codec/console/enc/targets.mk +19 -0
  117. package/openh264/codec/console/meson.build +3 -0
  118. package/openh264/codec/decoder/core/arm/block_add_neon.S +129 -0
  119. package/openh264/codec/decoder/core/arm/intra_pred_neon.S +635 -0
  120. package/openh264/codec/decoder/core/arm64/block_add_aarch64_neon.S +131 -0
  121. package/openh264/codec/decoder/core/arm64/intra_pred_aarch64_neon.S +524 -0
  122. package/openh264/codec/decoder/core/inc/au_parser.h +199 -0
  123. package/openh264/codec/decoder/core/inc/bit_stream.h +62 -0
  124. package/openh264/codec/decoder/core/inc/cabac_decoder.h +111 -0
  125. package/openh264/codec/decoder/core/inc/deblocking.h +118 -0
  126. package/openh264/codec/decoder/core/inc/dec_frame.h +156 -0
  127. package/openh264/codec/decoder/core/inc/dec_golomb.h +344 -0
  128. package/openh264/codec/decoder/core/inc/decode_mb_aux.h +83 -0
  129. package/openh264/codec/decoder/core/inc/decode_slice.h +104 -0
  130. package/openh264/codec/decoder/core/inc/decoder.h +186 -0
  131. package/openh264/codec/decoder/core/inc/decoder_context.h +590 -0
  132. package/openh264/codec/decoder/core/inc/decoder_core.h +206 -0
  133. package/openh264/codec/decoder/core/inc/error_code.h +222 -0
  134. package/openh264/codec/decoder/core/inc/error_concealment.h +68 -0
  135. package/openh264/codec/decoder/core/inc/fmo.h +114 -0
  136. package/openh264/codec/decoder/core/inc/get_intra_predictor.h +191 -0
  137. package/openh264/codec/decoder/core/inc/manage_dec_ref.h +62 -0
  138. package/openh264/codec/decoder/core/inc/mb_cache.h +80 -0
  139. package/openh264/codec/decoder/core/inc/memmgr_nal_unit.h +66 -0
  140. package/openh264/codec/decoder/core/inc/mv_pred.h +195 -0
  141. package/openh264/codec/decoder/core/inc/nal_prefix.h +56 -0
  142. package/openh264/codec/decoder/core/inc/nalu.h +79 -0
  143. package/openh264/codec/decoder/core/inc/parameter_sets.h +217 -0
  144. package/openh264/codec/decoder/core/inc/parse_mb_syn_cabac.h +89 -0
  145. package/openh264/codec/decoder/core/inc/parse_mb_syn_cavlc.h +137 -0
  146. package/openh264/codec/decoder/core/inc/pic_queue.h +62 -0
  147. package/openh264/codec/decoder/core/inc/picture.h +112 -0
  148. package/openh264/codec/decoder/core/inc/rec_mb.h +104 -0
  149. package/openh264/codec/decoder/core/inc/slice.h +208 -0
  150. package/openh264/codec/decoder/core/inc/vlc_decoder.h +177 -0
  151. package/openh264/codec/decoder/core/inc/wels_common_basis.h +317 -0
  152. package/openh264/codec/decoder/core/inc/wels_const.h +65 -0
  153. package/openh264/codec/decoder/core/inc/wels_decoder_thread.h +170 -0
  154. package/openh264/codec/decoder/core/loongarch/mb_aux_lsx.c +296 -0
  155. package/openh264/codec/decoder/core/mips/dct_mmi.c +786 -0
  156. package/openh264/codec/decoder/core/x86/dct.asm +72 -0
  157. package/openh264/codec/decoder/core/x86/intra_pred.asm +1456 -0
  158. package/openh264/codec/decoder/meson.build +69 -0
  159. package/openh264/codec/decoder/plus/inc/welsDecoderExt.h +170 -0
  160. package/openh264/codec/decoder/targets.mk +115 -0
  161. package/openh264/codec/encoder/core/arm/intra_pred_neon.S +589 -0
  162. package/openh264/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S +735 -0
  163. package/openh264/codec/encoder/core/arm/memory_neon.S +62 -0
  164. package/openh264/codec/encoder/core/arm/pixel_neon.S +882 -0
  165. package/openh264/codec/encoder/core/arm/reconstruct_neon.S +903 -0
  166. package/openh264/codec/encoder/core/arm/svc_motion_estimation.S +366 -0
  167. package/openh264/codec/encoder/core/arm64/intra_pred_aarch64_neon.S +505 -0
  168. package/openh264/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S +611 -0
  169. package/openh264/codec/encoder/core/arm64/memory_aarch64_neon.S +63 -0
  170. package/openh264/codec/encoder/core/arm64/pixel_aarch64_neon.S +621 -0
  171. package/openh264/codec/encoder/core/arm64/reconstruct_aarch64_neon.S +717 -0
  172. package/openh264/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S +350 -0
  173. package/openh264/codec/encoder/core/inc/as264_common.h +138 -0
  174. package/openh264/codec/encoder/core/inc/au_set.h +152 -0
  175. package/openh264/codec/encoder/core/inc/deblocking.h +92 -0
  176. package/openh264/codec/encoder/core/inc/decode_mb_aux.h +112 -0
  177. package/openh264/codec/encoder/core/inc/dq_map.h +58 -0
  178. package/openh264/codec/encoder/core/inc/encode_mb_aux.h +199 -0
  179. package/openh264/codec/encoder/core/inc/encoder.h +148 -0
  180. package/openh264/codec/encoder/core/inc/encoder_context.h +240 -0
  181. package/openh264/codec/encoder/core/inc/extern.h +124 -0
  182. package/openh264/codec/encoder/core/inc/get_intra_predictor.h +186 -0
  183. package/openh264/codec/encoder/core/inc/mb_cache.h +141 -0
  184. package/openh264/codec/encoder/core/inc/md.h +181 -0
  185. package/openh264/codec/encoder/core/inc/mt_defs.h +91 -0
  186. package/openh264/codec/encoder/core/inc/mv_pred.h +191 -0
  187. package/openh264/codec/encoder/core/inc/nal_encap.h +143 -0
  188. package/openh264/codec/encoder/core/inc/param_svc.h +576 -0
  189. package/openh264/codec/encoder/core/inc/parameter_sets.h +181 -0
  190. package/openh264/codec/encoder/core/inc/paraset_strategy.h +310 -0
  191. package/openh264/codec/encoder/core/inc/picture.h +137 -0
  192. package/openh264/codec/encoder/core/inc/picture_handle.h +66 -0
  193. package/openh264/codec/encoder/core/inc/rc.h +284 -0
  194. package/openh264/codec/encoder/core/inc/ref_list_mgr_svc.h +148 -0
  195. package/openh264/codec/encoder/core/inc/sample.h +154 -0
  196. package/openh264/codec/encoder/core/inc/set_mb_syn_cabac.h +127 -0
  197. package/openh264/codec/encoder/core/inc/set_mb_syn_cavlc.h +92 -0
  198. package/openh264/codec/encoder/core/inc/slice.h +212 -0
  199. package/openh264/codec/encoder/core/inc/slice_multi_threading.h +97 -0
  200. package/openh264/codec/encoder/core/inc/stat.h +102 -0
  201. package/openh264/codec/encoder/core/inc/svc_base_layer_md.h +102 -0
  202. package/openh264/codec/encoder/core/inc/svc_enc_frame.h +136 -0
  203. package/openh264/codec/encoder/core/inc/svc_enc_golomb.h +123 -0
  204. package/openh264/codec/encoder/core/inc/svc_enc_macroblock.h +82 -0
  205. package/openh264/codec/encoder/core/inc/svc_enc_slice_segment.h +212 -0
  206. package/openh264/codec/encoder/core/inc/svc_encode_mb.h +63 -0
  207. package/openh264/codec/encoder/core/inc/svc_encode_slice.h +184 -0
  208. package/openh264/codec/encoder/core/inc/svc_mode_decision.h +94 -0
  209. package/openh264/codec/encoder/core/inc/svc_motion_estimate.h +369 -0
  210. package/openh264/codec/encoder/core/inc/svc_set_mb_syn.h +70 -0
  211. package/openh264/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h +67 -0
  212. package/openh264/codec/encoder/core/inc/vlc_encoder.h +92 -0
  213. package/openh264/codec/encoder/core/inc/wels_common_basis.h +160 -0
  214. package/openh264/codec/encoder/core/inc/wels_const.h +174 -0
  215. package/openh264/codec/encoder/core/inc/wels_func_ptr_def.h +300 -0
  216. package/openh264/codec/encoder/core/inc/wels_preprocess.h +251 -0
  217. package/openh264/codec/encoder/core/inc/wels_task_base.h +79 -0
  218. package/openh264/codec/encoder/core/inc/wels_task_encoder.h +142 -0
  219. package/openh264/codec/encoder/core/inc/wels_task_management.h +135 -0
  220. package/openh264/codec/encoder/core/inc/wels_transpose_matrix.h +58 -0
  221. package/openh264/codec/encoder/core/loongarch/dct_lasx.c +452 -0
  222. package/openh264/codec/encoder/core/loongarch/get_intra_predictor_lsx.c +166 -0
  223. package/openh264/codec/encoder/core/loongarch/quant_lsx.c +153 -0
  224. package/openh264/codec/encoder/core/loongarch/sample_lasx.c +87 -0
  225. package/openh264/codec/encoder/core/loongarch/svc_motion_estimate_lsx.c +104 -0
  226. package/openh264/codec/encoder/core/mips/dct_mmi.c +529 -0
  227. package/openh264/codec/encoder/core/mips/quant_mmi.c +553 -0
  228. package/openh264/codec/encoder/core/mips/score_mmi.c +324 -0
  229. package/openh264/codec/encoder/core/x86/coeff.asm +695 -0
  230. package/openh264/codec/encoder/core/x86/dct.asm +108 -0
  231. package/openh264/codec/encoder/core/x86/intra_pred.asm +1129 -0
  232. package/openh264/codec/encoder/core/x86/matrix_transpose.asm +395 -0
  233. package/openh264/codec/encoder/core/x86/memzero.asm +132 -0
  234. package/openh264/codec/encoder/core/x86/quant.asm +507 -0
  235. package/openh264/codec/encoder/core/x86/sample_sc.asm +1829 -0
  236. package/openh264/codec/encoder/core/x86/score.asm +363 -0
  237. package/openh264/codec/encoder/meson.build +98 -0
  238. package/openh264/codec/encoder/plus/inc/welsEncoderExt.h +129 -0
  239. package/openh264/codec/encoder/targets.mk +146 -0
  240. package/openh264/codec/meson.build +9 -0
  241. package/openh264/codec/processing/interface/IWelsVP.h +310 -0
  242. package/openh264/codec/processing/meson.build +71 -0
  243. package/openh264/codec/processing/targets.mk +117 -0
  244. package/openh264/docs/doxygen/Doxyfile +1865 -0
  245. package/openh264/docs/doxygen/Home.rest +25 -0
  246. package/openh264/docs/doxygen/ISVCDecoder.rest +19 -0
  247. package/openh264/docs/doxygen/ISVCEncoder.rest +16 -0
  248. package/openh264/docs/doxygen/UsageExampleForDecoder.rest +10 -0
  249. package/openh264/docs/doxygen/UsageExampleForEncoder.rest +15 -0
  250. package/openh264/docs/doxygen2rst.py +619 -0
  251. package/openh264/gmpopenh264.info +4 -0
  252. package/openh264/gradlew +172 -0
  253. package/openh264/meson.build +218 -0
  254. package/openh264/meson_options.txt +1 -0
  255. package/openh264/module/RefCounted.h +141 -0
  256. package/openh264/module/gmp-openh264.cpp +1196 -0
  257. package/openh264/module/targets.mk +14 -0
  258. package/openh264/module/task_utils.h +38 -0
  259. package/openh264/module/task_utils.py +207 -0
  260. package/openh264/module/task_utils_generated.h +2087 -0
  261. package/openh264/openh264.def +7 -0
  262. package/openh264/openh264.pc.in +10 -0
  263. package/openh264/openh264.rc +61 -0
  264. package/openh264/openh264.rc.template +61 -0
  265. package/openh264/res/Adobe_PDF_sample_a_1024x768_50Frms.264 +0 -0
  266. package/openh264/res/BA1_FT_C.264 +0 -0
  267. package/openh264/res/BA1_Sony_D.jsv +0 -0
  268. package/openh264/res/BAMQ1_JVC_C.264 +0 -0
  269. package/openh264/res/BAMQ2_JVC_C.264 +0 -0
  270. package/openh264/res/BANM_MW_D.264 +0 -0
  271. package/openh264/res/BASQP1_Sony_C.jsv +0 -0
  272. package/openh264/res/BA_MW_D.264 +0 -0
  273. package/openh264/res/BA_MW_D_IDR_LOST.264 +0 -0
  274. package/openh264/res/BA_MW_D_P_LOST.264 +0 -0
  275. package/openh264/res/CI1_FT_B.264 +0 -0
  276. package/openh264/res/CI_MW_D.264 +0 -0
  277. package/openh264/res/CVFC1_Sony_C.jsv +0 -0
  278. package/openh264/res/CVPCMNL1_SVA_C.264 +0 -0
  279. package/openh264/res/CiscoVT2people_160x96_6fps.yuv +1 -0
  280. package/openh264/res/CiscoVT2people_320x192_12fps.yuv +1 -0
  281. package/openh264/res/Cisco_Absolute_Power_1280x720_30fps.yuv +3607 -0
  282. package/openh264/res/Cisco_Adobe_PDF_sample_a_1024x768_CAVLC_Bframe_9.264 +0 -0
  283. package/openh264/res/Cisco_Men_whisper_640x320_CABAC_Bframe_9.264 +0 -0
  284. package/openh264/res/Cisco_Men_whisper_640x320_CAVLC_Bframe_9.264 +0 -0
  285. package/openh264/res/Error_I_P.264 +0 -0
  286. package/openh264/res/LS_SVA_D.264 +0 -0
  287. package/openh264/res/MIDR_MW_D.264 +0 -0
  288. package/openh264/res/MPS_MW_A.264 +0 -0
  289. package/openh264/res/MR1_BT_A.h264 +0 -0
  290. package/openh264/res/MR1_MW_A.264 +0 -0
  291. package/openh264/res/MR2_MW_A.264 +0 -0
  292. package/openh264/res/MR2_TANDBERG_E.264 +0 -0
  293. package/openh264/res/NL1_Sony_D.jsv +0 -0
  294. package/openh264/res/NLMQ1_JVC_C.264 +0 -0
  295. package/openh264/res/NLMQ2_JVC_C.264 +0 -0
  296. package/openh264/res/NRF_MW_E.264 +0 -0
  297. package/openh264/res/QCIF_2P_I_allIPCM.264 +0 -0
  298. package/openh264/res/SVA_BA1_B.264 +0 -0
  299. package/openh264/res/SVA_BA2_D.264 +0 -0
  300. package/openh264/res/SVA_Base_B.264 +0 -0
  301. package/openh264/res/SVA_CL1_E.264 +0 -0
  302. package/openh264/res/SVA_FM1_E.264 +0 -0
  303. package/openh264/res/SVA_NL1_B.264 +0 -0
  304. package/openh264/res/SVA_NL2_E.264 +0 -0
  305. package/openh264/res/SarVui.264 +0 -0
  306. package/openh264/res/Static.264 +0 -0
  307. package/openh264/res/Static_152_100.yuv +1 -0
  308. package/openh264/res/VID_1280x544_cabac_temporal_direct.264 +0 -0
  309. package/openh264/res/VID_1280x544_cavlc_temporal_direct.264 +0 -0
  310. package/openh264/res/VID_1280x720_cabac_temporal_direct.264 +0 -0
  311. package/openh264/res/VID_1280x720_cavlc_temporal_direct.264 +0 -0
  312. package/openh264/res/VID_1920x1080_cabac_temporal_direct.264 +0 -0
  313. package/openh264/res/VID_1920x1080_cavlc_temporal_direct.264 +0 -0
  314. package/openh264/res/Zhling_1280x720.264 +0 -0
  315. package/openh264/res/jm_1080p_allslice.264 +0 -0
  316. package/openh264/res/sps_subsetsps_bothVUI.264 +0 -0
  317. package/openh264/res/test_cif_I_CABAC_PCM.264 +0 -0
  318. package/openh264/res/test_cif_I_CABAC_slice.264 +0 -0
  319. package/openh264/res/test_cif_P_CABAC_slice.264 +0 -0
  320. package/openh264/res/test_qcif_cabac.264 +0 -0
  321. package/openh264/res/test_scalinglist_jm.264 +0 -0
  322. package/openh264/res/test_vd_1d.264 +0 -0
  323. package/openh264/res/test_vd_rc.264 +0 -0
  324. package/openh264/run_Test.sh +91 -0
  325. package/openh264/settings.gradle +4 -0
  326. package/openh264/subprojects/gtest.wrap +10 -0
  327. package/openh264/testbin/AutoBuild_Windows_VS2008.bat +59 -0
  328. package/openh264/testbin/CmdLineExample.sh +7 -0
  329. package/openh264/testbin/CmdLineReadMe +22 -0
  330. package/openh264/testbin/layer2.cfg +37 -0
  331. package/openh264/testbin/layer2_arbitrary_res.cfg +37 -0
  332. package/openh264/testbin/layer2_vd.cfg +38 -0
  333. package/openh264/testbin/layer2_vd_rc.cfg +38 -0
  334. package/openh264/testbin/welsenc.cfg +71 -0
  335. package/openh264/testbin/welsenc_arbitrary_res.cfg +70 -0
  336. package/openh264/testbin/welsenc_ios.cfg +71 -0
  337. package/openh264/testbin/welsenc_vd_1d.cfg +70 -0
  338. package/openh264/testbin/welsenc_vd_rc.cfg +69 -0
  339. package/openh264/ut.def +2 -0
  340. package/package.json +1 -1
@@ -0,0 +1,848 @@
1
+ ;*!
2
+ ;* \copy
3
+ ;* Copyright (c) 2009-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
+ ;* deblock.asm
33
+ ;*
34
+ ;* Abstract
35
+ ;* edge loop
36
+ ;*
37
+ ;* History
38
+ ;* 08/07/2009 Created
39
+ ;*
40
+ ;*
41
+ ;*************************************************************************/
42
+ %include "asm_inc.asm"
43
+
44
+ ;*******************************************************************************
45
+ ; Macros and other preprocessor constants
46
+ ;*******************************************************************************
47
+
48
+ %ifdef X86_32_PICASM
49
+ SECTION .text align=16
50
+ %else
51
+ SECTION .rodata align=16
52
+ %endif
53
+
54
+ ALIGN 16
55
+ FOUR_16B_SSE2: dw 4, 4, 4, 4, 4, 4, 4, 4
56
+
57
+ ALIGN 16
58
+ WELS_DB1_16:
59
+ times 16 db 1
60
+ WELS_DB127_16:
61
+ times 16 db 127
62
+ WELS_DB96_16:
63
+ times 16 db 96
64
+ WELS_SHUFB0000111122223333:
65
+ times 4 db 0
66
+ times 4 db 1
67
+ times 4 db 2
68
+ times 4 db 3
69
+
70
+
71
+ SECTION .text
72
+
73
+ ; Unsigned byte absolute difference.
74
+ ; a=%1 b=%2 clobber=%3
75
+ ; Subtract once in each direction with saturation and return the maximum.
76
+ %macro SSE2_AbsDiffUB 3
77
+ movdqa %3, %2
78
+ psubusb %3, %1
79
+ psubusb %1, %2
80
+ por %1, %3
81
+ %endmacro
82
+
83
+ ; Unsigned byte compare less than.
84
+ ; lhs=%1 rhs^0x7f=%2 0x7f=%3
85
+ ; No unsigned byte lt/gt compare instruction available; xor by 0x7f and use a
86
+ ; signed compare. Some other options do exist. This one allows modifying the lhs
87
+ ; without mov and uses a bitwise op which can be executed on most ports on
88
+ ; common architectures.
89
+ %macro SSE2_CmpltUB 3
90
+ pxor %1, %3
91
+ pcmpgtb %1, %2
92
+ %endmacro
93
+
94
+ ; Unsigned byte compare greater than or equal.
95
+ %macro SSE2_CmpgeUB 2
96
+ pminub %1, %2
97
+ pcmpeqb %1, %2
98
+ %endmacro
99
+
100
+ ; Clip unsigned bytes to ref +/- diff.
101
+ ; data=%1 ref=%2 maxdiff_from_ref=%3 clobber=%4
102
+ %macro SSE2_ClipUB 4
103
+ movdqa %4, %2
104
+ psubusb %4, %3
105
+ paddusb %3, %2
106
+ pmaxub %1, %4
107
+ pminub %1, %3
108
+ %endmacro
109
+
110
+ ; (a + b + 1 - c) >> 1
111
+ ; a=%1 b=%2 c=%3 [out:a^b&c]=%4
112
+ %macro SSE2_AvgbFloor1 4
113
+ movdqa %4, %1
114
+ pxor %4, %2
115
+ pavgb %1, %2
116
+ pand %4, %3
117
+ psubb %1, %4
118
+ %endmacro
119
+
120
+ ; (a + b + carry) >> 1
121
+ ; a=%1 b=%2 carry-1=%3
122
+ %macro SSE2_AvgbFloor2 3
123
+ pxor %1, %3
124
+ pxor %2, %3
125
+ pavgb %1, %2
126
+ pxor %1, %3
127
+ %endmacro
128
+
129
+ ; a = (a & m) | (b & ~m)
130
+ ; a=%1 b=%2 m=%3
131
+ %macro SSE2_Blend 3
132
+ pand %1, %3
133
+ pandn %3, %2
134
+ por %1, %3
135
+ %endmacro
136
+
137
+ ; Compute
138
+ ; p0 = clip(p0 + clip((q0 - p0 + ((p1 - q1) >> 2) + 1) >> 1, -iTc, iTc), 0, 255)
139
+ ; q0 = clip(q0 - clip((q0 - p0 + ((p1 - q1) >> 2) + 1) >> 1, -iTc, iTc), 0, 255)
140
+ ; 16-wide parallel in packed byte representation in xmm registers.
141
+ ;
142
+ ; p1=%1 p0=%2 q0=%3 q1=%4 iTc=%5 FFh=%6 xmmclobber=%7,%8
143
+ %macro SSE2_DeblockP0Q0_Lt4 8
144
+ ; (q0 - p0 + ((p1 - q1) >> 2) + 1) >> 1 clipped to [-96, 159] and biased to [0, 255].
145
+ ; A limited range is sufficient because the value is clipped to [-iTc, iTc] later.
146
+ ; Bias so that unsigned saturation can be used.
147
+ ; Get ((p1 - q1) >> 2) + 192 via a pxor and two pavgbs.
148
+ ; q0 - p0 is split into a non-negative and non-positive part. The latter is
149
+ ; subtracted from the biased value.
150
+ movdqa %7, %2
151
+ psubusb %7, %3 ; clip(p0 - q0, 0, 255)
152
+ ; ((p1 - q1) >> 2) + 0xc0
153
+ pxor %4, %6 ; q1 ^ 0xff aka -q1 - 1 & 0xff
154
+ pavgb %1, %4 ; (((p1 - q1 + 0x100) >> 1)
155
+ pavgb %1, %6 ; + 0x100) >> 1
156
+ psubusb %1, %7 ; -= clip(p0 - q0, 0, 255) saturate.
157
+ movdqa %8, %3
158
+ psubusb %8, %2 ; (clip(q0 - p0, 0, 255)
159
+ pavgb %8, %1 ; + clip(((p1 - q1 + 0x300) >> 2) - clip(p0 - q0, 0, 255), 0, 255) + 1) >> 1
160
+
161
+ ; Unbias and split into a non-negative and a non-positive part.
162
+ ; Clip each part to iTc via minub.
163
+ ; Add/subtract each part to/from p0/q0 and clip.
164
+ movdqa %6, [pic(WELS_DB96_16)]
165
+ psubusb %6, %8
166
+ psubusb %8, [pic(WELS_DB96_16)]
167
+ pminub %6, %5
168
+ pminub %8, %5
169
+ psubusb %2, %6
170
+ paddusb %2, %8 ; p0
171
+ paddusb %3, %6
172
+ psubusb %3, %8 ; q0
173
+ %endmacro
174
+
175
+
176
+ ;*******************************************************************************
177
+ ; void DeblockLumaLt4V_ssse3(uint8_t * pPix, int32_t iStride, int32_t iAlpha,
178
+ ; int32_t iBeta, int8_t * pTC)
179
+ ;*******************************************************************************
180
+
181
+ WELS_EXTERN DeblockLumaLt4V_ssse3
182
+ %assign push_num 0
183
+ INIT_X86_32_PIC r5
184
+ LOAD_5_PARA
185
+ PUSH_XMM 8
186
+ SIGN_EXTENSION r1, r1d
187
+ movd xmm1, arg3d
188
+ movd xmm2, arg4d
189
+ pxor xmm3, xmm3
190
+ pxor xmm1, [pic(WELS_DB127_16)]
191
+ pxor xmm2, [pic(WELS_DB127_16)]
192
+ pshufb xmm1, xmm3 ; iAlpha ^ 0x7f
193
+ pshufb xmm2, xmm3 ; iBeta ^ 0x7f
194
+ mov r2, r1 ; iStride
195
+ neg r1 ; -iStride
196
+ lea r3, [r0 + r1] ; pPix - iStride
197
+
198
+ ; Compute masks to enable/disable deblocking.
199
+ MOVDQ xmm6, [r3 + 0 * r1] ; p0
200
+ MOVDQ xmm7, [r3 + 1 * r1] ; p1
201
+ MOVDQ xmm0, [r0 + 0 * r2] ; q0
202
+ movdqa xmm4, xmm6
203
+ SSE2_AbsDiffUB xmm6, xmm0, xmm3 ; |p0 - q0|
204
+ SSE2_CmpltUB xmm6, xmm1, [pic(WELS_DB127_16)] ; bDeltaP0Q0 = |p0 - q0| < iAlpha
205
+ MOVDQ xmm1, [r0 + 1 * r2] ; q1
206
+ SSE2_AbsDiffUB xmm7, xmm4, xmm3 ; |p1 - p0|
207
+ SSE2_AbsDiffUB xmm0, xmm1, xmm3 ; |q1 - q0|
208
+ pmaxub xmm7, xmm0 ; max(|p1 - p0|, |q1 - q0|)
209
+ SSE2_CmpltUB xmm7, xmm2, [pic(WELS_DB127_16)] ; bDeltaP1P0 & bDeltaQ1Q0 = max(|p1 - p0|, |q1 - q0|) < iBeta
210
+ pand xmm6, xmm7 ; bDeltaP0Q0P1P0Q1Q0 = bDeltaP0Q0 & bDeltaP1P0 & bDeltaQ1Q0
211
+ MOVDQ xmm7, [r3 + 2 * r1] ; p2
212
+ movdqa xmm0, xmm7
213
+ SSE2_AbsDiffUB xmm7, xmm4, xmm3 ; |p2 - p0|
214
+ SSE2_CmpltUB xmm7, xmm2, [pic(WELS_DB127_16)] ; bDeltaP2P0 = |p2 - p0| < iBeta
215
+ MOVDQ xmm5, [r0 + 2 * r2] ; q2
216
+ MOVDQ xmm3, [r0 + 0 * r2] ; q0
217
+ movdqa xmm1, xmm5
218
+ SSE2_AbsDiffUB xmm5, xmm3, xmm4 ; |q2 - q0|
219
+ SSE2_CmpltUB xmm5, xmm2, [pic(WELS_DB127_16)] ; bDeltaQ2Q0 = |q2 - q0| < iBeta
220
+
221
+ pavgb xmm3, [r3 + 0 * r1]
222
+ pcmpeqw xmm2, xmm2 ; FFh
223
+ pxor xmm3, xmm2
224
+ ; (p2 + ((p0 + q0 + 1) >> 1)) >> 1
225
+ pxor xmm0, xmm2
226
+ pavgb xmm0, xmm3
227
+ pxor xmm0, xmm2
228
+ ; (q2 + ((p0 + q0 + 1) >> 1)) >> 1
229
+ pxor xmm1, xmm2
230
+ pavgb xmm1, xmm3
231
+ pxor xmm1, xmm2
232
+
233
+ movd xmm3, [r4]
234
+ pshufb xmm3, [pic(WELS_SHUFB0000111122223333)] ; iTc
235
+ movdqa xmm4, xmm3 ; iTc0 = iTc
236
+ pcmpgtb xmm3, xmm2 ; iTc > -1 ? 0xff : 0x00
237
+ pand xmm6, xmm3 ; bDeltaP0Q0P1P0Q1Q0 &= iTc > -1
238
+ movdqa xmm3, xmm4
239
+ psubb xmm3, xmm7 ; iTc -= bDeltaP2P0 ? -1 : 0
240
+ psubb xmm3, xmm5 ; iTc -= bDeltaQ2Q0 ? -1 : 0
241
+ pand xmm3, xmm6 ; iTc &= bDeltaP0Q0P1P0Q1Q0 ? 0xff : 0
242
+ pand xmm7, xmm6 ; bDeltaP2P0 &= bDeltaP0Q0P1P0Q1Q0
243
+ pand xmm5, xmm6 ; bDeltaQ2Q0 &= bDeltaP0Q0P1P0Q1Q0
244
+ pand xmm7, xmm4 ; iTc0 & (bDeltaP2P0 ? 0xff : 0)
245
+ pand xmm5, xmm4 ; iTc0 & (bDeltaQ2Q0 ? 0xff : 0)
246
+
247
+ MOVDQ xmm4, [r3 + 1 * r1]
248
+ SSE2_ClipUB xmm0, xmm4, xmm7, xmm6 ; clip p1.
249
+ MOVDQ xmm6, [r0 + 1 * r2]
250
+ MOVDQ [r3 + 1 * r1], xmm0 ; store p1.
251
+ SSE2_ClipUB xmm1, xmm6, xmm5, xmm7 ; clip q1.
252
+ MOVDQ [r0 + 1 * r2], xmm1 ; store q1.
253
+
254
+ MOVDQ xmm1, [r3 + 0 * r1] ; p0
255
+ MOVDQ xmm0, [r0 + 0 * r2] ; q0
256
+ SSE2_DeblockP0Q0_Lt4 xmm4, xmm1, xmm0, xmm6, xmm3, xmm2, xmm5, xmm7
257
+ MOVDQ [r3 + 0 * r1], xmm1 ; store p0.
258
+ MOVDQ [r0 + 0 * r2], xmm0 ; store q0.
259
+
260
+ POP_XMM
261
+ LOAD_5_PARA_POP
262
+ DEINIT_X86_32_PIC
263
+ ret
264
+
265
+
266
+ ; Deblock 3x16 luma pixels for the eq4 case.
267
+ ;
268
+ ; Compose 8-bit averages from pavgbs. Ie. (p1 + p0 + p2 + q0 + 2) >> 2 can be
269
+ ; written as (((p1 + p0) >> 1) + ((p2 + q0 + (p1 ^ p0 & 1)) >> 1) + 1) >> 1,
270
+ ; which maps to 3 pavgbs.
271
+ ;
272
+ ; pPix=%1 iStride=%2 [in:q0,out:p0]=%3 [in:q1,out:p1]=%4 bDeltaP0Q0P1P0Q1Q0=%5 bDeltaP2P0=%6 clobber=%7,%8,%9,%10 preserve_p0p1=%11 db1=%12
273
+ %macro SSE2_DeblockLumaEq4_3x16P 12
274
+ movdqa %7, %3
275
+ movdqa %8, %6
276
+ MOVDQ %10, [%1 + 1 * %2] ; p1
277
+ SSE2_Blend %7, %10, %8 ; t0 = bDeltaP2P0 ? q0 : p1
278
+ movdqa %8, %6
279
+ MOVDQ %9, [%1 + 2 * %2] ; p2
280
+ SSE2_Blend %9, %4, %8 ; t1 = bDeltaP2P0 ? p2 : q1
281
+ SSE2_AvgbFloor1 %4, %9, %12, %8 ; t1 = (t1 + q1) >> 1
282
+ SSE2_AvgbFloor1 %10, [%1], %12, %8 ; (p0 + p1) >> 1, p0 ^ p1
283
+ pxor %8, %12
284
+ SSE2_AvgbFloor1 %7, %4, %8, %9 ; (t0 + t1 + (p0 ^ p1 & 1)) >> 1
285
+ MOVDQ %9, [%1 + 2 * %2] ; p2
286
+ SSE2_AvgbFloor1 %3, %9, %8, %4 ; (p2 + q0 + (p0 ^ p1 & 1)) >> 1
287
+ pavgb %7, %10 ; p0' = (p0 + p1 + t0 + t1 + 2) >> 2
288
+ movdqa %8, %10
289
+ pxor %8, %3 ; (p0 + p1) >> 1 ^ (p2 + q0 + (p0 ^ p1 & 1)) >> 1
290
+ pand %8, %12 ; & 1
291
+ pavgb %10, %3 ; p1' = (p0 + p1 + p2 + q0 + 2) >> 2
292
+ pand %6, %5 ; bDeltaP2P0 &= bDeltaP0Q0P1P0Q1Q0
293
+ %if %11
294
+ MOVDQ %3, [%1 + 0 * %2] ; p0
295
+ movdqa %4, %5
296
+ SSE2_Blend %7, %3, %4 ; p0out = bDeltaP0Q0P1P0Q1Q0 ? p0' : p0
297
+ %else
298
+ SSE2_Blend %7, [%1 + 0 * %2], %5 ; p0out = bDeltaP0Q0P1P0Q1Q0 ? p0' : p0
299
+ %endif
300
+ MOVDQ [%1 + 0 * %2], %7 ; store p0
301
+ add %1, %2
302
+ movdqa %7, %10
303
+ psubb %10, %8 ; (p0 + p1 + p2 + q0) >> 2
304
+ psubb %8, %12
305
+ MOVDQ %4, [%1 + (3 - 1) * %2] ; p3
306
+ SSE2_AvgbFloor2 %4, %9, %8 ; (p2 + p3 + ((p0 + p1) >> 1 ^ (p2 + q0 + (p0 ^ p1 & 1)) >> 1 & 1)) >> 1
307
+ pavgb %10, %4 ; p2' = (((p0 + p1 + p2 + q0) >> 1) + p2 + p3 + 2) >> 2
308
+ movdqa %8, %6
309
+ SSE2_Blend %10, [%1 + (2 - 1) * %2], %8 ; p2out = bDeltaP2P0 ? p2' : p2
310
+ MOVDQ [%1 + (2 - 1) * %2], %10 ; store p2
311
+ %if %11
312
+ MOVDQ %4, [%1 + (1 - 1) * %2] ; p1
313
+ SSE2_Blend %7, %4, %6 ; p1out = bDeltaP2P0 ? p1' : p1
314
+ %else
315
+ SSE2_Blend %7, [%1 + (1 - 1) * %2], %6 ; p1out = bDeltaP2P0 ? p1' : p1
316
+ %endif
317
+ MOVDQ [%1 + (1 - 1) * %2], %7 ; store p1
318
+ %endmacro
319
+
320
+
321
+ ;*******************************************************************************
322
+ ; void DeblockLumaEq4V_ssse3(uint8_t * pPix, int32_t iStride, int32_t iAlpha,
323
+ ; int32_t iBeta)
324
+ ;*******************************************************************************
325
+
326
+ WELS_EXTERN DeblockLumaEq4V_ssse3
327
+ %assign push_num 0
328
+ INIT_X86_32_PIC r4
329
+ LOAD_4_PARA
330
+ PUSH_XMM 10
331
+ SIGN_EXTENSION r1, r1d
332
+ movd xmm1, arg3d
333
+ movd xmm2, arg4d
334
+ shr r2, 2
335
+ add r2, 1
336
+ movd xmm3, r2d
337
+ pxor xmm4, xmm4
338
+ pxor xmm1, [pic(WELS_DB127_16)]
339
+ pxor xmm2, [pic(WELS_DB127_16)]
340
+ pshufb xmm1, xmm4 ; iAlpha ^ 0x7f
341
+ pshufb xmm2, xmm4 ; iBeta ^ 0x7f
342
+ pshufb xmm3, xmm4 ; (iAlpha >> 2) + 1
343
+ mov r2, r1 ; iStride
344
+ neg r1 ; -iStride
345
+ lea r3, [r0 + r1] ; pPix - iStride
346
+
347
+ ; Compute masks to enable/disable filtering.
348
+ MOVDQ xmm7, [r3 + 1 * r1] ; p1
349
+ MOVDQ xmm6, [r3 + 0 * r1] ; p0
350
+ MOVDQ xmm0, [r0 + 0 * r2] ; q0
351
+ movdqa xmm4, xmm6
352
+ SSE2_AbsDiffUB xmm6, xmm0, xmm5 ; |p0 - q0|
353
+ SSE2_CmpgeUB xmm3, xmm6 ; |p0 - q0| < (iAlpha >> 2) + 2
354
+ SSE2_CmpltUB xmm6, xmm1, [pic(WELS_DB127_16)] ; bDeltaP0Q0 = |p0 - q0| < iAlpha
355
+ MOVDQ xmm1, [r0 + 1 * r2] ; q1
356
+ SSE2_AbsDiffUB xmm7, xmm4, xmm5 ; |p1 - p0|
357
+ SSE2_AbsDiffUB xmm0, xmm1, xmm5 ; |q1 - q0|
358
+ pmaxub xmm7, xmm0 ; max(|p1 - p0|, |q1 - q0|)
359
+ SSE2_CmpltUB xmm7, xmm2, [pic(WELS_DB127_16)] ; bDeltaP1P0 & bDeltaQ1Q0 = max(|p1 - p0|, |q1 - q0|) < iBeta
360
+ pand xmm6, xmm7 ; & bDeltaP0Q0
361
+
362
+ MOVDQ xmm7, [r3 + 2 * r1] ; p2
363
+ SSE2_AbsDiffUB xmm7, xmm4, xmm5 ; |p2 - p0|
364
+ SSE2_CmpltUB xmm7, xmm2, [pic(WELS_DB127_16)] ; bDeltaP2P0 = |p2 - p0| < iBeta
365
+ pand xmm7, xmm3 ; &= |p0 - q0| < (iAlpha >> 2) + 2
366
+
367
+ MOVDQ xmm0, [r0 + 0 * r2] ; q0
368
+ MOVDQ xmm5, [r0 + 2 * r2] ; q2
369
+ SSE2_AbsDiffUB xmm5, xmm0, xmm4 ; |q2 - q0|
370
+ SSE2_CmpltUB xmm5, xmm2, [pic(WELS_DB127_16)] ; bDeltaQ2Q0 = |q2 - q0| < iBeta
371
+ pand xmm5, xmm3 ; &= |p0 - q0| < (iAlpha >> 2) + 2
372
+
373
+ %ifdef X86_32
374
+ ; Push xmm5 to free up one register. Align stack so as to ensure that failed
375
+ ; store forwarding penalty cannot occur (up to ~50 cycles for 128-bit on IVB).
376
+ mov r2, esp
377
+ sub esp, 16
378
+ and esp, -16
379
+ movdqa [esp], xmm5
380
+ SSE2_DeblockLumaEq4_3x16P r3, r1, xmm0, xmm1, xmm6, xmm7, xmm2, xmm3, xmm5, xmm4, 1, [pic(WELS_DB1_16)]
381
+ movdqa xmm5, [esp]
382
+ mov esp, r2
383
+ neg r1
384
+ SSE2_DeblockLumaEq4_3x16P r0, r1, xmm0, xmm1, xmm6, xmm5, xmm2, xmm3, xmm7, xmm4, 0, [pic(WELS_DB1_16)]
385
+ %else
386
+ movdqa xmm9, [WELS_DB1_16]
387
+ SSE2_DeblockLumaEq4_3x16P r3, r1, xmm0, xmm1, xmm6, xmm7, xmm2, xmm3, xmm8, xmm4, 1, xmm9
388
+ SSE2_DeblockLumaEq4_3x16P r0, r2, xmm0, xmm1, xmm6, xmm5, xmm2, xmm3, xmm7, xmm4, 0, xmm9
389
+ %endif
390
+
391
+ POP_XMM
392
+ LOAD_4_PARA_POP
393
+ DEINIT_X86_32_PIC
394
+ ret
395
+
396
+
397
+ ; [out:p1,p0,q0,q1]=%1,%2,%3,%4 pPixCb=%5 pPixCr=%6 iStride=%7 3*iStride-1=%8 xmmclobber=%9,%10,%11
398
+ %macro SSE2_LoadCbCr_4x16H 11
399
+ movd %1, [%5 + 0 * %7 - 2] ; [p1,p0,q0,q1] cb line 0
400
+ movd %2, [%5 + 2 * %7 - 2] ; [p1,p0,q0,q1] cb line 2
401
+ punpcklbw %1, %2 ; [p1,p1,p0,p0,q0,q0,q1,q1] cb line 0,2
402
+ movd %2, [%5 + 4 * %7 - 2] ; [p1,p0,q0,q1] cb line 4
403
+ movd %9, [%5 + 2 * %8] ; [p1,p0,q0,q1] cb line 6
404
+ punpcklbw %2, %9 ; [p1,p1,p0,p0,q0,q0,q1,q1] cb line 4,6
405
+ punpcklwd %1, %2 ; [p1,p1,p1,p1,p0,p0,p0,p0,q0,q0,q0,q0,q1,q1,q1,q1] cb line 0,2,4,6
406
+ movd %2, [%6 + 0 * %7 - 2] ; [p1,p0,q0,q1] cr line 0
407
+ movd %9, [%6 + 2 * %7 - 2] ; [p1,p0,q0,q1] cr line 2
408
+ punpcklbw %2, %9 ; [p1,p1,p0,p0,q0,q0,q1,q1] cr line 0,2
409
+ movd %9, [%6 + 4 * %7 - 2] ; [p1,p0,q0,q1] cr line 4
410
+ movd %10, [%6 + 2 * %8] ; [p1,p0,q0,q1] cr line 6
411
+ punpcklbw %9, %10 ; [p1,p1,p0,p0,q0,q0,q1,q1] cr line 4,6
412
+ punpcklwd %2, %9 ; [p1,p1,p1,p1,p0,p0,p0,p0,q0,q0,q0,q0,q1,q1,q1,q1] cr line 0,2,4,6
413
+ add %5, %7 ; pPixCb += iStride
414
+ add %6, %7 ; pPixCr += iStride
415
+ movd %9, [%5 + 0 * %7 - 2] ; [p1,p0,q0,q1] cb line 1
416
+ movd %10, [%5 + 2 * %7 - 2] ; [p1,p0,q0,q1] cb line 3
417
+ punpcklbw %9, %10 ; [p1,p1,p0,p0,q0,q0,q1,q1] cb line 1,3
418
+ movd %10, [%5 + 4 * %7 - 2] ; [p1,p0,q0,q1] cb line 5
419
+ movd %3, [%5 + 2 * %8] ; [p1,p0,q0,q1] cb line 7
420
+ punpcklbw %10, %3 ; [p1,p1,p0,p0,q0,q0,q1,q1] cb line 5,7
421
+ punpcklwd %9, %10 ; [p1,p1,p1,p1,p0,p0,p0,p0,q0,q0,q0,q0,q1,q1,q1,q1] cb line 1,3,5,7
422
+ movd %10, [%6 + 0 * %7 - 2] ; [p1,p0,q0,q1] cr line 1
423
+ movd %3, [%6 + 2 * %7 - 2] ; [p1,p0,q0,q1] cr line 3
424
+ punpcklbw %10, %3 ; [p1,p1,p0,p0,q0,q0,q1,q1] cr line 1,3
425
+ movd %3, [%6 + 4 * %7 - 2] ; [p1,p0,q0,q1] cr line 5
426
+ movd %4, [%6 + 2 * %8] ; [p1,p0,q0,q1] cr line 7
427
+ punpcklbw %3, %4 ; [p1,p1,p0,p0,q0,q0,q1,q1] cr line 5,7
428
+ punpcklwd %10, %3 ; [p1,p1,p1,p1,p0,p0,p0,p0,q0,q0,q0,q0,q1,q1,q1,q1] cr line 1,3,5,7
429
+ movdqa %3, %1
430
+ punpckldq %1, %2 ; [p1,p1,p1,p1,p1,p1,p1,p1,p0,p0,p0,p0,p0,p0,p0,p0] cb/cr line 0,2,4,6
431
+ punpckhdq %3, %2 ; [q0,q0,q0,q0,q0,q0,q0,q0,q1,q1,q1,q1,q1,q1,q1,q1] cb/cr line 0,2,4,6
432
+ movdqa %11, %9
433
+ punpckldq %9, %10 ; [p1,p1,p1,p1,p1,p1,p1,p1,p0,p0,p0,p0,p0,p0,p0,p0] cb/cr line 1,3,5,7
434
+ punpckhdq %11, %10 ; [q0,q0,q0,q0,q0,q0,q0,q0,q1,q1,q1,q1,q1,q1,q1,q1] cb/cr line 1,3,5,7
435
+ movdqa %2, %1
436
+ punpcklqdq %1, %9 ; [p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1] cb/cr line 0,2,4,6,1,3,5,7
437
+ punpckhqdq %2, %9 ; [p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0,p0] cb/cr line 0,2,4,6,1,3,5,7
438
+ movdqa %4, %3
439
+ punpcklqdq %3, %11 ; [q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0,q0] cb/cr line 0,2,4,6,1,3,5,7
440
+ punpckhqdq %4, %11 ; [q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1,q1] cb/cr line 0,2,4,6,1,3,5,7
441
+ %endmacro
442
+
443
+ ; pPixCb+iStride=%1 pPixCr+iStride=%2 iStride=%3 3*iStride-1=%4 p0=%5 q0=%6 rclobber=%7 dwclobber={%8,%9} xmmclobber=%10
444
+ %macro SSE2_StoreCbCr_4x16H 10
445
+ movdqa %10, %5
446
+ punpcklbw %10, %6 ; [p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0] cb/cr line 0,2,4,6
447
+ punpckhbw %5, %6 ; [p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0] cb/cr line 1,3,5,7
448
+ mov %7, r7 ; preserve stack pointer
449
+ and r7, -16 ; align stack pointer
450
+ sub r7, 32 ; allocate stack space
451
+ movdqa [r7 ], %10 ; store [p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0] cb/cr line 0,2,4,6 on the stack
452
+ movdqa [r7 + 16], %5 ; store [p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0,p0,q0] cb/cr line 1,3,5,7 on the stack
453
+ mov %8, [r7 + 16] ; [p0,q0,p0,q0] cb line 1,3
454
+ mov [%1 + 0 * %3 - 1], %9 ; store [p0,q0] cb line 1
455
+ shr %8, 16 ; [p0,q0] cb line 3
456
+ mov [%1 + 2 * %3 - 1], %9 ; store [p0,q0] cb line 3
457
+ mov %8, [r7 + 20] ; [p0,q0,p0,q0] cb line 5,7
458
+ mov [%1 + 4 * %3 - 1], %9 ; store [p0,q0] cb line 5
459
+ shr %8, 16 ; [p0,q0] cb line 7
460
+ mov [%1 + 2 * %4 + 1], %9 ; store [p0,q0] cb line 7
461
+ mov %8, [r7 + 24] ; [p0,q0,p0,q0] cr line 1,3
462
+ mov [%2 + 0 * %3 - 1], %9 ; store [p0,q0] cr line 1
463
+ shr %8, 16 ; [p0,q0] cr line 3
464
+ mov [%2 + 2 * %3 - 1], %9 ; store [p0,q0] cr line 3
465
+ mov %8, [r7 + 28] ; [p0,q0,p0,q0] cr line 5,7
466
+ mov [%2 + 4 * %3 - 1], %9 ; store [p0,q0] cr line 5
467
+ shr %8, 16 ; [p0,q0] cr line 7
468
+ mov [%2 + 2 * %4 + 1], %9 ; store [p0,q0] cr line 7
469
+ sub %1, %3 ; pPixCb -= iStride
470
+ sub %2, %3 ; pPixCr -= iStride
471
+ mov %8, [r7 ] ; [p0,q0,p0,q0] cb line 0,2
472
+ mov [%1 + 0 * %3 - 1], %9 ; store [p0,q0] cb line 0
473
+ shr %8, 16 ; [p0,q0] cb line 2
474
+ mov [%1 + 2 * %3 - 1], %9 ; store [p0,q0] cb line 2
475
+ mov %8, [r7 + 4] ; [p0,q0,p0,q0] cb line 4,6
476
+ mov [%1 + 4 * %3 - 1], %9 ; store [p0,q0] cb line 4
477
+ shr %8, 16 ; [p0,q0] cb line 6
478
+ mov [%1 + 2 * %4 + 1], %9 ; store [p0,q0] cb line 6
479
+ mov %8, [r7 + 8] ; [p0,q0,p0,q0] cr line 0,2
480
+ mov [%2 + 0 * %3 - 1], %9 ; store [p0,q0] cr line 0
481
+ shr %8, 16 ; [p0,q0] cr line 2
482
+ mov [%2 + 2 * %3 - 1], %9 ; store [p0,q0] cr line 2
483
+ mov %8, [r7 + 12] ; [p0,q0,p0,q0] cr line 4,6
484
+ mov [%2 + 4 * %3 - 1], %9 ; store [p0,q0] cr line 4
485
+ shr %8, 16 ; [p0,q0] cr line 6
486
+ mov [%2 + 2 * %4 + 1], %9 ; store [p0,q0] cr line 6
487
+ mov r7, %7 ; restore stack pointer
488
+ %endmacro
489
+
490
+ ; p1=%1 p0=%2 q0=%3 q1=%4 iAlpha=%5 iBeta=%6 pTC=%7 xmmclobber=%8,%9,%10 interleaveTC=%11
491
+ %macro SSSE3_DeblockChromaLt4 11
492
+ movdqa %8, %3
493
+ SSE2_AbsDiffUB %8, %2, %9 ; |p0 - q0|
494
+ SSE2_CmpgeUB %8, %5 ; !bDeltaP0Q0 = |p0 - q0| >= iAlpha
495
+ movdqa %9, %4
496
+ SSE2_AbsDiffUB %9, %3, %5 ; |q1 - q0|
497
+ movdqa %10, %1
498
+ SSE2_AbsDiffUB %10, %2, %5 ; |p1 - p0|
499
+ pmaxub %9, %10 ; max(|q1 - q0|, |p1 - p0|)
500
+ pxor %10, %10
501
+ movd %5, %6
502
+ pshufb %5, %10 ; iBeta
503
+ SSE2_CmpgeUB %9, %5 ; !bDeltaQ1Q0 | !bDeltaP1P0 = max(|q1 - q0|, |p1 - p0|) >= iBeta
504
+ por %8, %9 ; | !bDeltaP0Q0
505
+ movd %5, [%7]
506
+ %if %11
507
+ punpckldq %5, %5
508
+ punpcklbw %5, %5 ; iTc
509
+ %else
510
+ pshufd %5, %5, 0 ; iTc
511
+ %endif
512
+ pcmpeqw %10, %10 ; FFh
513
+ movdqa %9, %5
514
+ pcmpgtb %9, %10 ; iTc > -1 ? FFh : 00h
515
+ pandn %8, %5 ; iTc & bDeltaP0Q0 & bDeltaP1P0 & bDeltaQ1Q0
516
+ pand %8, %9 ; &= (iTc > -1 ? FFh : 00h)
517
+ SSE2_DeblockP0Q0_Lt4 %1, %2, %3, %4, %8, %10, %5, %9
518
+ %endmacro
519
+
520
+ ; p1=%1 p0=%2 q0=%3 q1=%4 iAlpha=%5 iBeta=%6 xmmclobber=%7,%8,%9
521
+ %macro SSSE3_DeblockChromaEq4 9
522
+ movdqa %7, %3
523
+ SSE2_AbsDiffUB %7, %2, %8 ; |p0 - q0|
524
+ SSE2_CmpgeUB %7, %5 ; !bDeltaP0Q0 = |p0 - q0| >= iAlpha
525
+ movdqa %8, %4
526
+ SSE2_AbsDiffUB %8, %3, %5 ; |q1 - q0|
527
+ movdqa %9, %1
528
+ SSE2_AbsDiffUB %9, %2, %5 ; |p1 - p0|
529
+ pmaxub %8, %9 ; max(|q1 - q0|, |p1 - p0|)
530
+ pxor %9, %9
531
+ movd %5, %6
532
+ pshufb %5, %9 ; iBeta
533
+ SSE2_CmpgeUB %8, %5 ; !bDeltaQ1Q0 | !bDeltaP1P0 = max(|q1 - q0|, |p1 - p0|) >= iBeta
534
+ por %7, %8 ; !bDeltaP0Q0P1P0Q1Q0 = !bDeltaP0Q0 | !bDeltaQ1Q0 | !bDeltaP1P0
535
+ WELS_DB1 %5
536
+ movdqa %8, %2
537
+ SSE2_AvgbFloor1 %8, %4, %5, %9 ; (p0 + q1) >> 1
538
+ pavgb %8, %1 ; p0' = (p1 + ((p0 + q1) >> 1) + 1) >> 1
539
+ movdqa %9, %7
540
+ SSE2_Blend %2, %8, %7 ; p0out = bDeltaP0Q0P1P0Q1Q0 ? p0' : p0
541
+ SSE2_AvgbFloor1 %1, %3, %5, %7 ; (q0 + p1) >> 1
542
+ pavgb %1, %4 ; q0' = (q1 + ((q0 + p1) >> 1) + 1) >> 1
543
+ SSE2_Blend %3, %1, %9 ; q0out = bDeltaP0Q0P1P0Q1Q0 ? q0' : q0
544
+ %endmacro
545
+
546
+
547
+ ;******************************************************************************
548
+ ; void DeblockChromaLt4V_ssse3(uint8_t * pPixCb, uint8_t * pPixCr, int32_t iStride,
549
+ ; int32_t iAlpha, int32_t iBeta, int8_t * pTC);
550
+ ;*******************************************************************************
551
+
552
+ WELS_EXTERN DeblockChromaLt4V_ssse3
553
+ %assign push_num 0
554
+ INIT_X86_32_PIC r4
555
+ LOAD_4_PARA
556
+ PUSH_XMM 8
557
+ SIGN_EXTENSION r2, r2d
558
+ movd xmm7, arg4d
559
+ pxor xmm0, xmm0
560
+ pshufb xmm7, xmm0 ; iAlpha
561
+ mov r3, r2
562
+ neg r3 ; -iStride
563
+
564
+ movq xmm0, [r0 + 0 * r2] ; q0 cb
565
+ movhps xmm0, [r1 + 0 * r2] ; q0 cr
566
+ movq xmm2, [r0 + 1 * r3] ; p0 cb
567
+ movhps xmm2, [r1 + 1 * r3] ; p0 cr
568
+ movq xmm1, [r0 + 1 * r2] ; q1 cb
569
+ movhps xmm1, [r1 + 1 * r2] ; q1 cr
570
+ movq xmm3, [r0 + 2 * r3] ; p1 cb
571
+ movhps xmm3, [r1 + 2 * r3] ; p1 cr
572
+
573
+ %ifidni arg6, r5
574
+ SSSE3_DeblockChromaLt4 xmm3, xmm2, xmm0, xmm1, xmm7, arg5d, arg6, xmm4, xmm5, xmm6, 1
575
+ %else
576
+ mov r2, arg6
577
+ SSSE3_DeblockChromaLt4 xmm3, xmm2, xmm0, xmm1, xmm7, arg5d, r2, xmm4, xmm5, xmm6, 1
578
+ %endif
579
+
580
+ movlps [r0 + 1 * r3], xmm2 ; store p0 cb
581
+ movhps [r1 + 1 * r3], xmm2 ; store p0 cr
582
+ movlps [r0 ], xmm0 ; store q0 cb
583
+ movhps [r1 ], xmm0 ; store q0 cr
584
+
585
+ POP_XMM
586
+ LOAD_4_PARA_POP
587
+ DEINIT_X86_32_PIC
588
+ ret
589
+
590
+
591
+ ;********************************************************************************
592
+ ; void DeblockChromaEq4V_ssse3(uint8_t * pPixCb, uint8_t * pPixCr, int32_t iStride,
593
+ ; int32_t iAlpha, int32_t iBeta)
594
+ ;********************************************************************************
595
+
596
+ WELS_EXTERN DeblockChromaEq4V_ssse3
597
+ %assign push_num 0
598
+ LOAD_4_PARA
599
+ PUSH_XMM 8
600
+ SIGN_EXTENSION r2, r2d
601
+ movd xmm7, arg4d
602
+ pxor xmm0, xmm0
603
+ pshufb xmm7, xmm0 ; iAlpha
604
+ mov r3, r2
605
+ neg r3 ; -iStride
606
+
607
+ movq xmm0, [r0 + 0 * r2] ; q0 cb
608
+ movhps xmm0, [r1 + 0 * r2] ; q0 cr
609
+ movq xmm2, [r0 + 1 * r3] ; p0 cb
610
+ movhps xmm2, [r1 + 1 * r3] ; p0 cr
611
+ movq xmm1, [r0 + 1 * r2] ; q1 cb
612
+ movhps xmm1, [r1 + 1 * r2] ; q1 cr
613
+ movq xmm3, [r0 + 2 * r3] ; p1 cb
614
+ movhps xmm3, [r1 + 2 * r3] ; p1 cr
615
+
616
+ SSSE3_DeblockChromaEq4 xmm3, xmm2, xmm0, xmm1, xmm7, arg5d, xmm4, xmm5, xmm6
617
+
618
+ movlps [r0 + 1 * r3], xmm2 ; store p0 cb
619
+ movhps [r1 + 1 * r3], xmm2 ; store p0 cr
620
+ movlps [r0 + 0 * r2], xmm0 ; store q0 cb
621
+ movhps [r1 + 0 * r2], xmm0 ; store q0 cr
622
+
623
+ POP_XMM
624
+ LOAD_4_PARA_POP
625
+ ret
626
+
627
+
628
+ ;*******************************************************************************
629
+ ; void DeblockChromaLt4H_ssse3(uint8_t * pPixCb, uint8_t * pPixCr, int32_t iStride,
630
+ ; int32_t iAlpha, int32_t iBeta, int8_t * pTC);
631
+ ;*******************************************************************************
632
+
633
+ WELS_EXTERN DeblockChromaLt4H_ssse3
634
+ %assign push_num 0
635
+ LOAD_6_PARA
636
+ PUSH_XMM 8
637
+ SIGN_EXTENSION r2, r2d
638
+ movd xmm7, arg4d
639
+ pxor xmm0, xmm0
640
+ pshufb xmm7, xmm0 ; iAlpha
641
+ lea r3, [3 * r2 - 1] ; 3 * iStride - 1
642
+
643
+ SSE2_LoadCbCr_4x16H xmm0, xmm1, xmm4, xmm5, r0, r1, r2, r3, xmm2, xmm3, xmm6
644
+ INIT_X86_32_PIC r1
645
+ SSSE3_DeblockChromaLt4 xmm0, xmm1, xmm4, xmm5, xmm7, arg5d, r5, xmm2, xmm3, xmm6, 0
646
+ DEINIT_X86_32_PIC
647
+ SSE2_StoreCbCr_4x16H r0, r1, r2, r3, xmm1, xmm4, r5, r4d, r4w, xmm0
648
+
649
+ POP_XMM
650
+ LOAD_6_PARA_POP
651
+ ret
652
+
653
+
654
+ ;***************************************************************************
655
+ ; void DeblockChromaEq4H_ssse3(uint8_t * pPixCb, uint8_t * pPixCr, int32_t iStride,
656
+ ; int32_t iAlpha, int32_t iBeta)
657
+ ;***************************************************************************
658
+
659
+ WELS_EXTERN DeblockChromaEq4H_ssse3
660
+ %assign push_num 0
661
+ LOAD_4_PARA
662
+ PUSH_XMM 8
663
+ SIGN_EXTENSION r2, r2d
664
+ movd xmm7, arg4d
665
+ pxor xmm0, xmm0
666
+ pshufb xmm7, xmm0 ; iAlpha
667
+ lea r3, [3 * r2 - 1] ; 3 * iStride - 1
668
+
669
+ SSE2_LoadCbCr_4x16H xmm0, xmm1, xmm4, xmm5, r0, r1, r2, r3, xmm2, xmm3, xmm6
670
+ SSSE3_DeblockChromaEq4 xmm0, xmm1, xmm4, xmm5, xmm7, arg5d, xmm2, xmm3, xmm6
671
+ %ifdef X86_32
672
+ push r4
673
+ push r5
674
+ SSE2_StoreCbCr_4x16H r0, r1, r2, r3, xmm1, xmm4, r5, r4d, r4w, xmm0
675
+ pop r5
676
+ pop r4
677
+ %else
678
+ SSE2_StoreCbCr_4x16H r0, r1, r2, r3, xmm1, xmm4, r5, r4d, r4w, xmm0
679
+ %endif
680
+
681
+ POP_XMM
682
+ LOAD_4_PARA_POP
683
+ ret
684
+
685
+
686
+ ;********************************************************************************
687
+ ;
688
+ ; void DeblockLumaTransposeH2V_sse2(uint8_t * pPixY, int32_t iStride, uint8_t * pDst);
689
+ ;
690
+ ;********************************************************************************
691
+
692
+ WELS_EXTERN DeblockLumaTransposeH2V_sse2
693
+ push r3
694
+ push r4
695
+ push r5
696
+
697
+ %assign push_num 3
698
+ LOAD_3_PARA
699
+ PUSH_XMM 8
700
+
701
+ SIGN_EXTENSION r1, r1d
702
+
703
+ mov r5, r7
704
+ mov r3, r7
705
+ and r3, 0Fh
706
+ sub r7, r3
707
+ sub r7, 10h
708
+
709
+ lea r3, [r0 + r1 * 8]
710
+ lea r4, [r1 * 3]
711
+
712
+ movq xmm0, [r0]
713
+ movq xmm7, [r3]
714
+ punpcklqdq xmm0, xmm7
715
+ movq xmm1, [r0 + r1]
716
+ movq xmm7, [r3 + r1]
717
+ punpcklqdq xmm1, xmm7
718
+ movq xmm2, [r0 + r1*2]
719
+ movq xmm7, [r3 + r1*2]
720
+ punpcklqdq xmm2, xmm7
721
+ movq xmm3, [r0 + r4]
722
+ movq xmm7, [r3 + r4]
723
+ punpcklqdq xmm3, xmm7
724
+
725
+ lea r0, [r0 + r1 * 4]
726
+ lea r3, [r3 + r1 * 4]
727
+ movq xmm4, [r0]
728
+ movq xmm7, [r3]
729
+ punpcklqdq xmm4, xmm7
730
+ movq xmm5, [r0 + r1]
731
+ movq xmm7, [r3 + r1]
732
+ punpcklqdq xmm5, xmm7
733
+ movq xmm6, [r0 + r1*2]
734
+ movq xmm7, [r3 + r1*2]
735
+ punpcklqdq xmm6, xmm7
736
+
737
+ movdqa [r7], xmm0
738
+ movq xmm7, [r0 + r4]
739
+ movq xmm0, [r3 + r4]
740
+ punpcklqdq xmm7, xmm0
741
+ movdqa xmm0, [r7]
742
+
743
+ SSE2_TransTwo8x8B xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, [r7]
744
+ ;pOut: m5, m3, m4, m8, m6, m2, m7, m1
745
+
746
+ movdqa [r2], xmm4
747
+ movdqa [r2 + 10h], xmm2
748
+ movdqa [r2 + 20h], xmm3
749
+ movdqa [r2 + 30h], xmm7
750
+ movdqa [r2 + 40h], xmm5
751
+ movdqa [r2 + 50h], xmm1
752
+ movdqa [r2 + 60h], xmm6
753
+ movdqa [r2 + 70h], xmm0
754
+
755
+ mov r7, r5
756
+ POP_XMM
757
+ pop r5
758
+ pop r4
759
+ pop r3
760
+ ret
761
+
762
+
763
+ ;*******************************************************************************************
764
+ ;
765
+ ; void DeblockLumaTransposeV2H_sse2(uint8_t * pPixY, int32_t iStride, uint8_t * pSrc);
766
+ ;
767
+ ;*******************************************************************************************
768
+
769
+ WELS_EXTERN DeblockLumaTransposeV2H_sse2
770
+ push r3
771
+ push r4
772
+
773
+ %assign push_num 2
774
+ LOAD_3_PARA
775
+ PUSH_XMM 8
776
+
777
+ SIGN_EXTENSION r1, r1d
778
+
779
+ mov r4, r7
780
+ mov r3, r7
781
+ and r3, 0Fh
782
+ sub r7, r3
783
+ sub r7, 10h
784
+
785
+ movdqa xmm0, [r2]
786
+ movdqa xmm1, [r2 + 10h]
787
+ movdqa xmm2, [r2 + 20h]
788
+ movdqa xmm3, [r2 + 30h]
789
+ movdqa xmm4, [r2 + 40h]
790
+ movdqa xmm5, [r2 + 50h]
791
+ movdqa xmm6, [r2 + 60h]
792
+ movdqa xmm7, [r2 + 70h]
793
+
794
+ SSE2_TransTwo8x8B xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, [r7]
795
+ ;pOut: m5, m3, m4, m8, m6, m2, m7, m1
796
+
797
+ lea r2, [r1 * 3]
798
+
799
+ movq [r0], xmm4
800
+ movq [r0 + r1], xmm2
801
+ movq [r0 + r1*2], xmm3
802
+ movq [r0 + r2], xmm7
803
+
804
+ lea r0, [r0 + r1*4]
805
+ movq [r0], xmm5
806
+ movq [r0 + r1], xmm1
807
+ movq [r0 + r1*2], xmm6
808
+ movq [r0 + r2], xmm0
809
+
810
+ psrldq xmm4, 8
811
+ psrldq xmm2, 8
812
+ psrldq xmm3, 8
813
+ psrldq xmm7, 8
814
+ psrldq xmm5, 8
815
+ psrldq xmm1, 8
816
+ psrldq xmm6, 8
817
+ psrldq xmm0, 8
818
+
819
+ lea r0, [r0 + r1*4]
820
+ movq [r0], xmm4
821
+ movq [r0 + r1], xmm2
822
+ movq [r0 + r1*2], xmm3
823
+ movq [r0 + r2], xmm7
824
+
825
+ lea r0, [r0 + r1*4]
826
+ movq [r0], xmm5
827
+ movq [r0 + r1], xmm1
828
+ movq [r0 + r1*2], xmm6
829
+ movq [r0 + r2], xmm0
830
+
831
+
832
+ mov r7, r4
833
+ POP_XMM
834
+ pop r4
835
+ pop r3
836
+ ret
837
+
838
+ WELS_EXTERN WelsNonZeroCount_sse2
839
+ %assign push_num 0
840
+ LOAD_1_PARA
841
+ movdqu xmm0, [r0]
842
+ movq xmm1, [r0+16]
843
+ WELS_DB1 xmm2
844
+ pminub xmm0, xmm2
845
+ pminub xmm1, xmm2
846
+ movdqu [r0], xmm0
847
+ movq [r0+16], xmm1
848
+ ret