epeg 1.0

Sign up to get free protection for your applications and to get access to all the features.
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,687 @@
1
+ /*
2
+ * jdphuff.c
3
+ *
4
+ * This file was part of the Independent JPEG Group's software:
5
+ * Copyright (C) 1995-1997, Thomas G. Lane.
6
+ * libjpeg-turbo Modifications:
7
+ * Copyright (C) 2015-2016, 2018, D. R. Commander.
8
+ * For conditions of distribution and use, see the accompanying README.ijg
9
+ * file.
10
+ *
11
+ * This file contains Huffman entropy decoding routines for progressive JPEG.
12
+ *
13
+ * Much of the complexity here has to do with supporting input suspension.
14
+ * If the data source module demands suspension, we want to be able to back
15
+ * up to the start of the current MCU. To do this, we copy state variables
16
+ * into local working storage, and update them back to the permanent
17
+ * storage only upon successful completion of an MCU.
18
+ *
19
+ * NOTE: All referenced figures are from
20
+ * Recommendation ITU-T T.81 (1992) | ISO/IEC 10918-1:1994.
21
+ */
22
+
23
+ #define JPEG_INTERNALS
24
+ #include "jinclude.h"
25
+ #include "jpeglib.h"
26
+ #include "jdhuff.h" /* Declarations shared with jdhuff.c */
27
+ #include <limits.h>
28
+
29
+
30
+ #ifdef D_PROGRESSIVE_SUPPORTED
31
+
32
+ /*
33
+ * Expanded entropy decoder object for progressive Huffman decoding.
34
+ *
35
+ * The savable_state subrecord contains fields that change within an MCU,
36
+ * but must not be updated permanently until we complete the MCU.
37
+ */
38
+
39
+ typedef struct {
40
+ unsigned int EOBRUN; /* remaining EOBs in EOBRUN */
41
+ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
42
+ } savable_state;
43
+
44
+ /* This macro is to work around compilers with missing or broken
45
+ * structure assignment. You'll need to fix this code if you have
46
+ * such a compiler and you change MAX_COMPS_IN_SCAN.
47
+ */
48
+
49
+ #ifndef NO_STRUCT_ASSIGN
50
+ #define ASSIGN_STATE(dest, src) ((dest) = (src))
51
+ #else
52
+ #if MAX_COMPS_IN_SCAN == 4
53
+ #define ASSIGN_STATE(dest, src) \
54
+ ((dest).EOBRUN = (src).EOBRUN, \
55
+ (dest).last_dc_val[0] = (src).last_dc_val[0], \
56
+ (dest).last_dc_val[1] = (src).last_dc_val[1], \
57
+ (dest).last_dc_val[2] = (src).last_dc_val[2], \
58
+ (dest).last_dc_val[3] = (src).last_dc_val[3])
59
+ #endif
60
+ #endif
61
+
62
+
63
+ typedef struct {
64
+ struct jpeg_entropy_decoder pub; /* public fields */
65
+
66
+ /* These fields are loaded into local variables at start of each MCU.
67
+ * In case of suspension, we exit WITHOUT updating them.
68
+ */
69
+ bitread_perm_state bitstate; /* Bit buffer at start of MCU */
70
+ savable_state saved; /* Other state at start of MCU */
71
+
72
+ /* These fields are NOT loaded into local working state. */
73
+ unsigned int restarts_to_go; /* MCUs left in this restart interval */
74
+
75
+ /* Pointers to derived tables (these workspaces have image lifespan) */
76
+ d_derived_tbl *derived_tbls[NUM_HUFF_TBLS];
77
+
78
+ d_derived_tbl *ac_derived_tbl; /* active table during an AC scan */
79
+ } phuff_entropy_decoder;
80
+
81
+ typedef phuff_entropy_decoder *phuff_entropy_ptr;
82
+
83
+ /* Forward declarations */
84
+ METHODDEF(boolean) decode_mcu_DC_first(j_decompress_ptr cinfo,
85
+ JBLOCKROW *MCU_data);
86
+ METHODDEF(boolean) decode_mcu_AC_first(j_decompress_ptr cinfo,
87
+ JBLOCKROW *MCU_data);
88
+ METHODDEF(boolean) decode_mcu_DC_refine(j_decompress_ptr cinfo,
89
+ JBLOCKROW *MCU_data);
90
+ METHODDEF(boolean) decode_mcu_AC_refine(j_decompress_ptr cinfo,
91
+ JBLOCKROW *MCU_data);
92
+
93
+
94
+ /*
95
+ * Initialize for a Huffman-compressed scan.
96
+ */
97
+
98
+ METHODDEF(void)
99
+ start_pass_phuff_decoder(j_decompress_ptr cinfo)
100
+ {
101
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
102
+ boolean is_DC_band, bad;
103
+ int ci, coefi, tbl;
104
+ d_derived_tbl **pdtbl;
105
+ int *coef_bit_ptr;
106
+ jpeg_component_info *compptr;
107
+
108
+ is_DC_band = (cinfo->Ss == 0);
109
+
110
+ /* Validate scan parameters */
111
+ bad = FALSE;
112
+ if (is_DC_band) {
113
+ if (cinfo->Se != 0)
114
+ bad = TRUE;
115
+ } else {
116
+ /* need not check Ss/Se < 0 since they came from unsigned bytes */
117
+ if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2)
118
+ bad = TRUE;
119
+ /* AC scans may have only one component */
120
+ if (cinfo->comps_in_scan != 1)
121
+ bad = TRUE;
122
+ }
123
+ if (cinfo->Ah != 0) {
124
+ /* Successive approximation refinement scan: must have Al = Ah-1. */
125
+ if (cinfo->Al != cinfo->Ah - 1)
126
+ bad = TRUE;
127
+ }
128
+ if (cinfo->Al > 13) /* need not check for < 0 */
129
+ bad = TRUE;
130
+ /* Arguably the maximum Al value should be less than 13 for 8-bit precision,
131
+ * but the spec doesn't say so, and we try to be liberal about what we
132
+ * accept. Note: large Al values could result in out-of-range DC
133
+ * coefficients during early scans, leading to bizarre displays due to
134
+ * overflows in the IDCT math. But we won't crash.
135
+ */
136
+ if (bad)
137
+ ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
138
+ cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
139
+ /* Update progression status, and verify that scan order is legal.
140
+ * Note that inter-scan inconsistencies are treated as warnings
141
+ * not fatal errors ... not clear if this is right way to behave.
142
+ */
143
+ for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
144
+ int cindex = cinfo->cur_comp_info[ci]->component_index;
145
+ coef_bit_ptr = &cinfo->coef_bits[cindex][0];
146
+ if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
147
+ WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
148
+ for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
149
+ int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
150
+ if (cinfo->Ah != expected)
151
+ WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
152
+ coef_bit_ptr[coefi] = cinfo->Al;
153
+ }
154
+ }
155
+
156
+ /* Select MCU decoding routine */
157
+ if (cinfo->Ah == 0) {
158
+ if (is_DC_band)
159
+ entropy->pub.decode_mcu = decode_mcu_DC_first;
160
+ else
161
+ entropy->pub.decode_mcu = decode_mcu_AC_first;
162
+ } else {
163
+ if (is_DC_band)
164
+ entropy->pub.decode_mcu = decode_mcu_DC_refine;
165
+ else
166
+ entropy->pub.decode_mcu = decode_mcu_AC_refine;
167
+ }
168
+
169
+ for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
170
+ compptr = cinfo->cur_comp_info[ci];
171
+ /* Make sure requested tables are present, and compute derived tables.
172
+ * We may build same derived table more than once, but it's not expensive.
173
+ */
174
+ if (is_DC_band) {
175
+ if (cinfo->Ah == 0) { /* DC refinement needs no table */
176
+ tbl = compptr->dc_tbl_no;
177
+ pdtbl = (d_derived_tbl **)(entropy->derived_tbls) + tbl;
178
+ jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, pdtbl);
179
+ }
180
+ } else {
181
+ tbl = compptr->ac_tbl_no;
182
+ pdtbl = (d_derived_tbl **)(entropy->derived_tbls) + tbl;
183
+ jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, pdtbl);
184
+ /* remember the single active table */
185
+ entropy->ac_derived_tbl = entropy->derived_tbls[tbl];
186
+ }
187
+ /* Initialize DC predictions to 0 */
188
+ entropy->saved.last_dc_val[ci] = 0;
189
+ }
190
+
191
+ /* Initialize bitread state variables */
192
+ entropy->bitstate.bits_left = 0;
193
+ entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
194
+ entropy->pub.insufficient_data = FALSE;
195
+
196
+ /* Initialize private state variables */
197
+ entropy->saved.EOBRUN = 0;
198
+
199
+ /* Initialize restart counter */
200
+ entropy->restarts_to_go = cinfo->restart_interval;
201
+ }
202
+
203
+
204
+ /*
205
+ * Figure F.12: extend sign bit.
206
+ * On some machines, a shift and add will be faster than a table lookup.
207
+ */
208
+
209
+ #define AVOID_TABLES
210
+ #ifdef AVOID_TABLES
211
+
212
+ #define NEG_1 ((unsigned)-1)
213
+ #define HUFF_EXTEND(x, s) \
214
+ ((x) < (1 << ((s) - 1)) ? (x) + (((NEG_1) << (s)) + 1) : (x))
215
+
216
+ #else
217
+
218
+ #define HUFF_EXTEND(x, s) \
219
+ ((x) < extend_test[s] ? (x) + extend_offset[s] : (x))
220
+
221
+ static const int extend_test[16] = { /* entry n is 2**(n-1) */
222
+ 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
223
+ 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000
224
+ };
225
+
226
+ static const int extend_offset[16] = { /* entry n is (-1 << n) + 1 */
227
+ 0, ((-1) << 1) + 1, ((-1) << 2) + 1, ((-1) << 3) + 1, ((-1) << 4) + 1,
228
+ ((-1) << 5) + 1, ((-1) << 6) + 1, ((-1) << 7) + 1, ((-1) << 8) + 1,
229
+ ((-1) << 9) + 1, ((-1) << 10) + 1, ((-1) << 11) + 1, ((-1) << 12) + 1,
230
+ ((-1) << 13) + 1, ((-1) << 14) + 1, ((-1) << 15) + 1
231
+ };
232
+
233
+ #endif /* AVOID_TABLES */
234
+
235
+
236
+ /*
237
+ * Check for a restart marker & resynchronize decoder.
238
+ * Returns FALSE if must suspend.
239
+ */
240
+
241
+ LOCAL(boolean)
242
+ process_restart(j_decompress_ptr cinfo)
243
+ {
244
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
245
+ int ci;
246
+
247
+ /* Throw away any unused bits remaining in bit buffer; */
248
+ /* include any full bytes in next_marker's count of discarded bytes */
249
+ cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
250
+ entropy->bitstate.bits_left = 0;
251
+
252
+ /* Advance past the RSTn marker */
253
+ if (!(*cinfo->marker->read_restart_marker) (cinfo))
254
+ return FALSE;
255
+
256
+ /* Re-initialize DC predictions to 0 */
257
+ for (ci = 0; ci < cinfo->comps_in_scan; ci++)
258
+ entropy->saved.last_dc_val[ci] = 0;
259
+ /* Re-init EOB run count, too */
260
+ entropy->saved.EOBRUN = 0;
261
+
262
+ /* Reset restart counter */
263
+ entropy->restarts_to_go = cinfo->restart_interval;
264
+
265
+ /* Reset out-of-data flag, unless read_restart_marker left us smack up
266
+ * against a marker. In that case we will end up treating the next data
267
+ * segment as empty, and we can avoid producing bogus output pixels by
268
+ * leaving the flag set.
269
+ */
270
+ if (cinfo->unread_marker == 0)
271
+ entropy->pub.insufficient_data = FALSE;
272
+
273
+ return TRUE;
274
+ }
275
+
276
+
277
+ /*
278
+ * Huffman MCU decoding.
279
+ * Each of these routines decodes and returns one MCU's worth of
280
+ * Huffman-compressed coefficients.
281
+ * The coefficients are reordered from zigzag order into natural array order,
282
+ * but are not dequantized.
283
+ *
284
+ * The i'th block of the MCU is stored into the block pointed to by
285
+ * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER.
286
+ *
287
+ * We return FALSE if data source requested suspension. In that case no
288
+ * changes have been made to permanent state. (Exception: some output
289
+ * coefficients may already have been assigned. This is harmless for
290
+ * spectral selection, since we'll just re-assign them on the next call.
291
+ * Successive approximation AC refinement has to be more careful, however.)
292
+ */
293
+
294
+ /*
295
+ * MCU decoding for DC initial scan (either spectral selection,
296
+ * or first pass of successive approximation).
297
+ */
298
+
299
+ METHODDEF(boolean)
300
+ decode_mcu_DC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
301
+ {
302
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
303
+ int Al = cinfo->Al;
304
+ register int s, r;
305
+ int blkn, ci;
306
+ JBLOCKROW block;
307
+ BITREAD_STATE_VARS;
308
+ savable_state state;
309
+ d_derived_tbl *tbl;
310
+ jpeg_component_info *compptr;
311
+
312
+ /* Process restart marker if needed; may have to suspend */
313
+ if (cinfo->restart_interval) {
314
+ if (entropy->restarts_to_go == 0)
315
+ if (!process_restart(cinfo))
316
+ return FALSE;
317
+ }
318
+
319
+ /* If we've run out of data, just leave the MCU set to zeroes.
320
+ * This way, we return uniform gray for the remainder of the segment.
321
+ */
322
+ if (!entropy->pub.insufficient_data) {
323
+
324
+ /* Load up working state */
325
+ BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
326
+ ASSIGN_STATE(state, entropy->saved);
327
+
328
+ /* Outer loop handles each block in the MCU */
329
+
330
+ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
331
+ block = MCU_data[blkn];
332
+ ci = cinfo->MCU_membership[blkn];
333
+ compptr = cinfo->cur_comp_info[ci];
334
+ tbl = entropy->derived_tbls[compptr->dc_tbl_no];
335
+
336
+ /* Decode a single block's worth of coefficients */
337
+
338
+ /* Section F.2.2.1: decode the DC coefficient difference */
339
+ HUFF_DECODE(s, br_state, tbl, return FALSE, label1);
340
+ if (s) {
341
+ CHECK_BIT_BUFFER(br_state, s, return FALSE);
342
+ r = GET_BITS(s);
343
+ s = HUFF_EXTEND(r, s);
344
+ }
345
+
346
+ /* Convert DC difference to actual value, update last_dc_val */
347
+ if ((state.last_dc_val[ci] >= 0 &&
348
+ s > INT_MAX - state.last_dc_val[ci]) ||
349
+ (state.last_dc_val[ci] < 0 && s < INT_MIN - state.last_dc_val[ci]))
350
+ ERREXIT(cinfo, JERR_BAD_DCT_COEF);
351
+ s += state.last_dc_val[ci];
352
+ state.last_dc_val[ci] = s;
353
+ /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */
354
+ (*block)[0] = (JCOEF)LEFT_SHIFT(s, Al);
355
+ }
356
+
357
+ /* Completed MCU, so update state */
358
+ BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
359
+ ASSIGN_STATE(entropy->saved, state);
360
+ }
361
+
362
+ /* Account for restart interval (no-op if not using restarts) */
363
+ entropy->restarts_to_go--;
364
+
365
+ return TRUE;
366
+ }
367
+
368
+
369
+ /*
370
+ * MCU decoding for AC initial scan (either spectral selection,
371
+ * or first pass of successive approximation).
372
+ */
373
+
374
+ METHODDEF(boolean)
375
+ decode_mcu_AC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
376
+ {
377
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
378
+ int Se = cinfo->Se;
379
+ int Al = cinfo->Al;
380
+ register int s, k, r;
381
+ unsigned int EOBRUN;
382
+ JBLOCKROW block;
383
+ BITREAD_STATE_VARS;
384
+ d_derived_tbl *tbl;
385
+
386
+ /* Process restart marker if needed; may have to suspend */
387
+ if (cinfo->restart_interval) {
388
+ if (entropy->restarts_to_go == 0)
389
+ if (!process_restart(cinfo))
390
+ return FALSE;
391
+ }
392
+
393
+ /* If we've run out of data, just leave the MCU set to zeroes.
394
+ * This way, we return uniform gray for the remainder of the segment.
395
+ */
396
+ if (!entropy->pub.insufficient_data) {
397
+
398
+ /* Load up working state.
399
+ * We can avoid loading/saving bitread state if in an EOB run.
400
+ */
401
+ EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
402
+
403
+ /* There is always only one block per MCU */
404
+
405
+ if (EOBRUN > 0) /* if it's a band of zeroes... */
406
+ EOBRUN--; /* ...process it now (we do nothing) */
407
+ else {
408
+ BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
409
+ block = MCU_data[0];
410
+ tbl = entropy->ac_derived_tbl;
411
+
412
+ for (k = cinfo->Ss; k <= Se; k++) {
413
+ HUFF_DECODE(s, br_state, tbl, return FALSE, label2);
414
+ r = s >> 4;
415
+ s &= 15;
416
+ if (s) {
417
+ k += r;
418
+ CHECK_BIT_BUFFER(br_state, s, return FALSE);
419
+ r = GET_BITS(s);
420
+ s = HUFF_EXTEND(r, s);
421
+ /* Scale and output coefficient in natural (dezigzagged) order */
422
+ (*block)[jpeg_natural_order[k]] = (JCOEF)LEFT_SHIFT(s, Al);
423
+ } else {
424
+ if (r == 15) { /* ZRL */
425
+ k += 15; /* skip 15 zeroes in band */
426
+ } else { /* EOBr, run length is 2^r + appended bits */
427
+ EOBRUN = 1 << r;
428
+ if (r) { /* EOBr, r > 0 */
429
+ CHECK_BIT_BUFFER(br_state, r, return FALSE);
430
+ r = GET_BITS(r);
431
+ EOBRUN += r;
432
+ }
433
+ EOBRUN--; /* this band is processed at this moment */
434
+ break; /* force end-of-band */
435
+ }
436
+ }
437
+ }
438
+
439
+ BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
440
+ }
441
+
442
+ /* Completed MCU, so update state */
443
+ entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
444
+ }
445
+
446
+ /* Account for restart interval (no-op if not using restarts) */
447
+ entropy->restarts_to_go--;
448
+
449
+ return TRUE;
450
+ }
451
+
452
+
453
+ /*
454
+ * MCU decoding for DC successive approximation refinement scan.
455
+ * Note: we assume such scans can be multi-component, although the spec
456
+ * is not very clear on the point.
457
+ */
458
+
459
+ METHODDEF(boolean)
460
+ decode_mcu_DC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
461
+ {
462
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
463
+ int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */
464
+ int blkn;
465
+ JBLOCKROW block;
466
+ BITREAD_STATE_VARS;
467
+
468
+ /* Process restart marker if needed; may have to suspend */
469
+ if (cinfo->restart_interval) {
470
+ if (entropy->restarts_to_go == 0)
471
+ if (!process_restart(cinfo))
472
+ return FALSE;
473
+ }
474
+
475
+ /* Not worth the cycles to check insufficient_data here,
476
+ * since we will not change the data anyway if we read zeroes.
477
+ */
478
+
479
+ /* Load up working state */
480
+ BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
481
+
482
+ /* Outer loop handles each block in the MCU */
483
+
484
+ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
485
+ block = MCU_data[blkn];
486
+
487
+ /* Encoded data is simply the next bit of the two's-complement DC value */
488
+ CHECK_BIT_BUFFER(br_state, 1, return FALSE);
489
+ if (GET_BITS(1))
490
+ (*block)[0] |= p1;
491
+ /* Note: since we use |=, repeating the assignment later is safe */
492
+ }
493
+
494
+ /* Completed MCU, so update state */
495
+ BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
496
+
497
+ /* Account for restart interval (no-op if not using restarts) */
498
+ entropy->restarts_to_go--;
499
+
500
+ return TRUE;
501
+ }
502
+
503
+
504
+ /*
505
+ * MCU decoding for AC successive approximation refinement scan.
506
+ */
507
+
508
+ METHODDEF(boolean)
509
+ decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
510
+ {
511
+ phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
512
+ int Se = cinfo->Se;
513
+ int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */
514
+ int m1 = (NEG_1) << cinfo->Al; /* -1 in the bit position being coded */
515
+ register int s, k, r;
516
+ unsigned int EOBRUN;
517
+ JBLOCKROW block;
518
+ JCOEFPTR thiscoef;
519
+ BITREAD_STATE_VARS;
520
+ d_derived_tbl *tbl;
521
+ int num_newnz;
522
+ int newnz_pos[DCTSIZE2];
523
+
524
+ /* Process restart marker if needed; may have to suspend */
525
+ if (cinfo->restart_interval) {
526
+ if (entropy->restarts_to_go == 0)
527
+ if (!process_restart(cinfo))
528
+ return FALSE;
529
+ }
530
+
531
+ /* If we've run out of data, don't modify the MCU.
532
+ */
533
+ if (!entropy->pub.insufficient_data) {
534
+
535
+ /* Load up working state */
536
+ BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
537
+ EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
538
+
539
+ /* There is always only one block per MCU */
540
+ block = MCU_data[0];
541
+ tbl = entropy->ac_derived_tbl;
542
+
543
+ /* If we are forced to suspend, we must undo the assignments to any newly
544
+ * nonzero coefficients in the block, because otherwise we'd get confused
545
+ * next time about which coefficients were already nonzero.
546
+ * But we need not undo addition of bits to already-nonzero coefficients;
547
+ * instead, we can test the current bit to see if we already did it.
548
+ */
549
+ num_newnz = 0;
550
+
551
+ /* initialize coefficient loop counter to start of band */
552
+ k = cinfo->Ss;
553
+
554
+ if (EOBRUN == 0) {
555
+ for (; k <= Se; k++) {
556
+ HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
557
+ r = s >> 4;
558
+ s &= 15;
559
+ if (s) {
560
+ if (s != 1) /* size of new coef should always be 1 */
561
+ WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
562
+ CHECK_BIT_BUFFER(br_state, 1, goto undoit);
563
+ if (GET_BITS(1))
564
+ s = p1; /* newly nonzero coef is positive */
565
+ else
566
+ s = m1; /* newly nonzero coef is negative */
567
+ } else {
568
+ if (r != 15) {
569
+ EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */
570
+ if (r) {
571
+ CHECK_BIT_BUFFER(br_state, r, goto undoit);
572
+ r = GET_BITS(r);
573
+ EOBRUN += r;
574
+ }
575
+ break; /* rest of block is handled by EOB logic */
576
+ }
577
+ /* note s = 0 for processing ZRL */
578
+ }
579
+ /* Advance over already-nonzero coefs and r still-zero coefs,
580
+ * appending correction bits to the nonzeroes. A correction bit is 1
581
+ * if the absolute value of the coefficient must be increased.
582
+ */
583
+ do {
584
+ thiscoef = *block + jpeg_natural_order[k];
585
+ if (*thiscoef != 0) {
586
+ CHECK_BIT_BUFFER(br_state, 1, goto undoit);
587
+ if (GET_BITS(1)) {
588
+ if ((*thiscoef & p1) == 0) { /* do nothing if already set it */
589
+ if (*thiscoef >= 0)
590
+ *thiscoef += p1;
591
+ else
592
+ *thiscoef += m1;
593
+ }
594
+ }
595
+ } else {
596
+ if (--r < 0)
597
+ break; /* reached target zero coefficient */
598
+ }
599
+ k++;
600
+ } while (k <= Se);
601
+ if (s) {
602
+ int pos = jpeg_natural_order[k];
603
+ /* Output newly nonzero coefficient */
604
+ (*block)[pos] = (JCOEF)s;
605
+ /* Remember its position in case we have to suspend */
606
+ newnz_pos[num_newnz++] = pos;
607
+ }
608
+ }
609
+ }
610
+
611
+ if (EOBRUN > 0) {
612
+ /* Scan any remaining coefficient positions after the end-of-band
613
+ * (the last newly nonzero coefficient, if any). Append a correction
614
+ * bit to each already-nonzero coefficient. A correction bit is 1
615
+ * if the absolute value of the coefficient must be increased.
616
+ */
617
+ for (; k <= Se; k++) {
618
+ thiscoef = *block + jpeg_natural_order[k];
619
+ if (*thiscoef != 0) {
620
+ CHECK_BIT_BUFFER(br_state, 1, goto undoit);
621
+ if (GET_BITS(1)) {
622
+ if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */
623
+ if (*thiscoef >= 0)
624
+ *thiscoef += p1;
625
+ else
626
+ *thiscoef += m1;
627
+ }
628
+ }
629
+ }
630
+ }
631
+ /* Count one block completed in EOB run */
632
+ EOBRUN--;
633
+ }
634
+
635
+ /* Completed MCU, so update state */
636
+ BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
637
+ entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
638
+ }
639
+
640
+ /* Account for restart interval (no-op if not using restarts) */
641
+ entropy->restarts_to_go--;
642
+
643
+ return TRUE;
644
+
645
+ undoit:
646
+ /* Re-zero any output coefficients that we made newly nonzero */
647
+ while (num_newnz > 0)
648
+ (*block)[newnz_pos[--num_newnz]] = 0;
649
+
650
+ return FALSE;
651
+ }
652
+
653
+
654
+ /*
655
+ * Module initialization routine for progressive Huffman entropy decoding.
656
+ */
657
+
658
+ GLOBAL(void)
659
+ jinit_phuff_decoder(j_decompress_ptr cinfo)
660
+ {
661
+ phuff_entropy_ptr entropy;
662
+ int *coef_bit_ptr;
663
+ int ci, i;
664
+
665
+ entropy = (phuff_entropy_ptr)
666
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
667
+ sizeof(phuff_entropy_decoder));
668
+ cinfo->entropy = (struct jpeg_entropy_decoder *)entropy;
669
+ entropy->pub.start_pass = start_pass_phuff_decoder;
670
+
671
+ /* Mark derived tables unallocated */
672
+ for (i = 0; i < NUM_HUFF_TBLS; i++) {
673
+ entropy->derived_tbls[i] = NULL;
674
+ }
675
+
676
+ /* Create progression status table */
677
+ cinfo->coef_bits = (int (*)[DCTSIZE2])
678
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
679
+ cinfo->num_components * DCTSIZE2 *
680
+ sizeof(int));
681
+ coef_bit_ptr = &cinfo->coef_bits[0][0];
682
+ for (ci = 0; ci < cinfo->num_components; ci++)
683
+ for (i = 0; i < DCTSIZE2; i++)
684
+ *coef_bit_ptr++ = -1;
685
+ }
686
+
687
+ #endif /* D_PROGRESSIVE_SUPPORTED */