rfreeimage 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (860) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +1 -0
  4. data/Rakefile +34 -0
  5. data/ext/rfreeimage/extconf.rb +35 -0
  6. data/ext/rfreeimage/rfi_main.c +389 -0
  7. data/lib/rfreeimage/image.rb +26 -0
  8. data/lib/rfreeimage/version.rb +3 -0
  9. data/lib/rfreeimage.rb +3 -0
  10. data/rfreeimage.gemspec +32 -0
  11. data/vendor/FreeImage/Makefile +34 -0
  12. data/vendor/FreeImage/Makefile.cygwin +74 -0
  13. data/vendor/FreeImage/Makefile.fip +84 -0
  14. data/vendor/FreeImage/Makefile.gnu +83 -0
  15. data/vendor/FreeImage/Makefile.iphone +96 -0
  16. data/vendor/FreeImage/Makefile.mingw +136 -0
  17. data/vendor/FreeImage/Makefile.osx +115 -0
  18. data/vendor/FreeImage/Makefile.solaris +66 -0
  19. data/vendor/FreeImage/Makefile.srcs +6 -0
  20. data/vendor/FreeImage/README.iphone +19 -0
  21. data/vendor/FreeImage/README.linux +50 -0
  22. data/vendor/FreeImage/README.minGW +236 -0
  23. data/vendor/FreeImage/README.osx +44 -0
  24. data/vendor/FreeImage/README.solaris +67 -0
  25. data/vendor/FreeImage/Source/CacheFile.h +92 -0
  26. data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
  27. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
  28. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
  29. data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
  30. data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
  31. data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
  32. data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
  33. data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
  34. data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
  35. data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
  36. data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
  37. data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
  38. data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
  39. data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
  40. data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
  41. data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
  42. data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
  43. data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
  44. data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
  45. data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
  46. data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
  47. data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
  48. data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
  49. data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
  50. data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
  51. data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
  52. data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
  53. data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
  54. data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
  55. data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
  56. data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
  57. data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
  58. data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
  59. data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
  60. data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
  61. data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
  62. data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
  63. data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
  64. data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
  65. data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
  66. data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
  67. data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
  68. data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
  69. data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
  70. data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
  71. data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
  72. data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
  73. data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
  74. data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
  75. data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
  76. data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
  77. data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
  78. data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
  79. data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
  80. data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
  81. data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
  82. data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
  83. data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
  84. data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
  85. data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
  86. data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
  87. data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
  88. data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
  89. data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
  90. data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
  91. data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
  92. data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
  93. data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
  94. data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
  95. data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
  96. data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
  97. data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
  98. data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
  99. data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
  100. data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
  101. data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
  102. data/vendor/FreeImage/Source/FreeImage.h +1153 -0
  103. data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
  104. data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
  105. data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
  106. data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
  107. data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
  108. data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
  109. data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
  110. data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
  111. data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
  112. data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
  113. data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
  114. data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
  115. data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
  116. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
  117. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
  118. data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
  119. data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
  120. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
  121. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
  122. data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
  123. data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
  124. data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
  125. data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
  126. data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
  127. data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
  128. data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
  129. data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
  130. data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
  131. data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
  132. data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
  133. data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
  134. data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
  135. data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
  136. data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
  137. data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
  138. data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
  139. data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
  140. data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
  141. data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
  142. data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
  143. data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
  144. data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
  145. data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
  146. data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
  147. data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
  148. data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
  149. data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
  150. data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
  151. data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
  152. data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
  153. data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
  154. data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
  155. data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
  156. data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
  157. data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
  158. data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
  159. data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
  160. data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
  161. data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
  162. data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
  163. data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
  164. data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
  165. data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
  166. data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
  167. data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
  168. data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
  169. data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
  170. data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
  171. data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
  172. data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
  173. data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
  174. data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
  175. data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
  176. data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
  177. data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
  178. data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
  179. data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
  180. data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
  181. data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
  182. data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
  183. data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
  184. data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
  185. data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
  186. data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
  187. data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
  188. data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
  189. data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
  190. data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
  191. data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
  192. data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
  193. data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
  194. data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
  195. data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
  196. data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
  197. data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
  198. data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
  199. data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
  200. data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
  201. data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
  202. data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
  203. data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
  204. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
  205. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
  206. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
  207. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
  208. data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
  209. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
  210. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
  211. data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
  212. data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
  213. data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
  214. data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
  215. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
  216. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
  217. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
  218. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
  219. data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
  220. data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
  221. data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
  222. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
  223. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
  224. data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
  225. data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
  226. data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
  227. data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
  228. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
  229. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
  230. data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
  231. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
  232. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
  233. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
  234. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
  235. data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
  236. data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
  237. data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
  238. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
  239. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
  240. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
  241. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
  242. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
  243. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
  244. data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
  245. data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
  246. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
  247. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
  248. data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
  249. data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
  250. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
  251. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
  252. data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
  253. data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
  254. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
  255. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
  256. data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
  257. data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
  258. data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
  259. data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
  260. data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
  261. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
  262. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
  263. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
  264. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
  265. data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
  266. data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
  267. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
  268. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
  269. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
  270. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
  271. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
  272. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
  273. data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
  274. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
  275. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
  276. data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
  277. data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
  278. data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
  279. data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
  280. data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
  281. data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
  282. data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
  283. data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
  284. data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
  285. data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
  286. data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
  287. data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
  288. data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
  289. data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
  290. data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
  291. data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
  292. data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
  293. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
  294. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
  295. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
  296. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
  297. data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
  298. data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
  299. data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
  300. data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
  301. data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
  302. data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
  303. data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
  304. data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
  305. data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
  306. data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
  307. data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
  308. data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
  309. data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
  310. data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
  311. data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
  312. data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
  313. data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
  314. data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
  315. data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
  316. data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
  317. data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
  318. data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
  319. data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
  320. data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
  321. data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
  322. data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
  323. data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
  324. data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
  325. data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
  326. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
  327. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
  328. data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
  329. data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
  330. data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
  331. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
  332. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
  333. data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
  334. data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
  335. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
  336. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
  337. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
  338. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
  339. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
  340. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
  341. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
  342. data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
  343. data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
  344. data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
  345. data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
  346. data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
  347. data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
  348. data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
  349. data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
  350. data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
  351. data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
  352. data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
  353. data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
  354. data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
  355. data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
  356. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
  357. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
  358. data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
  359. data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
  360. data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
  361. data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
  362. data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
  363. data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
  364. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
  365. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
  366. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
  367. data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
  368. data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
  369. data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
  370. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
  371. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
  372. data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
  373. data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
  374. data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
  375. data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
  376. data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
  377. data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
  378. data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
  379. data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
  380. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
  381. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
  382. data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
  383. data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
  384. data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
  385. data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
  386. data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
  387. data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
  388. data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
  389. data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
  390. data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
  391. data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
  392. data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
  393. data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
  394. data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
  395. data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
  396. data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
  397. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
  398. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
  399. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
  400. data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
  401. data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
  402. data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
  403. data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
  404. data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
  405. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
  406. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
  407. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
  408. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
  409. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
  410. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
  411. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
  412. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
  413. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
  414. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
  415. data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
  416. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
  417. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
  418. data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
  419. data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
  420. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
  421. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
  422. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
  423. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
  424. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
  425. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
  426. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
  427. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
  428. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
  429. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
  430. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
  431. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
  432. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
  433. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
  434. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
  435. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
  436. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
  437. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
  438. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
  439. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
  440. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
  441. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
  442. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
  443. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
  444. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
  445. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
  446. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
  447. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
  448. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
  449. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
  450. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
  451. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
  452. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
  453. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
  454. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
  455. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
  456. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
  457. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
  458. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
  459. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
  460. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
  461. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
  462. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
  463. data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
  464. data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
  465. data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
  466. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
  467. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
  468. data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
  469. data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
  470. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
  471. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
  472. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
  473. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
  474. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
  475. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
  476. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
  477. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
  478. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
  479. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
  480. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
  481. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
  482. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
  483. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
  484. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
  485. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
  486. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
  487. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
  488. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
  489. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
  490. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
  491. data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
  492. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
  493. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
  494. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
  495. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
  496. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
  497. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
  498. data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
  499. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
  500. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
  501. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
  502. data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
  503. data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
  504. data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
  505. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
  506. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
  507. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
  508. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
  509. data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
  510. data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
  511. data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
  512. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
  513. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
  514. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
  515. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
  516. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
  517. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
  518. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
  519. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
  520. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
  521. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
  522. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
  523. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
  524. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
  525. data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
  526. data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
  527. data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
  528. data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
  529. data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
  530. data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
  531. data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
  532. data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
  533. data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
  534. data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
  535. data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
  536. data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
  537. data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
  538. data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
  539. data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
  540. data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
  541. data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
  542. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
  543. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
  544. data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
  545. data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
  546. data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
  547. data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
  548. data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
  549. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
  550. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
  551. data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
  552. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
  553. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
  554. data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
  555. data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
  556. data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
  557. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
  558. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
  559. data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
  560. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
  561. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
  562. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
  563. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
  564. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
  565. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
  566. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
  567. data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
  568. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
  569. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
  570. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
  571. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
  572. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
  573. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
  574. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
  575. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
  576. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
  577. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
  578. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
  579. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
  580. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
  581. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
  582. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
  583. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
  584. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
  585. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
  586. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
  587. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
  588. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
  589. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
  590. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
  591. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
  592. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
  593. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
  594. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
  595. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
  596. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
  597. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
  598. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
  599. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
  600. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
  601. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
  602. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
  603. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
  604. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
  605. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
  606. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
  607. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
  608. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
  609. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
  610. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
  611. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
  612. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
  613. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
  614. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
  615. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
  616. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
  617. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
  618. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
  619. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
  620. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
  621. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
  622. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
  623. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
  624. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
  625. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
  626. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
  627. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
  628. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
  629. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
  630. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
  631. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
  632. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
  633. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
  634. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
  635. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
  636. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
  637. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
  638. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
  639. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
  640. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
  641. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
  642. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
  643. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
  644. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
  645. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
  646. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
  647. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
  648. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
  649. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
  650. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
  651. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
  652. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
  653. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
  654. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
  655. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
  656. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
  657. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
  658. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
  659. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
  660. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
  661. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
  662. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
  663. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
  664. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
  665. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
  666. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
  667. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
  668. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
  669. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
  670. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
  671. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
  672. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
  673. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
  674. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
  675. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
  676. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
  677. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
  678. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
  679. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
  680. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
  681. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
  682. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
  683. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
  684. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
  685. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
  686. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
  687. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
  688. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
  689. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
  690. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
  691. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
  692. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
  693. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
  694. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
  695. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
  696. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
  697. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
  698. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
  699. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
  700. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
  701. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
  702. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
  703. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
  704. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
  705. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
  706. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
  707. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
  708. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
  709. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
  710. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
  711. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
  712. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
  713. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
  714. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
  715. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
  716. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
  717. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
  718. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
  719. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
  720. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
  721. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
  722. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
  723. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
  724. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
  725. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
  726. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
  727. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
  728. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
  729. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
  730. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
  731. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
  732. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
  733. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
  734. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
  735. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
  736. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
  737. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
  738. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
  739. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
  740. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
  741. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
  742. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
  743. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
  744. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
  745. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
  746. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
  747. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
  748. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
  749. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
  750. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
  751. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
  752. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
  753. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
  754. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
  755. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
  756. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
  757. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
  758. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
  759. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
  760. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
  761. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
  762. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
  763. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
  764. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
  765. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
  766. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
  767. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
  768. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
  769. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
  770. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
  771. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
  772. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
  773. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
  774. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
  775. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
  776. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
  777. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
  778. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
  779. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
  780. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
  781. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
  782. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
  783. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
  784. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
  785. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
  786. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
  787. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
  788. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
  789. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
  790. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
  791. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
  792. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
  793. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
  794. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
  795. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
  796. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
  797. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
  798. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
  799. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
  800. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
  801. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
  802. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
  803. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
  804. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
  805. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
  806. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
  807. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
  808. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
  809. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
  810. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
  811. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
  812. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
  813. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
  814. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
  815. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
  816. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
  817. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
  818. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
  819. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
  820. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
  821. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
  822. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
  823. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
  824. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
  825. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
  826. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
  827. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
  828. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
  829. data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
  830. data/vendor/FreeImage/Source/Plugin.h +144 -0
  831. data/vendor/FreeImage/Source/Quantizers.h +354 -0
  832. data/vendor/FreeImage/Source/ToneMapping.h +44 -0
  833. data/vendor/FreeImage/Source/Utilities.h +516 -0
  834. data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
  835. data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
  836. data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
  837. data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
  838. data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
  839. data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
  840. data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
  841. data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
  842. data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
  843. data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
  844. data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
  845. data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
  846. data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
  847. data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
  848. data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
  849. data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
  850. data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
  851. data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
  852. data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
  853. data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
  854. data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
  855. data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
  856. data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
  857. data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
  858. data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
  859. data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
  860. metadata +931 -0
@@ -0,0 +1,1511 @@
1
+ /*
2
+ * jdmarker.c
3
+ *
4
+ * Copyright (C) 1991-1998, Thomas G. Lane.
5
+ * Modified 2009-2013 by Guido Vollbeding.
6
+ * This file is part of the Independent JPEG Group's software.
7
+ * For conditions of distribution and use, see the accompanying README file.
8
+ *
9
+ * This file contains routines to decode JPEG datastream markers.
10
+ * Most of the complexity arises from our desire to support input
11
+ * suspension: if not all of the data for a marker is available,
12
+ * we must exit back to the application. On resumption, we reprocess
13
+ * the marker.
14
+ */
15
+
16
+ #define JPEG_INTERNALS
17
+ #include "jinclude.h"
18
+ #include "jpeglib.h"
19
+
20
+
21
+ typedef enum { /* JPEG marker codes */
22
+ M_SOF0 = 0xc0,
23
+ M_SOF1 = 0xc1,
24
+ M_SOF2 = 0xc2,
25
+ M_SOF3 = 0xc3,
26
+
27
+ M_SOF5 = 0xc5,
28
+ M_SOF6 = 0xc6,
29
+ M_SOF7 = 0xc7,
30
+
31
+ M_JPG = 0xc8,
32
+ M_SOF9 = 0xc9,
33
+ M_SOF10 = 0xca,
34
+ M_SOF11 = 0xcb,
35
+
36
+ M_SOF13 = 0xcd,
37
+ M_SOF14 = 0xce,
38
+ M_SOF15 = 0xcf,
39
+
40
+ M_DHT = 0xc4,
41
+
42
+ M_DAC = 0xcc,
43
+
44
+ M_RST0 = 0xd0,
45
+ M_RST1 = 0xd1,
46
+ M_RST2 = 0xd2,
47
+ M_RST3 = 0xd3,
48
+ M_RST4 = 0xd4,
49
+ M_RST5 = 0xd5,
50
+ M_RST6 = 0xd6,
51
+ M_RST7 = 0xd7,
52
+
53
+ M_SOI = 0xd8,
54
+ M_EOI = 0xd9,
55
+ M_SOS = 0xda,
56
+ M_DQT = 0xdb,
57
+ M_DNL = 0xdc,
58
+ M_DRI = 0xdd,
59
+ M_DHP = 0xde,
60
+ M_EXP = 0xdf,
61
+
62
+ M_APP0 = 0xe0,
63
+ M_APP1 = 0xe1,
64
+ M_APP2 = 0xe2,
65
+ M_APP3 = 0xe3,
66
+ M_APP4 = 0xe4,
67
+ M_APP5 = 0xe5,
68
+ M_APP6 = 0xe6,
69
+ M_APP7 = 0xe7,
70
+ M_APP8 = 0xe8,
71
+ M_APP9 = 0xe9,
72
+ M_APP10 = 0xea,
73
+ M_APP11 = 0xeb,
74
+ M_APP12 = 0xec,
75
+ M_APP13 = 0xed,
76
+ M_APP14 = 0xee,
77
+ M_APP15 = 0xef,
78
+
79
+ M_JPG0 = 0xf0,
80
+ M_JPG8 = 0xf8,
81
+ M_JPG13 = 0xfd,
82
+ M_COM = 0xfe,
83
+
84
+ M_TEM = 0x01,
85
+
86
+ M_ERROR = 0x100
87
+ } JPEG_MARKER;
88
+
89
+
90
+ /* Private state */
91
+
92
+ typedef struct {
93
+ struct jpeg_marker_reader pub; /* public fields */
94
+
95
+ /* Application-overridable marker processing methods */
96
+ jpeg_marker_parser_method process_COM;
97
+ jpeg_marker_parser_method process_APPn[16];
98
+
99
+ /* Limit on marker data length to save for each marker type */
100
+ unsigned int length_limit_COM;
101
+ unsigned int length_limit_APPn[16];
102
+
103
+ /* Status of COM/APPn marker saving */
104
+ jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */
105
+ unsigned int bytes_read; /* data bytes read so far in marker */
106
+ /* Note: cur_marker is not linked into marker_list until it's all read. */
107
+ } my_marker_reader;
108
+
109
+ typedef my_marker_reader * my_marker_ptr;
110
+
111
+
112
+ /*
113
+ * Macros for fetching data from the data source module.
114
+ *
115
+ * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect
116
+ * the current restart point; we update them only when we have reached a
117
+ * suitable place to restart if a suspension occurs.
118
+ */
119
+
120
+ /* Declare and initialize local copies of input pointer/count */
121
+ #define INPUT_VARS(cinfo) \
122
+ struct jpeg_source_mgr * datasrc = (cinfo)->src; \
123
+ const JOCTET * next_input_byte = datasrc->next_input_byte; \
124
+ size_t bytes_in_buffer = datasrc->bytes_in_buffer
125
+
126
+ /* Unload the local copies --- do this only at a restart boundary */
127
+ #define INPUT_SYNC(cinfo) \
128
+ ( datasrc->next_input_byte = next_input_byte, \
129
+ datasrc->bytes_in_buffer = bytes_in_buffer )
130
+
131
+ /* Reload the local copies --- used only in MAKE_BYTE_AVAIL */
132
+ #define INPUT_RELOAD(cinfo) \
133
+ ( next_input_byte = datasrc->next_input_byte, \
134
+ bytes_in_buffer = datasrc->bytes_in_buffer )
135
+
136
+ /* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available.
137
+ * Note we do *not* do INPUT_SYNC before calling fill_input_buffer,
138
+ * but we must reload the local copies after a successful fill.
139
+ */
140
+ #define MAKE_BYTE_AVAIL(cinfo,action) \
141
+ if (bytes_in_buffer == 0) { \
142
+ if (! (*datasrc->fill_input_buffer) (cinfo)) \
143
+ { action; } \
144
+ INPUT_RELOAD(cinfo); \
145
+ }
146
+
147
+ /* Read a byte into variable V.
148
+ * If must suspend, take the specified action (typically "return FALSE").
149
+ */
150
+ #define INPUT_BYTE(cinfo,V,action) \
151
+ MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
152
+ bytes_in_buffer--; \
153
+ V = GETJOCTET(*next_input_byte++); )
154
+
155
+ /* As above, but read two bytes interpreted as an unsigned 16-bit integer.
156
+ * V should be declared unsigned int or perhaps INT32.
157
+ */
158
+ #define INPUT_2BYTES(cinfo,V,action) \
159
+ MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
160
+ bytes_in_buffer--; \
161
+ V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
162
+ MAKE_BYTE_AVAIL(cinfo,action); \
163
+ bytes_in_buffer--; \
164
+ V += GETJOCTET(*next_input_byte++); )
165
+
166
+
167
+ /*
168
+ * Routines to process JPEG markers.
169
+ *
170
+ * Entry condition: JPEG marker itself has been read and its code saved
171
+ * in cinfo->unread_marker; input restart point is just after the marker.
172
+ *
173
+ * Exit: if return TRUE, have read and processed any parameters, and have
174
+ * updated the restart point to point after the parameters.
175
+ * If return FALSE, was forced to suspend before reaching end of
176
+ * marker parameters; restart point has not been moved. Same routine
177
+ * will be called again after application supplies more input data.
178
+ *
179
+ * This approach to suspension assumes that all of a marker's parameters
180
+ * can fit into a single input bufferload. This should hold for "normal"
181
+ * markers. Some COM/APPn markers might have large parameter segments
182
+ * that might not fit. If we are simply dropping such a marker, we use
183
+ * skip_input_data to get past it, and thereby put the problem on the
184
+ * source manager's shoulders. If we are saving the marker's contents
185
+ * into memory, we use a slightly different convention: when forced to
186
+ * suspend, the marker processor updates the restart point to the end of
187
+ * what it's consumed (ie, the end of the buffer) before returning FALSE.
188
+ * On resumption, cinfo->unread_marker still contains the marker code,
189
+ * but the data source will point to the next chunk of marker data.
190
+ * The marker processor must retain internal state to deal with this.
191
+ *
192
+ * Note that we don't bother to avoid duplicate trace messages if a
193
+ * suspension occurs within marker parameters. Other side effects
194
+ * require more care.
195
+ */
196
+
197
+
198
+ LOCAL(boolean)
199
+ get_soi (j_decompress_ptr cinfo)
200
+ /* Process an SOI marker */
201
+ {
202
+ int i;
203
+
204
+ TRACEMS(cinfo, 1, JTRC_SOI);
205
+
206
+ if (cinfo->marker->saw_SOI)
207
+ ERREXIT(cinfo, JERR_SOI_DUPLICATE);
208
+
209
+ /* Reset all parameters that are defined to be reset by SOI */
210
+
211
+ for (i = 0; i < NUM_ARITH_TBLS; i++) {
212
+ cinfo->arith_dc_L[i] = 0;
213
+ cinfo->arith_dc_U[i] = 1;
214
+ cinfo->arith_ac_K[i] = 5;
215
+ }
216
+ cinfo->restart_interval = 0;
217
+
218
+ /* Set initial assumptions for colorspace etc */
219
+
220
+ cinfo->jpeg_color_space = JCS_UNKNOWN;
221
+ cinfo->color_transform = JCT_NONE;
222
+ cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */
223
+
224
+ cinfo->saw_JFIF_marker = FALSE;
225
+ cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */
226
+ cinfo->JFIF_minor_version = 1;
227
+ cinfo->density_unit = 0;
228
+ cinfo->X_density = 1;
229
+ cinfo->Y_density = 1;
230
+ cinfo->saw_Adobe_marker = FALSE;
231
+ cinfo->Adobe_transform = 0;
232
+
233
+ cinfo->marker->saw_SOI = TRUE;
234
+
235
+ return TRUE;
236
+ }
237
+
238
+
239
+ LOCAL(boolean)
240
+ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog,
241
+ boolean is_arith)
242
+ /* Process a SOFn marker */
243
+ {
244
+ INT32 length;
245
+ int c, ci, i;
246
+ jpeg_component_info * compptr;
247
+ INPUT_VARS(cinfo);
248
+
249
+ cinfo->is_baseline = is_baseline;
250
+ cinfo->progressive_mode = is_prog;
251
+ cinfo->arith_code = is_arith;
252
+
253
+ INPUT_2BYTES(cinfo, length, return FALSE);
254
+
255
+ INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE);
256
+ INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE);
257
+ INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE);
258
+ INPUT_BYTE(cinfo, cinfo->num_components, return FALSE);
259
+
260
+ length -= 8;
261
+
262
+ TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker,
263
+ (int) cinfo->image_width, (int) cinfo->image_height,
264
+ cinfo->num_components);
265
+
266
+ if (cinfo->marker->saw_SOF)
267
+ ERREXIT(cinfo, JERR_SOF_DUPLICATE);
268
+
269
+ /* We don't support files in which the image height is initially specified */
270
+ /* as 0 and is later redefined by DNL. As long as we have to check that, */
271
+ /* might as well have a general sanity check. */
272
+ if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
273
+ cinfo->num_components <= 0)
274
+ ERREXIT(cinfo, JERR_EMPTY_IMAGE);
275
+
276
+ if (length != (cinfo->num_components * 3))
277
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
278
+
279
+ if (cinfo->comp_info == NULL) /* do only once, even if suspend */
280
+ cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
281
+ ((j_common_ptr) cinfo, JPOOL_IMAGE,
282
+ cinfo->num_components * SIZEOF(jpeg_component_info));
283
+
284
+ for (ci = 0; ci < cinfo->num_components; ci++) {
285
+ INPUT_BYTE(cinfo, c, return FALSE);
286
+ /* Check to see whether component id has already been seen */
287
+ /* (in violation of the spec, but unfortunately seen in some */
288
+ /* files). If so, create "fake" component id equal to the */
289
+ /* max id seen so far + 1. */
290
+ for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) {
291
+ if (c == compptr->component_id) {
292
+ compptr = cinfo->comp_info;
293
+ c = compptr->component_id;
294
+ compptr++;
295
+ for (i = 1; i < ci; i++, compptr++) {
296
+ if (compptr->component_id > c) c = compptr->component_id;
297
+ }
298
+ c++;
299
+ break;
300
+ }
301
+ }
302
+ compptr->component_id = c;
303
+ compptr->component_index = ci;
304
+ INPUT_BYTE(cinfo, c, return FALSE);
305
+ compptr->h_samp_factor = (c >> 4) & 15;
306
+ compptr->v_samp_factor = (c ) & 15;
307
+ INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE);
308
+
309
+ TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
310
+ compptr->component_id, compptr->h_samp_factor,
311
+ compptr->v_samp_factor, compptr->quant_tbl_no);
312
+ }
313
+
314
+ cinfo->marker->saw_SOF = TRUE;
315
+
316
+ INPUT_SYNC(cinfo);
317
+ return TRUE;
318
+ }
319
+
320
+
321
+ LOCAL(boolean)
322
+ get_sos (j_decompress_ptr cinfo)
323
+ /* Process a SOS marker */
324
+ {
325
+ INT32 length;
326
+ int c, ci, i, n;
327
+ jpeg_component_info * compptr;
328
+ INPUT_VARS(cinfo);
329
+
330
+ if (! cinfo->marker->saw_SOF)
331
+ ERREXITS(cinfo, JERR_SOF_BEFORE, "SOS");
332
+
333
+ INPUT_2BYTES(cinfo, length, return FALSE);
334
+
335
+ INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */
336
+
337
+ TRACEMS1(cinfo, 1, JTRC_SOS, n);
338
+
339
+ if (length != (n * 2 + 6) || n > MAX_COMPS_IN_SCAN ||
340
+ (n == 0 && !cinfo->progressive_mode))
341
+ /* pseudo SOS marker only allowed in progressive mode */
342
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
343
+
344
+ cinfo->comps_in_scan = n;
345
+
346
+ /* Collect the component-spec parameters */
347
+
348
+ for (i = 0; i < n; i++) {
349
+ INPUT_BYTE(cinfo, c, return FALSE);
350
+
351
+ /* Detect the case where component id's are not unique, and, if so, */
352
+ /* create a fake component id using the same logic as in get_sof. */
353
+ /* Note: This also ensures that all of the SOF components are */
354
+ /* referenced in the single scan case, which prevents access to */
355
+ /* uninitialized memory in later decoding stages. */
356
+ for (ci = 0; ci < i; ci++) {
357
+ if (c == cinfo->cur_comp_info[ci]->component_id) {
358
+ c = cinfo->cur_comp_info[0]->component_id;
359
+ for (ci = 1; ci < i; ci++) {
360
+ compptr = cinfo->cur_comp_info[ci];
361
+ if (compptr->component_id > c) c = compptr->component_id;
362
+ }
363
+ c++;
364
+ break;
365
+ }
366
+ }
367
+
368
+ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
369
+ ci++, compptr++) {
370
+ if (c == compptr->component_id)
371
+ goto id_found;
372
+ }
373
+
374
+ ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c);
375
+
376
+ id_found:
377
+
378
+ cinfo->cur_comp_info[i] = compptr;
379
+ INPUT_BYTE(cinfo, c, return FALSE);
380
+ compptr->dc_tbl_no = (c >> 4) & 15;
381
+ compptr->ac_tbl_no = (c ) & 15;
382
+
383
+ TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id,
384
+ compptr->dc_tbl_no, compptr->ac_tbl_no);
385
+ }
386
+
387
+ /* Collect the additional scan parameters Ss, Se, Ah/Al. */
388
+ INPUT_BYTE(cinfo, c, return FALSE);
389
+ cinfo->Ss = c;
390
+ INPUT_BYTE(cinfo, c, return FALSE);
391
+ cinfo->Se = c;
392
+ INPUT_BYTE(cinfo, c, return FALSE);
393
+ cinfo->Ah = (c >> 4) & 15;
394
+ cinfo->Al = (c ) & 15;
395
+
396
+ TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se,
397
+ cinfo->Ah, cinfo->Al);
398
+
399
+ /* Prepare to scan data & restart markers */
400
+ cinfo->marker->next_restart_num = 0;
401
+
402
+ /* Count another (non-pseudo) SOS marker */
403
+ if (n) cinfo->input_scan_number++;
404
+
405
+ INPUT_SYNC(cinfo);
406
+ return TRUE;
407
+ }
408
+
409
+
410
+ #ifdef D_ARITH_CODING_SUPPORTED
411
+
412
+ LOCAL(boolean)
413
+ get_dac (j_decompress_ptr cinfo)
414
+ /* Process a DAC marker */
415
+ {
416
+ INT32 length;
417
+ int index, val;
418
+ INPUT_VARS(cinfo);
419
+
420
+ INPUT_2BYTES(cinfo, length, return FALSE);
421
+ length -= 2;
422
+
423
+ while (length > 0) {
424
+ INPUT_BYTE(cinfo, index, return FALSE);
425
+ INPUT_BYTE(cinfo, val, return FALSE);
426
+
427
+ length -= 2;
428
+
429
+ TRACEMS2(cinfo, 1, JTRC_DAC, index, val);
430
+
431
+ if (index < 0 || index >= (2*NUM_ARITH_TBLS))
432
+ ERREXIT1(cinfo, JERR_DAC_INDEX, index);
433
+
434
+ if (index >= NUM_ARITH_TBLS) { /* define AC table */
435
+ cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val;
436
+ } else { /* define DC table */
437
+ cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F);
438
+ cinfo->arith_dc_U[index] = (UINT8) (val >> 4);
439
+ if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index])
440
+ ERREXIT1(cinfo, JERR_DAC_VALUE, val);
441
+ }
442
+ }
443
+
444
+ if (length != 0)
445
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
446
+
447
+ INPUT_SYNC(cinfo);
448
+ return TRUE;
449
+ }
450
+
451
+ #else /* ! D_ARITH_CODING_SUPPORTED */
452
+
453
+ #define get_dac(cinfo) skip_variable(cinfo)
454
+
455
+ #endif /* D_ARITH_CODING_SUPPORTED */
456
+
457
+
458
+ LOCAL(boolean)
459
+ get_dht (j_decompress_ptr cinfo)
460
+ /* Process a DHT marker */
461
+ {
462
+ INT32 length;
463
+ UINT8 bits[17];
464
+ UINT8 huffval[256];
465
+ int i, index, count;
466
+ JHUFF_TBL **htblptr;
467
+ INPUT_VARS(cinfo);
468
+
469
+ INPUT_2BYTES(cinfo, length, return FALSE);
470
+ length -= 2;
471
+
472
+ while (length > 16) {
473
+ INPUT_BYTE(cinfo, index, return FALSE);
474
+
475
+ TRACEMS1(cinfo, 1, JTRC_DHT, index);
476
+
477
+ bits[0] = 0;
478
+ count = 0;
479
+ for (i = 1; i <= 16; i++) {
480
+ INPUT_BYTE(cinfo, bits[i], return FALSE);
481
+ count += bits[i];
482
+ }
483
+
484
+ length -= 1 + 16;
485
+
486
+ TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
487
+ bits[1], bits[2], bits[3], bits[4],
488
+ bits[5], bits[6], bits[7], bits[8]);
489
+ TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
490
+ bits[9], bits[10], bits[11], bits[12],
491
+ bits[13], bits[14], bits[15], bits[16]);
492
+
493
+ /* Here we just do minimal validation of the counts to avoid walking
494
+ * off the end of our table space. jdhuff.c will check more carefully.
495
+ */
496
+ if (count > 256 || ((INT32) count) > length)
497
+ ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
498
+
499
+ MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */
500
+
501
+ for (i = 0; i < count; i++)
502
+ INPUT_BYTE(cinfo, huffval[i], return FALSE);
503
+
504
+ length -= count;
505
+
506
+ if (index & 0x10) { /* AC table definition */
507
+ index -= 0x10;
508
+ htblptr = &cinfo->ac_huff_tbl_ptrs[index];
509
+ } else { /* DC table definition */
510
+ htblptr = &cinfo->dc_huff_tbl_ptrs[index];
511
+ }
512
+
513
+ if (index < 0 || index >= NUM_HUFF_TBLS)
514
+ ERREXIT1(cinfo, JERR_DHT_INDEX, index);
515
+
516
+ if (*htblptr == NULL)
517
+ *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
518
+
519
+ MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
520
+ MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
521
+ }
522
+
523
+ if (length != 0)
524
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
525
+
526
+ INPUT_SYNC(cinfo);
527
+ return TRUE;
528
+ }
529
+
530
+
531
+ LOCAL(boolean)
532
+ get_dqt (j_decompress_ptr cinfo)
533
+ /* Process a DQT marker */
534
+ {
535
+ INT32 length, count, i;
536
+ int n, prec;
537
+ unsigned int tmp;
538
+ JQUANT_TBL *quant_ptr;
539
+ const int *natural_order;
540
+ INPUT_VARS(cinfo);
541
+
542
+ INPUT_2BYTES(cinfo, length, return FALSE);
543
+ length -= 2;
544
+
545
+ while (length > 0) {
546
+ length--;
547
+ INPUT_BYTE(cinfo, n, return FALSE);
548
+ prec = n >> 4;
549
+ n &= 0x0F;
550
+
551
+ TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
552
+
553
+ if (n >= NUM_QUANT_TBLS)
554
+ ERREXIT1(cinfo, JERR_DQT_INDEX, n);
555
+
556
+ if (cinfo->quant_tbl_ptrs[n] == NULL)
557
+ cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo);
558
+ quant_ptr = cinfo->quant_tbl_ptrs[n];
559
+
560
+ if (prec) {
561
+ if (length < DCTSIZE2 * 2) {
562
+ /* Initialize full table for safety. */
563
+ for (i = 0; i < DCTSIZE2; i++) {
564
+ quant_ptr->quantval[i] = 1;
565
+ }
566
+ count = length >> 1;
567
+ } else
568
+ count = DCTSIZE2;
569
+ } else {
570
+ if (length < DCTSIZE2) {
571
+ /* Initialize full table for safety. */
572
+ for (i = 0; i < DCTSIZE2; i++) {
573
+ quant_ptr->quantval[i] = 1;
574
+ }
575
+ count = length;
576
+ } else
577
+ count = DCTSIZE2;
578
+ }
579
+
580
+ switch (count) {
581
+ case (2*2): natural_order = jpeg_natural_order2; break;
582
+ case (3*3): natural_order = jpeg_natural_order3; break;
583
+ case (4*4): natural_order = jpeg_natural_order4; break;
584
+ case (5*5): natural_order = jpeg_natural_order5; break;
585
+ case (6*6): natural_order = jpeg_natural_order6; break;
586
+ case (7*7): natural_order = jpeg_natural_order7; break;
587
+ default: natural_order = jpeg_natural_order; break;
588
+ }
589
+
590
+ for (i = 0; i < count; i++) {
591
+ if (prec)
592
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
593
+ else
594
+ INPUT_BYTE(cinfo, tmp, return FALSE);
595
+ /* We convert the zigzag-order table to natural array order. */
596
+ quant_ptr->quantval[natural_order[i]] = (UINT16) tmp;
597
+ }
598
+
599
+ if (cinfo->err->trace_level >= 2) {
600
+ for (i = 0; i < DCTSIZE2; i += 8) {
601
+ TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
602
+ quant_ptr->quantval[i], quant_ptr->quantval[i+1],
603
+ quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
604
+ quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
605
+ quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
606
+ }
607
+ }
608
+
609
+ length -= count;
610
+ if (prec) length -= count;
611
+ }
612
+
613
+ if (length != 0)
614
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
615
+
616
+ INPUT_SYNC(cinfo);
617
+ return TRUE;
618
+ }
619
+
620
+
621
+ LOCAL(boolean)
622
+ get_dri (j_decompress_ptr cinfo)
623
+ /* Process a DRI marker */
624
+ {
625
+ INT32 length;
626
+ unsigned int tmp;
627
+ INPUT_VARS(cinfo);
628
+
629
+ INPUT_2BYTES(cinfo, length, return FALSE);
630
+
631
+ if (length != 4)
632
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
633
+
634
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
635
+
636
+ TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
637
+
638
+ cinfo->restart_interval = tmp;
639
+
640
+ INPUT_SYNC(cinfo);
641
+ return TRUE;
642
+ }
643
+
644
+
645
+ LOCAL(boolean)
646
+ get_lse (j_decompress_ptr cinfo)
647
+ /* Process an LSE marker */
648
+ {
649
+ INT32 length;
650
+ unsigned int tmp;
651
+ int cid;
652
+ INPUT_VARS(cinfo);
653
+
654
+ if (! cinfo->marker->saw_SOF)
655
+ ERREXITS(cinfo, JERR_SOF_BEFORE, "LSE");
656
+
657
+ if (cinfo->num_components < 3) goto bad;
658
+
659
+ INPUT_2BYTES(cinfo, length, return FALSE);
660
+
661
+ if (length != 24)
662
+ ERREXIT(cinfo, JERR_BAD_LENGTH);
663
+
664
+ INPUT_BYTE(cinfo, tmp, return FALSE);
665
+ if (tmp != 0x0D) /* ID inverse transform specification */
666
+ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
667
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
668
+ if (tmp != MAXJSAMPLE) goto bad; /* MAXTRANS */
669
+ INPUT_BYTE(cinfo, tmp, return FALSE);
670
+ if (tmp != 3) goto bad; /* Nt=3 */
671
+ INPUT_BYTE(cinfo, cid, return FALSE);
672
+ if (cid != cinfo->comp_info[1].component_id) goto bad;
673
+ INPUT_BYTE(cinfo, cid, return FALSE);
674
+ if (cid != cinfo->comp_info[0].component_id) goto bad;
675
+ INPUT_BYTE(cinfo, cid, return FALSE);
676
+ if (cid != cinfo->comp_info[2].component_id) goto bad;
677
+ INPUT_BYTE(cinfo, tmp, return FALSE);
678
+ if (tmp != 0x80) goto bad; /* F1: CENTER1=1, NORM1=0 */
679
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
680
+ if (tmp != 0) goto bad; /* A(1,1)=0 */
681
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
682
+ if (tmp != 0) goto bad; /* A(1,2)=0 */
683
+ INPUT_BYTE(cinfo, tmp, return FALSE);
684
+ if (tmp != 0) goto bad; /* F2: CENTER2=0, NORM2=0 */
685
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
686
+ if (tmp != 1) goto bad; /* A(2,1)=1 */
687
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
688
+ if (tmp != 0) goto bad; /* A(2,2)=0 */
689
+ INPUT_BYTE(cinfo, tmp, return FALSE);
690
+ if (tmp != 0) goto bad; /* F3: CENTER3=0, NORM3=0 */
691
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
692
+ if (tmp != 1) goto bad; /* A(3,1)=1 */
693
+ INPUT_2BYTES(cinfo, tmp, return FALSE);
694
+ if (tmp != 0) { /* A(3,2)=0 */
695
+ bad:
696
+ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
697
+ }
698
+
699
+ /* OK, valid transform that we can handle. */
700
+ cinfo->color_transform = JCT_SUBTRACT_GREEN;
701
+
702
+ INPUT_SYNC(cinfo);
703
+ return TRUE;
704
+ }
705
+
706
+
707
+ /*
708
+ * Routines for processing APPn and COM markers.
709
+ * These are either saved in memory or discarded, per application request.
710
+ * APP0 and APP14 are specially checked to see if they are
711
+ * JFIF and Adobe markers, respectively.
712
+ */
713
+
714
+ #define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */
715
+ #define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */
716
+ #define APPN_DATA_LEN 14 /* Must be the largest of the above!! */
717
+
718
+
719
+ LOCAL(void)
720
+ examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data,
721
+ unsigned int datalen, INT32 remaining)
722
+ /* Examine first few bytes from an APP0.
723
+ * Take appropriate action if it is a JFIF marker.
724
+ * datalen is # of bytes at data[], remaining is length of rest of marker data.
725
+ */
726
+ {
727
+ INT32 totallen = (INT32) datalen + remaining;
728
+
729
+ if (datalen >= APP0_DATA_LEN &&
730
+ GETJOCTET(data[0]) == 0x4A &&
731
+ GETJOCTET(data[1]) == 0x46 &&
732
+ GETJOCTET(data[2]) == 0x49 &&
733
+ GETJOCTET(data[3]) == 0x46 &&
734
+ GETJOCTET(data[4]) == 0) {
735
+ /* Found JFIF APP0 marker: save info */
736
+ cinfo->saw_JFIF_marker = TRUE;
737
+ cinfo->JFIF_major_version = GETJOCTET(data[5]);
738
+ cinfo->JFIF_minor_version = GETJOCTET(data[6]);
739
+ cinfo->density_unit = GETJOCTET(data[7]);
740
+ cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
741
+ cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
742
+ /* Check version.
743
+ * Major version must be 1 or 2, anything else signals an incompatible
744
+ * change.
745
+ * (We used to treat this as an error, but now it's a nonfatal warning,
746
+ * because some bozo at Hijaak couldn't read the spec.)
747
+ * Minor version should be 0..2, but process anyway if newer.
748
+ */
749
+ if (cinfo->JFIF_major_version != 1 && cinfo->JFIF_major_version != 2)
750
+ WARNMS2(cinfo, JWRN_JFIF_MAJOR,
751
+ cinfo->JFIF_major_version, cinfo->JFIF_minor_version);
752
+ /* Generate trace messages */
753
+ TRACEMS5(cinfo, 1, JTRC_JFIF,
754
+ cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
755
+ cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
756
+ /* Validate thumbnail dimensions and issue appropriate messages */
757
+ if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
758
+ TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
759
+ GETJOCTET(data[12]), GETJOCTET(data[13]));
760
+ totallen -= APP0_DATA_LEN;
761
+ if (totallen !=
762
+ ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3))
763
+ TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
764
+ } else if (datalen >= 6 &&
765
+ GETJOCTET(data[0]) == 0x4A &&
766
+ GETJOCTET(data[1]) == 0x46 &&
767
+ GETJOCTET(data[2]) == 0x58 &&
768
+ GETJOCTET(data[3]) == 0x58 &&
769
+ GETJOCTET(data[4]) == 0) {
770
+ /* Found JFIF "JFXX" extension APP0 marker */
771
+ /* The library doesn't actually do anything with these,
772
+ * but we try to produce a helpful trace message.
773
+ */
774
+ switch (GETJOCTET(data[5])) {
775
+ case 0x10:
776
+ TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
777
+ break;
778
+ case 0x11:
779
+ TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
780
+ break;
781
+ case 0x13:
782
+ TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
783
+ break;
784
+ default:
785
+ TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
786
+ GETJOCTET(data[5]), (int) totallen);
787
+ break;
788
+ }
789
+ } else {
790
+ /* Start of APP0 does not match "JFIF" or "JFXX", or too short */
791
+ TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
792
+ }
793
+ }
794
+
795
+
796
+ LOCAL(void)
797
+ examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data,
798
+ unsigned int datalen, INT32 remaining)
799
+ /* Examine first few bytes from an APP14.
800
+ * Take appropriate action if it is an Adobe marker.
801
+ * datalen is # of bytes at data[], remaining is length of rest of marker data.
802
+ */
803
+ {
804
+ unsigned int version, flags0, flags1, transform;
805
+
806
+ if (datalen >= APP14_DATA_LEN &&
807
+ GETJOCTET(data[0]) == 0x41 &&
808
+ GETJOCTET(data[1]) == 0x64 &&
809
+ GETJOCTET(data[2]) == 0x6F &&
810
+ GETJOCTET(data[3]) == 0x62 &&
811
+ GETJOCTET(data[4]) == 0x65) {
812
+ /* Found Adobe APP14 marker */
813
+ version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
814
+ flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
815
+ flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
816
+ transform = GETJOCTET(data[11]);
817
+ TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
818
+ cinfo->saw_Adobe_marker = TRUE;
819
+ cinfo->Adobe_transform = (UINT8) transform;
820
+ } else {
821
+ /* Start of APP14 does not match "Adobe", or too short */
822
+ TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
823
+ }
824
+ }
825
+
826
+
827
+ METHODDEF(boolean)
828
+ get_interesting_appn (j_decompress_ptr cinfo)
829
+ /* Process an APP0 or APP14 marker without saving it */
830
+ {
831
+ INT32 length;
832
+ JOCTET b[APPN_DATA_LEN];
833
+ unsigned int i, numtoread;
834
+ INPUT_VARS(cinfo);
835
+
836
+ INPUT_2BYTES(cinfo, length, return FALSE);
837
+ length -= 2;
838
+
839
+ /* get the interesting part of the marker data */
840
+ if (length >= APPN_DATA_LEN)
841
+ numtoread = APPN_DATA_LEN;
842
+ else if (length > 0)
843
+ numtoread = (unsigned int) length;
844
+ else
845
+ numtoread = 0;
846
+ for (i = 0; i < numtoread; i++)
847
+ INPUT_BYTE(cinfo, b[i], return FALSE);
848
+ length -= numtoread;
849
+
850
+ /* process it */
851
+ switch (cinfo->unread_marker) {
852
+ case M_APP0:
853
+ examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length);
854
+ break;
855
+ case M_APP14:
856
+ examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length);
857
+ break;
858
+ default:
859
+ /* can't get here unless jpeg_save_markers chooses wrong processor */
860
+ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
861
+ break;
862
+ }
863
+
864
+ /* skip any remaining data -- could be lots */
865
+ INPUT_SYNC(cinfo);
866
+ if (length > 0)
867
+ (*cinfo->src->skip_input_data) (cinfo, (long) length);
868
+
869
+ return TRUE;
870
+ }
871
+
872
+
873
+ #ifdef SAVE_MARKERS_SUPPORTED
874
+
875
+ METHODDEF(boolean)
876
+ save_marker (j_decompress_ptr cinfo)
877
+ /* Save an APPn or COM marker into the marker list */
878
+ {
879
+ my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
880
+ jpeg_saved_marker_ptr cur_marker = marker->cur_marker;
881
+ unsigned int bytes_read, data_length;
882
+ JOCTET FAR * data;
883
+ INT32 length = 0;
884
+ INPUT_VARS(cinfo);
885
+
886
+ if (cur_marker == NULL) {
887
+ /* begin reading a marker */
888
+ INPUT_2BYTES(cinfo, length, return FALSE);
889
+ length -= 2;
890
+ if (length >= 0) { /* watch out for bogus length word */
891
+ /* figure out how much we want to save */
892
+ unsigned int limit;
893
+ if (cinfo->unread_marker == (int) M_COM)
894
+ limit = marker->length_limit_COM;
895
+ else
896
+ limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0];
897
+ if ((unsigned int) length < limit)
898
+ limit = (unsigned int) length;
899
+ /* allocate and initialize the marker item */
900
+ cur_marker = (jpeg_saved_marker_ptr)
901
+ (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
902
+ SIZEOF(struct jpeg_marker_struct) + limit);
903
+ cur_marker->next = NULL;
904
+ cur_marker->marker = (UINT8) cinfo->unread_marker;
905
+ cur_marker->original_length = (unsigned int) length;
906
+ cur_marker->data_length = limit;
907
+ /* data area is just beyond the jpeg_marker_struct */
908
+ data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1);
909
+ marker->cur_marker = cur_marker;
910
+ marker->bytes_read = 0;
911
+ bytes_read = 0;
912
+ data_length = limit;
913
+ } else {
914
+ /* deal with bogus length word */
915
+ bytes_read = data_length = 0;
916
+ data = NULL;
917
+ }
918
+ } else {
919
+ /* resume reading a marker */
920
+ bytes_read = marker->bytes_read;
921
+ data_length = cur_marker->data_length;
922
+ data = cur_marker->data + bytes_read;
923
+ }
924
+
925
+ while (bytes_read < data_length) {
926
+ INPUT_SYNC(cinfo); /* move the restart point to here */
927
+ marker->bytes_read = bytes_read;
928
+ /* If there's not at least one byte in buffer, suspend */
929
+ MAKE_BYTE_AVAIL(cinfo, return FALSE);
930
+ /* Copy bytes with reasonable rapidity */
931
+ while (bytes_read < data_length && bytes_in_buffer > 0) {
932
+ *data++ = *next_input_byte++;
933
+ bytes_in_buffer--;
934
+ bytes_read++;
935
+ }
936
+ }
937
+
938
+ /* Done reading what we want to read */
939
+ if (cur_marker != NULL) { /* will be NULL if bogus length word */
940
+ /* Add new marker to end of list */
941
+ if (cinfo->marker_list == NULL) {
942
+ cinfo->marker_list = cur_marker;
943
+ } else {
944
+ jpeg_saved_marker_ptr prev = cinfo->marker_list;
945
+ while (prev->next != NULL)
946
+ prev = prev->next;
947
+ prev->next = cur_marker;
948
+ }
949
+ /* Reset pointer & calc remaining data length */
950
+ data = cur_marker->data;
951
+ length = cur_marker->original_length - data_length;
952
+ }
953
+ /* Reset to initial state for next marker */
954
+ marker->cur_marker = NULL;
955
+
956
+ /* Process the marker if interesting; else just make a generic trace msg */
957
+ switch (cinfo->unread_marker) {
958
+ case M_APP0:
959
+ examine_app0(cinfo, data, data_length, length);
960
+ break;
961
+ case M_APP14:
962
+ examine_app14(cinfo, data, data_length, length);
963
+ break;
964
+ default:
965
+ TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker,
966
+ (int) (data_length + length));
967
+ break;
968
+ }
969
+
970
+ /* skip any remaining data -- could be lots */
971
+ INPUT_SYNC(cinfo); /* do before skip_input_data */
972
+ if (length > 0)
973
+ (*cinfo->src->skip_input_data) (cinfo, (long) length);
974
+
975
+ return TRUE;
976
+ }
977
+
978
+ #endif /* SAVE_MARKERS_SUPPORTED */
979
+
980
+
981
+ METHODDEF(boolean)
982
+ skip_variable (j_decompress_ptr cinfo)
983
+ /* Skip over an unknown or uninteresting variable-length marker */
984
+ {
985
+ INT32 length;
986
+ INPUT_VARS(cinfo);
987
+
988
+ INPUT_2BYTES(cinfo, length, return FALSE);
989
+ length -= 2;
990
+
991
+ TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length);
992
+
993
+ INPUT_SYNC(cinfo); /* do before skip_input_data */
994
+ if (length > 0)
995
+ (*cinfo->src->skip_input_data) (cinfo, (long) length);
996
+
997
+ return TRUE;
998
+ }
999
+
1000
+
1001
+ /*
1002
+ * Find the next JPEG marker, save it in cinfo->unread_marker.
1003
+ * Returns FALSE if had to suspend before reaching a marker;
1004
+ * in that case cinfo->unread_marker is unchanged.
1005
+ *
1006
+ * Note that the result might not be a valid marker code,
1007
+ * but it will never be 0 or FF.
1008
+ */
1009
+
1010
+ LOCAL(boolean)
1011
+ next_marker (j_decompress_ptr cinfo)
1012
+ {
1013
+ int c;
1014
+ INPUT_VARS(cinfo);
1015
+
1016
+ for (;;) {
1017
+ INPUT_BYTE(cinfo, c, return FALSE);
1018
+ /* Skip any non-FF bytes.
1019
+ * This may look a bit inefficient, but it will not occur in a valid file.
1020
+ * We sync after each discarded byte so that a suspending data source
1021
+ * can discard the byte from its buffer.
1022
+ */
1023
+ while (c != 0xFF) {
1024
+ cinfo->marker->discarded_bytes++;
1025
+ INPUT_SYNC(cinfo);
1026
+ INPUT_BYTE(cinfo, c, return FALSE);
1027
+ }
1028
+ /* This loop swallows any duplicate FF bytes. Extra FFs are legal as
1029
+ * pad bytes, so don't count them in discarded_bytes. We assume there
1030
+ * will not be so many consecutive FF bytes as to overflow a suspending
1031
+ * data source's input buffer.
1032
+ */
1033
+ do {
1034
+ INPUT_BYTE(cinfo, c, return FALSE);
1035
+ } while (c == 0xFF);
1036
+ if (c != 0)
1037
+ break; /* found a valid marker, exit loop */
1038
+ /* Reach here if we found a stuffed-zero data sequence (FF/00).
1039
+ * Discard it and loop back to try again.
1040
+ */
1041
+ cinfo->marker->discarded_bytes += 2;
1042
+ INPUT_SYNC(cinfo);
1043
+ }
1044
+
1045
+ if (cinfo->marker->discarded_bytes != 0) {
1046
+ WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
1047
+ cinfo->marker->discarded_bytes = 0;
1048
+ }
1049
+
1050
+ cinfo->unread_marker = c;
1051
+
1052
+ INPUT_SYNC(cinfo);
1053
+ return TRUE;
1054
+ }
1055
+
1056
+
1057
+ LOCAL(boolean)
1058
+ first_marker (j_decompress_ptr cinfo)
1059
+ /* Like next_marker, but used to obtain the initial SOI marker. */
1060
+ /* For this marker, we do not allow preceding garbage or fill; otherwise,
1061
+ * we might well scan an entire input file before realizing it ain't JPEG.
1062
+ * If an application wants to process non-JFIF files, it must seek to the
1063
+ * SOI before calling the JPEG library.
1064
+ */
1065
+ {
1066
+ int c, c2;
1067
+ INPUT_VARS(cinfo);
1068
+
1069
+ INPUT_BYTE(cinfo, c, return FALSE);
1070
+ INPUT_BYTE(cinfo, c2, return FALSE);
1071
+ if (c != 0xFF || c2 != (int) M_SOI)
1072
+ ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
1073
+
1074
+ cinfo->unread_marker = c2;
1075
+
1076
+ INPUT_SYNC(cinfo);
1077
+ return TRUE;
1078
+ }
1079
+
1080
+
1081
+ /*
1082
+ * Read markers until SOS or EOI.
1083
+ *
1084
+ * Returns same codes as are defined for jpeg_consume_input:
1085
+ * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
1086
+ *
1087
+ * Note: This function may return a pseudo SOS marker (with zero
1088
+ * component number) for treat by input controller's consume_input.
1089
+ * consume_input itself should filter out (skip) the pseudo marker
1090
+ * after processing for the caller.
1091
+ */
1092
+
1093
+ METHODDEF(int)
1094
+ read_markers (j_decompress_ptr cinfo)
1095
+ {
1096
+ /* Outer loop repeats once for each marker. */
1097
+ for (;;) {
1098
+ /* Collect the marker proper, unless we already did. */
1099
+ /* NB: first_marker() enforces the requirement that SOI appear first. */
1100
+ if (cinfo->unread_marker == 0) {
1101
+ if (! cinfo->marker->saw_SOI) {
1102
+ if (! first_marker(cinfo))
1103
+ return JPEG_SUSPENDED;
1104
+ } else {
1105
+ if (! next_marker(cinfo))
1106
+ return JPEG_SUSPENDED;
1107
+ }
1108
+ }
1109
+ /* At this point cinfo->unread_marker contains the marker code and the
1110
+ * input point is just past the marker proper, but before any parameters.
1111
+ * A suspension will cause us to return with this state still true.
1112
+ */
1113
+ switch (cinfo->unread_marker) {
1114
+ case M_SOI:
1115
+ if (! get_soi(cinfo))
1116
+ return JPEG_SUSPENDED;
1117
+ break;
1118
+
1119
+ case M_SOF0: /* Baseline */
1120
+ if (! get_sof(cinfo, TRUE, FALSE, FALSE))
1121
+ return JPEG_SUSPENDED;
1122
+ break;
1123
+
1124
+ case M_SOF1: /* Extended sequential, Huffman */
1125
+ if (! get_sof(cinfo, FALSE, FALSE, FALSE))
1126
+ return JPEG_SUSPENDED;
1127
+ break;
1128
+
1129
+ case M_SOF2: /* Progressive, Huffman */
1130
+ if (! get_sof(cinfo, FALSE, TRUE, FALSE))
1131
+ return JPEG_SUSPENDED;
1132
+ break;
1133
+
1134
+ case M_SOF9: /* Extended sequential, arithmetic */
1135
+ if (! get_sof(cinfo, FALSE, FALSE, TRUE))
1136
+ return JPEG_SUSPENDED;
1137
+ break;
1138
+
1139
+ case M_SOF10: /* Progressive, arithmetic */
1140
+ if (! get_sof(cinfo, FALSE, TRUE, TRUE))
1141
+ return JPEG_SUSPENDED;
1142
+ break;
1143
+
1144
+ /* Currently unsupported SOFn types */
1145
+ case M_SOF3: /* Lossless, Huffman */
1146
+ case M_SOF5: /* Differential sequential, Huffman */
1147
+ case M_SOF6: /* Differential progressive, Huffman */
1148
+ case M_SOF7: /* Differential lossless, Huffman */
1149
+ case M_JPG: /* Reserved for JPEG extensions */
1150
+ case M_SOF11: /* Lossless, arithmetic */
1151
+ case M_SOF13: /* Differential sequential, arithmetic */
1152
+ case M_SOF14: /* Differential progressive, arithmetic */
1153
+ case M_SOF15: /* Differential lossless, arithmetic */
1154
+ ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
1155
+ break;
1156
+
1157
+ case M_SOS:
1158
+ if (! get_sos(cinfo))
1159
+ return JPEG_SUSPENDED;
1160
+ cinfo->unread_marker = 0; /* processed the marker */
1161
+ return JPEG_REACHED_SOS;
1162
+
1163
+ case M_EOI:
1164
+ TRACEMS(cinfo, 1, JTRC_EOI);
1165
+ cinfo->unread_marker = 0; /* processed the marker */
1166
+ return JPEG_REACHED_EOI;
1167
+
1168
+ case M_DAC:
1169
+ if (! get_dac(cinfo))
1170
+ return JPEG_SUSPENDED;
1171
+ break;
1172
+
1173
+ case M_DHT:
1174
+ if (! get_dht(cinfo))
1175
+ return JPEG_SUSPENDED;
1176
+ break;
1177
+
1178
+ case M_DQT:
1179
+ if (! get_dqt(cinfo))
1180
+ return JPEG_SUSPENDED;
1181
+ break;
1182
+
1183
+ case M_DRI:
1184
+ if (! get_dri(cinfo))
1185
+ return JPEG_SUSPENDED;
1186
+ break;
1187
+
1188
+ case M_JPG8:
1189
+ if (! get_lse(cinfo))
1190
+ return JPEG_SUSPENDED;
1191
+ break;
1192
+
1193
+ case M_APP0:
1194
+ case M_APP1:
1195
+ case M_APP2:
1196
+ case M_APP3:
1197
+ case M_APP4:
1198
+ case M_APP5:
1199
+ case M_APP6:
1200
+ case M_APP7:
1201
+ case M_APP8:
1202
+ case M_APP9:
1203
+ case M_APP10:
1204
+ case M_APP11:
1205
+ case M_APP12:
1206
+ case M_APP13:
1207
+ case M_APP14:
1208
+ case M_APP15:
1209
+ if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[
1210
+ cinfo->unread_marker - (int) M_APP0]) (cinfo))
1211
+ return JPEG_SUSPENDED;
1212
+ break;
1213
+
1214
+ case M_COM:
1215
+ if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo))
1216
+ return JPEG_SUSPENDED;
1217
+ break;
1218
+
1219
+ case M_RST0: /* these are all parameterless */
1220
+ case M_RST1:
1221
+ case M_RST2:
1222
+ case M_RST3:
1223
+ case M_RST4:
1224
+ case M_RST5:
1225
+ case M_RST6:
1226
+ case M_RST7:
1227
+ case M_TEM:
1228
+ TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
1229
+ break;
1230
+
1231
+ case M_DNL: /* Ignore DNL ... perhaps the wrong thing */
1232
+ if (! skip_variable(cinfo))
1233
+ return JPEG_SUSPENDED;
1234
+ break;
1235
+
1236
+ default: /* must be DHP, EXP, JPGn, or RESn */
1237
+ /* For now, we treat the reserved markers as fatal errors since they are
1238
+ * likely to be used to signal incompatible JPEG Part 3 extensions.
1239
+ * Once the JPEG 3 version-number marker is well defined, this code
1240
+ * ought to change!
1241
+ */
1242
+ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
1243
+ break;
1244
+ }
1245
+ /* Successfully processed marker, so reset state variable */
1246
+ cinfo->unread_marker = 0;
1247
+ } /* end loop */
1248
+ }
1249
+
1250
+
1251
+ /*
1252
+ * Read a restart marker, which is expected to appear next in the datastream;
1253
+ * if the marker is not there, take appropriate recovery action.
1254
+ * Returns FALSE if suspension is required.
1255
+ *
1256
+ * This is called by the entropy decoder after it has read an appropriate
1257
+ * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder
1258
+ * has already read a marker from the data source. Under normal conditions
1259
+ * cinfo->unread_marker will be reset to 0 before returning; if not reset,
1260
+ * it holds a marker which the decoder will be unable to read past.
1261
+ */
1262
+
1263
+ METHODDEF(boolean)
1264
+ read_restart_marker (j_decompress_ptr cinfo)
1265
+ {
1266
+ /* Obtain a marker unless we already did. */
1267
+ /* Note that next_marker will complain if it skips any data. */
1268
+ if (cinfo->unread_marker == 0) {
1269
+ if (! next_marker(cinfo))
1270
+ return FALSE;
1271
+ }
1272
+
1273
+ if (cinfo->unread_marker ==
1274
+ ((int) M_RST0 + cinfo->marker->next_restart_num)) {
1275
+ /* Normal case --- swallow the marker and let entropy decoder continue */
1276
+ TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
1277
+ cinfo->unread_marker = 0;
1278
+ } else {
1279
+ /* Uh-oh, the restart markers have been messed up. */
1280
+ /* Let the data source manager determine how to resync. */
1281
+ if (! (*cinfo->src->resync_to_restart) (cinfo,
1282
+ cinfo->marker->next_restart_num))
1283
+ return FALSE;
1284
+ }
1285
+
1286
+ /* Update next-restart state */
1287
+ cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
1288
+
1289
+ return TRUE;
1290
+ }
1291
+
1292
+
1293
+ /*
1294
+ * This is the default resync_to_restart method for data source managers
1295
+ * to use if they don't have any better approach. Some data source managers
1296
+ * may be able to back up, or may have additional knowledge about the data
1297
+ * which permits a more intelligent recovery strategy; such managers would
1298
+ * presumably supply their own resync method.
1299
+ *
1300
+ * read_restart_marker calls resync_to_restart if it finds a marker other than
1301
+ * the restart marker it was expecting. (This code is *not* used unless
1302
+ * a nonzero restart interval has been declared.) cinfo->unread_marker is
1303
+ * the marker code actually found (might be anything, except 0 or FF).
1304
+ * The desired restart marker number (0..7) is passed as a parameter.
1305
+ * This routine is supposed to apply whatever error recovery strategy seems
1306
+ * appropriate in order to position the input stream to the next data segment.
1307
+ * Note that cinfo->unread_marker is treated as a marker appearing before
1308
+ * the current data-source input point; usually it should be reset to zero
1309
+ * before returning.
1310
+ * Returns FALSE if suspension is required.
1311
+ *
1312
+ * This implementation is substantially constrained by wanting to treat the
1313
+ * input as a data stream; this means we can't back up. Therefore, we have
1314
+ * only the following actions to work with:
1315
+ * 1. Simply discard the marker and let the entropy decoder resume at next
1316
+ * byte of file.
1317
+ * 2. Read forward until we find another marker, discarding intervening
1318
+ * data. (In theory we could look ahead within the current bufferload,
1319
+ * without having to discard data if we don't find the desired marker.
1320
+ * This idea is not implemented here, in part because it makes behavior
1321
+ * dependent on buffer size and chance buffer-boundary positions.)
1322
+ * 3. Leave the marker unread (by failing to zero cinfo->unread_marker).
1323
+ * This will cause the entropy decoder to process an empty data segment,
1324
+ * inserting dummy zeroes, and then we will reprocess the marker.
1325
+ *
1326
+ * #2 is appropriate if we think the desired marker lies ahead, while #3 is
1327
+ * appropriate if the found marker is a future restart marker (indicating
1328
+ * that we have missed the desired restart marker, probably because it got
1329
+ * corrupted).
1330
+ * We apply #2 or #3 if the found marker is a restart marker no more than
1331
+ * two counts behind or ahead of the expected one. We also apply #2 if the
1332
+ * found marker is not a legal JPEG marker code (it's certainly bogus data).
1333
+ * If the found marker is a restart marker more than 2 counts away, we do #1
1334
+ * (too much risk that the marker is erroneous; with luck we will be able to
1335
+ * resync at some future point).
1336
+ * For any valid non-restart JPEG marker, we apply #3. This keeps us from
1337
+ * overrunning the end of a scan. An implementation limited to single-scan
1338
+ * files might find it better to apply #2 for markers other than EOI, since
1339
+ * any other marker would have to be bogus data in that case.
1340
+ */
1341
+
1342
+ GLOBAL(boolean)
1343
+ jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired)
1344
+ {
1345
+ int marker = cinfo->unread_marker;
1346
+ int action = 1;
1347
+
1348
+ /* Always put up a warning. */
1349
+ WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
1350
+
1351
+ /* Outer loop handles repeated decision after scanning forward. */
1352
+ for (;;) {
1353
+ if (marker < (int) M_SOF0)
1354
+ action = 2; /* invalid marker */
1355
+ else if (marker < (int) M_RST0 || marker > (int) M_RST7)
1356
+ action = 3; /* valid non-restart marker */
1357
+ else {
1358
+ if (marker == ((int) M_RST0 + ((desired+1) & 7)) ||
1359
+ marker == ((int) M_RST0 + ((desired+2) & 7)))
1360
+ action = 3; /* one of the next two expected restarts */
1361
+ else if (marker == ((int) M_RST0 + ((desired-1) & 7)) ||
1362
+ marker == ((int) M_RST0 + ((desired-2) & 7)))
1363
+ action = 2; /* a prior restart, so advance */
1364
+ else
1365
+ action = 1; /* desired restart or too far away */
1366
+ }
1367
+ TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
1368
+ switch (action) {
1369
+ case 1:
1370
+ /* Discard marker and let entropy decoder resume processing. */
1371
+ cinfo->unread_marker = 0;
1372
+ return TRUE;
1373
+ case 2:
1374
+ /* Scan to the next marker, and repeat the decision loop. */
1375
+ if (! next_marker(cinfo))
1376
+ return FALSE;
1377
+ marker = cinfo->unread_marker;
1378
+ break;
1379
+ case 3:
1380
+ /* Return without advancing past this marker. */
1381
+ /* Entropy decoder will be forced to process an empty segment. */
1382
+ return TRUE;
1383
+ }
1384
+ } /* end loop */
1385
+ }
1386
+
1387
+
1388
+ /*
1389
+ * Reset marker processing state to begin a fresh datastream.
1390
+ */
1391
+
1392
+ METHODDEF(void)
1393
+ reset_marker_reader (j_decompress_ptr cinfo)
1394
+ {
1395
+ my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1396
+
1397
+ cinfo->comp_info = NULL; /* until allocated by get_sof */
1398
+ cinfo->input_scan_number = 0; /* no SOS seen yet */
1399
+ cinfo->unread_marker = 0; /* no pending marker */
1400
+ marker->pub.saw_SOI = FALSE; /* set internal state too */
1401
+ marker->pub.saw_SOF = FALSE;
1402
+ marker->pub.discarded_bytes = 0;
1403
+ marker->cur_marker = NULL;
1404
+ }
1405
+
1406
+
1407
+ /*
1408
+ * Initialize the marker reader module.
1409
+ * This is called only once, when the decompression object is created.
1410
+ */
1411
+
1412
+ GLOBAL(void)
1413
+ jinit_marker_reader (j_decompress_ptr cinfo)
1414
+ {
1415
+ my_marker_ptr marker;
1416
+ int i;
1417
+
1418
+ /* Create subobject in permanent pool */
1419
+ marker = (my_marker_ptr)
1420
+ (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
1421
+ SIZEOF(my_marker_reader));
1422
+ cinfo->marker = &marker->pub;
1423
+ /* Initialize public method pointers */
1424
+ marker->pub.reset_marker_reader = reset_marker_reader;
1425
+ marker->pub.read_markers = read_markers;
1426
+ marker->pub.read_restart_marker = read_restart_marker;
1427
+ /* Initialize COM/APPn processing.
1428
+ * By default, we examine and then discard APP0 and APP14,
1429
+ * but simply discard COM and all other APPn.
1430
+ */
1431
+ marker->process_COM = skip_variable;
1432
+ marker->length_limit_COM = 0;
1433
+ for (i = 0; i < 16; i++) {
1434
+ marker->process_APPn[i] = skip_variable;
1435
+ marker->length_limit_APPn[i] = 0;
1436
+ }
1437
+ marker->process_APPn[0] = get_interesting_appn;
1438
+ marker->process_APPn[14] = get_interesting_appn;
1439
+ /* Reset marker processing state */
1440
+ reset_marker_reader(cinfo);
1441
+ }
1442
+
1443
+
1444
+ /*
1445
+ * Control saving of COM and APPn markers into marker_list.
1446
+ */
1447
+
1448
+ #ifdef SAVE_MARKERS_SUPPORTED
1449
+
1450
+ GLOBAL(void)
1451
+ jpeg_save_markers (j_decompress_ptr cinfo, int marker_code,
1452
+ unsigned int length_limit)
1453
+ {
1454
+ my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1455
+ long maxlength;
1456
+ jpeg_marker_parser_method processor;
1457
+
1458
+ /* Length limit mustn't be larger than what we can allocate
1459
+ * (should only be a concern in a 16-bit environment).
1460
+ */
1461
+ maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct);
1462
+ if (((long) length_limit) > maxlength)
1463
+ length_limit = (unsigned int) maxlength;
1464
+
1465
+ /* Choose processor routine to use.
1466
+ * APP0/APP14 have special requirements.
1467
+ */
1468
+ if (length_limit) {
1469
+ processor = save_marker;
1470
+ /* If saving APP0/APP14, save at least enough for our internal use. */
1471
+ if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN)
1472
+ length_limit = APP0_DATA_LEN;
1473
+ else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN)
1474
+ length_limit = APP14_DATA_LEN;
1475
+ } else {
1476
+ processor = skip_variable;
1477
+ /* If discarding APP0/APP14, use our regular on-the-fly processor. */
1478
+ if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14)
1479
+ processor = get_interesting_appn;
1480
+ }
1481
+
1482
+ if (marker_code == (int) M_COM) {
1483
+ marker->process_COM = processor;
1484
+ marker->length_limit_COM = length_limit;
1485
+ } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) {
1486
+ marker->process_APPn[marker_code - (int) M_APP0] = processor;
1487
+ marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit;
1488
+ } else
1489
+ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
1490
+ }
1491
+
1492
+ #endif /* SAVE_MARKERS_SUPPORTED */
1493
+
1494
+
1495
+ /*
1496
+ * Install a special processing method for COM or APPn markers.
1497
+ */
1498
+
1499
+ GLOBAL(void)
1500
+ jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code,
1501
+ jpeg_marker_parser_method routine)
1502
+ {
1503
+ my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1504
+
1505
+ if (marker_code == (int) M_COM)
1506
+ marker->process_COM = routine;
1507
+ else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15)
1508
+ marker->process_APPn[marker_code - (int) M_APP0] = routine;
1509
+ else
1510
+ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
1511
+ }