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,1378 @@
1
+ //
2
+ ///\todo: version needs fixing!
3
+ //
4
+
5
+ ///////////////////////////////////////////////////////////////////////////
6
+ //
7
+ // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
8
+ // Digital Ltd. LLC
9
+ //
10
+ // All rights reserved.
11
+ //
12
+ // Redistribution and use in source and binary forms, with or without
13
+ // modification, are permitted provided that the following conditions are
14
+ // met:
15
+ // * Redistributions of source code must retain the above copyright
16
+ // notice, this list of conditions and the following disclaimer.
17
+ // * Redistributions in binary form must reproduce the above
18
+ // copyright notice, this list of conditions and the following disclaimer
19
+ // in the documentation and/or other materials provided with the
20
+ // distribution.
21
+ // * Neither the name of Industrial Light & Magic nor the names of
22
+ // its contributors may be used to endorse or promote products derived
23
+ // from this software without specific prior written permission.
24
+ //
25
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
+ //
37
+ ///////////////////////////////////////////////////////////////////////////
38
+
39
+
40
+ //-----------------------------------------------------------------------------
41
+ //
42
+ // class OutputFile
43
+ //
44
+ //-----------------------------------------------------------------------------
45
+
46
+ #include <ImfOutputFile.h>
47
+ #include <ImfInputFile.h>
48
+ #include <ImfChannelList.h>
49
+ #include <ImfMisc.h>
50
+ #include <ImfStdIO.h>
51
+ #include <ImfCompressor.h>
52
+ #include "ImathBox.h"
53
+ #include "ImathFun.h"
54
+ #include <ImfArray.h>
55
+ #include "ImfXdr.h"
56
+ #include <ImfPreviewImageAttribute.h>
57
+ #include <ImfPartType.h>
58
+ #include "IlmThreadPool.h"
59
+ #include "ImfOutputStreamMutex.h"
60
+ #include "IlmThreadSemaphore.h"
61
+ #include "IlmThreadMutex.h"
62
+ #include "Iex.h"
63
+ #include "ImfInputPart.h"
64
+ #include "ImfNamespace.h"
65
+ #include "ImfOutputPartData.h"
66
+
67
+ #include <string>
68
+ #include <vector>
69
+ #include <fstream>
70
+ #include <assert.h>
71
+ #include <algorithm>
72
+
73
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
74
+
75
+ using IMATH_NAMESPACE::Box2i;
76
+ using IMATH_NAMESPACE::divp;
77
+ using IMATH_NAMESPACE::modp;
78
+ using std::string;
79
+ using std::vector;
80
+ using std::ofstream;
81
+ using std::min;
82
+ using std::max;
83
+ using ILMTHREAD_NAMESPACE::Mutex;
84
+ using ILMTHREAD_NAMESPACE::Lock;
85
+ using ILMTHREAD_NAMESPACE::Semaphore;
86
+ using ILMTHREAD_NAMESPACE::Task;
87
+ using ILMTHREAD_NAMESPACE::TaskGroup;
88
+ using ILMTHREAD_NAMESPACE::ThreadPool;
89
+
90
+
91
+ namespace {
92
+
93
+
94
+ struct OutSliceInfo
95
+ {
96
+ PixelType type;
97
+ const char * base;
98
+ size_t xStride;
99
+ size_t yStride;
100
+ int xSampling;
101
+ int ySampling;
102
+ bool zero;
103
+
104
+ OutSliceInfo (PixelType type = HALF,
105
+ const char *base = 0,
106
+ size_t xStride = 0,
107
+ size_t yStride = 0,
108
+ int xSampling = 1,
109
+ int ySampling = 1,
110
+ bool zero = false);
111
+
112
+ };
113
+
114
+
115
+ OutSliceInfo::OutSliceInfo (PixelType t,
116
+ const char *b,
117
+ size_t xs, size_t ys,
118
+ int xsm, int ysm,
119
+ bool z)
120
+ :
121
+ type (t),
122
+ base (b),
123
+ xStride (xs),
124
+ yStride (ys),
125
+ xSampling (xsm),
126
+ ySampling (ysm),
127
+ zero (z)
128
+ {
129
+ // empty
130
+ }
131
+
132
+
133
+ struct LineBuffer
134
+ {
135
+ Array<char> buffer;
136
+ const char * dataPtr;
137
+ int dataSize;
138
+ char * endOfLineBufferData;
139
+ int minY;
140
+ int maxY;
141
+ int scanLineMin;
142
+ int scanLineMax;
143
+ Compressor * compressor;
144
+ bool partiallyFull; // has incomplete data
145
+ bool hasException;
146
+ string exception;
147
+
148
+ LineBuffer (Compressor *comp);
149
+ ~LineBuffer ();
150
+
151
+ void wait () {_sem.wait();}
152
+ void post () {_sem.post();}
153
+
154
+ private:
155
+
156
+ Semaphore _sem;
157
+ };
158
+
159
+
160
+ LineBuffer::LineBuffer (Compressor *comp) :
161
+ dataPtr (0),
162
+ dataSize (0),
163
+ compressor (comp),
164
+ partiallyFull (false),
165
+ hasException (false),
166
+ exception (),
167
+ _sem (1)
168
+ {
169
+ // empty
170
+ }
171
+
172
+
173
+ LineBuffer::~LineBuffer ()
174
+ {
175
+ delete compressor;
176
+ }
177
+
178
+ } // namespace
179
+
180
+ struct OutputFile::Data
181
+ {
182
+ Header header; // the image header
183
+ bool multiPart; // is the file multipart?
184
+ int version; // version attribute \todo NOT BEING WRITTEN PROPERLY
185
+ Int64 previewPosition; // file position for preview
186
+ FrameBuffer frameBuffer; // framebuffer to write into
187
+ int currentScanLine; // next scanline to be written
188
+ int missingScanLines; // number of lines to write
189
+ LineOrder lineOrder; // the file's lineorder
190
+ int minX; // data window's min x coord
191
+ int maxX; // data window's max x coord
192
+ int minY; // data window's min y coord
193
+ int maxY; // data window's max x coord
194
+ vector<Int64> lineOffsets; // stores offsets in file for
195
+ // each scanline
196
+ vector<size_t> bytesPerLine; // combined size of a line over
197
+ // all channels
198
+ vector<size_t> offsetInLineBuffer; // offset for each scanline in
199
+ // its linebuffer
200
+ Compressor::Format format; // compressor's data format
201
+ vector<OutSliceInfo> slices; // info about channels in file
202
+ Int64 lineOffsetsPosition; // file position for line
203
+ // offset table
204
+
205
+ vector<LineBuffer*> lineBuffers; // each holds one line buffer
206
+ int linesInBuffer; // number of scanlines each
207
+ // buffer holds
208
+ size_t lineBufferSize; // size of the line buffer
209
+
210
+ int partNumber; // the output part number
211
+ OutputStreamMutex * _streamData;
212
+ bool _deleteStream;
213
+ Data (int numThreads);
214
+ ~Data ();
215
+
216
+
217
+ inline LineBuffer * getLineBuffer (int number); // hash function from line
218
+ // buffer indices into our
219
+ // vector of line buffers
220
+ };
221
+
222
+
223
+ OutputFile::Data::Data (int numThreads):
224
+ lineOffsetsPosition (0),
225
+ partNumber (-1),
226
+ _streamData(0),
227
+ _deleteStream(false)
228
+ {
229
+ //
230
+ // We need at least one lineBuffer, but if threading is used,
231
+ // to keep n threads busy we need 2*n lineBuffers.
232
+ //
233
+
234
+ lineBuffers.resize (max (1, 2 * numThreads));
235
+ }
236
+
237
+
238
+ OutputFile::Data::~Data ()
239
+ {
240
+ for (size_t i = 0; i < lineBuffers.size(); i++)
241
+ delete lineBuffers[i];
242
+ }
243
+
244
+
245
+ LineBuffer*
246
+ OutputFile::Data::getLineBuffer (int number)
247
+ {
248
+ return lineBuffers[number % lineBuffers.size()];
249
+ }
250
+
251
+ namespace {
252
+
253
+ Int64
254
+ writeLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const vector<Int64> &lineOffsets)
255
+ {
256
+ Int64 pos = os.tellp();
257
+
258
+ if (pos == -1)
259
+ IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T).");
260
+
261
+ for (unsigned int i = 0; i < lineOffsets.size(); i++)
262
+ Xdr::write<StreamIO> (os, lineOffsets[i]);
263
+
264
+ return pos;
265
+ }
266
+
267
+
268
+ void
269
+ writePixelData (OutputStreamMutex *filedata,
270
+ OutputFile::Data *partdata,
271
+ int lineBufferMinY,
272
+ const char pixelData[],
273
+ int pixelDataSize)
274
+ {
275
+ //
276
+ // Store a block of pixel data in the output file, and try
277
+ // to keep track of the current writing position the file
278
+ // without calling tellp() (tellp() can be fairly expensive).
279
+ //
280
+
281
+ Int64 currentPosition = filedata->currentPosition;
282
+ filedata->currentPosition = 0;
283
+
284
+ if (currentPosition == 0)
285
+ currentPosition = filedata->os->tellp();
286
+
287
+ partdata->lineOffsets[(partdata->currentScanLine - partdata->minY) / partdata->linesInBuffer] =
288
+ currentPosition;
289
+
290
+ #ifdef DEBUG
291
+
292
+ assert (filedata->os->tellp() == currentPosition);
293
+
294
+ #endif
295
+
296
+
297
+
298
+ if (partdata->multiPart)
299
+ {
300
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, partdata->partNumber);
301
+ }
302
+
303
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, lineBufferMinY);
304
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, pixelDataSize);
305
+ filedata->os->write (pixelData, pixelDataSize);
306
+
307
+ filedata->currentPosition = currentPosition +
308
+ Xdr::size<int>() +
309
+ Xdr::size<int>() +
310
+ pixelDataSize;
311
+
312
+ if (partdata->multiPart)
313
+ {
314
+ filedata->currentPosition += Xdr::size<int>();
315
+ }
316
+ }
317
+
318
+
319
+ inline void
320
+ writePixelData (OutputStreamMutex* filedata,
321
+ OutputFile::Data *partdata,
322
+ const LineBuffer *lineBuffer)
323
+ {
324
+ writePixelData (filedata, partdata,
325
+ lineBuffer->minY,
326
+ lineBuffer->dataPtr,
327
+ lineBuffer->dataSize);
328
+ }
329
+
330
+
331
+ void
332
+ convertToXdr (OutputFile::Data *ofd,
333
+ Array<char> &lineBuffer,
334
+ int lineBufferMinY,
335
+ int lineBufferMaxY,
336
+ int inSize)
337
+ {
338
+ //
339
+ // Convert the contents of a lineBuffer from the machine's native
340
+ // representation to Xdr format. This function is called by
341
+ // CompressLineBuffer::execute(), below, if the compressor wanted
342
+ // its input pixel data in the machine's native format, but then
343
+ // failed to compress the data (most compressors will expand rather
344
+ // than compress random input data).
345
+ //
346
+ // Note that this routine assumes that the machine's native
347
+ // representation of the pixel data has the same size as the
348
+ // Xdr representation. This makes it possible to convert the
349
+ // pixel data in place, without an intermediate temporary buffer.
350
+ //
351
+
352
+ //
353
+ // Iterate over all scanlines in the lineBuffer to convert.
354
+ //
355
+
356
+ char *writePtr = &lineBuffer[0];
357
+ for (int y = lineBufferMinY; y <= lineBufferMaxY; y++)
358
+ {
359
+ //
360
+ // Set these to point to the start of line y.
361
+ // We will write to writePtr from readPtr.
362
+ //
363
+
364
+ const char *readPtr = writePtr;
365
+
366
+ //
367
+ // Iterate over all slices in the file.
368
+ //
369
+
370
+ for (unsigned int i = 0; i < ofd->slices.size(); ++i)
371
+ {
372
+ //
373
+ // Test if scan line y of this channel is
374
+ // contains any data (the scan line contains
375
+ // data only if y % ySampling == 0).
376
+ //
377
+
378
+ const OutSliceInfo &slice = ofd->slices[i];
379
+
380
+ if (modp (y, slice.ySampling) != 0)
381
+ continue;
382
+
383
+ //
384
+ // Find the number of sampled pixels, dMaxX-dMinX+1, for
385
+ // slice i in scan line y (i.e. pixels within the data window
386
+ // for which x % xSampling == 0).
387
+ //
388
+
389
+ int dMinX = divp (ofd->minX, slice.xSampling);
390
+ int dMaxX = divp (ofd->maxX, slice.xSampling);
391
+
392
+ //
393
+ // Convert the samples in place.
394
+ //
395
+
396
+ convertInPlace (writePtr, readPtr, slice.type, dMaxX - dMinX + 1);
397
+ }
398
+ }
399
+ }
400
+
401
+
402
+ //
403
+ // A LineBufferTask encapsulates the task of copying a set of scanlines
404
+ // from the user's frame buffer into a LineBuffer object, compressing
405
+ // the data if necessary.
406
+ //
407
+
408
+ class LineBufferTask: public Task
409
+ {
410
+ public:
411
+
412
+ LineBufferTask (TaskGroup *group,
413
+ OutputFile::Data *ofd,
414
+ int number,
415
+ int scanLineMin,
416
+ int scanLineMax);
417
+
418
+ virtual ~LineBufferTask ();
419
+
420
+ virtual void execute ();
421
+
422
+ private:
423
+
424
+ OutputFile::Data * _ofd;
425
+ LineBuffer * _lineBuffer;
426
+ };
427
+
428
+
429
+ LineBufferTask::LineBufferTask
430
+ (TaskGroup *group,
431
+ OutputFile::Data *ofd,
432
+ int number,
433
+ int scanLineMin,
434
+ int scanLineMax)
435
+ :
436
+ Task (group),
437
+ _ofd (ofd),
438
+ _lineBuffer (_ofd->getLineBuffer(number))
439
+ {
440
+ //
441
+ // Wait for the lineBuffer to become available
442
+ //
443
+
444
+ _lineBuffer->wait ();
445
+
446
+ //
447
+ // Initialize the lineBuffer data if necessary
448
+ //
449
+
450
+ if (!_lineBuffer->partiallyFull)
451
+ {
452
+ _lineBuffer->endOfLineBufferData = _lineBuffer->buffer;
453
+
454
+ _lineBuffer->minY = _ofd->minY + number * _ofd->linesInBuffer;
455
+
456
+ _lineBuffer->maxY = min (_lineBuffer->minY + _ofd->linesInBuffer - 1,
457
+ _ofd->maxY);
458
+
459
+ _lineBuffer->partiallyFull = true;
460
+ }
461
+
462
+ _lineBuffer->scanLineMin = max (_lineBuffer->minY, scanLineMin);
463
+ _lineBuffer->scanLineMax = min (_lineBuffer->maxY, scanLineMax);
464
+ }
465
+
466
+
467
+ LineBufferTask::~LineBufferTask ()
468
+ {
469
+ //
470
+ // Signal that the line buffer is now free
471
+ //
472
+
473
+ _lineBuffer->post ();
474
+ }
475
+
476
+
477
+ void
478
+ LineBufferTask::execute ()
479
+ {
480
+ try
481
+ {
482
+ //
483
+ // First copy the pixel data from the
484
+ // frame buffer into the line buffer
485
+ //
486
+
487
+ int yStart, yStop, dy;
488
+
489
+ if (_ofd->lineOrder == INCREASING_Y)
490
+ {
491
+ yStart = _lineBuffer->scanLineMin;
492
+ yStop = _lineBuffer->scanLineMax + 1;
493
+ dy = 1;
494
+ }
495
+ else
496
+ {
497
+ yStart = _lineBuffer->scanLineMax;
498
+ yStop = _lineBuffer->scanLineMin - 1;
499
+ dy = -1;
500
+ }
501
+
502
+ int y;
503
+
504
+ for (y = yStart; y != yStop; y += dy)
505
+ {
506
+ //
507
+ // Gather one scan line's worth of pixel data and store
508
+ // them in _ofd->lineBuffer.
509
+ //
510
+
511
+ char *writePtr = _lineBuffer->buffer +
512
+ _ofd->offsetInLineBuffer[y - _ofd->minY];
513
+ //
514
+ // Iterate over all image channels.
515
+ //
516
+
517
+ for (unsigned int i = 0; i < _ofd->slices.size(); ++i)
518
+ {
519
+ //
520
+ // Test if scan line y of this channel contains any data
521
+ // (the scan line contains data only if y % ySampling == 0).
522
+ //
523
+
524
+ const OutSliceInfo &slice = _ofd->slices[i];
525
+
526
+ if (modp (y, slice.ySampling) != 0)
527
+ continue;
528
+
529
+ //
530
+ // Find the x coordinates of the leftmost and rightmost
531
+ // sampled pixels (i.e. pixels within the data window
532
+ // for which x % xSampling == 0).
533
+ //
534
+
535
+ int dMinX = divp (_ofd->minX, slice.xSampling);
536
+ int dMaxX = divp (_ofd->maxX, slice.xSampling);
537
+
538
+ //
539
+ // Fill the line buffer with with pixel data.
540
+ //
541
+
542
+ if (slice.zero)
543
+ {
544
+ //
545
+ // The frame buffer contains no data for this channel.
546
+ // Store zeroes in _lineBuffer->buffer.
547
+ //
548
+
549
+ fillChannelWithZeroes (writePtr, _ofd->format, slice.type,
550
+ dMaxX - dMinX + 1);
551
+ }
552
+ else
553
+ {
554
+ //
555
+ // If necessary, convert the pixel data to Xdr format.
556
+ // Then store the pixel data in _ofd->lineBuffer.
557
+ //
558
+
559
+ const char *linePtr = slice.base +
560
+ divp (y, slice.ySampling) *
561
+ slice.yStride;
562
+
563
+ const char *readPtr = linePtr + dMinX * slice.xStride;
564
+ const char *endPtr = linePtr + dMaxX * slice.xStride;
565
+
566
+ copyFromFrameBuffer (writePtr, readPtr, endPtr,
567
+ slice.xStride, _ofd->format,
568
+ slice.type);
569
+ }
570
+ }
571
+
572
+ if (_lineBuffer->endOfLineBufferData < writePtr)
573
+ _lineBuffer->endOfLineBufferData = writePtr;
574
+
575
+ #ifdef DEBUG
576
+
577
+ assert (writePtr - (_lineBuffer->buffer +
578
+ _ofd->offsetInLineBuffer[y - _ofd->minY]) ==
579
+ (int) _ofd->bytesPerLine[y - _ofd->minY]);
580
+
581
+ #endif
582
+
583
+ }
584
+
585
+ //
586
+ // If the next scanline isn't past the bounds of the lineBuffer
587
+ // then we are done, otherwise compress the linebuffer
588
+ //
589
+
590
+ if (y >= _lineBuffer->minY && y <= _lineBuffer->maxY)
591
+ return;
592
+
593
+ _lineBuffer->dataPtr = _lineBuffer->buffer;
594
+
595
+ _lineBuffer->dataSize = _lineBuffer->endOfLineBufferData -
596
+ _lineBuffer->buffer;
597
+
598
+ //
599
+ // Compress the data
600
+ //
601
+
602
+ Compressor *compressor = _lineBuffer->compressor;
603
+
604
+ if (compressor)
605
+ {
606
+ const char *compPtr;
607
+
608
+ int compSize = compressor->compress (_lineBuffer->dataPtr,
609
+ _lineBuffer->dataSize,
610
+ _lineBuffer->minY, compPtr);
611
+
612
+ if (compSize < _lineBuffer->dataSize)
613
+ {
614
+ _lineBuffer->dataSize = compSize;
615
+ _lineBuffer->dataPtr = compPtr;
616
+ }
617
+ else if (_ofd->format == Compressor::NATIVE)
618
+ {
619
+ //
620
+ // The data did not shrink during compression, but
621
+ // we cannot write to the file using the machine's
622
+ // native format, so we need to convert the lineBuffer
623
+ // to Xdr.
624
+ //
625
+
626
+ convertToXdr (_ofd, _lineBuffer->buffer, _lineBuffer->minY,
627
+ _lineBuffer->maxY, _lineBuffer->dataSize);
628
+ }
629
+ }
630
+
631
+ _lineBuffer->partiallyFull = false;
632
+ }
633
+ catch (std::exception &e)
634
+ {
635
+ if (!_lineBuffer->hasException)
636
+ {
637
+ _lineBuffer->exception = e.what ();
638
+ _lineBuffer->hasException = true;
639
+ }
640
+ }
641
+ catch (...)
642
+ {
643
+ if (!_lineBuffer->hasException)
644
+ {
645
+ _lineBuffer->exception = "unrecognized exception";
646
+ _lineBuffer->hasException = true;
647
+ }
648
+ }
649
+ }
650
+
651
+ } // namespace
652
+
653
+
654
+ OutputFile::OutputFile
655
+ (const char fileName[],
656
+ const Header &header,
657
+ int numThreads)
658
+ :
659
+ _data (new Data (numThreads))
660
+
661
+ {
662
+ _data->_streamData=new OutputStreamMutex ();
663
+ _data->_deleteStream=true;
664
+ try
665
+ {
666
+ header.sanityCheck();
667
+ _data->_streamData->os = new StdOFStream (fileName);
668
+ _data->multiPart=false; // only one header, not multipart
669
+ initialize (header);
670
+ _data->_streamData->currentPosition = _data->_streamData->os->tellp();
671
+
672
+ // Write header and empty offset table to the file.
673
+ writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header);
674
+ _data->previewPosition =
675
+ _data->header.writeTo (*_data->_streamData->os);
676
+ _data->lineOffsetsPosition =
677
+ writeLineOffsets (*_data->_streamData->os,_data->lineOffsets);
678
+ }
679
+ catch (IEX_NAMESPACE::BaseExc &e)
680
+ {
681
+ if (_data && _data->_streamData) delete _data->_streamData;
682
+ if (_data) delete _data;
683
+
684
+ REPLACE_EXC (e, "Cannot open image file "
685
+ "\"" << fileName << "\". " << e);
686
+ throw;
687
+ }
688
+ catch (...)
689
+ {
690
+ if (_data && _data->_streamData) delete _data->_streamData;
691
+ if (_data) delete _data;
692
+
693
+ throw;
694
+ }
695
+ }
696
+
697
+
698
+ OutputFile::OutputFile
699
+ (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os,
700
+ const Header &header,
701
+ int numThreads)
702
+ :
703
+ _data (new Data (numThreads))
704
+ {
705
+
706
+ _data->_streamData=new OutputStreamMutex ();
707
+ _data->_deleteStream=false;
708
+ try
709
+ {
710
+ header.sanityCheck();
711
+ _data->_streamData->os = &os;
712
+ _data->multiPart=false;
713
+ initialize (header);
714
+ _data->_streamData->currentPosition = _data->_streamData->os->tellp();
715
+
716
+ // Write header and empty offset table to the file.
717
+ writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header);
718
+ _data->previewPosition =
719
+ _data->header.writeTo (*_data->_streamData->os);
720
+ _data->lineOffsetsPosition =
721
+ writeLineOffsets (*_data->_streamData->os, _data->lineOffsets);
722
+ }
723
+ catch (IEX_NAMESPACE::BaseExc &e)
724
+ {
725
+ if (_data && _data->_streamData) delete _data->_streamData;
726
+ if (_data) delete _data;
727
+
728
+ REPLACE_EXC (e, "Cannot open image file "
729
+ "\"" << os.fileName() << "\". " << e);
730
+ throw;
731
+ }
732
+ catch (...)
733
+ {
734
+ if (_data && _data->_streamData) delete _data->_streamData;
735
+ if (_data) delete _data;
736
+
737
+ throw;
738
+ }
739
+ }
740
+
741
+ OutputFile::OutputFile(const OutputPartData* part) : _data(NULL)
742
+ {
743
+ try
744
+ {
745
+ if (part->header.type() != SCANLINEIMAGE)
746
+ throw IEX_NAMESPACE::ArgExc("Can't build a OutputFile from a type-mismatched part.");
747
+
748
+ _data = new Data (part->numThreads);
749
+ _data->_streamData = part->mutex;
750
+ _data->_deleteStream=false;
751
+ _data->multiPart=part->multipart;
752
+
753
+ initialize (part->header);
754
+ _data->partNumber = part->partNumber;
755
+ _data->lineOffsetsPosition = part->chunkOffsetTablePosition;
756
+ _data->previewPosition = part->previewPosition;
757
+ }
758
+ catch (IEX_NAMESPACE::BaseExc &e)
759
+ {
760
+ if (_data) delete _data;
761
+
762
+ REPLACE_EXC (e, "Cannot initialize output part "
763
+ "\"" << part->partNumber << "\". " << e);
764
+ throw;
765
+ }
766
+ catch (...)
767
+ {
768
+ if (_data) delete _data;
769
+
770
+ throw;
771
+ }
772
+ }
773
+
774
+ void
775
+ OutputFile::initialize (const Header &header)
776
+ {
777
+ _data->header = header;
778
+
779
+ // "fix" the type if it happens to be set incorrectly
780
+ // (attribute is optional, but ensure it is correct if it exists)
781
+ if(_data->header.hasType())
782
+ {
783
+ _data->header.setType(SCANLINEIMAGE);
784
+ }
785
+
786
+ const Box2i &dataWindow = header.dataWindow();
787
+
788
+ _data->currentScanLine = (header.lineOrder() == INCREASING_Y)?
789
+ dataWindow.min.y: dataWindow.max.y;
790
+
791
+ _data->missingScanLines = dataWindow.max.y - dataWindow.min.y + 1;
792
+ _data->lineOrder = header.lineOrder();
793
+ _data->minX = dataWindow.min.x;
794
+ _data->maxX = dataWindow.max.x;
795
+ _data->minY = dataWindow.min.y;
796
+ _data->maxY = dataWindow.max.y;
797
+
798
+ size_t maxBytesPerLine = bytesPerLineTable (_data->header,
799
+ _data->bytesPerLine);
800
+
801
+ for (size_t i = 0; i < _data->lineBuffers.size(); ++i)
802
+ {
803
+ _data->lineBuffers[i] =
804
+ new LineBuffer (newCompressor (_data->header.compression(),
805
+ maxBytesPerLine,
806
+ _data->header));
807
+ }
808
+
809
+ LineBuffer *lineBuffer = _data->lineBuffers[0];
810
+ _data->format = defaultFormat (lineBuffer->compressor);
811
+ _data->linesInBuffer = numLinesInBuffer (lineBuffer->compressor);
812
+ _data->lineBufferSize = maxBytesPerLine * _data->linesInBuffer;
813
+
814
+ for (size_t i = 0; i < _data->lineBuffers.size(); i++)
815
+ _data->lineBuffers[i]->buffer.resizeErase(_data->lineBufferSize);
816
+
817
+ int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y +
818
+ _data->linesInBuffer) / _data->linesInBuffer;
819
+
820
+ _data->lineOffsets.resize (lineOffsetSize);
821
+
822
+
823
+ offsetInLineBufferTable (_data->bytesPerLine,
824
+ _data->linesInBuffer,
825
+ _data->offsetInLineBuffer);
826
+ }
827
+
828
+
829
+ OutputFile::~OutputFile ()
830
+ {
831
+ if (_data)
832
+ {
833
+ {
834
+ Lock lock(*_data->_streamData);
835
+ Int64 originalPosition = _data->_streamData->os->tellp();
836
+
837
+ if (_data->lineOffsetsPosition > 0)
838
+ {
839
+ try
840
+ {
841
+ _data->_streamData->os->seekp (_data->lineOffsetsPosition);
842
+ writeLineOffsets (*_data->_streamData->os, _data->lineOffsets);
843
+
844
+ //
845
+ // Restore the original position.
846
+ //
847
+ _data->_streamData->os->seekp (originalPosition);
848
+ }
849
+ catch (...)
850
+ {
851
+ //
852
+ // We cannot safely throw any exceptions from here.
853
+ // This destructor may have been called because the
854
+ // stack is currently being unwound for another
855
+ // exception.
856
+ //
857
+ }
858
+ }
859
+ }
860
+
861
+ if (_data->_deleteStream && _data->_streamData)
862
+ delete _data->_streamData->os;
863
+
864
+ if (_data->partNumber == -1 && _data->_streamData)
865
+ delete _data->_streamData;
866
+
867
+ delete _data;
868
+ }
869
+
870
+ }
871
+
872
+
873
+ const char *
874
+ OutputFile::fileName () const
875
+ {
876
+ return _data->_streamData->os->fileName();
877
+ }
878
+
879
+
880
+ const Header &
881
+ OutputFile::header () const
882
+ {
883
+ return _data->header;
884
+ }
885
+
886
+
887
+ void
888
+ OutputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
889
+ {
890
+ Lock lock (*_data->_streamData);
891
+
892
+ //
893
+ // Check if the new frame buffer descriptor
894
+ // is compatible with the image file header.
895
+ //
896
+
897
+ const ChannelList &channels = _data->header.channels();
898
+
899
+ for (ChannelList::ConstIterator i = channels.begin();
900
+ i != channels.end();
901
+ ++i)
902
+ {
903
+ FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
904
+
905
+ if (j == frameBuffer.end())
906
+ continue;
907
+
908
+ if (i.channel().type != j.slice().type)
909
+ {
910
+ THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel "
911
+ "of output file \"" << fileName() << "\" is "
912
+ "not compatible with the frame buffer's "
913
+ "pixel type.");
914
+ }
915
+
916
+ if (i.channel().xSampling != j.slice().xSampling ||
917
+ i.channel().ySampling != j.slice().ySampling)
918
+ {
919
+ THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors "
920
+ "of \"" << i.name() << "\" channel "
921
+ "of output file \"" << fileName() << "\" are "
922
+ "not compatible with the frame buffer's "
923
+ "subsampling factors.");
924
+ }
925
+ }
926
+
927
+ //
928
+ // Initialize slice table for writePixels().
929
+ //
930
+
931
+ vector<OutSliceInfo> slices;
932
+
933
+ for (ChannelList::ConstIterator i = channels.begin();
934
+ i != channels.end();
935
+ ++i)
936
+ {
937
+ FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
938
+
939
+ if (j == frameBuffer.end())
940
+ {
941
+ //
942
+ // Channel i is not present in the frame buffer.
943
+ // In the file, channel i will contain only zeroes.
944
+ //
945
+
946
+ slices.push_back (OutSliceInfo (i.channel().type,
947
+ 0, // base
948
+ 0, // xStride,
949
+ 0, // yStride,
950
+ i.channel().xSampling,
951
+ i.channel().ySampling,
952
+ true)); // zero
953
+ }
954
+ else
955
+ {
956
+ //
957
+ // Channel i is present in the frame buffer.
958
+ //
959
+
960
+ slices.push_back (OutSliceInfo (j.slice().type,
961
+ j.slice().base,
962
+ j.slice().xStride,
963
+ j.slice().yStride,
964
+ j.slice().xSampling,
965
+ j.slice().ySampling,
966
+ false)); // zero
967
+ }
968
+ }
969
+
970
+ //
971
+ // Store the new frame buffer.
972
+ //
973
+
974
+ _data->frameBuffer = frameBuffer;
975
+ _data->slices = slices;
976
+ }
977
+
978
+
979
+ const FrameBuffer &
980
+ OutputFile::frameBuffer () const
981
+ {
982
+ Lock lock (*_data->_streamData);
983
+ return _data->frameBuffer;
984
+ }
985
+
986
+
987
+ void
988
+ OutputFile::writePixels (int numScanLines)
989
+ {
990
+ try
991
+ {
992
+ Lock lock (*_data->_streamData);
993
+
994
+ if (_data->slices.size() == 0)
995
+ throw IEX_NAMESPACE::ArgExc ("No frame buffer specified "
996
+ "as pixel data source.");
997
+
998
+ //
999
+ // Maintain two iterators:
1000
+ // nextWriteBuffer: next linebuffer to be written to the file
1001
+ // nextCompressBuffer: next linebuffer to compress
1002
+ //
1003
+
1004
+ int first = (_data->currentScanLine - _data->minY) /
1005
+ _data->linesInBuffer;
1006
+
1007
+ int nextWriteBuffer = first;
1008
+ int nextCompressBuffer;
1009
+ int stop;
1010
+ int step;
1011
+ int scanLineMin;
1012
+ int scanLineMax;
1013
+
1014
+ {
1015
+ //
1016
+ // Create a task group for all line buffer tasks. When the
1017
+ // taskgroup goes out of scope, the destructor waits until
1018
+ // all tasks are complete.
1019
+ //
1020
+
1021
+ TaskGroup taskGroup;
1022
+
1023
+ //
1024
+ // Determine the range of lineBuffers that intersect the scan
1025
+ // line range. Then add the initial compression tasks to the
1026
+ // thread pool. We always add in at least one task but the
1027
+ // individual task might not do anything if numScanLines == 0.
1028
+ //
1029
+
1030
+ if (_data->lineOrder == INCREASING_Y)
1031
+ {
1032
+ int last = (_data->currentScanLine + (numScanLines - 1) -
1033
+ _data->minY) / _data->linesInBuffer;
1034
+
1035
+ scanLineMin = _data->currentScanLine;
1036
+ scanLineMax = _data->currentScanLine + numScanLines - 1;
1037
+
1038
+ int numTasks = max (min ((int)_data->lineBuffers.size(),
1039
+ last - first + 1),
1040
+ 1);
1041
+
1042
+ for (int i = 0; i < numTasks; i++)
1043
+ {
1044
+ ThreadPool::addGlobalTask
1045
+ (new LineBufferTask (&taskGroup, _data, first + i,
1046
+ scanLineMin, scanLineMax));
1047
+ }
1048
+
1049
+ nextCompressBuffer = first + numTasks;
1050
+ stop = last + 1;
1051
+ step = 1;
1052
+ }
1053
+ else
1054
+ {
1055
+ int last = (_data->currentScanLine - (numScanLines - 1) -
1056
+ _data->minY) / _data->linesInBuffer;
1057
+
1058
+ scanLineMax = _data->currentScanLine;
1059
+ scanLineMin = _data->currentScanLine - numScanLines + 1;
1060
+
1061
+ int numTasks = max (min ((int)_data->lineBuffers.size(),
1062
+ first - last + 1),
1063
+ 1);
1064
+
1065
+ for (int i = 0; i < numTasks; i++)
1066
+ {
1067
+ ThreadPool::addGlobalTask
1068
+ (new LineBufferTask (&taskGroup, _data, first - i,
1069
+ scanLineMin, scanLineMax));
1070
+ }
1071
+
1072
+ nextCompressBuffer = first - numTasks;
1073
+ stop = last - 1;
1074
+ step = -1;
1075
+ }
1076
+
1077
+ while (true)
1078
+ {
1079
+ if (_data->missingScanLines <= 0)
1080
+ {
1081
+ throw IEX_NAMESPACE::ArgExc ("Tried to write more scan lines "
1082
+ "than specified by the data window.");
1083
+ }
1084
+
1085
+ //
1086
+ // Wait until the next line buffer is ready to be written
1087
+ //
1088
+
1089
+ LineBuffer *writeBuffer =
1090
+ _data->getLineBuffer (nextWriteBuffer);
1091
+
1092
+ writeBuffer->wait();
1093
+
1094
+ int numLines = writeBuffer->scanLineMax -
1095
+ writeBuffer->scanLineMin + 1;
1096
+
1097
+ _data->missingScanLines -= numLines;
1098
+
1099
+ //
1100
+ // If the line buffer is only partially full, then it is
1101
+ // not complete and we cannot write it to disk yet.
1102
+ //
1103
+
1104
+ if (writeBuffer->partiallyFull)
1105
+ {
1106
+ _data->currentScanLine = _data->currentScanLine +
1107
+ step * numLines;
1108
+ writeBuffer->post();
1109
+
1110
+ return;
1111
+ }
1112
+
1113
+ //
1114
+ // Write the line buffer
1115
+ //
1116
+
1117
+ writePixelData (_data->_streamData, _data, writeBuffer);
1118
+ nextWriteBuffer += step;
1119
+
1120
+ _data->currentScanLine = _data->currentScanLine +
1121
+ step * numLines;
1122
+
1123
+ #ifdef DEBUG
1124
+
1125
+ assert (_data->currentScanLine ==
1126
+ ((_data->lineOrder == INCREASING_Y) ?
1127
+ writeBuffer->scanLineMax + 1:
1128
+ writeBuffer->scanLineMin - 1));
1129
+
1130
+ #endif
1131
+
1132
+ //
1133
+ // Release the lock on the line buffer
1134
+ //
1135
+
1136
+ writeBuffer->post();
1137
+
1138
+ //
1139
+ // If this was the last line buffer in the scanline range
1140
+ //
1141
+
1142
+ if (nextWriteBuffer == stop)
1143
+ break;
1144
+
1145
+ //
1146
+ // If there are no more line buffers to compress,
1147
+ // then only continue to write out remaining lineBuffers
1148
+ //
1149
+
1150
+ if (nextCompressBuffer == stop)
1151
+ continue;
1152
+
1153
+ //
1154
+ // Add nextCompressBuffer as a compression task
1155
+ //
1156
+
1157
+ ThreadPool::addGlobalTask
1158
+ (new LineBufferTask (&taskGroup, _data, nextCompressBuffer,
1159
+ scanLineMin, scanLineMax));
1160
+
1161
+ //
1162
+ // Update the next line buffer we need to compress
1163
+ //
1164
+
1165
+ nextCompressBuffer += step;
1166
+ }
1167
+
1168
+ //
1169
+ // Finish all tasks
1170
+ //
1171
+ }
1172
+
1173
+ //
1174
+ // Exeption handling:
1175
+ //
1176
+ // LineBufferTask::execute() may have encountered exceptions, but
1177
+ // those exceptions occurred in another thread, not in the thread
1178
+ // that is executing this call to OutputFile::writePixels().
1179
+ // LineBufferTask::execute() has caught all exceptions and stored
1180
+ // the exceptions' what() strings in the line buffers.
1181
+ // Now we check if any line buffer contains a stored exception; if
1182
+ // this is the case then we re-throw the exception in this thread.
1183
+ // (It is possible that multiple line buffers contain stored
1184
+ // exceptions. We re-throw the first exception we find and
1185
+ // ignore all others.)
1186
+ //
1187
+
1188
+ const string *exception = 0;
1189
+
1190
+ for (size_t i = 0; i < _data->lineBuffers.size(); ++i)
1191
+ {
1192
+ LineBuffer *lineBuffer = _data->lineBuffers[i];
1193
+
1194
+ if (lineBuffer->hasException && !exception)
1195
+ exception = &lineBuffer->exception;
1196
+
1197
+ lineBuffer->hasException = false;
1198
+ }
1199
+
1200
+ if (exception)
1201
+ throw IEX_NAMESPACE::IoExc (*exception);
1202
+ }
1203
+ catch (IEX_NAMESPACE::BaseExc &e)
1204
+ {
1205
+ REPLACE_EXC (e, "Failed to write pixel data to image "
1206
+ "file \"" << fileName() << "\". " << e);
1207
+ throw;
1208
+ }
1209
+ }
1210
+
1211
+
1212
+ int
1213
+ OutputFile::currentScanLine () const
1214
+ {
1215
+ Lock lock (*_data->_streamData);
1216
+ return _data->currentScanLine;
1217
+ }
1218
+
1219
+
1220
+ void
1221
+ OutputFile::copyPixels (InputFile &in)
1222
+ {
1223
+ Lock lock (*_data->_streamData);
1224
+
1225
+ //
1226
+ // Check if this file's and and the InputFile's
1227
+ // headers are compatible.
1228
+ //
1229
+
1230
+ const Header &hdr = _data->header;
1231
+ const Header &inHdr = in.header();
1232
+
1233
+ if (inHdr.find("tiles") != inHdr.end())
1234
+ THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image "
1235
+ "file \"" << in.fileName() << "\" to image "
1236
+ "file \"" << fileName() << "\". "
1237
+ "The input file is tiled, but the output file is "
1238
+ "not. Try using TiledOutputFile::copyPixels "
1239
+ "instead.");
1240
+
1241
+ if (!(hdr.dataWindow() == inHdr.dataWindow()))
1242
+ THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image "
1243
+ "file \"" << in.fileName() << "\" to image "
1244
+ "file \"" << fileName() << "\". "
1245
+ "The files have different data windows.");
1246
+
1247
+ if (!(hdr.lineOrder() == inHdr.lineOrder()))
1248
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1249
+ "file \"" << in.fileName() << "\" to image "
1250
+ "file \"" << fileName() << "\" failed. "
1251
+ "The files have different line orders.");
1252
+
1253
+ if (!(hdr.compression() == inHdr.compression()))
1254
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1255
+ "file \"" << in.fileName() << "\" to image "
1256
+ "file \"" << fileName() << "\" failed. "
1257
+ "The files use different compression methods.");
1258
+
1259
+ if (!(hdr.channels() == inHdr.channels()))
1260
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1261
+ "file \"" << in.fileName() << "\" to image "
1262
+ "file \"" << fileName() << "\" failed. "
1263
+ "The files have different channel lists.");
1264
+
1265
+ //
1266
+ // Verify that no pixel data have been written to this file yet.
1267
+ //
1268
+
1269
+ const Box2i &dataWindow = hdr.dataWindow();
1270
+
1271
+ if (_data->missingScanLines != dataWindow.max.y - dataWindow.min.y + 1)
1272
+ THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image "
1273
+ "file \"" << in.fileName() << "\" to image "
1274
+ "file \"" << fileName() << "\" failed. "
1275
+ "\"" << fileName() << "\" already contains "
1276
+ "pixel data.");
1277
+
1278
+ //
1279
+ // Copy the pixel data.
1280
+ //
1281
+
1282
+ while (_data->missingScanLines > 0)
1283
+ {
1284
+ const char *pixelData;
1285
+ int pixelDataSize;
1286
+
1287
+ in.rawPixelData (_data->currentScanLine, pixelData, pixelDataSize);
1288
+
1289
+ writePixelData (_data->_streamData, _data, lineBufferMinY (_data->currentScanLine,
1290
+ _data->minY,
1291
+ _data->linesInBuffer),
1292
+ pixelData, pixelDataSize);
1293
+
1294
+ _data->currentScanLine += (_data->lineOrder == INCREASING_Y)?
1295
+ _data->linesInBuffer: -_data->linesInBuffer;
1296
+
1297
+ _data->missingScanLines -= _data->linesInBuffer;
1298
+ }
1299
+ }
1300
+
1301
+
1302
+ void
1303
+ OutputFile::copyPixels( InputPart & in)
1304
+ {
1305
+ copyPixels(*in.file);
1306
+ }
1307
+
1308
+
1309
+
1310
+ void
1311
+ OutputFile::updatePreviewImage (const PreviewRgba newPixels[])
1312
+ {
1313
+ Lock lock (*_data->_streamData);
1314
+
1315
+ if (_data->previewPosition <= 0)
1316
+ THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. "
1317
+ "File \"" << fileName() << "\" does not "
1318
+ "contain a preview image.");
1319
+
1320
+ //
1321
+ // Store the new pixels in the header's preview image attribute.
1322
+ //
1323
+
1324
+ PreviewImageAttribute &pia =
1325
+ _data->header.typedAttribute <PreviewImageAttribute> ("preview");
1326
+
1327
+ PreviewImage &pi = pia.value();
1328
+ PreviewRgba *pixels = pi.pixels();
1329
+ int numPixels = pi.width() * pi.height();
1330
+
1331
+ for (int i = 0; i < numPixels; ++i)
1332
+ pixels[i] = newPixels[i];
1333
+
1334
+ //
1335
+ // Save the current file position, jump to the position in
1336
+ // the file where the preview image starts, store the new
1337
+ // preview image, and jump back to the saved file position.
1338
+ //
1339
+
1340
+ Int64 savedPosition = _data->_streamData->os->tellp();
1341
+
1342
+ try
1343
+ {
1344
+ _data->_streamData->os->seekp (_data->previewPosition);
1345
+ pia.writeValueTo (*_data->_streamData->os, _data->version);
1346
+ _data->_streamData->os->seekp (savedPosition);
1347
+ }
1348
+ catch (IEX_NAMESPACE::BaseExc &e)
1349
+ {
1350
+ REPLACE_EXC (e, "Cannot update preview image pixels for "
1351
+ "file \"" << fileName() << "\". " << e);
1352
+ throw;
1353
+ }
1354
+ }
1355
+
1356
+
1357
+ void
1358
+ OutputFile::breakScanLine (int y, int offset, int length, char c)
1359
+ {
1360
+ Lock lock (*_data->_streamData);
1361
+
1362
+ Int64 position =
1363
+ _data->lineOffsets[(y - _data->minY) / _data->linesInBuffer];
1364
+
1365
+ if (!position)
1366
+ THROW (IEX_NAMESPACE::ArgExc, "Cannot overwrite scan line " << y << ". "
1367
+ "The scan line has not yet been stored in "
1368
+ "file \"" << fileName() << "\".");
1369
+
1370
+ _data->_streamData->currentPosition = 0;
1371
+ _data->_streamData->os->seekp (position + offset);
1372
+
1373
+ for (int i = 0; i < length; ++i)
1374
+ _data->_streamData->os->write (&c, 1);
1375
+ }
1376
+
1377
+
1378
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT