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,731 @@
1
+ ;
2
+ ; jdsample.asm - upsampling (MMX)
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_mmx)
24
+
25
+ EXTN(jconst_fancy_upsample_mmx):
26
+
27
+ PW_ONE times 4 dw 1
28
+ PW_TWO times 4 dw 2
29
+ PW_THREE times 4 dw 3
30
+ PW_SEVEN times 4 dw 7
31
+ PW_EIGHT times 4 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_mmx(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_mmx)
60
+
61
+ EXTN(jsimd_h2v1_fancy_upsample_mmx):
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_MMWORD-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 mm0, mm0 ; mm0=(all 0's)
98
+ pcmpeqb mm7, mm7
99
+ psrlq mm7, (SIZEOF_MMWORD-1)*BYTE_BIT
100
+ pand mm7, MMWORD [esi+0*SIZEOF_MMWORD]
101
+
102
+ add eax, byte SIZEOF_MMWORD-1
103
+ and eax, byte -SIZEOF_MMWORD
104
+ cmp eax, byte SIZEOF_MMWORD
105
+ ja short .columnloop
106
+ alignx 16, 7
107
+
108
+ .columnloop_last:
109
+ pcmpeqb mm6, mm6
110
+ psllq mm6, (SIZEOF_MMWORD-1)*BYTE_BIT
111
+ pand mm6, MMWORD [esi+0*SIZEOF_MMWORD]
112
+ jmp short .upsample
113
+ alignx 16, 7
114
+
115
+ .columnloop:
116
+ movq mm6, MMWORD [esi+1*SIZEOF_MMWORD]
117
+ psllq mm6, (SIZEOF_MMWORD-1)*BYTE_BIT
118
+
119
+ .upsample:
120
+ movq mm1, MMWORD [esi+0*SIZEOF_MMWORD]
121
+ movq mm2, mm1
122
+ movq mm3, mm1 ; mm1=( 0 1 2 3 4 5 6 7)
123
+ psllq mm2, BYTE_BIT ; mm2=( - 0 1 2 3 4 5 6)
124
+ psrlq mm3, BYTE_BIT ; mm3=( 1 2 3 4 5 6 7 -)
125
+
126
+ por mm2, mm7 ; mm2=(-1 0 1 2 3 4 5 6)
127
+ por mm3, mm6 ; mm3=( 1 2 3 4 5 6 7 8)
128
+
129
+ movq mm7, mm1
130
+ psrlq mm7, (SIZEOF_MMWORD-1)*BYTE_BIT ; mm7=( 7 - - - - - - -)
131
+
132
+ movq mm4, mm1
133
+ punpcklbw mm1, mm0 ; mm1=( 0 1 2 3)
134
+ punpckhbw mm4, mm0 ; mm4=( 4 5 6 7)
135
+ movq mm5, mm2
136
+ punpcklbw mm2, mm0 ; mm2=(-1 0 1 2)
137
+ punpckhbw mm5, mm0 ; mm5=( 3 4 5 6)
138
+ movq mm6, mm3
139
+ punpcklbw mm3, mm0 ; mm3=( 1 2 3 4)
140
+ punpckhbw mm6, mm0 ; mm6=( 5 6 7 8)
141
+
142
+ pmullw mm1, [GOTOFF(ebx,PW_THREE)]
143
+ pmullw mm4, [GOTOFF(ebx,PW_THREE)]
144
+ paddw mm2, [GOTOFF(ebx,PW_ONE)]
145
+ paddw mm5, [GOTOFF(ebx,PW_ONE)]
146
+ paddw mm3, [GOTOFF(ebx,PW_TWO)]
147
+ paddw mm6, [GOTOFF(ebx,PW_TWO)]
148
+
149
+ paddw mm2, mm1
150
+ paddw mm5, mm4
151
+ psrlw mm2, 2 ; mm2=OutLE=( 0 2 4 6)
152
+ psrlw mm5, 2 ; mm5=OutHE=( 8 10 12 14)
153
+ paddw mm3, mm1
154
+ paddw mm6, mm4
155
+ psrlw mm3, 2 ; mm3=OutLO=( 1 3 5 7)
156
+ psrlw mm6, 2 ; mm6=OutHO=( 9 11 13 15)
157
+
158
+ psllw mm3, BYTE_BIT
159
+ psllw mm6, BYTE_BIT
160
+ por mm2, mm3 ; mm2=OutL=( 0 1 2 3 4 5 6 7)
161
+ por mm5, mm6 ; mm5=OutH=( 8 9 10 11 12 13 14 15)
162
+
163
+ movq MMWORD [edi+0*SIZEOF_MMWORD], mm2
164
+ movq MMWORD [edi+1*SIZEOF_MMWORD], mm5
165
+
166
+ sub eax, byte SIZEOF_MMWORD
167
+ add esi, byte 1*SIZEOF_MMWORD ; inptr
168
+ add edi, byte 2*SIZEOF_MMWORD ; outptr
169
+ cmp eax, byte SIZEOF_MMWORD
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
+ emms ; empty MMX state
184
+
185
+ .return:
186
+ pop edi
187
+ pop esi
188
+ ; pop edx ; need not be preserved
189
+ ; pop ecx ; need not be preserved
190
+ poppic ebx
191
+ pop ebp
192
+ ret
193
+
194
+ ; --------------------------------------------------------------------------
195
+ ;
196
+ ; Fancy processing for the common case of 2:1 horizontal and 2:1 vertical.
197
+ ; Again a triangle filter; see comments for h2v1 case, above.
198
+ ;
199
+ ; GLOBAL(void)
200
+ ; jsimd_h2v2_fancy_upsample_mmx(int max_v_samp_factor,
201
+ ; JDIMENSION downsampled_width,
202
+ ; JSAMPARRAY input_data,
203
+ ; JSAMPARRAY *output_data_ptr);
204
+ ;
205
+
206
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
207
+ %define downsamp_width(b) (b) + 12 ; JDIMENSION downsampled_width
208
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
209
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
210
+
211
+ %define original_ebp ebp + 0
212
+ %define wk(i) ebp - (WK_NUM - (i)) * SIZEOF_MMWORD ; mmword wk[WK_NUM]
213
+ %define WK_NUM 4
214
+ %define gotptr wk(0) - SIZEOF_POINTER ; void *gotptr
215
+
216
+ align 32
217
+ GLOBAL_FUNCTION(jsimd_h2v2_fancy_upsample_mmx)
218
+
219
+ EXTN(jsimd_h2v2_fancy_upsample_mmx):
220
+ push ebp
221
+ mov eax, esp ; eax = original ebp
222
+ sub esp, byte 4
223
+ and esp, byte (-SIZEOF_MMWORD) ; align to 64 bits
224
+ mov [esp], eax
225
+ mov ebp, esp ; ebp = aligned ebp
226
+ lea esp, [wk(0)]
227
+ pushpic eax ; make a room for GOT address
228
+ push ebx
229
+ ; push ecx ; need not be preserved
230
+ ; push edx ; need not be preserved
231
+ push esi
232
+ push edi
233
+
234
+ get_GOT ebx ; get GOT address
235
+ movpic POINTER [gotptr], ebx ; save GOT address
236
+
237
+ mov edx, eax ; edx = original ebp
238
+ mov eax, JDIMENSION [downsamp_width(edx)] ; colctr
239
+ test eax, eax
240
+ jz near .return
241
+
242
+ mov ecx, INT [max_v_samp(edx)] ; rowctr
243
+ test ecx, ecx
244
+ jz near .return
245
+
246
+ mov esi, JSAMPARRAY [input_data(edx)] ; input_data
247
+ mov edi, POINTER [output_data_ptr(edx)]
248
+ mov edi, JSAMPARRAY [edi] ; output_data
249
+ alignx 16, 7
250
+ .rowloop:
251
+ push eax ; colctr
252
+ push ecx
253
+ push edi
254
+ push esi
255
+
256
+ mov ecx, JSAMPROW [esi-1*SIZEOF_JSAMPROW] ; inptr1(above)
257
+ mov ebx, JSAMPROW [esi+0*SIZEOF_JSAMPROW] ; inptr0
258
+ mov esi, JSAMPROW [esi+1*SIZEOF_JSAMPROW] ; inptr1(below)
259
+ mov edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW] ; outptr0
260
+ mov edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW] ; outptr1
261
+
262
+ test eax, SIZEOF_MMWORD-1
263
+ jz short .skip
264
+ push edx
265
+ mov dl, JSAMPLE [ecx+(eax-1)*SIZEOF_JSAMPLE]
266
+ mov JSAMPLE [ecx+eax*SIZEOF_JSAMPLE], dl
267
+ mov dl, JSAMPLE [ebx+(eax-1)*SIZEOF_JSAMPLE]
268
+ mov JSAMPLE [ebx+eax*SIZEOF_JSAMPLE], dl
269
+ mov dl, JSAMPLE [esi+(eax-1)*SIZEOF_JSAMPLE]
270
+ mov JSAMPLE [esi+eax*SIZEOF_JSAMPLE], dl ; insert a dummy sample
271
+ pop edx
272
+ .skip:
273
+ ; -- process the first column block
274
+
275
+ movq mm0, MMWORD [ebx+0*SIZEOF_MMWORD] ; mm0=row[ 0][0]
276
+ movq mm1, MMWORD [ecx+0*SIZEOF_MMWORD] ; mm1=row[-1][0]
277
+ movq mm2, MMWORD [esi+0*SIZEOF_MMWORD] ; mm2=row[+1][0]
278
+
279
+ pushpic ebx
280
+ movpic ebx, POINTER [gotptr] ; load GOT address
281
+
282
+ pxor mm3, mm3 ; mm3=(all 0's)
283
+ movq mm4, mm0
284
+ punpcklbw mm0, mm3 ; mm0=row[ 0][0]( 0 1 2 3)
285
+ punpckhbw mm4, mm3 ; mm4=row[ 0][0]( 4 5 6 7)
286
+ movq mm5, mm1
287
+ punpcklbw mm1, mm3 ; mm1=row[-1][0]( 0 1 2 3)
288
+ punpckhbw mm5, mm3 ; mm5=row[-1][0]( 4 5 6 7)
289
+ movq mm6, mm2
290
+ punpcklbw mm2, mm3 ; mm2=row[+1][0]( 0 1 2 3)
291
+ punpckhbw mm6, mm3 ; mm6=row[+1][0]( 4 5 6 7)
292
+
293
+ pmullw mm0, [GOTOFF(ebx,PW_THREE)]
294
+ pmullw mm4, [GOTOFF(ebx,PW_THREE)]
295
+
296
+ pcmpeqb mm7, mm7
297
+ psrlq mm7, (SIZEOF_MMWORD-2)*BYTE_BIT
298
+
299
+ paddw mm1, mm0 ; mm1=Int0L=( 0 1 2 3)
300
+ paddw mm5, mm4 ; mm5=Int0H=( 4 5 6 7)
301
+ paddw mm2, mm0 ; mm2=Int1L=( 0 1 2 3)
302
+ paddw mm6, mm4 ; mm6=Int1H=( 4 5 6 7)
303
+
304
+ movq MMWORD [edx+0*SIZEOF_MMWORD], mm1 ; temporarily save
305
+ movq MMWORD [edx+1*SIZEOF_MMWORD], mm5 ; the intermediate data
306
+ movq MMWORD [edi+0*SIZEOF_MMWORD], mm2
307
+ movq MMWORD [edi+1*SIZEOF_MMWORD], mm6
308
+
309
+ pand mm1, mm7 ; mm1=( 0 - - -)
310
+ pand mm2, mm7 ; mm2=( 0 - - -)
311
+
312
+ movq MMWORD [wk(0)], mm1
313
+ movq MMWORD [wk(1)], mm2
314
+
315
+ poppic ebx
316
+
317
+ add eax, byte SIZEOF_MMWORD-1
318
+ and eax, byte -SIZEOF_MMWORD
319
+ cmp eax, byte SIZEOF_MMWORD
320
+ ja short .columnloop
321
+ alignx 16, 7
322
+
323
+ .columnloop_last:
324
+ ; -- process the last column block
325
+
326
+ pushpic ebx
327
+ movpic ebx, POINTER [gotptr] ; load GOT address
328
+
329
+ pcmpeqb mm1, mm1
330
+ psllq mm1, (SIZEOF_MMWORD-2)*BYTE_BIT
331
+ movq mm2, mm1
332
+
333
+ pand mm1, MMWORD [edx+1*SIZEOF_MMWORD] ; mm1=( - - - 7)
334
+ pand mm2, MMWORD [edi+1*SIZEOF_MMWORD] ; mm2=( - - - 7)
335
+
336
+ movq MMWORD [wk(2)], mm1
337
+ movq MMWORD [wk(3)], mm2
338
+
339
+ jmp short .upsample
340
+ alignx 16, 7
341
+
342
+ .columnloop:
343
+ ; -- process the next column block
344
+
345
+ movq mm0, MMWORD [ebx+1*SIZEOF_MMWORD] ; mm0=row[ 0][1]
346
+ movq mm1, MMWORD [ecx+1*SIZEOF_MMWORD] ; mm1=row[-1][1]
347
+ movq mm2, MMWORD [esi+1*SIZEOF_MMWORD] ; mm2=row[+1][1]
348
+
349
+ pushpic ebx
350
+ movpic ebx, POINTER [gotptr] ; load GOT address
351
+
352
+ pxor mm3, mm3 ; mm3=(all 0's)
353
+ movq mm4, mm0
354
+ punpcklbw mm0, mm3 ; mm0=row[ 0][1]( 0 1 2 3)
355
+ punpckhbw mm4, mm3 ; mm4=row[ 0][1]( 4 5 6 7)
356
+ movq mm5, mm1
357
+ punpcklbw mm1, mm3 ; mm1=row[-1][1]( 0 1 2 3)
358
+ punpckhbw mm5, mm3 ; mm5=row[-1][1]( 4 5 6 7)
359
+ movq mm6, mm2
360
+ punpcklbw mm2, mm3 ; mm2=row[+1][1]( 0 1 2 3)
361
+ punpckhbw mm6, mm3 ; mm6=row[+1][1]( 4 5 6 7)
362
+
363
+ pmullw mm0, [GOTOFF(ebx,PW_THREE)]
364
+ pmullw mm4, [GOTOFF(ebx,PW_THREE)]
365
+
366
+ paddw mm1, mm0 ; mm1=Int0L=( 0 1 2 3)
367
+ paddw mm5, mm4 ; mm5=Int0H=( 4 5 6 7)
368
+ paddw mm2, mm0 ; mm2=Int1L=( 0 1 2 3)
369
+ paddw mm6, mm4 ; mm6=Int1H=( 4 5 6 7)
370
+
371
+ movq MMWORD [edx+2*SIZEOF_MMWORD], mm1 ; temporarily save
372
+ movq MMWORD [edx+3*SIZEOF_MMWORD], mm5 ; the intermediate data
373
+ movq MMWORD [edi+2*SIZEOF_MMWORD], mm2
374
+ movq MMWORD [edi+3*SIZEOF_MMWORD], mm6
375
+
376
+ psllq mm1, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm1=( - - - 0)
377
+ psllq mm2, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm2=( - - - 0)
378
+
379
+ movq MMWORD [wk(2)], mm1
380
+ movq MMWORD [wk(3)], mm2
381
+
382
+ .upsample:
383
+ ; -- process the upper row
384
+
385
+ movq mm7, MMWORD [edx+0*SIZEOF_MMWORD] ; mm7=Int0L=( 0 1 2 3)
386
+ movq mm3, MMWORD [edx+1*SIZEOF_MMWORD] ; mm3=Int0H=( 4 5 6 7)
387
+
388
+ movq mm0, mm7
389
+ movq mm4, mm3
390
+ psrlq mm0, 2*BYTE_BIT ; mm0=( 1 2 3 -)
391
+ psllq mm4, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm4=( - - - 4)
392
+ movq mm5, mm7
393
+ movq mm6, mm3
394
+ psrlq mm5, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm5=( 3 - - -)
395
+ psllq mm6, 2*BYTE_BIT ; mm6=( - 4 5 6)
396
+
397
+ por mm0, mm4 ; mm0=( 1 2 3 4)
398
+ por mm5, mm6 ; mm5=( 3 4 5 6)
399
+
400
+ movq mm1, mm7
401
+ movq mm2, mm3
402
+ psllq mm1, 2*BYTE_BIT ; mm1=( - 0 1 2)
403
+ psrlq mm2, 2*BYTE_BIT ; mm2=( 5 6 7 -)
404
+ movq mm4, mm3
405
+ psrlq mm4, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm4=( 7 - - -)
406
+
407
+ por mm1, MMWORD [wk(0)] ; mm1=(-1 0 1 2)
408
+ por mm2, MMWORD [wk(2)] ; mm2=( 5 6 7 8)
409
+
410
+ movq MMWORD [wk(0)], mm4
411
+
412
+ pmullw mm7, [GOTOFF(ebx,PW_THREE)]
413
+ pmullw mm3, [GOTOFF(ebx,PW_THREE)]
414
+ paddw mm1, [GOTOFF(ebx,PW_EIGHT)]
415
+ paddw mm5, [GOTOFF(ebx,PW_EIGHT)]
416
+ paddw mm0, [GOTOFF(ebx,PW_SEVEN)]
417
+ paddw mm2, [GOTOFF(ebx,PW_SEVEN)]
418
+
419
+ paddw mm1, mm7
420
+ paddw mm5, mm3
421
+ psrlw mm1, 4 ; mm1=Out0LE=( 0 2 4 6)
422
+ psrlw mm5, 4 ; mm5=Out0HE=( 8 10 12 14)
423
+ paddw mm0, mm7
424
+ paddw mm2, mm3
425
+ psrlw mm0, 4 ; mm0=Out0LO=( 1 3 5 7)
426
+ psrlw mm2, 4 ; mm2=Out0HO=( 9 11 13 15)
427
+
428
+ psllw mm0, BYTE_BIT
429
+ psllw mm2, BYTE_BIT
430
+ por mm1, mm0 ; mm1=Out0L=( 0 1 2 3 4 5 6 7)
431
+ por mm5, mm2 ; mm5=Out0H=( 8 9 10 11 12 13 14 15)
432
+
433
+ movq MMWORD [edx+0*SIZEOF_MMWORD], mm1
434
+ movq MMWORD [edx+1*SIZEOF_MMWORD], mm5
435
+
436
+ ; -- process the lower row
437
+
438
+ movq mm6, MMWORD [edi+0*SIZEOF_MMWORD] ; mm6=Int1L=( 0 1 2 3)
439
+ movq mm4, MMWORD [edi+1*SIZEOF_MMWORD] ; mm4=Int1H=( 4 5 6 7)
440
+
441
+ movq mm7, mm6
442
+ movq mm3, mm4
443
+ psrlq mm7, 2*BYTE_BIT ; mm7=( 1 2 3 -)
444
+ psllq mm3, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm3=( - - - 4)
445
+ movq mm0, mm6
446
+ movq mm2, mm4
447
+ psrlq mm0, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm0=( 3 - - -)
448
+ psllq mm2, 2*BYTE_BIT ; mm2=( - 4 5 6)
449
+
450
+ por mm7, mm3 ; mm7=( 1 2 3 4)
451
+ por mm0, mm2 ; mm0=( 3 4 5 6)
452
+
453
+ movq mm1, mm6
454
+ movq mm5, mm4
455
+ psllq mm1, 2*BYTE_BIT ; mm1=( - 0 1 2)
456
+ psrlq mm5, 2*BYTE_BIT ; mm5=( 5 6 7 -)
457
+ movq mm3, mm4
458
+ psrlq mm3, (SIZEOF_MMWORD-2)*BYTE_BIT ; mm3=( 7 - - -)
459
+
460
+ por mm1, MMWORD [wk(1)] ; mm1=(-1 0 1 2)
461
+ por mm5, MMWORD [wk(3)] ; mm5=( 5 6 7 8)
462
+
463
+ movq MMWORD [wk(1)], mm3
464
+
465
+ pmullw mm6, [GOTOFF(ebx,PW_THREE)]
466
+ pmullw mm4, [GOTOFF(ebx,PW_THREE)]
467
+ paddw mm1, [GOTOFF(ebx,PW_EIGHT)]
468
+ paddw mm0, [GOTOFF(ebx,PW_EIGHT)]
469
+ paddw mm7, [GOTOFF(ebx,PW_SEVEN)]
470
+ paddw mm5, [GOTOFF(ebx,PW_SEVEN)]
471
+
472
+ paddw mm1, mm6
473
+ paddw mm0, mm4
474
+ psrlw mm1, 4 ; mm1=Out1LE=( 0 2 4 6)
475
+ psrlw mm0, 4 ; mm0=Out1HE=( 8 10 12 14)
476
+ paddw mm7, mm6
477
+ paddw mm5, mm4
478
+ psrlw mm7, 4 ; mm7=Out1LO=( 1 3 5 7)
479
+ psrlw mm5, 4 ; mm5=Out1HO=( 9 11 13 15)
480
+
481
+ psllw mm7, BYTE_BIT
482
+ psllw mm5, BYTE_BIT
483
+ por mm1, mm7 ; mm1=Out1L=( 0 1 2 3 4 5 6 7)
484
+ por mm0, mm5 ; mm0=Out1H=( 8 9 10 11 12 13 14 15)
485
+
486
+ movq MMWORD [edi+0*SIZEOF_MMWORD], mm1
487
+ movq MMWORD [edi+1*SIZEOF_MMWORD], mm0
488
+
489
+ poppic ebx
490
+
491
+ sub eax, byte SIZEOF_MMWORD
492
+ add ecx, byte 1*SIZEOF_MMWORD ; inptr1(above)
493
+ add ebx, byte 1*SIZEOF_MMWORD ; inptr0
494
+ add esi, byte 1*SIZEOF_MMWORD ; inptr1(below)
495
+ add edx, byte 2*SIZEOF_MMWORD ; outptr0
496
+ add edi, byte 2*SIZEOF_MMWORD ; outptr1
497
+ cmp eax, byte SIZEOF_MMWORD
498
+ ja near .columnloop
499
+ test eax, eax
500
+ jnz near .columnloop_last
501
+
502
+ pop esi
503
+ pop edi
504
+ pop ecx
505
+ pop eax
506
+
507
+ add esi, byte 1*SIZEOF_JSAMPROW ; input_data
508
+ add edi, byte 2*SIZEOF_JSAMPROW ; output_data
509
+ sub ecx, byte 2 ; rowctr
510
+ jg near .rowloop
511
+
512
+ emms ; empty MMX state
513
+
514
+ .return:
515
+ pop edi
516
+ pop esi
517
+ ; pop edx ; need not be preserved
518
+ ; pop ecx ; need not be preserved
519
+ pop ebx
520
+ mov esp, ebp ; esp <- aligned ebp
521
+ pop esp ; esp <- original ebp
522
+ pop ebp
523
+ ret
524
+
525
+ ; --------------------------------------------------------------------------
526
+ ;
527
+ ; Fast processing for the common case of 2:1 horizontal and 1:1 vertical.
528
+ ; It's still a box filter.
529
+ ;
530
+ ; GLOBAL(void)
531
+ ; jsimd_h2v1_upsample_mmx(int max_v_samp_factor, JDIMENSION output_width,
532
+ ; JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
533
+ ;
534
+
535
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
536
+ %define output_width(b) (b) + 12 ; JDIMENSION output_width
537
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
538
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
539
+
540
+ align 32
541
+ GLOBAL_FUNCTION(jsimd_h2v1_upsample_mmx)
542
+
543
+ EXTN(jsimd_h2v1_upsample_mmx):
544
+ push ebp
545
+ mov ebp, esp
546
+ ; push ebx ; unused
547
+ ; push ecx ; need not be preserved
548
+ ; push edx ; need not be preserved
549
+ push esi
550
+ push edi
551
+
552
+ mov edx, JDIMENSION [output_width(ebp)]
553
+ add edx, byte (2*SIZEOF_MMWORD)-1
554
+ and edx, byte -(2*SIZEOF_MMWORD)
555
+ jz short .return
556
+
557
+ mov ecx, INT [max_v_samp(ebp)] ; rowctr
558
+ test ecx, ecx
559
+ jz short .return
560
+
561
+ mov esi, JSAMPARRAY [input_data(ebp)] ; input_data
562
+ mov edi, POINTER [output_data_ptr(ebp)]
563
+ mov edi, JSAMPARRAY [edi] ; output_data
564
+ alignx 16, 7
565
+ .rowloop:
566
+ push edi
567
+ push esi
568
+
569
+ mov esi, JSAMPROW [esi] ; inptr
570
+ mov edi, JSAMPROW [edi] ; outptr
571
+ mov eax, edx ; colctr
572
+ alignx 16, 7
573
+ .columnloop:
574
+
575
+ movq mm0, MMWORD [esi+0*SIZEOF_MMWORD]
576
+
577
+ movq mm1, mm0
578
+ punpcklbw mm0, mm0
579
+ punpckhbw mm1, mm1
580
+
581
+ movq MMWORD [edi+0*SIZEOF_MMWORD], mm0
582
+ movq MMWORD [edi+1*SIZEOF_MMWORD], mm1
583
+
584
+ sub eax, byte 2*SIZEOF_MMWORD
585
+ jz short .nextrow
586
+
587
+ movq mm2, MMWORD [esi+1*SIZEOF_MMWORD]
588
+
589
+ movq mm3, mm2
590
+ punpcklbw mm2, mm2
591
+ punpckhbw mm3, mm3
592
+
593
+ movq MMWORD [edi+2*SIZEOF_MMWORD], mm2
594
+ movq MMWORD [edi+3*SIZEOF_MMWORD], mm3
595
+
596
+ sub eax, byte 2*SIZEOF_MMWORD
597
+ jz short .nextrow
598
+
599
+ add esi, byte 2*SIZEOF_MMWORD ; inptr
600
+ add edi, byte 4*SIZEOF_MMWORD ; outptr
601
+ jmp short .columnloop
602
+ alignx 16, 7
603
+
604
+ .nextrow:
605
+ pop esi
606
+ pop edi
607
+
608
+ add esi, byte SIZEOF_JSAMPROW ; input_data
609
+ add edi, byte SIZEOF_JSAMPROW ; output_data
610
+ dec ecx ; rowctr
611
+ jg short .rowloop
612
+
613
+ emms ; empty MMX state
614
+
615
+ .return:
616
+ pop edi
617
+ pop esi
618
+ ; pop edx ; need not be preserved
619
+ ; pop ecx ; need not be preserved
620
+ ; pop ebx ; unused
621
+ pop ebp
622
+ ret
623
+
624
+ ; --------------------------------------------------------------------------
625
+ ;
626
+ ; Fast processing for the common case of 2:1 horizontal and 2:1 vertical.
627
+ ; It's still a box filter.
628
+ ;
629
+ ; GLOBAL(void)
630
+ ; jsimd_h2v2_upsample_mmx(int max_v_samp_factor, JDIMENSION output_width,
631
+ ; JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
632
+ ;
633
+
634
+ %define max_v_samp(b) (b) + 8 ; int max_v_samp_factor
635
+ %define output_width(b) (b) + 12 ; JDIMENSION output_width
636
+ %define input_data(b) (b) + 16 ; JSAMPARRAY input_data
637
+ %define output_data_ptr(b) (b) + 20 ; JSAMPARRAY *output_data_ptr
638
+
639
+ align 32
640
+ GLOBAL_FUNCTION(jsimd_h2v2_upsample_mmx)
641
+
642
+ EXTN(jsimd_h2v2_upsample_mmx):
643
+ push ebp
644
+ mov ebp, esp
645
+ push ebx
646
+ ; push ecx ; need not be preserved
647
+ ; push edx ; need not be preserved
648
+ push esi
649
+ push edi
650
+
651
+ mov edx, JDIMENSION [output_width(ebp)]
652
+ add edx, byte (2*SIZEOF_MMWORD)-1
653
+ and edx, byte -(2*SIZEOF_MMWORD)
654
+ jz near .return
655
+
656
+ mov ecx, INT [max_v_samp(ebp)] ; rowctr
657
+ test ecx, ecx
658
+ jz short .return
659
+
660
+ mov esi, JSAMPARRAY [input_data(ebp)] ; input_data
661
+ mov edi, POINTER [output_data_ptr(ebp)]
662
+ mov edi, JSAMPARRAY [edi] ; output_data
663
+ alignx 16, 7
664
+ .rowloop:
665
+ push edi
666
+ push esi
667
+
668
+ mov esi, JSAMPROW [esi] ; inptr
669
+ mov ebx, JSAMPROW [edi+0*SIZEOF_JSAMPROW] ; outptr0
670
+ mov edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW] ; outptr1
671
+ mov eax, edx ; colctr
672
+ alignx 16, 7
673
+ .columnloop:
674
+
675
+ movq mm0, MMWORD [esi+0*SIZEOF_MMWORD]
676
+
677
+ movq mm1, mm0
678
+ punpcklbw mm0, mm0
679
+ punpckhbw mm1, mm1
680
+
681
+ movq MMWORD [ebx+0*SIZEOF_MMWORD], mm0
682
+ movq MMWORD [ebx+1*SIZEOF_MMWORD], mm1
683
+ movq MMWORD [edi+0*SIZEOF_MMWORD], mm0
684
+ movq MMWORD [edi+1*SIZEOF_MMWORD], mm1
685
+
686
+ sub eax, byte 2*SIZEOF_MMWORD
687
+ jz short .nextrow
688
+
689
+ movq mm2, MMWORD [esi+1*SIZEOF_MMWORD]
690
+
691
+ movq mm3, mm2
692
+ punpcklbw mm2, mm2
693
+ punpckhbw mm3, mm3
694
+
695
+ movq MMWORD [ebx+2*SIZEOF_MMWORD], mm2
696
+ movq MMWORD [ebx+3*SIZEOF_MMWORD], mm3
697
+ movq MMWORD [edi+2*SIZEOF_MMWORD], mm2
698
+ movq MMWORD [edi+3*SIZEOF_MMWORD], mm3
699
+
700
+ sub eax, byte 2*SIZEOF_MMWORD
701
+ jz short .nextrow
702
+
703
+ add esi, byte 2*SIZEOF_MMWORD ; inptr
704
+ add ebx, byte 4*SIZEOF_MMWORD ; outptr0
705
+ add edi, byte 4*SIZEOF_MMWORD ; outptr1
706
+ jmp short .columnloop
707
+ alignx 16, 7
708
+
709
+ .nextrow:
710
+ pop esi
711
+ pop edi
712
+
713
+ add esi, byte 1*SIZEOF_JSAMPROW ; input_data
714
+ add edi, byte 2*SIZEOF_JSAMPROW ; output_data
715
+ sub ecx, byte 2 ; rowctr
716
+ jg short .rowloop
717
+
718
+ emms ; empty MMX state
719
+
720
+ .return:
721
+ pop edi
722
+ pop esi
723
+ ; pop edx ; need not be preserved
724
+ ; pop ecx ; need not be preserved
725
+ pop ebx
726
+ pop ebp
727
+ ret
728
+
729
+ ; For some reason, the OS X linker does not honor the request to align the
730
+ ; segment unless we do this.
731
+ align 32