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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +1 -0
- data/Rakefile +34 -0
- data/ext/rfreeimage/extconf.rb +35 -0
- data/ext/rfreeimage/rfi_main.c +389 -0
- data/lib/rfreeimage/image.rb +26 -0
- data/lib/rfreeimage/version.rb +3 -0
- data/lib/rfreeimage.rb +3 -0
- data/rfreeimage.gemspec +32 -0
- data/vendor/FreeImage/Makefile +34 -0
- data/vendor/FreeImage/Makefile.cygwin +74 -0
- data/vendor/FreeImage/Makefile.fip +84 -0
- data/vendor/FreeImage/Makefile.gnu +83 -0
- data/vendor/FreeImage/Makefile.iphone +96 -0
- data/vendor/FreeImage/Makefile.mingw +136 -0
- data/vendor/FreeImage/Makefile.osx +115 -0
- data/vendor/FreeImage/Makefile.solaris +66 -0
- data/vendor/FreeImage/Makefile.srcs +6 -0
- data/vendor/FreeImage/README.iphone +19 -0
- data/vendor/FreeImage/README.linux +50 -0
- data/vendor/FreeImage/README.minGW +236 -0
- data/vendor/FreeImage/README.osx +44 -0
- data/vendor/FreeImage/README.solaris +67 -0
- data/vendor/FreeImage/Source/CacheFile.h +92 -0
- data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
- data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
- data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
- data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
- data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
- data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
- data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
- data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
- data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
- data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
- data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
- data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
- data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
- data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
- data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
- data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
- data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
- data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
- data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
- data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
- data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
- data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
- data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
- data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
- data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
- data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
- data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
- data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
- data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
- data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
- data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
- data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
- data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
- data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
- data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
- data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
- data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
- data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
- data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
- data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
- data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
- data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
- data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
- data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
- data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
- data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
- data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
- data/vendor/FreeImage/Source/FreeImage.h +1153 -0
- data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
- data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
- data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
- data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
- data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
- data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
- data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
- data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
- data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
- data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
- data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
- data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
- data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
- data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
- data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
- data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
- data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
- data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
- data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
- data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
- data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
- data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
- data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
- data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
- data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
- data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
- data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
- data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
- data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
- data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
- data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
- data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
- data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
- data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
- data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
- data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
- data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
- data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
- data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
- data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
- data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
- data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
- data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
- data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
- data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
- data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
- data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
- data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
- data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
- data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
- data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
- data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
- data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
- data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
- data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
- data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
- data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
- data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
- data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
- data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
- data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
- data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
- data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
- data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
- data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
- data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
- data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
- data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
- data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
- data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
- data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
- data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
- data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
- data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
- data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
- data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
- data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
- data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
- data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
- data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
- data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
- data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
- data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
- data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
- data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
- data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
- data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
- data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
- data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
- data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
- data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
- data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
- data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
- data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
- data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
- data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
- data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
- data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
- data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
- data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
- data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
- data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
- data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
- data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
- data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
- data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
- data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
- data/vendor/FreeImage/Source/Plugin.h +144 -0
- data/vendor/FreeImage/Source/Quantizers.h +354 -0
- data/vendor/FreeImage/Source/ToneMapping.h +44 -0
- data/vendor/FreeImage/Source/Utilities.h +516 -0
- data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
- data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
- data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
- data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
- data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
- data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
- data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
- data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
- data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
- data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
- data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
- data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
- data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
- data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
- data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
- data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
- data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
- data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
- data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
- data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
- data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
- data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
- data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
- data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
- data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
- data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
- 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
|