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,1816 @@
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
+ unsigned LibRaw::getbithuff(int nbits, ushort *huff)
23
+ {
24
+ #ifdef LIBRAW_NOTHREADS
25
+ static unsigned bitbuf = 0;
26
+ static int vbits = 0, reset = 0;
27
+ #else
28
+ #define bitbuf tls->getbits.bitbuf
29
+ #define vbits tls->getbits.vbits
30
+ #define reset tls->getbits.reset
31
+ #endif
32
+ unsigned c;
33
+
34
+ if (nbits > 25)
35
+ return 0;
36
+ if (nbits < 0)
37
+ return bitbuf = vbits = reset = 0;
38
+ if (nbits == 0 || vbits < 0)
39
+ return 0;
40
+ while (!reset && vbits < nbits && (c = fgetc(ifp)) != (unsigned)EOF &&
41
+ !(reset = zero_after_ff && c == 0xff && fgetc(ifp)))
42
+ {
43
+ bitbuf = (bitbuf << 8) + (uchar)c;
44
+ vbits += 8;
45
+ }
46
+ c = vbits == 0 ? 0 : bitbuf << (32 - vbits) >> (32 - nbits);
47
+ if (huff)
48
+ {
49
+ vbits -= huff[c] >> 8;
50
+ c = (uchar)huff[c];
51
+ }
52
+ else
53
+ vbits -= nbits;
54
+ if (vbits < 0)
55
+ derror();
56
+ return c;
57
+ #ifndef LIBRAW_NOTHREADS
58
+ #undef bitbuf
59
+ #undef vbits
60
+ #undef reset
61
+ #endif
62
+ }
63
+
64
+ /*
65
+ Construct a decode tree according the specification in *source.
66
+ The first 16 bytes specify how many codes should be 1-bit, 2-bit
67
+ 3-bit, etc. Bytes after that are the leaf values.
68
+
69
+ For example, if the source is
70
+
71
+ { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0,
72
+ 0x04,0x03,0x05,0x06,0x02,0x07,0x01,0x08,0x09,0x00,0x0a,0x0b,0xff },
73
+
74
+ then the code is
75
+
76
+ 00 0x04
77
+ 010 0x03
78
+ 011 0x05
79
+ 100 0x06
80
+ 101 0x02
81
+ 1100 0x07
82
+ 1101 0x01
83
+ 11100 0x08
84
+ 11101 0x09
85
+ 11110 0x00
86
+ 111110 0x0a
87
+ 1111110 0x0b
88
+ 1111111 0xff
89
+ */
90
+ ushort *LibRaw::make_decoder_ref(const uchar **source)
91
+ {
92
+ int max, len, h, i, j;
93
+ const uchar *count;
94
+ ushort *huff;
95
+
96
+ count = (*source += 16) - 17;
97
+ for (max = 16; max && !count[max]; max--)
98
+ ;
99
+ huff = (ushort *)calloc(1 + (1 << max), sizeof *huff);
100
+ huff[0] = max;
101
+ for (h = len = 1; len <= max; len++)
102
+ for (i = 0; i < count[len]; i++, ++*source)
103
+ for (j = 0; j < 1 << (max - len); j++)
104
+ if (h <= 1 << max)
105
+ huff[h++] = len << 8 | **source;
106
+ return huff;
107
+ }
108
+
109
+ ushort *LibRaw::make_decoder(const uchar *source)
110
+ {
111
+ return make_decoder_ref(&source);
112
+ }
113
+
114
+ void LibRaw::crw_init_tables(unsigned table, ushort *huff[2])
115
+ {
116
+ static const uchar first_tree[3][29] = {
117
+ {0, 1, 4, 2, 3, 1, 2, 0, 0, 0,
118
+ 0, 0, 0, 0, 0, 0, 0x04, 0x03, 0x05, 0x06,
119
+ 0x02, 0x07, 0x01, 0x08, 0x09, 0x00, 0x0a, 0x0b, 0xff},
120
+ {0, 2, 2, 3, 1, 1, 1, 1, 2, 0,
121
+ 0, 0, 0, 0, 0, 0, 0x03, 0x02, 0x04, 0x01,
122
+ 0x05, 0x00, 0x06, 0x07, 0x09, 0x08, 0x0a, 0x0b, 0xff},
123
+ {0, 0, 6, 3, 1, 1, 2, 0, 0, 0,
124
+ 0, 0, 0, 0, 0, 0, 0x06, 0x05, 0x07, 0x04,
125
+ 0x08, 0x03, 0x09, 0x02, 0x00, 0x0a, 0x01, 0x0b, 0xff},
126
+ };
127
+ static const uchar second_tree[3][180] = {
128
+ {0, 2, 2, 2, 1, 4, 2, 1, 2, 5, 1, 1,
129
+ 0, 0, 0, 139, 0x03, 0x04, 0x02, 0x05, 0x01, 0x06, 0x07, 0x08,
130
+ 0x12, 0x13, 0x11, 0x14, 0x09, 0x15, 0x22, 0x00, 0x21, 0x16, 0x0a, 0xf0,
131
+ 0x23, 0x17, 0x24, 0x31, 0x32, 0x18, 0x19, 0x33, 0x25, 0x41, 0x34, 0x42,
132
+ 0x35, 0x51, 0x36, 0x37, 0x38, 0x29, 0x79, 0x26, 0x1a, 0x39, 0x56, 0x57,
133
+ 0x28, 0x27, 0x52, 0x55, 0x58, 0x43, 0x76, 0x59, 0x77, 0x54, 0x61, 0xf9,
134
+ 0x71, 0x78, 0x75, 0x96, 0x97, 0x49, 0xb7, 0x53, 0xd7, 0x74, 0xb6, 0x98,
135
+ 0x47, 0x48, 0x95, 0x69, 0x99, 0x91, 0xfa, 0xb8, 0x68, 0xb5, 0xb9, 0xd6,
136
+ 0xf7, 0xd8, 0x67, 0x46, 0x45, 0x94, 0x89, 0xf8, 0x81, 0xd5, 0xf6, 0xb4,
137
+ 0x88, 0xb1, 0x2a, 0x44, 0x72, 0xd9, 0x87, 0x66, 0xd4, 0xf5, 0x3a, 0xa7,
138
+ 0x73, 0xa9, 0xa8, 0x86, 0x62, 0xc7, 0x65, 0xc8, 0xc9, 0xa1, 0xf4, 0xd1,
139
+ 0xe9, 0x5a, 0x92, 0x85, 0xa6, 0xe7, 0x93, 0xe8, 0xc1, 0xc6, 0x7a, 0x64,
140
+ 0xe1, 0x4a, 0x6a, 0xe6, 0xb3, 0xf1, 0xd3, 0xa5, 0x8a, 0xb2, 0x9a, 0xba,
141
+ 0x84, 0xa4, 0x63, 0xe5, 0xc5, 0xf3, 0xd2, 0xc4, 0x82, 0xaa, 0xda, 0xe4,
142
+ 0xf2, 0xca, 0x83, 0xa3, 0xa2, 0xc3, 0xea, 0xc2, 0xe2, 0xe3, 0xff, 0xff},
143
+ {0, 2, 2, 1, 4, 1, 4, 1, 3, 3, 1, 0,
144
+ 0, 0, 0, 140, 0x02, 0x03, 0x01, 0x04, 0x05, 0x12, 0x11, 0x06,
145
+ 0x13, 0x07, 0x08, 0x14, 0x22, 0x09, 0x21, 0x00, 0x23, 0x15, 0x31, 0x32,
146
+ 0x0a, 0x16, 0xf0, 0x24, 0x33, 0x41, 0x42, 0x19, 0x17, 0x25, 0x18, 0x51,
147
+ 0x34, 0x43, 0x52, 0x29, 0x35, 0x61, 0x39, 0x71, 0x62, 0x36, 0x53, 0x26,
148
+ 0x38, 0x1a, 0x37, 0x81, 0x27, 0x91, 0x79, 0x55, 0x45, 0x28, 0x72, 0x59,
149
+ 0xa1, 0xb1, 0x44, 0x69, 0x54, 0x58, 0xd1, 0xfa, 0x57, 0xe1, 0xf1, 0xb9,
150
+ 0x49, 0x47, 0x63, 0x6a, 0xf9, 0x56, 0x46, 0xa8, 0x2a, 0x4a, 0x78, 0x99,
151
+ 0x3a, 0x75, 0x74, 0x86, 0x65, 0xc1, 0x76, 0xb6, 0x96, 0xd6, 0x89, 0x85,
152
+ 0xc9, 0xf5, 0x95, 0xb4, 0xc7, 0xf7, 0x8a, 0x97, 0xb8, 0x73, 0xb7, 0xd8,
153
+ 0xd9, 0x87, 0xa7, 0x7a, 0x48, 0x82, 0x84, 0xea, 0xf4, 0xa6, 0xc5, 0x5a,
154
+ 0x94, 0xa4, 0xc6, 0x92, 0xc3, 0x68, 0xb5, 0xc8, 0xe4, 0xe5, 0xe6, 0xe9,
155
+ 0xa2, 0xa3, 0xe3, 0xc2, 0x66, 0x67, 0x93, 0xaa, 0xd4, 0xd5, 0xe7, 0xf8,
156
+ 0x88, 0x9a, 0xd7, 0x77, 0xc4, 0x64, 0xe2, 0x98, 0xa5, 0xca, 0xda, 0xe8,
157
+ 0xf3, 0xf6, 0xa9, 0xb2, 0xb3, 0xf2, 0xd2, 0x83, 0xba, 0xd3, 0xff, 0xff},
158
+ {0, 0, 6, 2, 1, 3, 3, 2, 5, 1, 2, 2,
159
+ 8, 10, 0, 117, 0x04, 0x05, 0x03, 0x06, 0x02, 0x07, 0x01, 0x08,
160
+ 0x09, 0x12, 0x13, 0x14, 0x11, 0x15, 0x0a, 0x16, 0x17, 0xf0, 0x00, 0x22,
161
+ 0x21, 0x18, 0x23, 0x19, 0x24, 0x32, 0x31, 0x25, 0x33, 0x38, 0x37, 0x34,
162
+ 0x35, 0x36, 0x39, 0x79, 0x57, 0x58, 0x59, 0x28, 0x56, 0x78, 0x27, 0x41,
163
+ 0x29, 0x77, 0x26, 0x42, 0x76, 0x99, 0x1a, 0x55, 0x98, 0x97, 0xf9, 0x48,
164
+ 0x54, 0x96, 0x89, 0x47, 0xb7, 0x49, 0xfa, 0x75, 0x68, 0xb6, 0x67, 0x69,
165
+ 0xb9, 0xb8, 0xd8, 0x52, 0xd7, 0x88, 0xb5, 0x74, 0x51, 0x46, 0xd9, 0xf8,
166
+ 0x3a, 0xd6, 0x87, 0x45, 0x7a, 0x95, 0xd5, 0xf6, 0x86, 0xb4, 0xa9, 0x94,
167
+ 0x53, 0x2a, 0xa8, 0x43, 0xf5, 0xf7, 0xd4, 0x66, 0xa7, 0x5a, 0x44, 0x8a,
168
+ 0xc9, 0xe8, 0xc8, 0xe7, 0x9a, 0x6a, 0x73, 0x4a, 0x61, 0xc7, 0xf4, 0xc6,
169
+ 0x65, 0xe9, 0x72, 0xe6, 0x71, 0x91, 0x93, 0xa6, 0xda, 0x92, 0x85, 0x62,
170
+ 0xf3, 0xc5, 0xb2, 0xa4, 0x84, 0xba, 0x64, 0xa5, 0xb3, 0xd2, 0x81, 0xe5,
171
+ 0xd3, 0xaa, 0xc4, 0xca, 0xf2, 0xb1, 0xe4, 0xd1, 0x83, 0x63, 0xea, 0xc3,
172
+ 0xe2, 0x82, 0xf1, 0xa3, 0xc2, 0xa1, 0xc1, 0xe3, 0xa2, 0xe1, 0xff, 0xff}};
173
+ if (table > 2)
174
+ table = 2;
175
+ huff[0] = make_decoder(first_tree[table]);
176
+ huff[1] = make_decoder(second_tree[table]);
177
+ }
178
+
179
+ /*
180
+ Return 0 if the image starts with compressed data,
181
+ 1 if it starts with uncompressed low-order bits.
182
+
183
+ In Canon compressed data, 0xff is always followed by 0x00.
184
+ */
185
+ int LibRaw::canon_has_lowbits()
186
+ {
187
+ uchar test[0x4000];
188
+ int ret = 1, i;
189
+
190
+ fseek(ifp, 0, SEEK_SET);
191
+ fread(test, 1, sizeof test, ifp);
192
+ for (i = 540; i < int(sizeof test - 1); i++)
193
+ if (test[i] == 0xff)
194
+ {
195
+ if (test[i + 1])
196
+ return 1;
197
+ ret = 0;
198
+ }
199
+ return ret;
200
+ }
201
+
202
+ void LibRaw::canon_load_raw()
203
+ {
204
+ ushort *pixel, *prow, *huff[2];
205
+ int nblocks, lowbits, i, c, row, r, val;
206
+ INT64 save;
207
+ int block, diffbuf[64], leaf, len, diff, carry = 0, pnum = 0, base[2];
208
+
209
+ crw_init_tables(tiff_compress, huff);
210
+ lowbits = canon_has_lowbits();
211
+ if (!lowbits)
212
+ maximum = 0x3ff;
213
+ fseek(ifp, 540 + lowbits * raw_height * raw_width / 4, SEEK_SET);
214
+ zero_after_ff = 1;
215
+ getbits(-1);
216
+ try
217
+ {
218
+ for (row = 0; row < raw_height; row += 8)
219
+ {
220
+ checkCancel();
221
+ pixel = raw_image + row * raw_width;
222
+ nblocks = MIN(8, raw_height - row) * raw_width >> 6;
223
+ for (block = 0; block < nblocks; block++)
224
+ {
225
+ memset(diffbuf, 0, sizeof diffbuf);
226
+ for (i = 0; i < 64; i++)
227
+ {
228
+ leaf = gethuff(huff[i > 0]);
229
+ if (leaf == 0 && i)
230
+ break;
231
+ if (leaf == 0xff)
232
+ continue;
233
+ i += leaf >> 4;
234
+ len = leaf & 15;
235
+ if (len == 0)
236
+ continue;
237
+ diff = getbits(len);
238
+ if ((diff & (1 << (len - 1))) == 0)
239
+ diff -= (1 << len) - 1;
240
+ if (i < 64)
241
+ diffbuf[i] = diff;
242
+ }
243
+ diffbuf[0] += carry;
244
+ carry = diffbuf[0];
245
+ for (i = 0; i < 64; i++)
246
+ {
247
+ if (pnum++ % raw_width == 0)
248
+ base[0] = base[1] = 512;
249
+ if ((pixel[(block << 6) + i] = base[i & 1] += diffbuf[i]) >> 10)
250
+ derror();
251
+ }
252
+ }
253
+ if (lowbits)
254
+ {
255
+ save = ftell(ifp);
256
+ fseek(ifp, 26 + row * raw_width / 4, SEEK_SET);
257
+ for (prow = pixel, i = 0; i < raw_width * 2; i++)
258
+ {
259
+ c = fgetc(ifp);
260
+ for (r = 0; r < 8; r += 2, prow++)
261
+ {
262
+ val = (*prow << 2) + ((c >> r) & 3);
263
+ if (raw_width == 2672 && val < 512)
264
+ val += 2;
265
+ *prow = val;
266
+ }
267
+ }
268
+ fseek(ifp, save, SEEK_SET);
269
+ }
270
+ }
271
+ }
272
+ catch (...)
273
+ {
274
+ FORC(2) free(huff[c]);
275
+ throw;
276
+ }
277
+ FORC(2) free(huff[c]);
278
+ }
279
+
280
+ int LibRaw::ljpeg_start(struct jhead *jh, int info_only)
281
+ {
282
+ ushort c, tag, len;
283
+ int cnt = 0;
284
+ std::vector<uchar> data_buffer(0x10000);
285
+ uchar* data = &data_buffer[0];
286
+ const uchar *dp;
287
+
288
+ memset(jh, 0, sizeof *jh);
289
+ jh->restart = INT_MAX;
290
+ if (fread(data, 2, 1, ifp) != 1 || data[1] != 0xd8)
291
+ return 0;
292
+ do
293
+ {
294
+ if (feof(ifp))
295
+ return 0;
296
+ if (cnt++ > 1024)
297
+ return 0; // 1024 tags limit
298
+ if (fread(data, 2, 2, ifp) != 2)
299
+ return 0;
300
+ tag = data[0] << 8 | data[1];
301
+ len = (data[2] << 8 | data[3]) - 2;
302
+ if (tag <= 0xff00)
303
+ return 0;
304
+ if (fread(data, 1, len, ifp) != len)
305
+ return 0;
306
+ switch (tag)
307
+ {
308
+ case 0xffc3: // start of frame; lossless, Huffman
309
+ jh->sraw = ((data[7] >> 4) * (data[7] & 15) - 1) & 3;
310
+ case 0xffc1:
311
+ case 0xffc0:
312
+ jh->algo = tag & 0xff;
313
+ jh->bits = data[0];
314
+ jh->high = data[1] << 8 | data[2];
315
+ jh->wide = data[3] << 8 | data[4];
316
+ jh->clrs = data[5] + jh->sraw;
317
+ if (len == 9 && !dng_version)
318
+ getc(ifp);
319
+ break;
320
+ case 0xffc4: // define Huffman tables
321
+ if (info_only)
322
+ break;
323
+ for (dp = data; dp < data + len && !((c = *dp++) & -20);)
324
+ jh->free[c] = jh->huff[c] = make_decoder_ref(&dp);
325
+ break;
326
+ case 0xffda: // start of scan
327
+ jh->psv = data[1 + data[0] * 2];
328
+ jh->bits -= data[3 + data[0] * 2] & 15;
329
+ break;
330
+ case 0xffdb:
331
+ FORC(64) jh->quant[c] = data[c * 2 + 1] << 8 | data[c * 2 + 2];
332
+ break;
333
+ case 0xffdd:
334
+ jh->restart = data[0] << 8 | data[1];
335
+ }
336
+ } while (tag != 0xffda);
337
+ if (jh->bits > 16 || jh->clrs > 6 || !jh->bits || !jh->high || !jh->wide ||
338
+ !jh->clrs)
339
+ return 0;
340
+ if (info_only)
341
+ return 1;
342
+ if (!jh->huff[0])
343
+ return 0;
344
+ FORC(19) if (!jh->huff[c + 1]) jh->huff[c + 1] = jh->huff[c];
345
+ if (jh->sraw)
346
+ {
347
+ FORC(4) jh->huff[2 + c] = jh->huff[1];
348
+ FORC(jh->sraw) jh->huff[1 + c] = jh->huff[0];
349
+ }
350
+ jh->row = (ushort *)calloc(jh->wide * jh->clrs, 16);
351
+ return zero_after_ff = 1;
352
+ }
353
+
354
+ void LibRaw::ljpeg_end(struct jhead *jh)
355
+ {
356
+ int c;
357
+ FORC4 if (jh->free[c]) free(jh->free[c]);
358
+ free(jh->row);
359
+ }
360
+
361
+ int LibRaw::ljpeg_diff(ushort *huff)
362
+ {
363
+ int len, diff;
364
+ if (!huff)
365
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
366
+
367
+ len = gethuff(huff);
368
+ if (len == 16 && (!dng_version || dng_version >= 0x1010000))
369
+ return -32768;
370
+ diff = getbits(len);
371
+
372
+
373
+ if ((diff & (1 << (len - 1))) == 0)
374
+ diff -= (1 << len) - 1;
375
+ return diff;
376
+ }
377
+
378
+ ushort *LibRaw::ljpeg_row(int jrow, struct jhead *jh)
379
+ {
380
+ int col, c, diff, pred, spred = 0;
381
+ ushort mark = 0, *row[3];
382
+
383
+ // Use the optimized, unrolled version if possible.
384
+ if (!jh->sraw)
385
+ return ljpeg_row_unrolled(jrow, jh);
386
+
387
+ if (jh->restart != 0 && jrow * jh->wide % jh->restart == 0)
388
+ {
389
+ FORC(6) jh->vpred[c] = 1 << (jh->bits - 1);
390
+ if (jrow)
391
+ {
392
+ fseek(ifp, -2, SEEK_CUR);
393
+ do
394
+ mark = (mark << 8) + (c = fgetc(ifp));
395
+ while (c != EOF && mark >> 4 != 0xffd);
396
+ }
397
+ getbits(-1);
398
+ }
399
+ FORC3 row[c] = jh->row + jh->wide * jh->clrs * ((jrow + c) & 1);
400
+ for (col = 0; col < jh->wide; col++)
401
+ FORC(jh->clrs)
402
+ {
403
+ diff = ljpeg_diff(jh->huff[c]);
404
+ if (jh->sraw && c <= jh->sraw && (col | c))
405
+ pred = spred;
406
+ else if (col)
407
+ pred = row[0][-jh->clrs];
408
+ else
409
+ pred = (jh->vpred[c] += diff) - diff;
410
+ if (jrow && col)
411
+ switch (jh->psv)
412
+ {
413
+ case 1:
414
+ break;
415
+ case 2:
416
+ pred = row[1][0];
417
+ break;
418
+ case 3:
419
+ pred = row[1][-jh->clrs];
420
+ break;
421
+ case 4:
422
+ pred = pred + row[1][0] - row[1][-jh->clrs];
423
+ break;
424
+ case 5:
425
+ pred = pred + ((row[1][0] - row[1][-jh->clrs]) >> 1);
426
+ break;
427
+ case 6:
428
+ pred = row[1][0] + ((pred - row[1][-jh->clrs]) >> 1);
429
+ break;
430
+ case 7:
431
+ pred = (pred + row[1][0]) >> 1;
432
+ break;
433
+ default:
434
+ pred = 0;
435
+ }
436
+ if ((**row = pred + diff) >> jh->bits)
437
+ if(!(load_flags & 512))
438
+ derror();
439
+ if (c <= jh->sraw)
440
+ spred = **row;
441
+ row[0]++;
442
+ row[1]++;
443
+ }
444
+ return row[2];
445
+ }
446
+
447
+ ushort *LibRaw::ljpeg_row_unrolled(int jrow, struct jhead *jh)
448
+ {
449
+ int col, c, diff, pred;
450
+ ushort mark = 0, *row[3];
451
+
452
+ if (jh->restart != 0 && jrow * jh->wide % jh->restart == 0)
453
+ {
454
+ FORC(6) jh->vpred[c] = 1 << (jh->bits - 1);
455
+ if (jrow)
456
+ {
457
+ fseek(ifp, -2, SEEK_CUR);
458
+ do
459
+ mark = (mark << 8) + (c = fgetc(ifp));
460
+ while (c != EOF && mark >> 4 != 0xffd);
461
+ }
462
+ getbits(-1);
463
+ }
464
+ FORC3 row[c] = jh->row + jh->wide * jh->clrs * ((jrow + c) & 1);
465
+
466
+ // The first column uses one particular predictor.
467
+ FORC(jh->clrs)
468
+ {
469
+ diff = ljpeg_diff(jh->huff[c]);
470
+ pred = (jh->vpred[c] += diff) - diff;
471
+ if ((**row = pred + diff) >> jh->bits)
472
+ derror();
473
+ row[0]++;
474
+ row[1]++;
475
+ }
476
+
477
+ if (!jrow)
478
+ {
479
+ for (col = 1; col < jh->wide; col++)
480
+ FORC(jh->clrs)
481
+ {
482
+ diff = ljpeg_diff(jh->huff[c]);
483
+ pred = row[0][-jh->clrs];
484
+ if ((**row = pred + diff) >> jh->bits)
485
+ derror();
486
+ row[0]++;
487
+ row[1]++;
488
+ }
489
+ }
490
+ else if (jh->psv == 1)
491
+ {
492
+ for (col = 1; col < jh->wide; col++)
493
+ FORC(jh->clrs)
494
+ {
495
+ diff = ljpeg_diff(jh->huff[c]);
496
+ pred = row[0][-jh->clrs];
497
+ if ((**row = pred + diff) >> jh->bits)
498
+ derror();
499
+ row[0]++;
500
+ }
501
+ }
502
+ else
503
+ {
504
+ for (col = 1; col < jh->wide; col++)
505
+ FORC(jh->clrs)
506
+ {
507
+ diff = ljpeg_diff(jh->huff[c]);
508
+ pred = row[0][-jh->clrs];
509
+ switch (jh->psv)
510
+ {
511
+ case 1:
512
+ break;
513
+ case 2:
514
+ pred = row[1][0];
515
+ break;
516
+ case 3:
517
+ pred = row[1][-jh->clrs];
518
+ break;
519
+ case 4:
520
+ pred = pred + row[1][0] - row[1][-jh->clrs];
521
+ break;
522
+ case 5:
523
+ pred = pred + ((row[1][0] - row[1][-jh->clrs]) >> 1);
524
+ break;
525
+ case 6:
526
+ pred = row[1][0] + ((pred - row[1][-jh->clrs]) >> 1);
527
+ break;
528
+ case 7:
529
+ pred = (pred + row[1][0]) >> 1;
530
+ break;
531
+ default:
532
+ pred = 0;
533
+ }
534
+ if ((**row = pred + diff) >> jh->bits)
535
+ derror();
536
+ row[0]++;
537
+ row[1]++;
538
+ }
539
+ }
540
+ return row[2];
541
+ }
542
+
543
+ void LibRaw::lossless_jpeg_load_raw()
544
+ {
545
+ int jwide, jhigh, jrow, jcol, val, jidx, i, j, row = 0, col = 0;
546
+ struct jhead jh;
547
+ ushort *rp;
548
+
549
+ if (!ljpeg_start(&jh, 0))
550
+ return;
551
+
552
+ if (jh.wide < 1 || jh.high < 1 || jh.clrs < 1 || jh.bits < 1)
553
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
554
+
555
+ if(cr2_slice[0] && !cr2_slice[1])
556
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
557
+
558
+ jwide = jh.wide * jh.clrs;
559
+ jhigh = jh.high;
560
+ if (jh.clrs == 4 && jwide >= raw_width * 2)
561
+ jhigh *= 2;
562
+
563
+ try
564
+ {
565
+ for (jrow = 0; jrow < jh.high; jrow++)
566
+ {
567
+ checkCancel();
568
+ rp = ljpeg_row(jrow, &jh);
569
+ if (load_flags & 1)
570
+ row = jrow & 1 ? height - 1 - jrow / 2 : jrow / 2;
571
+ for (jcol = 0; jcol < jwide; jcol++)
572
+ {
573
+ val = curve[*rp++];
574
+ if (cr2_slice[0])
575
+ {
576
+ jidx = jrow * jwide + jcol;
577
+ i = jidx / (cr2_slice[1] * raw_height);
578
+ if ((j = i >= cr2_slice[0]))
579
+ i = cr2_slice[0];
580
+ if(!cr2_slice[1+j])
581
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
582
+
583
+ jidx -= i * (cr2_slice[1] * raw_height);
584
+ row = jidx / cr2_slice[1 + j];
585
+ col = jidx % cr2_slice[1 + j] + i * cr2_slice[1];
586
+ }
587
+ if (raw_width == 3984 && (col -= 2) < 0)
588
+ col += (row--, raw_width);
589
+ if (row > raw_height)
590
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
591
+ if ((unsigned)row < raw_height)
592
+ RAW(row, col) = val;
593
+ if (++col >= raw_width)
594
+ col = (row++, 0);
595
+ }
596
+ }
597
+ }
598
+ catch (...)
599
+ {
600
+ ljpeg_end(&jh);
601
+ throw;
602
+ }
603
+ ljpeg_end(&jh);
604
+ }
605
+
606
+ void LibRaw::canon_sraw_load_raw()
607
+ {
608
+ struct jhead jh;
609
+ short *rp = 0, (*ip)[4];
610
+ int jwide, slice, scol, ecol, row, col, jrow = 0, jcol = 0, pix[3], c;
611
+ int v[3] = {0, 0, 0}, ver, hue;
612
+ int saved_w = width, saved_h = height;
613
+ char *cp;
614
+
615
+ if(!image)
616
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
617
+
618
+ if (!ljpeg_start(&jh, 0) || jh.clrs < 4)
619
+ return;
620
+ jwide = (jh.wide >>= 1) * jh.clrs;
621
+
622
+ if (jwide < 32 || jwide > 65535)
623
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
624
+
625
+ if (load_flags & 256)
626
+ {
627
+ width = raw_width;
628
+ height = raw_height;
629
+ }
630
+
631
+ try
632
+ {
633
+ for (ecol = slice = 0; slice <= cr2_slice[0]; slice++)
634
+ {
635
+ scol = ecol;
636
+ ecol += cr2_slice[1] * 2 / jh.clrs;
637
+ if (!cr2_slice[0] || ecol > raw_width - 1)
638
+ ecol = raw_width & -2;
639
+ for (row = 0; row < height; row += (jh.clrs >> 1) - 1)
640
+ {
641
+ checkCancel();
642
+ ip = (short(*)[4])image + row * width;
643
+ for (col = scol; col < ecol; col += 2, jcol += jh.clrs)
644
+ {
645
+ if ((jcol %= jwide) == 0)
646
+ rp = (short *)ljpeg_row(jrow++, &jh);
647
+ if (col >= width)
648
+ continue;
649
+ if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SRAW_NO_INTERPOLATE)
650
+ {
651
+ FORC(jh.clrs - 2)
652
+ {
653
+ ip[col + (c >> 1) * width + (c & 1)][0] = rp[jcol + c];
654
+ ip[col + (c >> 1) * width + (c & 1)][1] =
655
+ ip[col + (c >> 1) * width + (c & 1)][2] = 8192;
656
+ }
657
+ ip[col][1] = rp[jcol + jh.clrs - 2] - 8192;
658
+ ip[col][2] = rp[jcol + jh.clrs - 1] - 8192;
659
+ }
660
+ else if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SRAW_NO_RGB)
661
+ {
662
+ FORC(jh.clrs - 2)
663
+ ip[col + (c >> 1) * width + (c & 1)][0] = rp[jcol + c];
664
+ ip[col][1] = rp[jcol + jh.clrs - 2] - 8192;
665
+ ip[col][2] = rp[jcol + jh.clrs - 1] - 8192;
666
+ }
667
+ else
668
+ {
669
+ FORC(jh.clrs - 2)
670
+ ip[col + (c >> 1) * width + (c & 1)][0] = rp[jcol + c];
671
+ ip[col][1] = rp[jcol + jh.clrs - 2] - 16384;
672
+ ip[col][2] = rp[jcol + jh.clrs - 1] - 16384;
673
+ }
674
+ }
675
+ }
676
+ }
677
+ }
678
+ catch (...)
679
+ {
680
+ ljpeg_end(&jh);
681
+ throw;
682
+ }
683
+
684
+ if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SRAW_NO_INTERPOLATE)
685
+ {
686
+ ljpeg_end(&jh);
687
+ maximum = 0x3fff;
688
+ height = saved_h;
689
+ width = saved_w;
690
+ return;
691
+ }
692
+
693
+ try
694
+ {
695
+ for (cp = model2; *cp && !isdigit(*cp); cp++)
696
+ ;
697
+ sscanf(cp, "%d.%d.%d", v, v + 1, v + 2);
698
+ ver = (v[0] * 1000 + v[1]) * 1000 + v[2];
699
+ hue = (jh.sraw + 1) << 2;
700
+ if (unique_id >= 0x80000281ULL ||
701
+ (unique_id == 0x80000218ULL && ver > 1000006))
702
+ hue = jh.sraw << 1;
703
+ ip = (short(*)[4])image;
704
+ rp = ip[0];
705
+ for (row = 0; row < height; row++, ip += width)
706
+ {
707
+ checkCancel();
708
+ if (row & (jh.sraw >> 1))
709
+ {
710
+ for (col = 0; col < width; col += 2)
711
+ for (c = 1; c < 3; c++)
712
+ if (row == height - 1)
713
+ {
714
+ ip[col][c] = ip[col - width][c];
715
+ }
716
+ else
717
+ {
718
+ ip[col][c] = (ip[col - width][c] + ip[col + width][c] + 1) >> 1;
719
+ }
720
+ }
721
+ for (col = 1; col < width; col += 2)
722
+ for (c = 1; c < 3; c++)
723
+ if (col == width - 1)
724
+ ip[col][c] = ip[col - 1][c];
725
+ else
726
+ ip[col][c] = (ip[col - 1][c] + ip[col + 1][c] + 1) >> 1;
727
+ }
728
+ if (!(imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SRAW_NO_RGB))
729
+ for (; rp < ip[0]; rp += 4)
730
+ {
731
+ checkCancel();
732
+ if ((unique_id == CanonID_EOS_5D_Mark_II) ||
733
+ (unique_id == CanonID_EOS_7D) ||
734
+ (unique_id == CanonID_EOS_50D) ||
735
+ (unique_id == CanonID_EOS_1D_Mark_IV) ||
736
+ (unique_id == CanonID_EOS_60D))
737
+ {
738
+ rp[1] = (rp[1] << 2) + hue;
739
+ rp[2] = (rp[2] << 2) + hue;
740
+ pix[0] = rp[0] + ((50 * rp[1] + 22929 * rp[2]) >> 14);
741
+ pix[1] = rp[0] + ((-5640 * rp[1] - 11751 * rp[2]) >> 14);
742
+ pix[2] = rp[0] + ((29040 * rp[1] - 101 * rp[2]) >> 14);
743
+ }
744
+ else
745
+ {
746
+ if (unique_id < CanonID_EOS_5D_Mark_II)
747
+ rp[0] -= 512;
748
+ pix[0] = rp[0] + rp[2];
749
+ pix[2] = rp[0] + rp[1];
750
+ pix[1] = rp[0] + ((-778 * rp[1] - (rp[2] << 11)) >> 12);
751
+ }
752
+ FORC3 rp[c] = CLIP15(pix[c] * sraw_mul[c] >> 10);
753
+ }
754
+ }
755
+ catch (...)
756
+ {
757
+ ljpeg_end(&jh);
758
+ throw;
759
+ }
760
+ height = saved_h;
761
+ width = saved_w;
762
+ ljpeg_end(&jh);
763
+ maximum = 0x3fff;
764
+ }
765
+
766
+ void LibRaw::ljpeg_idct(struct jhead *jh)
767
+ {
768
+ int c, i, j, len, skip, coef;
769
+ float work[3][8][8];
770
+ static float cs[106] = {0};
771
+ static const uchar zigzag[80] = {
772
+ 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
773
+ 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
774
+ 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
775
+ 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63,
776
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63};
777
+
778
+ if (!cs[0])
779
+ FORC(106) cs[c] = cos((c & 31) * M_PI / 16) / 2;
780
+ memset(work, 0, sizeof work);
781
+ work[0][0][0] = jh->vpred[0] += ljpeg_diff(jh->huff[0]) * jh->quant[0];
782
+ for (i = 1; i < 64; i++)
783
+ {
784
+ len = gethuff(jh->huff[16]);
785
+ i += skip = len >> 4;
786
+ if (!(len &= 15) && skip < 15)
787
+ break;
788
+ coef = getbits(len);
789
+ if ((coef & (1 << (len - 1))) == 0)
790
+ coef -= (1 << len) - 1;
791
+ ((float *)work)[zigzag[i]] = coef * jh->quant[i];
792
+ }
793
+ FORC(8) work[0][0][c] *= float(M_SQRT1_2);
794
+ FORC(8) work[0][c][0] *= float(M_SQRT1_2);
795
+ for (i = 0; i < 8; i++)
796
+ for (j = 0; j < 8; j++)
797
+ FORC(8) work[1][i][j] += work[0][i][c] * cs[(j * 2 + 1) * c];
798
+ for (i = 0; i < 8; i++)
799
+ for (j = 0; j < 8; j++)
800
+ FORC(8) work[2][i][j] += work[1][c][j] * cs[(i * 2 + 1) * c];
801
+
802
+ FORC(64) jh->idct[c] = CLIP(((float *)work[2])[c] + 0.5);
803
+ }
804
+
805
+ void LibRaw::pentax_load_raw()
806
+ {
807
+ ushort bit[2][15], huff[4097];
808
+ int dep, row, col, diff, c, i;
809
+ ushort vpred[2][2] = {{0, 0}, {0, 0}}, hpred[2];
810
+
811
+ fseek(ifp, meta_offset, SEEK_SET);
812
+ dep = (get2() + 12) & 15;
813
+ fseek(ifp, 12, SEEK_CUR);
814
+ FORC(dep) bit[0][c] = get2();
815
+ FORC(dep) bit[1][c] = fgetc(ifp);
816
+ FORC(dep)
817
+ for (i = bit[0][c]; i <= ((bit[0][c] + (4096 >> bit[1][c]) - 1) & 4095);)
818
+ huff[++i] = bit[1][c] << 8 | c;
819
+ huff[0] = 12;
820
+ fseek(ifp, data_offset, SEEK_SET);
821
+ getbits(-1);
822
+ for (row = 0; row < raw_height; row++)
823
+ {
824
+ checkCancel();
825
+ for (col = 0; col < raw_width; col++)
826
+ {
827
+ diff = ljpeg_diff(huff);
828
+ if (col < 2)
829
+ hpred[col] = vpred[row & 1][col] += diff;
830
+ else
831
+ hpred[col & 1] += diff;
832
+ RAW(row, col) = hpred[col & 1];
833
+ if (hpred[col & 1] >> tiff_bps)
834
+ derror();
835
+ }
836
+ }
837
+ }
838
+ void LibRaw::nikon_read_curve()
839
+ {
840
+ ushort ver0, ver1, vpred[2][2], csize;
841
+ int i, step, max;
842
+
843
+ fseek(ifp, meta_offset, SEEK_SET);
844
+ ver0 = fgetc(ifp);
845
+ ver1 = fgetc(ifp);
846
+ if (ver0 == 0x49 || ver1 == 0x58)
847
+ fseek(ifp, 2110, SEEK_CUR);
848
+ read_shorts(vpred[0], 4);
849
+ step = max = 1 << tiff_bps & 0x7fff;
850
+ if ((csize = get2()) > 1)
851
+ step = max / (csize - 1);
852
+ if (ver0 == 0x44 && (ver1 == 0x20 || (ver1 == 0x40 && step > 3)) && step > 0)
853
+ {
854
+ if (ver1 == 0x40)
855
+ {
856
+ step /= 4;
857
+ max /= 4;
858
+ }
859
+ for (i = 0; i < csize; i++)
860
+ curve[i * step] = get2();
861
+ for (i = 0; i < max; i++)
862
+ curve[i] = (curve[i - i % step] * (step - i % step) +
863
+ curve[i - i % step + step] * (i % step)) /
864
+ step;
865
+ }
866
+ else if (ver0 != 0x46 && csize <= 0x4001)
867
+ read_shorts(curve, max = csize);
868
+ }
869
+
870
+ void LibRaw::nikon_load_raw()
871
+ {
872
+ static const uchar nikon_tree[][32] = {
873
+ {0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, /* 12-bit lossy */
874
+ 5, 4, 3, 6, 2, 7, 1, 0, 8, 9, 11, 10, 12},
875
+ {0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0,
876
+ 0, 0, /* 12-bit lossy after split */
877
+ 0x39, 0x5a, 0x38, 0x27, 0x16, 5, 4, 3, 2, 1, 0, 11, 12, 12},
878
+
879
+ {0, 1, 4, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 12-bit lossless */
880
+ 5, 4, 6, 3, 7, 2, 8, 1, 9, 0, 10, 11, 12},
881
+ {0, 1, 4, 3, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, /* 14-bit lossy */
882
+ 5, 6, 4, 7, 8, 3, 9, 2, 1, 0, 10, 11, 12, 13, 14},
883
+ {0, 1, 5, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0,
884
+ 0, /* 14-bit lossy after split */
885
+ 8, 0x5c, 0x4b, 0x3a, 0x29, 7, 6, 5, 4, 3, 2, 1, 0, 13, 14},
886
+ {0, 1, 4, 2, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, /* 14-bit lossless */
887
+ 7, 6, 8, 5, 9, 4, 10, 3, 11, 12, 2, 0, 1, 13, 14}};
888
+ ushort *huff, ver0, ver1, vpred[2][2], hpred[2];
889
+ int i, min, max, tree = 0, split = 0, row, col, len, shl, diff;
890
+
891
+ fseek(ifp, meta_offset, SEEK_SET);
892
+ ver0 = fgetc(ifp);
893
+ ver1 = fgetc(ifp);
894
+ if (ver0 == 0x49 || ver1 == 0x58)
895
+ fseek(ifp, 2110, SEEK_CUR);
896
+ if (ver0 == 0x46)
897
+ tree = 2;
898
+ if (tiff_bps == 14)
899
+ tree += 3;
900
+ read_shorts(vpred[0], 4);
901
+ max = 1 << tiff_bps & 0x7fff;
902
+ if (ver0 == 0x44 && (ver1 == 0x20 || ver1 == 0x40))
903
+ {
904
+ if (ver1 == 0x40)
905
+ max /= 4;
906
+ fseek(ifp, meta_offset + 562, SEEK_SET);
907
+ split = get2();
908
+ }
909
+
910
+ while (max > 2 && (curve[max - 2] == curve[max - 1]))
911
+ max--;
912
+ huff = make_decoder(nikon_tree[tree]);
913
+ fseek(ifp, data_offset, SEEK_SET);
914
+ getbits(-1);
915
+ try
916
+ {
917
+ for (min = row = 0; row < height; row++)
918
+ {
919
+ checkCancel();
920
+ if (split && row == split)
921
+ {
922
+ free(huff);
923
+ huff = make_decoder(nikon_tree[tree + 1]);
924
+ max += (min = 16) << 1;
925
+ }
926
+ for (col = 0; col < raw_width; col++)
927
+ {
928
+ i = gethuff(huff);
929
+ len = i & 15;
930
+ shl = i >> 4;
931
+ diff = ((getbits(len - shl) << 1) + 1) << shl >> 1;
932
+ if (len > 0 && (diff & (1 << (len - 1))) == 0)
933
+ diff -= (1 << len) - !shl;
934
+ if (col < 2)
935
+ hpred[col] = vpred[row & 1][col] += diff;
936
+ else
937
+ hpred[col & 1] += diff;
938
+ if ((ushort)(hpred[col & 1] + min) >= max)
939
+ derror();
940
+ RAW(row, col) = curve[LIM((short)hpred[col & 1], 0, 0x3fff)];
941
+ }
942
+ }
943
+ }
944
+ catch (...)
945
+ {
946
+ free(huff);
947
+ throw;
948
+ }
949
+ free(huff);
950
+ }
951
+
952
+ void LibRaw::nikon_yuv_load_raw()
953
+ {
954
+ if (!image)
955
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
956
+ int row, col, yuv[4]={0,0,0,0}, rgb[3], b, c;
957
+ UINT64 bitbuf = 0;
958
+ float cmul[4];
959
+ FORC4 { cmul[c] = cam_mul[c] > 0.001f ? cam_mul[c] : 1.f; }
960
+ for (row = 0; row < raw_height; row++)
961
+ {
962
+ checkCancel();
963
+
964
+ for (col = 0; col < raw_width; col++)
965
+ {
966
+ if (!(b = col & 1))
967
+ {
968
+ bitbuf = 0;
969
+ FORC(6) bitbuf |= (UINT64)fgetc(ifp) << c * 8;
970
+ FORC(4) yuv[c] = (bitbuf >> c * 12 & 0xfff) - (c >> 1 << 11);
971
+ }
972
+ rgb[0] = yuv[b] + 1.370705 * yuv[3];
973
+ rgb[1] = yuv[b] - 0.337633 * yuv[2] - 0.698001 * yuv[3];
974
+ rgb[2] = yuv[b] + 1.732446 * yuv[2];
975
+ FORC3 image[row * width + col][c] =
976
+ curve[LIM(rgb[c], 0, 0xfff)] / cmul[c];
977
+ }
978
+ }
979
+ }
980
+
981
+ void LibRaw::rollei_load_raw()
982
+ {
983
+ uchar pixel[10];
984
+ unsigned iten = 0, isix, i, buffer = 0, todo[16];
985
+ if (raw_width > 32767 || raw_height > 32767)
986
+ throw LIBRAW_EXCEPTION_IO_BADFILE;
987
+ unsigned maxpixel = raw_width * (raw_height + 7);
988
+
989
+ isix = raw_width * raw_height * 5 / 8;
990
+ while (fread(pixel, 1, 10, ifp) == 10)
991
+ {
992
+ checkCancel();
993
+ for (i = 0; i < 10; i += 2)
994
+ {
995
+ todo[i] = iten++;
996
+ todo[i + 1] = pixel[i] << 8 | pixel[i + 1];
997
+ buffer = pixel[i] >> 2 | buffer << 6;
998
+ }
999
+ for (; i < 16; i += 2)
1000
+ {
1001
+ todo[i] = isix++;
1002
+ todo[i + 1] = buffer >> (14 - i) * 5;
1003
+ }
1004
+ for (i = 0; i < 16; i += 2)
1005
+ if (todo[i] < maxpixel)
1006
+ raw_image[todo[i]] = (todo[i + 1] & 0x3ff);
1007
+ else
1008
+ derror();
1009
+ }
1010
+ maximum = 0x3ff;
1011
+ }
1012
+
1013
+ void LibRaw::nokia_load_raw()
1014
+ {
1015
+ uchar *dp;
1016
+ int rev, dwide, row, col, c;
1017
+ double sum[] = {0, 0};
1018
+
1019
+ rev = 3 * (order == 0x4949);
1020
+ dwide = (raw_width * 5 + 1) / 4;
1021
+ #ifdef USE_6BY9RPI
1022
+ if (raw_stride)
1023
+ dwide = raw_stride;
1024
+ #endif
1025
+ std::vector<uchar> data(dwide * 2 + 4,0);
1026
+ for (row = 0; row < raw_height; row++)
1027
+ {
1028
+ checkCancel();
1029
+ if (fread(data.data() + dwide, 1, dwide, ifp) < dwide)
1030
+ derror();
1031
+ FORC(dwide) data[c] = data[dwide + (c ^ rev)];
1032
+ for (dp = data.data(), col = 0; col < raw_width; dp += 5, col += 4)
1033
+ FORC4 RAW(row, col + c) = (dp[c] << 2) | (dp[4] >> (c << 1) & 3);
1034
+ }
1035
+ maximum = 0x3ff;
1036
+ #ifdef USE_6BY9RPI
1037
+ if (!strcmp(make, "OmniVision") ||
1038
+ !strcmp(make, "Sony") ||
1039
+ !strcmp(make, "RaspberryPi")) return;
1040
+ #else
1041
+ if (strncmp(make, "OmniVision", 10))
1042
+ return;
1043
+ #endif
1044
+ row = raw_height / 2;
1045
+ FORC(width - 1)
1046
+ {
1047
+ sum[c & 1] += SQR(RAW(row, c) - RAW(row + 1, c + 1));
1048
+ sum[~c & 1] += SQR(RAW(row + 1, c) - RAW(row, c + 1));
1049
+ }
1050
+ if (sum[1] > sum[0])
1051
+ filters = 0x4b4b4b4b;
1052
+ }
1053
+
1054
+ #ifdef LIBRAW_OLD_VIDEO_SUPPORT
1055
+
1056
+ void LibRaw::canon_rmf_load_raw()
1057
+ {
1058
+ int row, col, bits, orow, ocol, c;
1059
+
1060
+ int *words = (int *)malloc(sizeof(int) * (raw_width / 3 + 1));
1061
+ for (row = 0; row < raw_height; row++)
1062
+ {
1063
+ checkCancel();
1064
+ fread(words, sizeof(int), raw_width / 3, ifp);
1065
+ for (col = 0; col < raw_width - 2; col += 3)
1066
+ {
1067
+ bits = words[col / 3];
1068
+ FORC3
1069
+ {
1070
+ orow = row;
1071
+ if ((ocol = col + c - 4) < 0)
1072
+ {
1073
+ ocol += raw_width;
1074
+ if ((orow -= 2) < 0)
1075
+ orow += raw_height;
1076
+ }
1077
+ RAW(orow, ocol) = curve[bits >> (10 * c + 2) & 0x3ff];
1078
+ }
1079
+ }
1080
+ }
1081
+ free(words);
1082
+ maximum = curve[0x3ff];
1083
+ }
1084
+ #endif
1085
+
1086
+ unsigned LibRaw::pana_data(int nb, unsigned *bytes)
1087
+ {
1088
+ #ifndef LIBRAW_NOTHREADS
1089
+ #define vpos tls->pana_data.vpos
1090
+ #define buf tls->pana_data.buf
1091
+ #else
1092
+ static uchar buf[0x4002];
1093
+ static int vpos;
1094
+ #endif
1095
+ int byte;
1096
+
1097
+ if (!nb && !bytes)
1098
+ {
1099
+ memset(buf, 0, sizeof(buf));
1100
+ return vpos = 0;
1101
+ }
1102
+ if (load_flags > 0x4000)
1103
+ throw LIBRAW_EXCEPTION_IO_BADFILE;
1104
+
1105
+ if (!vpos)
1106
+ {
1107
+ if(load_flags < 0x4000)
1108
+ fread(buf + load_flags, 1, 0x4000 - load_flags, ifp);
1109
+ fread(buf, 1, load_flags, ifp);
1110
+ }
1111
+
1112
+ if (pana_encoding == 5)
1113
+ {
1114
+ for (byte = 0; byte < 16; byte++)
1115
+ {
1116
+ bytes[byte] = buf[vpos++];
1117
+ vpos &= 0x3FFF;
1118
+ }
1119
+ }
1120
+ else
1121
+ {
1122
+ vpos = (vpos - nb) & 0x1ffff;
1123
+ byte = vpos >> 3 ^ 0x3ff0;
1124
+ return (buf[byte] | buf[byte + 1] << 8) >> (vpos & 7) & ~((~0u) << nb);
1125
+ }
1126
+ return 0;
1127
+ #ifndef LIBRAW_NOTHREADS
1128
+ #undef vpos
1129
+ #undef buf
1130
+ #endif
1131
+ }
1132
+
1133
+ void LibRaw::panasonic_load_raw()
1134
+ {
1135
+ int row, col, i, j, sh = 0, pred[2], nonz[2];
1136
+ unsigned bytes[16];
1137
+ memset(bytes,0,sizeof(bytes)); // make gcc11 happy
1138
+ ushort *raw_block_data;
1139
+
1140
+ pana_data(0, 0);
1141
+
1142
+ int enc_blck_size = pana_bpp == 12 ? 10 : 9;
1143
+ if (pana_encoding == 5)
1144
+ {
1145
+ for (row = 0; row < raw_height; row++)
1146
+ {
1147
+ raw_block_data = raw_image + row * raw_width;
1148
+ checkCancel();
1149
+ for (col = 0; col < raw_width; col += enc_blck_size)
1150
+ {
1151
+ pana_data(0, bytes);
1152
+
1153
+ if (pana_bpp == 12)
1154
+ {
1155
+ raw_block_data[col] = ((bytes[1] & 0xF) << 8) + bytes[0];
1156
+ raw_block_data[col + 1] = 16 * bytes[2] + (bytes[1] >> 4);
1157
+ raw_block_data[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
1158
+ raw_block_data[col + 3] = 16 * bytes[5] + (bytes[4] >> 4);
1159
+ raw_block_data[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
1160
+ raw_block_data[col + 5] = 16 * bytes[8] + (bytes[7] >> 4);
1161
+ raw_block_data[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
1162
+ raw_block_data[col + 7] = 16 * bytes[11] + (bytes[10] >> 4);
1163
+ raw_block_data[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
1164
+ raw_block_data[col + 9] = 16 * bytes[14] + (bytes[13] >> 4);
1165
+ }
1166
+ else if (pana_bpp == 14)
1167
+ {
1168
+ raw_block_data[col] = bytes[0] + ((bytes[1] & 0x3F) << 8);
1169
+ raw_block_data[col + 1] =
1170
+ (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
1171
+ raw_block_data[col + 2] =
1172
+ (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
1173
+ raw_block_data[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
1174
+ raw_block_data[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
1175
+ raw_block_data[col + 5] =
1176
+ (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
1177
+ raw_block_data[col + 6] =
1178
+ (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
1179
+ raw_block_data[col + 7] =
1180
+ ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
1181
+ raw_block_data[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
1182
+ }
1183
+ }
1184
+ }
1185
+ }
1186
+ else
1187
+ {
1188
+ if (load_flags >= 0x4000)
1189
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1190
+ for (row = 0; row < raw_height; row++)
1191
+ {
1192
+ checkCancel();
1193
+ for (col = 0; col < raw_width; col++)
1194
+ {
1195
+ if ((i = col % 14) == 0)
1196
+ pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
1197
+ if (i % 3 == 2)
1198
+ sh = 4 >> (3 - pana_data(2, 0));
1199
+ if (nonz[i & 1])
1200
+ {
1201
+ if ((j = pana_data(8, 0)))
1202
+ {
1203
+ if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4)
1204
+ pred[i & 1] &= ~((~0u) << sh);
1205
+ pred[i & 1] += j << sh;
1206
+ }
1207
+ }
1208
+ else if ((nonz[i & 1] = pana_data(8, 0)) || i > 11)
1209
+ pred[i & 1] = nonz[i & 1] << 4 | pana_data(4, 0);
1210
+ if ((RAW(row, col) = pred[col & 1]) > 4098 && col < width &&
1211
+ row < height)
1212
+ derror();
1213
+ }
1214
+ }
1215
+ }
1216
+ }
1217
+
1218
+ void LibRaw::olympus_load_raw()
1219
+ {
1220
+ ushort huff[4096];
1221
+ int row, col, nbits, sign, low, high, i, c, w, n, nw;
1222
+ int acarry[2][3], *carry, pred, diff;
1223
+
1224
+ huff[n = 0] = 0xc0c;
1225
+ for (i = 12; i--;)
1226
+ FORC(2048 >> i) huff[++n] = (i + 1) << 8 | i;
1227
+ fseek(ifp, 7, SEEK_CUR);
1228
+ getbits(-1);
1229
+ for (row = 0; row < height; row++)
1230
+ {
1231
+ checkCancel();
1232
+ memset(acarry, 0, sizeof acarry);
1233
+ for (col = 0; col < raw_width; col++)
1234
+ {
1235
+ carry = acarry[col & 1];
1236
+ i = 2 * (carry[2] < 3);
1237
+ for (nbits = 2 + i; (ushort)carry[0] >> (nbits + i); nbits++)
1238
+ ;
1239
+ low = (sign = getbits(3)) & 3;
1240
+ sign = sign << 29 >> 31;
1241
+ if ((high = getbithuff(12, huff)) == 12)
1242
+ high = getbits(16 - nbits) >> 1;
1243
+ carry[0] = (high << nbits) | getbits(nbits);
1244
+ diff = (carry[0] ^ sign) + carry[1];
1245
+ carry[1] = (diff * 3 + carry[1]) >> 5;
1246
+ carry[2] = carry[0] > 16 ? 0 : carry[2] + 1;
1247
+ if (col >= width)
1248
+ continue;
1249
+ if (row < 2 && col < 2)
1250
+ pred = 0;
1251
+ else if (row < 2)
1252
+ pred = RAW(row, col - 2);
1253
+ else if (col < 2)
1254
+ pred = RAW(row - 2, col);
1255
+ else
1256
+ {
1257
+ w = RAW(row, col - 2);
1258
+ n = RAW(row - 2, col);
1259
+ nw = RAW(row - 2, col - 2);
1260
+ if ((w < nw && nw < n) || (n < nw && nw < w))
1261
+ {
1262
+ if (ABS(w - nw) > 32 || ABS(n - nw) > 32)
1263
+ pred = w + n - nw;
1264
+ else
1265
+ pred = (w + n) >> 1;
1266
+ }
1267
+ else
1268
+ pred = ABS(w - nw) > ABS(n - nw) ? w : n;
1269
+ }
1270
+ if ((RAW(row, col) = pred + ((diff << 2) | low)) >> 12)
1271
+ derror();
1272
+ }
1273
+ }
1274
+ }
1275
+
1276
+ void LibRaw::minolta_rd175_load_raw()
1277
+ {
1278
+ uchar pixel[768];
1279
+ unsigned irow, box, row, col;
1280
+
1281
+ for (irow = 0; irow < 1481; irow++)
1282
+ {
1283
+ checkCancel();
1284
+ if (fread(pixel, 1, 768, ifp) < 768)
1285
+ derror();
1286
+ box = irow / 82;
1287
+ row = irow % 82 * 12 + ((box < 12) ? box | 1 : (box - 12) * 2);
1288
+ switch (irow)
1289
+ {
1290
+ case 1477:
1291
+ case 1479:
1292
+ continue;
1293
+ case 1476:
1294
+ row = 984;
1295
+ break;
1296
+ case 1480:
1297
+ row = 985;
1298
+ break;
1299
+ case 1478:
1300
+ row = 985;
1301
+ box = 1;
1302
+ }
1303
+ if ((box < 12) && (box & 1))
1304
+ {
1305
+ for (col = 0; col < 1533; col++, row ^= 1)
1306
+ if (col != 1)
1307
+ RAW(row, col) = (col + 1) & 2
1308
+ ? pixel[col / 2 - 1] + pixel[col / 2 + 1]
1309
+ : pixel[col / 2] << 1;
1310
+ RAW(row, 1) = pixel[1] << 1;
1311
+ RAW(row, 1533) = pixel[765] << 1;
1312
+ }
1313
+ else
1314
+ for (col = row & 1; col < 1534; col += 2)
1315
+ RAW(row, col) = pixel[col / 2] << 1;
1316
+ }
1317
+ maximum = 0xff << 1;
1318
+ }
1319
+
1320
+ void LibRaw::quicktake_100_load_raw()
1321
+ {
1322
+ std::vector<uchar> pixel_buffer(484 * 644, 0x80);
1323
+ uchar* pixel = &pixel_buffer[0];
1324
+ static const short gstep[16] = {-89, -60, -44, -32, -22, -15, -8, -2,
1325
+ 2, 8, 15, 22, 32, 44, 60, 89};
1326
+ static const short rstep[6][4] = {{-3, -1, 1, 3}, {-5, -1, 1, 5},
1327
+ {-8, -2, 2, 8}, {-13, -3, 3, 13},
1328
+ {-19, -4, 4, 19}, {-28, -6, 6, 28}};
1329
+ static const short t_curve[256] = {
1330
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14,
1331
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1332
+ 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
1333
+ 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58,
1334
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
1335
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 88, 90,
1336
+ 92, 94, 97, 99, 101, 103, 105, 107, 110, 112, 114, 116, 118, 120,
1337
+ 123, 125, 127, 129, 131, 134, 136, 138, 140, 142, 144, 147, 149, 151,
1338
+ 153, 155, 158, 160, 162, 164, 166, 168, 171, 173, 175, 177, 179, 181,
1339
+ 184, 186, 188, 190, 192, 195, 197, 199, 201, 203, 205, 208, 210, 212,
1340
+ 214, 216, 218, 221, 223, 226, 230, 235, 239, 244, 248, 252, 257, 261,
1341
+ 265, 270, 274, 278, 283, 287, 291, 296, 300, 305, 309, 313, 318, 322,
1342
+ 326, 331, 335, 339, 344, 348, 352, 357, 361, 365, 370, 374, 379, 383,
1343
+ 387, 392, 396, 400, 405, 409, 413, 418, 422, 426, 431, 435, 440, 444,
1344
+ 448, 453, 457, 461, 466, 470, 474, 479, 483, 487, 492, 496, 500, 508,
1345
+ 519, 531, 542, 553, 564, 575, 587, 598, 609, 620, 631, 643, 654, 665,
1346
+ 676, 687, 698, 710, 721, 732, 743, 754, 766, 777, 788, 799, 810, 822,
1347
+ 833, 844, 855, 866, 878, 889, 900, 911, 922, 933, 945, 956, 967, 978,
1348
+ 989, 1001, 1012, 1023};
1349
+ int rb, row, col, sharp, val = 0;
1350
+
1351
+ if (width > 640 || height > 480)
1352
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1353
+
1354
+ getbits(-1);
1355
+ for (row = 2; row < height + 2; row++)
1356
+ {
1357
+ checkCancel();
1358
+ for (col = 2 + (row & 1); col < width + 2; col += 2)
1359
+ {
1360
+ val = ((pixel[(row - 1) * 644 + col - 1] + 2 * pixel[(row - 1) * 644 + col + 1] + pixel[row * 644 + col - 2]) >> 2) + gstep[getbits(4)];
1361
+ pixel[row * 644 + col] = val = LIM(val, 0, 255);
1362
+ if (col < 4)
1363
+ pixel[row * 644 + col - 2] = pixel[(row + 1) * 644 + (~row & 1)] = val;
1364
+ if (row == 2)
1365
+ pixel[(row - 1) * 644 + col + 1] = pixel[(row - 1) * 644 + col + 3] = val;
1366
+ }
1367
+ pixel[row * 644 + col] = val;
1368
+ }
1369
+ for (rb = 0; rb < 2; rb++)
1370
+ for (row = 2 + rb; row < height + 2; row += 2)
1371
+ {
1372
+ checkCancel();
1373
+ for (col = 3 - (row & 1); col < width + 2; col += 2)
1374
+ {
1375
+ if (row < 4 || col < 4)
1376
+ sharp = 2;
1377
+ else
1378
+ {
1379
+ val = ABS(pixel[(row - 2) * 644 + col] - pixel[row * 644 + col - 2]) + ABS(pixel[(row - 2) * 644 + col] - pixel[(row - 2) * 644 + col - 2]) +
1380
+ ABS(pixel[row * 644 + col - 2] - pixel[(row - 2) * 644 + col - 2]);
1381
+ sharp = val < 4
1382
+ ? 0
1383
+ : val < 8
1384
+ ? 1
1385
+ : val < 16 ? 2 : val < 32 ? 3 : val < 48 ? 4 : 5;
1386
+ }
1387
+ val = ((pixel[(row - 2) * 644 + col] + pixel[row * 644 + col - 2]) >> 1) + rstep[sharp][getbits(2)];
1388
+ pixel[row * 644 + col] = val = LIM(val, 0, 255);
1389
+ if (row < 4)
1390
+ pixel[(row - 2) * 644 + col + 2] = val;
1391
+ if (col < 4)
1392
+ pixel[(row + 2) * 644 + col - 2] = val;
1393
+ }
1394
+ }
1395
+ for (row = 2; row < height + 2; row++)
1396
+ {
1397
+ checkCancel();
1398
+ for (col = 3 - (row & 1); col < width + 2; col += 2)
1399
+ {
1400
+ val = ((pixel[row * 644 + col - 1] + (pixel[row * 644 + col] << 2) + pixel[row * 644 + col + 1]) >> 1) - 0x100;
1401
+ pixel[row * 644 + col] = LIM(val, 0, 255);
1402
+ }
1403
+ }
1404
+ for (row = 0; row < height; row++)
1405
+ {
1406
+ checkCancel();
1407
+ for (col = 0; col < width; col++)
1408
+ RAW(row, col) = t_curve[pixel[(row + 2) * 644 + col + 2]];
1409
+ }
1410
+ maximum = 0x3ff;
1411
+ }
1412
+
1413
+ void LibRaw::sony_load_raw()
1414
+ {
1415
+ uchar head[40];
1416
+ ushort *pixel;
1417
+ unsigned i, key, row, col;
1418
+
1419
+ fseek(ifp, 200896, SEEK_SET);
1420
+ fseek(ifp, (unsigned)fgetc(ifp) * 4 - 1, SEEK_CUR);
1421
+ order = 0x4d4d;
1422
+ key = get4();
1423
+
1424
+ fseek(ifp, 164600, SEEK_SET);
1425
+ fread(head, 1, 40, ifp);
1426
+ sony_decrypt((unsigned *)head, 10, 1, key);
1427
+ for (i = 26; i-- > 22;)
1428
+ key = key << 8 | head[i];
1429
+
1430
+ fseek(ifp, data_offset, SEEK_SET);
1431
+ for (row = 0; row < raw_height; row++)
1432
+ {
1433
+ checkCancel();
1434
+ pixel = raw_image + row * raw_width;
1435
+ if (fread(pixel, 2, raw_width, ifp) < raw_width)
1436
+ derror();
1437
+ sony_decrypt((unsigned *)pixel, raw_width / 2, !row, key);
1438
+ for (col = 0; col < raw_width; col++)
1439
+ if ((pixel[col] = ntohs(pixel[col])) >> 14)
1440
+ derror();
1441
+ }
1442
+ maximum = 0x3ff0;
1443
+ }
1444
+
1445
+ void LibRaw::sony_arw_load_raw()
1446
+ {
1447
+ std::vector<ushort> huff_buffer(32770,0);
1448
+ ushort* huff = &huff_buffer[0];
1449
+ static const ushort tab[18] = {0xf11, 0xf10, 0xe0f, 0xd0e, 0xc0d, 0xb0c,
1450
+ 0xa0b, 0x90a, 0x809, 0x708, 0x607, 0x506,
1451
+ 0x405, 0x304, 0x303, 0x300, 0x202, 0x201};
1452
+ int i, c, n, col, row, sum = 0;
1453
+
1454
+ huff[0] = 15;
1455
+ for (n = i = 0; i < 18; i++)
1456
+ FORC(32768 >> (tab[i] >> 8)) huff[++n] = tab[i];
1457
+ getbits(-1);
1458
+ for (col = raw_width; col--;)
1459
+ {
1460
+ checkCancel();
1461
+ for (row = 0; row < raw_height + 1; row += 2)
1462
+ {
1463
+ if (row == raw_height)
1464
+ row = 1;
1465
+ if ((sum += ljpeg_diff(huff)) >> 12)
1466
+ derror();
1467
+ if (row < height)
1468
+ RAW(row, col) = sum;
1469
+ }
1470
+ }
1471
+ }
1472
+
1473
+ void LibRaw::sony_arw2_load_raw()
1474
+ {
1475
+ uchar *data, *dp;
1476
+ ushort pix[16];
1477
+ int row, col, val, max, min, imax, imin, sh, bit, i;
1478
+
1479
+ data = (uchar *)calloc(raw_width + 1,1);
1480
+ try
1481
+ {
1482
+ for (row = 0; row < height; row++)
1483
+ {
1484
+ checkCancel();
1485
+ fread(data, 1, raw_width, ifp);
1486
+ for (dp = data, col = 0; col < raw_width - 30; dp += 16)
1487
+ {
1488
+ max = 0x7ff & (val = sget4(dp));
1489
+ min = 0x7ff & val >> 11;
1490
+ imax = 0x0f & val >> 22;
1491
+ imin = 0x0f & val >> 26;
1492
+ for (sh = 0; sh < 4 && 0x80 << sh <= max - min; sh++)
1493
+ ;
1494
+ /* flag checks if outside of loop */
1495
+ if (!(imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_ALLFLAGS) // no flag set
1496
+ || (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_DELTATOVALUE))
1497
+ {
1498
+ for (bit = 30, i = 0; i < 16; i++)
1499
+ if (i == imax)
1500
+ pix[i] = max;
1501
+ else if (i == imin)
1502
+ pix[i] = min;
1503
+ else
1504
+ {
1505
+ pix[i] =
1506
+ ((sget2(dp + (bit >> 3)) >> (bit & 7) & 0x7f) << sh) + min;
1507
+ if (pix[i] > 0x7ff)
1508
+ pix[i] = 0x7ff;
1509
+ bit += 7;
1510
+ }
1511
+ }
1512
+ else if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_BASEONLY)
1513
+ {
1514
+ for (bit = 30, i = 0; i < 16; i++)
1515
+ if (i == imax)
1516
+ pix[i] = max;
1517
+ else if (i == imin)
1518
+ pix[i] = min;
1519
+ else
1520
+ pix[i] = 0;
1521
+ }
1522
+ else if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_DELTAONLY)
1523
+ {
1524
+ for (bit = 30, i = 0; i < 16; i++)
1525
+ if (i == imax)
1526
+ pix[i] = 0;
1527
+ else if (i == imin)
1528
+ pix[i] = 0;
1529
+ else
1530
+ {
1531
+ pix[i] =
1532
+ ((sget2(dp + (bit >> 3)) >> (bit & 7) & 0x7f) << sh) + min;
1533
+ if (pix[i] > 0x7ff)
1534
+ pix[i] = 0x7ff;
1535
+ bit += 7;
1536
+ }
1537
+ }
1538
+ else if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_DELTAZEROBASE)
1539
+ {
1540
+ for (bit = 30, i = 0; i < 16; i++)
1541
+ if (i == imax)
1542
+ pix[i] = 0;
1543
+ else if (i == imin)
1544
+ pix[i] = 0;
1545
+ else
1546
+ {
1547
+ pix[i] = ((sget2(dp + (bit >> 3)) >> (bit & 7) & 0x7f) << sh);
1548
+ if (pix[i] > 0x7ff)
1549
+ pix[i] = 0x7ff;
1550
+ bit += 7;
1551
+ }
1552
+ }
1553
+
1554
+ if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_DELTATOVALUE)
1555
+ {
1556
+ for (i = 0; i < 16; i++, col += 2)
1557
+ {
1558
+ unsigned slope =
1559
+ pix[i] < 1001 ? 2
1560
+ : curve[pix[i] << 1] - curve[(pix[i] << 1) - 2];
1561
+ unsigned step = 1 << sh;
1562
+ RAW(row, col) =
1563
+ curve[pix[i] << 1] >
1564
+ black + imgdata.rawparams.sony_arw2_posterization_thr
1565
+ ? LIM(((slope * step * 1000) /
1566
+ (curve[pix[i] << 1] - black)),
1567
+ 0, 10000)
1568
+ : 0;
1569
+ }
1570
+ }
1571
+ else
1572
+ for (i = 0; i < 16; i++, col += 2)
1573
+ RAW(row, col) = curve[pix[i] << 1];
1574
+ col -= col & 1 ? 1 : 31;
1575
+ }
1576
+ }
1577
+ }
1578
+ catch (...)
1579
+ {
1580
+ free(data);
1581
+ throw;
1582
+ }
1583
+ if (imgdata.rawparams.specials & LIBRAW_RAWSPECIAL_SONYARW2_DELTATOVALUE)
1584
+ maximum = 10000;
1585
+ free(data);
1586
+ }
1587
+
1588
+ void LibRaw::samsung_load_raw()
1589
+ {
1590
+ int row, col, c, i, dir, op[4], len[4];
1591
+ if (raw_width > 32768 ||
1592
+ raw_height > 32768) // definitely too much for old samsung
1593
+ throw LIBRAW_EXCEPTION_IO_BADFILE;
1594
+ unsigned maxpixels = raw_width * (raw_height + 7);
1595
+
1596
+ order = 0x4949;
1597
+ for (row = 0; row < raw_height; row++)
1598
+ {
1599
+ checkCancel();
1600
+ fseek(ifp, strip_offset + row * 4, SEEK_SET);
1601
+ fseek(ifp, data_offset + get4(), SEEK_SET);
1602
+ ph1_bits(-1);
1603
+ FORC4 len[c] = row < 2 ? 7 : 4;
1604
+ for (col = 0; col < raw_width; col += 16)
1605
+ {
1606
+ dir = ph1_bits(1);
1607
+ FORC4 op[c] = ph1_bits(2);
1608
+ FORC4 switch (op[c])
1609
+ {
1610
+ case 3:
1611
+ len[c] = ph1_bits(4);
1612
+ break;
1613
+ case 2:
1614
+ len[c]--;
1615
+ break;
1616
+ case 1:
1617
+ len[c]++;
1618
+ }
1619
+ for (c = 0; c < 16; c += 2)
1620
+ {
1621
+ i = len[((c & 1) << 1) | (c >> 3)];
1622
+ unsigned idest = RAWINDEX(row, col + c);
1623
+ unsigned isrc = (dir ? RAWINDEX(row + (~c | -2), col + c)
1624
+ : col ? RAWINDEX(row, col + (c | -2)) : 0);
1625
+ if (idest < maxpixels &&
1626
+ isrc <
1627
+ maxpixels) // less than zero is handled by unsigned conversion
1628
+ RAW(row, col + c) = (i > 0 ? ((signed)ph1_bits(i) << (32 - i) >> (32 - i)) : 0) +
1629
+ (dir ? RAW(row + (~c | -2), col + c) : col ? RAW(row, col + (c | -2)) : 128);
1630
+ else
1631
+ derror();
1632
+ if (c == 14)
1633
+ c = -1;
1634
+ }
1635
+ }
1636
+ }
1637
+ for (row = 0; row < raw_height - 1; row += 2)
1638
+ for (col = 0; col < raw_width - 1; col += 2)
1639
+ SWAP(RAW(row, col + 1), RAW(row + 1, col));
1640
+ }
1641
+
1642
+ void LibRaw::samsung2_load_raw()
1643
+ {
1644
+ static const ushort tab[14] = {0x304, 0x307, 0x206, 0x205, 0x403,
1645
+ 0x600, 0x709, 0x80a, 0x90b, 0xa0c,
1646
+ 0xa0d, 0x501, 0x408, 0x402};
1647
+ ushort huff[1026], vpred[2][2] = {{0, 0}, {0, 0}}, hpred[2];
1648
+ int i, c, n, row, col, diff;
1649
+
1650
+ huff[0] = 10;
1651
+ for (n = i = 0; i < 14; i++)
1652
+ FORC(1024 >> (tab[i] >> 8)) huff[++n] = tab[i];
1653
+ getbits(-1);
1654
+ for (row = 0; row < raw_height; row++)
1655
+ {
1656
+ checkCancel();
1657
+ for (col = 0; col < raw_width; col++)
1658
+ {
1659
+ diff = ljpeg_diff(huff);
1660
+ if (col < 2)
1661
+ hpred[col] = vpred[row & 1][col] += diff;
1662
+ else
1663
+ hpred[col & 1] += diff;
1664
+ RAW(row, col) = hpred[col & 1];
1665
+ if (hpred[col & 1] >> tiff_bps)
1666
+ derror();
1667
+ }
1668
+ }
1669
+ }
1670
+
1671
+ void LibRaw::samsung3_load_raw()
1672
+ {
1673
+ int opt, init, mag, pmode, row, tab, col, pred, diff, i, c;
1674
+ ushort lent[3][2], len[4], *prow[2];
1675
+ order = 0x4949;
1676
+ fseek(ifp, 9, SEEK_CUR);
1677
+ opt = fgetc(ifp);
1678
+ init = (get2(), get2());
1679
+ for (row = 0; row < raw_height; row++)
1680
+ {
1681
+ checkCancel();
1682
+ fseek(ifp, (data_offset - ftell(ifp)) & 15, SEEK_CUR);
1683
+ ph1_bits(-1);
1684
+ mag = 0;
1685
+ pmode = 7;
1686
+ FORC(6)((ushort *)lent)[c] = row < 2 ? 7 : 4;
1687
+ prow[row & 1] = &RAW(row - 1, 1 - ((row & 1) << 1)); // green
1688
+ prow[~row & 1] = &RAW(row - 2, 0); // red and blue
1689
+ for (tab = 0; tab + 15 < raw_width; tab += 16)
1690
+ {
1691
+ if (~opt & 4 && !(tab & 63))
1692
+ {
1693
+ i = ph1_bits(2);
1694
+ mag = i < 3 ? mag - '2' + "204"[i] : ph1_bits(12);
1695
+ }
1696
+ if (opt & 2)
1697
+ pmode = 7 - 4 * ph1_bits(1);
1698
+ else if (!ph1_bits(1))
1699
+ pmode = ph1_bits(3);
1700
+ if (opt & 1 || !ph1_bits(1))
1701
+ {
1702
+ FORC4 len[c] = ph1_bits(2);
1703
+ FORC4
1704
+ {
1705
+ i = ((row & 1) << 1 | (c & 1)) % 3;
1706
+ if (i < 0)
1707
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1708
+ len[c] = len[c] < 3 ? lent[i][0] - '1' + "120"[len[c]] : ph1_bits(4);
1709
+ lent[i][0] = lent[i][1];
1710
+ lent[i][1] = len[c];
1711
+ }
1712
+ }
1713
+ FORC(16)
1714
+ {
1715
+ col = tab + (((c & 7) << 1) ^ (c >> 3) ^ (row & 1));
1716
+ if (col < 0)
1717
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1718
+ if (pmode < 0)
1719
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1720
+ if (pmode != 7 && row >= 2 && (col - '4' + "0224468"[pmode]) < 0)
1721
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
1722
+ pred = (pmode == 7 || row < 2)
1723
+ ? (tab ? RAW(row, tab - 2 + (col & 1)) : init)
1724
+ : (prow[col & 1][col - '4' + "0224468"[pmode]] +
1725
+ prow[col & 1][col - '4' + "0244668"[pmode]] + 1) >>
1726
+ 1;
1727
+ diff = ph1_bits(i = len[c >> 2]);
1728
+ if (i > 0 && diff >> (i - 1))
1729
+ diff -= 1 << i;
1730
+ diff = diff * (mag * 2 + 1) + mag;
1731
+ RAW(row, col) = pred + diff;
1732
+ }
1733
+ }
1734
+ }
1735
+ }
1736
+
1737
+ #ifdef LIBRAW_OLD_VIDEO_SUPPORT
1738
+ void LibRaw::redcine_load_raw()
1739
+ {
1740
+ #ifndef NO_JASPER
1741
+ int c, row, col;
1742
+ jas_stream_t *in;
1743
+ jas_image_t *jimg;
1744
+ jas_matrix_t *jmat;
1745
+ jas_seqent_t *data;
1746
+ ushort *img, *pix;
1747
+
1748
+ jas_init();
1749
+ in = (jas_stream_t *)ifp->make_jas_stream();
1750
+ if (!in)
1751
+ throw LIBRAW_EXCEPTION_DECODE_JPEG2000;
1752
+ jas_stream_seek(in, data_offset + 20, SEEK_SET);
1753
+ jimg = jas_image_decode(in, -1, 0);
1754
+ if (!jimg)
1755
+ {
1756
+ jas_stream_close(in);
1757
+ throw LIBRAW_EXCEPTION_DECODE_JPEG2000;
1758
+ }
1759
+ jmat = jas_matrix_create(height / 2, width / 2);
1760
+ img = (ushort *)calloc((height + 2), (width + 2) * 2);
1761
+ bool fastexitflag = false;
1762
+ try
1763
+ {
1764
+ FORC4
1765
+ {
1766
+ checkCancel();
1767
+ jas_image_readcmpt(jimg, c, 0, 0, width / 2, height / 2, jmat);
1768
+ data = jas_matrix_getref(jmat, 0, 0);
1769
+ for (row = c >> 1; row < height; row += 2)
1770
+ for (col = c & 1; col < width; col += 2)
1771
+ img[(row + 1) * (width + 2) + col + 1] =
1772
+ data[(row / 2) * (width / 2) + col / 2];
1773
+ }
1774
+ for (col = 1; col <= width; col++)
1775
+ {
1776
+ img[col] = img[2 * (width + 2) + col];
1777
+ img[(height + 1) * (width + 2) + col] =
1778
+ img[(height - 1) * (width + 2) + col];
1779
+ }
1780
+ for (row = 0; row < height + 2; row++)
1781
+ {
1782
+ img[row * (width + 2)] = img[row * (width + 2) + 2];
1783
+ img[(row + 1) * (width + 2) - 1] = img[(row + 1) * (width + 2) - 3];
1784
+ }
1785
+ for (row = 1; row <= height; row++)
1786
+ {
1787
+ checkCancel();
1788
+ pix = img + row * (width + 2) + (col = 1 + (FC(row, 1) & 1));
1789
+ for (; col <= width; col += 2, pix += 2)
1790
+ {
1791
+ c = (((pix[0] - 0x800) << 3) + pix[-(width + 2)] + pix[width + 2] +
1792
+ pix[-1] + pix[1]) >>
1793
+ 2;
1794
+ pix[0] = LIM(c, 0, 4095);
1795
+ }
1796
+ }
1797
+ for (row = 0; row < height; row++)
1798
+ {
1799
+ checkCancel();
1800
+ for (col = 0; col < width; col++)
1801
+ RAW(row, col) = curve[img[(row + 1) * (width + 2) + col + 1]];
1802
+ }
1803
+ }
1804
+ catch (...)
1805
+ {
1806
+ fastexitflag = true;
1807
+ }
1808
+ free(img);
1809
+ jas_matrix_destroy(jmat);
1810
+ jas_image_destroy(jimg);
1811
+ jas_stream_close(in);
1812
+ if (fastexitflag)
1813
+ throw LIBRAW_EXCEPTION_CANCELLED_BY_CALLBACK;
1814
+ #endif
1815
+ }
1816
+ #endif