epeg 1.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 (504) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/MANIFEST +5 -0
  4. data/TODO +1 -0
  5. data/epeg/.dockerignore +4 -0
  6. data/epeg/.gitignore +5 -0
  7. data/epeg/CMakeLists.txt +30 -0
  8. data/epeg/Dockerfile +23 -0
  9. data/epeg/Epeg.h +90 -0
  10. data/epeg/README.md +42 -0
  11. data/epeg/epeg_main.c +1642 -0
  12. data/epeg/epeg_private.h +85 -0
  13. data/epeg/example/.gitignore +1 -0
  14. data/epeg/example/CMakeLists.txt +20 -0
  15. data/epeg/example/example.jpg +0 -0
  16. data/epeg/example/rotatetest.c +29 -0
  17. data/epeg/example/scaletest.c +48 -0
  18. data/epeg/vendor/libjpeg-turbo-2.0.4/BUILDING.md +828 -0
  19. data/epeg/vendor/libjpeg-turbo-2.0.4/CMakeLists.txt +1420 -0
  20. data/epeg/vendor/libjpeg-turbo-2.0.4/ChangeLog.md +1494 -0
  21. data/epeg/vendor/libjpeg-turbo-2.0.4/LICENSE.md +132 -0
  22. data/epeg/vendor/libjpeg-turbo-2.0.4/README.ijg +277 -0
  23. data/epeg/vendor/libjpeg-turbo-2.0.4/README.md +356 -0
  24. data/epeg/vendor/libjpeg-turbo-2.0.4/cderror.h +137 -0
  25. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.c +145 -0
  26. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.h +157 -0
  27. data/epeg/vendor/libjpeg-turbo-2.0.4/change.log +315 -0
  28. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.1 +354 -0
  29. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.c +695 -0
  30. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/BuildPackages.cmake +182 -0
  31. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/GNUInstallDirs.cmake +416 -0
  32. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/cmake_uninstall.cmake.in +24 -0
  33. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/testclean.cmake +41 -0
  34. data/epeg/vendor/libjpeg-turbo-2.0.4/cmyk.h +61 -0
  35. data/epeg/vendor/libjpeg-turbo-2.0.4/coderules.txt +78 -0
  36. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.1 +296 -0
  37. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.c +822 -0
  38. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/annotated.html +104 -0
  39. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bc_s.png +0 -0
  40. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bdwn.png +0 -0
  41. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/classes.html +106 -0
  42. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/closed.png +0 -0
  43. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen-extra.css +3 -0
  44. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.css +1184 -0
  45. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.png +0 -0
  46. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/dynsections.js +97 -0
  47. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2blank.png +0 -0
  48. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2cl.png +0 -0
  49. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2doc.png +0 -0
  50. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderclosed.png +0 -0
  51. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderopen.png +0 -0
  52. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2lastnode.png +0 -0
  53. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2link.png +0 -0
  54. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mlastnode.png +0 -0
  55. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mnode.png +0 -0
  56. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mo.png +0 -0
  57. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2node.png +0 -0
  58. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2ns.png +0 -0
  59. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2plastnode.png +0 -0
  60. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2pnode.png +0 -0
  61. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2splitbar.png +0 -0
  62. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2vertline.png +0 -0
  63. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions.html +134 -0
  64. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions_vars.html +134 -0
  65. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/group___turbo_j_p_e_g.html +2775 -0
  66. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/index.html +90 -0
  67. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/jquery.js +8 -0
  68. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/modules.html +95 -0
  69. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_f.png +0 -0
  70. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_g.png +0 -0
  71. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_h.png +0 -0
  72. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/open.png +0 -0
  73. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.html +26 -0
  74. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.js +4 -0
  75. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.html +26 -0
  76. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.js +5 -0
  77. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.html +26 -0
  78. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.js +4 -0
  79. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.html +26 -0
  80. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.js +4 -0
  81. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.html +26 -0
  82. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.js +5 -0
  83. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.html +26 -0
  84. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.js +4 -0
  85. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.html +26 -0
  86. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.js +102 -0
  87. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.html +26 -0
  88. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.js +4 -0
  89. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.html +26 -0
  90. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.js +4 -0
  91. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.html +26 -0
  92. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.js +4 -0
  93. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.html +26 -0
  94. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.js +6 -0
  95. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/close.png +0 -0
  96. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.html +26 -0
  97. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.js +8 -0
  98. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.html +26 -0
  99. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.js +37 -0
  100. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.html +26 -0
  101. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.js +31 -0
  102. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.html +26 -0
  103. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.js +4 -0
  104. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/mag_sel.png +0 -0
  105. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/nomatches.html +12 -0
  106. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.css +271 -0
  107. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.js +809 -0
  108. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_l.png +0 -0
  109. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_m.png +0 -0
  110. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_r.png +0 -0
  111. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.html +26 -0
  112. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.js +5 -0
  113. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.html +26 -0
  114. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.js +4 -0
  115. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.html +26 -0
  116. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.js +5 -0
  117. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.html +26 -0
  118. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.js +4 -0
  119. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.html +26 -0
  120. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.js +4 -0
  121. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.html +26 -0
  122. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.js +5 -0
  123. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.html +26 -0
  124. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.js +4 -0
  125. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.html +26 -0
  126. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.js +10 -0
  127. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.html +26 -0
  128. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.js +4 -0
  129. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.html +26 -0
  130. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.js +4 -0
  131. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.html +26 -0
  132. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.js +4 -0
  133. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjregion.html +186 -0
  134. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjscalingfactor.html +148 -0
  135. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjtransform.html +212 -0
  136. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_off.png +0 -0
  137. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_on.png +0 -0
  138. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_a.png +0 -0
  139. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_b.png +0 -0
  140. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_h.png +0 -0
  141. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_s.png +0 -0
  142. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tabs.css +60 -0
  143. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen-extra.css +3 -0
  144. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen.config +16 -0
  145. data/epeg/vendor/libjpeg-turbo-2.0.4/example.txt +464 -0
  146. data/epeg/vendor/libjpeg-turbo-2.0.4/jaricom.c +157 -0
  147. data/epeg/vendor/libjpeg-turbo-2.0.4/java/CMakeLists.txt +88 -0
  148. data/epeg/vendor/libjpeg-turbo-2.0.4/java/MANIFEST.MF +2 -0
  149. data/epeg/vendor/libjpeg-turbo-2.0.4/java/README +52 -0
  150. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJBench.java +1021 -0
  151. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJExample.java +405 -0
  152. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJUnitTest.java +960 -0
  153. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-frame.html +24 -0
  154. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-noframe.html +24 -0
  155. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/constant-values.html +532 -0
  156. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/deprecated-list.html +252 -0
  157. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/help-doc.html +210 -0
  158. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index-all.html +1029 -0
  159. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index.html +71 -0
  160. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJ.html +1356 -0
  161. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html +926 -0
  162. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html +241 -0
  163. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html +1255 -0
  164. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJException.html +340 -0
  165. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html +343 -0
  166. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransform.html +751 -0
  167. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html +421 -0
  168. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/YUVImage.html +765 -0
  169. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-frame.html +31 -0
  170. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-summary.html +202 -0
  171. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-tree.html +160 -0
  172. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/overview-tree.html +164 -0
  173. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/package-list +1 -0
  174. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/background.gif +0 -0
  175. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/tab.gif +0 -0
  176. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar.gif +0 -0
  177. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar_end.gif +0 -0
  178. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/script.js +30 -0
  179. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/serialized-form.html +176 -0
  180. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/stylesheet.css +474 -0
  181. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJ.java +584 -0
  182. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCompressor.java +677 -0
  183. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java +76 -0
  184. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJDecompressor.java +931 -0
  185. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJException.java +78 -0
  186. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-unix.java.in +59 -0
  187. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-win.java.in +35 -0
  188. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java +115 -0
  189. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransform.java +227 -0
  190. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransformer.java +163 -0
  191. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/YUVImage.java +445 -0
  192. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJ.h +129 -0
  193. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJCompressor.h +101 -0
  194. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJDecompressor.h +101 -0
  195. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJTransformer.h +29 -0
  196. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapimin.c +295 -0
  197. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapistd.c +162 -0
  198. data/epeg/vendor/libjpeg-turbo-2.0.4/jcarith.c +932 -0
  199. data/epeg/vendor/libjpeg-turbo-2.0.4/jccoefct.c +449 -0
  200. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolext.c +144 -0
  201. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolor.c +710 -0
  202. data/epeg/vendor/libjpeg-turbo-2.0.4/jcdctmgr.c +721 -0
  203. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.c +1096 -0
  204. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.h +42 -0
  205. data/epeg/vendor/libjpeg-turbo-2.0.4/jcicc.c +105 -0
  206. data/epeg/vendor/libjpeg-turbo-2.0.4/jcinit.c +77 -0
  207. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmainct.c +162 -0
  208. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmarker.c +664 -0
  209. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmaster.c +640 -0
  210. data/epeg/vendor/libjpeg-turbo-2.0.4/jcomapi.c +109 -0
  211. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.h.in +73 -0
  212. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.txt +143 -0
  213. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfigint.h.in +31 -0
  214. data/epeg/vendor/libjpeg-turbo-2.0.4/jcparam.c +541 -0
  215. data/epeg/vendor/libjpeg-turbo-2.0.4/jcphuff.c +1105 -0
  216. data/epeg/vendor/libjpeg-turbo-2.0.4/jcprepct.c +351 -0
  217. data/epeg/vendor/libjpeg-turbo-2.0.4/jcsample.c +539 -0
  218. data/epeg/vendor/libjpeg-turbo-2.0.4/jcstest.c +126 -0
  219. data/epeg/vendor/libjpeg-turbo-2.0.4/jctrans.c +400 -0
  220. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapimin.c +407 -0
  221. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapistd.c +639 -0
  222. data/epeg/vendor/libjpeg-turbo-2.0.4/jdarith.c +773 -0
  223. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst-tj.c +203 -0
  224. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst.c +293 -0
  225. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc-tj.c +194 -0
  226. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc.c +295 -0
  227. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.c +692 -0
  228. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.h +82 -0
  229. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcol565.c +384 -0
  230. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolext.c +143 -0
  231. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolor.c +883 -0
  232. data/epeg/vendor/libjpeg-turbo-2.0.4/jdct.h +208 -0
  233. data/epeg/vendor/libjpeg-turbo-2.0.4/jddctmgr.c +352 -0
  234. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.c +831 -0
  235. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.h +238 -0
  236. data/epeg/vendor/libjpeg-turbo-2.0.4/jdicc.c +171 -0
  237. data/epeg/vendor/libjpeg-turbo-2.0.4/jdinput.c +408 -0
  238. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.c +460 -0
  239. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.h +71 -0
  240. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmarker.c +1377 -0
  241. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.c +737 -0
  242. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.h +28 -0
  243. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmerge.c +617 -0
  244. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrg565.c +354 -0
  245. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrgext.c +184 -0
  246. data/epeg/vendor/libjpeg-turbo-2.0.4/jdphuff.c +687 -0
  247. data/epeg/vendor/libjpeg-turbo-2.0.4/jdpostct.c +294 -0
  248. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.c +518 -0
  249. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.h +50 -0
  250. data/epeg/vendor/libjpeg-turbo-2.0.4/jdtrans.c +155 -0
  251. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.c +251 -0
  252. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.h +316 -0
  253. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctflt.c +169 -0
  254. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctfst.c +227 -0
  255. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctint.c +288 -0
  256. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctflt.c +240 -0
  257. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctfst.c +371 -0
  258. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctint.c +2627 -0
  259. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctred.c +409 -0
  260. data/epeg/vendor/libjpeg-turbo-2.0.4/jinclude.h +88 -0
  261. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemmgr.c +1179 -0
  262. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemnobs.c +115 -0
  263. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemsys.h +178 -0
  264. data/epeg/vendor/libjpeg-turbo-2.0.4/jmorecfg.h +421 -0
  265. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeg_nbits_table.h +4098 -0
  266. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegcomp.h +31 -0
  267. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegint.h +368 -0
  268. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeglib.h +1132 -0
  269. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.1 +295 -0
  270. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.c +601 -0
  271. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant1.c +859 -0
  272. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant2.c +1285 -0
  273. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd.h +117 -0
  274. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd_none.c +418 -0
  275. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimddct.h +70 -0
  276. data/epeg/vendor/libjpeg-turbo-2.0.4/jstdhuff.c +143 -0
  277. data/epeg/vendor/libjpeg-turbo-2.0.4/jutils.c +133 -0
  278. data/epeg/vendor/libjpeg-turbo-2.0.4/jversion.h +52 -0
  279. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.map.in +11 -0
  280. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.txt +3144 -0
  281. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/CMakeLists.txt +1 -0
  282. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.c +275 -0
  283. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.h +57 -0
  284. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5cmp.c +59 -0
  285. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5hl.c +125 -0
  286. data/epeg/vendor/libjpeg-turbo-2.0.4/rdbmp.c +689 -0
  287. data/epeg/vendor/libjpeg-turbo-2.0.4/rdcolmap.c +254 -0
  288. data/epeg/vendor/libjpeg-turbo-2.0.4/rdgif.c +39 -0
  289. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.1 +63 -0
  290. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.c +510 -0
  291. data/epeg/vendor/libjpeg-turbo-2.0.4/rdppm.c +766 -0
  292. data/epeg/vendor/libjpeg-turbo-2.0.4/rdrle.c +389 -0
  293. data/epeg/vendor/libjpeg-turbo-2.0.4/rdswitch.c +424 -0
  294. data/epeg/vendor/libjpeg-turbo-2.0.4/rdtarga.c +509 -0
  295. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Distribution.xml.in +24 -0
  296. data/epeg/vendor/libjpeg-turbo-2.0.4/release/License.rtf +20 -0
  297. data/epeg/vendor/libjpeg-turbo-2.0.4/release/ReadMe.txt +5 -0
  298. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Welcome.rtf +17 -0
  299. data/epeg/vendor/libjpeg-turbo-2.0.4/release/deb-control.in +31 -0
  300. data/epeg/vendor/libjpeg-turbo-2.0.4/release/installer.nsi.in +191 -0
  301. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libjpeg.pc.in +10 -0
  302. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libturbojpeg.pc.in +10 -0
  303. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makecygwinpkg.in +66 -0
  304. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makedpkg.in +115 -0
  305. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makemacpkg.in +284 -0
  306. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makerpm.in +30 -0
  307. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makesrpm.in +48 -0
  308. data/epeg/vendor/libjpeg-turbo-2.0.4/release/maketarball.in +51 -0
  309. data/epeg/vendor/libjpeg-turbo-2.0.4/release/rpm.spec.in +221 -0
  310. data/epeg/vendor/libjpeg-turbo-2.0.4/release/uninstall.in +113 -0
  311. data/epeg/vendor/libjpeg-turbo-2.0.4/sharedlib/CMakeLists.txt +99 -0
  312. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/CMakeLists.txt +385 -0
  313. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd.c +721 -0
  314. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd_neon.S +2878 -0
  315. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd.c +798 -0
  316. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd_neon.S +3433 -0
  317. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/gas-preprocessor.in +1 -0
  318. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-avx2.asm +578 -0
  319. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-mmx.asm +476 -0
  320. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-sse2.asm +503 -0
  321. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-avx2.asm +121 -0
  322. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-mmx.asm +121 -0
  323. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-sse2.asm +120 -0
  324. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-avx2.asm +113 -0
  325. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-mmx.asm +113 -0
  326. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-sse2.asm +112 -0
  327. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-avx2.asm +457 -0
  328. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-mmx.asm +355 -0
  329. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-sse2.asm +382 -0
  330. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jchuff-sse2.asm +424 -0
  331. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcphuff-sse2.asm +660 -0
  332. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-avx2.asm +388 -0
  333. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-mmx.asm +324 -0
  334. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-sse2.asm +351 -0
  335. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-avx2.asm +515 -0
  336. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-mmx.asm +404 -0
  337. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-sse2.asm +458 -0
  338. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-avx2.asm +118 -0
  339. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-mmx.asm +117 -0
  340. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-sse2.asm +117 -0
  341. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-avx2.asm +136 -0
  342. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-mmx.asm +123 -0
  343. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-sse2.asm +135 -0
  344. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-avx2.asm +575 -0
  345. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-mmx.asm +460 -0
  346. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-sse2.asm +517 -0
  347. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-avx2.asm +760 -0
  348. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-mmx.asm +731 -0
  349. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-sse2.asm +724 -0
  350. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-3dn.asm +318 -0
  351. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-sse.asm +369 -0
  352. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-mmx.asm +395 -0
  353. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-sse2.asm +403 -0
  354. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-avx2.asm +331 -0
  355. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-mmx.asm +620 -0
  356. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-sse2.asm +633 -0
  357. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-3dn.asm +451 -0
  358. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse.asm +571 -0
  359. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse2.asm +497 -0
  360. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-mmx.asm +499 -0
  361. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-sse2.asm +501 -0
  362. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-avx2.asm +453 -0
  363. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-mmx.asm +851 -0
  364. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-sse2.asm +858 -0
  365. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-mmx.asm +704 -0
  366. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-sse2.asm +592 -0
  367. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-3dn.asm +230 -0
  368. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-mmx.asm +276 -0
  369. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-sse.asm +208 -0
  370. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquantf-sse2.asm +168 -0
  371. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-avx2.asm +188 -0
  372. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-sse2.asm +201 -0
  373. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimd.c +1253 -0
  374. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimdcpu.asm +135 -0
  375. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/jsimd.h +1083 -0
  376. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolext-mmi.c +483 -0
  377. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolor-mmi.c +148 -0
  378. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample-mmi.c +100 -0
  379. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample.h +28 -0
  380. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolext-mmi.c +424 -0
  381. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolor-mmi.c +139 -0
  382. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdsample-mmi.c +245 -0
  383. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jfdctint-mmi.c +398 -0
  384. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jidctint-mmi.c +571 -0
  385. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jquanti-mmi.c +130 -0
  386. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd.c +610 -0
  387. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd_mmi.h +57 -0
  388. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/loongson-mmintrin.h +1324 -0
  389. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd.c +1123 -0
  390. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2.S +4479 -0
  391. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2_asm.h +292 -0
  392. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jcolsamp.inc +135 -0
  393. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jdct.inc +31 -0
  394. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jpeg_nbits_table.inc +4097 -0
  395. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc +93 -0
  396. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc.h +131 -0
  397. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdext.inc +479 -0
  398. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolext-altivec.c +269 -0
  399. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolor-altivec.c +116 -0
  400. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgray-altivec.c +111 -0
  401. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgryext-altivec.c +228 -0
  402. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample-altivec.c +159 -0
  403. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample.h +28 -0
  404. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolext-altivec.c +276 -0
  405. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolor-altivec.c +106 -0
  406. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmerge-altivec.c +130 -0
  407. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmrgext-altivec.c +329 -0
  408. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdsample-altivec.c +400 -0
  409. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctfst-altivec.c +154 -0
  410. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctint-altivec.c +258 -0
  411. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctfst-altivec.c +255 -0
  412. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctint-altivec.c +357 -0
  413. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jquanti-altivec.c +250 -0
  414. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd.c +872 -0
  415. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd_altivec.h +98 -0
  416. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-avx2.asm +558 -0
  417. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-sse2.asm +483 -0
  418. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-avx2.asm +121 -0
  419. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-sse2.asm +120 -0
  420. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-avx2.asm +113 -0
  421. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-sse2.asm +112 -0
  422. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-avx2.asm +437 -0
  423. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-sse2.asm +362 -0
  424. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jchuff-sse2.asm +346 -0
  425. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcphuff-sse2.asm +637 -0
  426. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-avx2.asm +366 -0
  427. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-sse2.asm +329 -0
  428. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-avx2.asm +495 -0
  429. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-sse2.asm +438 -0
  430. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-avx2.asm +118 -0
  431. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-sse2.asm +117 -0
  432. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-avx2.asm +136 -0
  433. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-sse2.asm +135 -0
  434. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-avx2.asm +593 -0
  435. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-sse2.asm +535 -0
  436. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-avx2.asm +695 -0
  437. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-sse2.asm +664 -0
  438. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctflt-sse.asm +355 -0
  439. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctfst-sse2.asm +389 -0
  440. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-avx2.asm +320 -0
  441. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-sse2.asm +619 -0
  442. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctflt-sse2.asm +481 -0
  443. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctfst-sse2.asm +490 -0
  444. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-avx2.asm +417 -0
  445. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-sse2.asm +846 -0
  446. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctred-sse2.asm +573 -0
  447. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquantf-sse2.asm +154 -0
  448. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-avx2.asm +162 -0
  449. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-sse2.asm +187 -0
  450. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimd.c +1076 -0
  451. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimdcpu.asm +86 -0
  452. data/epeg/vendor/libjpeg-turbo-2.0.4/structure.txt +904 -0
  453. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.bmp +0 -0
  454. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.txt +25 -0
  455. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test.scan +5 -0
  456. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc +0 -0
  457. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc.txt +20 -0
  458. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc +0 -0
  459. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc.txt +20 -0
  460. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgari.jpg +0 -0
  461. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgint.jpg +0 -0
  462. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.jpg +0 -0
  463. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.ppm +4 -0
  464. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig12.jpg +0 -0
  465. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_5674_0098.bmp +0 -0
  466. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6434_0018a.bmp +0 -0
  467. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6548_0026a.bmp +0 -0
  468. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbench.c +1031 -0
  469. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.in +256 -0
  470. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.java.in +215 -0
  471. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexample.c +396 -0
  472. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.in +149 -0
  473. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.java.in +151 -0
  474. data/epeg/vendor/libjpeg-turbo-2.0.4/tjunittest.c +931 -0
  475. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.c +70 -0
  476. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.h +47 -0
  477. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.c +1628 -0
  478. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.h +210 -0
  479. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-jni.c +1246 -0
  480. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile +65 -0
  481. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile.jni +101 -0
  482. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.c +2152 -0
  483. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.h +1744 -0
  484. data/epeg/vendor/libjpeg-turbo-2.0.4/usage.txt +635 -0
  485. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jconfig.h.in +34 -0
  486. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62-memsrcdst.def +108 -0
  487. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62.def +106 -0
  488. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7-memsrcdst.def +110 -0
  489. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7.def +108 -0
  490. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg8.def +111 -0
  491. data/epeg/vendor/libjpeg-turbo-2.0.4/wizard.txt +212 -0
  492. data/epeg/vendor/libjpeg-turbo-2.0.4/wrbmp.c +558 -0
  493. data/epeg/vendor/libjpeg-turbo-2.0.4/wrgif.c +413 -0
  494. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.1 +103 -0
  495. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.c +591 -0
  496. data/epeg/vendor/libjpeg-turbo-2.0.4/wrppm.c +365 -0
  497. data/epeg/vendor/libjpeg-turbo-2.0.4/wrrle.c +309 -0
  498. data/epeg/vendor/libjpeg-turbo-2.0.4/wrtarga.c +261 -0
  499. data/epeg.c +131 -0
  500. data/epeg.gemspec +18 -0
  501. data/extconf.rb +80 -0
  502. data/test.jpg +0 -0
  503. data/test.rb +42 -0
  504. metadata +546 -0
@@ -0,0 +1,724 @@
1
+ ;
2
+ ; jdsample.asm - upsampling (SSE2)
3
+ ;
4
+ ; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5
+ ; Copyright (C) 2016, D. R. Commander.
6
+ ;
7
+ ; Based on the x86 SIMD extension for IJG JPEG library
8
+ ; Copyright (C) 1999-2006, MIYASAKA Masaru.
9
+ ; For conditions of distribution and use, see copyright notice in jsimdext.inc
10
+ ;
11
+ ; This file should be assembled with NASM (Netwide Assembler),
12
+ ; can *not* be assembled with Microsoft's MASM or any compatible
13
+ ; assembler (including Borland's Turbo Assembler).
14
+ ; NASM is available from http://nasm.sourceforge.net/ or
15
+ ; http://sourceforge.net/project/showfiles.php?group_id=6208
16
+
17
+ %include "jsimdext.inc"
18
+
19
+ ; --------------------------------------------------------------------------
20
+ SECTION SEG_CONST
21
+
22
+ alignz 32
23
+ GLOBAL_DATA(jconst_fancy_upsample_sse2)
24
+
25
+ EXTN(jconst_fancy_upsample_sse2):
26
+
27
+ PW_ONE times 8 dw 1
28
+ PW_TWO times 8 dw 2
29
+ PW_THREE times 8 dw 3
30
+ PW_SEVEN times 8 dw 7
31
+ PW_EIGHT times 8 dw 8
32
+
33
+ alignz 32
34
+
35
+ ; --------------------------------------------------------------------------
36
+ SECTION SEG_TEXT
37
+ BITS 32
38
+ ;
39
+ ; Fancy processing for the common case of 2:1 horizontal and 1:1 vertical.
40
+ ;
41
+ ; The upsampling algorithm is linear interpolation between pixel centers,
42
+ ; also known as a "triangle filter". This is a good compromise between
43
+ ; speed and visual quality. The centers of the output pixels are 1/4 and 3/4
44
+ ; of the way between input pixel centers.
45
+ ;
46
+ ; GLOBAL(void)
47
+ ; jsimd_h2v1_fancy_upsample_sse2(int max_v_samp_factor,
48
+ ; JDIMENSION downsampled_width,
49
+ ; JSAMPARRAY input_data,
50
+ ; JSAMPARRAY *output_data_ptr);
51
+ ;
52
+
53
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
54
+ %define downsamp_width(b) (b) + 12 ; JDIMENSION downsampled_width
55
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
56
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
57
+
58
+ align 32
59
+ GLOBAL_FUNCTION(jsimd_h2v1_fancy_upsample_sse2)
60
+
61
+ EXTN(jsimd_h2v1_fancy_upsample_sse2):
62
+ push ebp
63
+ mov ebp, esp
64
+ pushpic ebx
65
+ ; push ecx ; need not be preserved
66
+ ; push edx ; need not be preserved
67
+ push esi
68
+ push edi
69
+
70
+ get_GOT ebx ; get GOT address
71
+
72
+ mov eax, JDIMENSION [downsamp_width(ebp)] ; colctr
73
+ test eax, eax
74
+ jz near .return
75
+
76
+ mov ecx, INT [max_v_samp(ebp)] ; rowctr
77
+ test ecx, ecx
78
+ jz near .return
79
+
80
+ mov esi, JSAMPARRAY [input_data(ebp)] ; input_data
81
+ mov edi, POINTER [output_data_ptr(ebp)]
82
+ mov edi, JSAMPARRAY [edi] ; output_data
83
+ alignx 16, 7
84
+ .rowloop:
85
+ push eax ; colctr
86
+ push edi
87
+ push esi
88
+
89
+ mov esi, JSAMPROW [esi] ; inptr
90
+ mov edi, JSAMPROW [edi] ; outptr
91
+
92
+ test eax, SIZEOF_XMMWORD-1
93
+ jz short .skip
94
+ mov dl, JSAMPLE [esi+(eax-1)*SIZEOF_JSAMPLE]
95
+ mov JSAMPLE [esi+eax*SIZEOF_JSAMPLE], dl ; insert a dummy sample
96
+ .skip:
97
+ pxor xmm0, xmm0 ; xmm0=(all 0's)
98
+ pcmpeqb xmm7, xmm7
99
+ psrldq xmm7, (SIZEOF_XMMWORD-1)
100
+ pand xmm7, XMMWORD [esi+0*SIZEOF_XMMWORD]
101
+
102
+ add eax, byte SIZEOF_XMMWORD-1
103
+ and eax, byte -SIZEOF_XMMWORD
104
+ cmp eax, byte SIZEOF_XMMWORD
105
+ ja short .columnloop
106
+ alignx 16, 7
107
+
108
+ .columnloop_last:
109
+ pcmpeqb xmm6, xmm6
110
+ pslldq xmm6, (SIZEOF_XMMWORD-1)
111
+ pand xmm6, XMMWORD [esi+0*SIZEOF_XMMWORD]
112
+ jmp short .upsample
113
+ alignx 16, 7
114
+
115
+ .columnloop:
116
+ movdqa xmm6, XMMWORD [esi+1*SIZEOF_XMMWORD]
117
+ pslldq xmm6, (SIZEOF_XMMWORD-1)
118
+
119
+ .upsample:
120
+ movdqa xmm1, XMMWORD [esi+0*SIZEOF_XMMWORD]
121
+ movdqa xmm2, xmm1
122
+ movdqa xmm3, xmm1 ; xmm1=( 0 1 2 ... 13 14 15)
123
+ pslldq xmm2, 1 ; xmm2=(-- 0 1 ... 12 13 14)
124
+ psrldq xmm3, 1 ; xmm3=( 1 2 3 ... 14 15 --)
125
+
126
+ por xmm2, xmm7 ; xmm2=(-1 0 1 ... 12 13 14)
127
+ por xmm3, xmm6 ; xmm3=( 1 2 3 ... 14 15 16)
128
+
129
+ movdqa xmm7, xmm1
130
+ psrldq xmm7, (SIZEOF_XMMWORD-1) ; xmm7=(15 -- -- ... -- -- --)
131
+
132
+ movdqa xmm4, xmm1
133
+ punpcklbw xmm1, xmm0 ; xmm1=( 0 1 2 3 4 5 6 7)
134
+ punpckhbw xmm4, xmm0 ; xmm4=( 8 9 10 11 12 13 14 15)
135
+ movdqa xmm5, xmm2
136
+ punpcklbw xmm2, xmm0 ; xmm2=(-1 0 1 2 3 4 5 6)
137
+ punpckhbw xmm5, xmm0 ; xmm5=( 7 8 9 10 11 12 13 14)
138
+ movdqa xmm6, xmm3
139
+ punpcklbw xmm3, xmm0 ; xmm3=( 1 2 3 4 5 6 7 8)
140
+ punpckhbw xmm6, xmm0 ; xmm6=( 9 10 11 12 13 14 15 16)
141
+
142
+ pmullw xmm1, [GOTOFF(ebx,PW_THREE)]
143
+ pmullw xmm4, [GOTOFF(ebx,PW_THREE)]
144
+ paddw xmm2, [GOTOFF(ebx,PW_ONE)]
145
+ paddw xmm5, [GOTOFF(ebx,PW_ONE)]
146
+ paddw xmm3, [GOTOFF(ebx,PW_TWO)]
147
+ paddw xmm6, [GOTOFF(ebx,PW_TWO)]
148
+
149
+ paddw xmm2, xmm1
150
+ paddw xmm5, xmm4
151
+ psrlw xmm2, 2 ; xmm2=OutLE=( 0 2 4 6 8 10 12 14)
152
+ psrlw xmm5, 2 ; xmm5=OutHE=(16 18 20 22 24 26 28 30)
153
+ paddw xmm3, xmm1
154
+ paddw xmm6, xmm4
155
+ psrlw xmm3, 2 ; xmm3=OutLO=( 1 3 5 7 9 11 13 15)
156
+ psrlw xmm6, 2 ; xmm6=OutHO=(17 19 21 23 25 27 29 31)
157
+
158
+ psllw xmm3, BYTE_BIT
159
+ psllw xmm6, BYTE_BIT
160
+ por xmm2, xmm3 ; xmm2=OutL=( 0 1 2 ... 13 14 15)
161
+ por xmm5, xmm6 ; xmm5=OutH=(16 17 18 ... 29 30 31)
162
+
163
+ movdqa XMMWORD [edi+0*SIZEOF_XMMWORD], xmm2
164
+ movdqa XMMWORD [edi+1*SIZEOF_XMMWORD], xmm5
165
+
166
+ sub eax, byte SIZEOF_XMMWORD
167
+ add esi, byte 1*SIZEOF_XMMWORD ; inptr
168
+ add edi, byte 2*SIZEOF_XMMWORD ; outptr
169
+ cmp eax, byte SIZEOF_XMMWORD
170
+ ja near .columnloop
171
+ test eax, eax
172
+ jnz near .columnloop_last
173
+
174
+ pop esi
175
+ pop edi
176
+ pop eax
177
+
178
+ add esi, byte SIZEOF_JSAMPROW ; input_data
179
+ add edi, byte SIZEOF_JSAMPROW ; output_data
180
+ dec ecx ; rowctr
181
+ jg near .rowloop
182
+
183
+ .return:
184
+ pop edi
185
+ pop esi
186
+ ; pop edx ; need not be preserved
187
+ ; pop ecx ; need not be preserved
188
+ poppic ebx
189
+ pop ebp
190
+ ret
191
+
192
+ ; --------------------------------------------------------------------------
193
+ ;
194
+ ; Fancy processing for the common case of 2:1 horizontal and 2:1 vertical.
195
+ ; Again a triangle filter; see comments for h2v1 case, above.
196
+ ;
197
+ ; GLOBAL(void)
198
+ ; jsimd_h2v2_fancy_upsample_sse2(int max_v_samp_factor,
199
+ ; JDIMENSION downsampled_width,
200
+ ; JSAMPARRAY input_data,
201
+ ; JSAMPARRAY *output_data_ptr);
202
+ ;
203
+
204
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
205
+ %define downsamp_width(b) (b) + 12 ; JDIMENSION downsampled_width
206
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
207
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
208
+
209
+ %define original_ebp ebp + 0
210
+ %define wk(i) ebp - (WK_NUM - (i)) * SIZEOF_XMMWORD
211
+ ; xmmword wk[WK_NUM]
212
+ %define WK_NUM 4
213
+ %define gotptr wk(0) - SIZEOF_POINTER ; void *gotptr
214
+
215
+ align 32
216
+ GLOBAL_FUNCTION(jsimd_h2v2_fancy_upsample_sse2)
217
+
218
+ EXTN(jsimd_h2v2_fancy_upsample_sse2):
219
+ push ebp
220
+ mov eax, esp ; eax = original ebp
221
+ sub esp, byte 4
222
+ and esp, byte (-SIZEOF_XMMWORD) ; align to 128 bits
223
+ mov [esp], eax
224
+ mov ebp, esp ; ebp = aligned ebp
225
+ lea esp, [wk(0)]
226
+ pushpic eax ; make a room for GOT address
227
+ push ebx
228
+ ; push ecx ; need not be preserved
229
+ ; push edx ; need not be preserved
230
+ push esi
231
+ push edi
232
+
233
+ get_GOT ebx ; get GOT address
234
+ movpic POINTER [gotptr], ebx ; save GOT address
235
+
236
+ mov edx, eax ; edx = original ebp
237
+ mov eax, JDIMENSION [downsamp_width(edx)] ; colctr
238
+ test eax, eax
239
+ jz near .return
240
+
241
+ mov ecx, INT [max_v_samp(edx)] ; rowctr
242
+ test ecx, ecx
243
+ jz near .return
244
+
245
+ mov esi, JSAMPARRAY [input_data(edx)] ; input_data
246
+ mov edi, POINTER [output_data_ptr(edx)]
247
+ mov edi, JSAMPARRAY [edi] ; output_data
248
+ alignx 16, 7
249
+ .rowloop:
250
+ push eax ; colctr
251
+ push ecx
252
+ push edi
253
+ push esi
254
+
255
+ mov ecx, JSAMPROW [esi-1*SIZEOF_JSAMPROW] ; inptr1(above)
256
+ mov ebx, JSAMPROW [esi+0*SIZEOF_JSAMPROW] ; inptr0
257
+ mov esi, JSAMPROW [esi+1*SIZEOF_JSAMPROW] ; inptr1(below)
258
+ mov edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW] ; outptr0
259
+ mov edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW] ; outptr1
260
+
261
+ test eax, SIZEOF_XMMWORD-1
262
+ jz short .skip
263
+ push edx
264
+ mov dl, JSAMPLE [ecx+(eax-1)*SIZEOF_JSAMPLE]
265
+ mov JSAMPLE [ecx+eax*SIZEOF_JSAMPLE], dl
266
+ mov dl, JSAMPLE [ebx+(eax-1)*SIZEOF_JSAMPLE]
267
+ mov JSAMPLE [ebx+eax*SIZEOF_JSAMPLE], dl
268
+ mov dl, JSAMPLE [esi+(eax-1)*SIZEOF_JSAMPLE]
269
+ mov JSAMPLE [esi+eax*SIZEOF_JSAMPLE], dl ; insert a dummy sample
270
+ pop edx
271
+ .skip:
272
+ ; -- process the first column block
273
+
274
+ movdqa xmm0, XMMWORD [ebx+0*SIZEOF_XMMWORD] ; xmm0=row[ 0][0]
275
+ movdqa xmm1, XMMWORD [ecx+0*SIZEOF_XMMWORD] ; xmm1=row[-1][0]
276
+ movdqa xmm2, XMMWORD [esi+0*SIZEOF_XMMWORD] ; xmm2=row[+1][0]
277
+
278
+ pushpic ebx
279
+ movpic ebx, POINTER [gotptr] ; load GOT address
280
+
281
+ pxor xmm3, xmm3 ; xmm3=(all 0's)
282
+ movdqa xmm4, xmm0
283
+ punpcklbw xmm0, xmm3 ; xmm0=row[ 0]( 0 1 2 3 4 5 6 7)
284
+ punpckhbw xmm4, xmm3 ; xmm4=row[ 0]( 8 9 10 11 12 13 14 15)
285
+ movdqa xmm5, xmm1
286
+ punpcklbw xmm1, xmm3 ; xmm1=row[-1]( 0 1 2 3 4 5 6 7)
287
+ punpckhbw xmm5, xmm3 ; xmm5=row[-1]( 8 9 10 11 12 13 14 15)
288
+ movdqa xmm6, xmm2
289
+ punpcklbw xmm2, xmm3 ; xmm2=row[+1]( 0 1 2 3 4 5 6 7)
290
+ punpckhbw xmm6, xmm3 ; xmm6=row[+1]( 8 9 10 11 12 13 14 15)
291
+
292
+ pmullw xmm0, [GOTOFF(ebx,PW_THREE)]
293
+ pmullw xmm4, [GOTOFF(ebx,PW_THREE)]
294
+
295
+ pcmpeqb xmm7, xmm7
296
+ psrldq xmm7, (SIZEOF_XMMWORD-2)
297
+
298
+ paddw xmm1, xmm0 ; xmm1=Int0L=( 0 1 2 3 4 5 6 7)
299
+ paddw xmm5, xmm4 ; xmm5=Int0H=( 8 9 10 11 12 13 14 15)
300
+ paddw xmm2, xmm0 ; xmm2=Int1L=( 0 1 2 3 4 5 6 7)
301
+ paddw xmm6, xmm4 ; xmm6=Int1H=( 8 9 10 11 12 13 14 15)
302
+
303
+ movdqa XMMWORD [edx+0*SIZEOF_XMMWORD], xmm1 ; temporarily save
304
+ movdqa XMMWORD [edx+1*SIZEOF_XMMWORD], xmm5 ; the intermediate data
305
+ movdqa XMMWORD [edi+0*SIZEOF_XMMWORD], xmm2
306
+ movdqa XMMWORD [edi+1*SIZEOF_XMMWORD], xmm6
307
+
308
+ pand xmm1, xmm7 ; xmm1=( 0 -- -- -- -- -- -- --)
309
+ pand xmm2, xmm7 ; xmm2=( 0 -- -- -- -- -- -- --)
310
+
311
+ movdqa XMMWORD [wk(0)], xmm1
312
+ movdqa XMMWORD [wk(1)], xmm2
313
+
314
+ poppic ebx
315
+
316
+ add eax, byte SIZEOF_XMMWORD-1
317
+ and eax, byte -SIZEOF_XMMWORD
318
+ cmp eax, byte SIZEOF_XMMWORD
319
+ ja short .columnloop
320
+ alignx 16, 7
321
+
322
+ .columnloop_last:
323
+ ; -- process the last column block
324
+
325
+ pushpic ebx
326
+ movpic ebx, POINTER [gotptr] ; load GOT address
327
+
328
+ pcmpeqb xmm1, xmm1
329
+ pslldq xmm1, (SIZEOF_XMMWORD-2)
330
+ movdqa xmm2, xmm1
331
+
332
+ pand xmm1, XMMWORD [edx+1*SIZEOF_XMMWORD]
333
+ pand xmm2, XMMWORD [edi+1*SIZEOF_XMMWORD]
334
+
335
+ movdqa XMMWORD [wk(2)], xmm1 ; xmm1=(-- -- -- -- -- -- -- 15)
336
+ movdqa XMMWORD [wk(3)], xmm2 ; xmm2=(-- -- -- -- -- -- -- 15)
337
+
338
+ jmp near .upsample
339
+ alignx 16, 7
340
+
341
+ .columnloop:
342
+ ; -- process the next column block
343
+
344
+ movdqa xmm0, XMMWORD [ebx+1*SIZEOF_XMMWORD] ; xmm0=row[ 0][1]
345
+ movdqa xmm1, XMMWORD [ecx+1*SIZEOF_XMMWORD] ; xmm1=row[-1][1]
346
+ movdqa xmm2, XMMWORD [esi+1*SIZEOF_XMMWORD] ; xmm2=row[+1][1]
347
+
348
+ pushpic ebx
349
+ movpic ebx, POINTER [gotptr] ; load GOT address
350
+
351
+ pxor xmm3, xmm3 ; xmm3=(all 0's)
352
+ movdqa xmm4, xmm0
353
+ punpcklbw xmm0, xmm3 ; xmm0=row[ 0]( 0 1 2 3 4 5 6 7)
354
+ punpckhbw xmm4, xmm3 ; xmm4=row[ 0]( 8 9 10 11 12 13 14 15)
355
+ movdqa xmm5, xmm1
356
+ punpcklbw xmm1, xmm3 ; xmm1=row[-1]( 0 1 2 3 4 5 6 7)
357
+ punpckhbw xmm5, xmm3 ; xmm5=row[-1]( 8 9 10 11 12 13 14 15)
358
+ movdqa xmm6, xmm2
359
+ punpcklbw xmm2, xmm3 ; xmm2=row[+1]( 0 1 2 3 4 5 6 7)
360
+ punpckhbw xmm6, xmm3 ; xmm6=row[+1]( 8 9 10 11 12 13 14 15)
361
+
362
+ pmullw xmm0, [GOTOFF(ebx,PW_THREE)]
363
+ pmullw xmm4, [GOTOFF(ebx,PW_THREE)]
364
+
365
+ paddw xmm1, xmm0 ; xmm1=Int0L=( 0 1 2 3 4 5 6 7)
366
+ paddw xmm5, xmm4 ; xmm5=Int0H=( 8 9 10 11 12 13 14 15)
367
+ paddw xmm2, xmm0 ; xmm2=Int1L=( 0 1 2 3 4 5 6 7)
368
+ paddw xmm6, xmm4 ; xmm6=Int1H=( 8 9 10 11 12 13 14 15)
369
+
370
+ movdqa XMMWORD [edx+2*SIZEOF_XMMWORD], xmm1 ; temporarily save
371
+ movdqa XMMWORD [edx+3*SIZEOF_XMMWORD], xmm5 ; the intermediate data
372
+ movdqa XMMWORD [edi+2*SIZEOF_XMMWORD], xmm2
373
+ movdqa XMMWORD [edi+3*SIZEOF_XMMWORD], xmm6
374
+
375
+ pslldq xmm1, (SIZEOF_XMMWORD-2) ; xmm1=(-- -- -- -- -- -- -- 0)
376
+ pslldq xmm2, (SIZEOF_XMMWORD-2) ; xmm2=(-- -- -- -- -- -- -- 0)
377
+
378
+ movdqa XMMWORD [wk(2)], xmm1
379
+ movdqa XMMWORD [wk(3)], xmm2
380
+
381
+ .upsample:
382
+ ; -- process the upper row
383
+
384
+ movdqa xmm7, XMMWORD [edx+0*SIZEOF_XMMWORD]
385
+ movdqa xmm3, XMMWORD [edx+1*SIZEOF_XMMWORD]
386
+
387
+ movdqa xmm0, xmm7 ; xmm7=Int0L=( 0 1 2 3 4 5 6 7)
388
+ movdqa xmm4, xmm3 ; xmm3=Int0H=( 8 9 10 11 12 13 14 15)
389
+ psrldq xmm0, 2 ; xmm0=( 1 2 3 4 5 6 7 --)
390
+ pslldq xmm4, (SIZEOF_XMMWORD-2) ; xmm4=(-- -- -- -- -- -- -- 8)
391
+ movdqa xmm5, xmm7
392
+ movdqa xmm6, xmm3
393
+ psrldq xmm5, (SIZEOF_XMMWORD-2) ; xmm5=( 7 -- -- -- -- -- -- --)
394
+ pslldq xmm6, 2 ; xmm6=(-- 8 9 10 11 12 13 14)
395
+
396
+ por xmm0, xmm4 ; xmm0=( 1 2 3 4 5 6 7 8)
397
+ por xmm5, xmm6 ; xmm5=( 7 8 9 10 11 12 13 14)
398
+
399
+ movdqa xmm1, xmm7
400
+ movdqa xmm2, xmm3
401
+ pslldq xmm1, 2 ; xmm1=(-- 0 1 2 3 4 5 6)
402
+ psrldq xmm2, 2 ; xmm2=( 9 10 11 12 13 14 15 --)
403
+ movdqa xmm4, xmm3
404
+ psrldq xmm4, (SIZEOF_XMMWORD-2) ; xmm4=(15 -- -- -- -- -- -- --)
405
+
406
+ por xmm1, XMMWORD [wk(0)] ; xmm1=(-1 0 1 2 3 4 5 6)
407
+ por xmm2, XMMWORD [wk(2)] ; xmm2=( 9 10 11 12 13 14 15 16)
408
+
409
+ movdqa XMMWORD [wk(0)], xmm4
410
+
411
+ pmullw xmm7, [GOTOFF(ebx,PW_THREE)]
412
+ pmullw xmm3, [GOTOFF(ebx,PW_THREE)]
413
+ paddw xmm1, [GOTOFF(ebx,PW_EIGHT)]
414
+ paddw xmm5, [GOTOFF(ebx,PW_EIGHT)]
415
+ paddw xmm0, [GOTOFF(ebx,PW_SEVEN)]
416
+ paddw xmm2, [GOTOFF(ebx,PW_SEVEN)]
417
+
418
+ paddw xmm1, xmm7
419
+ paddw xmm5, xmm3
420
+ psrlw xmm1, 4 ; xmm1=Out0LE=( 0 2 4 6 8 10 12 14)
421
+ psrlw xmm5, 4 ; xmm5=Out0HE=(16 18 20 22 24 26 28 30)
422
+ paddw xmm0, xmm7
423
+ paddw xmm2, xmm3
424
+ psrlw xmm0, 4 ; xmm0=Out0LO=( 1 3 5 7 9 11 13 15)
425
+ psrlw xmm2, 4 ; xmm2=Out0HO=(17 19 21 23 25 27 29 31)
426
+
427
+ psllw xmm0, BYTE_BIT
428
+ psllw xmm2, BYTE_BIT
429
+ por xmm1, xmm0 ; xmm1=Out0L=( 0 1 2 ... 13 14 15)
430
+ por xmm5, xmm2 ; xmm5=Out0H=(16 17 18 ... 29 30 31)
431
+
432
+ movdqa XMMWORD [edx+0*SIZEOF_XMMWORD], xmm1
433
+ movdqa XMMWORD [edx+1*SIZEOF_XMMWORD], xmm5
434
+
435
+ ; -- process the lower row
436
+
437
+ movdqa xmm6, XMMWORD [edi+0*SIZEOF_XMMWORD]
438
+ movdqa xmm4, XMMWORD [edi+1*SIZEOF_XMMWORD]
439
+
440
+ movdqa xmm7, xmm6 ; xmm6=Int1L=( 0 1 2 3 4 5 6 7)
441
+ movdqa xmm3, xmm4 ; xmm4=Int1H=( 8 9 10 11 12 13 14 15)
442
+ psrldq xmm7, 2 ; xmm7=( 1 2 3 4 5 6 7 --)
443
+ pslldq xmm3, (SIZEOF_XMMWORD-2) ; xmm3=(-- -- -- -- -- -- -- 8)
444
+ movdqa xmm0, xmm6
445
+ movdqa xmm2, xmm4
446
+ psrldq xmm0, (SIZEOF_XMMWORD-2) ; xmm0=( 7 -- -- -- -- -- -- --)
447
+ pslldq xmm2, 2 ; xmm2=(-- 8 9 10 11 12 13 14)
448
+
449
+ por xmm7, xmm3 ; xmm7=( 1 2 3 4 5 6 7 8)
450
+ por xmm0, xmm2 ; xmm0=( 7 8 9 10 11 12 13 14)
451
+
452
+ movdqa xmm1, xmm6
453
+ movdqa xmm5, xmm4
454
+ pslldq xmm1, 2 ; xmm1=(-- 0 1 2 3 4 5 6)
455
+ psrldq xmm5, 2 ; xmm5=( 9 10 11 12 13 14 15 --)
456
+ movdqa xmm3, xmm4
457
+ psrldq xmm3, (SIZEOF_XMMWORD-2) ; xmm3=(15 -- -- -- -- -- -- --)
458
+
459
+ por xmm1, XMMWORD [wk(1)] ; xmm1=(-1 0 1 2 3 4 5 6)
460
+ por xmm5, XMMWORD [wk(3)] ; xmm5=( 9 10 11 12 13 14 15 16)
461
+
462
+ movdqa XMMWORD [wk(1)], xmm3
463
+
464
+ pmullw xmm6, [GOTOFF(ebx,PW_THREE)]
465
+ pmullw xmm4, [GOTOFF(ebx,PW_THREE)]
466
+ paddw xmm1, [GOTOFF(ebx,PW_EIGHT)]
467
+ paddw xmm0, [GOTOFF(ebx,PW_EIGHT)]
468
+ paddw xmm7, [GOTOFF(ebx,PW_SEVEN)]
469
+ paddw xmm5, [GOTOFF(ebx,PW_SEVEN)]
470
+
471
+ paddw xmm1, xmm6
472
+ paddw xmm0, xmm4
473
+ psrlw xmm1, 4 ; xmm1=Out1LE=( 0 2 4 6 8 10 12 14)
474
+ psrlw xmm0, 4 ; xmm0=Out1HE=(16 18 20 22 24 26 28 30)
475
+ paddw xmm7, xmm6
476
+ paddw xmm5, xmm4
477
+ psrlw xmm7, 4 ; xmm7=Out1LO=( 1 3 5 7 9 11 13 15)
478
+ psrlw xmm5, 4 ; xmm5=Out1HO=(17 19 21 23 25 27 29 31)
479
+
480
+ psllw xmm7, BYTE_BIT
481
+ psllw xmm5, BYTE_BIT
482
+ por xmm1, xmm7 ; xmm1=Out1L=( 0 1 2 ... 13 14 15)
483
+ por xmm0, xmm5 ; xmm0=Out1H=(16 17 18 ... 29 30 31)
484
+
485
+ movdqa XMMWORD [edi+0*SIZEOF_XMMWORD], xmm1
486
+ movdqa XMMWORD [edi+1*SIZEOF_XMMWORD], xmm0
487
+
488
+ poppic ebx
489
+
490
+ sub eax, byte SIZEOF_XMMWORD
491
+ add ecx, byte 1*SIZEOF_XMMWORD ; inptr1(above)
492
+ add ebx, byte 1*SIZEOF_XMMWORD ; inptr0
493
+ add esi, byte 1*SIZEOF_XMMWORD ; inptr1(below)
494
+ add edx, byte 2*SIZEOF_XMMWORD ; outptr0
495
+ add edi, byte 2*SIZEOF_XMMWORD ; outptr1
496
+ cmp eax, byte SIZEOF_XMMWORD
497
+ ja near .columnloop
498
+ test eax, eax
499
+ jnz near .columnloop_last
500
+
501
+ pop esi
502
+ pop edi
503
+ pop ecx
504
+ pop eax
505
+
506
+ add esi, byte 1*SIZEOF_JSAMPROW ; input_data
507
+ add edi, byte 2*SIZEOF_JSAMPROW ; output_data
508
+ sub ecx, byte 2 ; rowctr
509
+ jg near .rowloop
510
+
511
+ .return:
512
+ pop edi
513
+ pop esi
514
+ ; pop edx ; need not be preserved
515
+ ; pop ecx ; need not be preserved
516
+ pop ebx
517
+ mov esp, ebp ; esp <- aligned ebp
518
+ pop esp ; esp <- original ebp
519
+ pop ebp
520
+ ret
521
+
522
+ ; --------------------------------------------------------------------------
523
+ ;
524
+ ; Fast processing for the common case of 2:1 horizontal and 1:1 vertical.
525
+ ; It's still a box filter.
526
+ ;
527
+ ; GLOBAL(void)
528
+ ; jsimd_h2v1_upsample_sse2(int max_v_samp_factor, JDIMENSION output_width,
529
+ ; JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
530
+ ;
531
+
532
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
533
+ %define output_width(b) (b) + 12 ; JDIMENSION output_width
534
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
535
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
536
+
537
+ align 32
538
+ GLOBAL_FUNCTION(jsimd_h2v1_upsample_sse2)
539
+
540
+ EXTN(jsimd_h2v1_upsample_sse2):
541
+ push ebp
542
+ mov ebp, esp
543
+ ; push ebx ; unused
544
+ ; push ecx ; need not be preserved
545
+ ; push edx ; need not be preserved
546
+ push esi
547
+ push edi
548
+
549
+ mov edx, JDIMENSION [output_width(ebp)]
550
+ add edx, byte (2*SIZEOF_XMMWORD)-1
551
+ and edx, byte -(2*SIZEOF_XMMWORD)
552
+ jz short .return
553
+
554
+ mov ecx, INT [max_v_samp(ebp)] ; rowctr
555
+ test ecx, ecx
556
+ jz short .return
557
+
558
+ mov esi, JSAMPARRAY [input_data(ebp)] ; input_data
559
+ mov edi, POINTER [output_data_ptr(ebp)]
560
+ mov edi, JSAMPARRAY [edi] ; output_data
561
+ alignx 16, 7
562
+ .rowloop:
563
+ push edi
564
+ push esi
565
+
566
+ mov esi, JSAMPROW [esi] ; inptr
567
+ mov edi, JSAMPROW [edi] ; outptr
568
+ mov eax, edx ; colctr
569
+ alignx 16, 7
570
+ .columnloop:
571
+
572
+ movdqa xmm0, XMMWORD [esi+0*SIZEOF_XMMWORD]
573
+
574
+ movdqa xmm1, xmm0
575
+ punpcklbw xmm0, xmm0
576
+ punpckhbw xmm1, xmm1
577
+
578
+ movdqa XMMWORD [edi+0*SIZEOF_XMMWORD], xmm0
579
+ movdqa XMMWORD [edi+1*SIZEOF_XMMWORD], xmm1
580
+
581
+ sub eax, byte 2*SIZEOF_XMMWORD
582
+ jz short .nextrow
583
+
584
+ movdqa xmm2, XMMWORD [esi+1*SIZEOF_XMMWORD]
585
+
586
+ movdqa xmm3, xmm2
587
+ punpcklbw xmm2, xmm2
588
+ punpckhbw xmm3, xmm3
589
+
590
+ movdqa XMMWORD [edi+2*SIZEOF_XMMWORD], xmm2
591
+ movdqa XMMWORD [edi+3*SIZEOF_XMMWORD], xmm3
592
+
593
+ sub eax, byte 2*SIZEOF_XMMWORD
594
+ jz short .nextrow
595
+
596
+ add esi, byte 2*SIZEOF_XMMWORD ; inptr
597
+ add edi, byte 4*SIZEOF_XMMWORD ; outptr
598
+ jmp short .columnloop
599
+ alignx 16, 7
600
+
601
+ .nextrow:
602
+ pop esi
603
+ pop edi
604
+
605
+ add esi, byte SIZEOF_JSAMPROW ; input_data
606
+ add edi, byte SIZEOF_JSAMPROW ; output_data
607
+ dec ecx ; rowctr
608
+ jg short .rowloop
609
+
610
+ .return:
611
+ pop edi
612
+ pop esi
613
+ ; pop edx ; need not be preserved
614
+ ; pop ecx ; need not be preserved
615
+ ; pop ebx ; unused
616
+ pop ebp
617
+ ret
618
+
619
+ ; --------------------------------------------------------------------------
620
+ ;
621
+ ; Fast processing for the common case of 2:1 horizontal and 2:1 vertical.
622
+ ; It's still a box filter.
623
+ ;
624
+ ; GLOBAL(void)
625
+ ; jsimd_h2v2_upsample_sse2(int max_v_samp_factor, JDIMENSION output_width,
626
+ ; JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
627
+ ;
628
+
629
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
630
+ %define output_width(b) (b) + 12 ; JDIMENSION output_width
631
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
632
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
633
+
634
+ align 32
635
+ GLOBAL_FUNCTION(jsimd_h2v2_upsample_sse2)
636
+
637
+ EXTN(jsimd_h2v2_upsample_sse2):
638
+ push ebp
639
+ mov ebp, esp
640
+ push ebx
641
+ ; push ecx ; need not be preserved
642
+ ; push edx ; need not be preserved
643
+ push esi
644
+ push edi
645
+
646
+ mov edx, JDIMENSION [output_width(ebp)]
647
+ add edx, byte (2*SIZEOF_XMMWORD)-1
648
+ and edx, byte -(2*SIZEOF_XMMWORD)
649
+ jz near .return
650
+
651
+ mov ecx, INT [max_v_samp(ebp)] ; rowctr
652
+ test ecx, ecx
653
+ jz near .return
654
+
655
+ mov esi, JSAMPARRAY [input_data(ebp)] ; input_data
656
+ mov edi, POINTER [output_data_ptr(ebp)]
657
+ mov edi, JSAMPARRAY [edi] ; output_data
658
+ alignx 16, 7
659
+ .rowloop:
660
+ push edi
661
+ push esi
662
+
663
+ mov esi, JSAMPROW [esi] ; inptr
664
+ mov ebx, JSAMPROW [edi+0*SIZEOF_JSAMPROW] ; outptr0
665
+ mov edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW] ; outptr1
666
+ mov eax, edx ; colctr
667
+ alignx 16, 7
668
+ .columnloop:
669
+
670
+ movdqa xmm0, XMMWORD [esi+0*SIZEOF_XMMWORD]
671
+
672
+ movdqa xmm1, xmm0
673
+ punpcklbw xmm0, xmm0
674
+ punpckhbw xmm1, xmm1
675
+
676
+ movdqa XMMWORD [ebx+0*SIZEOF_XMMWORD], xmm0
677
+ movdqa XMMWORD [ebx+1*SIZEOF_XMMWORD], xmm1
678
+ movdqa XMMWORD [edi+0*SIZEOF_XMMWORD], xmm0
679
+ movdqa XMMWORD [edi+1*SIZEOF_XMMWORD], xmm1
680
+
681
+ sub eax, byte 2*SIZEOF_XMMWORD
682
+ jz short .nextrow
683
+
684
+ movdqa xmm2, XMMWORD [esi+1*SIZEOF_XMMWORD]
685
+
686
+ movdqa xmm3, xmm2
687
+ punpcklbw xmm2, xmm2
688
+ punpckhbw xmm3, xmm3
689
+
690
+ movdqa XMMWORD [ebx+2*SIZEOF_XMMWORD], xmm2
691
+ movdqa XMMWORD [ebx+3*SIZEOF_XMMWORD], xmm3
692
+ movdqa XMMWORD [edi+2*SIZEOF_XMMWORD], xmm2
693
+ movdqa XMMWORD [edi+3*SIZEOF_XMMWORD], xmm3
694
+
695
+ sub eax, byte 2*SIZEOF_XMMWORD
696
+ jz short .nextrow
697
+
698
+ add esi, byte 2*SIZEOF_XMMWORD ; inptr
699
+ add ebx, byte 4*SIZEOF_XMMWORD ; outptr0
700
+ add edi, byte 4*SIZEOF_XMMWORD ; outptr1
701
+ jmp short .columnloop
702
+ alignx 16, 7
703
+
704
+ .nextrow:
705
+ pop esi
706
+ pop edi
707
+
708
+ add esi, byte 1*SIZEOF_JSAMPROW ; input_data
709
+ add edi, byte 2*SIZEOF_JSAMPROW ; output_data
710
+ sub ecx, byte 2 ; rowctr
711
+ jg short .rowloop
712
+
713
+ .return:
714
+ pop edi
715
+ pop esi
716
+ ; pop edx ; need not be preserved
717
+ ; pop ecx ; need not be preserved
718
+ pop ebx
719
+ pop ebp
720
+ ret
721
+
722
+ ; For some reason, the OS X linker does not honor the request to align the
723
+ ; segment unless we do this.
724
+ align 32