lightdrift-libraw 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/CHANGELOG.md +374 -0
  2. package/LICENSE +21 -0
  3. package/README.md +757 -0
  4. package/binding.gyp +38 -0
  5. package/deps/LibRaw-Source/LibRaw-0.21.4/.clang-format +4 -0
  6. package/deps/LibRaw-Source/LibRaw-0.21.4/COPYRIGHT +27 -0
  7. package/deps/LibRaw-Source/LibRaw-0.21.4/Changelog.txt +2802 -0
  8. package/deps/LibRaw-Source/LibRaw-0.21.4/DEVELOPER-NOTES +20 -0
  9. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_4-allow-VC5-validate.diff +21 -0
  10. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff +15 -0
  11. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-allow-VC5-validate.diff +21 -0
  12. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.cpp.diff +29 -0
  13. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.h.diff +12 -0
  14. package/deps/LibRaw-Source/LibRaw-0.21.4/INSTALL +51 -0
  15. package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.CDDL +340 -0
  16. package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.LGPL +458 -0
  17. package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.pro +19 -0
  18. package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.sln +123 -0
  19. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.am +140 -0
  20. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
  21. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
  22. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.dist +501 -0
  23. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.in +1849 -0
  24. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.mingw +297 -0
  25. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.msvc +628 -0
  26. package/deps/LibRaw-Source/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
  27. package/deps/LibRaw-Source/LibRaw-0.21.4/README.GoPro.txt +112 -0
  28. package/deps/LibRaw-Source/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
  29. package/deps/LibRaw-Source/LibRaw-0.21.4/README.cmake +9 -0
  30. package/deps/LibRaw-Source/LibRaw-0.21.4/README.demosaic-packs +17 -0
  31. package/deps/LibRaw-Source/LibRaw-0.21.4/README.md +106 -0
  32. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
  33. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
  34. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
  35. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
  36. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
  37. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
  38. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
  39. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
  40. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
  41. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
  42. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
  43. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
  44. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
  45. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
  46. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
  47. package/deps/LibRaw-Source/LibRaw-0.21.4/aclocal.m4 +1446 -0
  48. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.0 +19332 -0
  49. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.1 +19332 -0
  50. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.2 +19332 -0
  51. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/requests +544 -0
  52. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.0 +3028 -0
  53. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.1 +665 -0
  54. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.2 +3028 -0
  55. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.keep_me +2 -0
  56. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
  57. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
  58. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
  59. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
  60. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
  61. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
  62. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
  63. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
  64. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
  65. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
  66. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
  67. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
  68. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
  69. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
  70. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
  71. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
  72. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
  73. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
  74. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
  75. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
  76. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
  77. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
  78. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
  79. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
  80. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
  81. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
  82. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
  83. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
  84. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
  85. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
  86. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
  87. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
  88. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
  89. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
  90. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
  91. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
  92. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
  93. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
  94. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
  95. package/deps/LibRaw-Source/LibRaw-0.21.4/compile +347 -0
  96. package/deps/LibRaw-Source/LibRaw-0.21.4/config.guess +1433 -0
  97. package/deps/LibRaw-Source/LibRaw-0.21.4/config.sub +1804 -0
  98. package/deps/LibRaw-Source/LibRaw-0.21.4/configure +19332 -0
  99. package/deps/LibRaw-Source/LibRaw-0.21.4/configure.ac +153 -0
  100. package/deps/LibRaw-Source/LibRaw-0.21.4/depcomp +791 -0
  101. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-C.html +187 -0
  102. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-CXX.html +881 -0
  103. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
  104. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-notes.html +305 -0
  105. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-overview.html +66 -0
  106. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
  107. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
  108. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
  109. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/index.html +38 -0
  110. package/deps/LibRaw-Source/LibRaw-0.21.4/install-sh +501 -0
  111. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
  112. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
  113. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/defines.h +193 -0
  114. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dmp_include.h +27 -0
  115. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
  116. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
  117. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
  118. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/var_defines.h +215 -0
  119. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
  120. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/Makefile +3 -0
  121. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw.h +534 -0
  122. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
  123. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
  124. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
  125. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
  126. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
  127. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
  128. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc.in +12 -0
  129. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc.in +12 -0
  130. package/deps/LibRaw-Source/LibRaw-0.21.4/ltmain.sh +11147 -0
  131. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
  132. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/libtool.m4 +8369 -0
  133. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltoptions.m4 +437 -0
  134. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
  135. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltversion.m4 +23 -0
  136. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
  137. package/deps/LibRaw-Source/LibRaw-0.21.4/missing +215 -0
  138. package/deps/LibRaw-Source/LibRaw-0.21.4/object/.keep_me +0 -0
  139. package/deps/LibRaw-Source/LibRaw-0.21.4/rsxml2c.sh +6 -0
  140. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/4channels.cpp +174 -0
  141. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/Makefile +2 -0
  142. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
  143. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
  144. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt.c +178 -0
  145. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
  146. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
  147. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
  148. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
  149. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
  150. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
  151. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
  152. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
  153. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
  154. package/deps/LibRaw-Source/LibRaw-0.21.4/shlib-version.sh +11 -0
  155. package/deps/LibRaw-Source/LibRaw-0.21.4/src/Makefile +2 -0
  156. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
  157. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
  158. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
  159. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
  160. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
  161. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
  162. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
  163. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
  164. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
  165. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
  166. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
  167. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
  168. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
  169. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
  170. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
  171. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
  172. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
  173. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
  174. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
  175. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
  176. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
  177. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
  178. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
  179. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
  180. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
  181. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
  182. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
  183. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
  184. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
  185. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
  186. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
  187. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
  188. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
  189. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
  190. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
  191. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
  192. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
  193. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
  194. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
  195. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
  196. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
  197. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
  198. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
  199. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
  200. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
  201. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
  202. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
  203. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
  204. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
  205. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
  206. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
  207. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
  208. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
  209. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
  210. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
  211. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
  212. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
  213. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
  214. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
  215. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
  216. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
  217. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
  218. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
  219. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
  220. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
  221. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
  222. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
  223. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
  224. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
  225. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
  226. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
  227. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
  228. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
  229. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
  230. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
  231. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
  232. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
  233. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
  234. package/deps/LibRaw-Source/LibRaw-0.21.4/version.sh +16 -0
  235. package/deps/LibRaw-Win64/LibRaw-0.21.4/.clang-format +4 -0
  236. package/deps/LibRaw-Win64/LibRaw-0.21.4/COPYRIGHT +27 -0
  237. package/deps/LibRaw-Win64/LibRaw-0.21.4/Changelog.txt +2802 -0
  238. package/deps/LibRaw-Win64/LibRaw-0.21.4/DEVELOPER-NOTES +20 -0
  239. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-1_4-allow-VC5-validate.diff +21 -0
  240. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff +15 -0
  241. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-allow-VC5-validate.diff +21 -0
  242. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/gpr_read_image.cpp.diff +29 -0
  243. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/gpr_read_image.h.diff +12 -0
  244. package/deps/LibRaw-Win64/LibRaw-0.21.4/INSTALL +51 -0
  245. package/deps/LibRaw-Win64/LibRaw-0.21.4/LICENSE.CDDL +340 -0
  246. package/deps/LibRaw-Win64/LibRaw-0.21.4/LICENSE.LGPL +458 -0
  247. package/deps/LibRaw-Win64/LibRaw-0.21.4/LibRaw.pro +19 -0
  248. package/deps/LibRaw-Win64/LibRaw-0.21.4/LibRaw.sln +123 -0
  249. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.am +140 -0
  250. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
  251. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
  252. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.dist +501 -0
  253. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.in +1849 -0
  254. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.mingw +297 -0
  255. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.msvc +628 -0
  256. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
  257. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.GoPro.txt +112 -0
  258. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
  259. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.cmake +9 -0
  260. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.demosaic-packs +17 -0
  261. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.md +106 -0
  262. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
  263. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
  264. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
  265. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
  266. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
  267. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
  268. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
  269. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
  270. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
  271. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
  272. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
  273. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
  274. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
  275. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
  276. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
  277. package/deps/LibRaw-Win64/LibRaw-0.21.4/aclocal.m4 +1446 -0
  278. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.0 +19332 -0
  279. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.1 +19332 -0
  280. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.2 +19332 -0
  281. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/requests +544 -0
  282. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.0 +3028 -0
  283. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.1 +665 -0
  284. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.2 +3028 -0
  285. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/.keep_me +2 -0
  286. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/4channels.exe +0 -0
  287. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/dcraw_emu.exe +0 -0
  288. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/dcraw_half.exe +0 -0
  289. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/half_mt.exe +0 -0
  290. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/libraw.dll +0 -0
  291. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/mem_image.exe +0 -0
  292. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/multirender_test.exe +0 -0
  293. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/openbayer_sample.exe +0 -0
  294. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/postprocessing_benchmark.exe +0 -0
  295. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/raw-identify.exe +0 -0
  296. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/rawtextdump.exe +0 -0
  297. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/simple_dcraw.exe +0 -0
  298. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/unprocessed_raw.exe +0 -0
  299. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
  300. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
  301. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
  302. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
  303. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
  304. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
  305. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
  306. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
  307. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
  308. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
  309. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
  310. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
  311. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
  312. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
  313. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
  314. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
  315. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
  316. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
  317. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
  318. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
  319. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
  320. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
  321. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
  322. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
  323. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
  324. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
  325. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
  326. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
  327. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
  328. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
  329. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
  330. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
  331. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
  332. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
  333. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
  334. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
  335. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
  336. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
  337. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
  338. package/deps/LibRaw-Win64/LibRaw-0.21.4/compile +347 -0
  339. package/deps/LibRaw-Win64/LibRaw-0.21.4/config.guess +1433 -0
  340. package/deps/LibRaw-Win64/LibRaw-0.21.4/config.sub +1804 -0
  341. package/deps/LibRaw-Win64/LibRaw-0.21.4/configure +19332 -0
  342. package/deps/LibRaw-Win64/LibRaw-0.21.4/configure.ac +153 -0
  343. package/deps/LibRaw-Win64/LibRaw-0.21.4/depcomp +791 -0
  344. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-C.html +187 -0
  345. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-CXX.html +881 -0
  346. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
  347. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-notes.html +305 -0
  348. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-overview.html +66 -0
  349. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
  350. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
  351. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
  352. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/index.html +38 -0
  353. package/deps/LibRaw-Win64/LibRaw-0.21.4/install-sh +501 -0
  354. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
  355. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
  356. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/defines.h +193 -0
  357. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dmp_include.h +27 -0
  358. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
  359. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
  360. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
  361. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/var_defines.h +215 -0
  362. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
  363. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/Makefile +3 -0
  364. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw.exp +0 -0
  365. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw.lib +0 -0
  366. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw_static.lib +0 -0
  367. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw.h +534 -0
  368. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
  369. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
  370. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
  371. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
  372. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
  373. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
  374. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw.pc.in +12 -0
  375. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw_r.pc.in +12 -0
  376. package/deps/LibRaw-Win64/LibRaw-0.21.4/ltmain.sh +11147 -0
  377. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
  378. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/libtool.m4 +8369 -0
  379. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltoptions.m4 +437 -0
  380. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
  381. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltversion.m4 +23 -0
  382. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
  383. package/deps/LibRaw-Win64/LibRaw-0.21.4/missing +215 -0
  384. package/deps/LibRaw-Win64/LibRaw-0.21.4/object/.keep_me +0 -0
  385. package/deps/LibRaw-Win64/LibRaw-0.21.4/rsxml2c.sh +6 -0
  386. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/4channels.cpp +174 -0
  387. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/Makefile +2 -0
  388. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
  389. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
  390. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/half_mt.c +178 -0
  391. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
  392. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
  393. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
  394. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
  395. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
  396. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
  397. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
  398. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
  399. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
  400. package/deps/LibRaw-Win64/LibRaw-0.21.4/shlib-version.sh +11 -0
  401. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/Makefile +2 -0
  402. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
  403. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
  404. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
  405. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
  406. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
  407. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
  408. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
  409. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
  410. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
  411. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
  412. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
  413. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
  414. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
  415. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
  416. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
  417. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
  418. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
  419. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
  420. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
  421. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
  422. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
  423. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
  424. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
  425. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
  426. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
  427. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
  428. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
  429. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
  430. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
  431. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
  432. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
  433. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
  434. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
  435. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
  436. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
  437. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
  438. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
  439. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
  440. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
  441. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
  442. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
  443. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
  444. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
  445. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
  446. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
  447. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
  448. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
  449. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
  450. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
  451. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
  452. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
  453. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
  454. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
  455. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
  456. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
  457. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
  458. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
  459. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
  460. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
  461. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
  462. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
  463. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
  464. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
  465. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
  466. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
  467. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
  468. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
  469. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
  470. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
  471. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
  472. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
  473. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
  474. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
  475. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
  476. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
  477. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
  478. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
  479. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
  480. package/deps/LibRaw-Win64/LibRaw-0.21.4/version.sh +16 -0
  481. package/lib/index.d.ts +324 -0
  482. package/lib/index.js +761 -0
  483. package/package.json +97 -0
  484. package/src/addon.cpp +8 -0
  485. package/src/libraw_wrapper.cpp +1223 -0
  486. package/src/libraw_wrapper.h +109 -0
  487. package/src/libraw_wrapper_new.cpp +853 -0
@@ -0,0 +1,2198 @@
1
+ /* -*- C++ -*-
2
+ * Copyright 2019-2021 LibRaw LLC (info@libraw.org)
3
+ *
4
+ LibRaw uses code from dcraw.c -- Dave Coffin's raw photo decoder,
5
+ dcraw.c is copyright 1997-2018 by Dave Coffin, dcoffin a cybercom o net.
6
+ LibRaw do not use RESTRICTED code from dcraw.c
7
+
8
+ LibRaw is free software; you can redistribute it and/or modify
9
+ it under the terms of the one of two licenses as you choose:
10
+
11
+ 1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
12
+ (See file LICENSE.LGPL provided in LibRaw distribution archive for details).
13
+
14
+ 2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
15
+ (See file LICENSE.CDDL provided in LibRaw distribution archive for details).
16
+
17
+ */
18
+
19
+ #include "../../internal/dcraw_defs.h"
20
+ #include "../../internal/libraw_cameraids.h"
21
+
22
+ int LibRaw::parse_tiff_ifd(int base)
23
+ {
24
+ unsigned entries, tag, type, len, plen = 16, save, utmp;
25
+ int ifd, use_cm = 0, cfa, i, j, c, ima_len = 0;
26
+ char *cbuf, *cp;
27
+ uchar cfa_pat[16], cfa_pc[] = {0, 1, 2, 3}, tab[256];
28
+ double fm[3][4], cc[4][4], cm[4][3], cam_xyz[4][3], num;
29
+ double ab[] = {1, 1, 1, 1}, asn[] = {0, 0, 0, 0}, xyz[] = {1, 1, 1};
30
+ unsigned sony_curve[] = {0, 0, 0, 0, 0, 4095};
31
+ unsigned *buf, sony_offset = 0, sony_length = 0, sony_key = 0;
32
+ struct jhead jh;
33
+
34
+ ushort *rafdata;
35
+
36
+ if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0])
37
+ return 1;
38
+ ifd = tiff_nifds++;
39
+ for (j = 0; j < 4; j++)
40
+ for (i = 0; i < 4; i++)
41
+ cc[j][i] = i == j;
42
+
43
+ if (libraw_internal_data.unpacker_data.ifd0_offset == -1LL)
44
+ libraw_internal_data.unpacker_data.ifd0_offset = base;
45
+
46
+ entries = get2();
47
+ if (entries > 512)
48
+ return 1;
49
+
50
+ INT64 fsize = ifp->size();
51
+
52
+ while (entries--)
53
+ {
54
+ tiff_get(base, &tag, &type, &len, &save);
55
+ INT64 savepos = ftell(ifp);
56
+ if (len > 8 && savepos + len > 2 * fsize)
57
+ {
58
+ fseek(ifp, save, SEEK_SET); // Recover tiff-read position!!
59
+ continue;
60
+ }
61
+ if (callbacks.exif_cb)
62
+ {
63
+ callbacks.exif_cb(callbacks.exifparser_data,
64
+ tag | (is_pana_raw ? 0x30000 : ((ifd + 1) << 20)), type,
65
+ len, order, ifp, base);
66
+ fseek(ifp, savepos, SEEK_SET);
67
+ }
68
+
69
+ if (!is_pana_raw)
70
+ { /* processing of EXIF tags that collide w/ PanasonicRaw tags */
71
+ switch (tag)
72
+ {
73
+ case 0x0001:
74
+ if (len == 4)
75
+ is_pana_raw = get4();
76
+ break;
77
+ case 0x000b: /* 11, Std. EXIF Software tag */
78
+ fgets(software, 64, ifp);
79
+ if (!strncmp(software, "Adobe", 5) || !strncmp(software, "dcraw", 5) ||
80
+ !strncmp(software, "UFRaw", 5) || !strncmp(software, "Bibble", 6) ||
81
+ !strcmp(software, "Digital Photo Professional"))
82
+ is_raw = 0;
83
+ break;
84
+ case 0x001c: /* 28, safeguard, probably not needed */
85
+ case 0x001d: /* 29, safeguard, probably not needed */
86
+ case 0x001e: /* 30, safeguard, probably not needed */
87
+ cblack[tag - 0x001c] = get2();
88
+ cblack[3] = cblack[1];
89
+ break;
90
+
91
+ case 0x0111: /* 273, StripOffset */
92
+ if (len > 1 && len < 16384)
93
+ {
94
+ off_t sav = ftell(ifp);
95
+ tiff_ifd[ifd].strip_offsets = (int *)calloc(len, sizeof(int));
96
+ tiff_ifd[ifd].strip_offsets_count = len;
97
+ for (int ii = 0; ii < (int)len; ii++)
98
+ tiff_ifd[ifd].strip_offsets[ii] = get4() + base;
99
+ fseek(ifp, sav, SEEK_SET); // restore position
100
+ }
101
+ /* fallback */
102
+ case 0x0201: /* 513, JpegIFOffset */
103
+ case 0xf007: // 61447
104
+ tiff_ifd[ifd].offset = get4() + base;
105
+ if (!tiff_ifd[ifd].bps && tiff_ifd[ifd].offset > 0)
106
+ {
107
+ fseek(ifp, tiff_ifd[ifd].offset, SEEK_SET);
108
+ if (ljpeg_start(&jh, 1))
109
+ {
110
+ if (!dng_version && !strcasecmp(make, "SONY") && tiff_ifd[ifd].phint == 32803 &&
111
+ tiff_ifd[ifd].comp == 7) // Sony/lossless compressed IFD
112
+ {
113
+ tiff_ifd[ifd].comp = 6;
114
+ tiff_ifd[ifd].bps = jh.bits;
115
+ tiff_ifd[ifd].samples = 1;
116
+ }
117
+ else
118
+ {
119
+ tiff_ifd[ifd].comp = 6;
120
+ tiff_ifd[ifd].bps = jh.bits;
121
+ tiff_ifd[ifd].t_width = jh.wide;
122
+ tiff_ifd[ifd].t_height = jh.high;
123
+ tiff_ifd[ifd].samples = jh.clrs;
124
+ if (!(jh.sraw || (jh.clrs & 1)))
125
+ tiff_ifd[ifd].t_width *= jh.clrs;
126
+ if ((tiff_ifd[ifd].t_width > 4 * tiff_ifd[ifd].t_height) & ~jh.clrs)
127
+ {
128
+ tiff_ifd[ifd].t_width /= 2;
129
+ tiff_ifd[ifd].t_height *= 2;
130
+ }
131
+ i = order;
132
+ parse_tiff(tiff_ifd[ifd].offset + 12);
133
+ order = i;
134
+ }
135
+ }
136
+ }
137
+ break;
138
+ }
139
+ }
140
+ else
141
+ { /* processing Panasonic-specific "PanasonicRaw" tags */
142
+ switch (tag)
143
+ {
144
+ case 0x0004: /* 4, SensorTopBorder */
145
+ imgdata.sizes.raw_inset_crops[0].ctop = get2();
146
+ break;
147
+ case 0x000a: /* 10, BitsPerSample */
148
+ pana_bpp = get2();
149
+ pana_bpp = LIM(pana_bpp, 8, 16);
150
+ break;
151
+ case 0x000b: /* 11, Compression */
152
+ imPana.Compression = get2();
153
+ break;
154
+ case 0x000e: /* 14, LinearityLimitRed */
155
+ case 0x000f: /* 15, LinearityLimitGreen */
156
+ case 0x0010: /* 16, LinearityLimitBlue */
157
+ imgdata.color.linear_max[tag - 14] = get2();
158
+ if (imgdata.color.linear_max[tag - 14] == 16383)
159
+ imgdata.color.linear_max[tag - 14] -= 64;
160
+ if (imgdata.color.linear_max[tag - 14] == 4095)
161
+ imgdata.color.linear_max[tag - 14] -= 16;
162
+ if (tag == 0x000f) // 15, LinearityLimitGreen
163
+ imgdata.color.linear_max[3] = imgdata.color.linear_max[1];
164
+ break;
165
+ case 0x0013: /* 19, WBInfo */
166
+ if ((i = get2()) > 0x100)
167
+ break;
168
+ for (c = 0; c < i; c++)
169
+ {
170
+ if ((j = get2()) < 0x100)
171
+ {
172
+ if (j >= 0) {
173
+ icWBC[j][0] = get2();
174
+ icWBC[j][2] = get2();
175
+ icWBC[j][1] = icWBC[j][3] =
176
+ 0x100;
177
+ }
178
+ }
179
+ else // light source out of EXIF numbers range
180
+ get4();
181
+ }
182
+ break;
183
+ case 0x0018: /* 24, HighISOMultiplierRed */
184
+ case 0x0019: /* 25, HighISOMultiplierGreen */
185
+ case 0x001a: /* 26, HighISOMultiplierBlue */
186
+ imPana.HighISOMultiplier[tag - 0x0018] = get2();
187
+ break;
188
+ case 0x001c: /* 28, BlackLevelRed */
189
+ case 0x001d: /* 29, BlackLevelGreen */
190
+ case 0x001e: /* 30, BlackLevelBlue */
191
+ pana_black[tag - 0x001c] = get2();
192
+ break;
193
+ case 0x002d: /* 45, RawFormat */
194
+ /* pana_encoding: tag 0x002d (45dec)
195
+ not used - DMC-LX1/FZ30/FZ50/L1/LX1/LX2
196
+ 2 - RAW DMC-FZ8/FZ18
197
+ 3 - RAW DMC-L10
198
+ 4 - RW2 for most other models, including G9 in "pixel shift off"
199
+ mode and YUNEEC CGO4 (must add 15 to black levels for
200
+ RawFormat == 4) 5 - RW2 DC-GH5s; G9 in "pixel shift on"
201
+ mode 6 - RW2 DC-S1, DC-S1R in "pixel shift off"
202
+ mode 7 - RW2 DC-S1R (probably DC-S1 too) in
203
+ "pixel shift on" mode
204
+ */
205
+ pana_encoding = get2();
206
+ break;
207
+ case 0x002f: /* 47, CropTop */
208
+ imgdata.sizes.raw_inset_crops[0].ctop = get2();
209
+ break;
210
+ case 0x0030: /* 48, CropLeft */
211
+ imgdata.sizes.raw_inset_crops[0].cleft = get2();
212
+ break;
213
+ case 0x0031: /* 49, CropBottom */
214
+ imgdata.sizes.raw_inset_crops[0].cheight =
215
+ get2() - imgdata.sizes.raw_inset_crops[0].ctop;
216
+ break;
217
+ case 0x0032: /* 50, CropRight */
218
+ imgdata.sizes.raw_inset_crops[0].cwidth =
219
+ get2() - imgdata.sizes.raw_inset_crops[0].cleft;
220
+ break;
221
+ case 0x0037: /* 55, ISO if ISO in 0x8827 & ISO in 0x0017 == 65535 */
222
+ if (iso_speed == 65535)
223
+ iso_speed = get4();
224
+ break;
225
+ case 0x011c: /* 284, Gamma */
226
+ {
227
+ int n = get2();
228
+ if (n >= 1024)
229
+ imPana.gamma = (float)n / 1024.0f;
230
+ else if (n >= 256)
231
+ imPana.gamma = (float)n / 256.0f;
232
+ else
233
+ imPana.gamma = (float)n / 100.0f;
234
+ }
235
+ break;
236
+ case 0x0120: /* 288, CameraIFD, contains tags 0x1xxx, 0x2xxx, 0x3xxx */
237
+ {
238
+ unsigned sorder = order;
239
+ unsigned long sbase = base;
240
+ base = ftell(ifp);
241
+ order = get2();
242
+ fseek(ifp, 2, SEEK_CUR);
243
+ fseek(ifp, INT64(get4()) - 8LL, SEEK_CUR);
244
+ parse_tiff_ifd(base);
245
+ base = sbase;
246
+ order = sorder;
247
+ }
248
+ break;
249
+ case 0x0121: /* 289, Multishot, 0 is Off, 65536 is Pixel Shift */
250
+ imPana.Multishot = get4();
251
+ break;
252
+ case 0x1001:
253
+ if (imPana.Multishot == 0) {
254
+ imPana.Multishot = get4();
255
+ if (imPana.Multishot)
256
+ imPana.Multishot += 65535;
257
+ }
258
+ break;
259
+ case 0x1100:
260
+ imPana.FocusStepNear = get2();
261
+ break;
262
+ case 0x1101:
263
+ imPana.FocusStepCount = get2();
264
+ break;
265
+ case 0x1105:
266
+ imPana.ZoomPosition = get4();
267
+ break;
268
+ case 0x1201:
269
+ if (tagtypeIs(LIBRAW_EXIFTAG_TYPE_SHORT)) {
270
+ imPana.LensManufacturer = fgetc(ifp);
271
+ } else if (type == 258) {
272
+ imPana.LensManufacturer = get4();
273
+ if (imPana.LensManufacturer >= 257) {
274
+ ilm.LensMount = LIBRAW_MOUNT_LPS_L;
275
+ ilm.LensFormat = LIBRAW_FORMAT_FF;
276
+ }
277
+ }
278
+ break;
279
+ case 0x1202:
280
+ if (ilm.LensMount == LIBRAW_MOUNT_LPS_L) {
281
+ if ((utmp = get2())) ilm.LensID = utmp;
282
+ } else if ((imPana.LensManufacturer != 0xff) &&
283
+ (imPana.LensManufacturer != 0xffffffff)) {
284
+ if ((utmp = (fgetc(ifp) << 8) | fgetc(ifp)))
285
+ ilm.LensID = (imPana.LensManufacturer << 16) + utmp;
286
+ }
287
+ break;
288
+ case 0x1203: /* 4611, FocalLengthIn35mmFormat, contained in 0x0120
289
+ CameraIFD */
290
+ if (imgdata.lens.FocalLengthIn35mmFormat < 0.65f)
291
+ imgdata.lens.FocalLengthIn35mmFormat = get2();
292
+ break;
293
+ case 0x2009: /* 8201, contained in 0x0120 CameraIFD */
294
+ if ((pana_encoding == 4) || (pana_encoding == 5))
295
+ {
296
+ i = MIN(8, len);
297
+ int permut[8] = {3, 2, 1, 0, 3 + 4, 2 + 4, 1 + 4, 0 + 4};
298
+ imPana.BlackLevelDim = len;
299
+ for (j = 0; j < i; j++)
300
+ {
301
+ imPana.BlackLevel[permut[j]] =
302
+ (float)(get2()) / (float)(powf(2.f, 14.f - pana_bpp));
303
+ }
304
+ }
305
+ break;
306
+ case 0x3420: /* 13344, WB_RedLevelAuto, contained in 0x0120 CameraIFD */
307
+ icWBC[LIBRAW_WBI_Auto][0] = get2();
308
+ icWBC[LIBRAW_WBI_Auto][1] = icWBC[LIBRAW_WBI_Auto][3] = 1024.0f;
309
+ break;
310
+ case 0x3421: /* 13345, WB_BlueLevelAuto, contained in 0x0120 CameraIFD */
311
+ icWBC[LIBRAW_WBI_Auto][2] = get2();
312
+ break;
313
+ case 0x0002: /* 2, ImageWidth */
314
+ tiff_ifd[ifd].t_width = getint(type);
315
+ break;
316
+ case 0x0003: /* 3, ImageHeight */
317
+ tiff_ifd[ifd].t_height = getint(type);
318
+ break;
319
+ case 0x0005: /* 5, SensorLeftBorder */
320
+ width = get2();
321
+ imgdata.sizes.raw_inset_crops[0].cleft = width;
322
+ break;
323
+ case 0x0006: /* 6, SensorBottomBorder */
324
+ height = get2();
325
+ imgdata.sizes.raw_inset_crops[0].cheight =
326
+ height - imgdata.sizes.raw_inset_crops[0].ctop;
327
+ break;
328
+ case 0x0007: /* 7, SensorRightBorder */
329
+ i = get2();
330
+ width += i;
331
+ imgdata.sizes.raw_inset_crops[0].cwidth =
332
+ i - imgdata.sizes.raw_inset_crops[0].cleft;
333
+ break;
334
+ case 0x0009: /* 9, CFAPattern */
335
+ if ((i = get2()))
336
+ filters = i;
337
+ break;
338
+ case 0x0011: /* 17, RedBalance */
339
+ case 0x0012: /* 18, BlueBalance */
340
+ if (tagtypeIs(LIBRAW_EXIFTAG_TYPE_SHORT) && len == 1)
341
+ cam_mul[(tag - 0x0011) * 2] = get2() / 256.0;
342
+ break;
343
+ case 0x0017: /* 23, ISO */
344
+ if (tagtypeIs(LIBRAW_EXIFTAG_TYPE_SHORT))
345
+ iso_speed = get2();
346
+ break;
347
+ case 0x0024: /* 36, WBRedLevel */
348
+ case 0x0025: /* 37, WBGreenLevel */
349
+ case 0x0026: /* 38, WBBlueLevel */
350
+ cam_mul[tag - 0x0024] = get2();
351
+ break;
352
+ case 0x0027: /* 39, WBInfo2 */
353
+ if ((i = get2()) > 0x100)
354
+ break;
355
+ for (c = 0; c < i; c++)
356
+ {
357
+ if ((j = get2()) < 0x100)
358
+ {
359
+ if(j >= 0) {
360
+ icWBC[j][0] = get2();
361
+ icWBC[j][1] = icWBC[j][3] = get2();
362
+ icWBC[j][2] = get2();
363
+ if (c == 1 && i > 6 && cam_mul[0] <= 0.001f)
364
+ for (int q = 0; q < 4; q++)
365
+ cam_mul[q] = icWBC[j][q];
366
+ }
367
+ }
368
+ else
369
+ fseek(ifp, 6, SEEK_CUR);
370
+ }
371
+ break;
372
+ case 0x002e: /* 46, JpgFromRaw */
373
+ if ((type != LIBRAW_EXIFTAG_TYPE_UNDEFINED) || (fgetc(ifp) != 0xff) || (fgetc(ifp) != 0xd8))
374
+ break;
375
+ thumb_offset = ftell(ifp) - 2;
376
+ thumb_length = len;
377
+ break;
378
+
379
+ case 0x0118: /* 280, Panasonic RW2 offset */
380
+ if (type != LIBRAW_EXIFTAG_TYPE_LONG)
381
+ break;
382
+ load_raw = &LibRaw::panasonic_load_raw;
383
+ load_flags = 0x2008;
384
+ case 0x0111: /* 273, StripOffset */
385
+ if (len > 1 && len < 16384)
386
+ {
387
+ off_t sav = ftell(ifp);
388
+ tiff_ifd[ifd].strip_offsets = (int *)calloc(len, sizeof(int));
389
+ tiff_ifd[ifd].strip_offsets_count = len;
390
+ for (int ii = 0; ii < (int)len; ii++)
391
+ tiff_ifd[ifd].strip_offsets[ii] = get4() + base;
392
+ fseek(ifp, sav, SEEK_SET); // restore position
393
+ }
394
+ /* fallthrough */
395
+ tiff_ifd[ifd].offset = get4() + base;
396
+ if (!tiff_ifd[ifd].bps && tiff_ifd[ifd].offset > 0)
397
+ {
398
+ fseek(ifp, tiff_ifd[ifd].offset, SEEK_SET);
399
+ if (ljpeg_start(&jh, 1))
400
+ {
401
+ tiff_ifd[ifd].comp = 6;
402
+ tiff_ifd[ifd].t_width = jh.wide;
403
+ tiff_ifd[ifd].t_height = jh.high;
404
+ tiff_ifd[ifd].bps = jh.bits;
405
+ tiff_ifd[ifd].samples = jh.clrs;
406
+ if (!(jh.sraw || (jh.clrs & 1)))
407
+ tiff_ifd[ifd].t_width *= jh.clrs;
408
+ if ((tiff_ifd[ifd].t_width > 4 * tiff_ifd[ifd].t_height) & ~jh.clrs)
409
+ {
410
+ tiff_ifd[ifd].t_width /= 2;
411
+ tiff_ifd[ifd].t_height *= 2;
412
+ }
413
+ i = order;
414
+ parse_tiff(tiff_ifd[ifd].offset + 12);
415
+ order = i;
416
+ }
417
+ }
418
+ break;
419
+ }
420
+
421
+ } /* processing of Panasonic-specific tags finished */
422
+
423
+ switch (tag)
424
+ { /* processing of general EXIF tags */
425
+ case 0xf000: /* 61440, Fuji HS10 table */
426
+ fseek(ifp, get4() + base, SEEK_SET);
427
+ parse_tiff_ifd(base);
428
+ break;
429
+ case 0x00fe: /* NewSubfileType */
430
+ tiff_ifd[ifd].newsubfiletype = getreal(type);
431
+ break;
432
+ case 0x0100: /* 256, ImageWidth */
433
+ case 0xf001: /* 61441, Fuji RAF RawImageFullWidth */
434
+ tiff_ifd[ifd].t_width = getint(type);
435
+ break;
436
+ case 0x0101: /* 257, ImageHeight */
437
+ case 0xf002: /* 61442, Fuji RAF RawImageFullHeight */
438
+ tiff_ifd[ifd].t_height = getint(type);
439
+ break;
440
+ case 0x0102: /* 258, BitsPerSample */
441
+ case 0xf003: /* 61443, Fuji RAF 0xf003 */
442
+ if(!tiff_ifd[ifd].samples || tag != 0x0102) // ??? already set by tag 0x115
443
+ tiff_ifd[ifd].samples = len & 7;
444
+ tiff_ifd[ifd].bps = getint(type);
445
+ if (tiff_bps < (unsigned)tiff_ifd[ifd].bps)
446
+ tiff_bps = tiff_ifd[ifd].bps;
447
+ break;
448
+ case 0xf006: /* 61446, Fuji RAF 0xf006 */
449
+ raw_height = 0;
450
+ if (tiff_ifd[ifd].bps > 12)
451
+ break;
452
+ load_raw = &LibRaw::packed_load_raw;
453
+ load_flags = get4() ? 24 : 80;
454
+ break;
455
+ case 0x0103: /* 259, Compression */
456
+ /*
457
+ 262 = Kodak 262
458
+ 32767 = Sony ARW Compressed
459
+ 32769 = Packed RAW
460
+ 32770 = Samsung SRW Compressed
461
+ 32772 = Samsung SRW Compressed 2
462
+ 32867 = Kodak KDC Compressed
463
+ 34713 = Nikon NEF Compressed
464
+ 65000 = Kodak DCR Compressed
465
+ 65535 = Pentax PEF Compressed
466
+ */
467
+ tiff_ifd[ifd].comp = getint(type);
468
+ break;
469
+ case 0x0106: /* 262, PhotometricInterpretation */
470
+ tiff_ifd[ifd].phint = get2();
471
+ break;
472
+ case 0x010e: /* 270, ImageDescription */
473
+ fread(desc, 512, 1, ifp);
474
+ break;
475
+ case 0x010f: /* 271, Make */
476
+ fgets(make, 64, ifp);
477
+ break;
478
+ case 0x0110: /* 272, Model */
479
+ if (!strncmp(make, "Hasselblad", 10) && model[0] &&
480
+ (imHassy.format != LIBRAW_HF_Imacon))
481
+ break;
482
+ fgets(model, 64, ifp);
483
+ break;
484
+ case 0x0116: // 278
485
+ tiff_ifd[ifd].rows_per_strip = getint(type);
486
+ break;
487
+ case 0x0112: /* 274, Orientation */
488
+ tiff_ifd[ifd].t_flip = "50132467"[get2() & 7] - '0';
489
+ break;
490
+ case 0x0115: /* 277, SamplesPerPixel */
491
+ tiff_ifd[ifd].samples = getint(type) & 7;
492
+ break;
493
+ case 0x0152: /* Extrasamples */
494
+ tiff_ifd[ifd].extrasamples = (getint(type) & 0xff) + 1024;
495
+ break;
496
+ case 0x0117: /* 279, StripByteCounts */
497
+ if (len > 1 && len < 16384)
498
+ {
499
+ off_t sav = ftell(ifp);
500
+ tiff_ifd[ifd].strip_byte_counts = (int *)calloc(len, sizeof(int));
501
+ tiff_ifd[ifd].strip_byte_counts_count = len;
502
+ for (int ii = 0; ii < (int)len; ii++)
503
+ tiff_ifd[ifd].strip_byte_counts[ii] = get4();
504
+ fseek(ifp, sav, SEEK_SET); // restore position
505
+ }
506
+ /* fallback */
507
+ case 0x0202: // 514
508
+ case 0xf008: // 61448
509
+ tiff_ifd[ifd].bytes = get4();
510
+ break;
511
+ case 0xf00e: // 61454, FujiFilm "As Shot"
512
+ FORC3 cam_mul[GRBG_2_RGBG(c)] = getint(type);
513
+ break;
514
+ case 0x0131: /* 305, Software */
515
+ fgets(software, 64, ifp);
516
+ if (!strncmp(software, "Adobe", 5) || !strncmp(software, "dcraw", 5) ||
517
+ !strncmp(software, "UFRaw", 5) || !strncmp(software, "Bibble", 6) ||
518
+ !strcmp(software, "Digital Photo Professional"))
519
+ is_raw = 0;
520
+ break;
521
+ case 0x0132: /* 306, DateTime */
522
+ get_timestamp(0);
523
+ break;
524
+ case 0x013b: /* 315, Artist */
525
+ fread(artist, 64, 1, ifp);
526
+ break;
527
+ case 0x013d: // 317
528
+ tiff_ifd[ifd].predictor = getint(type);
529
+ break;
530
+ case 0x0142: /* 322, TileWidth */
531
+ tiff_ifd[ifd].t_tile_width = getint(type);
532
+ break;
533
+ case 0x0143: /* 323, TileLength */
534
+ tiff_ifd[ifd].t_tile_length = getint(type);
535
+ break;
536
+ case 0x0144: /* 324, TileOffsets */
537
+ tiff_ifd[ifd].offset = len > 1 ? ftell(ifp) : get4();
538
+ if (len == 1)
539
+ tiff_ifd[ifd].t_tile_width = tiff_ifd[ifd].t_tile_length = 0;
540
+ if (len == 4)
541
+ {
542
+ load_raw = &LibRaw::sinar_4shot_load_raw;
543
+ is_raw = 5;
544
+ }
545
+ break;
546
+ case 0x0145: // 325
547
+ tiff_ifd[ifd].bytes = len > 1 ? ftell(ifp) : get4();
548
+ break;
549
+ case 0x014a: /* 330, SubIFDs */
550
+ if (!strcmp(model, "DSLR-A100") && tiff_ifd[ifd].t_width == 3872)
551
+ {
552
+ load_raw = &LibRaw::sony_arw_load_raw;
553
+ data_offset = get4() + base;
554
+ ifd++;
555
+ if (ifd >= int(sizeof tiff_ifd / sizeof tiff_ifd[0]))
556
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
557
+ break;
558
+ }
559
+ if (!strncmp(make, "Hasselblad", 10) &&
560
+ libraw_internal_data.unpacker_data.hasselblad_parser_flag)
561
+ {
562
+ fseek(ifp, ftell(ifp) + 4, SEEK_SET);
563
+ fseek(ifp, get4() + base, SEEK_SET);
564
+ parse_tiff_ifd(base);
565
+ break;
566
+ }
567
+ if (len > 1000)
568
+ len = 1000; /* 1000 SubIFDs is enough */
569
+ while (len--)
570
+ {
571
+ i = ftell(ifp);
572
+ fseek(ifp, get4() + base, SEEK_SET);
573
+ if (parse_tiff_ifd(base))
574
+ break;
575
+ fseek(ifp, i + 4, SEEK_SET);
576
+ }
577
+ break;
578
+ case 0x0153: // 339
579
+ tiff_ifd[ifd].sample_format = getint(type);
580
+ break;
581
+ case 0x0190: // 400
582
+ strcpy(make, "Sarnoff");
583
+ maximum = 0xfff;
584
+ break;
585
+ case 0x02bc: // 700
586
+ if ((tagtypeIs(LIBRAW_EXIFTAG_TYPE_BYTE) ||
587
+ tagtypeIs(LIBRAW_EXIFTAG_TYPE_ASCII) ||
588
+ tagtypeIs(LIBRAW_EXIFTAG_TYPE_SBYTE) ||
589
+ tagtypeIs(LIBRAW_EXIFTOOLTAGTYPE_binary)) &&
590
+ (len > 1) && (len < 5100000))
591
+ {
592
+ xmpdata = (char *)calloc(xmplen = len + 1,1);
593
+ unsigned br = fread(xmpdata,1, len, ifp);
594
+ xmpdata[br] = 0;
595
+ }
596
+ break;
597
+ case 0x7000:
598
+ imSony.SonyRawFileType = get2();
599
+ break;
600
+ case 0x7010: // 28688
601
+ FORC4 sony_curve[c + 1] = get2() >> 2 & 0xfff;
602
+ for (i = 0; i < 5; i++)
603
+ for (j = sony_curve[i] + 1; j <= (int)sony_curve[i + 1]; j++)
604
+ curve[j] = curve[j - 1] + (1 << i);
605
+ break;
606
+ case 0x7200: // 29184, Sony SR2Private
607
+ sony_offset = get4();
608
+ break;
609
+ case 0x7201: // 29185, Sony SR2Private
610
+ sony_length = get4();
611
+ break;
612
+ case 0x7221: // 29217, Sony SR2Private
613
+ sony_key = get4();
614
+ break;
615
+ case 0x7250: // 29264, Sony SR2Private
616
+ parse_minolta(ftell(ifp));
617
+ raw_width = 0;
618
+ break;
619
+ case 0x7303: // 29443, Sony SR2SubIFD
620
+ FORC4 cam_mul[GRBG_2_RGBG(c)] = get2();
621
+ break;
622
+ case 0x7313: // 29459, Sony SR2SubIFD
623
+ FORC4 cam_mul[RGGB_2_RGBG(c)] = get2();
624
+ break;
625
+ case 0x7310: // 29456, Sony SR2SubIFD
626
+ FORC4 cblack[RGGB_2_RGBG(c)] = get2();
627
+ i = cblack[3];
628
+ FORC3 if (i > (int)cblack[c]) i = cblack[c];
629
+ FORC4 cblack[c] -= i;
630
+ black = i;
631
+ break;
632
+ case 0x827d: /* 33405, Model2 */
633
+ /*
634
+ for Kodak ProBack 645 PB645x-yyyy 'x' is:
635
+ 'M' for Mamiya 645
636
+ 'C' for Contax 645
637
+ 'H' for Hasselblad H-series
638
+ */
639
+ fgets(model2, 64, ifp);
640
+ break;
641
+ case 0x828d: /* 33421, CFARepeatPatternDim */
642
+ if (get2() == 6 && get2() == 6)
643
+ tiff_ifd[ifd].t_filters = filters = 9;
644
+ break;
645
+ case 0x828e: /* 33422, CFAPattern */
646
+ if (filters == 9)
647
+ {
648
+ FORC(36)((char *)xtrans)[c] = fgetc(ifp) & 3;
649
+ break;
650
+ }
651
+ case 0xfd09: /* 64777, Kodak P-series */
652
+ if (len == 36)
653
+ {
654
+ tiff_ifd[ifd].t_filters = filters = 9;
655
+ colors = 3;
656
+ FORC(36)((char *)xtrans)[c] = fgetc(ifp) & 3;
657
+ }
658
+ else if (len > 0)
659
+ {
660
+ if ((plen = len) > 16)
661
+ plen = 16;
662
+ fread(cfa_pat, 1, plen, ifp);
663
+ for (colors = cfa = i = 0; i < (int)plen && colors < 4; i++)
664
+ {
665
+ if (cfa_pat[i] > 31)
666
+ continue; // Skip wrong data
667
+ colors += !(cfa & (1 << cfa_pat[i]));
668
+ cfa |= 1 << cfa_pat[i];
669
+ }
670
+ if (cfa == 070)
671
+ memcpy(cfa_pc, "\003\004\005", 3); /* CMY */
672
+ if (cfa == 072)
673
+ memcpy(cfa_pc, "\005\003\004\001", 4); /* GMCY */
674
+ goto guess_cfa_pc;
675
+ }
676
+ break;
677
+ case 0x8290: // 33424
678
+ case 0xfe00: // 65024
679
+ fseek(ifp, get4() + base, SEEK_SET);
680
+ parse_kodak_ifd(base);
681
+ break;
682
+ case 0x829a: /* 33434, ExposureTime */
683
+ tiff_ifd[ifd].t_shutter = shutter = getreal(type);
684
+ break;
685
+ case 0x829d: /* 33437, FNumber */
686
+ aperture = getreal(type);
687
+ break;
688
+ case 0x9400:
689
+ imCommon.exifAmbientTemperature = getreal(type);
690
+ if ((imCommon.CameraTemperature > -273.15f) &&
691
+ ((OlyID == OlyID_TG_5) || (OlyID == OlyID_TG_6)))
692
+ imCommon.CameraTemperature +=
693
+ imCommon.exifAmbientTemperature;
694
+ break;
695
+ case 0x9401:
696
+ imCommon.exifHumidity = getreal(type);
697
+ break;
698
+ case 0x9402:
699
+ imCommon.exifPressure = getreal(type);
700
+ break;
701
+ case 0x9403:
702
+ imCommon.exifWaterDepth = getreal(type);
703
+ break;
704
+ case 0x9404:
705
+ imCommon.exifAcceleration = getreal(type);
706
+ break;
707
+ case 0x9405:
708
+ imCommon.exifCameraElevationAngle = getreal(type);
709
+ break;
710
+ case 0xa405: // FocalLengthIn35mmFormat
711
+ imgdata.lens.FocalLengthIn35mmFormat = get2();
712
+ break;
713
+ case 0xa431: // BodySerialNumber
714
+ case 0xc62f:
715
+ stmread(imgdata.shootinginfo.BodySerial, len, ifp);
716
+ break;
717
+ case 0xa432: // LensInfo, 42034dec, Lens Specification per EXIF standard
718
+ imgdata.lens.MinFocal = getreal(type);
719
+ imgdata.lens.MaxFocal = getreal(type);
720
+ imgdata.lens.MaxAp4MinFocal = getreal(type);
721
+ imgdata.lens.MaxAp4MaxFocal = getreal(type);
722
+ break;
723
+ case 0xa435: // LensSerialNumber
724
+ stmread(imgdata.lens.LensSerial, len, ifp);
725
+ break;
726
+ case 0xc630: // DNG LensInfo, Lens Specification per EXIF standard
727
+ imgdata.lens.MinFocal = getreal(type);
728
+ imgdata.lens.MaxFocal = getreal(type);
729
+ imgdata.lens.MaxAp4MinFocal = getreal(type);
730
+ imgdata.lens.MaxAp4MaxFocal = getreal(type);
731
+ break;
732
+ case 0xa420: /* 42016, ImageUniqueID */
733
+ stmread(imgdata.color.ImageUniqueID, len, ifp);
734
+ break;
735
+ case 0xc65d: /* 50781, RawDataUniqueID */
736
+ imgdata.color.RawDataUniqueID[16] = 0;
737
+ fread(imgdata.color.RawDataUniqueID, 1, 16, ifp);
738
+ break;
739
+ case 0xa433: // LensMake
740
+ stmread(imgdata.lens.LensMake, len, ifp);
741
+ break;
742
+ case 0xa434: // LensModel
743
+ stmread(imgdata.lens.Lens, len, ifp);
744
+ if (!strncmp(imgdata.lens.Lens, "----", 4))
745
+ imgdata.lens.Lens[0] = 0;
746
+ break;
747
+ case 0x9205:
748
+ imgdata.lens.EXIF_MaxAp = libraw_powf64l(2.0f, (getreal(type) / 2.0f));
749
+ break;
750
+ case 0x8602: /* 34306, Leaf white balance */
751
+ FORC4
752
+ {
753
+ int q = get2();
754
+ if (q)
755
+ cam_mul[GRGB_2_RGBG(c)] = 4096.0 / q;
756
+ }
757
+ break;
758
+ case 0x8603: /* 34307, Leaf CatchLight color matrix */
759
+ fread(software, 1, 7, ifp);
760
+ if (strncmp(software, "MATRIX", 6))
761
+ break;
762
+ colors = 4;
763
+ for (raw_color = i = 0; i < 3; i++)
764
+ {
765
+ FORC4 fscanf(ifp, "%f", &rgb_cam[i][GRGB_2_RGBG(c)]);
766
+ if (!use_camera_wb)
767
+ continue;
768
+ num = 0;
769
+ FORC4 num += rgb_cam[i][c];
770
+ FORC4 rgb_cam[i][c] /= MAX(1, num);
771
+ }
772
+ break;
773
+ case 0x8606: /* 34310, Leaf metadata */
774
+ parse_mos(ftell(ifp));
775
+ case 0x85ff: // 34303
776
+ strcpy(make, "Leaf");
777
+ break;
778
+ case 0x8769: /* 34665, EXIF tag */
779
+ fseek(ifp, get4() + base, SEEK_SET);
780
+ parse_exif(base);
781
+ break;
782
+ case 0x8825: /* 34853, GPSInfo tag */
783
+ {
784
+ unsigned pos;
785
+ fseek(ifp, pos = (get4() + base), SEEK_SET);
786
+ parse_gps(base);
787
+ fseek(ifp, pos, SEEK_SET);
788
+ parse_gps_libraw(base);
789
+ }
790
+ break;
791
+ case 0x8773: /* 34675, InterColorProfile */
792
+ case 0xc68f: /* 50831, AsShotICCProfile */
793
+ profile_offset = ftell(ifp);
794
+ profile_length = len;
795
+ break;
796
+ case 0x9102: /* 37122, CompressedBitsPerPixel */
797
+ kodak_cbpp = get4();
798
+ break;
799
+ case 0x920a: /* 37386, FocalLength */
800
+ focal_len = getreal(type);
801
+ break;
802
+ case 0x9211: /* 37393, ImageNumber */
803
+ shot_order = getint(type);
804
+ break;
805
+ case 0x9215: /* 37397, ExposureIndex */
806
+ imCommon.exifExposureIndex = getreal(type);
807
+ break;
808
+ case 0x9218: /* 37400, old Kodak KDC tag */
809
+ for (raw_color = i = 0; i < 3; i++)
810
+ {
811
+ getreal(type);
812
+ FORC3 rgb_cam[i][c] = getreal(type);
813
+ }
814
+ break;
815
+ case 0xa010: // 40976
816
+ strip_offset = get4();
817
+ switch (tiff_ifd[ifd].comp)
818
+ {
819
+ case 0x8002: // 32770
820
+ load_raw = &LibRaw::samsung_load_raw;
821
+ break;
822
+ case 0x8004: // 32772
823
+ load_raw = &LibRaw::samsung2_load_raw;
824
+ break;
825
+ case 0x8005: // 32773
826
+ load_raw = &LibRaw::samsung3_load_raw;
827
+ break;
828
+ }
829
+ break;
830
+ case 0xb4c3: /* 46275, Imacon tags */
831
+ imHassy.format = LIBRAW_HF_Imacon;
832
+ strcpy(make, "Imacon");
833
+ data_offset = ftell(ifp);
834
+ ima_len = len;
835
+ break;
836
+ case 0xb4c7: // 46279
837
+ if (!ima_len)
838
+ break;
839
+ fseek(ifp, 38, SEEK_CUR);
840
+ case 0xb4c2: // 46274
841
+ fseek(ifp, 40, SEEK_CUR);
842
+ raw_width = get4();
843
+ raw_height = get4();
844
+ left_margin = get4() & 7;
845
+ width = raw_width - left_margin - (get4() & 7);
846
+ top_margin = get4() & 7;
847
+ height = raw_height - top_margin - (get4() & 7);
848
+ if (raw_width == 7262 && ima_len == 234317952)
849
+ {
850
+ height = 5412;
851
+ width = 7216;
852
+ left_margin = 7;
853
+ filters = 0;
854
+ }
855
+ else if (raw_width == 7262)
856
+ {
857
+ height = 5444;
858
+ width = 7244;
859
+ left_margin = 7;
860
+ }
861
+ fseek(ifp, 52, SEEK_CUR);
862
+ FORC3 cam_mul[c] = getreal(LIBRAW_EXIFTAG_TYPE_FLOAT);
863
+ fseek(ifp, 114, SEEK_CUR);
864
+ flip = (get2() >> 7) * 90;
865
+ if (width * (height * 6l) == ima_len)
866
+ {
867
+ if (flip % 180 == 90)
868
+ SWAP(width, height);
869
+ raw_width = width;
870
+ raw_height = height;
871
+ left_margin = top_margin = filters = flip = 0;
872
+ }
873
+ c = unsigned(height) * unsigned(width) / 1000000;
874
+ if (c == 32)
875
+ c--;
876
+ sprintf(model, "Ixpress %d-Mp", c);
877
+ load_raw = &LibRaw::imacon_full_load_raw;
878
+ if (filters)
879
+ {
880
+ if (left_margin & 1)
881
+ filters = 0x61616161;
882
+ load_raw = &LibRaw::unpacked_load_raw;
883
+ }
884
+ maximum = 0xffff;
885
+ break;
886
+ case 0xc516: /* 50454, Sinar tag */
887
+ case 0xc517: // 50455
888
+ if (len < 1 || len > 2560000 || !(cbuf = (char *)malloc(len)))
889
+ break;
890
+ if (fread(cbuf, 1, len, ifp) != (int)len)
891
+ throw LIBRAW_EXCEPTION_IO_CORRUPT; // cbuf to be free'ed in recycle
892
+ cbuf[len - 1] = 0;
893
+ for (cp = cbuf - 1; cp && cp < cbuf + len; cp = strchr(cp, '\n'))
894
+ if (!strncmp(++cp, "Neutral ", 8))
895
+ sscanf(cp + 8, "%f %f %f", cam_mul, cam_mul + 1, cam_mul + 2);
896
+ free(cbuf);
897
+ break;
898
+ case 0xc51a: // 50458
899
+ if (!make[0])
900
+ strcpy(make, "Hasselblad");
901
+ break;
902
+ case 0xc51b: /* 50459, Hasselblad tag */
903
+ if (!libraw_internal_data.unpacker_data.hasselblad_parser_flag)
904
+ {
905
+ libraw_internal_data.unpacker_data.hasselblad_parser_flag = 1;
906
+ i = order;
907
+ j = ftell(ifp);
908
+ c = tiff_nifds;
909
+ order = get2();
910
+ fseek(ifp, j + (get2(), get4()), SEEK_SET);
911
+ parse_tiff_ifd(j);
912
+ maximum = 0xffff;
913
+ tiff_nifds = c;
914
+ order = i;
915
+ break;
916
+ }
917
+ case 0xc612: /* 50706, DNGVersion */
918
+ FORC4 dng_version = (dng_version << 8) + fgetc(ifp);
919
+ if (!make[0])
920
+ strcpy(make, "DNG");
921
+ is_raw = 1;
922
+ break;
923
+ case 0xc614: /* 50708, UniqueCameraModel */
924
+ stmread(imgdata.color.UniqueCameraModel, len, ifp);
925
+ if (model[0])
926
+ break;
927
+ strncpy(make, imgdata.color.UniqueCameraModel,
928
+ MIN(len, sizeof(imgdata.color.UniqueCameraModel)));
929
+ if ((cp = strchr(make, ' ')))
930
+ {
931
+ strcpy(model, cp + 1);
932
+ *cp = 0;
933
+ }
934
+ break;
935
+ case 0xc616: /* 50710, CFAPlaneColor */
936
+ if (filters == 9)
937
+ break;
938
+ if (len > 4)
939
+ len = 4;
940
+ colors = len;
941
+ fread(cfa_pc, 1, colors, ifp);
942
+ guess_cfa_pc:
943
+ FORCC tab[cfa_pc[c]] = c;
944
+ cdesc[c] = 0;
945
+ for (i = 16; i--;)
946
+ filters = filters << 2 | tab[cfa_pat[i % plen]];
947
+ filters -= !filters;
948
+ tiff_ifd[ifd].t_filters = filters;
949
+ break;
950
+ case 0xc617: /* 50711, CFALayout */
951
+ if (get2() == 2)
952
+ tiff_ifd[ifd].t_fuji_width = fuji_width = 1;
953
+ break;
954
+ case 0x0123: // 291
955
+ case 0xc618: /* 50712, LinearizationTable */
956
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_LINTABLE;
957
+ tiff_ifd[ifd].lineartable_offset = ftell(ifp);
958
+ tiff_ifd[ifd].lineartable_len = len;
959
+ linear_table(len);
960
+ break;
961
+ case 0xc619: /* 50713, BlackLevelRepeatDim */
962
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
963
+ tiff_ifd[ifd].dng_levels.dng_fcblack[4] =
964
+ tiff_ifd[ifd].dng_levels.dng_cblack[4] = cblack[4] = get2();
965
+ tiff_ifd[ifd].dng_levels.dng_fcblack[5] =
966
+ tiff_ifd[ifd].dng_levels.dng_cblack[5] = cblack[5] = get2();
967
+ if (cblack[4] * cblack[5] >
968
+ (LIBRAW_CBLACK_SIZE -
969
+ 7)) // Use last cblack item as DNG black level count
970
+ tiff_ifd[ifd].dng_levels.dng_fcblack[4] =
971
+ tiff_ifd[ifd].dng_levels.dng_fcblack[5] =
972
+ tiff_ifd[ifd].dng_levels.dng_cblack[4] =
973
+ tiff_ifd[ifd].dng_levels.dng_cblack[5] = cblack[4] =
974
+ cblack[5] = 1;
975
+ break;
976
+
977
+ case 0xf00c:
978
+ if (imFuji.RAFDataGeneration != 4096)
979
+ {
980
+ unsigned fwb[4];
981
+ FORC4 fwb[c] = get4();
982
+ if (fwb[3] < 0x100)
983
+ {
984
+ FORC3 icWBC[fwb[3]][GRBG_2_RGBG(c)] = fwb[c];
985
+ icWBC[fwb[3]][3] = icWBC[fwb[3]][1];
986
+ if ((fwb[3] == 17) && // Tungsten WB
987
+ (libraw_internal_data.unpacker_data.lenRAFData > 3) &&
988
+ (libraw_internal_data.unpacker_data.lenRAFData < 10240000))
989
+ {
990
+ INT64 f_save = ftell(ifp);
991
+ rafdata = (ushort *)calloc(
992
+ sizeof(ushort) * libraw_internal_data.unpacker_data.lenRAFData,1);
993
+ fseek(ifp, libraw_internal_data.unpacker_data.posRAFData, SEEK_SET);
994
+ fread(rafdata, sizeof(ushort),
995
+ libraw_internal_data.unpacker_data.lenRAFData, ifp);
996
+ fseek(ifp, f_save, SEEK_SET);
997
+
998
+ uchar *PrivateMknBuf = (uchar *)rafdata;
999
+ int PrivateMknLength = libraw_internal_data.unpacker_data.lenRAFData
1000
+ << 1;
1001
+ for (int pos = 0; pos < PrivateMknLength - 16; pos++)
1002
+ {
1003
+ if (!memcmp(PrivateMknBuf + pos, "TSNERDTS", 8)) // STDRENST
1004
+ {
1005
+ imFuji.isTSNERDTS = 1;
1006
+ break;
1007
+ }
1008
+ }
1009
+ int fj; // 31? (fj<<1)-0x3c : 34? (fj<<1)-0x4e : undef
1010
+ int is34 = 0;
1011
+ if ((imFuji.RAFDataVersion == 0x0260) || // X-Pro3, GFX 100S
1012
+ (imFuji.RAFDataVersion == 0x0261) || // X100V, GFX 50S II
1013
+ (imFuji.RAFDataVersion == 0x0262) || // X-T4
1014
+ (imFuji.RAFDataVersion == 0x0263) || // X-H2S
1015
+ (imFuji.RAFDataVersion == 0x0264) || // X-S10
1016
+ (imFuji.RAFDataVersion == 0x0265) || // X-E4
1017
+ (imFuji.RAFDataVersion == 0x0266) || // X-T30 II
1018
+ !strcmp(model, "X-Pro3") ||
1019
+ !strcmp(model, "GFX 100S") ||
1020
+ !strcmp(model, "GFX100S") ||
1021
+ !strcmp(model, "GFX 50S II") ||
1022
+ !strcmp(model, "GFX50S II") ||
1023
+ !strcmp(model, "X100V") ||
1024
+ !strcmp(model, "X-T4") ||
1025
+ !strcmp(model, "X-H2S") ||
1026
+ !strcmp(model, "X-E4") ||
1027
+ !strcmp(model, "X-T30 II") ||
1028
+ !strcmp(model, "X-S10"))
1029
+ // is34 cameras have 34 CCT values instead of 31, manual still claims 2500 to 10000 K
1030
+ // aligned 3000 K to Incandescent, as it is usual w/ other Fujifilm cameras
1031
+ is34 = 1;
1032
+
1033
+ for (int fi = 0;
1034
+ fi < int(libraw_internal_data.unpacker_data.lenRAFData - 3); fi++) // looking for Tungsten WB
1035
+ {
1036
+ if ((fwb[0] == rafdata[fi]) && (fwb[1] == rafdata[fi + 1]) &&
1037
+ (fwb[2] == rafdata[fi + 2])) // found Tungsten WB
1038
+ {
1039
+ if (fi > 14 && rafdata[fi - 15] !=
1040
+ fwb[0]) // 15 is offset of Tungsten WB from the first
1041
+ // preset, Fine Weather WB
1042
+ continue;
1043
+ if (fi >= 15)
1044
+ {
1045
+ for (int wb_ind = 0, ofst = fi - 15; wb_ind < (int)Fuji_wb_list1.size();
1046
+ wb_ind++, ofst += 3)
1047
+ {
1048
+ icWBC[Fuji_wb_list1[wb_ind]][1] =
1049
+ icWBC[Fuji_wb_list1[wb_ind]][3] = rafdata[ofst];
1050
+ icWBC[Fuji_wb_list1[wb_ind]][0] = rafdata[ofst + 1];
1051
+ icWBC[Fuji_wb_list1[wb_ind]][2] = rafdata[ofst + 2];
1052
+ }
1053
+ }
1054
+
1055
+ if (is34)
1056
+ fi += 24;
1057
+ fi += 96;
1058
+ for (fj = fi; fj < (fi + 15); fj += 3) // looking for the end of the WB table
1059
+ {
1060
+ if (fj > libraw_internal_data.unpacker_data.lenRAFData - 3)
1061
+ break;
1062
+ if (rafdata[fj] != rafdata[fi])
1063
+ {
1064
+ fj -= 93;
1065
+ if (is34)
1066
+ fj -= 9;
1067
+ //printf ("wb start in DNG: 0x%04x\n", fj*2-0x4e);
1068
+ for (int iCCT = 0, ofst = fj; iCCT < 31
1069
+ && ofst < libraw_internal_data.unpacker_data.lenRAFData - 3;
1070
+ iCCT++, ofst += 3)
1071
+ {
1072
+ icWBCCTC[iCCT][0] = FujiCCT_K[iCCT];
1073
+ icWBCCTC[iCCT][1] = rafdata[ofst + 1];
1074
+ icWBCCTC[iCCT][2] = icWBCCTC[iCCT][4] = rafdata[ofst];
1075
+ icWBCCTC[iCCT][3] = rafdata[ofst + 2];
1076
+ }
1077
+ break;
1078
+ }
1079
+ }
1080
+ free(rafdata);
1081
+ break;
1082
+ }
1083
+ }
1084
+ }
1085
+ }
1086
+ FORC4 fwb[c] = get4();
1087
+ if (fwb[3] < 0x100) {
1088
+ FORC3 icWBC[fwb[3]][GRBG_2_RGBG(c)] = fwb[c];
1089
+ icWBC[fwb[3]][3] = icWBC[fwb[3]][1];
1090
+ }
1091
+ }
1092
+ break;
1093
+ case 0xf00d:
1094
+ if (imFuji.RAFDataGeneration != 4096)
1095
+ {
1096
+ FORC3 icWBC[LIBRAW_WBI_Auto][GRBG_2_RGBG(c)] = getint(type);
1097
+ icWBC[LIBRAW_WBI_Auto][3] = icWBC[LIBRAW_WBI_Auto][1];
1098
+ }
1099
+ break;
1100
+ case 0xc615: /* 50709, LocalizedCameraModel */
1101
+ stmread(imgdata.color.LocalizedCameraModel, len, ifp);
1102
+ break;
1103
+ case 0xf00a: // 61450
1104
+ cblack[4] = cblack[5] = MIN(sqrt((double)len), 64);
1105
+ case 0xc61a: /* 50714, BlackLevel */
1106
+ if (tiff_ifd[ifd].samples > 1 &&
1107
+ tiff_ifd[ifd].samples == (int)len) // LinearDNG, per-channel black
1108
+ {
1109
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
1110
+ for (i = 0; i < 4 && i < (int)len; i++)
1111
+ {
1112
+ tiff_ifd[ifd].dng_levels.dng_fcblack[i] = getreal(type);
1113
+ tiff_ifd[ifd].dng_levels.dng_cblack[i] = cblack[i] =
1114
+ tiff_ifd[ifd].dng_levels.dng_fcblack[i] + 0.5;
1115
+ }
1116
+ // Record len in last cblack field
1117
+ tiff_ifd[ifd].dng_levels.dng_cblack[LIBRAW_CBLACK_SIZE - 1] = len;
1118
+
1119
+ tiff_ifd[ifd].dng_levels.dng_fblack =
1120
+ tiff_ifd[ifd].dng_levels.dng_black = black = 0;
1121
+ }
1122
+ else if (tiff_ifd[ifd].samples > 1 // Linear DNG w repeat dim
1123
+ && (tiff_ifd[ifd].samples * cblack[4] * cblack[5] == len))
1124
+ {
1125
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
1126
+ tiff_ifd[ifd].dng_levels.dng_cblack[LIBRAW_CBLACK_SIZE - 1] =
1127
+ cblack[LIBRAW_CBLACK_SIZE - 1] = len;
1128
+ for (i = 0; i < (int)len && i < LIBRAW_CBLACK_SIZE - 7; i++)
1129
+ {
1130
+ tiff_ifd[ifd].dng_levels.dng_fcblack[i + 6] = getreal(type);
1131
+ tiff_ifd[ifd].dng_levels.dng_cblack[i + 6] = cblack[i + 6] =
1132
+ tiff_ifd[ifd].dng_levels.dng_fcblack[i + 6] + 0.5;
1133
+ }
1134
+ }
1135
+ else if ((cblack[4] * cblack[5] < 2) && len == 1)
1136
+ {
1137
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
1138
+ tiff_ifd[ifd].dng_levels.dng_fblack = getreal(type);
1139
+ black = tiff_ifd[ifd].dng_levels.dng_black =
1140
+ tiff_ifd[ifd].dng_levels.dng_fblack;
1141
+ }
1142
+ else if (cblack[4] * cblack[5] <= len)
1143
+ {
1144
+ FORC(int(cblack[4] * cblack[5]))
1145
+ {
1146
+ tiff_ifd[ifd].dng_levels.dng_fcblack[6 + c] = getreal(type);
1147
+ cblack[6 + c] = tiff_ifd[ifd].dng_levels.dng_fcblack[6 + c];
1148
+ }
1149
+ black = 0;
1150
+ FORC4
1151
+ cblack[c] = 0;
1152
+
1153
+ if (tag == 0xc61a)
1154
+ {
1155
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
1156
+ FORC(int(cblack[4] * cblack[5]))
1157
+ tiff_ifd[ifd].dng_levels.dng_cblack[6 + c] = cblack[6 + c];
1158
+ tiff_ifd[ifd].dng_levels.dng_fblack = 0;
1159
+ tiff_ifd[ifd].dng_levels.dng_black = 0;
1160
+ FORC4
1161
+ tiff_ifd[ifd].dng_levels.dng_fcblack[c] =
1162
+ tiff_ifd[ifd].dng_levels.dng_cblack[c] = 0;
1163
+ }
1164
+ }
1165
+ break;
1166
+ case 0xc61b: /* 50715, BlackLevelDeltaH */
1167
+ case 0xc61c: /* 50716, BlackLevelDeltaV */
1168
+ for (num = i = 0; i < (int)len && i < 65536; i++)
1169
+ num += getreal(type);
1170
+ if (len > 0)
1171
+ {
1172
+ black += num / len + 0.5;
1173
+ tiff_ifd[ifd].dng_levels.dng_fblack += num / float(len);
1174
+ tiff_ifd[ifd].dng_levels.dng_black += num / len + 0.5;
1175
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BLACK;
1176
+ }
1177
+ break;
1178
+ case 0xc61d: /* 50717, WhiteLevel */
1179
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_WHITE;
1180
+ tiff_ifd[ifd].dng_levels.dng_whitelevel[0] = maximum = getint(type);
1181
+ if (tiff_ifd[ifd].samples > 1) // Linear DNG case
1182
+ for (i = 1; i < 4 && i < (int)len; i++)
1183
+ tiff_ifd[ifd].dng_levels.dng_whitelevel[i] = getint(type);
1184
+ break;
1185
+ case 0xc61e: /* DefaultScale */
1186
+ {
1187
+ float q1 = getreal(type);
1188
+ float q2 = getreal(type);
1189
+ if (q1 > 0.00001f && q2 > 0.00001f)
1190
+ {
1191
+ pixel_aspect = q1 / q2;
1192
+ if (pixel_aspect > 0.995 && pixel_aspect < 1.005)
1193
+ pixel_aspect = 1.0;
1194
+ }
1195
+ }
1196
+ break;
1197
+ case 0xc61f: /* 50719, DefaultCropOrigin */
1198
+ if (len == 2)
1199
+ {
1200
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_CROPORIGIN;
1201
+ tiff_ifd[ifd].dng_levels.default_crop[0] = getreal(type);
1202
+ tiff_ifd[ifd].dng_levels.default_crop[1] = getreal(type);
1203
+ if (!strncasecmp(make, "SONY", 4))
1204
+ {
1205
+ imgdata.sizes.raw_inset_crops[0].cleft =
1206
+ tiff_ifd[ifd].dng_levels.default_crop[0];
1207
+ imgdata.sizes.raw_inset_crops[0].ctop =
1208
+ tiff_ifd[ifd].dng_levels.default_crop[1];
1209
+ }
1210
+ }
1211
+ break;
1212
+
1213
+ case 0xc620: /* 50720, DefaultCropSize */
1214
+ if (len == 2)
1215
+ {
1216
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_CROPSIZE;
1217
+ tiff_ifd[ifd].dng_levels.default_crop[2] = getreal(type);
1218
+ tiff_ifd[ifd].dng_levels.default_crop[3] = getreal(type);
1219
+ if (!strncasecmp(make, "SONY", 4))
1220
+ {
1221
+ imgdata.sizes.raw_inset_crops[0].cwidth =
1222
+ tiff_ifd[ifd].dng_levels.default_crop[2];
1223
+ imgdata.sizes.raw_inset_crops[0].cheight =
1224
+ tiff_ifd[ifd].dng_levels.default_crop[3];
1225
+ }
1226
+ }
1227
+ break;
1228
+
1229
+ case 0xc7b5: /* 51125 DefaultUserCrop */
1230
+ if (len == 4)
1231
+ {
1232
+ int cnt = 0;
1233
+ FORC4
1234
+ {
1235
+ float v = getreal(type);
1236
+ if (v >= 0.f && v <= 1.f)
1237
+ {
1238
+ tiff_ifd[ifd].dng_levels.user_crop[c] = v;
1239
+ cnt++;
1240
+ }
1241
+ }
1242
+ if(cnt == 4 // valid values
1243
+ && tiff_ifd[ifd].dng_levels.user_crop[0] < tiff_ifd[ifd].dng_levels.user_crop[2] // top < bottom
1244
+ && tiff_ifd[ifd].dng_levels.user_crop[1] < tiff_ifd[ifd].dng_levels.user_crop[3] // left < right
1245
+ )
1246
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_USERCROP;
1247
+ }
1248
+ break;
1249
+ case 0x74c7:
1250
+ if ((len == 2) && !strncasecmp(make, "SONY", 4))
1251
+ {
1252
+ imgdata.sizes.raw_inset_crops[0].cleft = get4();
1253
+ imgdata.sizes.raw_inset_crops[0].ctop = get4();
1254
+ }
1255
+ break;
1256
+
1257
+ case 0x74c8:
1258
+ if ((len == 2) && !strncasecmp(make, "SONY", 4))
1259
+ {
1260
+ imgdata.sizes.raw_inset_crops[0].cwidth = get4();
1261
+ imgdata.sizes.raw_inset_crops[0].cheight = get4();
1262
+ }
1263
+ break;
1264
+
1265
+ case 0xc65a: // 50778
1266
+ tiff_ifd[ifd].dng_color[0].illuminant = get2();
1267
+ tiff_ifd[ifd].dng_color[0].parsedfields |= LIBRAW_DNGFM_ILLUMINANT;
1268
+ break;
1269
+ case 0xc65b: // 50779
1270
+ tiff_ifd[ifd].dng_color[1].illuminant = get2();
1271
+ tiff_ifd[ifd].dng_color[1].parsedfields |= LIBRAW_DNGFM_ILLUMINANT;
1272
+ break;
1273
+
1274
+ case 0xc621: /* 50721, ColorMatrix1 */
1275
+ case 0xc622: /* 50722, ColorMatrix2 */
1276
+ {
1277
+ int chan = (len == 9) ? 3 : (len == 12 ? 4 : 0);
1278
+ i = tag == 0xc621 ? 0 : 1;
1279
+ if (chan)
1280
+ {
1281
+ tiff_ifd[ifd].dng_color[i].parsedfields |= LIBRAW_DNGFM_COLORMATRIX;
1282
+ imHassy.nIFD_CM[i] = ifd;
1283
+ }
1284
+ FORC(chan) for (j = 0; j < 3; j++)
1285
+ {
1286
+ tiff_ifd[ifd].dng_color[i].colormatrix[c][j] = cm[c][j] = getreal(type);
1287
+ }
1288
+ use_cm = 1;
1289
+ }
1290
+ break;
1291
+
1292
+ case 0xc714: /* ForwardMatrix1 */
1293
+ case 0xc715: /* ForwardMatrix2 */
1294
+ {
1295
+ int chan = (len == 9) ? 3 : (len == 12 ? 4 : 0);
1296
+ i = tag == 0xc714 ? 0 : 1;
1297
+ if (chan)
1298
+ tiff_ifd[ifd].dng_color[i].parsedfields |= LIBRAW_DNGFM_FORWARDMATRIX;
1299
+ for (j = 0; j < 3; j++)
1300
+ FORC(chan)
1301
+ {
1302
+ tiff_ifd[ifd].dng_color[i].forwardmatrix[j][c] = fm[j][c] =
1303
+ getreal(type);
1304
+ }
1305
+ }
1306
+ break;
1307
+
1308
+ case 0xc623: /* 50723, CameraCalibration1 */
1309
+ case 0xc624: /* 50724, CameraCalibration2 */
1310
+ {
1311
+ int chan = (len == 9) ? 3 : (len == 16 ? 4 : 0);
1312
+ j = tag == 0xc623 ? 0 : 1;
1313
+ if (chan)
1314
+ tiff_ifd[ifd].dng_color[j].parsedfields |= LIBRAW_DNGFM_CALIBRATION;
1315
+ for (i = 0; i < chan; i++)
1316
+ FORC(chan)
1317
+ {
1318
+ tiff_ifd[ifd].dng_color[j].calibration[i][c] = cc[i][c] =
1319
+ getreal(type);
1320
+ }
1321
+ }
1322
+ break;
1323
+ case 0xc627: /* 50727, AnalogBalance */
1324
+ if (len >= 3)
1325
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_ANALOGBALANCE;
1326
+ for (c = 0; c < (int)len && c < 4; c++)
1327
+ {
1328
+ tiff_ifd[ifd].dng_levels.analogbalance[c] = ab[c] = getreal(type);
1329
+ }
1330
+ break;
1331
+ case 0xc628: /* 50728, AsShotNeutral */
1332
+ if (len >= 3)
1333
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_ASSHOTNEUTRAL;
1334
+ for (c = 0; c < (int)len && c < 4; c++)
1335
+ tiff_ifd[ifd].dng_levels.asshotneutral[c] = asn[c] = getreal(type);
1336
+ break;
1337
+ case 0xc629: /* 50729, AsShotWhiteXY */
1338
+ xyz[0] = getreal(type);
1339
+ xyz[1] = getreal(type);
1340
+ xyz[2] = 1 - xyz[0] - xyz[1];
1341
+ FORC3 xyz[c] /= LibRaw_constants::d65_white[c];
1342
+ break;
1343
+ case 0xc62a: /* DNG: 50730 BaselineExposure */
1344
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_BASELINEEXPOSURE;
1345
+ tiff_ifd[ifd].dng_levels.baseline_exposure = getreal(type);
1346
+ break;
1347
+ case 0xc62e: /* DNG: 50734 LinearResponseLimit */
1348
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_LINEARRESPONSELIMIT;
1349
+ tiff_ifd[ifd].dng_levels.LinearResponseLimit = getreal(type);
1350
+ break;
1351
+
1352
+ case 0xc634: /* 50740 : DNG Adobe, DNG Pentax, Sony SR2, DNG Private */
1353
+ {
1354
+ char mbuf[64];
1355
+ INT64 curr_pos, start_pos = ftell(ifp);
1356
+ unsigned MakN_order, m_sorder = order;
1357
+ unsigned MakN_length;
1358
+ unsigned pos_in_original_raw;
1359
+ fread(mbuf, 1, 6, ifp);
1360
+
1361
+ if (!strcmp(mbuf, "Adobe"))
1362
+ {
1363
+ order = 0x4d4d; // Adobe header is always in "MM" / big endian
1364
+ curr_pos = start_pos + 6;
1365
+ while (curr_pos + 8 - start_pos <= len)
1366
+ {
1367
+ fread(mbuf, 1, 4, ifp);
1368
+ curr_pos += 8;
1369
+
1370
+ if (!strncmp(mbuf, "Pano", 4))
1371
+ { // PanasonicRaw, yes, they use "Pano" as signature
1372
+ parseAdobePanoMakernote();
1373
+ }
1374
+
1375
+ if (!strncmp(mbuf, "MakN", 4))
1376
+ {
1377
+ MakN_length = get4();
1378
+ MakN_order = get2();
1379
+ pos_in_original_raw = get4();
1380
+ order = MakN_order;
1381
+
1382
+ INT64 save_pos = ifp->tell();
1383
+ parse_makernote_0xc634(curr_pos + 6 - pos_in_original_raw, 0,
1384
+ AdobeDNG);
1385
+
1386
+ curr_pos = save_pos + MakN_length - 6;
1387
+ fseek(ifp, curr_pos, SEEK_SET);
1388
+
1389
+ fread(mbuf, 1, 4, ifp);
1390
+ curr_pos += 8;
1391
+
1392
+ if (!strncmp(mbuf, "Pano ", 4))
1393
+ {
1394
+ parseAdobePanoMakernote();
1395
+ }
1396
+
1397
+ if (!strncmp(mbuf, "RAF ", 4))
1398
+ { // Fujifilm Raw, AdobeRAF
1399
+ parseAdobeRAFMakernote();
1400
+ }
1401
+
1402
+ if (!strncmp(mbuf, "SR2 ", 4))
1403
+ {
1404
+ order = 0x4d4d;
1405
+ MakN_length = get4();
1406
+ MakN_order = get2();
1407
+ pos_in_original_raw = get4();
1408
+ order = MakN_order;
1409
+
1410
+ unsigned *buf_SR2;
1411
+ unsigned SR2SubIFDOffset = 0;
1412
+ unsigned SR2SubIFDLength = 0;
1413
+ unsigned SR2SubIFDKey = 0;
1414
+ {
1415
+ int _base = curr_pos + 6 - pos_in_original_raw;
1416
+ unsigned _entries, _tag, _type, _len, _save;
1417
+ _entries = get2();
1418
+ while (_entries--)
1419
+ {
1420
+ tiff_get(_base, &_tag, &_type, &_len, &_save);
1421
+
1422
+ if (_tag == 0x7200)
1423
+ {
1424
+ SR2SubIFDOffset = get4();
1425
+ }
1426
+ else if (_tag == 0x7201)
1427
+ {
1428
+ SR2SubIFDLength = get4();
1429
+ }
1430
+ else if (_tag == 0x7221)
1431
+ {
1432
+ SR2SubIFDKey = get4();
1433
+ }
1434
+ fseek(ifp, _save, SEEK_SET);
1435
+ }
1436
+ }
1437
+
1438
+ if (SR2SubIFDLength && (SR2SubIFDLength < 10240000) &&
1439
+ (buf_SR2 = (unsigned *)calloc(SR2SubIFDLength + 1024,1)))
1440
+ { // 1024b for safety
1441
+ fseek(ifp, SR2SubIFDOffset + base, SEEK_SET);
1442
+ fread(buf_SR2, SR2SubIFDLength, 1, ifp);
1443
+ sony_decrypt(buf_SR2, SR2SubIFDLength / 4, 1, SR2SubIFDKey);
1444
+ parseSonySR2((uchar *)buf_SR2, SR2SubIFDOffset,
1445
+ SR2SubIFDLength, AdobeDNG);
1446
+
1447
+ free(buf_SR2);
1448
+ }
1449
+
1450
+ } /* SR2 processed */
1451
+ break;
1452
+ }
1453
+ }
1454
+ }
1455
+ else
1456
+ {
1457
+ fread(mbuf + 6, 1, 2, ifp);
1458
+ if (!strcmp(mbuf, "RICOH") && ((sget2((uchar *)mbuf + 6) == 0x4949) ||
1459
+ (sget2((uchar *)mbuf + 6) == 0x4d4d)))
1460
+ {
1461
+ is_PentaxRicohMakernotes = 1;
1462
+ }
1463
+ if (!strcmp(mbuf, "PENTAX ") || !strcmp(mbuf, "SAMSUNG") ||
1464
+ is_PentaxRicohMakernotes)
1465
+ {
1466
+ fseek(ifp, start_pos, SEEK_SET);
1467
+ parse_makernote_0xc634(base, 0, CameraDNG);
1468
+ }
1469
+ }
1470
+ fseek(ifp, start_pos, SEEK_SET);
1471
+ order = m_sorder;
1472
+ }
1473
+ if (dng_version)
1474
+ {
1475
+ break;
1476
+ }
1477
+ parse_minolta(j = get4() + base);
1478
+ fseek(ifp, j, SEEK_SET);
1479
+ parse_tiff_ifd(base);
1480
+ break;
1481
+ case 0xc640: // 50752
1482
+ read_shorts(cr2_slice, 3);
1483
+ break;
1484
+ case 0xc68b: /* 50827, OriginalRawFileName */
1485
+ stmread(imgdata.color.OriginalRawFileName, len, ifp);
1486
+ break;
1487
+ case 0xc68d: /* 50829 ActiveArea */
1488
+ tiff_ifd[ifd].t_tm = top_margin = getint(type);
1489
+ tiff_ifd[ifd].t_lm = left_margin = getint(type);
1490
+ tiff_ifd[ifd].t_vheight = height = getint(type) - top_margin;
1491
+ tiff_ifd[ifd].t_vwidth = width = getint(type) - left_margin;
1492
+ break;
1493
+ case 0xc68e: /* 50830 MaskedAreas */
1494
+ for (i = 0; i < (int)len && i < 32; i++)
1495
+ ((int *)mask)[i] = getint(type);
1496
+ black = 0;
1497
+ break;
1498
+ case 0xc71a: /* 50970, PreviewColorSpace */
1499
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_PREVIEWCS;
1500
+ tiff_ifd[ifd].dng_levels.preview_colorspace = getint(type);
1501
+ break;
1502
+ case 0xc740: /* 51008, OpcodeList1 */
1503
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_OPCODE1;
1504
+ break;
1505
+ case 0xc741: /* 51009, OpcodeList2 */
1506
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_OPCODE2;
1507
+ tiff_ifd[ifd].opcode2_offset = meta_offset = ftell(ifp);
1508
+ break;
1509
+ case 0xc74e: /* 51022, OpcodeList3 */
1510
+ tiff_ifd[ifd].dng_levels.parsedfields |= LIBRAW_DNGFM_OPCODE3;
1511
+ break;
1512
+ case 0xfd04: /* 64772, Kodak P-series */
1513
+ if (len < 13)
1514
+ break;
1515
+ fseek(ifp, 16, SEEK_CUR);
1516
+ data_offset = get4();
1517
+ fseek(ifp, 28, SEEK_CUR);
1518
+ data_offset += get4();
1519
+ load_raw = &LibRaw::packed_load_raw;
1520
+ break;
1521
+ case 0xfe02: // 65026
1522
+ if (tagtypeIs(LIBRAW_EXIFTAG_TYPE_ASCII))
1523
+ fgets(model2, 64, ifp);
1524
+ }
1525
+ fseek(ifp, save, SEEK_SET);
1526
+ }
1527
+ if (sony_length && sony_length < 10240000 &&
1528
+ (buf = (unsigned *)calloc(sony_length, 1)))
1529
+ {
1530
+ fseek(ifp, sony_offset, SEEK_SET);
1531
+ fread(buf, sony_length, 1, ifp);
1532
+ sony_decrypt(buf, sony_length / 4, 1, sony_key);
1533
+ parseSonySR2((uchar *)buf, sony_offset, sony_length, nonDNG);
1534
+ free(buf);
1535
+ }
1536
+ for (i = 0; i < colors && i < 4; i++)
1537
+ FORCC cc[i][c] *= ab[i];
1538
+ if (use_cm)
1539
+ {
1540
+ FORCC for (i = 0; i < 3; i++) for (cam_xyz[c][i] = j = 0; j < colors; j++)
1541
+ cam_xyz[c][i] += cc[c][j] * cm[j][i] * xyz[i];
1542
+ cam_xyz_coeff(cmatrix, cam_xyz);
1543
+ }
1544
+ if (asn[0])
1545
+ {
1546
+ cam_mul[3] = 0;
1547
+ FORCC
1548
+ if (fabs(asn[c]) > 0.0001)
1549
+ cam_mul[c] = 1 / asn[c];
1550
+ }
1551
+ if (!use_cm)
1552
+ FORCC if (fabs(cc[c][c]) > 0.0001) pre_mul[c] /= cc[c][c];
1553
+ return 0;
1554
+ }
1555
+
1556
+ int LibRaw::parse_tiff(int _base)
1557
+ {
1558
+ INT64 base = _base;
1559
+ int doff;
1560
+ fseek(ifp, base, SEEK_SET);
1561
+ order = get2();
1562
+ if (order != 0x4949 && order != 0x4d4d)
1563
+ return 0;
1564
+ get2();
1565
+ while ((doff = get4()))
1566
+ {
1567
+ INT64 doff64 = doff;
1568
+ if (doff64 + base > ifp->size()) break;
1569
+ fseek(ifp, doff64 + base, SEEK_SET);
1570
+ if (parse_tiff_ifd(_base))
1571
+ break;
1572
+ }
1573
+ return 1;
1574
+ }
1575
+
1576
+ struct ifd_size_t
1577
+ {
1578
+ int ifdi;
1579
+ INT64 databits;
1580
+ };
1581
+
1582
+ int ifd_size_t_cmp(const void *a, const void *b)
1583
+ {
1584
+ if (!a || !b)
1585
+ return 0;
1586
+ const ifd_size_t *ai = (ifd_size_t *)a;
1587
+ const ifd_size_t *bi = (ifd_size_t *)b;
1588
+ return bi->databits > ai->databits ? 1
1589
+ : (bi->databits < ai->databits ? -1 : 0);
1590
+ }
1591
+
1592
+ static LibRaw_internal_thumbnail_formats tiff2thumbformat(int _comp, int _phint, int _bps, const char *_make);
1593
+
1594
+ void LibRaw::apply_tiff()
1595
+ {
1596
+ int max_samp = 0, ties = 0, raw = -1, thm = -1, i;
1597
+ unsigned long long ns, os;
1598
+ struct jhead jh;
1599
+
1600
+ thumb_misc = 16;
1601
+ if (thumb_offset)
1602
+ {
1603
+ fseek(ifp, thumb_offset, SEEK_SET);
1604
+ if (ljpeg_start(&jh, 1))
1605
+ {
1606
+ if ((unsigned)jh.bits < 17 && (unsigned)jh.wide < 0x10000 &&
1607
+ (unsigned)jh.high < 0x10000)
1608
+ {
1609
+ thumb_misc = jh.bits;
1610
+ thumb_width = jh.wide;
1611
+ thumb_height = jh.high;
1612
+ }
1613
+ }
1614
+ }
1615
+ for (i = tiff_nifds; i--;)
1616
+ {
1617
+ if (tiff_ifd[i].t_shutter)
1618
+ shutter = tiff_ifd[i].t_shutter;
1619
+ tiff_ifd[i].t_shutter = shutter;
1620
+ }
1621
+
1622
+ if (dng_version)
1623
+ {
1624
+ int ifdc = 0;
1625
+ for (i = 0; i < (int)tiff_nifds; i++)
1626
+ {
1627
+ if (tiff_ifd[i].t_width < 1 || tiff_ifd[i].t_width > 65535 ||
1628
+ tiff_ifd[i].t_height < 1 || tiff_ifd[i].t_height > 65535)
1629
+ continue; /* wrong image dimensions */
1630
+
1631
+ int samp = tiff_ifd[i].samples;
1632
+ if (samp == 2)
1633
+ samp = 1; // Fuji 2-frame
1634
+ max_samp = LIM(MAX(max_samp, samp), 1,
1635
+ 3); // max_samp is needed for thumbnail selection below
1636
+
1637
+ if ( // Check phint only for RAW subfiletype
1638
+ (tiff_ifd[i].newsubfiletype == 16
1639
+ || tiff_ifd[i].newsubfiletype == 0
1640
+ || (tiff_ifd[i].newsubfiletype & 0xffff) == 1)
1641
+ &&
1642
+ (tiff_ifd[i].phint != 32803 && tiff_ifd[i].phint != 34892)
1643
+ )
1644
+ continue;
1645
+
1646
+ if ((tiff_ifd[i].newsubfiletype == 0) // main image
1647
+ // Enhanced demosaiced:
1648
+ || (tiff_ifd[i].newsubfiletype == 16 &&
1649
+ (imgdata.rawparams.options & LIBRAW_RAWOPTIONS_DNG_ADD_ENHANCED))
1650
+ // Preview: 0x1 or 0x10001
1651
+ || ((tiff_ifd[i].newsubfiletype & 0xffff) == 1 &&
1652
+ (imgdata.rawparams.options & LIBRAW_RAWOPTIONS_DNG_ADD_PREVIEWS))
1653
+ // Transparency mask: 0x4
1654
+ || ((tiff_ifd[i].newsubfiletype & 0xffff) == 4 &&
1655
+ (imgdata.rawparams.options & LIBRAW_RAWOPTIONS_DNG_ADD_MASKS)))
1656
+ {
1657
+ // Add this IFD to dng_frames
1658
+ libraw_internal_data.unpacker_data.dng_frames[ifdc] =
1659
+ ((tiff_ifd[i].newsubfiletype & 0xffff) << 16) | ((i << 8) & 0xff00);
1660
+ ifdc++;
1661
+ // Fuji SuperCCD: second frame:
1662
+ if ((tiff_ifd[i].newsubfiletype == 0) && tiff_ifd[i].samples == 2)
1663
+ {
1664
+ libraw_internal_data.unpacker_data.dng_frames[ifdc] =
1665
+ ((tiff_ifd[i].newsubfiletype & 0xffff) << 16) |
1666
+ ((i << 8) & 0xff00) | 1;
1667
+ ifdc++;
1668
+ }
1669
+ }
1670
+ }
1671
+ if (ifdc)
1672
+ {
1673
+ if (ifdc > 1 && (imgdata.rawparams.options & LIBRAW_RAWOPTIONS_DNG_PREFER_LARGEST_IMAGE))
1674
+ {
1675
+ ifd_size_t arr[LIBRAW_IFD_MAXCOUNT * 2];
1676
+ memset(arr, 0, sizeof(arr));
1677
+ for (int q = 0; q < ifdc && q < LIBRAW_IFD_MAXCOUNT * 2; q++)
1678
+ {
1679
+ int ifdidx =
1680
+ (libraw_internal_data.unpacker_data.dng_frames[q] >> 8) & 0xff;
1681
+ arr[q].ifdi = libraw_internal_data.unpacker_data.dng_frames[q];
1682
+ arr[q].databits =
1683
+ tiff_ifd[ifdidx].t_width * tiff_ifd[ifdidx].t_height *
1684
+ tiff_ifd[ifdidx].samples * tiff_ifd[ifdidx].bps +
1685
+ (0x100 -
1686
+ (arr[q].ifdi & 0xff)); // add inverted frame # to ensure same
1687
+ // sort order for similar sized frames.
1688
+ if (tiff_ifd[ifdidx].phint == 4)
1689
+ arr[q].databits /= 4; // Force lower bit count for Transp. mask images
1690
+ }
1691
+ qsort(arr, MIN(ifdc, LIBRAW_IFD_MAXCOUNT * 2), sizeof(arr[0]),
1692
+ ifd_size_t_cmp);
1693
+ for (int q = 0; q < ifdc && q < LIBRAW_IFD_MAXCOUNT * 2; q++)
1694
+ libraw_internal_data.unpacker_data.dng_frames[q] = arr[q].ifdi;
1695
+ }
1696
+
1697
+ int idx = LIM((int)shot_select, 0, ifdc - 1);
1698
+ i = (libraw_internal_data.unpacker_data.dng_frames[idx] >> 8) &
1699
+ 0xff; // extract frame# back
1700
+
1701
+ raw_width = tiff_ifd[i].t_width;
1702
+ raw_height = tiff_ifd[i].t_height;
1703
+ tiff_bps = tiff_ifd[i].bps;
1704
+ tiff_compress = tiff_ifd[i].comp;
1705
+ tiff_sampleformat = tiff_ifd[i].sample_format;
1706
+ data_offset = tiff_ifd[i].offset;
1707
+ data_size = tiff_ifd[i].bytes;
1708
+ tiff_flip = tiff_ifd[i].t_flip;
1709
+ tiff_samples = tiff_ifd[i].samples;
1710
+ tile_width = tiff_ifd[i].t_tile_width;
1711
+ tile_length = tiff_ifd[i].t_tile_length;
1712
+ fuji_width = tiff_ifd[i].t_fuji_width;
1713
+ if (tiff_samples != 2) /* special case: Fuji SuperCCD */
1714
+ {
1715
+ if (tiff_ifd[i].phint == 34892)
1716
+ filters = 0;
1717
+ else if (i > 0 && tiff_ifd[i].phint == 32803 &&
1718
+ tiff_ifd[0].phint == 32803 && !tiff_ifd[i].t_filters &&
1719
+ tiff_ifd[0].t_filters)
1720
+ filters = tiff_ifd[0].t_filters;
1721
+ else
1722
+ filters = tiff_ifd[i].t_filters;
1723
+ width = tiff_ifd[i].t_vwidth;
1724
+ height = tiff_ifd[i].t_vheight;
1725
+ top_margin = tiff_ifd[i].t_tm;
1726
+ left_margin = tiff_ifd[i].t_lm;
1727
+ shutter = tiff_ifd[i].t_shutter;
1728
+ if (tiff_ifd[i].dng_levels.dng_whitelevel[0])
1729
+ maximum = tiff_ifd[i].dng_levels.dng_whitelevel[0];
1730
+ else if (tiff_ifd[i].sample_format <= 2 && tiff_bps > 0 &&
1731
+ tiff_bps < 32) // SampleFormat: 0-default(1), 1 - Uint, 2 - Int
1732
+ maximum = (1 << tiff_bps) - 1;
1733
+ else if (tiff_ifd[i].sample_format == 3)
1734
+ maximum = 1; // Defaults for FP
1735
+ }
1736
+ raw = i;
1737
+ is_raw = ifdc;
1738
+ }
1739
+ else
1740
+ is_raw = 0;
1741
+ }
1742
+ else
1743
+ {
1744
+ // Fix for broken Sony bps tag
1745
+ if (!strncasecmp(make, "Sony", 4))
1746
+ {
1747
+ for (i = 0; i < (int)tiff_nifds; i++)
1748
+ {
1749
+ if (tiff_ifd[i].bps > 33 && tiff_ifd[i].samples == 1)
1750
+ {
1751
+ int bps = 14; // default
1752
+ if (tiff_ifd[i].dng_levels.dng_whitelevel[0] > 0)
1753
+ {
1754
+ for(int c = 0,j=1; c < 16; c++, j<<=1)
1755
+ if (j > (int)tiff_ifd[i].dng_levels.dng_whitelevel[0])
1756
+ {
1757
+ bps = c; break;
1758
+ }
1759
+ }
1760
+ tiff_ifd[i].bps = bps;
1761
+ }
1762
+ }
1763
+ }
1764
+
1765
+ for (i = 0; i < (int)tiff_nifds; i++)
1766
+ {
1767
+ if (tiff_ifd[i].t_width < 1 || tiff_ifd[i].t_width > 65535 ||
1768
+ tiff_ifd[i].t_height < 1 || tiff_ifd[i].t_height > 65535)
1769
+ continue; /* wrong image dimensions */
1770
+ if (max_samp < tiff_ifd[i].samples)
1771
+ max_samp = tiff_ifd[i].samples;
1772
+ if (max_samp > 3)
1773
+ max_samp = 3;
1774
+
1775
+ os = unsigned(raw_width) * unsigned(raw_height);
1776
+ ns = unsigned(tiff_ifd[i].t_width) * unsigned(tiff_ifd[i].t_height);
1777
+ if (tiff_bps)
1778
+ {
1779
+ os *= tiff_bps;
1780
+ ns *= tiff_ifd[i].bps;
1781
+ }
1782
+ /* too complex if below, so separate if to skip RGB+Alpha TIFFs*/
1783
+ if (tiff_ifd[i].phint == 2 && tiff_ifd[i].extrasamples > 0 && tiff_ifd[i].samples > 3)
1784
+ continue; // SKIP RGB+Alpha IFDs
1785
+
1786
+ if ((tiff_ifd[i].comp != 6 || tiff_ifd[i].samples != 3) &&
1787
+ unsigned(tiff_ifd[i].t_width | tiff_ifd[i].t_height) < 0x10000 &&
1788
+ (unsigned)tiff_ifd[i].bps < 33 &&
1789
+ (unsigned)tiff_ifd[i].samples < 13 && ns &&
1790
+ ((ns > os && (ties = 1)) || (ns == os && (int)shot_select == ties++)))
1791
+ {
1792
+ raw_width = tiff_ifd[i].t_width;
1793
+ raw_height = tiff_ifd[i].t_height;
1794
+ tiff_bps = tiff_ifd[i].bps;
1795
+ tiff_compress = tiff_ifd[i].comp;
1796
+ tiff_sampleformat = tiff_ifd[i].sample_format;
1797
+ data_offset = tiff_ifd[i].offset;
1798
+ data_size = tiff_ifd[i].bytes;
1799
+ tiff_flip = tiff_ifd[i].t_flip;
1800
+ tiff_samples = tiff_ifd[i].samples;
1801
+ tile_width = tiff_ifd[i].t_tile_width;
1802
+ tile_length = tiff_ifd[i].t_tile_length;
1803
+ shutter = tiff_ifd[i].t_shutter;
1804
+ raw = i;
1805
+ }
1806
+ }
1807
+ if (is_raw == 1 && ties)
1808
+ is_raw = ties;
1809
+ }
1810
+ if (is_NikonTransfer && raw >= 0)
1811
+ {
1812
+ if (tiff_ifd[raw].bps == 16)
1813
+ {
1814
+ if (tiff_compress == 1)
1815
+ {
1816
+ if ((raw_width * raw_height * 3) == (tiff_ifd[raw].bytes << 1))
1817
+ {
1818
+ tiff_bps = tiff_ifd[raw].bps = 12;
1819
+ }
1820
+ else
1821
+ {
1822
+ tiff_bps = tiff_ifd[raw].bps = 14;
1823
+ }
1824
+ }
1825
+ }
1826
+ else if (tiff_ifd[raw].bps == 8)
1827
+ {
1828
+ if (tiff_compress == 1)
1829
+ {
1830
+ is_NikonTransfer = 2; // 8-bit debayered TIFF, like CoolScan NEFs
1831
+ imgdata.rawparams.coolscan_nef_gamma = 2.2f;
1832
+ }
1833
+ }
1834
+ }
1835
+
1836
+ if (!tile_width)
1837
+ tile_width = INT_MAX;
1838
+ if (!tile_length)
1839
+ tile_length = INT_MAX;
1840
+ for (i = tiff_nifds; i--;)
1841
+ if (tiff_ifd[i].t_flip)
1842
+ tiff_flip = tiff_ifd[i].t_flip;
1843
+
1844
+ #if 0
1845
+ if (raw < 0 && is_raw)
1846
+ is_raw = 0;
1847
+ #endif
1848
+
1849
+ if (raw >= 0 && !load_raw)
1850
+ switch (tiff_compress)
1851
+ {
1852
+ case 32767:
1853
+ if (!dng_version &&
1854
+ INT64(tiff_ifd[raw].bytes) == INT64(raw_width) * INT64(raw_height))
1855
+ {
1856
+ tiff_bps = 14;
1857
+ load_raw = &LibRaw::sony_arw2_load_raw;
1858
+ break;
1859
+ }
1860
+ if (!dng_version && !strncasecmp(make, "Sony", 4) &&
1861
+ INT64(tiff_ifd[raw].bytes) ==
1862
+ INT64(raw_width) * INT64(raw_height) * 2LL)
1863
+ {
1864
+ tiff_bps = 14;
1865
+ load_raw = &LibRaw::unpacked_load_raw;
1866
+ break;
1867
+ }
1868
+ if (INT64(tiff_ifd[raw].bytes) * 8LL !=
1869
+ INT64(raw_width) * INT64(raw_height) * INT64(tiff_bps))
1870
+ {
1871
+ raw_height += 8;
1872
+ load_raw = &LibRaw::sony_arw_load_raw;
1873
+ break;
1874
+ }
1875
+ load_flags = 79;
1876
+ case 32769:
1877
+ load_flags++;
1878
+ case 32770:
1879
+ case 32773:
1880
+ goto slr;
1881
+ case 0:
1882
+ case 1:
1883
+ if (dng_version && tiff_sampleformat == 3 &&
1884
+ (tiff_bps > 8 && (tiff_bps % 8 == 0) && (tiff_bps <= 32))) // only 16,24, and 32 are allowed
1885
+ {
1886
+ load_raw = &LibRaw::uncompressed_fp_dng_load_raw;
1887
+ break;
1888
+ }
1889
+ // Sony 14-bit uncompressed
1890
+ if (!dng_version && !strncasecmp(make, "Sony", 4) &&
1891
+ INT64(tiff_ifd[raw].bytes) ==
1892
+ INT64(raw_width) * INT64(raw_height) * 2LL)
1893
+ {
1894
+ tiff_bps = 14;
1895
+ load_raw = &LibRaw::unpacked_load_raw;
1896
+ break;
1897
+ }
1898
+ if (!dng_version && !strncasecmp(make, "Sony", 4) &&
1899
+ tiff_ifd[raw].samples == 4 &&
1900
+ INT64(tiff_ifd[raw].bytes) ==
1901
+ INT64(raw_width) * INT64(raw_height) * 8LL) // Sony ARQ
1902
+ {
1903
+ // maybe to detect ARQ with the following:
1904
+ // if (tiff_ifd[raw].phint == 32892)
1905
+ tiff_bps = 14;
1906
+ tiff_samples = 4;
1907
+ load_raw = &LibRaw::sony_arq_load_raw;
1908
+ filters = 0;
1909
+ strcpy(cdesc, "RGBG");
1910
+ break;
1911
+ }
1912
+ if (!strncasecmp(make, "Nikon", 5) &&
1913
+ (!strncmp(software, "Nikon Scan", 10) || (is_NikonTransfer == 2) ||
1914
+ strcasestr(model, "COOLSCAN")))
1915
+ {
1916
+ load_raw = &LibRaw::nikon_coolscan_load_raw;
1917
+ raw_color = 1;
1918
+ colors = (tiff_samples == 3) ? 3 : 1;
1919
+ filters = 0;
1920
+ break;
1921
+ }
1922
+ if ((!strncmp(make, "OLYMPUS", 7) || !strncmp(make, "OM Digi", 7) ||
1923
+ (!strncasecmp(make, "CLAUSS", 6) &&
1924
+ !strncasecmp(model, "piX 5oo", 7))) && // 0x5330303539 works here
1925
+ (INT64(tiff_ifd[raw].bytes) * 2ULL ==
1926
+ INT64(raw_width) * INT64(raw_height) * 3ULL))
1927
+ load_flags = 24;
1928
+ if (!dng_version && INT64(tiff_ifd[raw].bytes) * 5ULL ==
1929
+ INT64(raw_width) * INT64(raw_height) * 8ULL)
1930
+ {
1931
+ load_flags = 81;
1932
+ tiff_bps = 12;
1933
+ }
1934
+ slr:
1935
+ switch (tiff_bps)
1936
+ {
1937
+ case 8:
1938
+ load_raw = &LibRaw::eight_bit_load_raw;
1939
+ break;
1940
+ case 12:
1941
+ if (tiff_ifd[raw].phint == 2)
1942
+ load_flags = 6;
1943
+ if (!strncasecmp(make, "NIKON", 5) &&
1944
+ !strncasecmp(model, "COOLPIX A1000", 13) &&
1945
+ data_size == raw_width * raw_height * 2u)
1946
+ load_raw = &LibRaw::unpacked_load_raw;
1947
+ else
1948
+ load_raw = &LibRaw::packed_load_raw;
1949
+ break;
1950
+ case 14:
1951
+ load_flags = 0;
1952
+ case 16:
1953
+ load_raw = &LibRaw::unpacked_load_raw;
1954
+ if ((!strncmp(make, "OLYMPUS", 7) || !strncmp(make, "OM Digi", 7) ||
1955
+ (!strncasecmp(make, "CLAUSS", 6) &&
1956
+ !strncasecmp(model, "piX 5oo", 7))) && // 0x5330303539 works here
1957
+ (INT64(tiff_ifd[raw].bytes) * 7LL >
1958
+ INT64(raw_width) * INT64(raw_height)))
1959
+ load_raw = &LibRaw::olympus_load_raw;
1960
+ }
1961
+ break;
1962
+ case 6:
1963
+ case 7:
1964
+ case 99:
1965
+ if (!dng_version && tiff_compress == 6 && !strcasecmp(make, "SONY"))
1966
+ load_raw = &LibRaw::sony_ljpeg_load_raw;
1967
+ else
1968
+ load_raw = &LibRaw::lossless_jpeg_load_raw;
1969
+ break;
1970
+ case 262:
1971
+ load_raw = &LibRaw::kodak_262_load_raw;
1972
+ break;
1973
+ case 34713:
1974
+ if ((INT64(raw_width) + 9LL) / 10LL * 16LL * INT64(raw_height) ==
1975
+ INT64(tiff_ifd[raw].bytes))
1976
+ {
1977
+ load_raw = &LibRaw::packed_load_raw;
1978
+ load_flags = 1;
1979
+ }
1980
+ else if (INT64(raw_width) * INT64(raw_height) * 3LL ==
1981
+ INT64(tiff_ifd[raw].bytes) * 2LL)
1982
+ {
1983
+ load_raw = &LibRaw::packed_load_raw;
1984
+ if (model[0] == 'N')
1985
+ load_flags = 80;
1986
+ }
1987
+ else if (INT64(raw_width) * INT64(raw_height) * 3LL ==
1988
+ INT64(tiff_ifd[raw].bytes))
1989
+ {
1990
+ load_raw = &LibRaw::nikon_yuv_load_raw;
1991
+ gamma_curve(1 / 2.4, 12.92, 1, 4095);
1992
+ memset(cblack, 0, sizeof cblack);
1993
+ filters = 0;
1994
+ }
1995
+ else if (INT64(raw_width) * INT64(raw_height) * 2LL ==
1996
+ INT64(tiff_ifd[raw].bytes))
1997
+ {
1998
+ load_raw = &LibRaw::unpacked_load_raw;
1999
+ load_flags = 4;
2000
+ order = 0x4d4d;
2001
+ }
2002
+ #if 0 /* Never used because of same condition above, but need to recheck */
2003
+ else if (INT64(raw_width) * INT64(raw_height) * 3LL ==
2004
+ INT64(tiff_ifd[raw].bytes) * 2LL)
2005
+ {
2006
+ load_raw = &LibRaw::packed_load_raw;
2007
+ load_flags = 80;
2008
+ }
2009
+ #endif
2010
+ else if (tiff_ifd[raw].rows_per_strip &&
2011
+ tiff_ifd[raw].strip_offsets_count &&
2012
+ tiff_ifd[raw].strip_offsets_count ==
2013
+ tiff_ifd[raw].strip_byte_counts_count)
2014
+ {
2015
+ int fit = 1;
2016
+ for (int q = 0; q < tiff_ifd[raw].strip_byte_counts_count - 1;
2017
+ q++) // all but last
2018
+ if (INT64(tiff_ifd[raw].strip_byte_counts[q]) * 2LL !=
2019
+ INT64(tiff_ifd[raw].rows_per_strip) * INT64(raw_width) * 3LL)
2020
+ {
2021
+ fit = 0;
2022
+ break;
2023
+ }
2024
+ if (fit)
2025
+ load_raw = &LibRaw::nikon_load_striped_packed_raw;
2026
+ else
2027
+ load_raw = &LibRaw::nikon_load_raw; // fallback
2028
+ }
2029
+ else if ((((INT64(raw_width) * 3LL / 2LL) + 15LL) / 16LL) * 16LL *
2030
+ INT64(raw_height) ==
2031
+ INT64(tiff_ifd[raw].bytes))
2032
+ {
2033
+ load_raw = &LibRaw::nikon_load_padded_packed_raw;
2034
+ load_flags = (((INT64(raw_width) * 3ULL / 2ULL) + 15ULL) / 16ULL) *
2035
+ 16ULL; // bytes per row
2036
+ }
2037
+ else if (!strncmp(model, "NIKON Z 9", 9) && tiff_ifd[raw].offset)
2038
+ {
2039
+ INT64 pos = ftell(ifp);
2040
+ unsigned char cmp[] = "CONTACT_INTOPIX"; // 15
2041
+ unsigned char buf[16];
2042
+ fseek(ifp, INT64(tiff_ifd[raw].offset) + 6LL, SEEK_SET);
2043
+ fread(buf, 1, 16, ifp);
2044
+ fseek(ifp, pos, SEEK_SET);
2045
+ if(!memcmp(buf,cmp,15))
2046
+ load_raw = &LibRaw::nikon_he_load_raw_placeholder;
2047
+ else
2048
+ load_raw = &LibRaw::nikon_load_raw;
2049
+ }
2050
+ else
2051
+ load_raw = &LibRaw::nikon_load_raw;
2052
+ break;
2053
+ case 65535:
2054
+ load_raw = &LibRaw::pentax_load_raw;
2055
+ break;
2056
+ case 65000:
2057
+ switch (tiff_ifd[raw].phint)
2058
+ {
2059
+ case 2:
2060
+ load_raw = &LibRaw::kodak_rgb_load_raw;
2061
+ filters = 0;
2062
+ break;
2063
+ case 6:
2064
+ load_raw = &LibRaw::kodak_ycbcr_load_raw;
2065
+ filters = 0;
2066
+ break;
2067
+ case 32803:
2068
+ load_raw = &LibRaw::kodak_65000_load_raw;
2069
+ }
2070
+ case 32867:
2071
+ case 34892:
2072
+ break;
2073
+ case 8:
2074
+ break;
2075
+ #ifdef USE_GPRSDK
2076
+ case 9:
2077
+ if (dng_version)
2078
+ break; /* Compression=9 supported for dng if we compiled with GPR SDK */
2079
+ /* Else: fallthrough */
2080
+ #endif
2081
+ default:
2082
+ is_raw = 0;
2083
+ }
2084
+ if (!dng_version)
2085
+ {
2086
+ if (((tiff_samples == 3 && tiff_ifd[raw].bytes &&
2087
+ !(tiff_bps == 16 &&
2088
+ !strncmp(make, "Leaf", 4)) && // Allow Leaf/16bit/3color files
2089
+ tiff_bps != 14 &&
2090
+ (tiff_compress & -16) != 32768) ||
2091
+ (tiff_bps == 8 && strncmp(make, "Phase", 5) &&
2092
+ strncmp(make, "Leaf", 4) && !strcasestr(make, "Kodak") &&
2093
+ !strstr(model2, "DEBUG RAW"))) &&
2094
+ !strcasestr(model, "COOLSCAN") && strncmp(software, "Nikon Scan", 10) &&
2095
+ is_NikonTransfer != 2)
2096
+ is_raw = 0;
2097
+
2098
+ if (is_raw && raw >= 0 && tiff_ifd[raw].phint == 2 && tiff_ifd[raw].extrasamples > 0 && tiff_ifd[raw].samples > 3)
2099
+ is_raw = 0; // SKIP RGB+Alpha IFDs
2100
+ }
2101
+
2102
+ INT64 fsizecheck = 0ULL;
2103
+
2104
+ if (imgdata.rawparams.options & LIBRAW_RAWOPTIONS_CHECK_THUMBNAILS_ALL_VENDORS)
2105
+ fsizecheck = ifp->size();
2106
+ else if ((imgdata.rawparams.options & LIBRAW_RAWOPTIONS_CHECK_THUMBNAILS_KNOWN_VENDORS)
2107
+ && !strncasecmp(make,"Ricoh",5))
2108
+ fsizecheck = ifp->size();
2109
+
2110
+ for (i = 0; i < (int)tiff_nifds; i++)
2111
+ if (i != raw &&
2112
+ (tiff_ifd[i].samples == max_samp ||
2113
+ (tiff_ifd[i].comp == 7 &&
2114
+ tiff_ifd[i].samples == 1)) /* Allow 1-bps JPEGs */
2115
+ && tiff_ifd[i].bps > 0 && tiff_ifd[i].bps < 33 &&
2116
+ tiff_ifd[i].phint != 32803 && tiff_ifd[i].phint != 34892 &&
2117
+ unsigned(tiff_ifd[i].t_width | tiff_ifd[i].t_height) < 0x10000 &&
2118
+ tiff_ifd[i].comp != 34892)
2119
+ {
2120
+ if (fsizecheck > 0LL)
2121
+ {
2122
+ bool ok = true;
2123
+ if (tiff_ifd[i].strip_byte_counts_count && tiff_ifd[i].strip_offsets_count)
2124
+ for (int s = 0; s < MIN(tiff_ifd[i].strip_byte_counts_count, tiff_ifd[i].strip_offsets_count); s++)
2125
+ {
2126
+ if (tiff_ifd[i].strip_offsets[s] + tiff_ifd[i].strip_byte_counts[s] > fsizecheck)
2127
+ {
2128
+ ok = false;
2129
+ break;
2130
+ }
2131
+ }
2132
+ else if (tiff_ifd[i].bytes > 0)
2133
+ if (tiff_ifd[i].offset + tiff_ifd[i].bytes > fsizecheck)
2134
+ ok = false;
2135
+
2136
+ if(!ok)
2137
+ continue;
2138
+ }
2139
+ if ( (INT64(tiff_ifd[i].t_width) * INT64(tiff_ifd[i].t_height) / INT64(SQR(tiff_ifd[i].bps) + 1)) >
2140
+ (INT64(thumb_width) * INT64(thumb_height) / INT64(SQR(thumb_misc) + 1)) )
2141
+ {
2142
+
2143
+ thumb_width = tiff_ifd[i].t_width;
2144
+ thumb_height = tiff_ifd[i].t_height;
2145
+ thumb_offset = tiff_ifd[i].offset;
2146
+ thumb_length = tiff_ifd[i].bytes;
2147
+ thumb_misc = tiff_ifd[i].bps;
2148
+ thm = i;
2149
+ }
2150
+ if (imgdata.thumbs_list.thumbcount < LIBRAW_THUMBNAIL_MAXCOUNT && tiff_ifd[i].bytes > 0)
2151
+ {
2152
+ bool already = false;
2153
+ for(int idx = 0; idx < imgdata.thumbs_list.thumbcount ; idx++)
2154
+ if (imgdata.thumbs_list.thumblist[idx].toffset == tiff_ifd[i].offset)
2155
+ {
2156
+ already = true;
2157
+ break;
2158
+ }
2159
+ if (!already)
2160
+ {
2161
+ int idx = imgdata.thumbs_list.thumbcount;
2162
+ imgdata.thumbs_list.thumblist[idx].tformat = tiff2thumbformat(tiff_ifd[i].comp, tiff_ifd[i].phint,
2163
+ tiff_ifd[i].bps, make);
2164
+ imgdata.thumbs_list.thumblist[idx].twidth = tiff_ifd[i].t_width;
2165
+ imgdata.thumbs_list.thumblist[idx].theight = tiff_ifd[i].t_height;
2166
+ imgdata.thumbs_list.thumblist[idx].tflip = tiff_ifd[i].t_flip;
2167
+ imgdata.thumbs_list.thumblist[idx].tlength = tiff_ifd[i].bytes;
2168
+ imgdata.thumbs_list.thumblist[idx].tmisc = tiff_ifd[i].bps | (tiff_ifd[i].samples << 5);
2169
+ imgdata.thumbs_list.thumblist[idx].toffset = tiff_ifd[i].offset;
2170
+ imgdata.thumbs_list.thumbcount++;
2171
+ }
2172
+ }
2173
+ }
2174
+ if (thm >= 0)
2175
+ {
2176
+ thumb_misc |= tiff_ifd[thm].samples << 5;
2177
+ thumb_format = tiff2thumbformat(tiff_ifd[thm].comp, tiff_ifd[thm].phint, tiff_ifd[thm].bps, make);
2178
+ }
2179
+ }
2180
+
2181
+ static LibRaw_internal_thumbnail_formats tiff2thumbformat(int _comp, int _phint, int _bps, const char *_make)
2182
+ {
2183
+ switch (_comp)
2184
+ {
2185
+ case 0:
2186
+ return LIBRAW_INTERNAL_THUMBNAIL_LAYER;
2187
+ case 1:
2188
+ if (_bps <= 8)
2189
+ return LIBRAW_INTERNAL_THUMBNAIL_PPM;
2190
+ else if (!strncmp(_make, "Imacon", 6))
2191
+ return LIBRAW_INTERNAL_THUMBNAIL_PPM16;
2192
+ else
2193
+ return LIBRAW_INTERNAL_THUMBNAIL_KODAK_THUMB;
2194
+ case 65000:
2195
+ return _phint == 6 ? LIBRAW_INTERNAL_THUMBNAIL_KODAK_YCBCR : LIBRAW_INTERNAL_THUMBNAIL_KODAK_RGB;
2196
+ }
2197
+ return LIBRAW_INTERNAL_THUMBNAIL_JPEG; // default
2198
+ }