image_pack 0.2.0

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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +140 -0
  5. data/THIRD_PARTY_NOTICES.md +8 -0
  6. data/ext/image_pack/extconf.rb +515 -0
  7. data/ext/image_pack/image_pack.c +1618 -0
  8. data/ext/image_pack/vendor/.vendored +1 -0
  9. data/ext/image_pack/vendor/mozjpeg/BUILDING.txt +902 -0
  10. data/ext/image_pack/vendor/mozjpeg/CMakeLists.txt +1593 -0
  11. data/ext/image_pack/vendor/mozjpeg/LICENSE.md +132 -0
  12. data/ext/image_pack/vendor/mozjpeg/README-mozilla.txt +194 -0
  13. data/ext/image_pack/vendor/mozjpeg/README-turbo.txt +346 -0
  14. data/ext/image_pack/vendor/mozjpeg/README.ijg +258 -0
  15. data/ext/image_pack/vendor/mozjpeg/README.md +29 -0
  16. data/ext/image_pack/vendor/mozjpeg/cderror.h +128 -0
  17. data/ext/image_pack/vendor/mozjpeg/cdjpeg.c +156 -0
  18. data/ext/image_pack/vendor/mozjpeg/cdjpeg.h +171 -0
  19. data/ext/image_pack/vendor/mozjpeg/cjpeg.c +961 -0
  20. data/ext/image_pack/vendor/mozjpeg/cmyk.h +60 -0
  21. data/ext/image_pack/vendor/mozjpeg/coderules.txt +78 -0
  22. data/ext/image_pack/vendor/mozjpeg/croptest.in +95 -0
  23. data/ext/image_pack/vendor/mozjpeg/djpeg.c +855 -0
  24. data/ext/image_pack/vendor/mozjpeg/example.txt +464 -0
  25. data/ext/image_pack/vendor/mozjpeg/jaricom.c +157 -0
  26. data/ext/image_pack/vendor/mozjpeg/jcapimin.c +307 -0
  27. data/ext/image_pack/vendor/mozjpeg/jcapistd.c +168 -0
  28. data/ext/image_pack/vendor/mozjpeg/jcarith.c +972 -0
  29. data/ext/image_pack/vendor/mozjpeg/jccoefct.c +609 -0
  30. data/ext/image_pack/vendor/mozjpeg/jccolext.c +144 -0
  31. data/ext/image_pack/vendor/mozjpeg/jccolor.c +721 -0
  32. data/ext/image_pack/vendor/mozjpeg/jcdctmgr.c +1776 -0
  33. data/ext/image_pack/vendor/mozjpeg/jcext.c +219 -0
  34. data/ext/image_pack/vendor/mozjpeg/jchuff.c +1146 -0
  35. data/ext/image_pack/vendor/mozjpeg/jchuff.h +57 -0
  36. data/ext/image_pack/vendor/mozjpeg/jcicc.c +105 -0
  37. data/ext/image_pack/vendor/mozjpeg/jcinit.c +82 -0
  38. data/ext/image_pack/vendor/mozjpeg/jcmainct.c +162 -0
  39. data/ext/image_pack/vendor/mozjpeg/jcmarker.c +844 -0
  40. data/ext/image_pack/vendor/mozjpeg/jcmaster.c +958 -0
  41. data/ext/image_pack/vendor/mozjpeg/jcmaster.h +56 -0
  42. data/ext/image_pack/vendor/mozjpeg/jcomapi.c +109 -0
  43. data/ext/image_pack/vendor/mozjpeg/jconfig.h.in +37 -0
  44. data/ext/image_pack/vendor/mozjpeg/jconfig.txt +93 -0
  45. data/ext/image_pack/vendor/mozjpeg/jconfigint.h.in +44 -0
  46. data/ext/image_pack/vendor/mozjpeg/jcparam.c +991 -0
  47. data/ext/image_pack/vendor/mozjpeg/jcphuff.c +1123 -0
  48. data/ext/image_pack/vendor/mozjpeg/jcprepct.c +351 -0
  49. data/ext/image_pack/vendor/mozjpeg/jcsample.c +522 -0
  50. data/ext/image_pack/vendor/mozjpeg/jcstest.c +126 -0
  51. data/ext/image_pack/vendor/mozjpeg/jctrans.c +408 -0
  52. data/ext/image_pack/vendor/mozjpeg/jdapimin.c +407 -0
  53. data/ext/image_pack/vendor/mozjpeg/jdapistd.c +691 -0
  54. data/ext/image_pack/vendor/mozjpeg/jdarith.c +782 -0
  55. data/ext/image_pack/vendor/mozjpeg/jdatadst-tj.c +198 -0
  56. data/ext/image_pack/vendor/mozjpeg/jdatadst.c +299 -0
  57. data/ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c +194 -0
  58. data/ext/image_pack/vendor/mozjpeg/jdatasrc.c +295 -0
  59. data/ext/image_pack/vendor/mozjpeg/jdcoefct.c +881 -0
  60. data/ext/image_pack/vendor/mozjpeg/jdcoefct.h +83 -0
  61. data/ext/image_pack/vendor/mozjpeg/jdcol565.c +384 -0
  62. data/ext/image_pack/vendor/mozjpeg/jdcolext.c +141 -0
  63. data/ext/image_pack/vendor/mozjpeg/jdcolor.c +881 -0
  64. data/ext/image_pack/vendor/mozjpeg/jdct.h +208 -0
  65. data/ext/image_pack/vendor/mozjpeg/jddctmgr.c +367 -0
  66. data/ext/image_pack/vendor/mozjpeg/jdhuff.c +834 -0
  67. data/ext/image_pack/vendor/mozjpeg/jdhuff.h +247 -0
  68. data/ext/image_pack/vendor/mozjpeg/jdicc.c +167 -0
  69. data/ext/image_pack/vendor/mozjpeg/jdinput.c +408 -0
  70. data/ext/image_pack/vendor/mozjpeg/jdmainct.c +460 -0
  71. data/ext/image_pack/vendor/mozjpeg/jdmainct.h +71 -0
  72. data/ext/image_pack/vendor/mozjpeg/jdmarker.c +1374 -0
  73. data/ext/image_pack/vendor/mozjpeg/jdmaster.c +727 -0
  74. data/ext/image_pack/vendor/mozjpeg/jdmaster.h +33 -0
  75. data/ext/image_pack/vendor/mozjpeg/jdmerge.c +587 -0
  76. data/ext/image_pack/vendor/mozjpeg/jdmerge.h +47 -0
  77. data/ext/image_pack/vendor/mozjpeg/jdmrg565.c +354 -0
  78. data/ext/image_pack/vendor/mozjpeg/jdmrgext.c +184 -0
  79. data/ext/image_pack/vendor/mozjpeg/jdphuff.c +679 -0
  80. data/ext/image_pack/vendor/mozjpeg/jdpostct.c +294 -0
  81. data/ext/image_pack/vendor/mozjpeg/jdsample.c +524 -0
  82. data/ext/image_pack/vendor/mozjpeg/jdsample.h +50 -0
  83. data/ext/image_pack/vendor/mozjpeg/jdtrans.c +156 -0
  84. data/ext/image_pack/vendor/mozjpeg/jerror.c +251 -0
  85. data/ext/image_pack/vendor/mozjpeg/jerror.h +335 -0
  86. data/ext/image_pack/vendor/mozjpeg/jfdctflt.c +169 -0
  87. data/ext/image_pack/vendor/mozjpeg/jfdctfst.c +227 -0
  88. data/ext/image_pack/vendor/mozjpeg/jfdctint.c +288 -0
  89. data/ext/image_pack/vendor/mozjpeg/jidctflt.c +240 -0
  90. data/ext/image_pack/vendor/mozjpeg/jidctfst.c +371 -0
  91. data/ext/image_pack/vendor/mozjpeg/jidctint.c +2627 -0
  92. data/ext/image_pack/vendor/mozjpeg/jidctred.c +409 -0
  93. data/ext/image_pack/vendor/mozjpeg/jinclude.h +147 -0
  94. data/ext/image_pack/vendor/mozjpeg/jmemmgr.c +1180 -0
  95. data/ext/image_pack/vendor/mozjpeg/jmemnobs.c +110 -0
  96. data/ext/image_pack/vendor/mozjpeg/jmemsys.h +178 -0
  97. data/ext/image_pack/vendor/mozjpeg/jmorecfg.h +382 -0
  98. data/ext/image_pack/vendor/mozjpeg/jpeg_nbits_table.h +4098 -0
  99. data/ext/image_pack/vendor/mozjpeg/jpegcomp.h +32 -0
  100. data/ext/image_pack/vendor/mozjpeg/jpegint.h +453 -0
  101. data/ext/image_pack/vendor/mozjpeg/jpeglib.h +1211 -0
  102. data/ext/image_pack/vendor/mozjpeg/jpegtran.c +827 -0
  103. data/ext/image_pack/vendor/mozjpeg/jpegyuv.c +172 -0
  104. data/ext/image_pack/vendor/mozjpeg/jquant1.c +856 -0
  105. data/ext/image_pack/vendor/mozjpeg/jquant2.c +1286 -0
  106. data/ext/image_pack/vendor/mozjpeg/jsimd.h +123 -0
  107. data/ext/image_pack/vendor/mozjpeg/jsimd_none.c +431 -0
  108. data/ext/image_pack/vendor/mozjpeg/jsimddct.h +70 -0
  109. data/ext/image_pack/vendor/mozjpeg/jstdhuff.c +144 -0
  110. data/ext/image_pack/vendor/mozjpeg/jutils.c +133 -0
  111. data/ext/image_pack/vendor/mozjpeg/jversion.h.in +56 -0
  112. data/ext/image_pack/vendor/mozjpeg/libjpeg.map.in +11 -0
  113. data/ext/image_pack/vendor/mozjpeg/libjpeg.txt +3150 -0
  114. data/ext/image_pack/vendor/mozjpeg/rdbmp.c +690 -0
  115. data/ext/image_pack/vendor/mozjpeg/rdcolmap.c +253 -0
  116. data/ext/image_pack/vendor/mozjpeg/rdgif.c +720 -0
  117. data/ext/image_pack/vendor/mozjpeg/rdjpeg.c +160 -0
  118. data/ext/image_pack/vendor/mozjpeg/rdjpgcom.c +494 -0
  119. data/ext/image_pack/vendor/mozjpeg/rdpng.c +194 -0
  120. data/ext/image_pack/vendor/mozjpeg/rdppm.c +781 -0
  121. data/ext/image_pack/vendor/mozjpeg/rdswitch.c +642 -0
  122. data/ext/image_pack/vendor/mozjpeg/rdtarga.c +508 -0
  123. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c +148 -0
  124. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c +334 -0
  125. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c +976 -0
  126. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S +1200 -0
  127. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c +316 -0
  128. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c +411 -0
  129. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd.c +1053 -0
  130. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S +2254 -0
  131. data/ext/image_pack/vendor/mozjpeg/simd/arm/align.h +28 -0
  132. data/ext/image_pack/vendor/mozjpeg/simd/arm/jccolor-neon.c +160 -0
  133. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgray-neon.c +120 -0
  134. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgryext-neon.c +106 -0
  135. data/ext/image_pack/vendor/mozjpeg/simd/arm/jchuff.h +131 -0
  136. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcphuff-neon.c +623 -0
  137. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcsample-neon.c +192 -0
  138. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolext-neon.c +374 -0
  139. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolor-neon.c +141 -0
  140. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmerge-neon.c +144 -0
  141. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmrgext-neon.c +723 -0
  142. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdsample-neon.c +569 -0
  143. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctfst-neon.c +214 -0
  144. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctint-neon.c +376 -0
  145. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctfst-neon.c +472 -0
  146. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctint-neon.c +801 -0
  147. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctred-neon.c +486 -0
  148. data/ext/image_pack/vendor/mozjpeg/simd/arm/jquanti-neon.c +193 -0
  149. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h +26 -0
  150. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h.in +37 -0
  151. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm +578 -0
  152. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm +476 -0
  153. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm +503 -0
  154. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm +121 -0
  155. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm +121 -0
  156. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm +120 -0
  157. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm +113 -0
  158. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm +113 -0
  159. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm +112 -0
  160. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm +457 -0
  161. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm +355 -0
  162. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm +382 -0
  163. data/ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm +761 -0
  164. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm +662 -0
  165. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm +388 -0
  166. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm +324 -0
  167. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm +351 -0
  168. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm +515 -0
  169. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm +404 -0
  170. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm +458 -0
  171. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm +118 -0
  172. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm +117 -0
  173. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm +117 -0
  174. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm +136 -0
  175. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm +123 -0
  176. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm +135 -0
  177. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm +575 -0
  178. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm +460 -0
  179. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm +517 -0
  180. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm +760 -0
  181. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm +731 -0
  182. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm +724 -0
  183. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm +318 -0
  184. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm +369 -0
  185. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm +395 -0
  186. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm +403 -0
  187. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm +331 -0
  188. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm +620 -0
  189. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm +633 -0
  190. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm +451 -0
  191. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm +571 -0
  192. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm +497 -0
  193. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm +499 -0
  194. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm +501 -0
  195. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm +453 -0
  196. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm +851 -0
  197. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm +858 -0
  198. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm +704 -0
  199. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm +592 -0
  200. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm +230 -0
  201. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm +276 -0
  202. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm +208 -0
  203. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm +168 -0
  204. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm +188 -0
  205. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm +201 -0
  206. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c +1312 -0
  207. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm +135 -0
  208. data/ext/image_pack/vendor/mozjpeg/simd/jsimd.h +1258 -0
  209. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c +1143 -0
  210. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S +4543 -0
  211. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h +292 -0
  212. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c +455 -0
  213. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c +148 -0
  214. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c +132 -0
  215. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c +374 -0
  216. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c +98 -0
  217. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h +28 -0
  218. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c +415 -0
  219. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c +139 -0
  220. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c +149 -0
  221. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c +615 -0
  222. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c +304 -0
  223. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c +255 -0
  224. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c +398 -0
  225. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c +395 -0
  226. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c +571 -0
  227. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c +124 -0
  228. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c +866 -0
  229. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h +69 -0
  230. data/ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h +1334 -0
  231. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc +135 -0
  232. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jdct.inc +31 -0
  233. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc +93 -0
  234. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h +133 -0
  235. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc +520 -0
  236. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c +269 -0
  237. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c +116 -0
  238. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c +111 -0
  239. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c +228 -0
  240. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c +159 -0
  241. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h +28 -0
  242. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c +276 -0
  243. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c +106 -0
  244. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c +130 -0
  245. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c +329 -0
  246. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c +400 -0
  247. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c +154 -0
  248. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c +258 -0
  249. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c +255 -0
  250. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c +357 -0
  251. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c +250 -0
  252. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c +884 -0
  253. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h +98 -0
  254. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm +559 -0
  255. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm +484 -0
  256. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-avx2.asm +121 -0
  257. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-sse2.asm +120 -0
  258. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-avx2.asm +113 -0
  259. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-sse2.asm +112 -0
  260. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-avx2.asm +438 -0
  261. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-sse2.asm +363 -0
  262. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jchuff-sse2.asm +583 -0
  263. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcphuff-sse2.asm +639 -0
  264. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-avx2.asm +367 -0
  265. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-sse2.asm +330 -0
  266. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-avx2.asm +496 -0
  267. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-sse2.asm +439 -0
  268. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-avx2.asm +118 -0
  269. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-sse2.asm +117 -0
  270. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-avx2.asm +136 -0
  271. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-sse2.asm +135 -0
  272. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-avx2.asm +596 -0
  273. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-sse2.asm +538 -0
  274. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-avx2.asm +696 -0
  275. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-sse2.asm +665 -0
  276. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctflt-sse.asm +355 -0
  277. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctfst-sse2.asm +389 -0
  278. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-avx2.asm +320 -0
  279. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-sse2.asm +619 -0
  280. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctflt-sse2.asm +482 -0
  281. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctfst-sse2.asm +491 -0
  282. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-avx2.asm +418 -0
  283. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-sse2.asm +847 -0
  284. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctred-sse2.asm +574 -0
  285. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquantf-sse2.asm +155 -0
  286. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-avx2.asm +163 -0
  287. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-sse2.asm +188 -0
  288. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c +1110 -0
  289. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm +86 -0
  290. data/ext/image_pack/vendor/mozjpeg/strtest.c +170 -0
  291. data/ext/image_pack/vendor/mozjpeg/structure.txt +900 -0
  292. data/ext/image_pack/vendor/mozjpeg/tjbench.c +1044 -0
  293. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.in +256 -0
  294. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in +215 -0
  295. data/ext/image_pack/vendor/mozjpeg/tjexample.c +406 -0
  296. data/ext/image_pack/vendor/mozjpeg/tjexampletest.in +149 -0
  297. data/ext/image_pack/vendor/mozjpeg/tjexampletest.java.in +151 -0
  298. data/ext/image_pack/vendor/mozjpeg/tjunittest.c +961 -0
  299. data/ext/image_pack/vendor/mozjpeg/tjutil.c +70 -0
  300. data/ext/image_pack/vendor/mozjpeg/tjutil.h +53 -0
  301. data/ext/image_pack/vendor/mozjpeg/transupp.c +2373 -0
  302. data/ext/image_pack/vendor/mozjpeg/transupp.h +243 -0
  303. data/ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c +1259 -0
  304. data/ext/image_pack/vendor/mozjpeg/turbojpeg.c +2320 -0
  305. data/ext/image_pack/vendor/mozjpeg/turbojpeg.h +1784 -0
  306. data/ext/image_pack/vendor/mozjpeg/usage.txt +679 -0
  307. data/ext/image_pack/vendor/mozjpeg/wizard.txt +220 -0
  308. data/ext/image_pack/vendor/mozjpeg/wrbmp.c +552 -0
  309. data/ext/image_pack/vendor/mozjpeg/wrgif.c +580 -0
  310. data/ext/image_pack/vendor/mozjpeg/wrjpgcom.c +577 -0
  311. data/ext/image_pack/vendor/mozjpeg/wrppm.c +366 -0
  312. data/ext/image_pack/vendor/mozjpeg/wrtarga.c +258 -0
  313. data/ext/image_pack/vendor/mozjpeg/yuvjpeg.c +268 -0
  314. data/lib/image_pack/backend.rb +8 -0
  315. data/lib/image_pack/configuration.rb +23 -0
  316. data/lib/image_pack/errors.rb +13 -0
  317. data/lib/image_pack/version.rb +5 -0
  318. data/lib/image_pack.rb +208 -0
  319. metadata +433 -0
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (C) 2020, Arm Limited. All Rights Reserved.
3
+ *
4
+ * This software is provided 'as-is', without any express or implied
5
+ * warranty. In no event will the authors be held liable for any damages
6
+ * arising from the use of this software.
7
+ *
8
+ * Permission is granted to anyone to use this software for any purpose,
9
+ * including commercial applications, and to alter it and redistribute it
10
+ * freely, subject to the following restrictions:
11
+ *
12
+ * 1. The origin of this software must not be misrepresented; you must not
13
+ * claim that you wrote the original software. If you use this software
14
+ * in a product, an acknowledgment in the product documentation would be
15
+ * appreciated but is not required.
16
+ * 2. Altered source versions must be plainly marked as such, and must not be
17
+ * misrepresented as being the original software.
18
+ * 3. This notice may not be removed or altered from any source distribution.
19
+ */
20
+
21
+ /* How to obtain memory alignment for structures and variables */
22
+ #if defined(_MSC_VER)
23
+ #define ALIGN(alignment) __declspec(align(alignment))
24
+ #elif defined(__clang__) || defined(__GNUC__)
25
+ #define ALIGN(alignment) __attribute__((aligned(alignment)))
26
+ #else
27
+ #error "Unknown compiler"
28
+ #endif
@@ -0,0 +1,160 @@
1
+ /*
2
+ * jccolor-neon.c - colorspace conversion (Arm Neon)
3
+ *
4
+ * Copyright (C) 2020, Arm Limited. All Rights Reserved.
5
+ * Copyright (C) 2020, D. R. Commander. All Rights Reserved.
6
+ *
7
+ * This software is provided 'as-is', without any express or implied
8
+ * warranty. In no event will the authors be held liable for any damages
9
+ * arising from the use of this software.
10
+ *
11
+ * Permission is granted to anyone to use this software for any purpose,
12
+ * including commercial applications, and to alter it and redistribute it
13
+ * freely, subject to the following restrictions:
14
+ *
15
+ * 1. The origin of this software must not be misrepresented; you must not
16
+ * claim that you wrote the original software. If you use this software
17
+ * in a product, an acknowledgment in the product documentation would be
18
+ * appreciated but is not required.
19
+ * 2. Altered source versions must be plainly marked as such, and must not be
20
+ * misrepresented as being the original software.
21
+ * 3. This notice may not be removed or altered from any source distribution.
22
+ */
23
+
24
+ #define JPEG_INTERNALS
25
+ #include "../../jinclude.h"
26
+ #include "../../jpeglib.h"
27
+ #include "../../jsimd.h"
28
+ #include "../../jdct.h"
29
+ #include "../../jsimddct.h"
30
+ #include "../jsimd.h"
31
+ #include "align.h"
32
+ #include "neon-compat.h"
33
+
34
+ #include <arm_neon.h>
35
+
36
+
37
+ /* RGB -> YCbCr conversion constants */
38
+
39
+ #define F_0_298 19595
40
+ #define F_0_587 38470
41
+ #define F_0_113 7471
42
+ #define F_0_168 11059
43
+ #define F_0_331 21709
44
+ #define F_0_500 32768
45
+ #define F_0_418 27439
46
+ #define F_0_081 5329
47
+
48
+ ALIGN(16) static const uint16_t jsimd_rgb_ycc_neon_consts[] = {
49
+ F_0_298, F_0_587, F_0_113, F_0_168,
50
+ F_0_331, F_0_500, F_0_418, F_0_081
51
+ };
52
+
53
+
54
+ /* Include inline routines for colorspace extensions. */
55
+
56
+ #if defined(__aarch64__) || defined(_M_ARM64)
57
+ #include "aarch64/jccolext-neon.c"
58
+ #else
59
+ #include "aarch32/jccolext-neon.c"
60
+ #endif
61
+ #undef RGB_RED
62
+ #undef RGB_GREEN
63
+ #undef RGB_BLUE
64
+ #undef RGB_PIXELSIZE
65
+
66
+ #define RGB_RED EXT_RGB_RED
67
+ #define RGB_GREEN EXT_RGB_GREEN
68
+ #define RGB_BLUE EXT_RGB_BLUE
69
+ #define RGB_PIXELSIZE EXT_RGB_PIXELSIZE
70
+ #define jsimd_rgb_ycc_convert_neon jsimd_extrgb_ycc_convert_neon
71
+ #if defined(__aarch64__) || defined(_M_ARM64)
72
+ #include "aarch64/jccolext-neon.c"
73
+ #else
74
+ #include "aarch32/jccolext-neon.c"
75
+ #endif
76
+ #undef RGB_RED
77
+ #undef RGB_GREEN
78
+ #undef RGB_BLUE
79
+ #undef RGB_PIXELSIZE
80
+ #undef jsimd_rgb_ycc_convert_neon
81
+
82
+ #define RGB_RED EXT_RGBX_RED
83
+ #define RGB_GREEN EXT_RGBX_GREEN
84
+ #define RGB_BLUE EXT_RGBX_BLUE
85
+ #define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE
86
+ #define jsimd_rgb_ycc_convert_neon jsimd_extrgbx_ycc_convert_neon
87
+ #if defined(__aarch64__) || defined(_M_ARM64)
88
+ #include "aarch64/jccolext-neon.c"
89
+ #else
90
+ #include "aarch32/jccolext-neon.c"
91
+ #endif
92
+ #undef RGB_RED
93
+ #undef RGB_GREEN
94
+ #undef RGB_BLUE
95
+ #undef RGB_PIXELSIZE
96
+ #undef jsimd_rgb_ycc_convert_neon
97
+
98
+ #define RGB_RED EXT_BGR_RED
99
+ #define RGB_GREEN EXT_BGR_GREEN
100
+ #define RGB_BLUE EXT_BGR_BLUE
101
+ #define RGB_PIXELSIZE EXT_BGR_PIXELSIZE
102
+ #define jsimd_rgb_ycc_convert_neon jsimd_extbgr_ycc_convert_neon
103
+ #if defined(__aarch64__) || defined(_M_ARM64)
104
+ #include "aarch64/jccolext-neon.c"
105
+ #else
106
+ #include "aarch32/jccolext-neon.c"
107
+ #endif
108
+ #undef RGB_RED
109
+ #undef RGB_GREEN
110
+ #undef RGB_BLUE
111
+ #undef RGB_PIXELSIZE
112
+ #undef jsimd_rgb_ycc_convert_neon
113
+
114
+ #define RGB_RED EXT_BGRX_RED
115
+ #define RGB_GREEN EXT_BGRX_GREEN
116
+ #define RGB_BLUE EXT_BGRX_BLUE
117
+ #define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE
118
+ #define jsimd_rgb_ycc_convert_neon jsimd_extbgrx_ycc_convert_neon
119
+ #if defined(__aarch64__) || defined(_M_ARM64)
120
+ #include "aarch64/jccolext-neon.c"
121
+ #else
122
+ #include "aarch32/jccolext-neon.c"
123
+ #endif
124
+ #undef RGB_RED
125
+ #undef RGB_GREEN
126
+ #undef RGB_BLUE
127
+ #undef RGB_PIXELSIZE
128
+ #undef jsimd_rgb_ycc_convert_neon
129
+
130
+ #define RGB_RED EXT_XBGR_RED
131
+ #define RGB_GREEN EXT_XBGR_GREEN
132
+ #define RGB_BLUE EXT_XBGR_BLUE
133
+ #define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE
134
+ #define jsimd_rgb_ycc_convert_neon jsimd_extxbgr_ycc_convert_neon
135
+ #if defined(__aarch64__) || defined(_M_ARM64)
136
+ #include "aarch64/jccolext-neon.c"
137
+ #else
138
+ #include "aarch32/jccolext-neon.c"
139
+ #endif
140
+ #undef RGB_RED
141
+ #undef RGB_GREEN
142
+ #undef RGB_BLUE
143
+ #undef RGB_PIXELSIZE
144
+ #undef jsimd_rgb_ycc_convert_neon
145
+
146
+ #define RGB_RED EXT_XRGB_RED
147
+ #define RGB_GREEN EXT_XRGB_GREEN
148
+ #define RGB_BLUE EXT_XRGB_BLUE
149
+ #define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE
150
+ #define jsimd_rgb_ycc_convert_neon jsimd_extxrgb_ycc_convert_neon
151
+ #if defined(__aarch64__) || defined(_M_ARM64)
152
+ #include "aarch64/jccolext-neon.c"
153
+ #else
154
+ #include "aarch32/jccolext-neon.c"
155
+ #endif
156
+ #undef RGB_RED
157
+ #undef RGB_GREEN
158
+ #undef RGB_BLUE
159
+ #undef RGB_PIXELSIZE
160
+ #undef jsimd_rgb_ycc_convert_neon
@@ -0,0 +1,120 @@
1
+ /*
2
+ * jcgray-neon.c - grayscale colorspace conversion (Arm Neon)
3
+ *
4
+ * Copyright (C) 2020, Arm Limited. All Rights Reserved.
5
+ *
6
+ * This software is provided 'as-is', without any express or implied
7
+ * warranty. In no event will the authors be held liable for any damages
8
+ * arising from the use of this software.
9
+ *
10
+ * Permission is granted to anyone to use this software for any purpose,
11
+ * including commercial applications, and to alter it and redistribute it
12
+ * freely, subject to the following restrictions:
13
+ *
14
+ * 1. The origin of this software must not be misrepresented; you must not
15
+ * claim that you wrote the original software. If you use this software
16
+ * in a product, an acknowledgment in the product documentation would be
17
+ * appreciated but is not required.
18
+ * 2. Altered source versions must be plainly marked as such, and must not be
19
+ * misrepresented as being the original software.
20
+ * 3. This notice may not be removed or altered from any source distribution.
21
+ */
22
+
23
+ #define JPEG_INTERNALS
24
+ #include "../../jinclude.h"
25
+ #include "../../jpeglib.h"
26
+ #include "../../jsimd.h"
27
+ #include "../../jdct.h"
28
+ #include "../../jsimddct.h"
29
+ #include "../jsimd.h"
30
+ #include "align.h"
31
+
32
+ #include <arm_neon.h>
33
+
34
+
35
+ /* RGB -> Grayscale conversion constants */
36
+
37
+ #define F_0_298 19595
38
+ #define F_0_587 38470
39
+ #define F_0_113 7471
40
+
41
+
42
+ /* Include inline routines for colorspace extensions. */
43
+
44
+ #include "jcgryext-neon.c"
45
+ #undef RGB_RED
46
+ #undef RGB_GREEN
47
+ #undef RGB_BLUE
48
+ #undef RGB_PIXELSIZE
49
+
50
+ #define RGB_RED EXT_RGB_RED
51
+ #define RGB_GREEN EXT_RGB_GREEN
52
+ #define RGB_BLUE EXT_RGB_BLUE
53
+ #define RGB_PIXELSIZE EXT_RGB_PIXELSIZE
54
+ #define jsimd_rgb_gray_convert_neon jsimd_extrgb_gray_convert_neon
55
+ #include "jcgryext-neon.c"
56
+ #undef RGB_RED
57
+ #undef RGB_GREEN
58
+ #undef RGB_BLUE
59
+ #undef RGB_PIXELSIZE
60
+ #undef jsimd_rgb_gray_convert_neon
61
+
62
+ #define RGB_RED EXT_RGBX_RED
63
+ #define RGB_GREEN EXT_RGBX_GREEN
64
+ #define RGB_BLUE EXT_RGBX_BLUE
65
+ #define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE
66
+ #define jsimd_rgb_gray_convert_neon jsimd_extrgbx_gray_convert_neon
67
+ #include "jcgryext-neon.c"
68
+ #undef RGB_RED
69
+ #undef RGB_GREEN
70
+ #undef RGB_BLUE
71
+ #undef RGB_PIXELSIZE
72
+ #undef jsimd_rgb_gray_convert_neon
73
+
74
+ #define RGB_RED EXT_BGR_RED
75
+ #define RGB_GREEN EXT_BGR_GREEN
76
+ #define RGB_BLUE EXT_BGR_BLUE
77
+ #define RGB_PIXELSIZE EXT_BGR_PIXELSIZE
78
+ #define jsimd_rgb_gray_convert_neon jsimd_extbgr_gray_convert_neon
79
+ #include "jcgryext-neon.c"
80
+ #undef RGB_RED
81
+ #undef RGB_GREEN
82
+ #undef RGB_BLUE
83
+ #undef RGB_PIXELSIZE
84
+ #undef jsimd_rgb_gray_convert_neon
85
+
86
+ #define RGB_RED EXT_BGRX_RED
87
+ #define RGB_GREEN EXT_BGRX_GREEN
88
+ #define RGB_BLUE EXT_BGRX_BLUE
89
+ #define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE
90
+ #define jsimd_rgb_gray_convert_neon jsimd_extbgrx_gray_convert_neon
91
+ #include "jcgryext-neon.c"
92
+ #undef RGB_RED
93
+ #undef RGB_GREEN
94
+ #undef RGB_BLUE
95
+ #undef RGB_PIXELSIZE
96
+ #undef jsimd_rgb_gray_convert_neon
97
+
98
+ #define RGB_RED EXT_XBGR_RED
99
+ #define RGB_GREEN EXT_XBGR_GREEN
100
+ #define RGB_BLUE EXT_XBGR_BLUE
101
+ #define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE
102
+ #define jsimd_rgb_gray_convert_neon jsimd_extxbgr_gray_convert_neon
103
+ #include "jcgryext-neon.c"
104
+ #undef RGB_RED
105
+ #undef RGB_GREEN
106
+ #undef RGB_BLUE
107
+ #undef RGB_PIXELSIZE
108
+ #undef jsimd_rgb_gray_convert_neon
109
+
110
+ #define RGB_RED EXT_XRGB_RED
111
+ #define RGB_GREEN EXT_XRGB_GREEN
112
+ #define RGB_BLUE EXT_XRGB_BLUE
113
+ #define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE
114
+ #define jsimd_rgb_gray_convert_neon jsimd_extxrgb_gray_convert_neon
115
+ #include "jcgryext-neon.c"
116
+ #undef RGB_RED
117
+ #undef RGB_GREEN
118
+ #undef RGB_BLUE
119
+ #undef RGB_PIXELSIZE
120
+ #undef jsimd_rgb_gray_convert_neon
@@ -0,0 +1,106 @@
1
+ /*
2
+ * jcgryext-neon.c - grayscale colorspace conversion (Arm Neon)
3
+ *
4
+ * Copyright (C) 2020, Arm Limited. All Rights Reserved.
5
+ *
6
+ * This software is provided 'as-is', without any express or implied
7
+ * warranty. In no event will the authors be held liable for any damages
8
+ * arising from the use of this software.
9
+ *
10
+ * Permission is granted to anyone to use this software for any purpose,
11
+ * including commercial applications, and to alter it and redistribute it
12
+ * freely, subject to the following restrictions:
13
+ *
14
+ * 1. The origin of this software must not be misrepresented; you must not
15
+ * claim that you wrote the original software. If you use this software
16
+ * in a product, an acknowledgment in the product documentation would be
17
+ * appreciated but is not required.
18
+ * 2. Altered source versions must be plainly marked as such, and must not be
19
+ * misrepresented as being the original software.
20
+ * 3. This notice may not be removed or altered from any source distribution.
21
+ */
22
+
23
+ /* This file is included by jcgray-neon.c */
24
+
25
+
26
+ /* RGB -> Grayscale conversion is defined by the following equation:
27
+ * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
28
+ *
29
+ * Avoid floating point arithmetic by using shifted integer constants:
30
+ * 0.29899597 = 19595 * 2^-16
31
+ * 0.58700561 = 38470 * 2^-16
32
+ * 0.11399841 = 7471 * 2^-16
33
+ * These constants are defined in jcgray-neon.c
34
+ *
35
+ * This is the same computation as the RGB -> Y portion of RGB -> YCbCr.
36
+ */
37
+
38
+ void jsimd_rgb_gray_convert_neon(JDIMENSION image_width, JSAMPARRAY input_buf,
39
+ JSAMPIMAGE output_buf, JDIMENSION output_row,
40
+ int num_rows)
41
+ {
42
+ JSAMPROW inptr;
43
+ JSAMPROW outptr;
44
+ /* Allocate temporary buffer for final (image_width % 16) pixels in row. */
45
+ ALIGN(16) uint8_t tmp_buf[16 * RGB_PIXELSIZE];
46
+
47
+ while (--num_rows >= 0) {
48
+ inptr = *input_buf++;
49
+ outptr = output_buf[0][output_row];
50
+ output_row++;
51
+
52
+ int cols_remaining = image_width;
53
+ for (; cols_remaining > 0; cols_remaining -= 16) {
54
+
55
+ /* To prevent buffer overread by the vector load instructions, the last
56
+ * (image_width % 16) columns of data are first memcopied to a temporary
57
+ * buffer large enough to accommodate the vector load.
58
+ */
59
+ if (cols_remaining < 16) {
60
+ memcpy(tmp_buf, inptr, cols_remaining * RGB_PIXELSIZE);
61
+ inptr = tmp_buf;
62
+ }
63
+
64
+ #if RGB_PIXELSIZE == 4
65
+ uint8x16x4_t input_pixels = vld4q_u8(inptr);
66
+ #else
67
+ uint8x16x3_t input_pixels = vld3q_u8(inptr);
68
+ #endif
69
+ uint16x8_t r_l = vmovl_u8(vget_low_u8(input_pixels.val[RGB_RED]));
70
+ uint16x8_t r_h = vmovl_u8(vget_high_u8(input_pixels.val[RGB_RED]));
71
+ uint16x8_t g_l = vmovl_u8(vget_low_u8(input_pixels.val[RGB_GREEN]));
72
+ uint16x8_t g_h = vmovl_u8(vget_high_u8(input_pixels.val[RGB_GREEN]));
73
+ uint16x8_t b_l = vmovl_u8(vget_low_u8(input_pixels.val[RGB_BLUE]));
74
+ uint16x8_t b_h = vmovl_u8(vget_high_u8(input_pixels.val[RGB_BLUE]));
75
+
76
+ /* Compute Y = 0.29900 * R + 0.58700 * G + 0.11400 * B */
77
+ uint32x4_t y_ll = vmull_n_u16(vget_low_u16(r_l), F_0_298);
78
+ uint32x4_t y_lh = vmull_n_u16(vget_high_u16(r_l), F_0_298);
79
+ uint32x4_t y_hl = vmull_n_u16(vget_low_u16(r_h), F_0_298);
80
+ uint32x4_t y_hh = vmull_n_u16(vget_high_u16(r_h), F_0_298);
81
+ y_ll = vmlal_n_u16(y_ll, vget_low_u16(g_l), F_0_587);
82
+ y_lh = vmlal_n_u16(y_lh, vget_high_u16(g_l), F_0_587);
83
+ y_hl = vmlal_n_u16(y_hl, vget_low_u16(g_h), F_0_587);
84
+ y_hh = vmlal_n_u16(y_hh, vget_high_u16(g_h), F_0_587);
85
+ y_ll = vmlal_n_u16(y_ll, vget_low_u16(b_l), F_0_113);
86
+ y_lh = vmlal_n_u16(y_lh, vget_high_u16(b_l), F_0_113);
87
+ y_hl = vmlal_n_u16(y_hl, vget_low_u16(b_h), F_0_113);
88
+ y_hh = vmlal_n_u16(y_hh, vget_high_u16(b_h), F_0_113);
89
+
90
+ /* Descale Y values (rounding right shift) and narrow to 16-bit. */
91
+ uint16x8_t y_l = vcombine_u16(vrshrn_n_u32(y_ll, 16),
92
+ vrshrn_n_u32(y_lh, 16));
93
+ uint16x8_t y_h = vcombine_u16(vrshrn_n_u32(y_hl, 16),
94
+ vrshrn_n_u32(y_hh, 16));
95
+
96
+ /* Narrow Y values to 8-bit and store to memory. Buffer overwrite is
97
+ * permitted up to the next multiple of ALIGN_SIZE bytes.
98
+ */
99
+ vst1q_u8(outptr, vcombine_u8(vmovn_u16(y_l), vmovn_u16(y_h)));
100
+
101
+ /* Increment pointers. */
102
+ inptr += (16 * RGB_PIXELSIZE);
103
+ outptr += 16;
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,131 @@
1
+ /*
2
+ * jchuff.h
3
+ *
4
+ * This file was part of the Independent JPEG Group's software:
5
+ * Copyright (C) 1991-1997, Thomas G. Lane.
6
+ * libjpeg-turbo Modifications:
7
+ * Copyright (C) 2009, 2018, 2021, D. R. Commander.
8
+ * Copyright (C) 2018, Matthias Räncker.
9
+ * Copyright (C) 2020-2021, Arm Limited.
10
+ * For conditions of distribution and use, see the accompanying README.ijg
11
+ * file.
12
+ */
13
+
14
+ /* Expanded entropy encoder object for Huffman encoding.
15
+ *
16
+ * The savable_state subrecord contains fields that change within an MCU,
17
+ * but must not be updated permanently until we complete the MCU.
18
+ */
19
+
20
+ #if defined(__aarch64__) || defined(_M_ARM64)
21
+ #define BIT_BUF_SIZE 64
22
+ #else
23
+ #define BIT_BUF_SIZE 32
24
+ #endif
25
+
26
+ typedef struct {
27
+ size_t put_buffer; /* current bit accumulation buffer */
28
+ int free_bits; /* # of bits available in it */
29
+ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
30
+ } savable_state;
31
+
32
+ typedef struct {
33
+ JOCTET *next_output_byte; /* => next byte to write in buffer */
34
+ size_t free_in_buffer; /* # of byte spaces remaining in buffer */
35
+ savable_state cur; /* Current bit buffer & DC state */
36
+ j_compress_ptr cinfo; /* dump_buffer needs access to this */
37
+ int simd;
38
+ } working_state;
39
+
40
+ /* Outputting bits to the file */
41
+
42
+ /* Output byte b and, speculatively, an additional 0 byte. 0xFF must be encoded
43
+ * as 0xFF 0x00, so the output buffer pointer is advanced by 2 if the byte is
44
+ * 0xFF. Otherwise, the output buffer pointer is advanced by 1, and the
45
+ * speculative 0 byte will be overwritten by the next byte.
46
+ */
47
+ #define EMIT_BYTE(b) { \
48
+ buffer[0] = (JOCTET)(b); \
49
+ buffer[1] = 0; \
50
+ buffer -= -2 + ((JOCTET)(b) < 0xFF); \
51
+ }
52
+
53
+ /* Output the entire bit buffer. If there are no 0xFF bytes in it, then write
54
+ * directly to the output buffer. Otherwise, use the EMIT_BYTE() macro to
55
+ * encode 0xFF as 0xFF 0x00.
56
+ */
57
+ #if defined(__aarch64__) || defined(_M_ARM64)
58
+
59
+ #define FLUSH() { \
60
+ if (put_buffer & 0x8080808080808080 & ~(put_buffer + 0x0101010101010101)) { \
61
+ EMIT_BYTE(put_buffer >> 56) \
62
+ EMIT_BYTE(put_buffer >> 48) \
63
+ EMIT_BYTE(put_buffer >> 40) \
64
+ EMIT_BYTE(put_buffer >> 32) \
65
+ EMIT_BYTE(put_buffer >> 24) \
66
+ EMIT_BYTE(put_buffer >> 16) \
67
+ EMIT_BYTE(put_buffer >> 8) \
68
+ EMIT_BYTE(put_buffer ) \
69
+ } else { \
70
+ *((uint64_t *)buffer) = BUILTIN_BSWAP64(put_buffer); \
71
+ buffer += 8; \
72
+ } \
73
+ }
74
+
75
+ #else
76
+
77
+ #if defined(_MSC_VER) && !defined(__clang__)
78
+ #define SPLAT() { \
79
+ buffer[0] = (JOCTET)(put_buffer >> 24); \
80
+ buffer[1] = (JOCTET)(put_buffer >> 16); \
81
+ buffer[2] = (JOCTET)(put_buffer >> 8); \
82
+ buffer[3] = (JOCTET)(put_buffer ); \
83
+ buffer += 4; \
84
+ }
85
+ #else
86
+ #define SPLAT() { \
87
+ put_buffer = __builtin_bswap32(put_buffer); \
88
+ __asm__("str %1, [%0], #4" : "+r" (buffer) : "r" (put_buffer)); \
89
+ }
90
+ #endif
91
+
92
+ #define FLUSH() { \
93
+ if (put_buffer & 0x80808080 & ~(put_buffer + 0x01010101)) { \
94
+ EMIT_BYTE(put_buffer >> 24) \
95
+ EMIT_BYTE(put_buffer >> 16) \
96
+ EMIT_BYTE(put_buffer >> 8) \
97
+ EMIT_BYTE(put_buffer ) \
98
+ } else { \
99
+ SPLAT(); \
100
+ } \
101
+ }
102
+
103
+ #endif
104
+
105
+ /* Fill the bit buffer to capacity with the leading bits from code, then output
106
+ * the bit buffer and put the remaining bits from code into the bit buffer.
107
+ */
108
+ #define PUT_AND_FLUSH(code, size) { \
109
+ put_buffer = (put_buffer << (size + free_bits)) | (code >> -free_bits); \
110
+ FLUSH() \
111
+ free_bits += BIT_BUF_SIZE; \
112
+ put_buffer = code; \
113
+ }
114
+
115
+ /* Insert code into the bit buffer and output the bit buffer if needed.
116
+ * NOTE: We can't flush with free_bits == 0, since the left shift in
117
+ * PUT_AND_FLUSH() would have undefined behavior.
118
+ */
119
+ #define PUT_BITS(code, size) { \
120
+ free_bits -= size; \
121
+ if (free_bits < 0) \
122
+ PUT_AND_FLUSH(code, size) \
123
+ else \
124
+ put_buffer = (put_buffer << size) | code; \
125
+ }
126
+
127
+ #define PUT_CODE(code, size, diff) { \
128
+ diff |= code << nbits; \
129
+ nbits += size; \
130
+ PUT_BITS(diff, nbits) \
131
+ }