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,859 @@
1
+ /*
2
+ * jquant1.c
3
+ *
4
+ * This file was part of the Independent JPEG Group's software:
5
+ * Copyright (C) 1991-1996, Thomas G. Lane.
6
+ * libjpeg-turbo Modifications:
7
+ * Copyright (C) 2009, 2015, D. R. Commander.
8
+ * For conditions of distribution and use, see the accompanying README.ijg
9
+ * file.
10
+ *
11
+ * This file contains 1-pass color quantization (color mapping) routines.
12
+ * These routines provide mapping to a fixed color map using equally spaced
13
+ * color values. Optional Floyd-Steinberg or ordered dithering is available.
14
+ */
15
+
16
+ #define JPEG_INTERNALS
17
+ #include "jinclude.h"
18
+ #include "jpeglib.h"
19
+
20
+ #ifdef QUANT_1PASS_SUPPORTED
21
+
22
+
23
+ /*
24
+ * The main purpose of 1-pass quantization is to provide a fast, if not very
25
+ * high quality, colormapped output capability. A 2-pass quantizer usually
26
+ * gives better visual quality; however, for quantized grayscale output this
27
+ * quantizer is perfectly adequate. Dithering is highly recommended with this
28
+ * quantizer, though you can turn it off if you really want to.
29
+ *
30
+ * In 1-pass quantization the colormap must be chosen in advance of seeing the
31
+ * image. We use a map consisting of all combinations of Ncolors[i] color
32
+ * values for the i'th component. The Ncolors[] values are chosen so that
33
+ * their product, the total number of colors, is no more than that requested.
34
+ * (In most cases, the product will be somewhat less.)
35
+ *
36
+ * Since the colormap is orthogonal, the representative value for each color
37
+ * component can be determined without considering the other components;
38
+ * then these indexes can be combined into a colormap index by a standard
39
+ * N-dimensional-array-subscript calculation. Most of the arithmetic involved
40
+ * can be precalculated and stored in the lookup table colorindex[].
41
+ * colorindex[i][j] maps pixel value j in component i to the nearest
42
+ * representative value (grid plane) for that component; this index is
43
+ * multiplied by the array stride for component i, so that the
44
+ * index of the colormap entry closest to a given pixel value is just
45
+ * sum( colorindex[component-number][pixel-component-value] )
46
+ * Aside from being fast, this scheme allows for variable spacing between
47
+ * representative values with no additional lookup cost.
48
+ *
49
+ * If gamma correction has been applied in color conversion, it might be wise
50
+ * to adjust the color grid spacing so that the representative colors are
51
+ * equidistant in linear space. At this writing, gamma correction is not
52
+ * implemented by jdcolor, so nothing is done here.
53
+ */
54
+
55
+
56
+ /* Declarations for ordered dithering.
57
+ *
58
+ * We use a standard 16x16 ordered dither array. The basic concept of ordered
59
+ * dithering is described in many references, for instance Dale Schumacher's
60
+ * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991).
61
+ * In place of Schumacher's comparisons against a "threshold" value, we add a
62
+ * "dither" value to the input pixel and then round the result to the nearest
63
+ * output value. The dither value is equivalent to (0.5 - threshold) times
64
+ * the distance between output values. For ordered dithering, we assume that
65
+ * the output colors are equally spaced; if not, results will probably be
66
+ * worse, since the dither may be too much or too little at a given point.
67
+ *
68
+ * The normal calculation would be to form pixel value + dither, range-limit
69
+ * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual.
70
+ * We can skip the separate range-limiting step by extending the colorindex
71
+ * table in both directions.
72
+ */
73
+
74
+ #define ODITHER_SIZE 16 /* dimension of dither matrix */
75
+ /* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */
76
+ #define ODITHER_CELLS (ODITHER_SIZE * ODITHER_SIZE) /* # cells in matrix */
77
+ #define ODITHER_MASK (ODITHER_SIZE - 1) /* mask for wrapping around
78
+ counters */
79
+
80
+ typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE];
81
+ typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE];
82
+
83
+ static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
84
+ /* Bayer's order-4 dither array. Generated by the code given in
85
+ * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I.
86
+ * The values in this array must range from 0 to ODITHER_CELLS-1.
87
+ */
88
+ { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 },
89
+ { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 },
90
+ { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 },
91
+ { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 },
92
+ { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 },
93
+ { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 },
94
+ { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 },
95
+ { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 },
96
+ { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 },
97
+ { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 },
98
+ { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 },
99
+ { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 },
100
+ { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 },
101
+ { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 },
102
+ { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 },
103
+ { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 }
104
+ };
105
+
106
+
107
+ /* Declarations for Floyd-Steinberg dithering.
108
+ *
109
+ * Errors are accumulated into the array fserrors[], at a resolution of
110
+ * 1/16th of a pixel count. The error at a given pixel is propagated
111
+ * to its not-yet-processed neighbors using the standard F-S fractions,
112
+ * ... (here) 7/16
113
+ * 3/16 5/16 1/16
114
+ * We work left-to-right on even rows, right-to-left on odd rows.
115
+ *
116
+ * We can get away with a single array (holding one row's worth of errors)
117
+ * by using it to store the current row's errors at pixel columns not yet
118
+ * processed, but the next row's errors at columns already processed. We
119
+ * need only a few extra variables to hold the errors immediately around the
120
+ * current column. (If we are lucky, those variables are in registers, but
121
+ * even if not, they're probably cheaper to access than array elements are.)
122
+ *
123
+ * The fserrors[] array is indexed [component#][position].
124
+ * We provide (#columns + 2) entries per component; the extra entry at each
125
+ * end saves us from special-casing the first and last pixels.
126
+ */
127
+
128
+ #if BITS_IN_JSAMPLE == 8
129
+ typedef INT16 FSERROR; /* 16 bits should be enough */
130
+ typedef int LOCFSERROR; /* use 'int' for calculation temps */
131
+ #else
132
+ typedef JLONG FSERROR; /* may need more than 16 bits */
133
+ typedef JLONG LOCFSERROR; /* be sure calculation temps are big enough */
134
+ #endif
135
+
136
+ typedef FSERROR *FSERRPTR; /* pointer to error array */
137
+
138
+
139
+ /* Private subobject */
140
+
141
+ #define MAX_Q_COMPS 4 /* max components I can handle */
142
+
143
+ typedef struct {
144
+ struct jpeg_color_quantizer pub; /* public fields */
145
+
146
+ /* Initially allocated colormap is saved here */
147
+ JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */
148
+ int sv_actual; /* number of entries in use */
149
+
150
+ JSAMPARRAY colorindex; /* Precomputed mapping for speed */
151
+ /* colorindex[i][j] = index of color closest to pixel value j in component i,
152
+ * premultiplied as described above. Since colormap indexes must fit into
153
+ * JSAMPLEs, the entries of this array will too.
154
+ */
155
+ boolean is_padded; /* is the colorindex padded for odither? */
156
+
157
+ int Ncolors[MAX_Q_COMPS]; /* # of values allocated to each component */
158
+
159
+ /* Variables for ordered dithering */
160
+ int row_index; /* cur row's vertical index in dither matrix */
161
+ ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
162
+
163
+ /* Variables for Floyd-Steinberg dithering */
164
+ FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
165
+ boolean on_odd_row; /* flag to remember which row we are on */
166
+ } my_cquantizer;
167
+
168
+ typedef my_cquantizer *my_cquantize_ptr;
169
+
170
+
171
+ /*
172
+ * Policy-making subroutines for create_colormap and create_colorindex.
173
+ * These routines determine the colormap to be used. The rest of the module
174
+ * only assumes that the colormap is orthogonal.
175
+ *
176
+ * * select_ncolors decides how to divvy up the available colors
177
+ * among the components.
178
+ * * output_value defines the set of representative values for a component.
179
+ * * largest_input_value defines the mapping from input values to
180
+ * representative values for a component.
181
+ * Note that the latter two routines may impose different policies for
182
+ * different components, though this is not currently done.
183
+ */
184
+
185
+
186
+ LOCAL(int)
187
+ select_ncolors(j_decompress_ptr cinfo, int Ncolors[])
188
+ /* Determine allocation of desired colors to components, */
189
+ /* and fill in Ncolors[] array to indicate choice. */
190
+ /* Return value is total number of colors (product of Ncolors[] values). */
191
+ {
192
+ int nc = cinfo->out_color_components; /* number of color components */
193
+ int max_colors = cinfo->desired_number_of_colors;
194
+ int total_colors, iroot, i, j;
195
+ boolean changed;
196
+ long temp;
197
+ int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE };
198
+ RGB_order[0] = rgb_green[cinfo->out_color_space];
199
+ RGB_order[1] = rgb_red[cinfo->out_color_space];
200
+ RGB_order[2] = rgb_blue[cinfo->out_color_space];
201
+
202
+ /* We can allocate at least the nc'th root of max_colors per component. */
203
+ /* Compute floor(nc'th root of max_colors). */
204
+ iroot = 1;
205
+ do {
206
+ iroot++;
207
+ temp = iroot; /* set temp = iroot ** nc */
208
+ for (i = 1; i < nc; i++)
209
+ temp *= iroot;
210
+ } while (temp <= (long)max_colors); /* repeat till iroot exceeds root */
211
+ iroot--; /* now iroot = floor(root) */
212
+
213
+ /* Must have at least 2 color values per component */
214
+ if (iroot < 2)
215
+ ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int)temp);
216
+
217
+ /* Initialize to iroot color values for each component */
218
+ total_colors = 1;
219
+ for (i = 0; i < nc; i++) {
220
+ Ncolors[i] = iroot;
221
+ total_colors *= iroot;
222
+ }
223
+ /* We may be able to increment the count for one or more components without
224
+ * exceeding max_colors, though we know not all can be incremented.
225
+ * Sometimes, the first component can be incremented more than once!
226
+ * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.)
227
+ * In RGB colorspace, try to increment G first, then R, then B.
228
+ */
229
+ do {
230
+ changed = FALSE;
231
+ for (i = 0; i < nc; i++) {
232
+ j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i);
233
+ /* calculate new total_colors if Ncolors[j] is incremented */
234
+ temp = total_colors / Ncolors[j];
235
+ temp *= Ncolors[j] + 1; /* done in long arith to avoid oflo */
236
+ if (temp > (long)max_colors)
237
+ break; /* won't fit, done with this pass */
238
+ Ncolors[j]++; /* OK, apply the increment */
239
+ total_colors = (int)temp;
240
+ changed = TRUE;
241
+ }
242
+ } while (changed);
243
+
244
+ return total_colors;
245
+ }
246
+
247
+
248
+ LOCAL(int)
249
+ output_value(j_decompress_ptr cinfo, int ci, int j, int maxj)
250
+ /* Return j'th output value, where j will range from 0 to maxj */
251
+ /* The output values must fall in 0..MAXJSAMPLE in increasing order */
252
+ {
253
+ /* We always provide values 0 and MAXJSAMPLE for each component;
254
+ * any additional values are equally spaced between these limits.
255
+ * (Forcing the upper and lower values to the limits ensures that
256
+ * dithering can't produce a color outside the selected gamut.)
257
+ */
258
+ return (int)(((JLONG)j * MAXJSAMPLE + maxj / 2) / maxj);
259
+ }
260
+
261
+
262
+ LOCAL(int)
263
+ largest_input_value(j_decompress_ptr cinfo, int ci, int j, int maxj)
264
+ /* Return largest input value that should map to j'th output value */
265
+ /* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */
266
+ {
267
+ /* Breakpoints are halfway between values returned by output_value */
268
+ return (int)(((JLONG)(2 * j + 1) * MAXJSAMPLE + maxj) / (2 * maxj));
269
+ }
270
+
271
+
272
+ /*
273
+ * Create the colormap.
274
+ */
275
+
276
+ LOCAL(void)
277
+ create_colormap(j_decompress_ptr cinfo)
278
+ {
279
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
280
+ JSAMPARRAY colormap; /* Created colormap */
281
+ int total_colors; /* Number of distinct output colors */
282
+ int i, j, k, nci, blksize, blkdist, ptr, val;
283
+
284
+ /* Select number of colors for each component */
285
+ total_colors = select_ncolors(cinfo, cquantize->Ncolors);
286
+
287
+ /* Report selected color counts */
288
+ if (cinfo->out_color_components == 3)
289
+ TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, total_colors,
290
+ cquantize->Ncolors[0], cquantize->Ncolors[1],
291
+ cquantize->Ncolors[2]);
292
+ else
293
+ TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors);
294
+
295
+ /* Allocate and fill in the colormap. */
296
+ /* The colors are ordered in the map in standard row-major order, */
297
+ /* i.e. rightmost (highest-indexed) color changes most rapidly. */
298
+
299
+ colormap = (*cinfo->mem->alloc_sarray)
300
+ ((j_common_ptr)cinfo, JPOOL_IMAGE,
301
+ (JDIMENSION)total_colors, (JDIMENSION)cinfo->out_color_components);
302
+
303
+ /* blksize is number of adjacent repeated entries for a component */
304
+ /* blkdist is distance between groups of identical entries for a component */
305
+ blkdist = total_colors;
306
+
307
+ for (i = 0; i < cinfo->out_color_components; i++) {
308
+ /* fill in colormap entries for i'th color component */
309
+ nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
310
+ blksize = blkdist / nci;
311
+ for (j = 0; j < nci; j++) {
312
+ /* Compute j'th output value (out of nci) for component */
313
+ val = output_value(cinfo, i, j, nci - 1);
314
+ /* Fill in all colormap entries that have this value of this component */
315
+ for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) {
316
+ /* fill in blksize entries beginning at ptr */
317
+ for (k = 0; k < blksize; k++)
318
+ colormap[i][ptr + k] = (JSAMPLE)val;
319
+ }
320
+ }
321
+ blkdist = blksize; /* blksize of this color is blkdist of next */
322
+ }
323
+
324
+ /* Save the colormap in private storage,
325
+ * where it will survive color quantization mode changes.
326
+ */
327
+ cquantize->sv_colormap = colormap;
328
+ cquantize->sv_actual = total_colors;
329
+ }
330
+
331
+
332
+ /*
333
+ * Create the color index table.
334
+ */
335
+
336
+ LOCAL(void)
337
+ create_colorindex(j_decompress_ptr cinfo)
338
+ {
339
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
340
+ JSAMPROW indexptr;
341
+ int i, j, k, nci, blksize, val, pad;
342
+
343
+ /* For ordered dither, we pad the color index tables by MAXJSAMPLE in
344
+ * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE).
345
+ * This is not necessary in the other dithering modes. However, we
346
+ * flag whether it was done in case user changes dithering mode.
347
+ */
348
+ if (cinfo->dither_mode == JDITHER_ORDERED) {
349
+ pad = MAXJSAMPLE * 2;
350
+ cquantize->is_padded = TRUE;
351
+ } else {
352
+ pad = 0;
353
+ cquantize->is_padded = FALSE;
354
+ }
355
+
356
+ cquantize->colorindex = (*cinfo->mem->alloc_sarray)
357
+ ((j_common_ptr)cinfo, JPOOL_IMAGE,
358
+ (JDIMENSION)(MAXJSAMPLE + 1 + pad),
359
+ (JDIMENSION)cinfo->out_color_components);
360
+
361
+ /* blksize is number of adjacent repeated entries for a component */
362
+ blksize = cquantize->sv_actual;
363
+
364
+ for (i = 0; i < cinfo->out_color_components; i++) {
365
+ /* fill in colorindex entries for i'th color component */
366
+ nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
367
+ blksize = blksize / nci;
368
+
369
+ /* adjust colorindex pointers to provide padding at negative indexes. */
370
+ if (pad)
371
+ cquantize->colorindex[i] += MAXJSAMPLE;
372
+
373
+ /* in loop, val = index of current output value, */
374
+ /* and k = largest j that maps to current val */
375
+ indexptr = cquantize->colorindex[i];
376
+ val = 0;
377
+ k = largest_input_value(cinfo, i, 0, nci - 1);
378
+ for (j = 0; j <= MAXJSAMPLE; j++) {
379
+ while (j > k) /* advance val if past boundary */
380
+ k = largest_input_value(cinfo, i, ++val, nci - 1);
381
+ /* premultiply so that no multiplication needed in main processing */
382
+ indexptr[j] = (JSAMPLE)(val * blksize);
383
+ }
384
+ /* Pad at both ends if necessary */
385
+ if (pad)
386
+ for (j = 1; j <= MAXJSAMPLE; j++) {
387
+ indexptr[-j] = indexptr[0];
388
+ indexptr[MAXJSAMPLE + j] = indexptr[MAXJSAMPLE];
389
+ }
390
+ }
391
+ }
392
+
393
+
394
+ /*
395
+ * Create an ordered-dither array for a component having ncolors
396
+ * distinct output values.
397
+ */
398
+
399
+ LOCAL(ODITHER_MATRIX_PTR)
400
+ make_odither_array(j_decompress_ptr cinfo, int ncolors)
401
+ {
402
+ ODITHER_MATRIX_PTR odither;
403
+ int j, k;
404
+ JLONG num, den;
405
+
406
+ odither = (ODITHER_MATRIX_PTR)
407
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
408
+ sizeof(ODITHER_MATRIX));
409
+ /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1).
410
+ * Hence the dither value for the matrix cell with fill order f
411
+ * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1).
412
+ * On 16-bit-int machine, be careful to avoid overflow.
413
+ */
414
+ den = 2 * ODITHER_CELLS * ((JLONG)(ncolors - 1));
415
+ for (j = 0; j < ODITHER_SIZE; j++) {
416
+ for (k = 0; k < ODITHER_SIZE; k++) {
417
+ num = ((JLONG)(ODITHER_CELLS - 1 -
418
+ 2 * ((int)base_dither_matrix[j][k]))) * MAXJSAMPLE;
419
+ /* Ensure round towards zero despite C's lack of consistency
420
+ * about rounding negative values in integer division...
421
+ */
422
+ odither[j][k] = (int)(num < 0 ? -((-num) / den) : num / den);
423
+ }
424
+ }
425
+ return odither;
426
+ }
427
+
428
+
429
+ /*
430
+ * Create the ordered-dither tables.
431
+ * Components having the same number of representative colors may
432
+ * share a dither table.
433
+ */
434
+
435
+ LOCAL(void)
436
+ create_odither_tables(j_decompress_ptr cinfo)
437
+ {
438
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
439
+ ODITHER_MATRIX_PTR odither;
440
+ int i, j, nci;
441
+
442
+ for (i = 0; i < cinfo->out_color_components; i++) {
443
+ nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
444
+ odither = NULL; /* search for matching prior component */
445
+ for (j = 0; j < i; j++) {
446
+ if (nci == cquantize->Ncolors[j]) {
447
+ odither = cquantize->odither[j];
448
+ break;
449
+ }
450
+ }
451
+ if (odither == NULL) /* need a new table? */
452
+ odither = make_odither_array(cinfo, nci);
453
+ cquantize->odither[i] = odither;
454
+ }
455
+ }
456
+
457
+
458
+ /*
459
+ * Map some rows of pixels to the output colormapped representation.
460
+ */
461
+
462
+ METHODDEF(void)
463
+ color_quantize(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
464
+ JSAMPARRAY output_buf, int num_rows)
465
+ /* General case, no dithering */
466
+ {
467
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
468
+ JSAMPARRAY colorindex = cquantize->colorindex;
469
+ register int pixcode, ci;
470
+ register JSAMPROW ptrin, ptrout;
471
+ int row;
472
+ JDIMENSION col;
473
+ JDIMENSION width = cinfo->output_width;
474
+ register int nc = cinfo->out_color_components;
475
+
476
+ for (row = 0; row < num_rows; row++) {
477
+ ptrin = input_buf[row];
478
+ ptrout = output_buf[row];
479
+ for (col = width; col > 0; col--) {
480
+ pixcode = 0;
481
+ for (ci = 0; ci < nc; ci++) {
482
+ pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
483
+ }
484
+ *ptrout++ = (JSAMPLE)pixcode;
485
+ }
486
+ }
487
+ }
488
+
489
+
490
+ METHODDEF(void)
491
+ color_quantize3(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
492
+ JSAMPARRAY output_buf, int num_rows)
493
+ /* Fast path for out_color_components==3, no dithering */
494
+ {
495
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
496
+ register int pixcode;
497
+ register JSAMPROW ptrin, ptrout;
498
+ JSAMPROW colorindex0 = cquantize->colorindex[0];
499
+ JSAMPROW colorindex1 = cquantize->colorindex[1];
500
+ JSAMPROW colorindex2 = cquantize->colorindex[2];
501
+ int row;
502
+ JDIMENSION col;
503
+ JDIMENSION width = cinfo->output_width;
504
+
505
+ for (row = 0; row < num_rows; row++) {
506
+ ptrin = input_buf[row];
507
+ ptrout = output_buf[row];
508
+ for (col = width; col > 0; col--) {
509
+ pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]);
510
+ pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]);
511
+ pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]);
512
+ *ptrout++ = (JSAMPLE)pixcode;
513
+ }
514
+ }
515
+ }
516
+
517
+
518
+ METHODDEF(void)
519
+ quantize_ord_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
520
+ JSAMPARRAY output_buf, int num_rows)
521
+ /* General case, with ordered dithering */
522
+ {
523
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
524
+ register JSAMPROW input_ptr;
525
+ register JSAMPROW output_ptr;
526
+ JSAMPROW colorindex_ci;
527
+ int *dither; /* points to active row of dither matrix */
528
+ int row_index, col_index; /* current indexes into dither matrix */
529
+ int nc = cinfo->out_color_components;
530
+ int ci;
531
+ int row;
532
+ JDIMENSION col;
533
+ JDIMENSION width = cinfo->output_width;
534
+
535
+ for (row = 0; row < num_rows; row++) {
536
+ /* Initialize output values to 0 so can process components separately */
537
+ jzero_far((void *)output_buf[row], (size_t)(width * sizeof(JSAMPLE)));
538
+ row_index = cquantize->row_index;
539
+ for (ci = 0; ci < nc; ci++) {
540
+ input_ptr = input_buf[row] + ci;
541
+ output_ptr = output_buf[row];
542
+ colorindex_ci = cquantize->colorindex[ci];
543
+ dither = cquantize->odither[ci][row_index];
544
+ col_index = 0;
545
+
546
+ for (col = width; col > 0; col--) {
547
+ /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE,
548
+ * select output value, accumulate into output code for this pixel.
549
+ * Range-limiting need not be done explicitly, as we have extended
550
+ * the colorindex table to produce the right answers for out-of-range
551
+ * inputs. The maximum dither is +- MAXJSAMPLE; this sets the
552
+ * required amount of padding.
553
+ */
554
+ *output_ptr +=
555
+ colorindex_ci[GETJSAMPLE(*input_ptr) + dither[col_index]];
556
+ input_ptr += nc;
557
+ output_ptr++;
558
+ col_index = (col_index + 1) & ODITHER_MASK;
559
+ }
560
+ }
561
+ /* Advance row index for next row */
562
+ row_index = (row_index + 1) & ODITHER_MASK;
563
+ cquantize->row_index = row_index;
564
+ }
565
+ }
566
+
567
+
568
+ METHODDEF(void)
569
+ quantize3_ord_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
570
+ JSAMPARRAY output_buf, int num_rows)
571
+ /* Fast path for out_color_components==3, with ordered dithering */
572
+ {
573
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
574
+ register int pixcode;
575
+ register JSAMPROW input_ptr;
576
+ register JSAMPROW output_ptr;
577
+ JSAMPROW colorindex0 = cquantize->colorindex[0];
578
+ JSAMPROW colorindex1 = cquantize->colorindex[1];
579
+ JSAMPROW colorindex2 = cquantize->colorindex[2];
580
+ int *dither0; /* points to active row of dither matrix */
581
+ int *dither1;
582
+ int *dither2;
583
+ int row_index, col_index; /* current indexes into dither matrix */
584
+ int row;
585
+ JDIMENSION col;
586
+ JDIMENSION width = cinfo->output_width;
587
+
588
+ for (row = 0; row < num_rows; row++) {
589
+ row_index = cquantize->row_index;
590
+ input_ptr = input_buf[row];
591
+ output_ptr = output_buf[row];
592
+ dither0 = cquantize->odither[0][row_index];
593
+ dither1 = cquantize->odither[1][row_index];
594
+ dither2 = cquantize->odither[2][row_index];
595
+ col_index = 0;
596
+
597
+ for (col = width; col > 0; col--) {
598
+ pixcode =
599
+ GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + dither0[col_index]]);
600
+ pixcode +=
601
+ GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + dither1[col_index]]);
602
+ pixcode +=
603
+ GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + dither2[col_index]]);
604
+ *output_ptr++ = (JSAMPLE)pixcode;
605
+ col_index = (col_index + 1) & ODITHER_MASK;
606
+ }
607
+ row_index = (row_index + 1) & ODITHER_MASK;
608
+ cquantize->row_index = row_index;
609
+ }
610
+ }
611
+
612
+
613
+ METHODDEF(void)
614
+ quantize_fs_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
615
+ JSAMPARRAY output_buf, int num_rows)
616
+ /* General case, with Floyd-Steinberg dithering */
617
+ {
618
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
619
+ register LOCFSERROR cur; /* current error or pixel value */
620
+ LOCFSERROR belowerr; /* error for pixel below cur */
621
+ LOCFSERROR bpreverr; /* error for below/prev col */
622
+ LOCFSERROR bnexterr; /* error for below/next col */
623
+ LOCFSERROR delta;
624
+ register FSERRPTR errorptr; /* => fserrors[] at column before current */
625
+ register JSAMPROW input_ptr;
626
+ register JSAMPROW output_ptr;
627
+ JSAMPROW colorindex_ci;
628
+ JSAMPROW colormap_ci;
629
+ int pixcode;
630
+ int nc = cinfo->out_color_components;
631
+ int dir; /* 1 for left-to-right, -1 for right-to-left */
632
+ int dirnc; /* dir * nc */
633
+ int ci;
634
+ int row;
635
+ JDIMENSION col;
636
+ JDIMENSION width = cinfo->output_width;
637
+ JSAMPLE *range_limit = cinfo->sample_range_limit;
638
+ SHIFT_TEMPS
639
+
640
+ for (row = 0; row < num_rows; row++) {
641
+ /* Initialize output values to 0 so can process components separately */
642
+ jzero_far((void *)output_buf[row], (size_t)(width * sizeof(JSAMPLE)));
643
+ for (ci = 0; ci < nc; ci++) {
644
+ input_ptr = input_buf[row] + ci;
645
+ output_ptr = output_buf[row];
646
+ if (cquantize->on_odd_row) {
647
+ /* work right to left in this row */
648
+ input_ptr += (width - 1) * nc; /* so point to rightmost pixel */
649
+ output_ptr += width - 1;
650
+ dir = -1;
651
+ dirnc = -nc;
652
+ errorptr = cquantize->fserrors[ci] + (width + 1); /* => entry after last column */
653
+ } else {
654
+ /* work left to right in this row */
655
+ dir = 1;
656
+ dirnc = nc;
657
+ errorptr = cquantize->fserrors[ci]; /* => entry before first column */
658
+ }
659
+ colorindex_ci = cquantize->colorindex[ci];
660
+ colormap_ci = cquantize->sv_colormap[ci];
661
+ /* Preset error values: no error propagated to first pixel from left */
662
+ cur = 0;
663
+ /* and no error propagated to row below yet */
664
+ belowerr = bpreverr = 0;
665
+
666
+ for (col = width; col > 0; col--) {
667
+ /* cur holds the error propagated from the previous pixel on the
668
+ * current line. Add the error propagated from the previous line
669
+ * to form the complete error correction term for this pixel, and
670
+ * round the error term (which is expressed * 16) to an integer.
671
+ * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
672
+ * for either sign of the error value.
673
+ * Note: errorptr points to *previous* column's array entry.
674
+ */
675
+ cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4);
676
+ /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
677
+ * The maximum error is +- MAXJSAMPLE; this sets the required size
678
+ * of the range_limit array.
679
+ */
680
+ cur += GETJSAMPLE(*input_ptr);
681
+ cur = GETJSAMPLE(range_limit[cur]);
682
+ /* Select output value, accumulate into output code for this pixel */
683
+ pixcode = GETJSAMPLE(colorindex_ci[cur]);
684
+ *output_ptr += (JSAMPLE)pixcode;
685
+ /* Compute actual representation error at this pixel */
686
+ /* Note: we can do this even though we don't have the final */
687
+ /* pixel code, because the colormap is orthogonal. */
688
+ cur -= GETJSAMPLE(colormap_ci[pixcode]);
689
+ /* Compute error fractions to be propagated to adjacent pixels.
690
+ * Add these into the running sums, and simultaneously shift the
691
+ * next-line error sums left by 1 column.
692
+ */
693
+ bnexterr = cur;
694
+ delta = cur * 2;
695
+ cur += delta; /* form error * 3 */
696
+ errorptr[0] = (FSERROR)(bpreverr + cur);
697
+ cur += delta; /* form error * 5 */
698
+ bpreverr = belowerr + cur;
699
+ belowerr = bnexterr;
700
+ cur += delta; /* form error * 7 */
701
+ /* At this point cur contains the 7/16 error value to be propagated
702
+ * to the next pixel on the current line, and all the errors for the
703
+ * next line have been shifted over. We are therefore ready to move on.
704
+ */
705
+ input_ptr += dirnc; /* advance input ptr to next column */
706
+ output_ptr += dir; /* advance output ptr to next column */
707
+ errorptr += dir; /* advance errorptr to current column */
708
+ }
709
+ /* Post-loop cleanup: we must unload the final error value into the
710
+ * final fserrors[] entry. Note we need not unload belowerr because
711
+ * it is for the dummy column before or after the actual array.
712
+ */
713
+ errorptr[0] = (FSERROR)bpreverr; /* unload prev err into array */
714
+ }
715
+ cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE);
716
+ }
717
+ }
718
+
719
+
720
+ /*
721
+ * Allocate workspace for Floyd-Steinberg errors.
722
+ */
723
+
724
+ LOCAL(void)
725
+ alloc_fs_workspace(j_decompress_ptr cinfo)
726
+ {
727
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
728
+ size_t arraysize;
729
+ int i;
730
+
731
+ arraysize = (size_t)((cinfo->output_width + 2) * sizeof(FSERROR));
732
+ for (i = 0; i < cinfo->out_color_components; i++) {
733
+ cquantize->fserrors[i] = (FSERRPTR)
734
+ (*cinfo->mem->alloc_large) ((j_common_ptr)cinfo, JPOOL_IMAGE, arraysize);
735
+ }
736
+ }
737
+
738
+
739
+ /*
740
+ * Initialize for one-pass color quantization.
741
+ */
742
+
743
+ METHODDEF(void)
744
+ start_pass_1_quant(j_decompress_ptr cinfo, boolean is_pre_scan)
745
+ {
746
+ my_cquantize_ptr cquantize = (my_cquantize_ptr)cinfo->cquantize;
747
+ size_t arraysize;
748
+ int i;
749
+
750
+ /* Install my colormap. */
751
+ cinfo->colormap = cquantize->sv_colormap;
752
+ cinfo->actual_number_of_colors = cquantize->sv_actual;
753
+
754
+ /* Initialize for desired dithering mode. */
755
+ switch (cinfo->dither_mode) {
756
+ case JDITHER_NONE:
757
+ if (cinfo->out_color_components == 3)
758
+ cquantize->pub.color_quantize = color_quantize3;
759
+ else
760
+ cquantize->pub.color_quantize = color_quantize;
761
+ break;
762
+ case JDITHER_ORDERED:
763
+ if (cinfo->out_color_components == 3)
764
+ cquantize->pub.color_quantize = quantize3_ord_dither;
765
+ else
766
+ cquantize->pub.color_quantize = quantize_ord_dither;
767
+ cquantize->row_index = 0; /* initialize state for ordered dither */
768
+ /* If user changed to ordered dither from another mode,
769
+ * we must recreate the color index table with padding.
770
+ * This will cost extra space, but probably isn't very likely.
771
+ */
772
+ if (!cquantize->is_padded)
773
+ create_colorindex(cinfo);
774
+ /* Create ordered-dither tables if we didn't already. */
775
+ if (cquantize->odither[0] == NULL)
776
+ create_odither_tables(cinfo);
777
+ break;
778
+ case JDITHER_FS:
779
+ cquantize->pub.color_quantize = quantize_fs_dither;
780
+ cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */
781
+ /* Allocate Floyd-Steinberg workspace if didn't already. */
782
+ if (cquantize->fserrors[0] == NULL)
783
+ alloc_fs_workspace(cinfo);
784
+ /* Initialize the propagated errors to zero. */
785
+ arraysize = (size_t)((cinfo->output_width + 2) * sizeof(FSERROR));
786
+ for (i = 0; i < cinfo->out_color_components; i++)
787
+ jzero_far((void *)cquantize->fserrors[i], arraysize);
788
+ break;
789
+ default:
790
+ ERREXIT(cinfo, JERR_NOT_COMPILED);
791
+ break;
792
+ }
793
+ }
794
+
795
+
796
+ /*
797
+ * Finish up at the end of the pass.
798
+ */
799
+
800
+ METHODDEF(void)
801
+ finish_pass_1_quant(j_decompress_ptr cinfo)
802
+ {
803
+ /* no work in 1-pass case */
804
+ }
805
+
806
+
807
+ /*
808
+ * Switch to a new external colormap between output passes.
809
+ * Shouldn't get to this module!
810
+ */
811
+
812
+ METHODDEF(void)
813
+ new_color_map_1_quant(j_decompress_ptr cinfo)
814
+ {
815
+ ERREXIT(cinfo, JERR_MODE_CHANGE);
816
+ }
817
+
818
+
819
+ /*
820
+ * Module initialization routine for 1-pass color quantization.
821
+ */
822
+
823
+ GLOBAL(void)
824
+ jinit_1pass_quantizer(j_decompress_ptr cinfo)
825
+ {
826
+ my_cquantize_ptr cquantize;
827
+
828
+ cquantize = (my_cquantize_ptr)
829
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
830
+ sizeof(my_cquantizer));
831
+ cinfo->cquantize = (struct jpeg_color_quantizer *)cquantize;
832
+ cquantize->pub.start_pass = start_pass_1_quant;
833
+ cquantize->pub.finish_pass = finish_pass_1_quant;
834
+ cquantize->pub.new_color_map = new_color_map_1_quant;
835
+ cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */
836
+ cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */
837
+
838
+ /* Make sure my internal arrays won't overflow */
839
+ if (cinfo->out_color_components > MAX_Q_COMPS)
840
+ ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS);
841
+ /* Make sure colormap indexes can be represented by JSAMPLEs */
842
+ if (cinfo->desired_number_of_colors > (MAXJSAMPLE + 1))
843
+ ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE + 1);
844
+
845
+ /* Create the colormap and color index table. */
846
+ create_colormap(cinfo);
847
+ create_colorindex(cinfo);
848
+
849
+ /* Allocate Floyd-Steinberg workspace now if requested.
850
+ * We do this now since it may affect the memory manager's space
851
+ * calculations. If the user changes to FS dither mode in a later pass, we
852
+ * will allocate the space then, and will possibly overrun the
853
+ * max_memory_to_use setting.
854
+ */
855
+ if (cinfo->dither_mode == JDITHER_FS)
856
+ alloc_fs_workspace(cinfo);
857
+ }
858
+
859
+ #endif /* QUANT_1PASS_SUPPORTED */