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,1533 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
4
+ // Digital Ltd. LLC
5
+ //
6
+ // All rights reserved.
7
+ //
8
+ // Redistribution and use in source and binary forms, with or without
9
+ // modification, are permitted provided that the following conditions are
10
+ // met:
11
+ // * Redistributions of source code must retain the above copyright
12
+ // notice, this list of conditions and the following disclaimer.
13
+ // * Redistributions in binary form must reproduce the above
14
+ // copyright notice, this list of conditions and the following disclaimer
15
+ // in the documentation and/or other materials provided with the
16
+ // distribution.
17
+ // * Neither the name of Industrial Light & Magic nor the names of
18
+ // its contributors may be used to endorse or promote products derived
19
+ // from this software without specific prior written permission.
20
+ //
21
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ //
33
+ ///////////////////////////////////////////////////////////////////////////
34
+
35
+ //-----------------------------------------------------------------------------
36
+ //
37
+ // class TiledInputFile
38
+ //
39
+ //-----------------------------------------------------------------------------
40
+
41
+ #include "ImfTiledInputFile.h"
42
+ #include "ImfTileDescriptionAttribute.h"
43
+ #include "ImfChannelList.h"
44
+ #include "ImfMisc.h"
45
+ #include "ImfTiledMisc.h"
46
+ #include "ImfStdIO.h"
47
+ #include "ImfCompressor.h"
48
+ #include "ImfXdr.h"
49
+ #include "ImfConvert.h"
50
+ #include "ImfVersion.h"
51
+ #include "ImfTileOffsets.h"
52
+ #include "ImfThreading.h"
53
+ #include "ImfPartType.h"
54
+ #include "ImfMultiPartInputFile.h"
55
+ #include "ImfInputStreamMutex.h"
56
+ #include "IlmThreadPool.h"
57
+ #include "IlmThreadSemaphore.h"
58
+ #include "IlmThreadMutex.h"
59
+ #include "ImathVec.h"
60
+ #include "Iex.h"
61
+ #include <string>
62
+ #include <vector>
63
+ #include <algorithm>
64
+ #include <assert.h>
65
+ #include "ImfInputPartData.h"
66
+ #include "ImfNamespace.h"
67
+
68
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
69
+
70
+ using IMATH_NAMESPACE::Box2i;
71
+ using IMATH_NAMESPACE::V2i;
72
+ using std::string;
73
+ using std::vector;
74
+ using std::min;
75
+ using std::max;
76
+ using ILMTHREAD_NAMESPACE::Mutex;
77
+ using ILMTHREAD_NAMESPACE::Lock;
78
+ using ILMTHREAD_NAMESPACE::Semaphore;
79
+ using ILMTHREAD_NAMESPACE::Task;
80
+ using ILMTHREAD_NAMESPACE::TaskGroup;
81
+ using ILMTHREAD_NAMESPACE::ThreadPool;
82
+
83
+ namespace {
84
+
85
+ struct TInSliceInfo
86
+ {
87
+ PixelType typeInFrameBuffer;
88
+ PixelType typeInFile;
89
+ char * base;
90
+ size_t xStride;
91
+ size_t yStride;
92
+ bool fill;
93
+ bool skip;
94
+ double fillValue;
95
+ int xTileCoords;
96
+ int yTileCoords;
97
+
98
+ TInSliceInfo (PixelType typeInFrameBuffer = HALF,
99
+ PixelType typeInFile = HALF,
100
+ char *base = 0,
101
+ size_t xStride = 0,
102
+ size_t yStride = 0,
103
+ bool fill = false,
104
+ bool skip = false,
105
+ double fillValue = 0.0,
106
+ int xTileCoords = 0,
107
+ int yTileCoords = 0);
108
+ };
109
+
110
+
111
+ TInSliceInfo::TInSliceInfo (PixelType tifb,
112
+ PixelType tifl,
113
+ char *b,
114
+ size_t xs, size_t ys,
115
+ bool f, bool s,
116
+ double fv,
117
+ int xtc,
118
+ int ytc)
119
+ :
120
+ typeInFrameBuffer (tifb),
121
+ typeInFile (tifl),
122
+ base (b),
123
+ xStride (xs),
124
+ yStride (ys),
125
+ fill (f),
126
+ skip (s),
127
+ fillValue (fv),
128
+ xTileCoords (xtc),
129
+ yTileCoords (ytc)
130
+ {
131
+ // empty
132
+ }
133
+
134
+
135
+ struct TileBuffer
136
+ {
137
+ const char * uncompressedData;
138
+ char * buffer;
139
+ int dataSize;
140
+ Compressor * compressor;
141
+ Compressor::Format format;
142
+ int dx;
143
+ int dy;
144
+ int lx;
145
+ int ly;
146
+ bool hasException;
147
+ string exception;
148
+
149
+ TileBuffer (Compressor * const comp);
150
+ ~TileBuffer ();
151
+
152
+ inline void wait () {_sem.wait();}
153
+ inline void post () {_sem.post();}
154
+
155
+ protected:
156
+
157
+ Semaphore _sem;
158
+ };
159
+
160
+
161
+ TileBuffer::TileBuffer (Compressor *comp):
162
+ uncompressedData (0),
163
+ buffer (0),
164
+ dataSize (0),
165
+ compressor (comp),
166
+ format (defaultFormat (compressor)),
167
+ dx (-1),
168
+ dy (-1),
169
+ lx (-1),
170
+ ly (-1),
171
+ hasException (false),
172
+ exception (),
173
+ _sem (1)
174
+ {
175
+ // empty
176
+ }
177
+
178
+
179
+ TileBuffer::~TileBuffer ()
180
+ {
181
+ delete compressor;
182
+ }
183
+
184
+ } // namespace
185
+
186
+
187
+ class MultiPartInputFile;
188
+
189
+
190
+ //
191
+ // struct TiledInputFile::Data stores things that will be
192
+ // needed between calls to readTile()
193
+ //
194
+
195
+ struct TiledInputFile::Data: public Mutex
196
+ {
197
+ Header header; // the image header
198
+ TileDescription tileDesc; // describes the tile layout
199
+ int version; // file's version
200
+ FrameBuffer frameBuffer; // framebuffer to write into
201
+ LineOrder lineOrder; // the file's lineorder
202
+ int minX; // data window's min x coord
203
+ int maxX; // data window's max x coord
204
+ int minY; // data window's min y coord
205
+ int maxY; // data window's max x coord
206
+
207
+ int numXLevels; // number of x levels
208
+ int numYLevels; // number of y levels
209
+ int * numXTiles; // number of x tiles at a level
210
+ int * numYTiles; // number of y tiles at a level
211
+
212
+ TileOffsets tileOffsets; // stores offsets in file for
213
+ // each tile
214
+
215
+ bool fileIsComplete; // True if no tiles are missing
216
+ // in the file
217
+
218
+ vector<TInSliceInfo> slices; // info about channels in file
219
+
220
+ size_t bytesPerPixel; // size of an uncompressed pixel
221
+
222
+ size_t maxBytesPerTileLine; // combined size of a line
223
+ // over all channels
224
+
225
+ int partNumber; // part number
226
+
227
+ bool multiPartBackwardSupport; // if we are reading a multipart file
228
+ // using OpenEXR 1.7 API
229
+
230
+ int numThreads; // number of threads
231
+
232
+ MultiPartInputFile* multiPartFile; // the MultiPartInputFile used to
233
+ // support backward compatibility
234
+
235
+ vector<TileBuffer*> tileBuffers; // each holds a single tile
236
+ size_t tileBufferSize; // size of the tile buffers
237
+
238
+ bool memoryMapped; // if the stream is memory mapped
239
+
240
+ InputStreamMutex * _streamData;
241
+ bool _deleteStream;
242
+
243
+ Data (int numThreads);
244
+ ~Data ();
245
+
246
+ inline TileBuffer * getTileBuffer (int number);
247
+ // hash function from tile indices
248
+ // into our vector of tile buffers
249
+ };
250
+
251
+
252
+ TiledInputFile::Data::Data (int numThreads):
253
+ numXTiles (0),
254
+ numYTiles (0),
255
+ partNumber (-1),
256
+ multiPartBackwardSupport(false),
257
+ numThreads(numThreads),
258
+ memoryMapped(false),
259
+ _streamData(NULL),
260
+ _deleteStream(false)
261
+ {
262
+ //
263
+ // We need at least one tileBuffer, but if threading is used,
264
+ // to keep n threads busy we need 2*n tileBuffers
265
+ //
266
+
267
+ tileBuffers.resize (max (1, 2 * numThreads));
268
+ }
269
+
270
+
271
+ TiledInputFile::Data::~Data ()
272
+ {
273
+ delete [] numXTiles;
274
+ delete [] numYTiles;
275
+
276
+ for (size_t i = 0; i < tileBuffers.size(); i++)
277
+ delete tileBuffers[i];
278
+
279
+ if (multiPartBackwardSupport)
280
+ delete multiPartFile;
281
+ }
282
+
283
+
284
+ TileBuffer*
285
+ TiledInputFile::Data::getTileBuffer (int number)
286
+ {
287
+ return tileBuffers[number % tileBuffers.size()];
288
+ }
289
+
290
+
291
+ namespace {
292
+
293
+ void
294
+ readTileData (InputStreamMutex *streamData,
295
+ TiledInputFile::Data *ifd,
296
+ int dx, int dy,
297
+ int lx, int ly,
298
+ char *&buffer,
299
+ int &dataSize)
300
+ {
301
+ //
302
+ // Read a single tile block from the file and into the array pointed
303
+ // to by buffer. If the file is memory-mapped, then we change where
304
+ // buffer points instead of writing into the array (hence buffer needs
305
+ // to be a reference to a char *).
306
+ //
307
+
308
+ //
309
+ // Look up the location for this tile in the Index and
310
+ // seek to that position if necessary
311
+ //
312
+
313
+ Int64 tileOffset = ifd->tileOffsets (dx, dy, lx, ly);
314
+
315
+ if (tileOffset == 0)
316
+ {
317
+ THROW (IEX_NAMESPACE::InputExc, "Tile (" << dx << ", " << dy << ", " <<
318
+ lx << ", " << ly << ") is missing.");
319
+ }
320
+
321
+
322
+ //
323
+ // In a multi-part file, the next chunk does not need to
324
+ // belong to the same part, so we have to compare the
325
+ // offset here.
326
+ //
327
+
328
+ if (!isMultiPart(ifd->version))
329
+ {
330
+ if (streamData->currentPosition != tileOffset)
331
+ streamData->is->seekg (tileOffset);
332
+ }
333
+ else
334
+ {
335
+ //
336
+ // In a multi-part file, the file pointer may be moved by other
337
+ // parts, so we have to ask tellg() where we are.
338
+ //
339
+ if (streamData->is->tellg() != tileOffset)
340
+ streamData->is->seekg (tileOffset);
341
+ }
342
+
343
+ //
344
+ // Read the first few bytes of the tile (the header).
345
+ // Verify that the tile coordinates and the level number
346
+ // are correct.
347
+ //
348
+
349
+ int tileXCoord, tileYCoord, levelX, levelY;
350
+
351
+ if (isMultiPart(ifd->version))
352
+ {
353
+ int partNumber;
354
+ Xdr::read <StreamIO> (*streamData->is, partNumber);
355
+ if (partNumber != ifd->partNumber)
356
+ {
357
+ THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber
358
+ << ", should be " << ifd->partNumber << ".");
359
+ }
360
+ }
361
+
362
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*streamData->is, tileXCoord);
363
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*streamData->is, tileYCoord);
364
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*streamData->is, levelX);
365
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*streamData->is, levelY);
366
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*streamData->is, dataSize);
367
+
368
+ if (tileXCoord != dx)
369
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile x coordinate.");
370
+
371
+ if (tileYCoord != dy)
372
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile y coordinate.");
373
+
374
+ if (levelX != lx)
375
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile x level number coordinate.");
376
+
377
+ if (levelY != ly)
378
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile y level number coordinate.");
379
+
380
+ if (dataSize > (int) ifd->tileBufferSize)
381
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile block length.");
382
+
383
+ //
384
+ // Read the pixel data.
385
+ //
386
+
387
+ if (streamData->is->isMemoryMapped ())
388
+ buffer = streamData->is->readMemoryMapped (dataSize);
389
+ else
390
+ streamData->is->read (buffer, dataSize);
391
+
392
+ //
393
+ // Keep track of which tile is the next one in
394
+ // the file, so that we can avoid redundant seekg()
395
+ // operations (seekg() can be fairly expensive).
396
+ //
397
+
398
+ streamData->currentPosition = tileOffset + 5 * Xdr::size<int>() + dataSize;
399
+ }
400
+
401
+
402
+ void
403
+ readNextTileData (InputStreamMutex *streamData,
404
+ TiledInputFile::Data *ifd,
405
+ int &dx, int &dy,
406
+ int &lx, int &ly,
407
+ char * & buffer,
408
+ int &dataSize)
409
+ {
410
+ //
411
+ // Read the next tile block from the file
412
+ //
413
+
414
+ if(isMultiPart(ifd->version))
415
+ {
416
+ int part;
417
+ Xdr::read <StreamIO> (*streamData->is, part);
418
+ if(part!=ifd->partNumber)
419
+ {
420
+ throw IEX_NAMESPACE::InputExc("Unexpected part number in readNextTileData");
421
+ }
422
+ }
423
+
424
+ //
425
+ // Read the first few bytes of the tile (the header).
426
+ //
427
+
428
+ Xdr::read <StreamIO> (*streamData->is, dx);
429
+ Xdr::read <StreamIO> (*streamData->is, dy);
430
+ Xdr::read <StreamIO> (*streamData->is, lx);
431
+ Xdr::read <StreamIO> (*streamData->is, ly);
432
+ Xdr::read <StreamIO> (*streamData->is, dataSize);
433
+
434
+ if (dataSize > (int) ifd->tileBufferSize)
435
+ throw IEX_NAMESPACE::InputExc ("Unexpected tile block length.");
436
+
437
+ //
438
+ // Read the pixel data.
439
+ //
440
+
441
+ streamData->is->read (buffer, dataSize);
442
+
443
+ //
444
+ // Keep track of which tile is the next one in
445
+ // the file, so that we can avoid redundant seekg()
446
+ // operations (seekg() can be fairly expensive).
447
+ //
448
+
449
+ streamData->currentPosition += 5 * Xdr::size<int>() + dataSize;
450
+ }
451
+
452
+
453
+ //
454
+ // A TileBufferTask encapsulates the task of uncompressing
455
+ // a single tile and copying it into the frame buffer.
456
+ //
457
+
458
+ class TileBufferTask : public Task
459
+ {
460
+ public:
461
+
462
+ TileBufferTask (TaskGroup *group,
463
+ TiledInputFile::Data *ifd,
464
+ TileBuffer *tileBuffer);
465
+
466
+ virtual ~TileBufferTask ();
467
+
468
+ virtual void execute ();
469
+
470
+ private:
471
+
472
+ TiledInputFile::Data * _ifd;
473
+ TileBuffer * _tileBuffer;
474
+ };
475
+
476
+
477
+ TileBufferTask::TileBufferTask
478
+ (TaskGroup *group,
479
+ TiledInputFile::Data *ifd,
480
+ TileBuffer *tileBuffer)
481
+ :
482
+ Task (group),
483
+ _ifd (ifd),
484
+ _tileBuffer (tileBuffer)
485
+ {
486
+ // empty
487
+ }
488
+
489
+
490
+ TileBufferTask::~TileBufferTask ()
491
+ {
492
+ //
493
+ // Signal that the tile buffer is now free
494
+ //
495
+
496
+ _tileBuffer->post ();
497
+ }
498
+
499
+
500
+ void
501
+ TileBufferTask::execute ()
502
+ {
503
+ try
504
+ {
505
+ //
506
+ // Calculate information about the tile
507
+ //
508
+
509
+ Box2i tileRange = OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile (
510
+ _ifd->tileDesc,
511
+ _ifd->minX, _ifd->maxX,
512
+ _ifd->minY, _ifd->maxY,
513
+ _tileBuffer->dx,
514
+ _tileBuffer->dy,
515
+ _tileBuffer->lx,
516
+ _tileBuffer->ly);
517
+
518
+ int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1;
519
+
520
+ int numPixelsInTile = numPixelsPerScanLine *
521
+ (tileRange.max.y - tileRange.min.y + 1);
522
+
523
+ int sizeOfTile = _ifd->bytesPerPixel * numPixelsInTile;
524
+
525
+
526
+ //
527
+ // Uncompress the data, if necessary
528
+ //
529
+
530
+ if (_tileBuffer->compressor && _tileBuffer->dataSize < sizeOfTile)
531
+ {
532
+ _tileBuffer->format = _tileBuffer->compressor->format();
533
+
534
+ _tileBuffer->dataSize = _tileBuffer->compressor->uncompressTile
535
+ (_tileBuffer->buffer, _tileBuffer->dataSize,
536
+ tileRange, _tileBuffer->uncompressedData);
537
+ }
538
+ else
539
+ {
540
+ //
541
+ // If the line is uncompressed, it's in XDR format,
542
+ // regardless of the compressor's output format.
543
+ //
544
+
545
+ _tileBuffer->format = Compressor::XDR;
546
+ _tileBuffer->uncompressedData = _tileBuffer->buffer;
547
+ }
548
+
549
+ //
550
+ // Convert the tile of pixel data back from the machine-independent
551
+ // representation, and store the result in the frame buffer.
552
+ //
553
+
554
+ const char *readPtr = _tileBuffer->uncompressedData;
555
+ // points to where we
556
+ // read from in the
557
+ // tile block
558
+
559
+ //
560
+ // Iterate over the scan lines in the tile.
561
+ //
562
+
563
+ for (int y = tileRange.min.y; y <= tileRange.max.y; ++y)
564
+ {
565
+ //
566
+ // Iterate over all image channels.
567
+ //
568
+
569
+ for (unsigned int i = 0; i < _ifd->slices.size(); ++i)
570
+ {
571
+ const TInSliceInfo &slice = _ifd->slices[i];
572
+
573
+ //
574
+ // These offsets are used to facilitate both
575
+ // absolute and tile-relative pixel coordinates.
576
+ //
577
+
578
+ int xOffset = slice.xTileCoords * tileRange.min.x;
579
+ int yOffset = slice.yTileCoords * tileRange.min.y;
580
+
581
+ //
582
+ // Fill the frame buffer with pixel data.
583
+ //
584
+
585
+ if (slice.skip)
586
+ {
587
+ //
588
+ // The file contains data for this channel, but
589
+ // the frame buffer contains no slice for this channel.
590
+ //
591
+
592
+ skipChannel (readPtr, slice.typeInFile,
593
+ numPixelsPerScanLine);
594
+ }
595
+ else
596
+ {
597
+ //
598
+ // The frame buffer contains a slice for this channel.
599
+ //
600
+
601
+ char *writePtr = slice.base +
602
+ (y - yOffset) * slice.yStride +
603
+ (tileRange.min.x - xOffset) *
604
+ slice.xStride;
605
+
606
+ char *endPtr = writePtr +
607
+ (numPixelsPerScanLine - 1) * slice.xStride;
608
+
609
+ copyIntoFrameBuffer (readPtr, writePtr, endPtr,
610
+ slice.xStride,
611
+ slice.fill, slice.fillValue,
612
+ _tileBuffer->format,
613
+ slice.typeInFrameBuffer,
614
+ slice.typeInFile);
615
+ }
616
+ }
617
+ }
618
+ }
619
+ catch (std::exception &e)
620
+ {
621
+ if (!_tileBuffer->hasException)
622
+ {
623
+ _tileBuffer->exception = e.what ();
624
+ _tileBuffer->hasException = true;
625
+ }
626
+ }
627
+ catch (...)
628
+ {
629
+ if (!_tileBuffer->hasException)
630
+ {
631
+ _tileBuffer->exception = "unrecognized exception";
632
+ _tileBuffer->hasException = true;
633
+ }
634
+ }
635
+ }
636
+
637
+
638
+ TileBufferTask *
639
+ newTileBufferTask
640
+ (TaskGroup *group,
641
+ InputStreamMutex *streamData,
642
+ TiledInputFile::Data *ifd,
643
+ int number,
644
+ int dx, int dy,
645
+ int lx, int ly)
646
+ {
647
+ //
648
+ // Wait for a tile buffer to become available,
649
+ // fill the buffer with raw data from the file,
650
+ // and create a new TileBufferTask whose execute()
651
+ // method will uncompress the tile and copy the
652
+ // tile's pixels into the frame buffer.
653
+ //
654
+
655
+ TileBuffer *tileBuffer = ifd->getTileBuffer (number);
656
+
657
+ try
658
+ {
659
+ tileBuffer->wait();
660
+
661
+ tileBuffer->dx = dx;
662
+ tileBuffer->dy = dy;
663
+ tileBuffer->lx = lx;
664
+ tileBuffer->ly = ly;
665
+
666
+ tileBuffer->uncompressedData = 0;
667
+
668
+ readTileData (streamData, ifd, dx, dy, lx, ly,
669
+ tileBuffer->buffer,
670
+ tileBuffer->dataSize);
671
+ }
672
+ catch (...)
673
+ {
674
+ //
675
+ // Reading from the file caused an exception.
676
+ // Signal that the tile buffer is free, and
677
+ // re-throw the exception.
678
+ //
679
+
680
+ tileBuffer->post();
681
+ throw;
682
+ }
683
+
684
+ return new TileBufferTask (group, ifd, tileBuffer);
685
+ }
686
+
687
+
688
+ } // namespace
689
+
690
+
691
+ TiledInputFile::TiledInputFile (const char fileName[], int numThreads):
692
+ _data (new Data (numThreads))
693
+ {
694
+ _data->_streamData=NULL;
695
+ _data->_deleteStream=true;
696
+
697
+ //
698
+ // This constructor is called when a user
699
+ // explicitly wants to read a tiled file.
700
+ //
701
+
702
+
703
+ IStream* is = 0;
704
+ try
705
+ {
706
+ is = new StdIFStream (fileName);
707
+ readMagicNumberAndVersionField(*is, _data->version);
708
+
709
+ //
710
+ // Backward compatibility to read multpart file.
711
+ //
712
+ if (isMultiPart(_data->version))
713
+ {
714
+ compatibilityInitialize(*is);
715
+ return;
716
+ }
717
+
718
+ _data->_streamData = new InputStreamMutex();
719
+ _data->_streamData->is = is;
720
+ _data->header.readFrom (*_data->_streamData->is, _data->version);
721
+ initialize();
722
+ //read tile offsets - we are not multipart or deep
723
+ _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,false);
724
+ _data->_streamData->currentPosition = _data->_streamData->is->tellg();
725
+ }
726
+ catch (IEX_NAMESPACE::BaseExc &e)
727
+ {
728
+ if (_data->_streamData != 0)
729
+ {
730
+ if (_data->_streamData->is != 0)
731
+ {
732
+ delete _data->_streamData->is;
733
+ _data->_streamData->is = is = 0;
734
+ }
735
+
736
+ delete _data->_streamData;
737
+ }
738
+
739
+ if (is != 0)
740
+ delete is;
741
+
742
+ REPLACE_EXC (e, "Cannot open image file "
743
+ "\"" << fileName << "\". " << e);
744
+ throw;
745
+ }
746
+ catch (...)
747
+ {
748
+ if ( _data->_streamData != 0)
749
+ {
750
+ if ( _data->_streamData->is != 0)
751
+ {
752
+ delete _data->_streamData->is;
753
+ _data->_streamData->is = is = 0;
754
+ }
755
+
756
+ delete _data->_streamData;
757
+ }
758
+
759
+ if (is != 0)
760
+ delete is;
761
+ throw;
762
+ }
763
+ }
764
+
765
+
766
+ TiledInputFile::TiledInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads):
767
+ _data (new Data (numThreads))
768
+ {
769
+ _data->_deleteStream=false;
770
+ //
771
+ // This constructor is called when a user
772
+ // explicitly wants to read a tiled file.
773
+ //
774
+
775
+ bool streamDataCreated = false;
776
+
777
+ try
778
+ {
779
+ readMagicNumberAndVersionField(is, _data->version);
780
+
781
+ //
782
+ // Backward compatibility to read multpart file.
783
+ //
784
+ if (isMultiPart(_data->version))
785
+ {
786
+ compatibilityInitialize(is);
787
+ return;
788
+ }
789
+
790
+ streamDataCreated = true;
791
+ _data->_streamData = new InputStreamMutex();
792
+ _data->_streamData->is = &is;
793
+ _data->header.readFrom (*_data->_streamData->is, _data->version);
794
+ initialize();
795
+ // file is guaranteed to be single part, regular image
796
+ _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,false);
797
+ _data->memoryMapped = _data->_streamData->is->isMemoryMapped();
798
+ _data->_streamData->currentPosition = _data->_streamData->is->tellg();
799
+ }
800
+ catch (IEX_NAMESPACE::BaseExc &e)
801
+ {
802
+ if (streamDataCreated) delete _data->_streamData;
803
+ delete _data;
804
+
805
+ REPLACE_EXC (e, "Cannot open image file "
806
+ "\"" << is.fileName() << "\". " << e);
807
+ throw;
808
+ }
809
+ catch (...)
810
+ {
811
+ if (streamDataCreated) delete _data->_streamData;
812
+ delete _data;
813
+ throw;
814
+ }
815
+ }
816
+
817
+
818
+ TiledInputFile::TiledInputFile (const Header &header,
819
+ OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is,
820
+ int version,
821
+ int numThreads) :
822
+ _data (new Data (numThreads))
823
+ {
824
+ _data->_deleteStream=false;
825
+ _data->_streamData = new InputStreamMutex();
826
+ //
827
+ // This constructor called by class Imf::InputFile
828
+ // when a user wants to just read an image file, and
829
+ // doesn't care or know if the file is tiled.
830
+ // No need to have backward compatibility here, because
831
+ // we have somehow got the header.
832
+ //
833
+
834
+ _data->_streamData->is = is;
835
+ _data->header = header;
836
+ _data->version = version;
837
+ initialize();
838
+ _data->tileOffsets.readFrom (*(_data->_streamData->is),_data->fileIsComplete,false,false);
839
+ _data->memoryMapped = is->isMemoryMapped();
840
+ _data->_streamData->currentPosition = _data->_streamData->is->tellg();
841
+ }
842
+
843
+
844
+ TiledInputFile::TiledInputFile (InputPartData* part)
845
+ {
846
+ _data = new Data (part->numThreads);
847
+ _data->_deleteStream=false;
848
+ multiPartInitialize(part);
849
+ }
850
+
851
+
852
+ void
853
+ TiledInputFile::compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is)
854
+ {
855
+ is.seekg(0);
856
+ //
857
+ // Construct a MultiPartInputFile, initialize TiledInputFile
858
+ // with the part 0 data.
859
+ // (TODO) maybe change the third parameter of the constructor of MultiPartInputFile later.
860
+ //
861
+ _data->multiPartBackwardSupport = true;
862
+ _data->multiPartFile = new MultiPartInputFile(is, _data->numThreads);
863
+ InputPartData* part = _data->multiPartFile->getPart(0);
864
+
865
+ multiPartInitialize(part);
866
+ }
867
+
868
+
869
+ void
870
+ TiledInputFile::multiPartInitialize(InputPartData* part)
871
+ {
872
+ if (part->header.type() != TILEDIMAGE)
873
+ throw IEX_NAMESPACE::ArgExc("Can't build a TiledInputFile from a type-mismatched part.");
874
+
875
+ _data->_streamData = part->mutex;
876
+ _data->header = part->header;
877
+ _data->version = part->version;
878
+ _data->partNumber = part->partNumber;
879
+ _data->memoryMapped = _data->_streamData->is->isMemoryMapped();
880
+ initialize();
881
+ _data->tileOffsets.readFrom(part->chunkOffsets,_data->fileIsComplete);
882
+ _data->_streamData->currentPosition = _data->_streamData->is->tellg();
883
+ }
884
+
885
+
886
+ void
887
+ TiledInputFile::initialize ()
888
+ {
889
+ // fix bad types in header (arises when a tool built against an older version of
890
+ // OpenEXR converts a scanline image to tiled)
891
+ // only applies when file is a single part, regular image, tiled file
892
+ //
893
+ if(!isMultiPart(_data->version) &&
894
+ !isNonImage(_data->version) &&
895
+ isTiled(_data->version) &&
896
+ _data->header.hasType() )
897
+ {
898
+ _data->header.setType(TILEDIMAGE);
899
+ }
900
+
901
+ if (_data->partNumber == -1)
902
+ {
903
+ if (!isTiled (_data->version))
904
+ throw IEX_NAMESPACE::ArgExc ("Expected a tiled file but the file is not tiled.");
905
+
906
+ }
907
+ else
908
+ {
909
+ if(_data->header.hasType() && _data->header.type()!=TILEDIMAGE)
910
+ {
911
+ throw IEX_NAMESPACE::ArgExc ("TiledInputFile used for non-tiledimage part.");
912
+ }
913
+ }
914
+
915
+ _data->header.sanityCheck (true);
916
+
917
+ _data->tileDesc = _data->header.tileDescription();
918
+ _data->lineOrder = _data->header.lineOrder();
919
+
920
+ //
921
+ // Save the dataWindow information
922
+ //
923
+
924
+ const Box2i &dataWindow = _data->header.dataWindow();
925
+ _data->minX = dataWindow.min.x;
926
+ _data->maxX = dataWindow.max.x;
927
+ _data->minY = dataWindow.min.y;
928
+ _data->maxY = dataWindow.max.y;
929
+
930
+ //
931
+ // Precompute level and tile information to speed up utility functions
932
+ //
933
+
934
+ precalculateTileInfo (_data->tileDesc,
935
+ _data->minX, _data->maxX,
936
+ _data->minY, _data->maxY,
937
+ _data->numXTiles, _data->numYTiles,
938
+ _data->numXLevels, _data->numYLevels);
939
+
940
+ _data->bytesPerPixel = calculateBytesPerPixel (_data->header);
941
+
942
+ _data->maxBytesPerTileLine = _data->bytesPerPixel * _data->tileDesc.xSize;
943
+
944
+ _data->tileBufferSize = _data->maxBytesPerTileLine * _data->tileDesc.ySize;
945
+
946
+ //
947
+ // Create all the TileBuffers and allocate their internal buffers
948
+ //
949
+
950
+ for (size_t i = 0; i < _data->tileBuffers.size(); i++)
951
+ {
952
+ _data->tileBuffers[i] = new TileBuffer (newTileCompressor
953
+ (_data->header.compression(),
954
+ _data->maxBytesPerTileLine,
955
+ _data->tileDesc.ySize,
956
+ _data->header));
957
+
958
+ if (!_data->_streamData->is->isMemoryMapped ())
959
+ _data->tileBuffers[i]->buffer = new char [_data->tileBufferSize];
960
+ }
961
+
962
+ _data->tileOffsets = TileOffsets (_data->tileDesc.mode,
963
+ _data->numXLevels,
964
+ _data->numYLevels,
965
+ _data->numXTiles,
966
+ _data->numYTiles);
967
+ }
968
+
969
+
970
+ TiledInputFile::~TiledInputFile ()
971
+ {
972
+ if (!_data->memoryMapped)
973
+ for (size_t i = 0; i < _data->tileBuffers.size(); i++)
974
+ delete [] _data->tileBuffers[i]->buffer;
975
+
976
+ if (_data->_deleteStream)
977
+ delete _data->_streamData->is;
978
+
979
+ if (_data->partNumber == -1)
980
+ delete _data->_streamData;
981
+
982
+ delete _data;
983
+ }
984
+
985
+
986
+ const char *
987
+ TiledInputFile::fileName () const
988
+ {
989
+ return _data->_streamData->is->fileName();
990
+ }
991
+
992
+
993
+ const Header &
994
+ TiledInputFile::header () const
995
+ {
996
+ return _data->header;
997
+ }
998
+
999
+
1000
+ int
1001
+ TiledInputFile::version () const
1002
+ {
1003
+ return _data->version;
1004
+ }
1005
+
1006
+
1007
+ void
1008
+ TiledInputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
1009
+ {
1010
+ Lock lock (*_data->_streamData);
1011
+
1012
+ //
1013
+ // Set the frame buffer
1014
+ //
1015
+
1016
+ //
1017
+ // Check if the new frame buffer descriptor is
1018
+ // compatible with the image file header.
1019
+ //
1020
+
1021
+ const ChannelList &channels = _data->header.channels();
1022
+
1023
+ for (FrameBuffer::ConstIterator j = frameBuffer.begin();
1024
+ j != frameBuffer.end();
1025
+ ++j)
1026
+ {
1027
+ ChannelList::ConstIterator i = channels.find (j.name());
1028
+
1029
+ if (i == channels.end())
1030
+ continue;
1031
+
1032
+ if (i.channel().xSampling != j.slice().xSampling ||
1033
+ i.channel().ySampling != j.slice().ySampling)
1034
+ THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors "
1035
+ "of \"" << i.name() << "\" channel "
1036
+ "of input file \"" << fileName() << "\" are "
1037
+ "not compatible with the frame buffer's "
1038
+ "subsampling factors.");
1039
+ }
1040
+
1041
+ //
1042
+ // Initialize the slice table for readPixels().
1043
+ //
1044
+
1045
+ vector<TInSliceInfo> slices;
1046
+ ChannelList::ConstIterator i = channels.begin();
1047
+
1048
+ for (FrameBuffer::ConstIterator j = frameBuffer.begin();
1049
+ j != frameBuffer.end();
1050
+ ++j)
1051
+ {
1052
+ while (i != channels.end() && strcmp (i.name(), j.name()) < 0)
1053
+ {
1054
+ //
1055
+ // Channel i is present in the file but not
1056
+ // in the frame buffer; data for channel i
1057
+ // will be skipped during readPixels().
1058
+ //
1059
+
1060
+ slices.push_back (TInSliceInfo (i.channel().type,
1061
+ i.channel().type,
1062
+ 0, // base
1063
+ 0, // xStride
1064
+ 0, // yStride
1065
+ false, // fill
1066
+ true, // skip
1067
+ 0.0)); // fillValue
1068
+ ++i;
1069
+ }
1070
+
1071
+ bool fill = false;
1072
+
1073
+ if (i == channels.end() || strcmp (i.name(), j.name()) > 0)
1074
+ {
1075
+ //
1076
+ // Channel i is present in the frame buffer, but not in the file.
1077
+ // In the frame buffer, slice j will be filled with a default value.
1078
+ //
1079
+
1080
+ fill = true;
1081
+ }
1082
+
1083
+ slices.push_back (TInSliceInfo (j.slice().type,
1084
+ fill? j.slice().type: i.channel().type,
1085
+ j.slice().base,
1086
+ j.slice().xStride,
1087
+ j.slice().yStride,
1088
+ fill,
1089
+ false, // skip
1090
+ j.slice().fillValue,
1091
+ (j.slice().xTileCoords)? 1: 0,
1092
+ (j.slice().yTileCoords)? 1: 0));
1093
+
1094
+ if (i != channels.end() && !fill)
1095
+ ++i;
1096
+ }
1097
+
1098
+ while (i != channels.end())
1099
+ {
1100
+ //
1101
+ // Channel i is present in the file but not
1102
+ // in the frame buffer; data for channel i
1103
+ // will be skipped during readPixels().
1104
+ //
1105
+
1106
+ slices.push_back (TInSliceInfo (i.channel().type,
1107
+ i.channel().type,
1108
+ 0, // base
1109
+ 0, // xStride
1110
+ 0, // yStride
1111
+ false, // fill
1112
+ true, // skip
1113
+ 0.0)); // fillValue
1114
+ ++i;
1115
+ }
1116
+
1117
+ //
1118
+ // Store the new frame buffer.
1119
+ //
1120
+
1121
+ _data->frameBuffer = frameBuffer;
1122
+ _data->slices = slices;
1123
+ }
1124
+
1125
+
1126
+ const FrameBuffer &
1127
+ TiledInputFile::frameBuffer () const
1128
+ {
1129
+ Lock lock (*_data->_streamData);
1130
+ return _data->frameBuffer;
1131
+ }
1132
+
1133
+
1134
+ bool
1135
+ TiledInputFile::isComplete () const
1136
+ {
1137
+ return _data->fileIsComplete;
1138
+ }
1139
+
1140
+
1141
+ void
1142
+ TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly)
1143
+ {
1144
+ //
1145
+ // Read a range of tiles from the file into the framebuffer
1146
+ //
1147
+
1148
+ try
1149
+ {
1150
+ Lock lock (*_data->_streamData);
1151
+
1152
+ if (_data->slices.size() == 0)
1153
+ throw IEX_NAMESPACE::ArgExc ("No frame buffer specified "
1154
+ "as pixel data destination.");
1155
+
1156
+ if (!isValidLevel (lx, ly))
1157
+ THROW (IEX_NAMESPACE::ArgExc,
1158
+ "Level coordinate "
1159
+ "(" << lx << ", " << ly << ") "
1160
+ "is invalid.");
1161
+
1162
+ //
1163
+ // Determine the first and last tile coordinates in both dimensions.
1164
+ // We always attempt to read the range of tiles in the order that
1165
+ // they are stored in the file.
1166
+ //
1167
+
1168
+ if (dx1 > dx2)
1169
+ std::swap (dx1, dx2);
1170
+
1171
+ if (dy1 > dy2)
1172
+ std::swap (dy1, dy2);
1173
+
1174
+ int dyStart = dy1;
1175
+ int dyStop = dy2 + 1;
1176
+ int dY = 1;
1177
+
1178
+ if (_data->lineOrder == DECREASING_Y)
1179
+ {
1180
+ dyStart = dy2;
1181
+ dyStop = dy1 - 1;
1182
+ dY = -1;
1183
+ }
1184
+
1185
+ //
1186
+ // Create a task group for all tile buffer tasks. When the
1187
+ // task group goes out of scope, the destructor waits until
1188
+ // all tasks are complete.
1189
+ //
1190
+
1191
+ {
1192
+ TaskGroup taskGroup;
1193
+ int tileNumber = 0;
1194
+
1195
+ for (int dy = dyStart; dy != dyStop; dy += dY)
1196
+ {
1197
+ for (int dx = dx1; dx <= dx2; dx++)
1198
+ {
1199
+ if (!isValidTile (dx, dy, lx, ly))
1200
+ THROW (IEX_NAMESPACE::ArgExc,
1201
+ "Tile (" << dx << ", " << dy << ", " <<
1202
+ lx << "," << ly << ") is not a valid tile.");
1203
+
1204
+ ThreadPool::addGlobalTask (newTileBufferTask (&taskGroup,
1205
+ _data->_streamData,
1206
+ _data,
1207
+ tileNumber++,
1208
+ dx, dy,
1209
+ lx, ly));
1210
+ }
1211
+ }
1212
+
1213
+ //
1214
+ // finish all tasks
1215
+ //
1216
+ }
1217
+
1218
+ //
1219
+ // Exeption handling:
1220
+ //
1221
+ // TileBufferTask::execute() may have encountered exceptions, but
1222
+ // those exceptions occurred in another thread, not in the thread
1223
+ // that is executing this call to TiledInputFile::readTiles().
1224
+ // TileBufferTask::execute() has caught all exceptions and stored
1225
+ // the exceptions' what() strings in the tile buffers.
1226
+ // Now we check if any tile buffer contains a stored exception; if
1227
+ // this is the case then we re-throw the exception in this thread.
1228
+ // (It is possible that multiple tile buffers contain stored
1229
+ // exceptions. We re-throw the first exception we find and
1230
+ // ignore all others.)
1231
+ //
1232
+
1233
+ const string *exception = 0;
1234
+
1235
+ for (size_t i = 0; i < _data->tileBuffers.size(); ++i)
1236
+ {
1237
+ TileBuffer *tileBuffer = _data->tileBuffers[i];
1238
+
1239
+ if (tileBuffer->hasException && !exception)
1240
+ exception = &tileBuffer->exception;
1241
+
1242
+ tileBuffer->hasException = false;
1243
+ }
1244
+
1245
+ if (exception)
1246
+ throw IEX_NAMESPACE::IoExc (*exception);
1247
+ }
1248
+ catch (IEX_NAMESPACE::BaseExc &e)
1249
+ {
1250
+ REPLACE_EXC (e, "Error reading pixel data from image "
1251
+ "file \"" << fileName() << "\". " << e);
1252
+ throw;
1253
+ }
1254
+ }
1255
+
1256
+
1257
+ void
1258
+ TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int l)
1259
+ {
1260
+ readTiles (dx1, dx2, dy1, dy2, l, l);
1261
+ }
1262
+
1263
+
1264
+ void
1265
+ TiledInputFile::readTile (int dx, int dy, int lx, int ly)
1266
+ {
1267
+ readTiles (dx, dx, dy, dy, lx, ly);
1268
+ }
1269
+
1270
+
1271
+ void
1272
+ TiledInputFile::readTile (int dx, int dy, int l)
1273
+ {
1274
+ readTile (dx, dy, l, l);
1275
+ }
1276
+
1277
+
1278
+ void
1279
+ TiledInputFile::rawTileData (int &dx, int &dy,
1280
+ int &lx, int &ly,
1281
+ const char *&pixelData,
1282
+ int &pixelDataSize)
1283
+ {
1284
+ try
1285
+ {
1286
+ Lock lock (*_data->_streamData);
1287
+
1288
+ if (!isValidTile (dx, dy, lx, ly))
1289
+ throw IEX_NAMESPACE::ArgExc ("Tried to read a tile outside "
1290
+ "the image file's data window.");
1291
+
1292
+ TileBuffer *tileBuffer = _data->getTileBuffer (0);
1293
+
1294
+ //
1295
+ // if file is a multipart file, we have to seek to the required tile
1296
+ // since we don't know where the file pointer is
1297
+ //
1298
+ int old_dx=dx;
1299
+ int old_dy=dy;
1300
+ int old_lx=lx;
1301
+ int old_ly=ly;
1302
+ if(isMultiPart(version()))
1303
+ {
1304
+ _data->_streamData->is->seekg(_data->tileOffsets(dx,dy,lx,ly));
1305
+ }
1306
+ readNextTileData (_data->_streamData, _data, dx, dy, lx, ly,
1307
+ tileBuffer->buffer,
1308
+ pixelDataSize);
1309
+ if(isMultiPart(version()))
1310
+ {
1311
+ if (old_dx!=dx || old_dy !=dy || old_lx!=lx || old_ly!=ly)
1312
+ {
1313
+ throw IEX_NAMESPACE::ArgExc ("rawTileData read the wrong tile");
1314
+ }
1315
+ }
1316
+ pixelData = tileBuffer->buffer;
1317
+ }
1318
+ catch (IEX_NAMESPACE::BaseExc &e)
1319
+ {
1320
+ REPLACE_EXC (e, "Error reading pixel data from image "
1321
+ "file \"" << fileName() << "\". " << e);
1322
+ throw;
1323
+ }
1324
+ }
1325
+
1326
+
1327
+ unsigned int
1328
+ TiledInputFile::tileXSize () const
1329
+ {
1330
+ return _data->tileDesc.xSize;
1331
+ }
1332
+
1333
+
1334
+ unsigned int
1335
+ TiledInputFile::tileYSize () const
1336
+ {
1337
+ return _data->tileDesc.ySize;
1338
+ }
1339
+
1340
+
1341
+ LevelMode
1342
+ TiledInputFile::levelMode () const
1343
+ {
1344
+ return _data->tileDesc.mode;
1345
+ }
1346
+
1347
+
1348
+ LevelRoundingMode
1349
+ TiledInputFile::levelRoundingMode () const
1350
+ {
1351
+ return _data->tileDesc.roundingMode;
1352
+ }
1353
+
1354
+
1355
+ int
1356
+ TiledInputFile::numLevels () const
1357
+ {
1358
+ if (levelMode() == RIPMAP_LEVELS)
1359
+ THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image "
1360
+ "file \"" << fileName() << "\" "
1361
+ "(numLevels() is not defined for files "
1362
+ "with RIPMAP level mode).");
1363
+
1364
+ return _data->numXLevels;
1365
+ }
1366
+
1367
+
1368
+ int
1369
+ TiledInputFile::numXLevels () const
1370
+ {
1371
+ return _data->numXLevels;
1372
+ }
1373
+
1374
+
1375
+ int
1376
+ TiledInputFile::numYLevels () const
1377
+ {
1378
+ return _data->numYLevels;
1379
+ }
1380
+
1381
+
1382
+ bool
1383
+ TiledInputFile::isValidLevel (int lx, int ly) const
1384
+ {
1385
+ if (lx < 0 || ly < 0)
1386
+ return false;
1387
+
1388
+ if (levelMode() == MIPMAP_LEVELS && lx != ly)
1389
+ return false;
1390
+
1391
+ if (lx >= numXLevels() || ly >= numYLevels())
1392
+ return false;
1393
+
1394
+ return true;
1395
+ }
1396
+
1397
+
1398
+ int
1399
+ TiledInputFile::levelWidth (int lx) const
1400
+ {
1401
+ try
1402
+ {
1403
+ return levelSize (_data->minX, _data->maxX, lx,
1404
+ _data->tileDesc.roundingMode);
1405
+ }
1406
+ catch (IEX_NAMESPACE::BaseExc &e)
1407
+ {
1408
+ REPLACE_EXC (e, "Error calling levelWidth() on image "
1409
+ "file \"" << fileName() << "\". " << e);
1410
+ throw;
1411
+ }
1412
+ }
1413
+
1414
+
1415
+ int
1416
+ TiledInputFile::levelHeight (int ly) const
1417
+ {
1418
+ try
1419
+ {
1420
+ return levelSize (_data->minY, _data->maxY, ly,
1421
+ _data->tileDesc.roundingMode);
1422
+ }
1423
+ catch (IEX_NAMESPACE::BaseExc &e)
1424
+ {
1425
+ REPLACE_EXC (e, "Error calling levelHeight() on image "
1426
+ "file \"" << fileName() << "\". " << e);
1427
+ throw;
1428
+ }
1429
+ }
1430
+
1431
+
1432
+ int
1433
+ TiledInputFile::numXTiles (int lx) const
1434
+ {
1435
+ if (lx < 0 || lx >= _data->numXLevels)
1436
+ {
1437
+ THROW (IEX_NAMESPACE::ArgExc, "Error calling numXTiles() on image "
1438
+ "file \"" << _data->_streamData->is->fileName() << "\" "
1439
+ "(Argument is not in valid range).");
1440
+
1441
+ }
1442
+
1443
+ return _data->numXTiles[lx];
1444
+ }
1445
+
1446
+
1447
+ int
1448
+ TiledInputFile::numYTiles (int ly) const
1449
+ {
1450
+ if (ly < 0 || ly >= _data->numYLevels)
1451
+ {
1452
+ THROW (IEX_NAMESPACE::ArgExc, "Error calling numYTiles() on image "
1453
+ "file \"" << _data->_streamData->is->fileName() << "\" "
1454
+ "(Argument is not in valid range).");
1455
+ }
1456
+
1457
+ return _data->numYTiles[ly];
1458
+ }
1459
+
1460
+
1461
+ Box2i
1462
+ TiledInputFile::dataWindowForLevel (int l) const
1463
+ {
1464
+ return dataWindowForLevel (l, l);
1465
+ }
1466
+
1467
+
1468
+ Box2i
1469
+ TiledInputFile::dataWindowForLevel (int lx, int ly) const
1470
+ {
1471
+ try
1472
+ {
1473
+ return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForLevel (
1474
+ _data->tileDesc,
1475
+ _data->minX, _data->maxX,
1476
+ _data->minY, _data->maxY,
1477
+ lx, ly);
1478
+ }
1479
+ catch (IEX_NAMESPACE::BaseExc &e)
1480
+ {
1481
+ REPLACE_EXC (e, "Error calling dataWindowForLevel() on image "
1482
+ "file \"" << fileName() << "\". " << e);
1483
+ throw;
1484
+ }
1485
+ }
1486
+
1487
+
1488
+ Box2i
1489
+ TiledInputFile::dataWindowForTile (int dx, int dy, int l) const
1490
+ {
1491
+ return dataWindowForTile (dx, dy, l, l);
1492
+ }
1493
+
1494
+
1495
+ Box2i
1496
+ TiledInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
1497
+ {
1498
+ try
1499
+ {
1500
+ if (!isValidTile (dx, dy, lx, ly))
1501
+ throw IEX_NAMESPACE::ArgExc ("Arguments not in valid range.");
1502
+
1503
+ return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile (
1504
+ _data->tileDesc,
1505
+ _data->minX, _data->maxX,
1506
+ _data->minY, _data->maxY,
1507
+ dx, dy, lx, ly);
1508
+ }
1509
+ catch (IEX_NAMESPACE::BaseExc &e)
1510
+ {
1511
+ REPLACE_EXC (e, "Error calling dataWindowForTile() on image "
1512
+ "file \"" << fileName() << "\". " << e);
1513
+ throw;
1514
+ }
1515
+ }
1516
+
1517
+
1518
+ bool
1519
+ TiledInputFile::isValidTile (int dx, int dy, int lx, int ly) const
1520
+ {
1521
+ return ((lx < _data->numXLevels && lx >= 0) &&
1522
+ (ly < _data->numYLevels && ly >= 0) &&
1523
+ (dx < _data->numXTiles[lx] && dx >= 0) &&
1524
+ (dy < _data->numYTiles[ly] && dy >= 0));
1525
+ }
1526
+
1527
+ void TiledInputFile::tileOrder(int dx[], int dy[], int lx[], int ly[]) const
1528
+ {
1529
+ return _data->tileOffsets.getTileOrder(dx,dy,lx,ly);
1530
+ }
1531
+
1532
+
1533
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT