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,883 @@
1
+ /*
2
+ * jdcolor.c
3
+ *
4
+ * This file was part of the Independent JPEG Group's software:
5
+ * Copyright (C) 1991-1997, Thomas G. Lane.
6
+ * Modified 2011 by Guido Vollbeding.
7
+ * libjpeg-turbo Modifications:
8
+ * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
9
+ * Copyright (C) 2009, 2011-2012, 2014-2015, D. R. Commander.
10
+ * Copyright (C) 2013, Linaro Limited.
11
+ * For conditions of distribution and use, see the accompanying README.ijg
12
+ * file.
13
+ *
14
+ * This file contains output colorspace conversion routines.
15
+ */
16
+
17
+ #define JPEG_INTERNALS
18
+ #include "jinclude.h"
19
+ #include "jpeglib.h"
20
+ #include "jsimd.h"
21
+ #include "jconfigint.h"
22
+
23
+
24
+ /* Private subobject */
25
+
26
+ typedef struct {
27
+ struct jpeg_color_deconverter pub; /* public fields */
28
+
29
+ /* Private state for YCC->RGB conversion */
30
+ int *Cr_r_tab; /* => table for Cr to R conversion */
31
+ int *Cb_b_tab; /* => table for Cb to B conversion */
32
+ JLONG *Cr_g_tab; /* => table for Cr to G conversion */
33
+ JLONG *Cb_g_tab; /* => table for Cb to G conversion */
34
+
35
+ /* Private state for RGB->Y conversion */
36
+ JLONG *rgb_y_tab; /* => table for RGB to Y conversion */
37
+ } my_color_deconverter;
38
+
39
+ typedef my_color_deconverter *my_cconvert_ptr;
40
+
41
+
42
+ /**************** YCbCr -> RGB conversion: most common case **************/
43
+ /**************** RGB -> Y conversion: less common case **************/
44
+
45
+ /*
46
+ * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
47
+ * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
48
+ * The conversion equations to be implemented are therefore
49
+ *
50
+ * R = Y + 1.40200 * Cr
51
+ * G = Y - 0.34414 * Cb - 0.71414 * Cr
52
+ * B = Y + 1.77200 * Cb
53
+ *
54
+ * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
55
+ *
56
+ * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
57
+ * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
58
+ *
59
+ * To avoid floating-point arithmetic, we represent the fractional constants
60
+ * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
61
+ * the products by 2^16, with appropriate rounding, to get the correct answer.
62
+ * Notice that Y, being an integral input, does not contribute any fraction
63
+ * so it need not participate in the rounding.
64
+ *
65
+ * For even more speed, we avoid doing any multiplications in the inner loop
66
+ * by precalculating the constants times Cb and Cr for all possible values.
67
+ * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
68
+ * for 12-bit samples it is still acceptable. It's not very reasonable for
69
+ * 16-bit samples, but if you want lossless storage you shouldn't be changing
70
+ * colorspace anyway.
71
+ * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
72
+ * values for the G calculation are left scaled up, since we must add them
73
+ * together before rounding.
74
+ */
75
+
76
+ #define SCALEBITS 16 /* speediest right-shift on some machines */
77
+ #define ONE_HALF ((JLONG)1 << (SCALEBITS - 1))
78
+ #define FIX(x) ((JLONG)((x) * (1L << SCALEBITS) + 0.5))
79
+
80
+ /* We allocate one big table for RGB->Y conversion and divide it up into
81
+ * three parts, instead of doing three alloc_small requests. This lets us
82
+ * use a single table base address, which can be held in a register in the
83
+ * inner loops on many machines (more than can hold all three addresses,
84
+ * anyway).
85
+ */
86
+
87
+ #define R_Y_OFF 0 /* offset to R => Y section */
88
+ #define G_Y_OFF (1 * (MAXJSAMPLE + 1)) /* offset to G => Y section */
89
+ #define B_Y_OFF (2 * (MAXJSAMPLE + 1)) /* etc. */
90
+ #define TABLE_SIZE (3 * (MAXJSAMPLE + 1))
91
+
92
+
93
+ /* Include inline routines for colorspace extensions */
94
+
95
+ #include "jdcolext.c"
96
+ #undef RGB_RED
97
+ #undef RGB_GREEN
98
+ #undef RGB_BLUE
99
+ #undef RGB_PIXELSIZE
100
+
101
+ #define RGB_RED EXT_RGB_RED
102
+ #define RGB_GREEN EXT_RGB_GREEN
103
+ #define RGB_BLUE EXT_RGB_BLUE
104
+ #define RGB_PIXELSIZE EXT_RGB_PIXELSIZE
105
+ #define ycc_rgb_convert_internal ycc_extrgb_convert_internal
106
+ #define gray_rgb_convert_internal gray_extrgb_convert_internal
107
+ #define rgb_rgb_convert_internal rgb_extrgb_convert_internal
108
+ #include "jdcolext.c"
109
+ #undef RGB_RED
110
+ #undef RGB_GREEN
111
+ #undef RGB_BLUE
112
+ #undef RGB_PIXELSIZE
113
+ #undef ycc_rgb_convert_internal
114
+ #undef gray_rgb_convert_internal
115
+ #undef rgb_rgb_convert_internal
116
+
117
+ #define RGB_RED EXT_RGBX_RED
118
+ #define RGB_GREEN EXT_RGBX_GREEN
119
+ #define RGB_BLUE EXT_RGBX_BLUE
120
+ #define RGB_ALPHA 3
121
+ #define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE
122
+ #define ycc_rgb_convert_internal ycc_extrgbx_convert_internal
123
+ #define gray_rgb_convert_internal gray_extrgbx_convert_internal
124
+ #define rgb_rgb_convert_internal rgb_extrgbx_convert_internal
125
+ #include "jdcolext.c"
126
+ #undef RGB_RED
127
+ #undef RGB_GREEN
128
+ #undef RGB_BLUE
129
+ #undef RGB_ALPHA
130
+ #undef RGB_PIXELSIZE
131
+ #undef ycc_rgb_convert_internal
132
+ #undef gray_rgb_convert_internal
133
+ #undef rgb_rgb_convert_internal
134
+
135
+ #define RGB_RED EXT_BGR_RED
136
+ #define RGB_GREEN EXT_BGR_GREEN
137
+ #define RGB_BLUE EXT_BGR_BLUE
138
+ #define RGB_PIXELSIZE EXT_BGR_PIXELSIZE
139
+ #define ycc_rgb_convert_internal ycc_extbgr_convert_internal
140
+ #define gray_rgb_convert_internal gray_extbgr_convert_internal
141
+ #define rgb_rgb_convert_internal rgb_extbgr_convert_internal
142
+ #include "jdcolext.c"
143
+ #undef RGB_RED
144
+ #undef RGB_GREEN
145
+ #undef RGB_BLUE
146
+ #undef RGB_PIXELSIZE
147
+ #undef ycc_rgb_convert_internal
148
+ #undef gray_rgb_convert_internal
149
+ #undef rgb_rgb_convert_internal
150
+
151
+ #define RGB_RED EXT_BGRX_RED
152
+ #define RGB_GREEN EXT_BGRX_GREEN
153
+ #define RGB_BLUE EXT_BGRX_BLUE
154
+ #define RGB_ALPHA 3
155
+ #define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE
156
+ #define ycc_rgb_convert_internal ycc_extbgrx_convert_internal
157
+ #define gray_rgb_convert_internal gray_extbgrx_convert_internal
158
+ #define rgb_rgb_convert_internal rgb_extbgrx_convert_internal
159
+ #include "jdcolext.c"
160
+ #undef RGB_RED
161
+ #undef RGB_GREEN
162
+ #undef RGB_BLUE
163
+ #undef RGB_ALPHA
164
+ #undef RGB_PIXELSIZE
165
+ #undef ycc_rgb_convert_internal
166
+ #undef gray_rgb_convert_internal
167
+ #undef rgb_rgb_convert_internal
168
+
169
+ #define RGB_RED EXT_XBGR_RED
170
+ #define RGB_GREEN EXT_XBGR_GREEN
171
+ #define RGB_BLUE EXT_XBGR_BLUE
172
+ #define RGB_ALPHA 0
173
+ #define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE
174
+ #define ycc_rgb_convert_internal ycc_extxbgr_convert_internal
175
+ #define gray_rgb_convert_internal gray_extxbgr_convert_internal
176
+ #define rgb_rgb_convert_internal rgb_extxbgr_convert_internal
177
+ #include "jdcolext.c"
178
+ #undef RGB_RED
179
+ #undef RGB_GREEN
180
+ #undef RGB_BLUE
181
+ #undef RGB_ALPHA
182
+ #undef RGB_PIXELSIZE
183
+ #undef ycc_rgb_convert_internal
184
+ #undef gray_rgb_convert_internal
185
+ #undef rgb_rgb_convert_internal
186
+
187
+ #define RGB_RED EXT_XRGB_RED
188
+ #define RGB_GREEN EXT_XRGB_GREEN
189
+ #define RGB_BLUE EXT_XRGB_BLUE
190
+ #define RGB_ALPHA 0
191
+ #define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE
192
+ #define ycc_rgb_convert_internal ycc_extxrgb_convert_internal
193
+ #define gray_rgb_convert_internal gray_extxrgb_convert_internal
194
+ #define rgb_rgb_convert_internal rgb_extxrgb_convert_internal
195
+ #include "jdcolext.c"
196
+ #undef RGB_RED
197
+ #undef RGB_GREEN
198
+ #undef RGB_BLUE
199
+ #undef RGB_ALPHA
200
+ #undef RGB_PIXELSIZE
201
+ #undef ycc_rgb_convert_internal
202
+ #undef gray_rgb_convert_internal
203
+ #undef rgb_rgb_convert_internal
204
+
205
+
206
+ /*
207
+ * Initialize tables for YCC->RGB colorspace conversion.
208
+ */
209
+
210
+ LOCAL(void)
211
+ build_ycc_rgb_table(j_decompress_ptr cinfo)
212
+ {
213
+ my_cconvert_ptr cconvert = (my_cconvert_ptr)cinfo->cconvert;
214
+ int i;
215
+ JLONG x;
216
+ SHIFT_TEMPS
217
+
218
+ cconvert->Cr_r_tab = (int *)
219
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
220
+ (MAXJSAMPLE + 1) * sizeof(int));
221
+ cconvert->Cb_b_tab = (int *)
222
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
223
+ (MAXJSAMPLE + 1) * sizeof(int));
224
+ cconvert->Cr_g_tab = (JLONG *)
225
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
226
+ (MAXJSAMPLE + 1) * sizeof(JLONG));
227
+ cconvert->Cb_g_tab = (JLONG *)
228
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
229
+ (MAXJSAMPLE + 1) * sizeof(JLONG));
230
+
231
+ for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
232
+ /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
233
+ /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
234
+ /* Cr=>R value is nearest int to 1.40200 * x */
235
+ cconvert->Cr_r_tab[i] = (int)
236
+ RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS);
237
+ /* Cb=>B value is nearest int to 1.77200 * x */
238
+ cconvert->Cb_b_tab[i] = (int)
239
+ RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS);
240
+ /* Cr=>G value is scaled-up -0.71414 * x */
241
+ cconvert->Cr_g_tab[i] = (-FIX(0.71414)) * x;
242
+ /* Cb=>G value is scaled-up -0.34414 * x */
243
+ /* We also add in ONE_HALF so that need not do it in inner loop */
244
+ cconvert->Cb_g_tab[i] = (-FIX(0.34414)) * x + ONE_HALF;
245
+ }
246
+ }
247
+
248
+
249
+ /*
250
+ * Convert some rows of samples to the output colorspace.
251
+ */
252
+
253
+ METHODDEF(void)
254
+ ycc_rgb_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
255
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
256
+ {
257
+ switch (cinfo->out_color_space) {
258
+ case JCS_EXT_RGB:
259
+ ycc_extrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
260
+ num_rows);
261
+ break;
262
+ case JCS_EXT_RGBX:
263
+ case JCS_EXT_RGBA:
264
+ ycc_extrgbx_convert_internal(cinfo, input_buf, input_row, output_buf,
265
+ num_rows);
266
+ break;
267
+ case JCS_EXT_BGR:
268
+ ycc_extbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
269
+ num_rows);
270
+ break;
271
+ case JCS_EXT_BGRX:
272
+ case JCS_EXT_BGRA:
273
+ ycc_extbgrx_convert_internal(cinfo, input_buf, input_row, output_buf,
274
+ num_rows);
275
+ break;
276
+ case JCS_EXT_XBGR:
277
+ case JCS_EXT_ABGR:
278
+ ycc_extxbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
279
+ num_rows);
280
+ break;
281
+ case JCS_EXT_XRGB:
282
+ case JCS_EXT_ARGB:
283
+ ycc_extxrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
284
+ num_rows);
285
+ break;
286
+ default:
287
+ ycc_rgb_convert_internal(cinfo, input_buf, input_row, output_buf,
288
+ num_rows);
289
+ break;
290
+ }
291
+ }
292
+
293
+
294
+ /**************** Cases other than YCbCr -> RGB **************/
295
+
296
+
297
+ /*
298
+ * Initialize for RGB->grayscale colorspace conversion.
299
+ */
300
+
301
+ LOCAL(void)
302
+ build_rgb_y_table(j_decompress_ptr cinfo)
303
+ {
304
+ my_cconvert_ptr cconvert = (my_cconvert_ptr)cinfo->cconvert;
305
+ JLONG *rgb_y_tab;
306
+ JLONG i;
307
+
308
+ /* Allocate and fill in the conversion tables. */
309
+ cconvert->rgb_y_tab = rgb_y_tab = (JLONG *)
310
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
311
+ (TABLE_SIZE * sizeof(JLONG)));
312
+
313
+ for (i = 0; i <= MAXJSAMPLE; i++) {
314
+ rgb_y_tab[i + R_Y_OFF] = FIX(0.29900) * i;
315
+ rgb_y_tab[i + G_Y_OFF] = FIX(0.58700) * i;
316
+ rgb_y_tab[i + B_Y_OFF] = FIX(0.11400) * i + ONE_HALF;
317
+ }
318
+ }
319
+
320
+
321
+ /*
322
+ * Convert RGB to grayscale.
323
+ */
324
+
325
+ METHODDEF(void)
326
+ rgb_gray_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
327
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
328
+ {
329
+ my_cconvert_ptr cconvert = (my_cconvert_ptr)cinfo->cconvert;
330
+ register int r, g, b;
331
+ register JLONG *ctab = cconvert->rgb_y_tab;
332
+ register JSAMPROW outptr;
333
+ register JSAMPROW inptr0, inptr1, inptr2;
334
+ register JDIMENSION col;
335
+ JDIMENSION num_cols = cinfo->output_width;
336
+
337
+ while (--num_rows >= 0) {
338
+ inptr0 = input_buf[0][input_row];
339
+ inptr1 = input_buf[1][input_row];
340
+ inptr2 = input_buf[2][input_row];
341
+ input_row++;
342
+ outptr = *output_buf++;
343
+ for (col = 0; col < num_cols; col++) {
344
+ r = GETJSAMPLE(inptr0[col]);
345
+ g = GETJSAMPLE(inptr1[col]);
346
+ b = GETJSAMPLE(inptr2[col]);
347
+ /* Y */
348
+ outptr[col] = (JSAMPLE)((ctab[r + R_Y_OFF] + ctab[g + G_Y_OFF] +
349
+ ctab[b + B_Y_OFF]) >> SCALEBITS);
350
+ }
351
+ }
352
+ }
353
+
354
+
355
+ /*
356
+ * Color conversion for no colorspace change: just copy the data,
357
+ * converting from separate-planes to interleaved representation.
358
+ */
359
+
360
+ METHODDEF(void)
361
+ null_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
362
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
363
+ {
364
+ register JSAMPROW inptr, inptr0, inptr1, inptr2, inptr3, outptr;
365
+ register JDIMENSION col;
366
+ register int num_components = cinfo->num_components;
367
+ JDIMENSION num_cols = cinfo->output_width;
368
+ int ci;
369
+
370
+ if (num_components == 3) {
371
+ while (--num_rows >= 0) {
372
+ inptr0 = input_buf[0][input_row];
373
+ inptr1 = input_buf[1][input_row];
374
+ inptr2 = input_buf[2][input_row];
375
+ input_row++;
376
+ outptr = *output_buf++;
377
+ for (col = 0; col < num_cols; col++) {
378
+ *outptr++ = inptr0[col];
379
+ *outptr++ = inptr1[col];
380
+ *outptr++ = inptr2[col];
381
+ }
382
+ }
383
+ } else if (num_components == 4) {
384
+ while (--num_rows >= 0) {
385
+ inptr0 = input_buf[0][input_row];
386
+ inptr1 = input_buf[1][input_row];
387
+ inptr2 = input_buf[2][input_row];
388
+ inptr3 = input_buf[3][input_row];
389
+ input_row++;
390
+ outptr = *output_buf++;
391
+ for (col = 0; col < num_cols; col++) {
392
+ *outptr++ = inptr0[col];
393
+ *outptr++ = inptr1[col];
394
+ *outptr++ = inptr2[col];
395
+ *outptr++ = inptr3[col];
396
+ }
397
+ }
398
+ } else {
399
+ while (--num_rows >= 0) {
400
+ for (ci = 0; ci < num_components; ci++) {
401
+ inptr = input_buf[ci][input_row];
402
+ outptr = *output_buf;
403
+ for (col = 0; col < num_cols; col++) {
404
+ outptr[ci] = inptr[col];
405
+ outptr += num_components;
406
+ }
407
+ }
408
+ output_buf++;
409
+ input_row++;
410
+ }
411
+ }
412
+ }
413
+
414
+
415
+ /*
416
+ * Color conversion for grayscale: just copy the data.
417
+ * This also works for YCbCr -> grayscale conversion, in which
418
+ * we just copy the Y (luminance) component and ignore chrominance.
419
+ */
420
+
421
+ METHODDEF(void)
422
+ grayscale_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
423
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
424
+ {
425
+ jcopy_sample_rows(input_buf[0], (int)input_row, output_buf, 0, num_rows,
426
+ cinfo->output_width);
427
+ }
428
+
429
+
430
+ /*
431
+ * Convert grayscale to RGB
432
+ */
433
+
434
+ METHODDEF(void)
435
+ gray_rgb_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
436
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
437
+ {
438
+ switch (cinfo->out_color_space) {
439
+ case JCS_EXT_RGB:
440
+ gray_extrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
441
+ num_rows);
442
+ break;
443
+ case JCS_EXT_RGBX:
444
+ case JCS_EXT_RGBA:
445
+ gray_extrgbx_convert_internal(cinfo, input_buf, input_row, output_buf,
446
+ num_rows);
447
+ break;
448
+ case JCS_EXT_BGR:
449
+ gray_extbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
450
+ num_rows);
451
+ break;
452
+ case JCS_EXT_BGRX:
453
+ case JCS_EXT_BGRA:
454
+ gray_extbgrx_convert_internal(cinfo, input_buf, input_row, output_buf,
455
+ num_rows);
456
+ break;
457
+ case JCS_EXT_XBGR:
458
+ case JCS_EXT_ABGR:
459
+ gray_extxbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
460
+ num_rows);
461
+ break;
462
+ case JCS_EXT_XRGB:
463
+ case JCS_EXT_ARGB:
464
+ gray_extxrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
465
+ num_rows);
466
+ break;
467
+ default:
468
+ gray_rgb_convert_internal(cinfo, input_buf, input_row, output_buf,
469
+ num_rows);
470
+ break;
471
+ }
472
+ }
473
+
474
+
475
+ /*
476
+ * Convert plain RGB to extended RGB
477
+ */
478
+
479
+ METHODDEF(void)
480
+ rgb_rgb_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
481
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
482
+ {
483
+ switch (cinfo->out_color_space) {
484
+ case JCS_EXT_RGB:
485
+ rgb_extrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
486
+ num_rows);
487
+ break;
488
+ case JCS_EXT_RGBX:
489
+ case JCS_EXT_RGBA:
490
+ rgb_extrgbx_convert_internal(cinfo, input_buf, input_row, output_buf,
491
+ num_rows);
492
+ break;
493
+ case JCS_EXT_BGR:
494
+ rgb_extbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
495
+ num_rows);
496
+ break;
497
+ case JCS_EXT_BGRX:
498
+ case JCS_EXT_BGRA:
499
+ rgb_extbgrx_convert_internal(cinfo, input_buf, input_row, output_buf,
500
+ num_rows);
501
+ break;
502
+ case JCS_EXT_XBGR:
503
+ case JCS_EXT_ABGR:
504
+ rgb_extxbgr_convert_internal(cinfo, input_buf, input_row, output_buf,
505
+ num_rows);
506
+ break;
507
+ case JCS_EXT_XRGB:
508
+ case JCS_EXT_ARGB:
509
+ rgb_extxrgb_convert_internal(cinfo, input_buf, input_row, output_buf,
510
+ num_rows);
511
+ break;
512
+ default:
513
+ rgb_rgb_convert_internal(cinfo, input_buf, input_row, output_buf,
514
+ num_rows);
515
+ break;
516
+ }
517
+ }
518
+
519
+
520
+ /*
521
+ * Adobe-style YCCK->CMYK conversion.
522
+ * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
523
+ * conversion as above, while passing K (black) unchanged.
524
+ * We assume build_ycc_rgb_table has been called.
525
+ */
526
+
527
+ METHODDEF(void)
528
+ ycck_cmyk_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
529
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
530
+ {
531
+ my_cconvert_ptr cconvert = (my_cconvert_ptr)cinfo->cconvert;
532
+ register int y, cb, cr;
533
+ register JSAMPROW outptr;
534
+ register JSAMPROW inptr0, inptr1, inptr2, inptr3;
535
+ register JDIMENSION col;
536
+ JDIMENSION num_cols = cinfo->output_width;
537
+ /* copy these pointers into registers if possible */
538
+ register JSAMPLE *range_limit = cinfo->sample_range_limit;
539
+ register int *Crrtab = cconvert->Cr_r_tab;
540
+ register int *Cbbtab = cconvert->Cb_b_tab;
541
+ register JLONG *Crgtab = cconvert->Cr_g_tab;
542
+ register JLONG *Cbgtab = cconvert->Cb_g_tab;
543
+ SHIFT_TEMPS
544
+
545
+ while (--num_rows >= 0) {
546
+ inptr0 = input_buf[0][input_row];
547
+ inptr1 = input_buf[1][input_row];
548
+ inptr2 = input_buf[2][input_row];
549
+ inptr3 = input_buf[3][input_row];
550
+ input_row++;
551
+ outptr = *output_buf++;
552
+ for (col = 0; col < num_cols; col++) {
553
+ y = GETJSAMPLE(inptr0[col]);
554
+ cb = GETJSAMPLE(inptr1[col]);
555
+ cr = GETJSAMPLE(inptr2[col]);
556
+ /* Range-limiting is essential due to noise introduced by DCT losses. */
557
+ outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */
558
+ outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */
559
+ ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
560
+ SCALEBITS)))];
561
+ outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */
562
+ /* K passes through unchanged */
563
+ outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */
564
+ outptr += 4;
565
+ }
566
+ }
567
+ }
568
+
569
+
570
+ /*
571
+ * RGB565 conversion
572
+ */
573
+
574
+ #define PACK_SHORT_565_LE(r, g, b) ((((r) << 8) & 0xF800) | \
575
+ (((g) << 3) & 0x7E0) | ((b) >> 3))
576
+ #define PACK_SHORT_565_BE(r, g, b) (((r) & 0xF8) | ((g) >> 5) | \
577
+ (((g) << 11) & 0xE000) | \
578
+ (((b) << 5) & 0x1F00))
579
+
580
+ #define PACK_TWO_PIXELS_LE(l, r) ((r << 16) | l)
581
+ #define PACK_TWO_PIXELS_BE(l, r) ((l << 16) | r)
582
+
583
+ #define PACK_NEED_ALIGNMENT(ptr) (((size_t)(ptr)) & 3)
584
+
585
+ #define WRITE_TWO_ALIGNED_PIXELS(addr, pixels) ((*(int *)(addr)) = pixels)
586
+
587
+ #define DITHER_565_R(r, dither) ((r) + ((dither) & 0xFF))
588
+ #define DITHER_565_G(g, dither) ((g) + (((dither) & 0xFF) >> 1))
589
+ #define DITHER_565_B(b, dither) ((b) + ((dither) & 0xFF))
590
+
591
+
592
+ /* Declarations for ordered dithering
593
+ *
594
+ * We use a 4x4 ordered dither array packed into 32 bits. This array is
595
+ * sufficient for dithering RGB888 to RGB565.
596
+ */
597
+
598
+ #define DITHER_MASK 0x3
599
+ #define DITHER_ROTATE(x) ((((x) & 0xFF) << 24) | (((x) >> 8) & 0x00FFFFFF))
600
+ static const JLONG dither_matrix[4] = {
601
+ 0x0008020A,
602
+ 0x0C040E06,
603
+ 0x030B0109,
604
+ 0x0F070D05
605
+ };
606
+
607
+
608
+ static INLINE boolean is_big_endian(void)
609
+ {
610
+ int test_value = 1;
611
+ if (*(char *)&test_value != 1)
612
+ return TRUE;
613
+ return FALSE;
614
+ }
615
+
616
+
617
+ /* Include inline routines for RGB565 conversion */
618
+
619
+ #define PACK_SHORT_565 PACK_SHORT_565_LE
620
+ #define PACK_TWO_PIXELS PACK_TWO_PIXELS_LE
621
+ #define ycc_rgb565_convert_internal ycc_rgb565_convert_le
622
+ #define ycc_rgb565D_convert_internal ycc_rgb565D_convert_le
623
+ #define rgb_rgb565_convert_internal rgb_rgb565_convert_le
624
+ #define rgb_rgb565D_convert_internal rgb_rgb565D_convert_le
625
+ #define gray_rgb565_convert_internal gray_rgb565_convert_le
626
+ #define gray_rgb565D_convert_internal gray_rgb565D_convert_le
627
+ #include "jdcol565.c"
628
+ #undef PACK_SHORT_565
629
+ #undef PACK_TWO_PIXELS
630
+ #undef ycc_rgb565_convert_internal
631
+ #undef ycc_rgb565D_convert_internal
632
+ #undef rgb_rgb565_convert_internal
633
+ #undef rgb_rgb565D_convert_internal
634
+ #undef gray_rgb565_convert_internal
635
+ #undef gray_rgb565D_convert_internal
636
+
637
+ #define PACK_SHORT_565 PACK_SHORT_565_BE
638
+ #define PACK_TWO_PIXELS PACK_TWO_PIXELS_BE
639
+ #define ycc_rgb565_convert_internal ycc_rgb565_convert_be
640
+ #define ycc_rgb565D_convert_internal ycc_rgb565D_convert_be
641
+ #define rgb_rgb565_convert_internal rgb_rgb565_convert_be
642
+ #define rgb_rgb565D_convert_internal rgb_rgb565D_convert_be
643
+ #define gray_rgb565_convert_internal gray_rgb565_convert_be
644
+ #define gray_rgb565D_convert_internal gray_rgb565D_convert_be
645
+ #include "jdcol565.c"
646
+ #undef PACK_SHORT_565
647
+ #undef PACK_TWO_PIXELS
648
+ #undef ycc_rgb565_convert_internal
649
+ #undef ycc_rgb565D_convert_internal
650
+ #undef rgb_rgb565_convert_internal
651
+ #undef rgb_rgb565D_convert_internal
652
+ #undef gray_rgb565_convert_internal
653
+ #undef gray_rgb565D_convert_internal
654
+
655
+
656
+ METHODDEF(void)
657
+ ycc_rgb565_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
658
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
659
+ {
660
+ if (is_big_endian())
661
+ ycc_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
662
+ else
663
+ ycc_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
664
+ }
665
+
666
+
667
+ METHODDEF(void)
668
+ ycc_rgb565D_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
669
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
670
+ {
671
+ if (is_big_endian())
672
+ ycc_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
673
+ else
674
+ ycc_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
675
+ }
676
+
677
+
678
+ METHODDEF(void)
679
+ rgb_rgb565_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
680
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
681
+ {
682
+ if (is_big_endian())
683
+ rgb_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
684
+ else
685
+ rgb_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
686
+ }
687
+
688
+
689
+ METHODDEF(void)
690
+ rgb_rgb565D_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
691
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
692
+ {
693
+ if (is_big_endian())
694
+ rgb_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
695
+ else
696
+ rgb_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
697
+ }
698
+
699
+
700
+ METHODDEF(void)
701
+ gray_rgb565_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
702
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
703
+ {
704
+ if (is_big_endian())
705
+ gray_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
706
+ else
707
+ gray_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
708
+ }
709
+
710
+
711
+ METHODDEF(void)
712
+ gray_rgb565D_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
713
+ JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)
714
+ {
715
+ if (is_big_endian())
716
+ gray_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
717
+ else
718
+ gray_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
719
+ }
720
+
721
+
722
+ /*
723
+ * Empty method for start_pass.
724
+ */
725
+
726
+ METHODDEF(void)
727
+ start_pass_dcolor(j_decompress_ptr cinfo)
728
+ {
729
+ /* no work needed */
730
+ }
731
+
732
+
733
+ /*
734
+ * Module initialization routine for output colorspace conversion.
735
+ */
736
+
737
+ GLOBAL(void)
738
+ jinit_color_deconverter(j_decompress_ptr cinfo)
739
+ {
740
+ my_cconvert_ptr cconvert;
741
+ int ci;
742
+
743
+ cconvert = (my_cconvert_ptr)
744
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
745
+ sizeof(my_color_deconverter));
746
+ cinfo->cconvert = (struct jpeg_color_deconverter *)cconvert;
747
+ cconvert->pub.start_pass = start_pass_dcolor;
748
+
749
+ /* Make sure num_components agrees with jpeg_color_space */
750
+ switch (cinfo->jpeg_color_space) {
751
+ case JCS_GRAYSCALE:
752
+ if (cinfo->num_components != 1)
753
+ ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
754
+ break;
755
+
756
+ case JCS_RGB:
757
+ case JCS_YCbCr:
758
+ if (cinfo->num_components != 3)
759
+ ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
760
+ break;
761
+
762
+ case JCS_CMYK:
763
+ case JCS_YCCK:
764
+ if (cinfo->num_components != 4)
765
+ ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
766
+ break;
767
+
768
+ default: /* JCS_UNKNOWN can be anything */
769
+ if (cinfo->num_components < 1)
770
+ ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
771
+ break;
772
+ }
773
+
774
+ /* Set out_color_components and conversion method based on requested space.
775
+ * Also clear the component_needed flags for any unused components,
776
+ * so that earlier pipeline stages can avoid useless computation.
777
+ */
778
+
779
+ switch (cinfo->out_color_space) {
780
+ case JCS_GRAYSCALE:
781
+ cinfo->out_color_components = 1;
782
+ if (cinfo->jpeg_color_space == JCS_GRAYSCALE ||
783
+ cinfo->jpeg_color_space == JCS_YCbCr) {
784
+ cconvert->pub.color_convert = grayscale_convert;
785
+ /* For color->grayscale conversion, only the Y (0) component is needed */
786
+ for (ci = 1; ci < cinfo->num_components; ci++)
787
+ cinfo->comp_info[ci].component_needed = FALSE;
788
+ } else if (cinfo->jpeg_color_space == JCS_RGB) {
789
+ cconvert->pub.color_convert = rgb_gray_convert;
790
+ build_rgb_y_table(cinfo);
791
+ } else
792
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
793
+ break;
794
+
795
+ case JCS_RGB:
796
+ case JCS_EXT_RGB:
797
+ case JCS_EXT_RGBX:
798
+ case JCS_EXT_BGR:
799
+ case JCS_EXT_BGRX:
800
+ case JCS_EXT_XBGR:
801
+ case JCS_EXT_XRGB:
802
+ case JCS_EXT_RGBA:
803
+ case JCS_EXT_BGRA:
804
+ case JCS_EXT_ABGR:
805
+ case JCS_EXT_ARGB:
806
+ cinfo->out_color_components = rgb_pixelsize[cinfo->out_color_space];
807
+ if (cinfo->jpeg_color_space == JCS_YCbCr) {
808
+ if (jsimd_can_ycc_rgb())
809
+ cconvert->pub.color_convert = jsimd_ycc_rgb_convert;
810
+ else {
811
+ cconvert->pub.color_convert = ycc_rgb_convert;
812
+ build_ycc_rgb_table(cinfo);
813
+ }
814
+ } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) {
815
+ cconvert->pub.color_convert = gray_rgb_convert;
816
+ } else if (cinfo->jpeg_color_space == JCS_RGB) {
817
+ if (rgb_red[cinfo->out_color_space] == 0 &&
818
+ rgb_green[cinfo->out_color_space] == 1 &&
819
+ rgb_blue[cinfo->out_color_space] == 2 &&
820
+ rgb_pixelsize[cinfo->out_color_space] == 3)
821
+ cconvert->pub.color_convert = null_convert;
822
+ else
823
+ cconvert->pub.color_convert = rgb_rgb_convert;
824
+ } else
825
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
826
+ break;
827
+
828
+ case JCS_RGB565:
829
+ cinfo->out_color_components = 3;
830
+ if (cinfo->dither_mode == JDITHER_NONE) {
831
+ if (cinfo->jpeg_color_space == JCS_YCbCr) {
832
+ if (jsimd_can_ycc_rgb565())
833
+ cconvert->pub.color_convert = jsimd_ycc_rgb565_convert;
834
+ else {
835
+ cconvert->pub.color_convert = ycc_rgb565_convert;
836
+ build_ycc_rgb_table(cinfo);
837
+ }
838
+ } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) {
839
+ cconvert->pub.color_convert = gray_rgb565_convert;
840
+ } else if (cinfo->jpeg_color_space == JCS_RGB) {
841
+ cconvert->pub.color_convert = rgb_rgb565_convert;
842
+ } else
843
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
844
+ } else {
845
+ /* only ordered dithering is supported */
846
+ if (cinfo->jpeg_color_space == JCS_YCbCr) {
847
+ cconvert->pub.color_convert = ycc_rgb565D_convert;
848
+ build_ycc_rgb_table(cinfo);
849
+ } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) {
850
+ cconvert->pub.color_convert = gray_rgb565D_convert;
851
+ } else if (cinfo->jpeg_color_space == JCS_RGB) {
852
+ cconvert->pub.color_convert = rgb_rgb565D_convert;
853
+ } else
854
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
855
+ }
856
+ break;
857
+
858
+ case JCS_CMYK:
859
+ cinfo->out_color_components = 4;
860
+ if (cinfo->jpeg_color_space == JCS_YCCK) {
861
+ cconvert->pub.color_convert = ycck_cmyk_convert;
862
+ build_ycc_rgb_table(cinfo);
863
+ } else if (cinfo->jpeg_color_space == JCS_CMYK) {
864
+ cconvert->pub.color_convert = null_convert;
865
+ } else
866
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
867
+ break;
868
+
869
+ default:
870
+ /* Permit null conversion to same output space */
871
+ if (cinfo->out_color_space == cinfo->jpeg_color_space) {
872
+ cinfo->out_color_components = cinfo->num_components;
873
+ cconvert->pub.color_convert = null_convert;
874
+ } else /* unsupported non-null conversion */
875
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
876
+ break;
877
+ }
878
+
879
+ if (cinfo->quantize_colors)
880
+ cinfo->output_components = 1; /* single colormapped output component */
881
+ else
882
+ cinfo->output_components = cinfo->out_color_components;
883
+ }