rfreeimage 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,2501 @@
1
+ /* $Id: tif_ojpeg.c,v 1.11 2015/02/19 22:39:58 drolon Exp $ */
2
+
3
+ /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0
4
+ specification is now totally obsolete and deprecated for new applications and
5
+ images. This file was was created solely in order to read unconverted images
6
+ still present on some users' computer systems. It will never be extended
7
+ to write such files. Writing new-style JPEG compressed TIFFs is implemented
8
+ in tif_jpeg.c.
9
+
10
+ The code is carefully crafted to robustly read all gathered JPEG-in-TIFF
11
+ testfiles, and anticipate as much as possible all other... But still, it may
12
+ fail on some. If you encounter problems, please report them on the TIFF
13
+ mailing list and/or to Joris Van Damme <info@awaresystems.be>.
14
+
15
+ Please read the file called "TIFF Technical Note #2" if you need to be
16
+ convinced this compression scheme is bad and breaks TIFF. That document
17
+ is linked to from the LibTiff site <http://www.remotesensing.org/libtiff/>
18
+ and from AWare Systems' TIFF section
19
+ <http://www.awaresystems.be/imaging/tiff.html>. It is also absorbed
20
+ in Adobe's specification supplements, marked "draft" up to this day, but
21
+ supported by the TIFF community.
22
+
23
+ This file interfaces with Release 6B of the JPEG Library written by the
24
+ Independent JPEG Group. Previous versions of this file required a hack inside
25
+ the LibJpeg library. This version no longer requires that. Remember to
26
+ remove the hack if you update from the old version.
27
+
28
+ Copyright (c) Joris Van Damme <info@awaresystems.be>
29
+ Copyright (c) AWare Systems <http://www.awaresystems.be/>
30
+
31
+ The licence agreement for this file is the same as the rest of the LibTiff
32
+ library.
33
+
34
+ IN NO EVENT SHALL JORIS VAN DAMME OR AWARE SYSTEMS BE LIABLE FOR
35
+ ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
36
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
37
+ WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
38
+ LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
39
+ OF THIS SOFTWARE.
40
+
41
+ Joris Van Damme and/or AWare Systems may be available for custom
42
+ development. If you like what you see, and need anything similar or related,
43
+ contact <info@awaresystems.be>.
44
+ */
45
+
46
+ /* What is what, and what is not?
47
+
48
+ This decoder starts with an input stream, that is essentially the JpegInterchangeFormat
49
+ stream, if any, followed by the strile data, if any. This stream is read in
50
+ OJPEGReadByte and related functions.
51
+
52
+ It analyzes the start of this stream, until it encounters non-marker data, i.e.
53
+ compressed image data. Some of the header markers it sees have no actual content,
54
+ like the SOI marker, and APP/COM markers that really shouldn't even be there. Some
55
+ other markers do have content, and the valuable bits and pieces of information
56
+ in these markers are saved, checking all to verify that the stream is more or
57
+ less within expected bounds. This happens inside the OJPEGReadHeaderInfoSecStreamXxx
58
+ functions.
59
+
60
+ Some OJPEG imagery contains no valid JPEG header markers. This situation is picked
61
+ up on if we've seen no SOF marker when we're at the start of the compressed image
62
+ data. In this case, the tables are read from JpegXxxTables tags, and the other
63
+ bits and pieces of information is initialized to its most basic value. This is
64
+ implemented in the OJPEGReadHeaderInfoSecTablesXxx functions.
65
+
66
+ When this is complete, a good and valid JPEG header can be assembled, and this is
67
+ passed through to LibJpeg. When that's done, the remainder of the input stream, i.e.
68
+ the compressed image data, can be passed through unchanged. This is done in
69
+ OJPEGWriteStream functions.
70
+
71
+ LibTiff rightly expects to know the subsampling values before decompression. Just like
72
+ in new-style JPEG-in-TIFF, though, or even more so, actually, the YCbCrsubsampling
73
+ tag is notoriously unreliable. To correct these tag values with the ones inside
74
+ the JPEG stream, the first part of the input stream is pre-scanned in
75
+ OJPEGSubsamplingCorrect, making no note of any other data, reporting no warnings
76
+ or errors, up to the point where either these values are read, or it's clear they
77
+ aren't there. This means that some of the data is read twice, but we feel speed
78
+ in correcting these values is important enough to warrant this sacrifice. Allthough
79
+ there is currently no define or other configuration mechanism to disable this behaviour,
80
+ the actual header scanning is build to robustly respond with error report if it
81
+ should encounter an uncorrected mismatch of subsampling values. See
82
+ OJPEGReadHeaderInfoSecStreamSof.
83
+
84
+ The restart interval and restart markers are the most tricky part... The restart
85
+ interval can be specified in a tag. It can also be set inside the input JPEG stream.
86
+ It can be used inside the input JPEG stream. If reading from strile data, we've
87
+ consistenly discovered the need to insert restart markers in between the different
88
+ striles, as is also probably the most likely interpretation of the original TIFF 6.0
89
+ specification. With all this setting of interval, and actual use of markers that is not
90
+ predictable at the time of valid JPEG header assembly, the restart thing may turn
91
+ out the Achilles heel of this implementation. Fortunately, most OJPEG writer vendors
92
+ succeed in reading back what they write, which may be the reason why we've been able
93
+ to discover ways that seem to work.
94
+
95
+ Some special provision is made for planarconfig separate OJPEG files. These seem
96
+ to consistently contain header info, a SOS marker, a plane, SOS marker, plane, SOS,
97
+ and plane. This may or may not be a valid JPEG configuration, we don't know and don't
98
+ care. We want LibTiff to be able to access the planes individually, without huge
99
+ buffering inside LibJpeg, anyway. So we compose headers to feed to LibJpeg, in this
100
+ case, that allow us to pass a single plane such that LibJpeg sees a valid
101
+ single-channel JPEG stream. Locating subsequent SOS markers, and thus subsequent
102
+ planes, is done inside OJPEGReadSecondarySos.
103
+
104
+ The benefit of the scheme is... that it works, basically. We know of no other that
105
+ does. It works without checking software tag, or otherwise going about things in an
106
+ OJPEG flavor specific manner. Instead, it is a single scheme, that covers the cases
107
+ with and without JpegInterchangeFormat, with and without striles, with part of
108
+ the header in JpegInterchangeFormat and remainder in first strile, etc. It is forgiving
109
+ and robust, may likely work with OJPEG flavors we've not seen yet, and makes most out
110
+ of the data.
111
+
112
+ Another nice side-effect is that a complete JPEG single valid stream is build if
113
+ planarconfig is not separate (vast majority). We may one day use that to build
114
+ converters to JPEG, and/or to new-style JPEG compression inside TIFF.
115
+
116
+ A dissadvantage is the lack of random access to the individual striles. This is the
117
+ reason for much of the complicated restart-and-position stuff inside OJPEGPreDecode.
118
+ Applications would do well accessing all striles in order, as this will result in
119
+ a single sequential scan of the input stream, and no restarting of LibJpeg decoding
120
+ session.
121
+ */
122
+
123
+ #define WIN32_LEAN_AND_MEAN
124
+ #define VC_EXTRALEAN
125
+
126
+ #include "tiffiop.h"
127
+ #ifdef OJPEG_SUPPORT
128
+
129
+ /* Configuration defines here are:
130
+ * JPEG_ENCAP_EXTERNAL: The normal way to call libjpeg, uses longjump. In some environments,
131
+ * like eg LibTiffDelphi, this is not possible. For this reason, the actual calls to
132
+ * libjpeg, with longjump stuff, are encapsulated in dedicated functions. When
133
+ * JPEG_ENCAP_EXTERNAL is defined, these encapsulating functions are declared external
134
+ * to this unit, and can be defined elsewhere to use stuff other then longjump.
135
+ * The default mode, without JPEG_ENCAP_EXTERNAL, implements the call encapsulators
136
+ * here, internally, with normal longjump.
137
+ * SETJMP, LONGJMP, JMP_BUF: On some machines/environments a longjump equivalent is
138
+ * conviniently available, but still it may be worthwhile to use _setjmp or sigsetjmp
139
+ * in place of plain setjmp. These macros will make it easier. It is useless
140
+ * to fiddle with these if you define JPEG_ENCAP_EXTERNAL.
141
+ * OJPEG_BUFFER: Define the size of the desired buffer here. Should be small enough so as to guarantee
142
+ * instant processing, optimal streaming and optimal use of processor cache, but also big
143
+ * enough so as to not result in significant call overhead. It should be at least a few
144
+ * bytes to accommodate some structures (this is verified in asserts), but it would not be
145
+ * sensible to make it this small anyway, and it should be at most 64K since it is indexed
146
+ * with uint16. We recommend 2K.
147
+ * EGYPTIANWALK: You could also define EGYPTIANWALK here, but it is not used anywhere and has
148
+ * absolutely no effect. That is why most people insist the EGYPTIANWALK is a bit silly.
149
+ */
150
+
151
+ /* define LIBJPEG_ENCAP_EXTERNAL */
152
+ #define SETJMP(jbuf) setjmp(jbuf)
153
+ #define LONGJMP(jbuf,code) longjmp(jbuf,code)
154
+ #define JMP_BUF jmp_buf
155
+ #define OJPEG_BUFFER 2048
156
+ /* define EGYPTIANWALK */
157
+
158
+ #define JPEG_MARKER_SOF0 0xC0
159
+ #define JPEG_MARKER_SOF1 0xC1
160
+ #define JPEG_MARKER_SOF3 0xC3
161
+ #define JPEG_MARKER_DHT 0xC4
162
+ #define JPEG_MARKER_RST0 0XD0
163
+ #define JPEG_MARKER_SOI 0xD8
164
+ #define JPEG_MARKER_EOI 0xD9
165
+ #define JPEG_MARKER_SOS 0xDA
166
+ #define JPEG_MARKER_DQT 0xDB
167
+ #define JPEG_MARKER_DRI 0xDD
168
+ #define JPEG_MARKER_APP0 0xE0
169
+ #define JPEG_MARKER_COM 0xFE
170
+
171
+ #define FIELD_OJPEG_JPEGINTERCHANGEFORMAT (FIELD_CODEC+0)
172
+ #define FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH (FIELD_CODEC+1)
173
+ #define FIELD_OJPEG_JPEGQTABLES (FIELD_CODEC+2)
174
+ #define FIELD_OJPEG_JPEGDCTABLES (FIELD_CODEC+3)
175
+ #define FIELD_OJPEG_JPEGACTABLES (FIELD_CODEC+4)
176
+ #define FIELD_OJPEG_JPEGPROC (FIELD_CODEC+5)
177
+ #define FIELD_OJPEG_JPEGRESTARTINTERVAL (FIELD_CODEC+6)
178
+
179
+ static const TIFFField ojpegFields[] = {
180
+ {TIFFTAG_JPEGIFOFFSET,1,1,TIFF_LONG8,0,TIFF_SETGET_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGINTERCHANGEFORMAT,TRUE,FALSE,"JpegInterchangeFormat",NULL},
181
+ {TIFFTAG_JPEGIFBYTECOUNT,1,1,TIFF_LONG8,0,TIFF_SETGET_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH,TRUE,FALSE,"JpegInterchangeFormatLength",NULL},
182
+ {TIFFTAG_JPEGQTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGQTABLES,FALSE,TRUE,"JpegQTables",NULL},
183
+ {TIFFTAG_JPEGDCTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGDCTABLES,FALSE,TRUE,"JpegDcTables",NULL},
184
+ {TIFFTAG_JPEGACTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGACTABLES,FALSE,TRUE,"JpegAcTables",NULL},
185
+ {TIFFTAG_JPEGPROC,1,1,TIFF_SHORT,0,TIFF_SETGET_UINT16,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGPROC,FALSE,FALSE,"JpegProc",NULL},
186
+ {TIFFTAG_JPEGRESTARTINTERVAL,1,1,TIFF_SHORT,0,TIFF_SETGET_UINT16,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGRESTARTINTERVAL,FALSE,FALSE,"JpegRestartInterval",NULL},
187
+ };
188
+
189
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
190
+ #include <setjmp.h>
191
+ #endif
192
+
193
+ /* We undefine FAR to avoid conflict with JPEG definition */
194
+
195
+ #ifdef FAR
196
+ #undef FAR
197
+ #endif
198
+
199
+ /*
200
+ Libjpeg's jmorecfg.h defines INT16 and INT32, but only if XMD_H is
201
+ not defined. Unfortunately, the MinGW and Borland compilers include
202
+ a typedef for INT32, which causes a conflict. MSVC does not include
203
+ a conficting typedef given the headers which are included.
204
+ */
205
+ #if defined(__BORLANDC__) || defined(__MINGW32__)
206
+ # define XMD_H 1
207
+ #endif
208
+
209
+ /* Define "boolean" as unsigned char, not int, per Windows custom. */
210
+ #if defined(__WIN32__) && !defined(__MINGW32__)
211
+ # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
212
+ typedef unsigned char boolean;
213
+ # endif
214
+ # define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
215
+ #endif
216
+
217
+ #include "../LibJPEG/jpeglib.h"
218
+ #include "../LibJPEG/jerror.h"
219
+
220
+ typedef struct jpeg_error_mgr jpeg_error_mgr;
221
+ typedef struct jpeg_common_struct jpeg_common_struct;
222
+ typedef struct jpeg_decompress_struct jpeg_decompress_struct;
223
+ typedef struct jpeg_source_mgr jpeg_source_mgr;
224
+
225
+ typedef enum {
226
+ osibsNotSetYet,
227
+ osibsJpegInterchangeFormat,
228
+ osibsStrile,
229
+ osibsEof
230
+ } OJPEGStateInBufferSource;
231
+
232
+ typedef enum {
233
+ ososSoi,
234
+ ososQTable0,ososQTable1,ososQTable2,ososQTable3,
235
+ ososDcTable0,ososDcTable1,ososDcTable2,ososDcTable3,
236
+ ososAcTable0,ososAcTable1,ososAcTable2,ososAcTable3,
237
+ ososDri,
238
+ ososSof,
239
+ ososSos,
240
+ ososCompressed,
241
+ ososRst,
242
+ ososEoi
243
+ } OJPEGStateOutState;
244
+
245
+ typedef struct {
246
+ TIFF* tif;
247
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
248
+ JMP_BUF exit_jmpbuf;
249
+ #endif
250
+ TIFFVGetMethod vgetparent;
251
+ TIFFVSetMethod vsetparent;
252
+ TIFFPrintMethod printdir;
253
+ uint64 file_size;
254
+ uint32 image_width;
255
+ uint32 image_length;
256
+ uint32 strile_width;
257
+ uint32 strile_length;
258
+ uint32 strile_length_total;
259
+ uint8 samples_per_pixel;
260
+ uint8 plane_sample_offset;
261
+ uint8 samples_per_pixel_per_plane;
262
+ uint64 jpeg_interchange_format;
263
+ uint64 jpeg_interchange_format_length;
264
+ uint8 jpeg_proc;
265
+ uint8 subsamplingcorrect;
266
+ uint8 subsamplingcorrect_done;
267
+ uint8 subsampling_tag;
268
+ uint8 subsampling_hor;
269
+ uint8 subsampling_ver;
270
+ uint8 subsampling_force_desubsampling_inside_decompression;
271
+ uint8 qtable_offset_count;
272
+ uint8 dctable_offset_count;
273
+ uint8 actable_offset_count;
274
+ uint64 qtable_offset[3];
275
+ uint64 dctable_offset[3];
276
+ uint64 actable_offset[3];
277
+ uint8* qtable[4];
278
+ uint8* dctable[4];
279
+ uint8* actable[4];
280
+ uint16 restart_interval;
281
+ uint8 restart_index;
282
+ uint8 sof_log;
283
+ uint8 sof_marker_id;
284
+ uint32 sof_x;
285
+ uint32 sof_y;
286
+ uint8 sof_c[3];
287
+ uint8 sof_hv[3];
288
+ uint8 sof_tq[3];
289
+ uint8 sos_cs[3];
290
+ uint8 sos_tda[3];
291
+ struct {
292
+ uint8 log;
293
+ OJPEGStateInBufferSource in_buffer_source;
294
+ uint32 in_buffer_next_strile;
295
+ uint64 in_buffer_file_pos;
296
+ uint64 in_buffer_file_togo;
297
+ } sos_end[3];
298
+ uint8 readheader_done;
299
+ uint8 writeheader_done;
300
+ uint16 write_cursample;
301
+ uint32 write_curstrile;
302
+ uint8 libjpeg_session_active;
303
+ uint8 libjpeg_jpeg_query_style;
304
+ jpeg_error_mgr libjpeg_jpeg_error_mgr;
305
+ jpeg_decompress_struct libjpeg_jpeg_decompress_struct;
306
+ jpeg_source_mgr libjpeg_jpeg_source_mgr;
307
+ uint8 subsampling_convert_log;
308
+ uint32 subsampling_convert_ylinelen;
309
+ uint32 subsampling_convert_ylines;
310
+ uint32 subsampling_convert_clinelen;
311
+ uint32 subsampling_convert_clines;
312
+ uint32 subsampling_convert_ybuflen;
313
+ uint32 subsampling_convert_cbuflen;
314
+ uint32 subsampling_convert_ycbcrbuflen;
315
+ uint8* subsampling_convert_ycbcrbuf;
316
+ uint8* subsampling_convert_ybuf;
317
+ uint8* subsampling_convert_cbbuf;
318
+ uint8* subsampling_convert_crbuf;
319
+ uint32 subsampling_convert_ycbcrimagelen;
320
+ uint8** subsampling_convert_ycbcrimage;
321
+ uint32 subsampling_convert_clinelenout;
322
+ uint32 subsampling_convert_state;
323
+ uint32 bytes_per_line; /* if the codec outputs subsampled data, a 'line' in bytes_per_line */
324
+ uint32 lines_per_strile; /* and lines_per_strile means subsampling_ver desubsampled rows */
325
+ OJPEGStateInBufferSource in_buffer_source;
326
+ uint32 in_buffer_next_strile;
327
+ uint32 in_buffer_strile_count;
328
+ uint64 in_buffer_file_pos;
329
+ uint8 in_buffer_file_pos_log;
330
+ uint64 in_buffer_file_togo;
331
+ uint16 in_buffer_togo;
332
+ uint8* in_buffer_cur;
333
+ uint8 in_buffer[OJPEG_BUFFER];
334
+ OJPEGStateOutState out_state;
335
+ uint8 out_buffer[OJPEG_BUFFER];
336
+ uint8* skip_buffer;
337
+ } OJPEGState;
338
+
339
+ static int OJPEGVGetField(TIFF* tif, uint32 tag, va_list ap);
340
+ static int OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap);
341
+ static void OJPEGPrintDir(TIFF* tif, FILE* fd, long flags);
342
+
343
+ static int OJPEGFixupTags(TIFF* tif);
344
+ static int OJPEGSetupDecode(TIFF* tif);
345
+ static int OJPEGPreDecode(TIFF* tif, uint16 s);
346
+ static int OJPEGPreDecodeSkipRaw(TIFF* tif);
347
+ static int OJPEGPreDecodeSkipScanlines(TIFF* tif);
348
+ static int OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s);
349
+ static int OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc);
350
+ static int OJPEGDecodeScanlines(TIFF* tif, uint8* buf, tmsize_t cc);
351
+ static void OJPEGPostDecode(TIFF* tif, uint8* buf, tmsize_t cc);
352
+ static int OJPEGSetupEncode(TIFF* tif);
353
+ static int OJPEGPreEncode(TIFF* tif, uint16 s);
354
+ static int OJPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s);
355
+ static int OJPEGPostEncode(TIFF* tif);
356
+ static void OJPEGCleanup(TIFF* tif);
357
+
358
+ static void OJPEGSubsamplingCorrect(TIFF* tif);
359
+ static int OJPEGReadHeaderInfo(TIFF* tif);
360
+ static int OJPEGReadSecondarySos(TIFF* tif, uint16 s);
361
+ static int OJPEGWriteHeaderInfo(TIFF* tif);
362
+ static void OJPEGLibjpegSessionAbort(TIFF* tif);
363
+
364
+ static int OJPEGReadHeaderInfoSec(TIFF* tif);
365
+ static int OJPEGReadHeaderInfoSecStreamDri(TIFF* tif);
366
+ static int OJPEGReadHeaderInfoSecStreamDqt(TIFF* tif);
367
+ static int OJPEGReadHeaderInfoSecStreamDht(TIFF* tif);
368
+ static int OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id);
369
+ static int OJPEGReadHeaderInfoSecStreamSos(TIFF* tif);
370
+ static int OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif);
371
+ static int OJPEGReadHeaderInfoSecTablesDcTable(TIFF* tif);
372
+ static int OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif);
373
+
374
+ static int OJPEGReadBufferFill(OJPEGState* sp);
375
+ static int OJPEGReadByte(OJPEGState* sp, uint8* byte);
376
+ static int OJPEGReadBytePeek(OJPEGState* sp, uint8* byte);
377
+ static void OJPEGReadByteAdvance(OJPEGState* sp);
378
+ static int OJPEGReadWord(OJPEGState* sp, uint16* word);
379
+ static int OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem);
380
+ static void OJPEGReadSkip(OJPEGState* sp, uint16 len);
381
+
382
+ static int OJPEGWriteStream(TIFF* tif, void** mem, uint32* len);
383
+ static void OJPEGWriteStreamSoi(TIFF* tif, void** mem, uint32* len);
384
+ static void OJPEGWriteStreamQTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
385
+ static void OJPEGWriteStreamDcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
386
+ static void OJPEGWriteStreamAcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
387
+ static void OJPEGWriteStreamDri(TIFF* tif, void** mem, uint32* len);
388
+ static void OJPEGWriteStreamSof(TIFF* tif, void** mem, uint32* len);
389
+ static void OJPEGWriteStreamSos(TIFF* tif, void** mem, uint32* len);
390
+ static int OJPEGWriteStreamCompressed(TIFF* tif, void** mem, uint32* len);
391
+ static void OJPEGWriteStreamRst(TIFF* tif, void** mem, uint32* len);
392
+ static void OJPEGWriteStreamEoi(TIFF* tif, void** mem, uint32* len);
393
+
394
+ #ifdef LIBJPEG_ENCAP_EXTERNAL
395
+ extern int jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
396
+ extern int jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image);
397
+ extern int jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
398
+ extern int jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines);
399
+ extern int jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines);
400
+ extern void jpeg_encap_unwind(TIFF* tif);
401
+ #else
402
+ static int jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* j);
403
+ static int jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image);
404
+ static int jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
405
+ static int jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines);
406
+ static int jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines);
407
+ static void jpeg_encap_unwind(TIFF* tif);
408
+ #endif
409
+
410
+ static void OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo);
411
+ static void OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo);
412
+ static void OJPEGLibjpegJpegSourceMgrInitSource(jpeg_decompress_struct* cinfo);
413
+ static boolean OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo);
414
+ static void OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_bytes);
415
+ static boolean OJPEGLibjpegJpegSourceMgrResyncToRestart(jpeg_decompress_struct* cinfo, int desired);
416
+ static void OJPEGLibjpegJpegSourceMgrTermSource(jpeg_decompress_struct* cinfo);
417
+
418
+ int
419
+ TIFFInitOJPEG(TIFF* tif, int scheme)
420
+ {
421
+ static const char module[]="TIFFInitOJPEG";
422
+ OJPEGState* sp;
423
+
424
+ assert(scheme==COMPRESSION_OJPEG);
425
+
426
+ /*
427
+ * Merge codec-specific tag information.
428
+ */
429
+ if (!_TIFFMergeFields(tif, ojpegFields, TIFFArrayCount(ojpegFields))) {
430
+ TIFFErrorExt(tif->tif_clientdata, module,
431
+ "Merging Old JPEG codec-specific tags failed");
432
+ return 0;
433
+ }
434
+
435
+ /* state block */
436
+ sp=_TIFFmalloc(sizeof(OJPEGState));
437
+ if (sp==NULL)
438
+ {
439
+ TIFFErrorExt(tif->tif_clientdata,module,"No space for OJPEG state block");
440
+ return(0);
441
+ }
442
+ _TIFFmemset(sp,0,sizeof(OJPEGState));
443
+ sp->tif=tif;
444
+ sp->jpeg_proc=1;
445
+ sp->subsampling_hor=2;
446
+ sp->subsampling_ver=2;
447
+ TIFFSetField(tif,TIFFTAG_YCBCRSUBSAMPLING,2,2);
448
+ /* tif codec methods */
449
+ tif->tif_fixuptags=OJPEGFixupTags;
450
+ tif->tif_setupdecode=OJPEGSetupDecode;
451
+ tif->tif_predecode=OJPEGPreDecode;
452
+ tif->tif_postdecode=OJPEGPostDecode;
453
+ tif->tif_decoderow=OJPEGDecode;
454
+ tif->tif_decodestrip=OJPEGDecode;
455
+ tif->tif_decodetile=OJPEGDecode;
456
+ tif->tif_setupencode=OJPEGSetupEncode;
457
+ tif->tif_preencode=OJPEGPreEncode;
458
+ tif->tif_postencode=OJPEGPostEncode;
459
+ tif->tif_encoderow=OJPEGEncode;
460
+ tif->tif_encodestrip=OJPEGEncode;
461
+ tif->tif_encodetile=OJPEGEncode;
462
+ tif->tif_cleanup=OJPEGCleanup;
463
+ tif->tif_data=(uint8*)sp;
464
+ /* tif tag methods */
465
+ sp->vgetparent=tif->tif_tagmethods.vgetfield;
466
+ tif->tif_tagmethods.vgetfield=OJPEGVGetField;
467
+ sp->vsetparent=tif->tif_tagmethods.vsetfield;
468
+ tif->tif_tagmethods.vsetfield=OJPEGVSetField;
469
+ sp->printdir=tif->tif_tagmethods.printdir;
470
+ tif->tif_tagmethods.printdir=OJPEGPrintDir;
471
+ /* Some OJPEG files don't have strip or tile offsets or bytecounts tags.
472
+ Some others do, but have totally meaningless or corrupt values
473
+ in these tags. In these cases, the JpegInterchangeFormat stream is
474
+ reliable. In any case, this decoder reads the compressed data itself,
475
+ from the most reliable locations, and we need to notify encapsulating
476
+ LibTiff not to read raw strips or tiles for us. */
477
+ tif->tif_flags|=TIFF_NOREADRAW;
478
+ return(1);
479
+ }
480
+
481
+ static int
482
+ OJPEGVGetField(TIFF* tif, uint32 tag, va_list ap)
483
+ {
484
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
485
+ switch(tag)
486
+ {
487
+ case TIFFTAG_JPEGIFOFFSET:
488
+ *va_arg(ap,uint64*)=(uint64)sp->jpeg_interchange_format;
489
+ break;
490
+ case TIFFTAG_JPEGIFBYTECOUNT:
491
+ *va_arg(ap,uint64*)=(uint64)sp->jpeg_interchange_format_length;
492
+ break;
493
+ case TIFFTAG_YCBCRSUBSAMPLING:
494
+ if (sp->subsamplingcorrect_done==0)
495
+ OJPEGSubsamplingCorrect(tif);
496
+ *va_arg(ap,uint16*)=(uint16)sp->subsampling_hor;
497
+ *va_arg(ap,uint16*)=(uint16)sp->subsampling_ver;
498
+ break;
499
+ case TIFFTAG_JPEGQTABLES:
500
+ *va_arg(ap,uint32*)=(uint32)sp->qtable_offset_count;
501
+ *va_arg(ap,void**)=(void*)sp->qtable_offset;
502
+ break;
503
+ case TIFFTAG_JPEGDCTABLES:
504
+ *va_arg(ap,uint32*)=(uint32)sp->dctable_offset_count;
505
+ *va_arg(ap,void**)=(void*)sp->dctable_offset;
506
+ break;
507
+ case TIFFTAG_JPEGACTABLES:
508
+ *va_arg(ap,uint32*)=(uint32)sp->actable_offset_count;
509
+ *va_arg(ap,void**)=(void*)sp->actable_offset;
510
+ break;
511
+ case TIFFTAG_JPEGPROC:
512
+ *va_arg(ap,uint16*)=(uint16)sp->jpeg_proc;
513
+ break;
514
+ case TIFFTAG_JPEGRESTARTINTERVAL:
515
+ *va_arg(ap,uint16*)=sp->restart_interval;
516
+ break;
517
+ default:
518
+ return (*sp->vgetparent)(tif,tag,ap);
519
+ }
520
+ return (1);
521
+ }
522
+
523
+ static int
524
+ OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap)
525
+ {
526
+ static const char module[]="OJPEGVSetField";
527
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
528
+ uint32 ma;
529
+ uint64* mb;
530
+ uint32 n;
531
+ const TIFFField* fip;
532
+
533
+ switch(tag)
534
+ {
535
+ case TIFFTAG_JPEGIFOFFSET:
536
+ sp->jpeg_interchange_format=(uint64)va_arg(ap,uint64);
537
+ break;
538
+ case TIFFTAG_JPEGIFBYTECOUNT:
539
+ sp->jpeg_interchange_format_length=(uint64)va_arg(ap,uint64);
540
+ break;
541
+ case TIFFTAG_YCBCRSUBSAMPLING:
542
+ sp->subsampling_tag=1;
543
+ sp->subsampling_hor=(uint8)va_arg(ap,uint16_vap);
544
+ sp->subsampling_ver=(uint8)va_arg(ap,uint16_vap);
545
+ tif->tif_dir.td_ycbcrsubsampling[0]=sp->subsampling_hor;
546
+ tif->tif_dir.td_ycbcrsubsampling[1]=sp->subsampling_ver;
547
+ break;
548
+ case TIFFTAG_JPEGQTABLES:
549
+ ma=(uint32)va_arg(ap,uint32);
550
+ if (ma!=0)
551
+ {
552
+ if (ma>3)
553
+ {
554
+ TIFFErrorExt(tif->tif_clientdata,module,"JpegQTables tag has incorrect count");
555
+ return(0);
556
+ }
557
+ sp->qtable_offset_count=(uint8)ma;
558
+ mb=(uint64*)va_arg(ap,uint64*);
559
+ for (n=0; n<ma; n++)
560
+ sp->qtable_offset[n]=mb[n];
561
+ }
562
+ break;
563
+ case TIFFTAG_JPEGDCTABLES:
564
+ ma=(uint32)va_arg(ap,uint32);
565
+ if (ma!=0)
566
+ {
567
+ if (ma>3)
568
+ {
569
+ TIFFErrorExt(tif->tif_clientdata,module,"JpegDcTables tag has incorrect count");
570
+ return(0);
571
+ }
572
+ sp->dctable_offset_count=(uint8)ma;
573
+ mb=(uint64*)va_arg(ap,uint64*);
574
+ for (n=0; n<ma; n++)
575
+ sp->dctable_offset[n]=mb[n];
576
+ }
577
+ break;
578
+ case TIFFTAG_JPEGACTABLES:
579
+ ma=(uint32)va_arg(ap,uint32);
580
+ if (ma!=0)
581
+ {
582
+ if (ma>3)
583
+ {
584
+ TIFFErrorExt(tif->tif_clientdata,module,"JpegAcTables tag has incorrect count");
585
+ return(0);
586
+ }
587
+ sp->actable_offset_count=(uint8)ma;
588
+ mb=(uint64*)va_arg(ap,uint64*);
589
+ for (n=0; n<ma; n++)
590
+ sp->actable_offset[n]=mb[n];
591
+ }
592
+ break;
593
+ case TIFFTAG_JPEGPROC:
594
+ sp->jpeg_proc=(uint8)va_arg(ap,uint16_vap);
595
+ break;
596
+ case TIFFTAG_JPEGRESTARTINTERVAL:
597
+ sp->restart_interval=(uint16)va_arg(ap,uint16_vap);
598
+ break;
599
+ default:
600
+ return (*sp->vsetparent)(tif,tag,ap);
601
+ }
602
+ fip = TIFFFieldWithTag(tif,tag);
603
+ if( fip == NULL ) /* shouldn't happen */
604
+ return(0);
605
+ TIFFSetFieldBit(tif,fip->field_bit);
606
+ tif->tif_flags|=TIFF_DIRTYDIRECT;
607
+ return(1);
608
+ }
609
+
610
+ static void
611
+ OJPEGPrintDir(TIFF* tif, FILE* fd, long flags)
612
+ {
613
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
614
+ uint8 m;
615
+ (void)flags;
616
+ assert(sp!=NULL);
617
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMAT))
618
+ fprintf(fd," JpegInterchangeFormat: " TIFF_UINT64_FORMAT "\n",(TIFF_UINT64_T)sp->jpeg_interchange_format);
619
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH))
620
+ fprintf(fd," JpegInterchangeFormatLength: " TIFF_UINT64_FORMAT "\n",(TIFF_UINT64_T)sp->jpeg_interchange_format_length);
621
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGQTABLES))
622
+ {
623
+ fprintf(fd," JpegQTables:");
624
+ for (m=0; m<sp->qtable_offset_count; m++)
625
+ fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->qtable_offset[m]);
626
+ fprintf(fd,"\n");
627
+ }
628
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGDCTABLES))
629
+ {
630
+ fprintf(fd," JpegDcTables:");
631
+ for (m=0; m<sp->dctable_offset_count; m++)
632
+ fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->dctable_offset[m]);
633
+ fprintf(fd,"\n");
634
+ }
635
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGACTABLES))
636
+ {
637
+ fprintf(fd," JpegAcTables:");
638
+ for (m=0; m<sp->actable_offset_count; m++)
639
+ fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->actable_offset[m]);
640
+ fprintf(fd,"\n");
641
+ }
642
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGPROC))
643
+ fprintf(fd," JpegProc: %u\n",(unsigned int)sp->jpeg_proc);
644
+ if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGRESTARTINTERVAL))
645
+ fprintf(fd," JpegRestartInterval: %u\n",(unsigned int)sp->restart_interval);
646
+ if (sp->printdir)
647
+ (*sp->printdir)(tif, fd, flags);
648
+ }
649
+
650
+ static int
651
+ OJPEGFixupTags(TIFF* tif)
652
+ {
653
+ (void) tif;
654
+ return(1);
655
+ }
656
+
657
+ static int
658
+ OJPEGSetupDecode(TIFF* tif)
659
+ {
660
+ static const char module[]="OJPEGSetupDecode";
661
+ TIFFWarningExt(tif->tif_clientdata,module,"Depreciated and troublesome old-style JPEG compression mode, please convert to new-style JPEG compression and notify vendor of writing software");
662
+ return(1);
663
+ }
664
+
665
+ static int
666
+ OJPEGPreDecode(TIFF* tif, uint16 s)
667
+ {
668
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
669
+ uint32 m;
670
+ if (sp->subsamplingcorrect_done==0)
671
+ OJPEGSubsamplingCorrect(tif);
672
+ if (sp->readheader_done==0)
673
+ {
674
+ if (OJPEGReadHeaderInfo(tif)==0)
675
+ return(0);
676
+ }
677
+ if (sp->sos_end[s].log==0)
678
+ {
679
+ if (OJPEGReadSecondarySos(tif,s)==0)
680
+ return(0);
681
+ }
682
+ if isTiled(tif)
683
+ m=tif->tif_curtile;
684
+ else
685
+ m=tif->tif_curstrip;
686
+ if ((sp->writeheader_done!=0) && ((sp->write_cursample!=s) || (sp->write_curstrile>m)))
687
+ {
688
+ if (sp->libjpeg_session_active!=0)
689
+ OJPEGLibjpegSessionAbort(tif);
690
+ sp->writeheader_done=0;
691
+ }
692
+ if (sp->writeheader_done==0)
693
+ {
694
+ sp->plane_sample_offset=(uint8)s;
695
+ sp->write_cursample=s;
696
+ sp->write_curstrile=s*tif->tif_dir.td_stripsperimage;
697
+ if ((sp->in_buffer_file_pos_log==0) ||
698
+ (sp->in_buffer_file_pos-sp->in_buffer_togo!=sp->sos_end[s].in_buffer_file_pos))
699
+ {
700
+ sp->in_buffer_source=sp->sos_end[s].in_buffer_source;
701
+ sp->in_buffer_next_strile=sp->sos_end[s].in_buffer_next_strile;
702
+ sp->in_buffer_file_pos=sp->sos_end[s].in_buffer_file_pos;
703
+ sp->in_buffer_file_pos_log=0;
704
+ sp->in_buffer_file_togo=sp->sos_end[s].in_buffer_file_togo;
705
+ sp->in_buffer_togo=0;
706
+ sp->in_buffer_cur=0;
707
+ }
708
+ if (OJPEGWriteHeaderInfo(tif)==0)
709
+ return(0);
710
+ }
711
+ while (sp->write_curstrile<m)
712
+ {
713
+ if (sp->libjpeg_jpeg_query_style==0)
714
+ {
715
+ if (OJPEGPreDecodeSkipRaw(tif)==0)
716
+ return(0);
717
+ }
718
+ else
719
+ {
720
+ if (OJPEGPreDecodeSkipScanlines(tif)==0)
721
+ return(0);
722
+ }
723
+ sp->write_curstrile++;
724
+ }
725
+ return(1);
726
+ }
727
+
728
+ static int
729
+ OJPEGPreDecodeSkipRaw(TIFF* tif)
730
+ {
731
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
732
+ uint32 m;
733
+ m=sp->lines_per_strile;
734
+ if (sp->subsampling_convert_state!=0)
735
+ {
736
+ if (sp->subsampling_convert_clines-sp->subsampling_convert_state>=m)
737
+ {
738
+ sp->subsampling_convert_state+=m;
739
+ if (sp->subsampling_convert_state==sp->subsampling_convert_clines)
740
+ sp->subsampling_convert_state=0;
741
+ return(1);
742
+ }
743
+ m-=sp->subsampling_convert_clines-sp->subsampling_convert_state;
744
+ sp->subsampling_convert_state=0;
745
+ }
746
+ while (m>=sp->subsampling_convert_clines)
747
+ {
748
+ if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
749
+ return(0);
750
+ m-=sp->subsampling_convert_clines;
751
+ }
752
+ if (m>0)
753
+ {
754
+ if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
755
+ return(0);
756
+ sp->subsampling_convert_state=m;
757
+ }
758
+ return(1);
759
+ }
760
+
761
+ static int
762
+ OJPEGPreDecodeSkipScanlines(TIFF* tif)
763
+ {
764
+ static const char module[]="OJPEGPreDecodeSkipScanlines";
765
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
766
+ uint32 m;
767
+ if (sp->skip_buffer==NULL)
768
+ {
769
+ sp->skip_buffer=_TIFFmalloc(sp->bytes_per_line);
770
+ if (sp->skip_buffer==NULL)
771
+ {
772
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
773
+ return(0);
774
+ }
775
+ }
776
+ for (m=0; m<sp->lines_per_strile; m++)
777
+ {
778
+ if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),&sp->skip_buffer,1)==0)
779
+ return(0);
780
+ }
781
+ return(1);
782
+ }
783
+
784
+ static int
785
+ OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
786
+ {
787
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
788
+ (void)s;
789
+ if (sp->libjpeg_jpeg_query_style==0)
790
+ {
791
+ if (OJPEGDecodeRaw(tif,buf,cc)==0)
792
+ return(0);
793
+ }
794
+ else
795
+ {
796
+ if (OJPEGDecodeScanlines(tif,buf,cc)==0)
797
+ return(0);
798
+ }
799
+ return(1);
800
+ }
801
+
802
+ static int
803
+ OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc)
804
+ {
805
+ static const char module[]="OJPEGDecodeRaw";
806
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
807
+ uint8* m;
808
+ tmsize_t n;
809
+ uint8* oy;
810
+ uint8* ocb;
811
+ uint8* ocr;
812
+ uint8* p;
813
+ uint32 q;
814
+ uint8* r;
815
+ uint8 sx,sy;
816
+ if (cc%sp->bytes_per_line!=0)
817
+ {
818
+ TIFFErrorExt(tif->tif_clientdata,module,"Fractional scanline not read");
819
+ return(0);
820
+ }
821
+ assert(cc>0);
822
+ m=buf;
823
+ n=cc;
824
+ do
825
+ {
826
+ if (sp->subsampling_convert_state==0)
827
+ {
828
+ if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
829
+ return(0);
830
+ }
831
+ oy=sp->subsampling_convert_ybuf+sp->subsampling_convert_state*sp->subsampling_ver*sp->subsampling_convert_ylinelen;
832
+ ocb=sp->subsampling_convert_cbbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen;
833
+ ocr=sp->subsampling_convert_crbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen;
834
+ p=m;
835
+ for (q=0; q<sp->subsampling_convert_clinelenout; q++)
836
+ {
837
+ r=oy;
838
+ for (sy=0; sy<sp->subsampling_ver; sy++)
839
+ {
840
+ for (sx=0; sx<sp->subsampling_hor; sx++)
841
+ *p++=*r++;
842
+ r+=sp->subsampling_convert_ylinelen-sp->subsampling_hor;
843
+ }
844
+ oy+=sp->subsampling_hor;
845
+ *p++=*ocb++;
846
+ *p++=*ocr++;
847
+ }
848
+ sp->subsampling_convert_state++;
849
+ if (sp->subsampling_convert_state==sp->subsampling_convert_clines)
850
+ sp->subsampling_convert_state=0;
851
+ m+=sp->bytes_per_line;
852
+ n-=sp->bytes_per_line;
853
+ } while(n>0);
854
+ return(1);
855
+ }
856
+
857
+ static int
858
+ OJPEGDecodeScanlines(TIFF* tif, uint8* buf, tmsize_t cc)
859
+ {
860
+ static const char module[]="OJPEGDecodeScanlines";
861
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
862
+ uint8* m;
863
+ tmsize_t n;
864
+ if (cc%sp->bytes_per_line!=0)
865
+ {
866
+ TIFFErrorExt(tif->tif_clientdata,module,"Fractional scanline not read");
867
+ return(0);
868
+ }
869
+ assert(cc>0);
870
+ m=buf;
871
+ n=cc;
872
+ do
873
+ {
874
+ if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),&m,1)==0)
875
+ return(0);
876
+ m+=sp->bytes_per_line;
877
+ n-=sp->bytes_per_line;
878
+ } while(n>0);
879
+ return(1);
880
+ }
881
+
882
+ static void
883
+ OJPEGPostDecode(TIFF* tif, uint8* buf, tmsize_t cc)
884
+ {
885
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
886
+ (void)buf;
887
+ (void)cc;
888
+ sp->write_curstrile++;
889
+ if (sp->write_curstrile%tif->tif_dir.td_stripsperimage==0)
890
+ {
891
+ assert(sp->libjpeg_session_active!=0);
892
+ OJPEGLibjpegSessionAbort(tif);
893
+ sp->writeheader_done=0;
894
+ }
895
+ }
896
+
897
+ static int
898
+ OJPEGSetupEncode(TIFF* tif)
899
+ {
900
+ static const char module[]="OJPEGSetupEncode";
901
+ TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
902
+ return(0);
903
+ }
904
+
905
+ static int
906
+ OJPEGPreEncode(TIFF* tif, uint16 s)
907
+ {
908
+ static const char module[]="OJPEGPreEncode";
909
+ (void)s;
910
+ TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
911
+ return(0);
912
+ }
913
+
914
+ static int
915
+ OJPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
916
+ {
917
+ static const char module[]="OJPEGEncode";
918
+ (void)buf;
919
+ (void)cc;
920
+ (void)s;
921
+ TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
922
+ return(0);
923
+ }
924
+
925
+ static int
926
+ OJPEGPostEncode(TIFF* tif)
927
+ {
928
+ static const char module[]="OJPEGPostEncode";
929
+ TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
930
+ return(0);
931
+ }
932
+
933
+ static void
934
+ OJPEGCleanup(TIFF* tif)
935
+ {
936
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
937
+ if (sp!=0)
938
+ {
939
+ tif->tif_tagmethods.vgetfield=sp->vgetparent;
940
+ tif->tif_tagmethods.vsetfield=sp->vsetparent;
941
+ tif->tif_tagmethods.printdir=sp->printdir;
942
+ if (sp->qtable[0]!=0)
943
+ _TIFFfree(sp->qtable[0]);
944
+ if (sp->qtable[1]!=0)
945
+ _TIFFfree(sp->qtable[1]);
946
+ if (sp->qtable[2]!=0)
947
+ _TIFFfree(sp->qtable[2]);
948
+ if (sp->qtable[3]!=0)
949
+ _TIFFfree(sp->qtable[3]);
950
+ if (sp->dctable[0]!=0)
951
+ _TIFFfree(sp->dctable[0]);
952
+ if (sp->dctable[1]!=0)
953
+ _TIFFfree(sp->dctable[1]);
954
+ if (sp->dctable[2]!=0)
955
+ _TIFFfree(sp->dctable[2]);
956
+ if (sp->dctable[3]!=0)
957
+ _TIFFfree(sp->dctable[3]);
958
+ if (sp->actable[0]!=0)
959
+ _TIFFfree(sp->actable[0]);
960
+ if (sp->actable[1]!=0)
961
+ _TIFFfree(sp->actable[1]);
962
+ if (sp->actable[2]!=0)
963
+ _TIFFfree(sp->actable[2]);
964
+ if (sp->actable[3]!=0)
965
+ _TIFFfree(sp->actable[3]);
966
+ if (sp->libjpeg_session_active!=0)
967
+ OJPEGLibjpegSessionAbort(tif);
968
+ if (sp->subsampling_convert_ycbcrbuf!=0)
969
+ _TIFFfree(sp->subsampling_convert_ycbcrbuf);
970
+ if (sp->subsampling_convert_ycbcrimage!=0)
971
+ _TIFFfree(sp->subsampling_convert_ycbcrimage);
972
+ if (sp->skip_buffer!=0)
973
+ _TIFFfree(sp->skip_buffer);
974
+ _TIFFfree(sp);
975
+ tif->tif_data=NULL;
976
+ _TIFFSetDefaultCompressionState(tif);
977
+ }
978
+ }
979
+
980
+ static void
981
+ OJPEGSubsamplingCorrect(TIFF* tif)
982
+ {
983
+ static const char module[]="OJPEGSubsamplingCorrect";
984
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
985
+ uint8 mh;
986
+ uint8 mv;
987
+ _TIFFFillStriles( tif );
988
+
989
+ assert(sp->subsamplingcorrect_done==0);
990
+ if ((tif->tif_dir.td_samplesperpixel!=3) || ((tif->tif_dir.td_photometric!=PHOTOMETRIC_YCBCR) &&
991
+ (tif->tif_dir.td_photometric!=PHOTOMETRIC_ITULAB)))
992
+ {
993
+ if (sp->subsampling_tag!=0)
994
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag not appropriate for this Photometric and/or SamplesPerPixel");
995
+ sp->subsampling_hor=1;
996
+ sp->subsampling_ver=1;
997
+ sp->subsampling_force_desubsampling_inside_decompression=0;
998
+ }
999
+ else
1000
+ {
1001
+ sp->subsamplingcorrect_done=1;
1002
+ mh=sp->subsampling_hor;
1003
+ mv=sp->subsampling_ver;
1004
+ sp->subsamplingcorrect=1;
1005
+ OJPEGReadHeaderInfoSec(tif);
1006
+ if (sp->subsampling_force_desubsampling_inside_decompression!=0)
1007
+ {
1008
+ sp->subsampling_hor=1;
1009
+ sp->subsampling_ver=1;
1010
+ }
1011
+ sp->subsamplingcorrect=0;
1012
+ if (((sp->subsampling_hor!=mh) || (sp->subsampling_ver!=mv)) && (sp->subsampling_force_desubsampling_inside_decompression==0))
1013
+ {
1014
+ if (sp->subsampling_tag==0)
1015
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag is not set, yet subsampling inside JPEG data [%d,%d] does not match default values [2,2]; assuming subsampling inside JPEG data is correct",sp->subsampling_hor,sp->subsampling_ver);
1016
+ else
1017
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling inside JPEG data [%d,%d] does not match subsampling tag values [%d,%d]; assuming subsampling inside JPEG data is correct",sp->subsampling_hor,sp->subsampling_ver,mh,mv);
1018
+ }
1019
+ if (sp->subsampling_force_desubsampling_inside_decompression!=0)
1020
+ {
1021
+ if (sp->subsampling_tag==0)
1022
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag is not set, yet subsampling inside JPEG data does not match default values [2,2] (nor any other values allowed in TIFF); assuming subsampling inside JPEG data is correct and desubsampling inside JPEG decompression");
1023
+ else
1024
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling inside JPEG data does not match subsampling tag values [%d,%d] (nor any other values allowed in TIFF); assuming subsampling inside JPEG data is correct and desubsampling inside JPEG decompression",mh,mv);
1025
+ }
1026
+ if (sp->subsampling_force_desubsampling_inside_decompression==0)
1027
+ {
1028
+ if (sp->subsampling_hor<sp->subsampling_ver)
1029
+ TIFFWarningExt(tif->tif_clientdata,module,"Subsampling values [%d,%d] are not allowed in TIFF",sp->subsampling_hor,sp->subsampling_ver);
1030
+ }
1031
+ }
1032
+ sp->subsamplingcorrect_done=1;
1033
+ }
1034
+
1035
+ static int
1036
+ OJPEGReadHeaderInfo(TIFF* tif)
1037
+ {
1038
+ static const char module[]="OJPEGReadHeaderInfo";
1039
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1040
+ assert(sp->readheader_done==0);
1041
+ sp->image_width=tif->tif_dir.td_imagewidth;
1042
+ sp->image_length=tif->tif_dir.td_imagelength;
1043
+ if isTiled(tif)
1044
+ {
1045
+ sp->strile_width=tif->tif_dir.td_tilewidth;
1046
+ sp->strile_length=tif->tif_dir.td_tilelength;
1047
+ sp->strile_length_total=((sp->image_length+sp->strile_length-1)/sp->strile_length)*sp->strile_length;
1048
+ }
1049
+ else
1050
+ {
1051
+ sp->strile_width=sp->image_width;
1052
+ sp->strile_length=tif->tif_dir.td_rowsperstrip;
1053
+ sp->strile_length_total=sp->image_length;
1054
+ }
1055
+ if (tif->tif_dir.td_samplesperpixel==1)
1056
+ {
1057
+ sp->samples_per_pixel=1;
1058
+ sp->plane_sample_offset=0;
1059
+ sp->samples_per_pixel_per_plane=sp->samples_per_pixel;
1060
+ sp->subsampling_hor=1;
1061
+ sp->subsampling_ver=1;
1062
+ }
1063
+ else
1064
+ {
1065
+ if (tif->tif_dir.td_samplesperpixel!=3)
1066
+ {
1067
+ TIFFErrorExt(tif->tif_clientdata,module,"SamplesPerPixel %d not supported for this compression scheme",sp->samples_per_pixel);
1068
+ return(0);
1069
+ }
1070
+ sp->samples_per_pixel=3;
1071
+ sp->plane_sample_offset=0;
1072
+ if (tif->tif_dir.td_planarconfig==PLANARCONFIG_CONTIG)
1073
+ sp->samples_per_pixel_per_plane=3;
1074
+ else
1075
+ sp->samples_per_pixel_per_plane=1;
1076
+ }
1077
+ if (sp->strile_length<sp->image_length)
1078
+ {
1079
+ if (sp->strile_length%(sp->subsampling_ver*8)!=0)
1080
+ {
1081
+ TIFFErrorExt(tif->tif_clientdata,module,"Incompatible vertical subsampling and image strip/tile length");
1082
+ return(0);
1083
+ }
1084
+ sp->restart_interval=((sp->strile_width+sp->subsampling_hor*8-1)/(sp->subsampling_hor*8))*(sp->strile_length/(sp->subsampling_ver*8));
1085
+ }
1086
+ if (OJPEGReadHeaderInfoSec(tif)==0)
1087
+ return(0);
1088
+ sp->sos_end[0].log=1;
1089
+ sp->sos_end[0].in_buffer_source=sp->in_buffer_source;
1090
+ sp->sos_end[0].in_buffer_next_strile=sp->in_buffer_next_strile;
1091
+ sp->sos_end[0].in_buffer_file_pos=sp->in_buffer_file_pos-sp->in_buffer_togo;
1092
+ sp->sos_end[0].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo;
1093
+ sp->readheader_done=1;
1094
+ return(1);
1095
+ }
1096
+
1097
+ static int
1098
+ OJPEGReadSecondarySos(TIFF* tif, uint16 s)
1099
+ {
1100
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1101
+ uint8 m;
1102
+ assert(s>0);
1103
+ assert(s<3);
1104
+ assert(sp->sos_end[0].log!=0);
1105
+ assert(sp->sos_end[s].log==0);
1106
+ sp->plane_sample_offset=s-1;
1107
+ while(sp->sos_end[sp->plane_sample_offset].log==0)
1108
+ sp->plane_sample_offset--;
1109
+ sp->in_buffer_source=sp->sos_end[sp->plane_sample_offset].in_buffer_source;
1110
+ sp->in_buffer_next_strile=sp->sos_end[sp->plane_sample_offset].in_buffer_next_strile;
1111
+ sp->in_buffer_file_pos=sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos;
1112
+ sp->in_buffer_file_pos_log=0;
1113
+ sp->in_buffer_file_togo=sp->sos_end[sp->plane_sample_offset].in_buffer_file_togo;
1114
+ sp->in_buffer_togo=0;
1115
+ sp->in_buffer_cur=0;
1116
+ while(sp->plane_sample_offset<s)
1117
+ {
1118
+ do
1119
+ {
1120
+ if (OJPEGReadByte(sp,&m)==0)
1121
+ return(0);
1122
+ if (m==255)
1123
+ {
1124
+ do
1125
+ {
1126
+ if (OJPEGReadByte(sp,&m)==0)
1127
+ return(0);
1128
+ if (m!=255)
1129
+ break;
1130
+ } while(1);
1131
+ if (m==JPEG_MARKER_SOS)
1132
+ break;
1133
+ }
1134
+ } while(1);
1135
+ sp->plane_sample_offset++;
1136
+ if (OJPEGReadHeaderInfoSecStreamSos(tif)==0)
1137
+ return(0);
1138
+ sp->sos_end[sp->plane_sample_offset].log=1;
1139
+ sp->sos_end[sp->plane_sample_offset].in_buffer_source=sp->in_buffer_source;
1140
+ sp->sos_end[sp->plane_sample_offset].in_buffer_next_strile=sp->in_buffer_next_strile;
1141
+ sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos=sp->in_buffer_file_pos-sp->in_buffer_togo;
1142
+ sp->sos_end[sp->plane_sample_offset].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo;
1143
+ }
1144
+ return(1);
1145
+ }
1146
+
1147
+ static int
1148
+ OJPEGWriteHeaderInfo(TIFF* tif)
1149
+ {
1150
+ static const char module[]="OJPEGWriteHeaderInfo";
1151
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1152
+ uint8** m;
1153
+ uint32 n;
1154
+ /* if a previous attempt failed, don't try again */
1155
+ if (sp->libjpeg_session_active != 0)
1156
+ return 0;
1157
+ sp->out_state=ososSoi;
1158
+ sp->restart_index=0;
1159
+ jpeg_std_error(&(sp->libjpeg_jpeg_error_mgr));
1160
+ sp->libjpeg_jpeg_error_mgr.output_message=OJPEGLibjpegJpegErrorMgrOutputMessage;
1161
+ sp->libjpeg_jpeg_error_mgr.error_exit=OJPEGLibjpegJpegErrorMgrErrorExit;
1162
+ sp->libjpeg_jpeg_decompress_struct.err=&(sp->libjpeg_jpeg_error_mgr);
1163
+ sp->libjpeg_jpeg_decompress_struct.client_data=(void*)tif;
1164
+ if (jpeg_create_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
1165
+ return(0);
1166
+ sp->libjpeg_session_active=1;
1167
+ sp->libjpeg_jpeg_source_mgr.bytes_in_buffer=0;
1168
+ sp->libjpeg_jpeg_source_mgr.init_source=OJPEGLibjpegJpegSourceMgrInitSource;
1169
+ sp->libjpeg_jpeg_source_mgr.fill_input_buffer=OJPEGLibjpegJpegSourceMgrFillInputBuffer;
1170
+ sp->libjpeg_jpeg_source_mgr.skip_input_data=OJPEGLibjpegJpegSourceMgrSkipInputData;
1171
+ sp->libjpeg_jpeg_source_mgr.resync_to_restart=OJPEGLibjpegJpegSourceMgrResyncToRestart;
1172
+ sp->libjpeg_jpeg_source_mgr.term_source=OJPEGLibjpegJpegSourceMgrTermSource;
1173
+ sp->libjpeg_jpeg_decompress_struct.src=&(sp->libjpeg_jpeg_source_mgr);
1174
+ if (jpeg_read_header_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),1)==0)
1175
+ return(0);
1176
+ if ((sp->subsampling_force_desubsampling_inside_decompression==0) && (sp->samples_per_pixel_per_plane>1))
1177
+ {
1178
+ sp->libjpeg_jpeg_decompress_struct.raw_data_out=1;
1179
+ #if JPEG_LIB_VERSION >= 70
1180
+ sp->libjpeg_jpeg_decompress_struct.do_fancy_upsampling=FALSE;
1181
+ #endif
1182
+ sp->libjpeg_jpeg_query_style=0;
1183
+ if (sp->subsampling_convert_log==0)
1184
+ {
1185
+ assert(sp->subsampling_convert_ycbcrbuf==0);
1186
+ assert(sp->subsampling_convert_ycbcrimage==0);
1187
+ sp->subsampling_convert_ylinelen=((sp->strile_width+sp->subsampling_hor*8-1)/(sp->subsampling_hor*8)*sp->subsampling_hor*8);
1188
+ sp->subsampling_convert_ylines=sp->subsampling_ver*8;
1189
+ sp->subsampling_convert_clinelen=sp->subsampling_convert_ylinelen/sp->subsampling_hor;
1190
+ sp->subsampling_convert_clines=8;
1191
+ sp->subsampling_convert_ybuflen=sp->subsampling_convert_ylinelen*sp->subsampling_convert_ylines;
1192
+ sp->subsampling_convert_cbuflen=sp->subsampling_convert_clinelen*sp->subsampling_convert_clines;
1193
+ sp->subsampling_convert_ycbcrbuflen=sp->subsampling_convert_ybuflen+2*sp->subsampling_convert_cbuflen;
1194
+ sp->subsampling_convert_ycbcrbuf=_TIFFmalloc(sp->subsampling_convert_ycbcrbuflen);
1195
+ if (sp->subsampling_convert_ycbcrbuf==0)
1196
+ {
1197
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1198
+ return(0);
1199
+ }
1200
+ sp->subsampling_convert_ybuf=sp->subsampling_convert_ycbcrbuf;
1201
+ sp->subsampling_convert_cbbuf=sp->subsampling_convert_ybuf+sp->subsampling_convert_ybuflen;
1202
+ sp->subsampling_convert_crbuf=sp->subsampling_convert_cbbuf+sp->subsampling_convert_cbuflen;
1203
+ sp->subsampling_convert_ycbcrimagelen=3+sp->subsampling_convert_ylines+2*sp->subsampling_convert_clines;
1204
+ sp->subsampling_convert_ycbcrimage=_TIFFmalloc(sp->subsampling_convert_ycbcrimagelen*sizeof(uint8*));
1205
+ if (sp->subsampling_convert_ycbcrimage==0)
1206
+ {
1207
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1208
+ return(0);
1209
+ }
1210
+ m=sp->subsampling_convert_ycbcrimage;
1211
+ *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3);
1212
+ *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->subsampling_convert_ylines);
1213
+ *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->subsampling_convert_ylines+sp->subsampling_convert_clines);
1214
+ for (n=0; n<sp->subsampling_convert_ylines; n++)
1215
+ *m++=sp->subsampling_convert_ybuf+n*sp->subsampling_convert_ylinelen;
1216
+ for (n=0; n<sp->subsampling_convert_clines; n++)
1217
+ *m++=sp->subsampling_convert_cbbuf+n*sp->subsampling_convert_clinelen;
1218
+ for (n=0; n<sp->subsampling_convert_clines; n++)
1219
+ *m++=sp->subsampling_convert_crbuf+n*sp->subsampling_convert_clinelen;
1220
+ sp->subsampling_convert_clinelenout=((sp->strile_width+sp->subsampling_hor-1)/sp->subsampling_hor);
1221
+ sp->subsampling_convert_state=0;
1222
+ sp->bytes_per_line=sp->subsampling_convert_clinelenout*(sp->subsampling_ver*sp->subsampling_hor+2);
1223
+ sp->lines_per_strile=((sp->strile_length+sp->subsampling_ver-1)/sp->subsampling_ver);
1224
+ sp->subsampling_convert_log=1;
1225
+ }
1226
+ }
1227
+ else
1228
+ {
1229
+ sp->libjpeg_jpeg_decompress_struct.jpeg_color_space=JCS_UNKNOWN;
1230
+ sp->libjpeg_jpeg_decompress_struct.out_color_space=JCS_UNKNOWN;
1231
+ sp->libjpeg_jpeg_query_style=1;
1232
+ sp->bytes_per_line=sp->samples_per_pixel_per_plane*sp->strile_width;
1233
+ sp->lines_per_strile=sp->strile_length;
1234
+ }
1235
+ if (jpeg_start_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
1236
+ return(0);
1237
+ sp->writeheader_done=1;
1238
+ return(1);
1239
+ }
1240
+
1241
+ static void
1242
+ OJPEGLibjpegSessionAbort(TIFF* tif)
1243
+ {
1244
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1245
+ assert(sp->libjpeg_session_active!=0);
1246
+ jpeg_destroy((jpeg_common_struct*)(&(sp->libjpeg_jpeg_decompress_struct)));
1247
+ sp->libjpeg_session_active=0;
1248
+ }
1249
+
1250
+ static int
1251
+ OJPEGReadHeaderInfoSec(TIFF* tif)
1252
+ {
1253
+ static const char module[]="OJPEGReadHeaderInfoSec";
1254
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1255
+ uint8 m;
1256
+ uint16 n;
1257
+ uint8 o;
1258
+ if (sp->file_size==0)
1259
+ sp->file_size=TIFFGetFileSize(tif);
1260
+ if (sp->jpeg_interchange_format!=0)
1261
+ {
1262
+ if (sp->jpeg_interchange_format>=sp->file_size)
1263
+ {
1264
+ sp->jpeg_interchange_format=0;
1265
+ sp->jpeg_interchange_format_length=0;
1266
+ }
1267
+ else
1268
+ {
1269
+ if ((sp->jpeg_interchange_format_length==0) || (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size))
1270
+ sp->jpeg_interchange_format_length=sp->file_size-sp->jpeg_interchange_format;
1271
+ }
1272
+ }
1273
+ sp->in_buffer_source=osibsNotSetYet;
1274
+ sp->in_buffer_next_strile=0;
1275
+ sp->in_buffer_strile_count=tif->tif_dir.td_nstrips;
1276
+ sp->in_buffer_file_togo=0;
1277
+ sp->in_buffer_togo=0;
1278
+ do
1279
+ {
1280
+ if (OJPEGReadBytePeek(sp,&m)==0)
1281
+ return(0);
1282
+ if (m!=255)
1283
+ break;
1284
+ OJPEGReadByteAdvance(sp);
1285
+ do
1286
+ {
1287
+ if (OJPEGReadByte(sp,&m)==0)
1288
+ return(0);
1289
+ } while(m==255);
1290
+ switch(m)
1291
+ {
1292
+ case JPEG_MARKER_SOI:
1293
+ /* this type of marker has no data, and should be skipped */
1294
+ break;
1295
+ case JPEG_MARKER_COM:
1296
+ case JPEG_MARKER_APP0:
1297
+ case JPEG_MARKER_APP0+1:
1298
+ case JPEG_MARKER_APP0+2:
1299
+ case JPEG_MARKER_APP0+3:
1300
+ case JPEG_MARKER_APP0+4:
1301
+ case JPEG_MARKER_APP0+5:
1302
+ case JPEG_MARKER_APP0+6:
1303
+ case JPEG_MARKER_APP0+7:
1304
+ case JPEG_MARKER_APP0+8:
1305
+ case JPEG_MARKER_APP0+9:
1306
+ case JPEG_MARKER_APP0+10:
1307
+ case JPEG_MARKER_APP0+11:
1308
+ case JPEG_MARKER_APP0+12:
1309
+ case JPEG_MARKER_APP0+13:
1310
+ case JPEG_MARKER_APP0+14:
1311
+ case JPEG_MARKER_APP0+15:
1312
+ /* this type of marker has data, but it has no use to us (and no place here) and should be skipped */
1313
+ if (OJPEGReadWord(sp,&n)==0)
1314
+ return(0);
1315
+ if (n<2)
1316
+ {
1317
+ if (sp->subsamplingcorrect==0)
1318
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JPEG data");
1319
+ return(0);
1320
+ }
1321
+ if (n>2)
1322
+ OJPEGReadSkip(sp,n-2);
1323
+ break;
1324
+ case JPEG_MARKER_DRI:
1325
+ if (OJPEGReadHeaderInfoSecStreamDri(tif)==0)
1326
+ return(0);
1327
+ break;
1328
+ case JPEG_MARKER_DQT:
1329
+ if (OJPEGReadHeaderInfoSecStreamDqt(tif)==0)
1330
+ return(0);
1331
+ break;
1332
+ case JPEG_MARKER_DHT:
1333
+ if (OJPEGReadHeaderInfoSecStreamDht(tif)==0)
1334
+ return(0);
1335
+ break;
1336
+ case JPEG_MARKER_SOF0:
1337
+ case JPEG_MARKER_SOF1:
1338
+ case JPEG_MARKER_SOF3:
1339
+ if (OJPEGReadHeaderInfoSecStreamSof(tif,m)==0)
1340
+ return(0);
1341
+ if (sp->subsamplingcorrect!=0)
1342
+ return(1);
1343
+ break;
1344
+ case JPEG_MARKER_SOS:
1345
+ if (sp->subsamplingcorrect!=0)
1346
+ return(1);
1347
+ assert(sp->plane_sample_offset==0);
1348
+ if (OJPEGReadHeaderInfoSecStreamSos(tif)==0)
1349
+ return(0);
1350
+ break;
1351
+ default:
1352
+ TIFFErrorExt(tif->tif_clientdata,module,"Unknown marker type %d in JPEG data",m);
1353
+ return(0);
1354
+ }
1355
+ } while(m!=JPEG_MARKER_SOS);
1356
+ if (sp->subsamplingcorrect)
1357
+ return(1);
1358
+ if (sp->sof_log==0)
1359
+ {
1360
+ if (OJPEGReadHeaderInfoSecTablesQTable(tif)==0)
1361
+ return(0);
1362
+ sp->sof_marker_id=JPEG_MARKER_SOF0;
1363
+ for (o=0; o<sp->samples_per_pixel; o++)
1364
+ sp->sof_c[o]=o;
1365
+ sp->sof_hv[0]=((sp->subsampling_hor<<4)|sp->subsampling_ver);
1366
+ for (o=1; o<sp->samples_per_pixel; o++)
1367
+ sp->sof_hv[o]=17;
1368
+ sp->sof_x=sp->strile_width;
1369
+ sp->sof_y=sp->strile_length_total;
1370
+ sp->sof_log=1;
1371
+ if (OJPEGReadHeaderInfoSecTablesDcTable(tif)==0)
1372
+ return(0);
1373
+ if (OJPEGReadHeaderInfoSecTablesAcTable(tif)==0)
1374
+ return(0);
1375
+ for (o=1; o<sp->samples_per_pixel; o++)
1376
+ sp->sos_cs[o]=o;
1377
+ }
1378
+ return(1);
1379
+ }
1380
+
1381
+ static int
1382
+ OJPEGReadHeaderInfoSecStreamDri(TIFF* tif)
1383
+ {
1384
+ /* this could easilly cause trouble in some cases... but no such cases have occured sofar */
1385
+ static const char module[]="OJPEGReadHeaderInfoSecStreamDri";
1386
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1387
+ uint16 m;
1388
+ if (OJPEGReadWord(sp,&m)==0)
1389
+ return(0);
1390
+ if (m!=4)
1391
+ {
1392
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DRI marker in JPEG data");
1393
+ return(0);
1394
+ }
1395
+ if (OJPEGReadWord(sp,&m)==0)
1396
+ return(0);
1397
+ sp->restart_interval=m;
1398
+ return(1);
1399
+ }
1400
+
1401
+ static int
1402
+ OJPEGReadHeaderInfoSecStreamDqt(TIFF* tif)
1403
+ {
1404
+ /* this is a table marker, and it is to be saved as a whole for exact pushing on the jpeg stream later on */
1405
+ static const char module[]="OJPEGReadHeaderInfoSecStreamDqt";
1406
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1407
+ uint16 m;
1408
+ uint32 na;
1409
+ uint8* nb;
1410
+ uint8 o;
1411
+ if (OJPEGReadWord(sp,&m)==0)
1412
+ return(0);
1413
+ if (m<=2)
1414
+ {
1415
+ if (sp->subsamplingcorrect==0)
1416
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
1417
+ return(0);
1418
+ }
1419
+ if (sp->subsamplingcorrect!=0)
1420
+ OJPEGReadSkip(sp,m-2);
1421
+ else
1422
+ {
1423
+ m-=2;
1424
+ do
1425
+ {
1426
+ if (m<65)
1427
+ {
1428
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
1429
+ return(0);
1430
+ }
1431
+ na=sizeof(uint32)+69;
1432
+ nb=_TIFFmalloc(na);
1433
+ if (nb==0)
1434
+ {
1435
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1436
+ return(0);
1437
+ }
1438
+ *(uint32*)nb=na;
1439
+ nb[sizeof(uint32)]=255;
1440
+ nb[sizeof(uint32)+1]=JPEG_MARKER_DQT;
1441
+ nb[sizeof(uint32)+2]=0;
1442
+ nb[sizeof(uint32)+3]=67;
1443
+ if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0) {
1444
+ _TIFFfree(nb);
1445
+ return(0);
1446
+ }
1447
+ o=nb[sizeof(uint32)+4]&15;
1448
+ if (3<o)
1449
+ {
1450
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
1451
+ _TIFFfree(nb);
1452
+ return(0);
1453
+ }
1454
+ if (sp->qtable[o]!=0)
1455
+ _TIFFfree(sp->qtable[o]);
1456
+ sp->qtable[o]=nb;
1457
+ m-=65;
1458
+ } while(m>0);
1459
+ }
1460
+ return(1);
1461
+ }
1462
+
1463
+ static int
1464
+ OJPEGReadHeaderInfoSecStreamDht(TIFF* tif)
1465
+ {
1466
+ /* this is a table marker, and it is to be saved as a whole for exact pushing on the jpeg stream later on */
1467
+ /* TODO: the following assumes there is only one table in this marker... but i'm not quite sure that assumption is guaranteed correct */
1468
+ static const char module[]="OJPEGReadHeaderInfoSecStreamDht";
1469
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1470
+ uint16 m;
1471
+ uint32 na;
1472
+ uint8* nb;
1473
+ uint8 o;
1474
+ if (OJPEGReadWord(sp,&m)==0)
1475
+ return(0);
1476
+ if (m<=2)
1477
+ {
1478
+ if (sp->subsamplingcorrect==0)
1479
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
1480
+ return(0);
1481
+ }
1482
+ if (sp->subsamplingcorrect!=0)
1483
+ {
1484
+ OJPEGReadSkip(sp,m-2);
1485
+ }
1486
+ else
1487
+ {
1488
+ na=sizeof(uint32)+2+m;
1489
+ nb=_TIFFmalloc(na);
1490
+ if (nb==0)
1491
+ {
1492
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1493
+ return(0);
1494
+ }
1495
+ *(uint32*)nb=na;
1496
+ nb[sizeof(uint32)]=255;
1497
+ nb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
1498
+ nb[sizeof(uint32)+2]=(m>>8);
1499
+ nb[sizeof(uint32)+3]=(m&255);
1500
+ if (OJPEGReadBlock(sp,m-2,&nb[sizeof(uint32)+4])==0)
1501
+ return(0);
1502
+ o=nb[sizeof(uint32)+4];
1503
+ if ((o&240)==0)
1504
+ {
1505
+ if (3<o)
1506
+ {
1507
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
1508
+ return(0);
1509
+ }
1510
+ if (sp->dctable[o]!=0)
1511
+ _TIFFfree(sp->dctable[o]);
1512
+ sp->dctable[o]=nb;
1513
+ }
1514
+ else
1515
+ {
1516
+ if ((o&240)!=16)
1517
+ {
1518
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
1519
+ return(0);
1520
+ }
1521
+ o&=15;
1522
+ if (3<o)
1523
+ {
1524
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
1525
+ return(0);
1526
+ }
1527
+ if (sp->actable[o]!=0)
1528
+ _TIFFfree(sp->actable[o]);
1529
+ sp->actable[o]=nb;
1530
+ }
1531
+ }
1532
+ return(1);
1533
+ }
1534
+
1535
+ static int
1536
+ OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id)
1537
+ {
1538
+ /* this marker needs to be checked, and part of its data needs to be saved for regeneration later on */
1539
+ static const char module[]="OJPEGReadHeaderInfoSecStreamSof";
1540
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1541
+ uint16 m;
1542
+ uint16 n;
1543
+ uint8 o;
1544
+ uint16 p;
1545
+ uint16 q;
1546
+ if (sp->sof_log!=0)
1547
+ {
1548
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JPEG data");
1549
+ return(0);
1550
+ }
1551
+ if (sp->subsamplingcorrect==0)
1552
+ sp->sof_marker_id=marker_id;
1553
+ /* Lf: data length */
1554
+ if (OJPEGReadWord(sp,&m)==0)
1555
+ return(0);
1556
+ if (m<11)
1557
+ {
1558
+ if (sp->subsamplingcorrect==0)
1559
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
1560
+ return(0);
1561
+ }
1562
+ m-=8;
1563
+ if (m%3!=0)
1564
+ {
1565
+ if (sp->subsamplingcorrect==0)
1566
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
1567
+ return(0);
1568
+ }
1569
+ n=m/3;
1570
+ if (sp->subsamplingcorrect==0)
1571
+ {
1572
+ if (n!=sp->samples_per_pixel)
1573
+ {
1574
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected number of samples");
1575
+ return(0);
1576
+ }
1577
+ }
1578
+ /* P: Sample precision */
1579
+ if (OJPEGReadByte(sp,&o)==0)
1580
+ return(0);
1581
+ if (o!=8)
1582
+ {
1583
+ if (sp->subsamplingcorrect==0)
1584
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected number of bits per sample");
1585
+ return(0);
1586
+ }
1587
+ /* Y: Number of lines, X: Number of samples per line */
1588
+ if (sp->subsamplingcorrect)
1589
+ OJPEGReadSkip(sp,4);
1590
+ else
1591
+ {
1592
+ /* Y: Number of lines */
1593
+ if (OJPEGReadWord(sp,&p)==0)
1594
+ return(0);
1595
+ if (((uint32)p<sp->image_length) && ((uint32)p<sp->strile_length_total))
1596
+ {
1597
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected height");
1598
+ return(0);
1599
+ }
1600
+ sp->sof_y=p;
1601
+ /* X: Number of samples per line */
1602
+ if (OJPEGReadWord(sp,&p)==0)
1603
+ return(0);
1604
+ if (((uint32)p<sp->image_width) && ((uint32)p<sp->strile_width))
1605
+ {
1606
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected width");
1607
+ return(0);
1608
+ }
1609
+ if ((uint32)p>sp->strile_width)
1610
+ {
1611
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data image width exceeds expected image width");
1612
+ return(0);
1613
+ }
1614
+ sp->sof_x=p;
1615
+ }
1616
+ /* Nf: Number of image components in frame */
1617
+ if (OJPEGReadByte(sp,&o)==0)
1618
+ return(0);
1619
+ if (o!=n)
1620
+ {
1621
+ if (sp->subsamplingcorrect==0)
1622
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
1623
+ return(0);
1624
+ }
1625
+ /* per component stuff */
1626
+ /* TODO: double-check that flow implies that n cannot be as big as to make us overflow sof_c, sof_hv and sof_tq arrays */
1627
+ for (q=0; q<n; q++)
1628
+ {
1629
+ /* C: Component identifier */
1630
+ if (OJPEGReadByte(sp,&o)==0)
1631
+ return(0);
1632
+ if (sp->subsamplingcorrect==0)
1633
+ sp->sof_c[q]=o;
1634
+ /* H: Horizontal sampling factor, and V: Vertical sampling factor */
1635
+ if (OJPEGReadByte(sp,&o)==0)
1636
+ return(0);
1637
+ if (sp->subsamplingcorrect!=0)
1638
+ {
1639
+ if (q==0)
1640
+ {
1641
+ sp->subsampling_hor=(o>>4);
1642
+ sp->subsampling_ver=(o&15);
1643
+ if (((sp->subsampling_hor!=1) && (sp->subsampling_hor!=2) && (sp->subsampling_hor!=4)) ||
1644
+ ((sp->subsampling_ver!=1) && (sp->subsampling_ver!=2) && (sp->subsampling_ver!=4)))
1645
+ sp->subsampling_force_desubsampling_inside_decompression=1;
1646
+ }
1647
+ else
1648
+ {
1649
+ if (o!=17)
1650
+ sp->subsampling_force_desubsampling_inside_decompression=1;
1651
+ }
1652
+ }
1653
+ else
1654
+ {
1655
+ sp->sof_hv[q]=o;
1656
+ if (sp->subsampling_force_desubsampling_inside_decompression==0)
1657
+ {
1658
+ if (q==0)
1659
+ {
1660
+ if (o!=((sp->subsampling_hor<<4)|sp->subsampling_ver))
1661
+ {
1662
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected subsampling values");
1663
+ return(0);
1664
+ }
1665
+ }
1666
+ else
1667
+ {
1668
+ if (o!=17)
1669
+ {
1670
+ TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected subsampling values");
1671
+ return(0);
1672
+ }
1673
+ }
1674
+ }
1675
+ }
1676
+ /* Tq: Quantization table destination selector */
1677
+ if (OJPEGReadByte(sp,&o)==0)
1678
+ return(0);
1679
+ if (sp->subsamplingcorrect==0)
1680
+ sp->sof_tq[q]=o;
1681
+ }
1682
+ if (sp->subsamplingcorrect==0)
1683
+ sp->sof_log=1;
1684
+ return(1);
1685
+ }
1686
+
1687
+ static int
1688
+ OJPEGReadHeaderInfoSecStreamSos(TIFF* tif)
1689
+ {
1690
+ /* this marker needs to be checked, and part of its data needs to be saved for regeneration later on */
1691
+ static const char module[]="OJPEGReadHeaderInfoSecStreamSos";
1692
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1693
+ uint16 m;
1694
+ uint8 n;
1695
+ uint8 o;
1696
+ assert(sp->subsamplingcorrect==0);
1697
+ if (sp->sof_log==0)
1698
+ {
1699
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
1700
+ return(0);
1701
+ }
1702
+ /* Ls */
1703
+ if (OJPEGReadWord(sp,&m)==0)
1704
+ return(0);
1705
+ if (m!=6+sp->samples_per_pixel_per_plane*2)
1706
+ {
1707
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
1708
+ return(0);
1709
+ }
1710
+ /* Ns */
1711
+ if (OJPEGReadByte(sp,&n)==0)
1712
+ return(0);
1713
+ if (n!=sp->samples_per_pixel_per_plane)
1714
+ {
1715
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
1716
+ return(0);
1717
+ }
1718
+ /* Cs, Td, and Ta */
1719
+ for (o=0; o<sp->samples_per_pixel_per_plane; o++)
1720
+ {
1721
+ /* Cs */
1722
+ if (OJPEGReadByte(sp,&n)==0)
1723
+ return(0);
1724
+ sp->sos_cs[sp->plane_sample_offset+o]=n;
1725
+ /* Td and Ta */
1726
+ if (OJPEGReadByte(sp,&n)==0)
1727
+ return(0);
1728
+ sp->sos_tda[sp->plane_sample_offset+o]=n;
1729
+ }
1730
+ /* skip Ss, Se, Ah, en Al -> no check, as per Tom Lane recommendation, as per LibJpeg source */
1731
+ OJPEGReadSkip(sp,3);
1732
+ return(1);
1733
+ }
1734
+
1735
+ static int
1736
+ OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif)
1737
+ {
1738
+ static const char module[]="OJPEGReadHeaderInfoSecTablesQTable";
1739
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1740
+ uint8 m;
1741
+ uint8 n;
1742
+ uint32 oa;
1743
+ uint8* ob;
1744
+ uint32 p;
1745
+ if (sp->qtable_offset[0]==0)
1746
+ {
1747
+ TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
1748
+ return(0);
1749
+ }
1750
+ sp->in_buffer_file_pos_log=0;
1751
+ for (m=0; m<sp->samples_per_pixel; m++)
1752
+ {
1753
+ if ((sp->qtable_offset[m]!=0) && ((m==0) || (sp->qtable_offset[m]!=sp->qtable_offset[m-1])))
1754
+ {
1755
+ for (n=0; n<m-1; n++)
1756
+ {
1757
+ if (sp->qtable_offset[m]==sp->qtable_offset[n])
1758
+ {
1759
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegQTables tag value");
1760
+ return(0);
1761
+ }
1762
+ }
1763
+ oa=sizeof(uint32)+69;
1764
+ ob=_TIFFmalloc(oa);
1765
+ if (ob==0)
1766
+ {
1767
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1768
+ return(0);
1769
+ }
1770
+ *(uint32*)ob=oa;
1771
+ ob[sizeof(uint32)]=255;
1772
+ ob[sizeof(uint32)+1]=JPEG_MARKER_DQT;
1773
+ ob[sizeof(uint32)+2]=0;
1774
+ ob[sizeof(uint32)+3]=67;
1775
+ ob[sizeof(uint32)+4]=m;
1776
+ TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET);
1777
+ p=TIFFReadFile(tif,&ob[sizeof(uint32)+5],64);
1778
+ if (p!=64)
1779
+ return(0);
1780
+ sp->qtable[m]=ob;
1781
+ sp->sof_tq[m]=m;
1782
+ }
1783
+ else
1784
+ sp->sof_tq[m]=sp->sof_tq[m-1];
1785
+ }
1786
+ return(1);
1787
+ }
1788
+
1789
+ static int
1790
+ OJPEGReadHeaderInfoSecTablesDcTable(TIFF* tif)
1791
+ {
1792
+ static const char module[]="OJPEGReadHeaderInfoSecTablesDcTable";
1793
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1794
+ uint8 m;
1795
+ uint8 n;
1796
+ uint8 o[16];
1797
+ uint32 p;
1798
+ uint32 q;
1799
+ uint32 ra;
1800
+ uint8* rb;
1801
+ if (sp->dctable_offset[0]==0)
1802
+ {
1803
+ TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
1804
+ return(0);
1805
+ }
1806
+ sp->in_buffer_file_pos_log=0;
1807
+ for (m=0; m<sp->samples_per_pixel; m++)
1808
+ {
1809
+ if ((sp->dctable_offset[m]!=0) && ((m==0) || (sp->dctable_offset[m]!=sp->dctable_offset[m-1])))
1810
+ {
1811
+ for (n=0; n<m-1; n++)
1812
+ {
1813
+ if (sp->dctable_offset[m]==sp->dctable_offset[n])
1814
+ {
1815
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegDcTables tag value");
1816
+ return(0);
1817
+ }
1818
+ }
1819
+ TIFFSeekFile(tif,sp->dctable_offset[m],SEEK_SET);
1820
+ p=TIFFReadFile(tif,o,16);
1821
+ if (p!=16)
1822
+ return(0);
1823
+ q=0;
1824
+ for (n=0; n<16; n++)
1825
+ q+=o[n];
1826
+ ra=sizeof(uint32)+21+q;
1827
+ rb=_TIFFmalloc(ra);
1828
+ if (rb==0)
1829
+ {
1830
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1831
+ return(0);
1832
+ }
1833
+ *(uint32*)rb=ra;
1834
+ rb[sizeof(uint32)]=255;
1835
+ rb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
1836
+ rb[sizeof(uint32)+2]=((19+q)>>8);
1837
+ rb[sizeof(uint32)+3]=((19+q)&255);
1838
+ rb[sizeof(uint32)+4]=m;
1839
+ for (n=0; n<16; n++)
1840
+ rb[sizeof(uint32)+5+n]=o[n];
1841
+ p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q);
1842
+ if (p!=q)
1843
+ return(0);
1844
+ sp->dctable[m]=rb;
1845
+ sp->sos_tda[m]=(m<<4);
1846
+ }
1847
+ else
1848
+ sp->sos_tda[m]=sp->sos_tda[m-1];
1849
+ }
1850
+ return(1);
1851
+ }
1852
+
1853
+ static int
1854
+ OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif)
1855
+ {
1856
+ static const char module[]="OJPEGReadHeaderInfoSecTablesAcTable";
1857
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
1858
+ uint8 m;
1859
+ uint8 n;
1860
+ uint8 o[16];
1861
+ uint32 p;
1862
+ uint32 q;
1863
+ uint32 ra;
1864
+ uint8* rb;
1865
+ if (sp->actable_offset[0]==0)
1866
+ {
1867
+ TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
1868
+ return(0);
1869
+ }
1870
+ sp->in_buffer_file_pos_log=0;
1871
+ for (m=0; m<sp->samples_per_pixel; m++)
1872
+ {
1873
+ if ((sp->actable_offset[m]!=0) && ((m==0) || (sp->actable_offset[m]!=sp->actable_offset[m-1])))
1874
+ {
1875
+ for (n=0; n<m-1; n++)
1876
+ {
1877
+ if (sp->actable_offset[m]==sp->actable_offset[n])
1878
+ {
1879
+ TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegAcTables tag value");
1880
+ return(0);
1881
+ }
1882
+ }
1883
+ TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET);
1884
+ p=TIFFReadFile(tif,o,16);
1885
+ if (p!=16)
1886
+ return(0);
1887
+ q=0;
1888
+ for (n=0; n<16; n++)
1889
+ q+=o[n];
1890
+ ra=sizeof(uint32)+21+q;
1891
+ rb=_TIFFmalloc(ra);
1892
+ if (rb==0)
1893
+ {
1894
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1895
+ return(0);
1896
+ }
1897
+ *(uint32*)rb=ra;
1898
+ rb[sizeof(uint32)]=255;
1899
+ rb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
1900
+ rb[sizeof(uint32)+2]=((19+q)>>8);
1901
+ rb[sizeof(uint32)+3]=((19+q)&255);
1902
+ rb[sizeof(uint32)+4]=(16|m);
1903
+ for (n=0; n<16; n++)
1904
+ rb[sizeof(uint32)+5+n]=o[n];
1905
+ p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q);
1906
+ if (p!=q)
1907
+ return(0);
1908
+ sp->actable[m]=rb;
1909
+ sp->sos_tda[m]=(sp->sos_tda[m]|m);
1910
+ }
1911
+ else
1912
+ sp->sos_tda[m]=(sp->sos_tda[m]|(sp->sos_tda[m-1]&15));
1913
+ }
1914
+ return(1);
1915
+ }
1916
+
1917
+ static int
1918
+ OJPEGReadBufferFill(OJPEGState* sp)
1919
+ {
1920
+ uint16 m;
1921
+ tmsize_t n;
1922
+ /* TODO: double-check: when subsamplingcorrect is set, no call to TIFFErrorExt or TIFFWarningExt should be made
1923
+ * in any other case, seek or read errors should be passed through */
1924
+ do
1925
+ {
1926
+ if (sp->in_buffer_file_togo!=0)
1927
+ {
1928
+ if (sp->in_buffer_file_pos_log==0)
1929
+ {
1930
+ TIFFSeekFile(sp->tif,sp->in_buffer_file_pos,SEEK_SET);
1931
+ sp->in_buffer_file_pos_log=1;
1932
+ }
1933
+ m=OJPEG_BUFFER;
1934
+ if ((uint64)m>sp->in_buffer_file_togo)
1935
+ m=(uint16)sp->in_buffer_file_togo;
1936
+ n=TIFFReadFile(sp->tif,sp->in_buffer,(tmsize_t)m);
1937
+ if (n==0)
1938
+ return(0);
1939
+ assert(n>0);
1940
+ assert(n<=OJPEG_BUFFER);
1941
+ assert(n<65536);
1942
+ assert((uint64)n<=sp->in_buffer_file_togo);
1943
+ m=(uint16)n;
1944
+ sp->in_buffer_togo=m;
1945
+ sp->in_buffer_cur=sp->in_buffer;
1946
+ sp->in_buffer_file_togo-=m;
1947
+ sp->in_buffer_file_pos+=m;
1948
+ break;
1949
+ }
1950
+ sp->in_buffer_file_pos_log=0;
1951
+ switch(sp->in_buffer_source)
1952
+ {
1953
+ case osibsNotSetYet:
1954
+ if (sp->jpeg_interchange_format!=0)
1955
+ {
1956
+ sp->in_buffer_file_pos=sp->jpeg_interchange_format;
1957
+ sp->in_buffer_file_togo=sp->jpeg_interchange_format_length;
1958
+ }
1959
+ sp->in_buffer_source=osibsJpegInterchangeFormat;
1960
+ break;
1961
+ case osibsJpegInterchangeFormat:
1962
+ sp->in_buffer_source=osibsStrile;
1963
+ case osibsStrile:
1964
+ if (!_TIFFFillStriles( sp->tif )
1965
+ || sp->tif->tif_dir.td_stripoffset == NULL
1966
+ || sp->tif->tif_dir.td_stripbytecount == NULL)
1967
+ return 0;
1968
+
1969
+ if (sp->in_buffer_next_strile==sp->in_buffer_strile_count)
1970
+ sp->in_buffer_source=osibsEof;
1971
+ else
1972
+ {
1973
+ sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile];
1974
+ if (sp->in_buffer_file_pos!=0)
1975
+ {
1976
+ if (sp->in_buffer_file_pos>=sp->file_size)
1977
+ sp->in_buffer_file_pos=0;
1978
+ else if (sp->tif->tif_dir.td_stripbytecount==NULL)
1979
+ sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
1980
+ else
1981
+ {
1982
+ if (sp->tif->tif_dir.td_stripbytecount == 0) {
1983
+ TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing");
1984
+ return(0);
1985
+ }
1986
+ sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile];
1987
+ if (sp->in_buffer_file_togo==0)
1988
+ sp->in_buffer_file_pos=0;
1989
+ else if (sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size)
1990
+ sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
1991
+ }
1992
+ }
1993
+ sp->in_buffer_next_strile++;
1994
+ }
1995
+ break;
1996
+ default:
1997
+ return(0);
1998
+ }
1999
+ } while (1);
2000
+ return(1);
2001
+ }
2002
+
2003
+ static int
2004
+ OJPEGReadByte(OJPEGState* sp, uint8* byte)
2005
+ {
2006
+ if (sp->in_buffer_togo==0)
2007
+ {
2008
+ if (OJPEGReadBufferFill(sp)==0)
2009
+ return(0);
2010
+ assert(sp->in_buffer_togo>0);
2011
+ }
2012
+ *byte=*(sp->in_buffer_cur);
2013
+ sp->in_buffer_cur++;
2014
+ sp->in_buffer_togo--;
2015
+ return(1);
2016
+ }
2017
+
2018
+ static int
2019
+ OJPEGReadBytePeek(OJPEGState* sp, uint8* byte)
2020
+ {
2021
+ if (sp->in_buffer_togo==0)
2022
+ {
2023
+ if (OJPEGReadBufferFill(sp)==0)
2024
+ return(0);
2025
+ assert(sp->in_buffer_togo>0);
2026
+ }
2027
+ *byte=*(sp->in_buffer_cur);
2028
+ return(1);
2029
+ }
2030
+
2031
+ static void
2032
+ OJPEGReadByteAdvance(OJPEGState* sp)
2033
+ {
2034
+ assert(sp->in_buffer_togo>0);
2035
+ sp->in_buffer_cur++;
2036
+ sp->in_buffer_togo--;
2037
+ }
2038
+
2039
+ static int
2040
+ OJPEGReadWord(OJPEGState* sp, uint16* word)
2041
+ {
2042
+ uint8 m;
2043
+ if (OJPEGReadByte(sp,&m)==0)
2044
+ return(0);
2045
+ *word=(m<<8);
2046
+ if (OJPEGReadByte(sp,&m)==0)
2047
+ return(0);
2048
+ *word|=m;
2049
+ return(1);
2050
+ }
2051
+
2052
+ static int
2053
+ OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem)
2054
+ {
2055
+ uint16 mlen;
2056
+ uint8* mmem;
2057
+ uint16 n;
2058
+ assert(len>0);
2059
+ mlen=len;
2060
+ mmem=mem;
2061
+ do
2062
+ {
2063
+ if (sp->in_buffer_togo==0)
2064
+ {
2065
+ if (OJPEGReadBufferFill(sp)==0)
2066
+ return(0);
2067
+ assert(sp->in_buffer_togo>0);
2068
+ }
2069
+ n=mlen;
2070
+ if (n>sp->in_buffer_togo)
2071
+ n=sp->in_buffer_togo;
2072
+ _TIFFmemcpy(mmem,sp->in_buffer_cur,n);
2073
+ sp->in_buffer_cur+=n;
2074
+ sp->in_buffer_togo-=n;
2075
+ mlen-=n;
2076
+ mmem+=n;
2077
+ } while(mlen>0);
2078
+ return(1);
2079
+ }
2080
+
2081
+ static void
2082
+ OJPEGReadSkip(OJPEGState* sp, uint16 len)
2083
+ {
2084
+ uint16 m;
2085
+ uint16 n;
2086
+ m=len;
2087
+ n=m;
2088
+ if (n>sp->in_buffer_togo)
2089
+ n=sp->in_buffer_togo;
2090
+ sp->in_buffer_cur+=n;
2091
+ sp->in_buffer_togo-=n;
2092
+ m-=n;
2093
+ if (m>0)
2094
+ {
2095
+ assert(sp->in_buffer_togo==0);
2096
+ n=m;
2097
+ if ((uint64)n>sp->in_buffer_file_togo)
2098
+ n=(uint16)sp->in_buffer_file_togo;
2099
+ sp->in_buffer_file_pos+=n;
2100
+ sp->in_buffer_file_togo-=n;
2101
+ sp->in_buffer_file_pos_log=0;
2102
+ /* we don't skip past jpeginterchangeformat/strile block...
2103
+ * if that is asked from us, we're dealing with totally bazurk
2104
+ * data anyway, and we've not seen this happening on any
2105
+ * testfile, so we might as well likely cause some other
2106
+ * meaningless error to be passed at some later time
2107
+ */
2108
+ }
2109
+ }
2110
+
2111
+ static int
2112
+ OJPEGWriteStream(TIFF* tif, void** mem, uint32* len)
2113
+ {
2114
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2115
+ *len=0;
2116
+ do
2117
+ {
2118
+ assert(sp->out_state<=ososEoi);
2119
+ switch(sp->out_state)
2120
+ {
2121
+ case ososSoi:
2122
+ OJPEGWriteStreamSoi(tif,mem,len);
2123
+ break;
2124
+ case ososQTable0:
2125
+ OJPEGWriteStreamQTable(tif,0,mem,len);
2126
+ break;
2127
+ case ososQTable1:
2128
+ OJPEGWriteStreamQTable(tif,1,mem,len);
2129
+ break;
2130
+ case ososQTable2:
2131
+ OJPEGWriteStreamQTable(tif,2,mem,len);
2132
+ break;
2133
+ case ososQTable3:
2134
+ OJPEGWriteStreamQTable(tif,3,mem,len);
2135
+ break;
2136
+ case ososDcTable0:
2137
+ OJPEGWriteStreamDcTable(tif,0,mem,len);
2138
+ break;
2139
+ case ososDcTable1:
2140
+ OJPEGWriteStreamDcTable(tif,1,mem,len);
2141
+ break;
2142
+ case ososDcTable2:
2143
+ OJPEGWriteStreamDcTable(tif,2,mem,len);
2144
+ break;
2145
+ case ososDcTable3:
2146
+ OJPEGWriteStreamDcTable(tif,3,mem,len);
2147
+ break;
2148
+ case ososAcTable0:
2149
+ OJPEGWriteStreamAcTable(tif,0,mem,len);
2150
+ break;
2151
+ case ososAcTable1:
2152
+ OJPEGWriteStreamAcTable(tif,1,mem,len);
2153
+ break;
2154
+ case ososAcTable2:
2155
+ OJPEGWriteStreamAcTable(tif,2,mem,len);
2156
+ break;
2157
+ case ososAcTable3:
2158
+ OJPEGWriteStreamAcTable(tif,3,mem,len);
2159
+ break;
2160
+ case ososDri:
2161
+ OJPEGWriteStreamDri(tif,mem,len);
2162
+ break;
2163
+ case ososSof:
2164
+ OJPEGWriteStreamSof(tif,mem,len);
2165
+ break;
2166
+ case ososSos:
2167
+ OJPEGWriteStreamSos(tif,mem,len);
2168
+ break;
2169
+ case ososCompressed:
2170
+ if (OJPEGWriteStreamCompressed(tif,mem,len)==0)
2171
+ return(0);
2172
+ break;
2173
+ case ososRst:
2174
+ OJPEGWriteStreamRst(tif,mem,len);
2175
+ break;
2176
+ case ososEoi:
2177
+ OJPEGWriteStreamEoi(tif,mem,len);
2178
+ break;
2179
+ }
2180
+ } while (*len==0);
2181
+ return(1);
2182
+ }
2183
+
2184
+ static void
2185
+ OJPEGWriteStreamSoi(TIFF* tif, void** mem, uint32* len)
2186
+ {
2187
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2188
+ assert(OJPEG_BUFFER>=2);
2189
+ sp->out_buffer[0]=255;
2190
+ sp->out_buffer[1]=JPEG_MARKER_SOI;
2191
+ *len=2;
2192
+ *mem=(void*)sp->out_buffer;
2193
+ sp->out_state++;
2194
+ }
2195
+
2196
+ static void
2197
+ OJPEGWriteStreamQTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
2198
+ {
2199
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2200
+ if (sp->qtable[table_index]!=0)
2201
+ {
2202
+ *mem=(void*)(sp->qtable[table_index]+sizeof(uint32));
2203
+ *len=*((uint32*)sp->qtable[table_index])-sizeof(uint32);
2204
+ }
2205
+ sp->out_state++;
2206
+ }
2207
+
2208
+ static void
2209
+ OJPEGWriteStreamDcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
2210
+ {
2211
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2212
+ if (sp->dctable[table_index]!=0)
2213
+ {
2214
+ *mem=(void*)(sp->dctable[table_index]+sizeof(uint32));
2215
+ *len=*((uint32*)sp->dctable[table_index])-sizeof(uint32);
2216
+ }
2217
+ sp->out_state++;
2218
+ }
2219
+
2220
+ static void
2221
+ OJPEGWriteStreamAcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
2222
+ {
2223
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2224
+ if (sp->actable[table_index]!=0)
2225
+ {
2226
+ *mem=(void*)(sp->actable[table_index]+sizeof(uint32));
2227
+ *len=*((uint32*)sp->actable[table_index])-sizeof(uint32);
2228
+ }
2229
+ sp->out_state++;
2230
+ }
2231
+
2232
+ static void
2233
+ OJPEGWriteStreamDri(TIFF* tif, void** mem, uint32* len)
2234
+ {
2235
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2236
+ assert(OJPEG_BUFFER>=6);
2237
+ if (sp->restart_interval!=0)
2238
+ {
2239
+ sp->out_buffer[0]=255;
2240
+ sp->out_buffer[1]=JPEG_MARKER_DRI;
2241
+ sp->out_buffer[2]=0;
2242
+ sp->out_buffer[3]=4;
2243
+ sp->out_buffer[4]=(sp->restart_interval>>8);
2244
+ sp->out_buffer[5]=(sp->restart_interval&255);
2245
+ *len=6;
2246
+ *mem=(void*)sp->out_buffer;
2247
+ }
2248
+ sp->out_state++;
2249
+ }
2250
+
2251
+ static void
2252
+ OJPEGWriteStreamSof(TIFF* tif, void** mem, uint32* len)
2253
+ {
2254
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2255
+ uint8 m;
2256
+ assert(OJPEG_BUFFER>=2+8+sp->samples_per_pixel_per_plane*3);
2257
+ assert(255>=8+sp->samples_per_pixel_per_plane*3);
2258
+ sp->out_buffer[0]=255;
2259
+ sp->out_buffer[1]=sp->sof_marker_id;
2260
+ /* Lf */
2261
+ sp->out_buffer[2]=0;
2262
+ sp->out_buffer[3]=8+sp->samples_per_pixel_per_plane*3;
2263
+ /* P */
2264
+ sp->out_buffer[4]=8;
2265
+ /* Y */
2266
+ sp->out_buffer[5]=(sp->sof_y>>8);
2267
+ sp->out_buffer[6]=(sp->sof_y&255);
2268
+ /* X */
2269
+ sp->out_buffer[7]=(sp->sof_x>>8);
2270
+ sp->out_buffer[8]=(sp->sof_x&255);
2271
+ /* Nf */
2272
+ sp->out_buffer[9]=sp->samples_per_pixel_per_plane;
2273
+ for (m=0; m<sp->samples_per_pixel_per_plane; m++)
2274
+ {
2275
+ /* C */
2276
+ sp->out_buffer[10+m*3]=sp->sof_c[sp->plane_sample_offset+m];
2277
+ /* H and V */
2278
+ sp->out_buffer[10+m*3+1]=sp->sof_hv[sp->plane_sample_offset+m];
2279
+ /* Tq */
2280
+ sp->out_buffer[10+m*3+2]=sp->sof_tq[sp->plane_sample_offset+m];
2281
+ }
2282
+ *len=10+sp->samples_per_pixel_per_plane*3;
2283
+ *mem=(void*)sp->out_buffer;
2284
+ sp->out_state++;
2285
+ }
2286
+
2287
+ static void
2288
+ OJPEGWriteStreamSos(TIFF* tif, void** mem, uint32* len)
2289
+ {
2290
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2291
+ uint8 m;
2292
+ assert(OJPEG_BUFFER>=2+6+sp->samples_per_pixel_per_plane*2);
2293
+ assert(255>=6+sp->samples_per_pixel_per_plane*2);
2294
+ sp->out_buffer[0]=255;
2295
+ sp->out_buffer[1]=JPEG_MARKER_SOS;
2296
+ /* Ls */
2297
+ sp->out_buffer[2]=0;
2298
+ sp->out_buffer[3]=6+sp->samples_per_pixel_per_plane*2;
2299
+ /* Ns */
2300
+ sp->out_buffer[4]=sp->samples_per_pixel_per_plane;
2301
+ for (m=0; m<sp->samples_per_pixel_per_plane; m++)
2302
+ {
2303
+ /* Cs */
2304
+ sp->out_buffer[5+m*2]=sp->sos_cs[sp->plane_sample_offset+m];
2305
+ /* Td and Ta */
2306
+ sp->out_buffer[5+m*2+1]=sp->sos_tda[sp->plane_sample_offset+m];
2307
+ }
2308
+ /* Ss */
2309
+ sp->out_buffer[5+sp->samples_per_pixel_per_plane*2]=0;
2310
+ /* Se */
2311
+ sp->out_buffer[5+sp->samples_per_pixel_per_plane*2+1]=63;
2312
+ /* Ah and Al */
2313
+ sp->out_buffer[5+sp->samples_per_pixel_per_plane*2+2]=0;
2314
+ *len=8+sp->samples_per_pixel_per_plane*2;
2315
+ *mem=(void*)sp->out_buffer;
2316
+ sp->out_state++;
2317
+ }
2318
+
2319
+ static int
2320
+ OJPEGWriteStreamCompressed(TIFF* tif, void** mem, uint32* len)
2321
+ {
2322
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2323
+ if (sp->in_buffer_togo==0)
2324
+ {
2325
+ if (OJPEGReadBufferFill(sp)==0)
2326
+ return(0);
2327
+ assert(sp->in_buffer_togo>0);
2328
+ }
2329
+ *len=sp->in_buffer_togo;
2330
+ *mem=(void*)sp->in_buffer_cur;
2331
+ sp->in_buffer_togo=0;
2332
+ if (sp->in_buffer_file_togo==0)
2333
+ {
2334
+ switch(sp->in_buffer_source)
2335
+ {
2336
+ case osibsStrile:
2337
+ if (sp->in_buffer_next_strile<sp->in_buffer_strile_count)
2338
+ sp->out_state=ososRst;
2339
+ else
2340
+ sp->out_state=ososEoi;
2341
+ break;
2342
+ case osibsEof:
2343
+ sp->out_state=ososEoi;
2344
+ break;
2345
+ default:
2346
+ break;
2347
+ }
2348
+ }
2349
+ return(1);
2350
+ }
2351
+
2352
+ static void
2353
+ OJPEGWriteStreamRst(TIFF* tif, void** mem, uint32* len)
2354
+ {
2355
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2356
+ assert(OJPEG_BUFFER>=2);
2357
+ sp->out_buffer[0]=255;
2358
+ sp->out_buffer[1]=JPEG_MARKER_RST0+sp->restart_index;
2359
+ sp->restart_index++;
2360
+ if (sp->restart_index==8)
2361
+ sp->restart_index=0;
2362
+ *len=2;
2363
+ *mem=(void*)sp->out_buffer;
2364
+ sp->out_state=ososCompressed;
2365
+ }
2366
+
2367
+ static void
2368
+ OJPEGWriteStreamEoi(TIFF* tif, void** mem, uint32* len)
2369
+ {
2370
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2371
+ assert(OJPEG_BUFFER>=2);
2372
+ sp->out_buffer[0]=255;
2373
+ sp->out_buffer[1]=JPEG_MARKER_EOI;
2374
+ *len=2;
2375
+ *mem=(void*)sp->out_buffer;
2376
+ }
2377
+
2378
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2379
+ static int
2380
+ jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo)
2381
+ {
2382
+ return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_create_decompress(cinfo),1));
2383
+ }
2384
+ #endif
2385
+
2386
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2387
+ static int
2388
+ jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image)
2389
+ {
2390
+ return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_header(cinfo,require_image),1));
2391
+ }
2392
+ #endif
2393
+
2394
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2395
+ static int
2396
+ jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo)
2397
+ {
2398
+ return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_start_decompress(cinfo),1));
2399
+ }
2400
+ #endif
2401
+
2402
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2403
+ static int
2404
+ jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines)
2405
+ {
2406
+ return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_scanlines(cinfo,scanlines,max_lines),1));
2407
+ }
2408
+ #endif
2409
+
2410
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2411
+ static int
2412
+ jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines)
2413
+ {
2414
+ return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_raw_data(cinfo,data,max_lines),1));
2415
+ }
2416
+ #endif
2417
+
2418
+ #ifndef LIBJPEG_ENCAP_EXTERNAL
2419
+ static void
2420
+ jpeg_encap_unwind(TIFF* tif)
2421
+ {
2422
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2423
+ LONGJMP(sp->exit_jmpbuf,1);
2424
+ }
2425
+ #endif
2426
+
2427
+ static void
2428
+ OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo)
2429
+ {
2430
+ char buffer[JMSG_LENGTH_MAX];
2431
+ (*cinfo->err->format_message)(cinfo,buffer);
2432
+ TIFFWarningExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer);
2433
+ }
2434
+
2435
+ static void
2436
+ OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo)
2437
+ {
2438
+ char buffer[JMSG_LENGTH_MAX];
2439
+ (*cinfo->err->format_message)(cinfo,buffer);
2440
+ TIFFErrorExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer);
2441
+ jpeg_encap_unwind((TIFF*)(cinfo->client_data));
2442
+ }
2443
+
2444
+ static void
2445
+ OJPEGLibjpegJpegSourceMgrInitSource(jpeg_decompress_struct* cinfo)
2446
+ {
2447
+ (void)cinfo;
2448
+ }
2449
+
2450
+ static boolean
2451
+ OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo)
2452
+ {
2453
+ TIFF* tif=(TIFF*)cinfo->client_data;
2454
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
2455
+ void* mem=0;
2456
+ uint32 len=0U;
2457
+ if (OJPEGWriteStream(tif,&mem,&len)==0)
2458
+ {
2459
+ TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Premature end of JPEG data");
2460
+ jpeg_encap_unwind(tif);
2461
+ }
2462
+ sp->libjpeg_jpeg_source_mgr.bytes_in_buffer=len;
2463
+ sp->libjpeg_jpeg_source_mgr.next_input_byte=mem;
2464
+ return(1);
2465
+ }
2466
+
2467
+ static void
2468
+ OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_bytes)
2469
+ {
2470
+ TIFF* tif=(TIFF*)cinfo->client_data;
2471
+ (void)num_bytes;
2472
+ TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
2473
+ jpeg_encap_unwind(tif);
2474
+ }
2475
+
2476
+ static boolean
2477
+ OJPEGLibjpegJpegSourceMgrResyncToRestart(jpeg_decompress_struct* cinfo, int desired)
2478
+ {
2479
+ TIFF* tif=(TIFF*)cinfo->client_data;
2480
+ (void)desired;
2481
+ TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
2482
+ jpeg_encap_unwind(tif);
2483
+ return(0);
2484
+ }
2485
+
2486
+ static void
2487
+ OJPEGLibjpegJpegSourceMgrTermSource(jpeg_decompress_struct* cinfo)
2488
+ {
2489
+ (void)cinfo;
2490
+ }
2491
+
2492
+ #endif
2493
+
2494
+
2495
+ /*
2496
+ * Local Variables:
2497
+ * mode: c
2498
+ * c-basic-offset: 8
2499
+ * fill-column: 78
2500
+ * End:
2501
+ */