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,1494 @@
1
+ 2.0.4
2
+ =====
3
+
4
+ ### Significant changes relative to 2.0.3:
5
+
6
+ 1. Fixed a regression in the Windows packaging system (introduced by
7
+ 2.0 beta1[2]) whereby, if both the 64-bit libjpeg-turbo SDK for GCC and the
8
+ 64-bit libjpeg-turbo SDK for Visual C++ were installed on the same system, only
9
+ one of them could be uninstalled.
10
+
11
+ 2. Fixed a signed integer overflow and subsequent segfault that occurred when
12
+ attempting to decompress images with more than 715827882 pixels using the
13
+ 64-bit C version of TJBench.
14
+
15
+ 3. Fixed out-of-bounds write in `tjDecompressToYUV2()` and
16
+ `tjDecompressToYUVPlanes()` (sometimes manifesting as a double free) that
17
+ occurred when attempting to decompress grayscale JPEG images that were
18
+ compressed with a sampling factor other than 1 (for instance, with
19
+ `cjpeg -grayscale -sample 2x2`).
20
+
21
+ 4. Fixed a regression introduced by 2.0.2[5] that caused the TurboJPEG API to
22
+ incorrectly identify some JPEG images with unusual sampling factors as 4:4:4
23
+ JPEG images. This was known to cause a buffer overflow when attempting to
24
+ decompress some such images using `tjDecompressToYUV2()` or
25
+ `tjDecompressToYUVPlanes()`.
26
+
27
+ 5. Fixed an issue, detected by ASan, whereby attempting to losslessly transform
28
+ a specially-crafted malformed JPEG image containing an extremely-high-frequency
29
+ coefficient block (junk image data that could never be generated by a
30
+ legitimate JPEG compressor) could cause the Huffman encoder's local buffer to
31
+ be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that the buffer
32
+ overrun was fully contained within the stack and did not cause a segfault or
33
+ other user-visible errant behavior, and given that the lossless transformer
34
+ (unlike the decompressor) is not generally exposed to arbitrary data exploits,
35
+ this issue did not likely pose a security risk.
36
+
37
+ 6. The ARM 64-bit (ARMv8) NEON SIMD assembly code now stores constants in a
38
+ separate read-only data section rather than in the text section, to support
39
+ execute-only memory layouts.
40
+
41
+
42
+ 2.0.3
43
+ =====
44
+
45
+ ### Significant changes relative to 2.0.2:
46
+
47
+ 1. Fixed "using JNI after critical get" errors that occurred on Android
48
+ platforms when passing invalid arguments to certain methods in the TurboJPEG
49
+ Java API.
50
+
51
+ 2. Fixed a regression in the SIMD feature detection code, introduced by
52
+ the AVX2 SIMD extensions (2.0 beta1[1]), that was known to cause an illegal
53
+ instruction exception, in rare cases, on CPUs that lack support for CPUID leaf
54
+ 07H (or on which the maximum CPUID leaf has been limited by way of a BIOS
55
+ setting.)
56
+
57
+ 3. The 4:4:0 (h1v2) fancy (smooth) chroma upsampling algorithm in the
58
+ decompressor now uses a similar bias pattern to that of the 4:2:2 (h2v1) fancy
59
+ chroma upsampling algorithm, rounding up or down the upsampled result for
60
+ alternate pixels rather than always rounding down. This ensures that,
61
+ regardless of whether a 4:2:2 JPEG image is rotated or transposed prior to
62
+ decompression (in the frequency domain) or after decompression (in the spatial
63
+ domain), the final image will be similar.
64
+
65
+ 4. Fixed an integer overflow and subsequent segfault that occurred when
66
+ attempting to compress or decompress images with more than 1 billion pixels
67
+ using the TurboJPEG API.
68
+
69
+ 5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
70
+ generate a progressive JPEG image on an SSE2-capable CPU using a scan script
71
+ containing one or more scans with lengths divisible by 16 would result in an
72
+ error ("Missing Huffman code table entry") and an invalid JPEG image.
73
+
74
+ 6. Fixed an issue whereby `tjDecodeYUV()` and `tjDecodeYUVPlanes()` would throw
75
+ an error ("Invalid progressive parameters") or a warning ("Inconsistent
76
+ progression sequence") if passed a TurboJPEG instance that was previously used
77
+ to decompress a progressive JPEG image.
78
+
79
+
80
+ 2.0.2
81
+ =====
82
+
83
+ ### Significant changes relative to 2.0.1:
84
+
85
+ 1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search
86
+ path (rpath) from being embedded in the libjpeg-turbo shared libraries and
87
+ executables for macOS and iOS. This caused a fatal error of the form
88
+ "dyld: Library not loaded" when attempting to use one of the executables,
89
+ unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the
90
+ libjpeg-turbo shared libraries.
91
+
92
+ 2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that
93
+ occurred when attempting to load a BMP file with more than 1 billion pixels
94
+ using the `tjLoadImage()` function.
95
+
96
+ 3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to
97
+ decompress a specially-crafted malformed JPEG image to a 256-color BMP using
98
+ djpeg.
99
+
100
+ 4. Fixed a floating point exception that occurred when attempting to
101
+ decompress a specially-crafted malformed JPEG image with a specified image
102
+ width or height of 0 using the C version of TJBench.
103
+
104
+ 5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1,
105
+ or 1x3 luminance and chrominance sampling factors. This is a non-standard way
106
+ of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
107
+ chrominance sampling factors), but the JPEG format and the libjpeg API both
108
+ allow it.
109
+
110
+ 6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate
111
+ incorrect PPM images when used with the `-colors` option.
112
+
113
+ 7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which
114
+ `ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE.
115
+
116
+ 8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that
117
+ occurred when compressing RGB images whose image rows were not 64-bit-aligned.
118
+
119
+
120
+ 2.0.1
121
+ =====
122
+
123
+ ### Significant changes relative to 2.0.0:
124
+
125
+ 1. Fixed a regression introduced with the new CMake-based Un*x build system,
126
+ whereby jconfig.h could cause compiler warnings of the form
127
+ `"HAVE_*_H" redefined` if it was included by downstream Autotools-based
128
+ projects that used `AC_CHECK_HEADERS()` to check for the existence of locale.h,
129
+ stddef.h, or stdlib.h.
130
+
131
+ 2. The `jsimd_quantize_float_dspr2()` and `jsimd_convsamp_float_dspr2()`
132
+ functions in the MIPS DSPr2 SIMD extensions are now disabled at compile time
133
+ if the soft float ABI is enabled. Those functions use instructions that are
134
+ incompatible with the soft float ABI.
135
+
136
+ 3. Fixed a regression in the SIMD feature detection code, introduced by
137
+ the AVX2 SIMD extensions (2.0 beta1[1]), that caused libjpeg-turbo to crash on
138
+ Windows 7 if Service Pack 1 was not installed.
139
+
140
+ 4. Fixed out-of-bounds read in cjpeg that occurred when attempting to compress
141
+ a specially-crafted malformed color-index (8-bit-per-sample) Targa file in
142
+ which some of the samples (color indices) exceeded the bounds of the Targa
143
+ file's color table.
144
+
145
+ 5. Fixed an issue whereby installing a fully static build of libjpeg-turbo
146
+ (a build in which `CFLAGS` contains `-static` and `ENABLE_SHARED` is `0`) would
147
+ fail with "No valid ELF RPATH or RUNPATH entry exists in the file."
148
+
149
+
150
+ 2.0.0
151
+ =====
152
+
153
+ ### Significant changes relative to 2.0 beta1:
154
+
155
+ 1. The TurboJPEG API can now decompress CMYK JPEG images that have subsampled M
156
+ and Y components (not to be confused with YCCK JPEG images, in which the C/M/Y
157
+ components have been transformed into luma and chroma.) Previously, an error
158
+ was generated ("Could not determine subsampling type for JPEG image") when such
159
+ an image was passed to `tjDecompressHeader3()`, `tjTransform()`,
160
+ `tjDecompressToYUVPlanes()`, `tjDecompressToYUV2()`, or the equivalent Java
161
+ methods.
162
+
163
+ 2. Fixed an issue (CVE-2018-11813) whereby a specially-crafted malformed input
164
+ file (specifically, a file with a valid Targa header but incomplete pixel data)
165
+ would cause cjpeg to generate a JPEG file that was potentially thousands of
166
+ times larger than the input file. The Targa reader in cjpeg was not properly
167
+ detecting that the end of the input file had been reached prematurely, so after
168
+ all valid pixels had been read from the input, the reader injected dummy pixels
169
+ with values of 255 into the JPEG compressor until the number of pixels
170
+ specified in the Targa header had been compressed. The Targa reader in cjpeg
171
+ now behaves like the PPM reader and aborts compression if the end of the input
172
+ file is reached prematurely. Because this issue only affected cjpeg and not
173
+ the underlying library, and because it did not involve any out-of-bounds reads
174
+ or other exploitable behaviors, it was not believed to represent a security
175
+ threat.
176
+
177
+ 3. Fixed an issue whereby the `tjLoadImage()` and `tjSaveImage()` functions
178
+ would produce a "Bogus message code" error message if the underlying bitmap and
179
+ PPM readers/writers threw an error that was specific to the readers/writers
180
+ (as opposed to a general libjpeg API error.)
181
+
182
+ 4. Fixed an issue (CVE-2018-1152) whereby a specially-crafted malformed BMP
183
+ file, one in which the header specified an image width of 1073741824 pixels,
184
+ would trigger a floating point exception (division by zero) in the
185
+ `tjLoadImage()` function when attempting to load the BMP file into a
186
+ 4-component image buffer.
187
+
188
+ 5. Fixed an issue whereby certain combinations of calls to
189
+ `jpeg_skip_scanlines()` and `jpeg_read_scanlines()` could trigger an infinite
190
+ loop when decompressing progressive JPEG images that use vertical chroma
191
+ subsampling (for instance, 4:2:0 or 4:4:0.)
192
+
193
+ 6. Fixed a segfault in `jpeg_skip_scanlines()` that occurred when decompressing
194
+ a 4:2:2 or 4:2:0 JPEG image using the merged (non-fancy) upsampling algorithms
195
+ (that is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.)
196
+
197
+ 7. The new CMake-based build system will now disable the MIPS DSPr2 SIMD
198
+ extensions if it detects that the compiler does not support DSPr2 instructions.
199
+
200
+ 8. Fixed out-of-bounds read in cjpeg (CVE-2018-14498) that occurred when
201
+ attempting to compress a specially-crafted malformed color-index
202
+ (8-bit-per-sample) BMP file in which some of the samples (color indices)
203
+ exceeded the bounds of the BMP file's color table.
204
+
205
+ 9. Fixed a signed integer overflow in the progressive Huffman decoder, detected
206
+ by the Clang and GCC undefined behavior sanitizers, that could be triggered by
207
+ attempting to decompress a specially-crafted malformed JPEG image. This issue
208
+ did not pose a security threat, but removing the warning made it easier to
209
+ detect actual security issues, should they arise in the future.
210
+
211
+
212
+ 1.5.90 (2.0 beta1)
213
+ ==================
214
+
215
+ ### Significant changes relative to 1.5.3:
216
+
217
+ 1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
218
+ downsampling and upsampling, integer quantization and sample conversion, and
219
+ slow integer DCT/IDCT algorithms. When using the slow integer DCT/IDCT
220
+ algorithms on AVX2-equipped CPUs, the compression of RGB images is
221
+ approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
222
+ 64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
223
+ decompression of RGB images is approximately 9-35% (avg. 17%) faster with
224
+ 64-bit code and 7-17% (avg. 12%) faster with 32-bit code. (As tested on a
225
+ 3 GHz Intel Core i7. Actual mileage may vary.)
226
+
227
+ 2. Overhauled the build system to use CMake on all platforms, and removed the
228
+ autotools-based build system. This decision resulted from extensive
229
+ discussions within the libjpeg-turbo community. libjpeg-turbo traditionally
230
+ used CMake only for Windows builds, but there was an increasing amount of
231
+ demand to extend CMake support to other platforms. However, because of the
232
+ unique nature of our code base (the need to support different assemblers on
233
+ each platform, the need for Java support, etc.), providing dual build systems
234
+ as other OSS imaging libraries do (including libpng and libtiff) would have
235
+ created a maintenance burden. The use of CMake greatly simplifies some aspects
236
+ of our build system, owing to CMake's built-in support for various assemblers,
237
+ Java, and unit testing, as well as generally fewer quirks that have to be
238
+ worked around in order to implement our packaging system. Eliminating
239
+ autotools puts our project slightly at odds with the traditional practices of
240
+ the OSS community, since most "system libraries" tend to be built with
241
+ autotools, but it is believed that the benefits of this move outweigh the
242
+ risks. In addition to providing a unified build environment, switching to
243
+ CMake allows for the use of various build tools and IDEs that aren't supported
244
+ under autotools, including XCode, Ninja, and Eclipse. It also eliminates the
245
+ need to install autotools via MacPorts/Homebrew on OS X and allows
246
+ libjpeg-turbo to be configured without the use of a terminal/command prompt.
247
+ Extensive testing was conducted to ensure that all features provided by the
248
+ autotools-based build system are provided by the new build system.
249
+
250
+ 3. The libjpeg API in this version of libjpeg-turbo now includes two additional
251
+ functions, `jpeg_read_icc_profile()` and `jpeg_write_icc_profile()`, that can
252
+ be used to extract ICC profile data from a JPEG file while decompressing or to
253
+ embed ICC profile data in a JPEG file while compressing or transforming. This
254
+ eliminates the need for downstream projects, such as color management libraries
255
+ and browsers, to include their own glueware for accomplishing this.
256
+
257
+ 4. Improved error handling in the TurboJPEG API library:
258
+
259
+ - Introduced a new function (`tjGetErrorStr2()`) in the TurboJPEG C API
260
+ that allows compression/decompression/transform error messages to be retrieved
261
+ in a thread-safe manner. Retrieving error messages from global functions, such
262
+ as `tjInitCompress()` or `tjBufSize()`, is still thread-unsafe, but since those
263
+ functions will only throw errors if passed an invalid argument or if a memory
264
+ allocation failure occurs, thread safety is not as much of a concern.
265
+ - Introduced a new function (`tjGetErrorCode()`) in the TurboJPEG C API
266
+ and a new method (`TJException.getErrorCode()`) in the TurboJPEG Java API that
267
+ can be used to determine the severity of the last
268
+ compression/decompression/transform error. This allows applications to
269
+ choose whether to ignore warnings (non-fatal errors) from the underlying
270
+ libjpeg API or to treat them as fatal.
271
+ - Introduced a new flag (`TJFLAG_STOPONWARNING` in the TurboJPEG C API and
272
+ `TJ.FLAG_STOPONWARNING` in the TurboJPEG Java API) that causes the library to
273
+ immediately halt a compression/decompression/transform operation if it
274
+ encounters a warning from the underlying libjpeg API (the default behavior is
275
+ to allow the operation to complete unless a fatal error is encountered.)
276
+
277
+ 5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIVE`
278
+ and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
279
+ progressive entropy coding in JPEG images generated by compression and
280
+ transform operations. Additionally, a new transform option
281
+ (`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in the
282
+ Java API) has been introduced, allowing progressive entropy coding to be
283
+ enabled for selected transforms in a multi-transform operation.
284
+
285
+ 6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE` in
286
+ the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
287
+ copying of markers (including EXIF and ICC profile data) to be disabled for a
288
+ particular transform.
289
+
290
+ 7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
291
+ `tjSaveImage()`) that can be used to load/save a BMP or PPM/PGM image to/from a
292
+ memory buffer with a specified pixel format and layout. These functions
293
+ replace the project-private (and slow) bmp API, which was previously used by
294
+ TJBench, and they also provide a convenient way for first-time users of
295
+ libjpeg-turbo to quickly develop a complete JPEG compression/decompression
296
+ program.
297
+
298
+ 8. The TurboJPEG C API now includes a new convenience array (`tjAlphaOffset[]`)
299
+ that contains the alpha component index for each pixel format (or -1 if the
300
+ pixel format lacks an alpha component.) The TurboJPEG Java API now includes a
301
+ new method (`TJ.getAlphaOffset()`) that returns the same value. In addition,
302
+ the `tjRedOffset[]`, `tjGreenOffset[]`, and `tjBlueOffset[]` arrays-- and the
303
+ corresponding `TJ.getRedOffset()`, `TJ.getGreenOffset()`, and
304
+ `TJ.getBlueOffset()` methods-- now return -1 for `TJPF_GRAY`/`TJ.PF_GRAY`
305
+ rather than 0. This allows programs to easily determine whether a pixel format
306
+ has red, green, blue, and alpha components.
307
+
308
+ 9. Added a new example (tjexample.c) that demonstrates the basic usage of the
309
+ TurboJPEG C API. This example mirrors the functionality of TJExample.java.
310
+ Both files are now included in the libjpeg-turbo documentation.
311
+
312
+ 10. Fixed two signed integer overflows in the arithmetic decoder, detected by
313
+ the Clang undefined behavior sanitizer, that could be triggered by attempting
314
+ to decompress a specially-crafted malformed JPEG image. These issues did not
315
+ pose a security threat, but removing the warnings makes it easier to detect
316
+ actual security issues, should they arise in the future.
317
+
318
+ 11. Fixed a bug in the merged 4:2:0 upsampling/dithered RGB565 color conversion
319
+ algorithm that caused incorrect dithering in the output image. This algorithm
320
+ now produces bitwise-identical results to the unmerged algorithms.
321
+
322
+ 12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
323
+ libjpeg-turbo is built with YASM), and iOS/ARM[64] builds are now private.
324
+ This prevents those symbols from being exposed in applications or shared
325
+ libraries that link statically with libjpeg-turbo.
326
+
327
+ 13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
328
+ YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
329
+ chroma upsampling, integer quantization, and slow integer DCT/IDCT algorithms.
330
+ When using the slow integer DCT/IDCT, this speeds up the compression of RGB
331
+ images by approximately 70-100% and the decompression of RGB images by
332
+ approximately 2-3.5x.
333
+
334
+ 14. Fixed a build error when building with older MinGW releases (regression
335
+ caused by 1.5.1[7].)
336
+
337
+ 15. Added SIMD acceleration for progressive Huffman encoding on SSE2-capable
338
+ x86 and x86-64 platforms. This speeds up the compression of full-color
339
+ progressive JPEGs by about 85-90% on average (relative to libjpeg-turbo 1.5.x)
340
+ when using modern Intel and AMD CPUs.
341
+
342
+
343
+ 1.5.3
344
+ =====
345
+
346
+ ### Significant changes relative to 1.5.2:
347
+
348
+ 1. Fixed a NullPointerException in the TurboJPEG Java wrapper that occurred
349
+ when using the YUVImage constructor that creates an instance backed by separate
350
+ image planes and allocates memory for the image planes.
351
+
352
+ 2. Fixed an issue whereby the Java version of TJUnitTest would fail when
353
+ testing BufferedImage encoding/decoding on big endian systems.
354
+
355
+ 3. Fixed a segfault in djpeg that would occur if an output format other than
356
+ PPM/PGM was selected along with the `-crop` option. The `-crop` option now
357
+ works with the GIF and Targa formats as well (unfortunately, it cannot be made
358
+ to work with the BMP and RLE formats due to the fact that those output engines
359
+ write scanlines in bottom-up order.) djpeg will now exit gracefully if an
360
+ output format other than PPM/PGM, GIF, or Targa is selected along with the
361
+ `-crop` option.
362
+
363
+ 4. Fixed an issue (CVE-2017-15232) whereby `jpeg_skip_scanlines()` would
364
+ segfault if color quantization was enabled.
365
+
366
+ 5. TJBench (both C and Java versions) will now display usage information if any
367
+ command-line argument is unrecognized. This prevents the program from silently
368
+ ignoring typos.
369
+
370
+ 6. Fixed an access violation in tjbench.exe (Windows) that occurred when the
371
+ program was used to decompress an existing JPEG image.
372
+
373
+ 7. Fixed an ArrayIndexOutOfBoundsException in the TJExample Java program that
374
+ occurred when attempting to decompress a JPEG image that had been compressed
375
+ with 4:1:1 chrominance subsampling.
376
+
377
+ 8. Fixed an issue whereby, when using `jpeg_skip_scanlines()` to skip to the
378
+ end of a single-scan (non-progressive) image, subsequent calls to
379
+ `jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
380
+ `JPEG_REACHED_EOI`.
381
+
382
+ 9. `jpeg_crop_scanlines()` now works correctly when decompressing grayscale
383
+ JPEG images that were compressed with a sampling factor other than 1 (for
384
+ instance, with `cjpeg -grayscale -sample 2x2`).
385
+
386
+
387
+ 1.5.2
388
+ =====
389
+
390
+ ### Significant changes relative to 1.5.1:
391
+
392
+ 1. Fixed a regression introduced by 1.5.1[7] that prevented libjpeg-turbo from
393
+ building with Android NDK platforms prior to android-21 (5.0).
394
+
395
+ 2. Fixed a regression introduced by 1.5.1[1] that prevented the MIPS DSPR2 SIMD
396
+ code in libjpeg-turbo from building.
397
+
398
+ 3. Fixed a regression introduced by 1.5 beta1[11] that prevented the Java
399
+ version of TJBench from outputting any reference images (the `-nowrite` switch
400
+ was accidentally enabled by default.)
401
+
402
+ 4. libjpeg-turbo should now build and run with full AltiVec SIMD acceleration
403
+ on PowerPC-based AmigaOS 4 and OpenBSD systems.
404
+
405
+ 5. Fixed build and runtime errors on Windows that occurred when building
406
+ libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
407
+ source/destination managers. Due to an oversight, the `jpeg_skip_scanlines()`
408
+ and `jpeg_crop_scanlines()` functions were not being included in jpeg7.dll when
409
+ libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.
410
+
411
+ 6. Fixed "Bogus virtual array access" error that occurred when using the
412
+ lossless crop feature in jpegtran or the TurboJPEG API, if libjpeg-turbo was
413
+ built with libjpeg v7 API/ABI emulation. This was apparently a long-standing
414
+ bug that has existed since the introduction of libjpeg v7/v8 API/ABI emulation
415
+ in libjpeg-turbo v1.1.
416
+
417
+ 7. The lossless transform features in jpegtran and the TurboJPEG API will now
418
+ always attempt to adjust the EXIF image width and height tags if the image size
419
+ changed as a result of the transform. This behavior has always existed when
420
+ using libjpeg v8 API/ABI emulation. It was supposed to be available with
421
+ libjpeg v7 API/ABI emulation as well but did not work properly due to a bug.
422
+ Furthermore, there was never any good reason not to enable it with libjpeg v6b
423
+ API/ABI emulation, since the behavior is entirely internal. Note that
424
+ `-copy all` must be passed to jpegtran in order to transfer the EXIF tags from
425
+ the source image to the destination image.
426
+
427
+ 8. Fixed several memory leaks in the TurboJPEG API library that could occur
428
+ if the library was built with certain compilers and optimization levels
429
+ (known to occur with GCC 4.x and clang with `-O1` and higher but not with
430
+ GCC 5.x or 6.x) and one of the underlying libjpeg API functions threw an error
431
+ after a TurboJPEG API function allocated a local buffer.
432
+
433
+ 9. The libjpeg-turbo memory manager will now honor the `max_memory_to_use`
434
+ structure member in jpeg\_memory\_mgr, which can be set to the maximum amount
435
+ of memory (in bytes) that libjpeg-turbo should use during decompression or
436
+ multi-pass (including progressive) compression. This limit can also be set
437
+ using the `JPEGMEM` environment variable or using the `-maxmemory` switch in
438
+ cjpeg/djpeg/jpegtran (refer to the respective man pages for more details.)
439
+ This has been a documented feature of libjpeg since v5, but the
440
+ `malloc()`/`free()` implementation of the memory manager (jmemnobs.c) never
441
+ implemented the feature. Restricting libjpeg-turbo's memory usage is useful
442
+ for two reasons: it allows testers to more easily work around the 2 GB limit
443
+ in libFuzzer, and it allows developers of security-sensitive applications to
444
+ more easily defend against one of the progressive JPEG exploits (LJT-01-004)
445
+ identified in
446
+ [this report](http://www.libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
447
+
448
+ 10. TJBench will now run each benchmark for 1 second prior to starting the
449
+ timer, in order to improve the consistency of the results. Furthermore, the
450
+ `-warmup` option is now used to specify the amount of warmup time rather than
451
+ the number of warmup iterations.
452
+
453
+ 11. Fixed an error (`short jump is out of range`) that occurred when assembling
454
+ the 32-bit x86 SIMD extensions with NASM versions prior to 2.04. This was a
455
+ regression introduced by 1.5 beta1[12].
456
+
457
+
458
+ 1.5.1
459
+ =====
460
+
461
+ ### Significant changes relative to 1.5.0:
462
+
463
+ 1. Previously, the undocumented `JSIMD_FORCE*` environment variables could be
464
+ used to force-enable a particular SIMD instruction set if multiple instruction
465
+ sets were available on a particular platform. On x86 platforms, where CPU
466
+ feature detection is bulletproof and multiple SIMD instruction sets are
467
+ available, it makes sense for those environment variables to allow forcing the
468
+ use of an instruction set only if that instruction set is available. However,
469
+ since the ARM implementations of libjpeg-turbo can only use one SIMD
470
+ instruction set, and since their feature detection code is less bulletproof
471
+ (parsing /proc/cpuinfo), it makes sense for the `JSIMD_FORCENEON` environment
472
+ variable to bypass the feature detection code and really force the use of NEON
473
+ instructions. A new environment variable (`JSIMD_FORCEDSPR2`) was introduced
474
+ in the MIPS implementation for the same reasons, and the existing
475
+ `JSIMD_FORCENONE` environment variable was extended to that implementation.
476
+ These environment variables provide a workaround for those attempting to test
477
+ ARM and MIPS builds of libjpeg-turbo in QEMU, which passes through
478
+ /proc/cpuinfo from the host system.
479
+
480
+ 2. libjpeg-turbo previously assumed that AltiVec instructions were always
481
+ available on PowerPC platforms, which led to "illegal instruction" errors when
482
+ running on PowerPC chips that lack AltiVec support (such as the older 7xx/G3
483
+ and newer e5500 series.) libjpeg-turbo now examines /proc/cpuinfo on
484
+ Linux/Android systems and enables AltiVec instructions only if the CPU supports
485
+ them. It also now provides two environment variables, `JSIMD_FORCEALTIVEC` and
486
+ `JSIMD_FORCENONE`, to force-enable and force-disable AltiVec instructions in
487
+ environments where /proc/cpuinfo is an unreliable means of CPU feature
488
+ detection (such as when running in QEMU.) On OS X, libjpeg-turbo continues to
489
+ assume that AltiVec support is always available, which means that libjpeg-turbo
490
+ cannot be used with G3 Macs unless you set the environment variable
491
+ `JSIMD_FORCENONE` to `1`.
492
+
493
+ 3. Fixed an issue whereby 64-bit ARM (AArch64) builds of libjpeg-turbo would
494
+ crash when built with recent releases of the Clang/LLVM compiler. This was
495
+ caused by an ABI conformance issue in some of libjpeg-turbo's 64-bit NEON SIMD
496
+ routines. Those routines were incorrectly using 64-bit instructions to
497
+ transfer a 32-bit JDIMENSION argument, whereas the ABI allows the upper
498
+ (unused) 32 bits of a 32-bit argument's register to be undefined. The new
499
+ Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
500
+ structure members into a single 64-bit register, and this exposed the ABI
501
+ conformance issue.
502
+
503
+ 4. Fancy upsampling is now supported when decompressing JPEG images that use
504
+ 4:4:0 (h1v2) chroma subsampling. These images are generated when losslessly
505
+ rotating or transposing JPEG images that use 4:2:2 (h2v1) chroma subsampling.
506
+ The h1v2 fancy upsampling algorithm is not currently SIMD-accelerated.
507
+
508
+ 5. If merged upsampling isn't SIMD-accelerated but YCbCr-to-RGB conversion is,
509
+ then libjpeg-turbo will now disable merged upsampling when decompressing YCbCr
510
+ JPEG images into RGB or extended RGB output images. This significantly speeds
511
+ up the decompression of 4:2:0 and 4:2:2 JPEGs on ARM platforms if fancy
512
+ upsampling is not used (for example, if the `-nosmooth` option to djpeg is
513
+ specified.)
514
+
515
+ 6. The TurboJPEG API will now decompress 4:2:2 and 4:4:0 JPEG images with
516
+ 2x2 luminance sampling factors and 2x1 or 1x2 chrominance sampling factors.
517
+ This is a non-standard way of specifying 2x subsampling (normally 4:2:2 JPEGs
518
+ have 2x1 luminance and 1x1 chrominance sampling factors, and 4:4:0 JPEGs have
519
+ 1x2 luminance and 1x1 chrominance sampling factors), but the JPEG format and
520
+ the libjpeg API both allow it.
521
+
522
+ 7. Fixed an unsigned integer overflow in the libjpeg memory manager, detected
523
+ by the Clang undefined behavior sanitizer, that could be triggered by
524
+ attempting to decompress a specially-crafted malformed JPEG image. This issue
525
+ affected only 32-bit code and did not pose a security threat, but removing the
526
+ warning makes it easier to detect actual security issues, should they arise in
527
+ the future.
528
+
529
+ 8. Fixed additional negative left shifts and other issues reported by the GCC
530
+ and Clang undefined behavior sanitizers when attempting to decompress
531
+ specially-crafted malformed JPEG images. None of these issues posed a security
532
+ threat, but removing the warnings makes it easier to detect actual security
533
+ issues, should they arise in the future.
534
+
535
+ 9. Fixed an out-of-bounds array reference, introduced by 1.4.90[2] (partial
536
+ image decompression) and detected by the Clang undefined behavior sanitizer,
537
+ that could be triggered by a specially-crafted malformed JPEG image with more
538
+ than four components. Because the out-of-bounds reference was still within the
539
+ same structure, it was not known to pose a security threat, but removing the
540
+ warning makes it easier to detect actual security issues, should they arise in
541
+ the future.
542
+
543
+ 10. Fixed another ABI conformance issue in the 64-bit ARM (AArch64) NEON SIMD
544
+ code. Some of the routines were incorrectly reading and storing data below the
545
+ stack pointer, which caused segfaults in certain applications under specific
546
+ circumstances.
547
+
548
+
549
+ 1.5.0
550
+ =====
551
+
552
+ ### Significant changes relative to 1.5 beta1:
553
+
554
+ 1. Fixed an issue whereby a malformed motion-JPEG frame could cause the "fast
555
+ path" of libjpeg-turbo's Huffman decoder to read from uninitialized memory.
556
+
557
+ 2. Added libjpeg-turbo version and build information to the global string table
558
+ of the libjpeg and TurboJPEG API libraries. This is a common practice in other
559
+ infrastructure libraries, such as OpenSSL and libpng, because it makes it easy
560
+ to examine an application binary and determine which version of the library the
561
+ application was linked against.
562
+
563
+ 3. Fixed a couple of issues in the PPM reader that would cause buffer overruns
564
+ in cjpeg if one of the values in a binary PPM/PGM input file exceeded the
565
+ maximum value defined in the file's header. libjpeg-turbo 1.4.2 already
566
+ included a similar fix for ASCII PPM/PGM files. Note that these issues were
567
+ not security bugs, since they were confined to the cjpeg program and did not
568
+ affect any of the libjpeg-turbo libraries.
569
+
570
+ 4. Fixed an issue whereby attempting to decompress a JPEG file with a corrupt
571
+ header using the `tjDecompressToYUV2()` function would cause the function to
572
+ abort without returning an error and, under certain circumstances, corrupt the
573
+ stack. This only occurred if `tjDecompressToYUV2()` was called prior to
574
+ calling `tjDecompressHeader3()`, or if the return value from
575
+ `tjDecompressHeader3()` was ignored (both cases represent incorrect usage of
576
+ the TurboJPEG API.)
577
+
578
+ 5. Fixed an issue in the ARM 32-bit SIMD-accelerated Huffman encoder that
579
+ prevented the code from assembling properly with clang.
580
+
581
+ 6. The `jpeg_stdio_src()`, `jpeg_mem_src()`, `jpeg_stdio_dest()`, and
582
+ `jpeg_mem_dest()` functions in the libjpeg API will now throw an error if a
583
+ source/destination manager has already been assigned to the compress or
584
+ decompress object by a different function or by the calling program. This
585
+ prevents these functions from attempting to reuse a source/destination manager
586
+ structure that was allocated elsewhere, because there is no way to ensure that
587
+ it would be big enough to accommodate the new source/destination manager.
588
+
589
+
590
+ 1.4.90 (1.5 beta1)
591
+ ==================
592
+
593
+ ### Significant changes relative to 1.4.2:
594
+
595
+ 1. Added full SIMD acceleration for PowerPC platforms using AltiVec VMX
596
+ (128-bit SIMD) instructions. Although the performance of libjpeg-turbo on
597
+ PowerPC was already good, due to the increased number of registers available
598
+ to the compiler vs. x86, it was still possible to speed up compression by about
599
+ 3-4x and decompression by about 2-2.5x (relative to libjpeg v6b) through the
600
+ use of AltiVec instructions.
601
+
602
+ 2. Added two new libjpeg API functions (`jpeg_skip_scanlines()` and
603
+ `jpeg_crop_scanline()`) that can be used to partially decode a JPEG image. See
604
+ [libjpeg.txt](libjpeg.txt) for more details.
605
+
606
+ 3. The TJCompressor and TJDecompressor classes in the TurboJPEG Java API now
607
+ implement the Closeable interface, so those classes can be used with a
608
+ try-with-resources statement.
609
+
610
+ 4. The TurboJPEG Java classes now throw unchecked idiomatic exceptions
611
+ (IllegalArgumentException, IllegalStateException) for unrecoverable errors
612
+ caused by incorrect API usage, and those classes throw a new checked exception
613
+ type (TJException) for errors that are passed through from the C library.
614
+
615
+ 5. Source buffers for the TurboJPEG C API functions, as well as the
616
+ `jpeg_mem_src()` function in the libjpeg API, are now declared as const
617
+ pointers. This facilitates passing read-only buffers to those functions and
618
+ ensures the caller that the source buffer will not be modified. This should
619
+ not create any backward API or ABI incompatibilities with prior libjpeg-turbo
620
+ releases.
621
+
622
+ 6. The MIPS DSPr2 SIMD code can now be compiled to support either FR=0 or FR=1
623
+ FPUs.
624
+
625
+ 7. Fixed additional negative left shifts and other issues reported by the GCC
626
+ and Clang undefined behavior sanitizers. Most of these issues affected only
627
+ 32-bit code, and none of them was known to pose a security threat, but removing
628
+ the warnings makes it easier to detect actual security issues, should they
629
+ arise in the future.
630
+
631
+ 8. Removed the unnecessary `.arch` directive from the ARM64 NEON SIMD code.
632
+ This directive was preventing the code from assembling using the clang
633
+ integrated assembler.
634
+
635
+ 9. Fixed a regression caused by 1.4.1[6] that prevented 32-bit and 64-bit
636
+ libjpeg-turbo RPMs from being installed simultaneously on recent Red Hat/Fedora
637
+ distributions. This was due to the addition of a macro in jconfig.h that
638
+ allows the Huffman codec to determine the word size at compile time. Since
639
+ that macro differs between 32-bit and 64-bit builds, this caused a conflict
640
+ between the i386 and x86_64 RPMs (any differing files, other than executables,
641
+ are not allowed when 32-bit and 64-bit RPMs are installed simultaneously.)
642
+ Since the macro is used only internally, it has been moved into jconfigint.h.
643
+
644
+ 10. The x86-64 SIMD code can now be disabled at run time by setting the
645
+ `JSIMD_FORCENONE` environment variable to `1` (the other SIMD implementations
646
+ already had this capability.)
647
+
648
+ 11. Added a new command-line argument to TJBench (`-nowrite`) that prevents the
649
+ benchmark from outputting any images. This removes any potential operating
650
+ system overhead that might be caused by lazy writes to disk and thus improves
651
+ the consistency of the performance measurements.
652
+
653
+ 12. Added SIMD acceleration for Huffman encoding on SSE2-capable x86 and x86-64
654
+ platforms. This speeds up the compression of full-color JPEGs by about 10-15%
655
+ on average (relative to libjpeg-turbo 1.4.x) when using modern Intel and AMD
656
+ CPUs. Additionally, this works around an issue in the clang optimizer that
657
+ prevents it (as of this writing) from achieving the same performance as GCC
658
+ when compiling the C version of the Huffman encoder
659
+ (<https://llvm.org/bugs/show_bug.cgi?id=16035>). For the purposes of
660
+ benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
661
+ disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
662
+
663
+ 13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
664
+ compression algorithms (including the slow integer forward DCT and h2v2 & h2v1
665
+ downsampling algorithms, which are not accelerated in the 32-bit NEON
666
+ implementation.) This speeds up the compression of full-color JPEGs by about
667
+ 75% on average on a Cavium ThunderX processor and by about 2-2.5x on average on
668
+ Cortex-A53 and Cortex-A57 cores.
669
+
670
+ 14. Added SIMD acceleration for Huffman encoding on NEON-capable ARM 32-bit
671
+ and 64-bit platforms.
672
+
673
+ For 32-bit code, this speeds up the compression of full-color JPEGs by
674
+ about 30% on average on a typical iOS device (iPhone 4S, Cortex-A9) and by
675
+ about 6-7% on average on a typical Android device (Nexus 5X, Cortex-A53 and
676
+ Cortex-A57), relative to libjpeg-turbo 1.4.x. Note that the larger speedup
677
+ under iOS is due to the fact that iOS builds use LLVM, which does not optimize
678
+ the C Huffman encoder as well as GCC does.
679
+
680
+ For 64-bit code, NEON-accelerated Huffman encoding speeds up the
681
+ compression of full-color JPEGs by about 40% on average on a typical iOS device
682
+ (iPhone 5S, Apple A7) and by about 7-8% on average on a typical Android device
683
+ (Nexus 5X, Cortex-A53 and Cortex-A57), in addition to the speedup described in
684
+ [13] above.
685
+
686
+ For the purposes of benchmarking or regression testing, SIMD-accelerated
687
+ Huffman encoding can be disabled by setting the `JSIMD_NOHUFFENC` environment
688
+ variable to `1`.
689
+
690
+ 15. pkg-config (.pc) scripts are now included for both the libjpeg and
691
+ TurboJPEG API libraries on Un*x systems. Note that if a project's build system
692
+ relies on these scripts, then it will not be possible to build that project
693
+ with libjpeg or with a prior version of libjpeg-turbo.
694
+
695
+ 16. Optimized the ARM 64-bit (ARMv8) NEON SIMD decompression routines to
696
+ improve performance on CPUs with in-order pipelines. This speeds up the
697
+ decompression of full-color JPEGs by nearly 2x on average on a Cavium ThunderX
698
+ processor and by about 15% on average on a Cortex-A53 core.
699
+
700
+ 17. Fixed an issue in the accelerated Huffman decoder that could have caused
701
+ the decoder to read past the end of the input buffer when a malformed,
702
+ specially-crafted JPEG image was being decompressed. In prior versions of
703
+ libjpeg-turbo, the accelerated Huffman decoder was invoked (in most cases) only
704
+ if there were > 128 bytes of data in the input buffer. However, it is possible
705
+ to construct a JPEG image in which a single Huffman block is over 430 bytes
706
+ long, so this version of libjpeg-turbo activates the accelerated Huffman
707
+ decoder only if there are > 512 bytes of data in the input buffer.
708
+
709
+ 18. Fixed a memory leak in tjunittest encountered when running the program
710
+ with the `-yuv` option.
711
+
712
+
713
+ 1.4.2
714
+ =====
715
+
716
+ ### Significant changes relative to 1.4.1:
717
+
718
+ 1. Fixed an issue whereby cjpeg would segfault if a Windows bitmap with a
719
+ negative width or height was used as an input image (Windows bitmaps can have
720
+ a negative height if they are stored in top-down order, but such files are
721
+ rare and not supported by libjpeg-turbo.)
722
+
723
+ 2. Fixed an issue whereby, under certain circumstances, libjpeg-turbo would
724
+ incorrectly encode certain JPEG images when quality=100 and the fast integer
725
+ forward DCT were used. This was known to cause `make test` to fail when the
726
+ library was built with `-march=haswell` on x86 systems.
727
+
728
+ 3. Fixed an issue whereby libjpeg-turbo would crash when built with the latest
729
+ & greatest development version of the Clang/LLVM compiler. This was caused by
730
+ an x86-64 ABI conformance issue in some of libjpeg-turbo's 64-bit SSE2 SIMD
731
+ routines. Those routines were incorrectly using a 64-bit `mov` instruction to
732
+ transfer a 32-bit JDIMENSION argument, whereas the x86-64 ABI allows the upper
733
+ (unused) 32 bits of a 32-bit argument's register to be undefined. The new
734
+ Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
735
+ structure members into a single 64-bit register, and this exposed the ABI
736
+ conformance issue.
737
+
738
+ 4. Fixed a bug in the MIPS DSPr2 4:2:0 "plain" (non-fancy and non-merged)
739
+ upsampling routine that caused a buffer overflow (and subsequent segfault) when
740
+ decompressing a 4:2:0 JPEG image whose scaled output width was less than 16
741
+ pixels. The "plain" upsampling routines are normally only used when
742
+ decompressing a non-YCbCr JPEG image, but they are also used when decompressing
743
+ a JPEG image whose scaled output height is 1.
744
+
745
+ 5. Fixed various negative left shifts and other issues reported by the GCC and
746
+ Clang undefined behavior sanitizers. None of these was known to pose a
747
+ security threat, but removing the warnings makes it easier to detect actual
748
+ security issues, should they arise in the future.
749
+
750
+
751
+ 1.4.1
752
+ =====
753
+
754
+ ### Significant changes relative to 1.4.0:
755
+
756
+ 1. tjbench now properly handles CMYK/YCCK JPEG files. Passing an argument of
757
+ `-cmyk` (instead of, for instance, `-rgb`) will cause tjbench to internally
758
+ convert the source bitmap to CMYK prior to compression, to generate YCCK JPEG
759
+ files, and to internally convert the decompressed CMYK pixels back to RGB after
760
+ decompression (the latter is done automatically if a CMYK or YCCK JPEG is
761
+ passed to tjbench as a source image.) The CMYK<->RGB conversion operation is
762
+ not benchmarked. NOTE: The quick & dirty CMYK<->RGB conversions that tjbench
763
+ uses are suitable for testing only. Proper conversion between CMYK and RGB
764
+ requires a color management system.
765
+
766
+ 2. `make test` now performs additional bitwise regression tests using tjbench,
767
+ mainly for the purpose of testing compression from/decompression to a subregion
768
+ of a larger image buffer.
769
+
770
+ 3. `make test` no longer tests the regression of the floating point DCT/IDCT
771
+ by default, since the results of those tests can vary if the algorithms in
772
+ question are not implemented using SIMD instructions on a particular platform.
773
+ See the comments in [Makefile.am](Makefile.am) for information on how to
774
+ re-enable the tests and to specify an expected result for them based on the
775
+ particulars of your platform.
776
+
777
+ 4. The NULL color conversion routines have been significantly optimized,
778
+ which speeds up the compression of RGB and CMYK JPEGs by 5-20% when using
779
+ 64-bit code and 0-3% when using 32-bit code, and the decompression of those
780
+ images by 10-30% when using 64-bit code and 3-12% when using 32-bit code.
781
+
782
+ 5. Fixed an "illegal instruction" error that occurred when djpeg from a
783
+ SIMD-enabled libjpeg-turbo MIPS build was executed with the `-nosmooth` option
784
+ on a MIPS machine that lacked DSPr2 support. The MIPS SIMD routines for h2v1
785
+ and h2v2 merged upsampling were not properly checking for the existence of
786
+ DSPr2.
787
+
788
+ 6. Performance has been improved significantly on 64-bit non-Linux and
789
+ non-Windows platforms (generally 10-20% faster compression and 5-10% faster
790
+ decompression.) Due to an oversight, the 64-bit version of the accelerated
791
+ Huffman codec was not being compiled in when libjpeg-turbo was built on
792
+ platforms other than Windows or Linux. Oops.
793
+
794
+ 7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
795
+ builds of libjpeg-turbo to incorrectly encode a few specific test images when
796
+ quality=98, an optimized Huffman table, and the slow integer forward DCT were
797
+ used.
798
+
799
+ 8. The Windows (CMake) build system now supports building only static or only
800
+ shared libraries. This is accomplished by adding either `-DENABLE_STATIC=0` or
801
+ `-DENABLE_SHARED=0` to the CMake command line.
802
+
803
+ 9. TurboJPEG API functions will now return an error code if a warning is
804
+ triggered in the underlying libjpeg API. For instance, if a JPEG file is
805
+ corrupt, the TurboJPEG decompression functions will attempt to decompress
806
+ as much of the image as possible, but those functions will now return -1 to
807
+ indicate that the decompression was not entirely successful.
808
+
809
+ 10. Fixed a bug in the MIPS DSPr2 4:2:2 fancy upsampling routine that caused a
810
+ buffer overflow (and subsequent segfault) when decompressing a 4:2:2 JPEG image
811
+ in which the right-most MCU was 5 or 6 pixels wide.
812
+
813
+
814
+ 1.4.0
815
+ =====
816
+
817
+ ### Significant changes relative to 1.4 beta1:
818
+
819
+ 1. Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build
820
+ because OS X does not provide the `le32toh()` and `htole32()` functions.)
821
+
822
+ 2. The non-SIMD RGB565 color conversion code did not work correctly on big
823
+ endian machines. This has been fixed.
824
+
825
+ 3. Fixed an issue in `tjPlaneSizeYUV()` whereby it would erroneously return 1
826
+ instead of -1 if `componentID` was > 0 and `subsamp` was `TJSAMP_GRAY`.
827
+
828
+ 3. Fixed an issue in `tjBufSizeYUV2()` whereby it would erroneously return 0
829
+ instead of -1 if `width` was < 1.
830
+
831
+ 5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
832
+ on ARM64 platforms (see 1.4 beta1[5].)
833
+
834
+ 6. The `close()` method in the TJCompressor and TJDecompressor Java classes is
835
+ now idempotent. Previously, that method would call the native `tjDestroy()`
836
+ function even if the TurboJPEG instance had already been destroyed. This
837
+ caused an exception to be thrown during finalization, if the `close()` method
838
+ had already been called. The exception was caught, but it was still an
839
+ expensive operation.
840
+
841
+ 7. The TurboJPEG API previously generated an error (`Could not determine
842
+ subsampling type for JPEG image`) when attempting to decompress grayscale JPEG
843
+ images that were compressed with a sampling factor other than 1 (for instance,
844
+ with `cjpeg -grayscale -sample 2x2`). Subsampling technically has no meaning
845
+ with grayscale JPEGs, and thus the horizontal and vertical sampling factors
846
+ for such images are ignored by the decompressor. However, the TurboJPEG API
847
+ was being too rigid and was expecting the sampling factors to be equal to 1
848
+ before it treated the image as a grayscale JPEG.
849
+
850
+ 8. cjpeg, djpeg, and jpegtran now accept an argument of `-version`, which will
851
+ print the library version and exit.
852
+
853
+ 9. Referring to 1.4 beta1[15], another extremely rare circumstance was
854
+ discovered under which the Huffman encoder's local buffer can be overrun
855
+ when a buffered destination manager is being used and an
856
+ extremely-high-frequency block (basically junk image data) is being encoded.
857
+ Even though the Huffman local buffer was increased from 128 bytes to 136 bytes
858
+ to address the previous issue, the new issue caused even the larger buffer to
859
+ be overrun. Further analysis reveals that, in the absolute worst case (such as
860
+ setting alternating AC coefficients to 32767 and -32768 in the JPEG scanning
861
+ order), the Huffman encoder can produce encoded blocks that approach double the
862
+ size of the unencoded blocks. Thus, the Huffman local buffer was increased to
863
+ 256 bytes, which should prevent any such issue from re-occurring in the future.
864
+
865
+ 10. The new `tjPlaneSizeYUV()`, `tjPlaneWidth()`, and `tjPlaneHeight()`
866
+ functions were not actually usable on any platform except OS X and Windows,
867
+ because those functions were not included in the libturbojpeg mapfile. This
868
+ has been fixed.
869
+
870
+ 11. Restored the `JPP()`, `JMETHOD()`, and `FAR` macros in the libjpeg-turbo
871
+ header files. The `JPP()` and `JMETHOD()` macros were originally implemented
872
+ in libjpeg as a way of supporting non-ANSI compilers that lacked support for
873
+ prototype parameters. libjpeg-turbo has never supported such compilers, but
874
+ some software packages still use the macros to define their own prototypes.
875
+ Similarly, libjpeg-turbo has never supported MS-DOS and other platforms that
876
+ have far symbols, but some software packages still use the `FAR` macro. A
877
+ pretty good argument can be made that this is a bad practice on the part of the
878
+ software in question, but since this affects more than one package, it's just
879
+ easier to fix it here.
880
+
881
+ 12. Fixed issues that were preventing the ARM 64-bit SIMD code from compiling
882
+ for iOS, and included an ARMv8 architecture in all of the binaries installed by
883
+ the "official" libjpeg-turbo SDK for OS X.
884
+
885
+
886
+ 1.3.90 (1.4 beta1)
887
+ ==================
888
+
889
+ ### Significant changes relative to 1.3.1:
890
+
891
+ 1. New features in the TurboJPEG API:
892
+
893
+ - YUV planar images can now be generated with an arbitrary line padding
894
+ (previously only 4-byte padding, which was compatible with X Video, was
895
+ supported.)
896
+ - The decompress-to-YUV function has been extended to support image
897
+ scaling.
898
+ - JPEG images can now be compressed from YUV planar source images.
899
+ - YUV planar images can now be decoded into RGB or grayscale images.
900
+ - 4:1:1 subsampling is now supported. This is mainly included for
901
+ compatibility, since 4:1:1 is not fully accelerated in libjpeg-turbo and has no
902
+ significant advantages relative to 4:2:0.
903
+ - CMYK images are now supported. This feature allows CMYK source images
904
+ to be compressed to YCCK JPEGs and YCCK or CMYK JPEGs to be decompressed to
905
+ CMYK destination images. Conversion between CMYK/YCCK and RGB or YUV images is
906
+ not supported. Such conversion requires a color management system and is thus
907
+ out of scope for a codec library.
908
+ - The handling of YUV images in the Java API has been significantly
909
+ refactored and should now be much more intuitive.
910
+ - The Java API now supports encoding a YUV image from an arbitrary
911
+ position in a large image buffer.
912
+ - All of the YUV functions now have a corresponding function that operates
913
+ on separate image planes instead of a unified image buffer. This allows for
914
+ compressing/decoding from or decompressing/encoding to a subregion of a larger
915
+ YUV image. It also allows for handling YUV formats that swap the order of the
916
+ U and V planes.
917
+
918
+ 2. Added SIMD acceleration for DSPr2-capable MIPS platforms. This speeds up
919
+ the compression of full-color JPEGs by 70-80% on such platforms and
920
+ decompression by 25-35%.
921
+
922
+ 3. If an application attempts to decompress a Huffman-coded JPEG image whose
923
+ header does not contain Huffman tables, libjpeg-turbo will now insert the
924
+ default Huffman tables. In order to save space, many motion JPEG video frames
925
+ are encoded without the default Huffman tables, so these frames can now be
926
+ successfully decompressed by libjpeg-turbo without additional work on the part
927
+ of the application. An application can still override the Huffman tables, for
928
+ instance to re-use tables from a previous frame of the same video.
929
+
930
+ 4. The Mac packaging system now uses pkgbuild and productbuild rather than
931
+ PackageMaker (which is obsolete and no longer supported.) This means that
932
+ OS X 10.6 "Snow Leopard" or later must be used when packaging libjpeg-turbo,
933
+ although the packages produced can be installed on OS X 10.5 "Leopard" or
934
+ later. OS X 10.4 "Tiger" is no longer supported.
935
+
936
+ 5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
937
+ on ARM platforms rather than a lookup table. This reduces the memory footprint
938
+ by 64k, which may be important for some mobile applications. Out of four
939
+ Android devices that were tested, two demonstrated a small overall performance
940
+ loss (~3-4% on average) with ARMv6 code and a small gain (also ~3-4%) with
941
+ ARMv7 code when enabling this new feature, but the other two devices
942
+ demonstrated a significant overall performance gain with both ARMv6 and ARMv7
943
+ code (~10-20%) when enabling the feature. Actual mileage may vary.
944
+
945
+ 6. Worked around an issue with Visual C++ 2010 and later that caused incorrect
946
+ pixels to be generated when decompressing a JPEG image to a 256-color bitmap,
947
+ if compiler optimization was enabled when libjpeg-turbo was built. This caused
948
+ the regression tests to fail when doing a release build under Visual C++ 2010
949
+ and later.
950
+
951
+ 7. Improved the accuracy and performance of the non-SIMD implementation of the
952
+ floating point inverse DCT (using code borrowed from libjpeg v8a and later.)
953
+ The accuracy of this implementation now matches the accuracy of the SSE/SSE2
954
+ implementation. Note, however, that the floating point DCT/IDCT algorithms are
955
+ mainly a legacy feature. They generally do not produce significantly better
956
+ accuracy than the slow integer DCT/IDCT algorithms, and they are quite a bit
957
+ slower.
958
+
959
+ 8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
960
+ for decompressing JPEG images into RGB565 (16-bit) pixels. If dithering is not
961
+ used, then this code path is SIMD-accelerated on ARM platforms.
962
+
963
+ 9. Numerous obsolete features, such as support for non-ANSI compilers and
964
+ support for the MS-DOS memory model, were removed from the libjpeg code,
965
+ greatly improving its readability and making it easier to maintain and extend.
966
+
967
+ 10. Fixed a segfault that occurred when calling `output_message()` with
968
+ `msg_code` set to `JMSG_COPYRIGHT`.
969
+
970
+ 11. Fixed an issue whereby wrjpgcom was allowing comments longer than 65k
971
+ characters to be passed on the command line, which was causing it to generate
972
+ incorrect JPEG files.
973
+
974
+ 12. Fixed a bug in the build system that was causing the Windows version of
975
+ wrjpgcom to be built using the rdjpgcom source code.
976
+
977
+ 13. Restored 12-bit-per-component JPEG support. A 12-bit version of
978
+ libjpeg-turbo can now be built by passing an argument of `--with-12bit` to
979
+ configure (Unix) or `-DWITH_12BIT=1` to cmake (Windows.) 12-bit JPEG support
980
+ is included only for convenience. Enabling this feature disables all of the
981
+ performance features in libjpeg-turbo, as well as arithmetic coding and the
982
+ TurboJPEG API. The resulting library still contains the other libjpeg-turbo
983
+ features (such as the colorspace extensions), but in general, it performs no
984
+ faster than libjpeg v6b.
985
+
986
+ 14. Added ARM 64-bit SIMD acceleration for the YCC-to-RGB color conversion
987
+ and IDCT algorithms (both are used during JPEG decompression.) For unknown
988
+ reasons (probably related to clang), this code cannot currently be compiled for
989
+ iOS.
990
+
991
+ 15. Fixed an extremely rare bug (CVE-2014-9092) that could cause the Huffman
992
+ encoder's local buffer to overrun when a very high-frequency MCU is compressed
993
+ using quality 100 and no subsampling, and when the JPEG output buffer is being
994
+ dynamically resized by the destination manager. This issue was so rare that,
995
+ even with a test program specifically designed to make the bug occur (by
996
+ injecting random high-frequency YUV data into the compressor), it was
997
+ reproducible only once in about every 25 million iterations.
998
+
999
+ 16. Fixed an oversight in the TurboJPEG C wrapper: if any of the JPEG
1000
+ compression functions was called repeatedly with the same
1001
+ automatically-allocated destination buffer, then TurboJPEG would erroneously
1002
+ assume that the `jpegSize` parameter was equal to the size of the buffer, when
1003
+ in fact that parameter was probably equal to the size of the most recently
1004
+ compressed JPEG image. If the size of the previous JPEG image was not as large
1005
+ as the current JPEG image, then TurboJPEG would unnecessarily reallocate the
1006
+ destination buffer.
1007
+
1008
+
1009
+ 1.3.1
1010
+ =====
1011
+
1012
+ ### Significant changes relative to 1.3.0:
1013
+
1014
+ 1. On Un*x systems, `make install` now installs the libjpeg-turbo libraries
1015
+ into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86,
1016
+ and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just
1017
+ x86-64. You can override this by overriding either the `prefix` or `libdir`
1018
+ configure variables.
1019
+
1020
+ 2. The Windows installer now places a copy of the TurboJPEG DLLs in the same
1021
+ directory as the rest of the libjpeg-turbo binaries. This was mainly done
1022
+ to support TurboVNC 1.3, which bundles the DLLs in its Windows installation.
1023
+ When using a 32-bit version of CMake on 64-bit Windows, it is impossible to
1024
+ access the c:\WINDOWS\system32 directory, which made it impossible for the
1025
+ TurboVNC build scripts to bundle the 64-bit TurboJPEG DLL.
1026
+
1027
+ 3. Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic
1028
+ entropy coding (by passing arguments of `-progressive -arithmetic` to cjpeg or
1029
+ jpegtran, for instance) would result in an error, `Requested feature was
1030
+ omitted at compile time`.
1031
+
1032
+ 4. Fixed a couple of issues (CVE-2013-6629 and CVE-2013-6630) whereby malformed
1033
+ JPEG images would cause libjpeg-turbo to use uninitialized memory during
1034
+ decompression.
1035
+
1036
+ 5. Fixed an error (`Buffer passed to JPEG library is too small`) that occurred
1037
+ when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
1038
+ source image, and added a unit test to check for this error.
1039
+
1040
+ 6. The Java classes should now build properly under Visual Studio 2010 and
1041
+ later.
1042
+
1043
+ 7. Fixed an issue that prevented SRPMs generated using the in-tree packaging
1044
+ tools from being rebuilt on certain newer Linux distributions.
1045
+
1046
+ 8. Numerous minor fixes to eliminate compilation and build/packaging system
1047
+ warnings, fix cosmetic issues, improve documentation clarity, and other general
1048
+ source cleanup.
1049
+
1050
+
1051
+ 1.3.0
1052
+ =====
1053
+
1054
+ ### Significant changes relative to 1.3 beta1:
1055
+
1056
+ 1. `make test` now works properly on FreeBSD, and it no longer requires the
1057
+ md5sum executable to be present on other Un*x platforms.
1058
+
1059
+ 2. Overhauled the packaging system:
1060
+
1061
+ - To avoid conflict with vendor-supplied libjpeg-turbo packages, the
1062
+ official RPMs and DEBs for libjpeg-turbo have been renamed to
1063
+ "libjpeg-turbo-official".
1064
+ - The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
1065
+ official Linux and Mac packages, to avoid conflict with vendor-supplied
1066
+ packages and also to streamline the packaging system.
1067
+ - Release packages are now created with the directory structure defined
1068
+ by the configure variables `prefix`, `bindir`, `libdir`, etc. (Un\*x) or by the
1069
+ `CMAKE_INSTALL_PREFIX` variable (Windows.) The exception is that the docs are
1070
+ always located under the system default documentation directory on Un\*x and
1071
+ Mac systems, and on Windows, the TurboJPEG DLL is always located in the Windows
1072
+ system directory.
1073
+ - To avoid confusion, official libjpeg-turbo packages on Linux/Unix
1074
+ platforms (except for Mac) will always install the 32-bit libraries in
1075
+ /opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
1076
+ - Fixed an issue whereby, in some cases, the libjpeg-turbo executables on
1077
+ Un*x systems were not properly linking with the shared libraries installed by
1078
+ the same package.
1079
+ - Fixed an issue whereby building the "installer" target on Windows when
1080
+ `WITH_JAVA=1` would fail if the TurboJPEG JAR had not been previously built.
1081
+ - Building the "install" target on Windows now installs files into the
1082
+ same places that the installer does.
1083
+
1084
+ 3. Fixed a Huffman encoder bug that prevented I/O suspension from working
1085
+ properly.
1086
+
1087
+
1088
+ 1.2.90 (1.3 beta1)
1089
+ ==================
1090
+
1091
+ ### Significant changes relative to 1.2.1:
1092
+
1093
+ 1. Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
1094
+ 11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Note that the IDCT will
1095
+ not be SIMD-accelerated when using any of these new scaling factors.
1096
+
1097
+ 2. The TurboJPEG dynamic library is now versioned. It was not strictly
1098
+ necessary to do so, because TurboJPEG uses versioned symbols, and if a function
1099
+ changes in an ABI-incompatible way, that function is renamed and a legacy
1100
+ function is provided to maintain backward compatibility. However, certain
1101
+ Linux distro maintainers have a policy against accepting any library that isn't
1102
+ versioned.
1103
+
1104
+ 3. Extended the TurboJPEG Java API so that it can be used to compress a JPEG
1105
+ image from and decompress a JPEG image to an arbitrary position in a large
1106
+ image buffer.
1107
+
1108
+ 4. The `tjDecompressToYUV()` function now supports the `TJFLAG_FASTDCT` flag.
1109
+
1110
+ 5. The 32-bit supplementary package for amd64 Debian systems now provides
1111
+ symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
1112
+ This allows those libraries to be used on MultiArch-compatible systems (such as
1113
+ Ubuntu 11 and later) without setting the linker path.
1114
+
1115
+ 6. The TurboJPEG Java wrapper should now find the JNI library on Mac systems
1116
+ without having to pass `-Djava.library.path=/usr/lib` to java.
1117
+
1118
+ 7. TJBench has been ported to Java to provide a convenient way of validating
1119
+ the performance of the TurboJPEG Java API. It can be run with
1120
+ `java -cp turbojpeg.jar TJBench`.
1121
+
1122
+ 8. cjpeg can now be used to generate JPEG files with the RGB colorspace
1123
+ (feature ported from jpeg-8d.)
1124
+
1125
+ 9. The width and height in the `-crop` argument passed to jpegtran can now be
1126
+ suffixed with `f` to indicate that, when the upper left corner of the cropping
1127
+ region is automatically moved to the nearest iMCU boundary, the bottom right
1128
+ corner should be moved by the same amount. In other words, this feature causes
1129
+ jpegtran to strictly honor the specified width/height rather than the specified
1130
+ bottom right corner (feature ported from jpeg-8d.)
1131
+
1132
+ 10. JPEG files using the RGB colorspace can now be decompressed into grayscale
1133
+ images (feature ported from jpeg-8d.)
1134
+
1135
+ 11. Fixed a regression caused by 1.2.1[7] whereby the build would fail with
1136
+ multiple "Mismatch in operand sizes" errors when attempting to build the x86
1137
+ SIMD code with NASM 0.98.
1138
+
1139
+ 12. The in-memory source/destination managers (`jpeg_mem_src()` and
1140
+ `jpeg_mem_dest()`) are now included by default when building libjpeg-turbo with
1141
+ libjpeg v6b or v7 emulation, so that programs can take advantage of these
1142
+ functions without requiring the use of the backward-incompatible libjpeg v8
1143
+ ABI. The "age number" of the libjpeg-turbo library on Un*x systems has been
1144
+ incremented by 1 to reflect this. You can disable this feature with a
1145
+ configure/CMake switch in order to retain strict API/ABI compatibility with the
1146
+ libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.) See
1147
+ [README.md](README.md) for more details.
1148
+
1149
+ 13. Added ARMv7s architecture to libjpeg.a and libturbojpeg.a in the official
1150
+ libjpeg-turbo binary package for OS X, so that those libraries can be used to
1151
+ build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
1152
+
1153
+
1154
+ 1.2.1
1155
+ =====
1156
+
1157
+ ### Significant changes relative to 1.2.0:
1158
+
1159
+ 1. Creating or decoding a JPEG file that uses the RGB colorspace should now
1160
+ properly work when the input or output colorspace is one of the libjpeg-turbo
1161
+ colorspace extensions.
1162
+
1163
+ 2. When libjpeg-turbo was built without SIMD support and merged (non-fancy)
1164
+ upsampling was used along with an alpha-enabled colorspace during
1165
+ decompression, the unused byte of the decompressed pixels was not being set to
1166
+ 0xFF. This has been fixed. TJUnitTest has also been extended to test for the
1167
+ correct behavior of the colorspace extensions when merged upsampling is used.
1168
+
1169
+ 3. Fixed a bug whereby the libjpeg-turbo SSE2 SIMD code would not preserve the
1170
+ upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
1171
+ calling conventions.
1172
+
1173
+ 4. Fixed a regression (CVE-2012-2806) caused by 1.2.0[6] whereby decompressing
1174
+ corrupt JPEG images (specifically, images in which the component count was
1175
+ erroneously set to a large value) would cause libjpeg-turbo to segfault.
1176
+
1177
+ 5. Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
1178
+ processors. The `MASKMOVDQU` instruction, which was used by the libjpeg-turbo
1179
+ SSE2 SIMD code, is apparently implemented in microcode on AMD processors, and
1180
+ it is painfully slow on Bobcat processors in particular. Eliminating the use
1181
+ of this instruction improved performance by an order of magnitude on Bobcat
1182
+ processors and by a small amount (typically 5%) on AMD desktop processors.
1183
+
1184
+ 6. Added SIMD acceleration for performing 4:2:2 upsampling on NEON-capable ARM
1185
+ platforms. This speeds up the decompression of 4:2:2 JPEGs by 20-25% on such
1186
+ platforms.
1187
+
1188
+ 7. Fixed a regression caused by 1.2.0[2] whereby, on Linux/x86 platforms
1189
+ running the 32-bit SSE2 SIMD code in libjpeg-turbo, decompressing a 4:2:0 or
1190
+ 4:2:2 JPEG image into a 32-bit (RGBX, BGRX, etc.) buffer without using fancy
1191
+ upsampling would produce several incorrect columns of pixels at the right-hand
1192
+ side of the output image if each row in the output image was not evenly
1193
+ divisible by 16 bytes.
1194
+
1195
+ 8. Fixed an issue whereby attempting to build the SIMD extensions with Xcode
1196
+ 4.3 on OS X platforms would cause NASM to return numerous errors of the form
1197
+ "'%define' expects a macro identifier".
1198
+
1199
+ 9. Added flags to the TurboJPEG API that allow the caller to force the use of
1200
+ either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
1201
+
1202
+
1203
+ 1.2.0
1204
+ =====
1205
+
1206
+ ### Significant changes relative to 1.2 beta1:
1207
+
1208
+ 1. Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
1209
+ was not adding the current directory to the assembler include path, so YASM
1210
+ was not able to find jsimdcfg.inc.)
1211
+
1212
+ 2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
1213
+ a JPEG image to a bitmap buffer whose size was not a multiple of 16 bytes.
1214
+ This was more of an annoyance than an actual bug, since it did not cause any
1215
+ actual run-time problems, but the issue showed up when running libjpeg-turbo in
1216
+ valgrind. See <http://crbug.com/72399> for more information.
1217
+
1218
+ 3. Added a compile-time macro (`LIBJPEG_TURBO_VERSION`) that can be used to
1219
+ check the version of libjpeg-turbo against which an application was compiled.
1220
+
1221
+ 4. Added new RGBA/BGRA/ABGR/ARGB colorspace extension constants (libjpeg API)
1222
+ and pixel formats (TurboJPEG API), which allow applications to specify that,
1223
+ when decompressing to a 4-component RGB buffer, the unused byte should be set
1224
+ to 0xFF so that it can be interpreted as an opaque alpha channel.
1225
+
1226
+ 5. Fixed regression issue whereby DevIL failed to build against libjpeg-turbo
1227
+ because libjpeg-turbo's distributed version of jconfig.h contained an `INLINE`
1228
+ macro, which conflicted with a similar macro in DevIL. This macro is used only
1229
+ internally when building libjpeg-turbo, so it was moved into config.h.
1230
+
1231
+ 6. libjpeg-turbo will now correctly decompress erroneous CMYK/YCCK JPEGs whose
1232
+ K component is assigned a component ID of 1 instead of 4. Although these files
1233
+ are in violation of the spec, other JPEG implementations handle them
1234
+ correctly.
1235
+
1236
+ 7. Added ARMv6 and ARMv7 architectures to libjpeg.a and libturbojpeg.a in
1237
+ the official libjpeg-turbo binary package for OS X, so that those libraries can
1238
+ be used to build both OS X and iOS applications.
1239
+
1240
+
1241
+ 1.1.90 (1.2 beta1)
1242
+ ==================
1243
+
1244
+ ### Significant changes relative to 1.1.1:
1245
+
1246
+ 1. Added a Java wrapper for the TurboJPEG API. See [java/README](java/README)
1247
+ for more details.
1248
+
1249
+ 2. The TurboJPEG API can now be used to scale down images during
1250
+ decompression.
1251
+
1252
+ 3. Added SIMD routines for RGB-to-grayscale color conversion, which
1253
+ significantly improves the performance of grayscale JPEG compression from an
1254
+ RGB source image.
1255
+
1256
+ 4. Improved the performance of the C color conversion routines, which are used
1257
+ on platforms for which SIMD acceleration is not available.
1258
+
1259
+ 5. Added a function to the TurboJPEG API that performs lossless transforms.
1260
+ This function is implemented using the same back end as jpegtran, but it
1261
+ performs transcoding entirely in memory and allows multiple transforms and/or
1262
+ crop operations to be batched together, so the source coefficients only need to
1263
+ be read once. This is useful when generating image tiles from a single source
1264
+ JPEG.
1265
+
1266
+ 6. Added tests for the new TurboJPEG scaled decompression and lossless
1267
+ transform features to tjbench (the TurboJPEG benchmark, formerly called
1268
+ "jpgtest".)
1269
+
1270
+ 7. Added support for 4:4:0 (transposed 4:2:2) subsampling in TurboJPEG, which
1271
+ was necessary in order for it to read 4:2:2 JPEG files that had been losslessly
1272
+ transposed or rotated 90 degrees.
1273
+
1274
+ 8. All legacy VirtualGL code has been re-factored, and this has allowed
1275
+ libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
1276
+
1277
+ 9. libjpeg-turbo can now be built with YASM.
1278
+
1279
+ 10. Added SIMD acceleration for ARM Linux and iOS platforms that support
1280
+ NEON instructions.
1281
+
1282
+ 11. Refactored the TurboJPEG C API and documented it using Doxygen. The
1283
+ TurboJPEG 1.2 API uses pixel formats to define the size and component order of
1284
+ the uncompressed source/destination images, and it includes a more efficient
1285
+ version of `TJBUFSIZE()` that computes a worst-case JPEG size based on the
1286
+ level of chrominance subsampling. The refactored implementation of the
1287
+ TurboJPEG API now uses the libjpeg memory source and destination managers,
1288
+ which allows the TurboJPEG compressor to grow the JPEG buffer as necessary.
1289
+
1290
+ 12. Eliminated errors in the output of jpegtran on Windows that occurred when
1291
+ the application was invoked using I/O redirection
1292
+ (`jpegtran <input.jpg >output.jpg`.)
1293
+
1294
+ 13. The inclusion of libjpeg v7 and v8 emulation as well as arithmetic coding
1295
+ support in libjpeg-turbo v1.1.0 introduced several new error constants in
1296
+ jerror.h, and these were mistakenly enabled for all emulation modes, causing
1297
+ the error enum in libjpeg-turbo to sometimes have different values than the
1298
+ same enum in libjpeg. This represents an ABI incompatibility, and it caused
1299
+ problems with rare applications that took specific action based on a particular
1300
+ error value. The fix was to include the new error constants conditionally
1301
+ based on whether libjpeg v7 or v8 emulation was enabled.
1302
+
1303
+ 14. Fixed an issue whereby Windows applications that used libjpeg-turbo would
1304
+ fail to compile if the Windows system headers were included before jpeglib.h.
1305
+ This issue was caused by a conflict in the definition of the INT32 type.
1306
+
1307
+ 15. Fixed 32-bit supplementary package for amd64 Debian systems, which was
1308
+ broken by enhancements to the packaging system in 1.1.
1309
+
1310
+ 16. When decompressing a JPEG image using an output colorspace of
1311
+ `JCS_EXT_RGBX`, `JCS_EXT_BGRX`, `JCS_EXT_XBGR`, or `JCS_EXT_XRGB`,
1312
+ libjpeg-turbo will now set the unused byte to 0xFF, which allows applications
1313
+ to interpret that byte as an alpha channel (0xFF = opaque).
1314
+
1315
+
1316
+ 1.1.1
1317
+ =====
1318
+
1319
+ ### Significant changes relative to 1.1.0:
1320
+
1321
+ 1. Fixed a 1-pixel error in row 0, column 21 of the luminance plane generated
1322
+ by `tjEncodeYUV()`.
1323
+
1324
+ 2. libjpeg-turbo's accelerated Huffman decoder previously ignored unexpected
1325
+ markers found in the middle of the JPEG data stream during decompression. It
1326
+ will now hand off decoding of a particular block to the unaccelerated Huffman
1327
+ decoder if an unexpected marker is found, so that the unaccelerated Huffman
1328
+ decoder can generate an appropriate warning.
1329
+
1330
+ 3. Older versions of MinGW64 prefixed symbol names with underscores by
1331
+ default, which differed from the behavior of 64-bit Visual C++. MinGW64 1.0
1332
+ has adopted the behavior of 64-bit Visual C++ as the default, so to accommodate
1333
+ this, the libjpeg-turbo SIMD function names are no longer prefixed with an
1334
+ underscore when building with MinGW64. This means that, when building
1335
+ libjpeg-turbo with older versions of MinGW64, you will now have to add
1336
+ `-fno-leading-underscore` to the `CFLAGS`.
1337
+
1338
+ 4. Fixed a regression bug in the NSIS script that caused the Windows installer
1339
+ build to fail when using the Visual Studio IDE.
1340
+
1341
+ 5. Fixed a bug in `jpeg_read_coefficients()` whereby it would not initialize
1342
+ `cinfo->image_width` and `cinfo->image_height` if libjpeg v7 or v8 emulation
1343
+ was enabled. This specifically caused the jpegoptim program to fail if it was
1344
+ linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8
1345
+ emulation.
1346
+
1347
+ 6. Eliminated excessive I/O overhead that occurred when reading BMP files in
1348
+ cjpeg.
1349
+
1350
+ 7. Eliminated errors in the output of cjpeg on Windows that occurred when the
1351
+ application was invoked using I/O redirection (`cjpeg <inputfile >output.jpg`.)
1352
+
1353
+
1354
+ 1.1.0
1355
+ =====
1356
+
1357
+ ### Significant changes relative to 1.1 beta1:
1358
+
1359
+ 1. The algorithm used by the SIMD quantization function cannot produce correct
1360
+ results when the JPEG quality is >= 98 and the fast integer forward DCT is
1361
+ used. Thus, the non-SIMD quantization function is now used for those cases,
1362
+ and libjpeg-turbo should now produce identical output to libjpeg v6b in all
1363
+ cases.
1364
+
1365
+ 2. Despite the above, the fast integer forward DCT still degrades somewhat for
1366
+ JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
1367
+ use the slow integer forward DCT when generating JPEG images of quality 96 or
1368
+ greater. This reduces compression performance by as much as 15% for these
1369
+ high-quality images but is necessary to ensure that the images are perceptually
1370
+ lossless. It also ensures that the library can avoid the performance pitfall
1371
+ created by [1].
1372
+
1373
+ 3. Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
1374
+
1375
+ 4. Fixed visual artifacts in grayscale JPEG compression caused by a typo in
1376
+ the RGB-to-luminance lookup tables.
1377
+
1378
+ 5. The Windows distribution packages now include the libjpeg run-time programs
1379
+ (cjpeg, etc.)
1380
+
1381
+ 6. All packages now include jpgtest.
1382
+
1383
+ 7. The TurboJPEG dynamic library now uses versioned symbols.
1384
+
1385
+ 8. Added two new TurboJPEG API functions, `tjEncodeYUV()` and
1386
+ `tjDecompressToYUV()`, to replace the somewhat hackish `TJ_YUV` flag.
1387
+
1388
+
1389
+ 1.0.90 (1.1 beta1)
1390
+ ==================
1391
+
1392
+ ### Significant changes relative to 1.0.1:
1393
+
1394
+ 1. Added emulation of the libjpeg v7 and v8 APIs and ABIs. See
1395
+ [README.md](README.md) for more details. This feature was sponsored by
1396
+ CamTrace SAS.
1397
+
1398
+ 2. Created a new CMake-based build system for the Visual C++ and MinGW builds.
1399
+
1400
+ 3. Grayscale bitmaps can now be compressed from/decompressed to using the
1401
+ TurboJPEG API.
1402
+
1403
+ 4. jpgtest can now be used to test decompression performance with existing
1404
+ JPEG images.
1405
+
1406
+ 5. If the default install prefix (/opt/libjpeg-turbo) is used, then
1407
+ `make install` now creates /opt/libjpeg-turbo/lib32 and
1408
+ /opt/libjpeg-turbo/lib64 sym links to duplicate the behavior of the binary
1409
+ packages.
1410
+
1411
+ 6. All symbols in the libjpeg-turbo dynamic library are now versioned, even
1412
+ when the library is built with libjpeg v6b emulation.
1413
+
1414
+ 7. Added arithmetic encoding and decoding support (can be disabled with
1415
+ configure or CMake options)
1416
+
1417
+ 8. Added a `TJ_YUV` flag to the TurboJPEG API, which causes both the compressor
1418
+ and decompressor to output planar YUV images.
1419
+
1420
+ 9. Added an extended version of `tjDecompressHeader()` to the TurboJPEG API,
1421
+ which allows the caller to determine the type of subsampling used in a JPEG
1422
+ image.
1423
+
1424
+ 10. Added further protections against invalid Huffman codes.
1425
+
1426
+
1427
+ 1.0.1
1428
+ =====
1429
+
1430
+ ### Significant changes relative to 1.0.0:
1431
+
1432
+ 1. The Huffman decoder will now handle erroneous Huffman codes (for instance,
1433
+ from a corrupt JPEG image.) Previously, these would cause libjpeg-turbo to
1434
+ crash under certain circumstances.
1435
+
1436
+ 2. Fixed typo in SIMD dispatch routines that was causing 4:2:2 upsampling to
1437
+ be used instead of 4:2:0 when decompressing JPEG images using SSE2 code.
1438
+
1439
+ 3. The configure script will now automatically determine whether the
1440
+ `INCOMPLETE_TYPES_BROKEN` macro should be defined.
1441
+
1442
+
1443
+ 1.0.0
1444
+ =====
1445
+
1446
+ ### Significant changes relative to 0.0.93:
1447
+
1448
+ 1. 2983700: Further FreeBSD build tweaks (no longer necessary to specify
1449
+ `--host` when configuring on a 64-bit system)
1450
+
1451
+ 2. Created symlinks in the Unix/Linux packages so that the TurboJPEG
1452
+ include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
1453
+ static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
1454
+ 64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
1455
+
1456
+ 3. The Unix/Linux distribution packages now include the libjpeg run-time
1457
+ programs (cjpeg, etc.) and man pages.
1458
+
1459
+ 4. Created a 32-bit supplementary package for amd64 Debian systems, which
1460
+ contains just the 32-bit libjpeg-turbo libraries.
1461
+
1462
+ 5. Moved the libraries from */lib32 to */lib in the i386 Debian package.
1463
+
1464
+ 6. Include distribution package for Cygwin
1465
+
1466
+ 7. No longer necessary to specify `--without-simd` on non-x86 architectures,
1467
+ and unit tests now work on those architectures.
1468
+
1469
+
1470
+ 0.0.93
1471
+ ======
1472
+
1473
+ ### Significant changes since 0.0.91:
1474
+
1475
+ 1. 2982659: Fixed x86-64 build on FreeBSD systems
1476
+
1477
+ 2. 2988188: Added support for Windows 64-bit systems
1478
+
1479
+
1480
+ 0.0.91
1481
+ ======
1482
+
1483
+ ### Significant changes relative to 0.0.90:
1484
+
1485
+ 1. Added documentation to .deb packages
1486
+
1487
+ 2. 2968313: Fixed data corruption issues when decompressing large JPEG images
1488
+ and/or using buffered I/O with the libjpeg-turbo decompressor
1489
+
1490
+
1491
+ 0.0.90
1492
+ ======
1493
+
1494
+ Initial release