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,1223 @@
1
+ #include "libraw_wrapper.h"
2
+ #include <iostream>
3
+ #include <sstream>
4
+ #include <vector>
5
+
6
+ Napi::FunctionReference LibRawWrapper::constructor;
7
+
8
+ Napi::Object LibRawWrapper::Init(Napi::Env env, Napi::Object exports) {
9
+ Napi::HandleScope scope(env);
10
+
11
+ Napi::Function func = DefineClass(env, "LibRawWrapper", {
12
+ // File Operations
13
+ InstanceMethod("loadFile", &LibRawWrapper::LoadFile),
14
+ InstanceMethod("loadBuffer", &LibRawWrapper::LoadBuffer),
15
+ InstanceMethod("close", &LibRawWrapper::Close),
16
+
17
+ // Error Handling
18
+ InstanceMethod("getLastError", &LibRawWrapper::GetLastError),
19
+ InstanceMethod("strerror", &LibRawWrapper::Strerror),
20
+
21
+ // Metadata & Information
22
+ InstanceMethod("getMetadata", &LibRawWrapper::GetMetadata),
23
+ InstanceMethod("getImageSize", &LibRawWrapper::GetImageSize),
24
+ InstanceMethod("getAdvancedMetadata", &LibRawWrapper::GetAdvancedMetadata),
25
+ InstanceMethod("getLensInfo", &LibRawWrapper::GetLensInfo),
26
+ InstanceMethod("getColorInfo", &LibRawWrapper::GetColorInfo),
27
+
28
+ // Image Processing
29
+ InstanceMethod("unpackThumbnail", &LibRawWrapper::UnpackThumbnail),
30
+ InstanceMethod("processImage", &LibRawWrapper::ProcessImage),
31
+ InstanceMethod("subtractBlack", &LibRawWrapper::SubtractBlack),
32
+ InstanceMethod("raw2Image", &LibRawWrapper::Raw2Image),
33
+ InstanceMethod("adjustMaximum", &LibRawWrapper::AdjustMaximum),
34
+
35
+ // Memory Image Creation
36
+ InstanceMethod("createMemoryImage", &LibRawWrapper::CreateMemoryImage),
37
+ InstanceMethod("createMemoryThumbnail", &LibRawWrapper::CreateMemoryThumbnail),
38
+
39
+ // File Writers
40
+ InstanceMethod("writePPM", &LibRawWrapper::WritePPM),
41
+ InstanceMethod("writeTIFF", &LibRawWrapper::WriteTIFF),
42
+ InstanceMethod("writeThumbnail", &LibRawWrapper::WriteThumbnail),
43
+
44
+ // Configuration & Settings
45
+ InstanceMethod("setOutputParams", &LibRawWrapper::SetOutputParams),
46
+ InstanceMethod("getOutputParams", &LibRawWrapper::GetOutputParams),
47
+
48
+ // Utility Functions
49
+ InstanceMethod("isFloatingPoint", &LibRawWrapper::IsFloatingPoint),
50
+ InstanceMethod("isFujiRotated", &LibRawWrapper::IsFujiRotated),
51
+ InstanceMethod("isSRAW", &LibRawWrapper::IsSRAW),
52
+ InstanceMethod("isJPEGThumb", &LibRawWrapper::IsJPEGThumb),
53
+ InstanceMethod("errorCount", &LibRawWrapper::ErrorCount),
54
+
55
+ // Extended Utility Functions
56
+ InstanceMethod("isNikonSRAW", &LibRawWrapper::IsNikonSRAW),
57
+ InstanceMethod("isCoolscanNEF", &LibRawWrapper::IsCoolscanNEF),
58
+ InstanceMethod("haveFPData", &LibRawWrapper::HaveFPData),
59
+ InstanceMethod("srawMidpoint", &LibRawWrapper::SrawMidpoint),
60
+ InstanceMethod("thumbOK", &LibRawWrapper::ThumbOK),
61
+ InstanceMethod("unpackFunctionName", &LibRawWrapper::UnpackFunctionName),
62
+ InstanceMethod("getDecoderInfo", &LibRawWrapper::GetDecoderInfo),
63
+
64
+ // Advanced Processing
65
+ InstanceMethod("unpack", &LibRawWrapper::Unpack),
66
+ InstanceMethod("raw2ImageEx", &LibRawWrapper::Raw2ImageEx),
67
+ InstanceMethod("adjustSizesInfoOnly", &LibRawWrapper::AdjustSizesInfoOnly),
68
+ InstanceMethod("freeImage", &LibRawWrapper::FreeImage),
69
+ InstanceMethod("convertFloatToInt", &LibRawWrapper::ConvertFloatToInt),
70
+
71
+ // Memory Operations Extended
72
+ InstanceMethod("getMemImageFormat", &LibRawWrapper::GetMemImageFormat),
73
+ InstanceMethod("copyMemImage", &LibRawWrapper::CopyMemImage),
74
+
75
+ // Color Operations
76
+ InstanceMethod("getColorAt", &LibRawWrapper::GetColorAt),
77
+
78
+ // Cancellation Support
79
+ InstanceMethod("setCancelFlag", &LibRawWrapper::SetCancelFlag),
80
+ InstanceMethod("clearCancelFlag", &LibRawWrapper::ClearCancelFlag),
81
+
82
+ // Version Information (Instance Methods)
83
+ InstanceMethod("version", &LibRawWrapper::Version),
84
+ InstanceMethod("versionNumber", &LibRawWrapper::VersionNumber),
85
+
86
+ // Static Methods
87
+ StaticMethod("getVersion", &LibRawWrapper::GetVersion),
88
+ StaticMethod("getCapabilities", &LibRawWrapper::GetCapabilities),
89
+ StaticMethod("getCameraList", &LibRawWrapper::GetCameraList),
90
+ StaticMethod("getCameraCount", &LibRawWrapper::GetCameraCount)
91
+ });
92
+
93
+ constructor = Napi::Persistent(func);
94
+ constructor.SuppressDestruct();
95
+
96
+ exports.Set("LibRawWrapper", func);
97
+ return exports;
98
+ }
99
+
100
+ LibRawWrapper::LibRawWrapper(const Napi::CallbackInfo& info)
101
+ : Napi::ObjectWrap<LibRawWrapper>(info), isLoaded(false), isUnpacked(false), isProcessed(false) {
102
+ Napi::Env env = info.Env();
103
+ Napi::HandleScope scope(env);
104
+
105
+ try {
106
+ processor = std::make_unique<LibRaw>();
107
+ } catch (const std::exception& e) {
108
+ std::string errorMsg = "Failed to initialize LibRaw: ";
109
+ errorMsg += e.what();
110
+ Napi::TypeError::New(env, errorMsg).ThrowAsJavaScriptException();
111
+ }
112
+ }
113
+
114
+ LibRawWrapper::~LibRawWrapper() {
115
+ if (processor && isLoaded) {
116
+ processor->recycle();
117
+ }
118
+ }
119
+
120
+ bool LibRawWrapper::CheckLoaded(Napi::Env env) {
121
+ if (!isLoaded) {
122
+ Napi::Error::New(env, "No file loaded. Call loadFile() first.").ThrowAsJavaScriptException();
123
+ return false;
124
+ }
125
+ return true;
126
+ }
127
+
128
+ // ============== FILE OPERATIONS ==============
129
+
130
+ Napi::Value LibRawWrapper::LoadFile(const Napi::CallbackInfo& info) {
131
+ Napi::Env env = info.Env();
132
+
133
+ if (info.Length() < 1 || !info[0].IsString()) {
134
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
135
+ return env.Null();
136
+ }
137
+
138
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
139
+
140
+ try {
141
+ int ret = processor->open_file(filename.c_str());
142
+ if (ret != LIBRAW_SUCCESS) {
143
+ std::string error = "Failed to open file: ";
144
+ error += libraw_strerror(ret);
145
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
146
+ return env.Null();
147
+ }
148
+
149
+ ret = processor->unpack();
150
+ if (ret != LIBRAW_SUCCESS) {
151
+ std::string error = "Failed to unpack file: ";
152
+ error += libraw_strerror(ret);
153
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
154
+ return env.Null();
155
+ }
156
+
157
+ isLoaded = true;
158
+ isUnpacked = true;
159
+ isProcessed = false;
160
+ return Napi::Boolean::New(env, true);
161
+ } catch (const std::exception& e) {
162
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
163
+ return env.Null();
164
+ }
165
+ }
166
+
167
+ Napi::Value LibRawWrapper::LoadBuffer(const Napi::CallbackInfo& info) {
168
+ Napi::Env env = info.Env();
169
+
170
+ if (info.Length() < 1 || !info[0].IsBuffer()) {
171
+ Napi::TypeError::New(env, "Expected Buffer").ThrowAsJavaScriptException();
172
+ return env.Null();
173
+ }
174
+
175
+ Napi::Buffer<uint8_t> buffer = info[0].As<Napi::Buffer<uint8_t>>();
176
+
177
+ try {
178
+ int ret = processor->open_buffer(buffer.Data(), buffer.Length());
179
+ if (ret != LIBRAW_SUCCESS) {
180
+ std::string error = "Failed to open buffer: ";
181
+ error += libraw_strerror(ret);
182
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
183
+ return env.Null();
184
+ }
185
+
186
+ ret = processor->unpack();
187
+ if (ret != LIBRAW_SUCCESS) {
188
+ std::string error = "Failed to unpack buffer: ";
189
+ error += libraw_strerror(ret);
190
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
191
+ return env.Null();
192
+ }
193
+
194
+ isLoaded = true;
195
+ isUnpacked = true;
196
+ isProcessed = false;
197
+ return Napi::Boolean::New(env, true);
198
+ } catch (const std::exception& e) {
199
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
200
+ return env.Null();
201
+ }
202
+ }
203
+
204
+ Napi::Value LibRawWrapper::Close(const Napi::CallbackInfo& info) {
205
+ Napi::Env env = info.Env();
206
+
207
+ if (processor && isLoaded) {
208
+ processor->recycle();
209
+ isLoaded = false;
210
+ isUnpacked = false;
211
+ isProcessed = false;
212
+ }
213
+
214
+ return Napi::Boolean::New(env, true);
215
+ }
216
+
217
+ // ============== METADATA & INFORMATION ==============
218
+
219
+ Napi::Value LibRawWrapper::GetMetadata(const Napi::CallbackInfo& info) {
220
+ Napi::Env env = info.Env();
221
+ if (!CheckLoaded(env)) return env.Null();
222
+
223
+ Napi::Object metadata = Napi::Object::New(env);
224
+
225
+ try {
226
+ // Camera info
227
+ if (processor->imgdata.idata.make[0]) {
228
+ metadata.Set("make", Napi::String::New(env, processor->imgdata.idata.make));
229
+ }
230
+ if (processor->imgdata.idata.model[0]) {
231
+ metadata.Set("model", Napi::String::New(env, processor->imgdata.idata.model));
232
+ }
233
+ if (processor->imgdata.idata.software[0]) {
234
+ metadata.Set("software", Napi::String::New(env, processor->imgdata.idata.software));
235
+ }
236
+
237
+ // Image dimensions
238
+ metadata.Set("width", Napi::Number::New(env, processor->imgdata.sizes.width));
239
+ metadata.Set("height", Napi::Number::New(env, processor->imgdata.sizes.height));
240
+ metadata.Set("rawWidth", Napi::Number::New(env, processor->imgdata.sizes.raw_width));
241
+ metadata.Set("rawHeight", Napi::Number::New(env, processor->imgdata.sizes.raw_height));
242
+
243
+ // Color info
244
+ metadata.Set("colors", Napi::Number::New(env, processor->imgdata.idata.colors));
245
+ metadata.Set("filters", Napi::Number::New(env, processor->imgdata.idata.filters));
246
+
247
+ // ISO and exposure
248
+ if (processor->imgdata.other.iso_speed > 0) {
249
+ metadata.Set("iso", Napi::Number::New(env, processor->imgdata.other.iso_speed));
250
+ }
251
+ if (processor->imgdata.other.shutter > 0) {
252
+ metadata.Set("shutterSpeed", Napi::Number::New(env, processor->imgdata.other.shutter));
253
+ }
254
+ if (processor->imgdata.other.aperture > 0) {
255
+ metadata.Set("aperture", Napi::Number::New(env, processor->imgdata.other.aperture));
256
+ }
257
+ if (processor->imgdata.other.focal_len > 0) {
258
+ metadata.Set("focalLength", Napi::Number::New(env, processor->imgdata.other.focal_len));
259
+ }
260
+
261
+ // Timestamp
262
+ if (processor->imgdata.other.timestamp > 0) {
263
+ metadata.Set("timestamp", Napi::Number::New(env, processor->imgdata.other.timestamp));
264
+ }
265
+
266
+ return metadata;
267
+ } catch (const std::exception& e) {
268
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
269
+ return env.Null();
270
+ }
271
+ }
272
+
273
+ Napi::Value LibRawWrapper::GetImageSize(const Napi::CallbackInfo& info) {
274
+ Napi::Env env = info.Env();
275
+ if (!CheckLoaded(env)) return env.Null();
276
+
277
+ Napi::Object size = Napi::Object::New(env);
278
+ size.Set("width", Napi::Number::New(env, processor->imgdata.sizes.width));
279
+ size.Set("height", Napi::Number::New(env, processor->imgdata.sizes.height));
280
+ size.Set("rawWidth", Napi::Number::New(env, processor->imgdata.sizes.raw_width));
281
+ size.Set("rawHeight", Napi::Number::New(env, processor->imgdata.sizes.raw_height));
282
+ size.Set("topMargin", Napi::Number::New(env, processor->imgdata.sizes.top_margin));
283
+ size.Set("leftMargin", Napi::Number::New(env, processor->imgdata.sizes.left_margin));
284
+ size.Set("iWidth", Napi::Number::New(env, processor->imgdata.sizes.iwidth));
285
+ size.Set("iHeight", Napi::Number::New(env, processor->imgdata.sizes.iheight));
286
+
287
+ return size;
288
+ }
289
+
290
+ Napi::Value LibRawWrapper::GetAdvancedMetadata(const Napi::CallbackInfo& info) {
291
+ Napi::Env env = info.Env();
292
+ if (!CheckLoaded(env)) return env.Null();
293
+
294
+ Napi::Object metadata = Napi::Object::New(env);
295
+
296
+ try {
297
+ // Camera details
298
+ if (processor->imgdata.idata.normalized_make[0]) {
299
+ metadata.Set("normalizedMake", Napi::String::New(env, processor->imgdata.idata.normalized_make));
300
+ }
301
+ if (processor->imgdata.idata.normalized_model[0]) {
302
+ metadata.Set("normalizedModel", Napi::String::New(env, processor->imgdata.idata.normalized_model));
303
+ }
304
+
305
+ metadata.Set("rawCount", Napi::Number::New(env, processor->imgdata.idata.raw_count));
306
+ metadata.Set("dngVersion", Napi::Number::New(env, processor->imgdata.idata.dng_version));
307
+ metadata.Set("is_foveon", Napi::Number::New(env, processor->imgdata.idata.is_foveon));
308
+
309
+ // Color matrix and calibration
310
+ Napi::Array colorMatrix = Napi::Array::New(env);
311
+ for (int i = 0; i < 4; i++) {
312
+ Napi::Array row = Napi::Array::New(env);
313
+ for (int j = 0; j < 3; j++) {
314
+ row.Set(j, Napi::Number::New(env, processor->imgdata.color.cmatrix[i][j]));
315
+ }
316
+ colorMatrix.Set(i, row);
317
+ }
318
+ metadata.Set("colorMatrix", colorMatrix);
319
+
320
+ // White balance
321
+ Napi::Array camMul = Napi::Array::New(env);
322
+ for (int i = 0; i < 4; i++) {
323
+ camMul.Set(i, Napi::Number::New(env, processor->imgdata.color.cam_mul[i]));
324
+ }
325
+ metadata.Set("camMul", camMul);
326
+
327
+ Napi::Array preMul = Napi::Array::New(env);
328
+ for (int i = 0; i < 4; i++) {
329
+ preMul.Set(i, Napi::Number::New(env, processor->imgdata.color.pre_mul[i]));
330
+ }
331
+ metadata.Set("preMul", preMul);
332
+
333
+ // Additional sensor info
334
+ metadata.Set("blackLevel", Napi::Number::New(env, processor->imgdata.color.black));
335
+ metadata.Set("dataMaximum", Napi::Number::New(env, processor->imgdata.color.data_maximum));
336
+ metadata.Set("whiteLevel", Napi::Number::New(env, processor->imgdata.color.maximum));
337
+
338
+ return metadata;
339
+ } catch (const std::exception& e) {
340
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
341
+ return env.Null();
342
+ }
343
+ }
344
+
345
+ Napi::Value LibRawWrapper::GetLensInfo(const Napi::CallbackInfo& info) {
346
+ Napi::Env env = info.Env();
347
+ if (!CheckLoaded(env)) return env.Null();
348
+
349
+ Napi::Object lensInfo = Napi::Object::New(env);
350
+
351
+ try {
352
+ if (processor->imgdata.lens.Lens[0]) {
353
+ lensInfo.Set("lensName", Napi::String::New(env, processor->imgdata.lens.Lens));
354
+ }
355
+ if (processor->imgdata.lens.LensMake[0]) {
356
+ lensInfo.Set("lensMake", Napi::String::New(env, processor->imgdata.lens.LensMake));
357
+ }
358
+ if (processor->imgdata.lens.LensSerial[0]) {
359
+ lensInfo.Set("lensSerial", Napi::String::New(env, processor->imgdata.lens.LensSerial));
360
+ }
361
+ if (processor->imgdata.lens.InternalLensSerial[0]) {
362
+ lensInfo.Set("internalLensSerial", Napi::String::New(env, processor->imgdata.lens.InternalLensSerial));
363
+ }
364
+
365
+ // Focal length info
366
+ if (processor->imgdata.lens.MinFocal > 0) {
367
+ lensInfo.Set("minFocal", Napi::Number::New(env, processor->imgdata.lens.MinFocal));
368
+ }
369
+ if (processor->imgdata.lens.MaxFocal > 0) {
370
+ lensInfo.Set("maxFocal", Napi::Number::New(env, processor->imgdata.lens.MaxFocal));
371
+ }
372
+ if (processor->imgdata.lens.MaxAp4MinFocal > 0) {
373
+ lensInfo.Set("maxAp4MinFocal", Napi::Number::New(env, processor->imgdata.lens.MaxAp4MinFocal));
374
+ }
375
+ if (processor->imgdata.lens.MaxAp4MaxFocal > 0) {
376
+ lensInfo.Set("maxAp4MaxFocal", Napi::Number::New(env, processor->imgdata.lens.MaxAp4MaxFocal));
377
+ }
378
+ if (processor->imgdata.lens.EXIF_MaxAp > 0) {
379
+ lensInfo.Set("exifMaxAp", Napi::Number::New(env, processor->imgdata.lens.EXIF_MaxAp));
380
+ }
381
+ if (processor->imgdata.lens.FocalLengthIn35mmFormat > 0) {
382
+ lensInfo.Set("focalLengthIn35mmFormat", Napi::Number::New(env, processor->imgdata.lens.FocalLengthIn35mmFormat));
383
+ }
384
+
385
+ return lensInfo;
386
+ } catch (const std::exception& e) {
387
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
388
+ return env.Null();
389
+ }
390
+ }
391
+
392
+ Napi::Value LibRawWrapper::GetColorInfo(const Napi::CallbackInfo& info) {
393
+ Napi::Env env = info.Env();
394
+ if (!CheckLoaded(env)) return env.Null();
395
+
396
+ Napi::Object colorInfo = Napi::Object::New(env);
397
+
398
+ try {
399
+ // Basic color info
400
+ colorInfo.Set("colors", Napi::Number::New(env, processor->imgdata.idata.colors));
401
+ colorInfo.Set("filters", Napi::Number::New(env, processor->imgdata.idata.filters));
402
+
403
+ // Color data
404
+ colorInfo.Set("blackLevel", Napi::Number::New(env, processor->imgdata.color.black));
405
+ colorInfo.Set("dataMaximum", Napi::Number::New(env, processor->imgdata.color.data_maximum));
406
+ colorInfo.Set("whiteLevel", Napi::Number::New(env, processor->imgdata.color.maximum));
407
+
408
+ // Color profile
409
+ if (processor->imgdata.color.profile_length > 0) {
410
+ colorInfo.Set("profileLength", Napi::Number::New(env, processor->imgdata.color.profile_length));
411
+ }
412
+
413
+ // Color matrices
414
+ Napi::Array rgbCam = Napi::Array::New(env);
415
+ for (int i = 0; i < 3; i++) {
416
+ Napi::Array row = Napi::Array::New(env);
417
+ for (int j = 0; j < 4; j++) {
418
+ row.Set(j, Napi::Number::New(env, processor->imgdata.color.rgb_cam[i][j]));
419
+ }
420
+ rgbCam.Set(i, row);
421
+ }
422
+ colorInfo.Set("rgbCam", rgbCam);
423
+
424
+ // Camera multipliers
425
+ Napi::Array camMul = Napi::Array::New(env);
426
+ for (int i = 0; i < 4; i++) {
427
+ camMul.Set(i, Napi::Number::New(env, processor->imgdata.color.cam_mul[i]));
428
+ }
429
+ colorInfo.Set("camMul", camMul);
430
+
431
+ return colorInfo;
432
+ } catch (const std::exception& e) {
433
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
434
+ return env.Null();
435
+ }
436
+ }
437
+
438
+ // ============== IMAGE PROCESSING ==============
439
+
440
+ Napi::Value LibRawWrapper::UnpackThumbnail(const Napi::CallbackInfo& info) {
441
+ Napi::Env env = info.Env();
442
+ if (!CheckLoaded(env)) return env.Null();
443
+
444
+ try {
445
+ int ret = processor->unpack_thumb();
446
+ if (ret != LIBRAW_SUCCESS) {
447
+ std::string error = "Failed to unpack thumbnail: ";
448
+ error += libraw_strerror(ret);
449
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
450
+ return env.Null();
451
+ }
452
+
453
+ return Napi::Boolean::New(env, true);
454
+ } catch (const std::exception& e) {
455
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
456
+ return env.Null();
457
+ }
458
+ }
459
+
460
+ Napi::Value LibRawWrapper::ProcessImage(const Napi::CallbackInfo& info) {
461
+ Napi::Env env = info.Env();
462
+ if (!CheckLoaded(env)) return env.Null();
463
+
464
+ try {
465
+ int ret = processor->dcraw_process();
466
+ if (ret != LIBRAW_SUCCESS) {
467
+ std::string error = "Failed to process image: ";
468
+ error += libraw_strerror(ret);
469
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
470
+ return env.Null();
471
+ }
472
+
473
+ isProcessed = true;
474
+ return Napi::Boolean::New(env, true);
475
+ } catch (const std::exception& e) {
476
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
477
+ return env.Null();
478
+ }
479
+ }
480
+
481
+ Napi::Value LibRawWrapper::SubtractBlack(const Napi::CallbackInfo& info) {
482
+ Napi::Env env = info.Env();
483
+ if (!CheckLoaded(env)) return env.Null();
484
+
485
+ try {
486
+ int ret = processor->subtract_black();
487
+ if (ret != LIBRAW_SUCCESS) {
488
+ std::string error = "Failed to subtract black: ";
489
+ error += libraw_strerror(ret);
490
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
491
+ return env.Null();
492
+ }
493
+
494
+ return Napi::Boolean::New(env, true);
495
+ } catch (const std::exception& e) {
496
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
497
+ return env.Null();
498
+ }
499
+ }
500
+
501
+ Napi::Value LibRawWrapper::Raw2Image(const Napi::CallbackInfo& info) {
502
+ Napi::Env env = info.Env();
503
+ if (!CheckLoaded(env)) return env.Null();
504
+
505
+ try {
506
+ int ret = processor->raw2image();
507
+ if (ret != LIBRAW_SUCCESS) {
508
+ std::string error = "Failed to convert raw to image: ";
509
+ error += libraw_strerror(ret);
510
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
511
+ return env.Null();
512
+ }
513
+
514
+ return Napi::Boolean::New(env, true);
515
+ } catch (const std::exception& e) {
516
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
517
+ return env.Null();
518
+ }
519
+ }
520
+
521
+ Napi::Value LibRawWrapper::AdjustMaximum(const Napi::CallbackInfo& info) {
522
+ Napi::Env env = info.Env();
523
+ if (!CheckLoaded(env)) return env.Null();
524
+
525
+ try {
526
+ int ret = processor->adjust_maximum();
527
+ if (ret != LIBRAW_SUCCESS) {
528
+ std::string error = "Failed to adjust maximum: ";
529
+ error += libraw_strerror(ret);
530
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
531
+ return env.Null();
532
+ }
533
+
534
+ return Napi::Boolean::New(env, true);
535
+ } catch (const std::exception& e) {
536
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
537
+ return env.Null();
538
+ }
539
+ }
540
+
541
+ // ============== MEMORY IMAGE CREATION ==============
542
+
543
+ Napi::Object LibRawWrapper::CreateImageDataObject(Napi::Env env, libraw_processed_image_t* img) {
544
+ Napi::Object result = Napi::Object::New(env);
545
+
546
+ if (!img) {
547
+ return result;
548
+ }
549
+
550
+ result.Set("type", Napi::Number::New(env, img->type));
551
+ result.Set("height", Napi::Number::New(env, img->height));
552
+ result.Set("width", Napi::Number::New(env, img->width));
553
+ result.Set("colors", Napi::Number::New(env, img->colors));
554
+ result.Set("bits", Napi::Number::New(env, img->bits));
555
+ result.Set("dataSize", Napi::Number::New(env, img->data_size));
556
+
557
+ // Create buffer with the image data
558
+ Napi::Buffer<uint8_t> buffer = Napi::Buffer<uint8_t>::Copy(env, img->data, img->data_size);
559
+ result.Set("data", buffer);
560
+
561
+ return result;
562
+ }
563
+
564
+ Napi::Value LibRawWrapper::CreateMemoryImage(const Napi::CallbackInfo& info) {
565
+ Napi::Env env = info.Env();
566
+ if (!CheckLoaded(env)) return env.Null();
567
+
568
+ try {
569
+ int errcode = 0;
570
+ libraw_processed_image_t* img = processor->dcraw_make_mem_image(&errcode);
571
+
572
+ if (!img || errcode != LIBRAW_SUCCESS) {
573
+ std::string error = "Failed to create memory image: ";
574
+ if (errcode != LIBRAW_SUCCESS) {
575
+ error += libraw_strerror(errcode);
576
+ } else {
577
+ error += "Unknown error";
578
+ }
579
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
580
+ return env.Null();
581
+ }
582
+
583
+ Napi::Object result = CreateImageDataObject(env, img);
584
+ LibRaw::dcraw_clear_mem(img);
585
+
586
+ return result;
587
+ } catch (const std::exception& e) {
588
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
589
+ return env.Null();
590
+ }
591
+ }
592
+
593
+ Napi::Value LibRawWrapper::CreateMemoryThumbnail(const Napi::CallbackInfo& info) {
594
+ Napi::Env env = info.Env();
595
+ if (!CheckLoaded(env)) return env.Null();
596
+
597
+ try {
598
+ int errcode = 0;
599
+ libraw_processed_image_t* img = processor->dcraw_make_mem_thumb(&errcode);
600
+
601
+ if (!img || errcode != LIBRAW_SUCCESS) {
602
+ std::string error = "Failed to create memory thumbnail: ";
603
+ if (errcode != LIBRAW_SUCCESS) {
604
+ error += libraw_strerror(errcode);
605
+ } else {
606
+ error += "Unknown error";
607
+ }
608
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
609
+ return env.Null();
610
+ }
611
+
612
+ Napi::Object result = CreateImageDataObject(env, img);
613
+ LibRaw::dcraw_clear_mem(img);
614
+
615
+ return result;
616
+ } catch (const std::exception& e) {
617
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
618
+ return env.Null();
619
+ }
620
+ }
621
+
622
+ // ============== FILE WRITERS ==============
623
+
624
+ Napi::Value LibRawWrapper::WritePPM(const Napi::CallbackInfo& info) {
625
+ Napi::Env env = info.Env();
626
+ if (!CheckLoaded(env)) return env.Null();
627
+
628
+ if (info.Length() < 1 || !info[0].IsString()) {
629
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
630
+ return env.Null();
631
+ }
632
+
633
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
634
+
635
+ try {
636
+ int ret = processor->dcraw_ppm_tiff_writer(filename.c_str());
637
+ if (ret != LIBRAW_SUCCESS) {
638
+ std::string error = "Failed to write PPM file: ";
639
+ error += libraw_strerror(ret);
640
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
641
+ return env.Null();
642
+ }
643
+
644
+ return Napi::Boolean::New(env, true);
645
+ } catch (const std::exception& e) {
646
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
647
+ return env.Null();
648
+ }
649
+ }
650
+
651
+ Napi::Value LibRawWrapper::WriteTIFF(const Napi::CallbackInfo& info) {
652
+ Napi::Env env = info.Env();
653
+ if (!CheckLoaded(env)) return env.Null();
654
+
655
+ if (info.Length() < 1 || !info[0].IsString()) {
656
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
657
+ return env.Null();
658
+ }
659
+
660
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
661
+
662
+ try {
663
+ // Set output format to TIFF
664
+ processor->imgdata.params.output_tiff = 1;
665
+
666
+ int ret = processor->dcraw_ppm_tiff_writer(filename.c_str());
667
+ if (ret != LIBRAW_SUCCESS) {
668
+ std::string error = "Failed to write TIFF file: ";
669
+ error += libraw_strerror(ret);
670
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
671
+ return env.Null();
672
+ }
673
+
674
+ return Napi::Boolean::New(env, true);
675
+ } catch (const std::exception& e) {
676
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
677
+ return env.Null();
678
+ }
679
+ }
680
+
681
+ Napi::Value LibRawWrapper::WriteThumbnail(const Napi::CallbackInfo& info) {
682
+ Napi::Env env = info.Env();
683
+ if (!CheckLoaded(env)) return env.Null();
684
+
685
+ if (info.Length() < 1 || !info[0].IsString()) {
686
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
687
+ return env.Null();
688
+ }
689
+
690
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
691
+
692
+ try {
693
+ int ret = processor->dcraw_thumb_writer(filename.c_str());
694
+ if (ret != LIBRAW_SUCCESS) {
695
+ std::string error = "Failed to write thumbnail: ";
696
+ error += libraw_strerror(ret);
697
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
698
+ return env.Null();
699
+ }
700
+
701
+ return Napi::Boolean::New(env, true);
702
+ } catch (const std::exception& e) {
703
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
704
+ return env.Null();
705
+ }
706
+ }
707
+
708
+ // ============== CONFIGURATION & SETTINGS ==============
709
+
710
+ Napi::Value LibRawWrapper::SetOutputParams(const Napi::CallbackInfo& info) {
711
+ Napi::Env env = info.Env();
712
+ if (!CheckLoaded(env)) return env.Null();
713
+
714
+ if (info.Length() < 1 || !info[0].IsObject()) {
715
+ Napi::TypeError::New(env, "Expected object with output parameters").ThrowAsJavaScriptException();
716
+ return env.Null();
717
+ }
718
+
719
+ Napi::Object params = info[0].As<Napi::Object>();
720
+
721
+ try {
722
+ // Gamma settings
723
+ if (params.Has("gamma") && params.Get("gamma").IsArray()) {
724
+ Napi::Array gamma = params.Get("gamma").As<Napi::Array>();
725
+ if (gamma.Length() >= 2) {
726
+ processor->imgdata.params.gamm[0] = gamma.Get(0u).As<Napi::Number>().DoubleValue();
727
+ processor->imgdata.params.gamm[1] = gamma.Get(1u).As<Napi::Number>().DoubleValue();
728
+ }
729
+ }
730
+
731
+ // Brightness
732
+ if (params.Has("bright") && params.Get("bright").IsNumber()) {
733
+ processor->imgdata.params.bright = params.Get("bright").As<Napi::Number>().FloatValue();
734
+ }
735
+
736
+ // Output color space
737
+ if (params.Has("output_color") && params.Get("output_color").IsNumber()) {
738
+ processor->imgdata.params.output_color = params.Get("output_color").As<Napi::Number>().Int32Value();
739
+ }
740
+
741
+ // Output bits per sample
742
+ if (params.Has("output_bps") && params.Get("output_bps").IsNumber()) {
743
+ processor->imgdata.params.output_bps = params.Get("output_bps").As<Napi::Number>().Int32Value();
744
+ }
745
+
746
+ // User multipliers
747
+ if (params.Has("user_mul") && params.Get("user_mul").IsArray()) {
748
+ Napi::Array userMul = params.Get("user_mul").As<Napi::Array>();
749
+ for (uint32_t i = 0; i < 4 && i < userMul.Length(); i++) {
750
+ processor->imgdata.params.user_mul[i] = userMul.Get(i).As<Napi::Number>().FloatValue();
751
+ }
752
+ }
753
+
754
+ // Auto bright
755
+ if (params.Has("no_auto_bright") && params.Get("no_auto_bright").IsBoolean()) {
756
+ processor->imgdata.params.no_auto_bright = params.Get("no_auto_bright").As<Napi::Boolean>().Value() ? 1 : 0;
757
+ }
758
+
759
+ // Highlight mode
760
+ if (params.Has("highlight") && params.Get("highlight").IsNumber()) {
761
+ processor->imgdata.params.highlight = params.Get("highlight").As<Napi::Number>().Int32Value();
762
+ }
763
+
764
+ // Output TIFF
765
+ if (params.Has("output_tiff") && params.Get("output_tiff").IsBoolean()) {
766
+ processor->imgdata.params.output_tiff = params.Get("output_tiff").As<Napi::Boolean>().Value() ? 1 : 0;
767
+ }
768
+
769
+ return Napi::Boolean::New(env, true);
770
+ } catch (const std::exception& e) {
771
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
772
+ return env.Null();
773
+ }
774
+ }
775
+
776
+ Napi::Value LibRawWrapper::GetOutputParams(const Napi::CallbackInfo& info) {
777
+ Napi::Env env = info.Env();
778
+ if (!CheckLoaded(env)) return env.Null();
779
+
780
+ Napi::Object params = Napi::Object::New(env);
781
+
782
+ try {
783
+ // Gamma
784
+ Napi::Array gamma = Napi::Array::New(env);
785
+ gamma.Set(0u, Napi::Number::New(env, processor->imgdata.params.gamm[0]));
786
+ gamma.Set(1u, Napi::Number::New(env, processor->imgdata.params.gamm[1]));
787
+ params.Set("gamma", gamma);
788
+
789
+ // Other parameters
790
+ params.Set("bright", Napi::Number::New(env, processor->imgdata.params.bright));
791
+ params.Set("output_color", Napi::Number::New(env, processor->imgdata.params.output_color));
792
+ params.Set("output_bps", Napi::Number::New(env, processor->imgdata.params.output_bps));
793
+ params.Set("no_auto_bright", Napi::Boolean::New(env, processor->imgdata.params.no_auto_bright));
794
+ params.Set("highlight", Napi::Number::New(env, processor->imgdata.params.highlight));
795
+ params.Set("output_tiff", Napi::Boolean::New(env, processor->imgdata.params.output_tiff));
796
+
797
+ // User multipliers
798
+ Napi::Array userMul = Napi::Array::New(env);
799
+ for (int i = 0; i < 4; i++) {
800
+ userMul.Set(i, Napi::Number::New(env, processor->imgdata.params.user_mul[i]));
801
+ }
802
+ params.Set("user_mul", userMul);
803
+
804
+ return params;
805
+ } catch (const std::exception& e) {
806
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
807
+ return env.Null();
808
+ }
809
+ }
810
+
811
+ // ============== UTILITY FUNCTIONS ==============
812
+
813
+ Napi::Value LibRawWrapper::IsFloatingPoint(const Napi::CallbackInfo& info) {
814
+ Napi::Env env = info.Env();
815
+ if (!CheckLoaded(env)) return env.Null();
816
+
817
+ bool isFloating = processor->is_floating_point();
818
+ return Napi::Boolean::New(env, isFloating);
819
+ }
820
+
821
+ Napi::Value LibRawWrapper::IsFujiRotated(const Napi::CallbackInfo& info) {
822
+ Napi::Env env = info.Env();
823
+ if (!CheckLoaded(env)) return env.Null();
824
+
825
+ bool isFuji = processor->is_fuji_rotated();
826
+ return Napi::Boolean::New(env, isFuji);
827
+ }
828
+
829
+ Napi::Value LibRawWrapper::IsSRAW(const Napi::CallbackInfo& info) {
830
+ Napi::Env env = info.Env();
831
+ if (!CheckLoaded(env)) return env.Null();
832
+
833
+ bool isSraw = processor->is_sraw();
834
+ return Napi::Boolean::New(env, isSraw);
835
+ }
836
+
837
+ Napi::Value LibRawWrapper::IsJPEGThumb(const Napi::CallbackInfo& info) {
838
+ Napi::Env env = info.Env();
839
+ if (!CheckLoaded(env)) return env.Null();
840
+
841
+ bool isJpeg = processor->is_jpeg_thumb();
842
+ return Napi::Boolean::New(env, isJpeg);
843
+ }
844
+
845
+ Napi::Value LibRawWrapper::ErrorCount(const Napi::CallbackInfo& info) {
846
+ Napi::Env env = info.Env();
847
+ if (!CheckLoaded(env)) return env.Null();
848
+
849
+ int errors = processor->error_count();
850
+ return Napi::Number::New(env, errors);
851
+ }
852
+
853
+ // ============== STATIC METHODS ==============
854
+
855
+ Napi::Value LibRawWrapper::GetVersion(const Napi::CallbackInfo& info) {
856
+ Napi::Env env = info.Env();
857
+
858
+ const char* version = LibRaw::version();
859
+ return Napi::String::New(env, version ? version : "Unknown");
860
+ }
861
+
862
+ Napi::Value LibRawWrapper::GetCapabilities(const Napi::CallbackInfo& info) {
863
+ Napi::Env env = info.Env();
864
+
865
+ unsigned int caps = LibRaw::capabilities();
866
+ return Napi::Number::New(env, caps);
867
+ }
868
+
869
+ Napi::Value LibRawWrapper::GetCameraList(const Napi::CallbackInfo& info) {
870
+ Napi::Env env = info.Env();
871
+
872
+ const char** cameras = LibRaw::cameraList();
873
+ Napi::Array result = Napi::Array::New(env);
874
+
875
+ if (cameras) {
876
+ uint32_t index = 0;
877
+ while (cameras[index] != nullptr) {
878
+ result.Set(index, Napi::String::New(env, cameras[index]));
879
+ index++;
880
+ }
881
+ }
882
+
883
+ return result;
884
+ }
885
+
886
+ Napi::Value LibRawWrapper::GetCameraCount(const Napi::CallbackInfo& info) {
887
+ Napi::Env env = info.Env();
888
+
889
+ int count = LibRaw::cameraCount();
890
+ return Napi::Number::New(env, count);
891
+ }
892
+
893
+ // ============== EXTENDED UTILITY FUNCTIONS ==============
894
+
895
+ Napi::Value LibRawWrapper::IsNikonSRAW(const Napi::CallbackInfo& info) {
896
+ Napi::Env env = info.Env();
897
+ if (!CheckLoaded(env)) return env.Null();
898
+
899
+ bool isNikonSraw = processor->is_nikon_sraw();
900
+ return Napi::Boolean::New(env, isNikonSraw);
901
+ }
902
+
903
+ Napi::Value LibRawWrapper::IsCoolscanNEF(const Napi::CallbackInfo& info) {
904
+ Napi::Env env = info.Env();
905
+ if (!CheckLoaded(env)) return env.Null();
906
+
907
+ bool isCoolscan = processor->is_coolscan_nef();
908
+ return Napi::Boolean::New(env, isCoolscan);
909
+ }
910
+
911
+ Napi::Value LibRawWrapper::HaveFPData(const Napi::CallbackInfo& info) {
912
+ Napi::Env env = info.Env();
913
+ if (!CheckLoaded(env)) return env.Null();
914
+
915
+ bool haveFP = processor->have_fpdata();
916
+ return Napi::Boolean::New(env, haveFP);
917
+ }
918
+
919
+ Napi::Value LibRawWrapper::SrawMidpoint(const Napi::CallbackInfo& info) {
920
+ Napi::Env env = info.Env();
921
+ if (!CheckLoaded(env)) return env.Null();
922
+
923
+ int midpoint = processor->sraw_midpoint();
924
+ return Napi::Number::New(env, midpoint);
925
+ }
926
+
927
+ Napi::Value LibRawWrapper::ThumbOK(const Napi::CallbackInfo& info) {
928
+ Napi::Env env = info.Env();
929
+ if (!CheckLoaded(env)) return env.Null();
930
+
931
+ try {
932
+ // thumbOK can take a max size parameter, default -1 for no limit
933
+ INT64 maxSize = -1;
934
+ if (info.Length() > 0 && info[0].IsNumber()) {
935
+ maxSize = info[0].As<Napi::Number>().Int64Value();
936
+ }
937
+
938
+ int result = processor->thumbOK(maxSize);
939
+ return Napi::Number::New(env, result);
940
+ } catch (const std::exception& e) {
941
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
942
+ return env.Null();
943
+ }
944
+ }
945
+
946
+ Napi::Value LibRawWrapper::UnpackFunctionName(const Napi::CallbackInfo& info) {
947
+ Napi::Env env = info.Env();
948
+ if (!CheckLoaded(env)) return env.Null();
949
+
950
+ const char* name = processor->unpack_function_name();
951
+ return Napi::String::New(env, name ? name : "Unknown");
952
+ }
953
+
954
+ Napi::Value LibRawWrapper::GetDecoderInfo(const Napi::CallbackInfo& info) {
955
+ Napi::Env env = info.Env();
956
+ if (!CheckLoaded(env)) return env.Null();
957
+
958
+ try {
959
+ libraw_decoder_info_t decoder_info;
960
+ int ret = processor->get_decoder_info(&decoder_info);
961
+
962
+ if (ret != LIBRAW_SUCCESS) {
963
+ std::string error = "Failed to get decoder info: ";
964
+ error += libraw_strerror(ret);
965
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
966
+ return env.Null();
967
+ }
968
+
969
+ Napi::Object result = Napi::Object::New(env);
970
+ result.Set("decoder_name", Napi::String::New(env, decoder_info.decoder_name ? decoder_info.decoder_name : "Unknown"));
971
+ result.Set("decoder_flags", Napi::Number::New(env, decoder_info.decoder_flags));
972
+
973
+ return result;
974
+ } catch (const std::exception& e) {
975
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
976
+ return env.Null();
977
+ }
978
+ }
979
+
980
+ // ============== ADVANCED PROCESSING ==============
981
+
982
+ Napi::Value LibRawWrapper::Unpack(const Napi::CallbackInfo& info) {
983
+ Napi::Env env = info.Env();
984
+ if (!CheckLoaded(env)) return env.Null();
985
+
986
+ try {
987
+ int ret = processor->unpack();
988
+ if (ret != LIBRAW_SUCCESS) {
989
+ std::string error = "Failed to unpack: ";
990
+ error += libraw_strerror(ret);
991
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
992
+ return env.Null();
993
+ }
994
+
995
+ return Napi::Boolean::New(env, true);
996
+ } catch (const std::exception& e) {
997
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
998
+ return env.Null();
999
+ }
1000
+ }
1001
+
1002
+ Napi::Value LibRawWrapper::Raw2ImageEx(const Napi::CallbackInfo& info) {
1003
+ Napi::Env env = info.Env();
1004
+ if (!CheckLoaded(env)) return env.Null();
1005
+
1006
+ try {
1007
+ // Default to subtract black, can be overridden
1008
+ int do_subtract_black = 1;
1009
+ if (info.Length() > 0 && info[0].IsBoolean()) {
1010
+ do_subtract_black = info[0].As<Napi::Boolean>().Value() ? 1 : 0;
1011
+ }
1012
+
1013
+ int ret = processor->raw2image_ex(do_subtract_black);
1014
+ if (ret != LIBRAW_SUCCESS) {
1015
+ std::string error = "Failed to convert raw to image: ";
1016
+ error += libraw_strerror(ret);
1017
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1018
+ return env.Null();
1019
+ }
1020
+
1021
+ return Napi::Boolean::New(env, true);
1022
+ } catch (const std::exception& e) {
1023
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1024
+ return env.Null();
1025
+ }
1026
+ }
1027
+
1028
+ Napi::Value LibRawWrapper::AdjustSizesInfoOnly(const Napi::CallbackInfo& info) {
1029
+ Napi::Env env = info.Env();
1030
+ if (!CheckLoaded(env)) return env.Null();
1031
+
1032
+ try {
1033
+ int ret = processor->adjust_sizes_info_only();
1034
+ if (ret != LIBRAW_SUCCESS) {
1035
+ std::string error = "Failed to adjust sizes: ";
1036
+ error += libraw_strerror(ret);
1037
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1038
+ return env.Null();
1039
+ }
1040
+
1041
+ return Napi::Boolean::New(env, true);
1042
+ } catch (const std::exception& e) {
1043
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1044
+ return env.Null();
1045
+ }
1046
+ }
1047
+
1048
+ Napi::Value LibRawWrapper::FreeImage(const Napi::CallbackInfo& info) {
1049
+ Napi::Env env = info.Env();
1050
+ if (!CheckLoaded(env)) return env.Null();
1051
+
1052
+ processor->free_image();
1053
+ return Napi::Boolean::New(env, true);
1054
+ }
1055
+
1056
+ Napi::Value LibRawWrapper::ConvertFloatToInt(const Napi::CallbackInfo& info) {
1057
+ Napi::Env env = info.Env();
1058
+ if (!CheckLoaded(env)) return env.Null();
1059
+
1060
+ try {
1061
+ // Default values from LibRaw
1062
+ float dmin = 4096.0f;
1063
+ float dmax = 32767.0f;
1064
+ float dtarget = 16383.0f;
1065
+
1066
+ if (info.Length() > 0 && info[0].IsNumber()) {
1067
+ dmin = info[0].As<Napi::Number>().FloatValue();
1068
+ }
1069
+ if (info.Length() > 1 && info[1].IsNumber()) {
1070
+ dmax = info[1].As<Napi::Number>().FloatValue();
1071
+ }
1072
+ if (info.Length() > 2 && info[2].IsNumber()) {
1073
+ dtarget = info[2].As<Napi::Number>().FloatValue();
1074
+ }
1075
+
1076
+ processor->convertFloatToInt(dmin, dmax, dtarget);
1077
+ return Napi::Boolean::New(env, true);
1078
+ } catch (const std::exception& e) {
1079
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1080
+ return env.Null();
1081
+ }
1082
+ }
1083
+
1084
+ // ============== MEMORY OPERATIONS EXTENDED ==============
1085
+
1086
+ Napi::Value LibRawWrapper::GetMemImageFormat(const Napi::CallbackInfo& info) {
1087
+ Napi::Env env = info.Env();
1088
+ if (!CheckLoaded(env)) return env.Null();
1089
+
1090
+ try {
1091
+ int width, height, colors, bps;
1092
+ processor->get_mem_image_format(&width, &height, &colors, &bps);
1093
+
1094
+ Napi::Object result = Napi::Object::New(env);
1095
+ result.Set("width", Napi::Number::New(env, width));
1096
+ result.Set("height", Napi::Number::New(env, height));
1097
+ result.Set("colors", Napi::Number::New(env, colors));
1098
+ result.Set("bps", Napi::Number::New(env, bps));
1099
+
1100
+ return result;
1101
+ } catch (const std::exception& e) {
1102
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1103
+ return env.Null();
1104
+ }
1105
+ }
1106
+
1107
+ Napi::Value LibRawWrapper::CopyMemImage(const Napi::CallbackInfo& info) {
1108
+ Napi::Env env = info.Env();
1109
+ if (!CheckLoaded(env)) return env.Null();
1110
+
1111
+ if (info.Length() < 3 || !info[0].IsBuffer() || !info[1].IsNumber() || !info[2].IsBoolean()) {
1112
+ Napi::TypeError::New(env, "Expected (buffer, stride, bgr)").ThrowAsJavaScriptException();
1113
+ return env.Null();
1114
+ }
1115
+
1116
+ try {
1117
+ Napi::Buffer<uint8_t> buffer = info[0].As<Napi::Buffer<uint8_t>>();
1118
+ int stride = info[1].As<Napi::Number>().Int32Value();
1119
+ int bgr = info[2].As<Napi::Boolean>().Value() ? 1 : 0;
1120
+
1121
+ int ret = processor->copy_mem_image(buffer.Data(), stride, bgr);
1122
+ if (ret != LIBRAW_SUCCESS) {
1123
+ std::string error = "Failed to copy memory image: ";
1124
+ error += libraw_strerror(ret);
1125
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1126
+ return env.Null();
1127
+ }
1128
+
1129
+ return Napi::Boolean::New(env, true);
1130
+ } catch (const std::exception& e) {
1131
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1132
+ return env.Null();
1133
+ }
1134
+ }
1135
+
1136
+ // ============== COLOR OPERATIONS ==============
1137
+
1138
+ Napi::Value LibRawWrapper::GetColorAt(const Napi::CallbackInfo& info) {
1139
+ Napi::Env env = info.Env();
1140
+ if (!CheckLoaded(env)) return env.Null();
1141
+
1142
+ if (info.Length() < 2 || !info[0].IsNumber() || !info[1].IsNumber()) {
1143
+ Napi::TypeError::New(env, "Expected (row, col)").ThrowAsJavaScriptException();
1144
+ return env.Null();
1145
+ }
1146
+
1147
+ try {
1148
+ int row = info[0].As<Napi::Number>().Int32Value();
1149
+ int col = info[1].As<Napi::Number>().Int32Value();
1150
+
1151
+ int color = processor->COLOR(row, col);
1152
+ return Napi::Number::New(env, color);
1153
+ } catch (const std::exception& e) {
1154
+ Napi::Error::New(env, e.what()).ThrowAsJavaScriptException();
1155
+ return env.Null();
1156
+ }
1157
+ }
1158
+
1159
+ // ============== CANCELLATION SUPPORT ==============
1160
+
1161
+ Napi::Value LibRawWrapper::SetCancelFlag(const Napi::CallbackInfo& info) {
1162
+ Napi::Env env = info.Env();
1163
+
1164
+ processor->setCancelFlag();
1165
+ return Napi::Boolean::New(env, true);
1166
+ }
1167
+
1168
+ Napi::Value LibRawWrapper::ClearCancelFlag(const Napi::CallbackInfo& info) {
1169
+ Napi::Env env = info.Env();
1170
+
1171
+ processor->clearCancelFlag();
1172
+ return Napi::Boolean::New(env, true);
1173
+ }
1174
+
1175
+ // ============== VERSION INFORMATION (INSTANCE METHODS) ==============
1176
+
1177
+ Napi::Value LibRawWrapper::Version(const Napi::CallbackInfo& info) {
1178
+ Napi::Env env = info.Env();
1179
+
1180
+ const char* version = processor->version();
1181
+ return Napi::String::New(env, version);
1182
+ }
1183
+
1184
+ Napi::Value LibRawWrapper::VersionNumber(const Napi::CallbackInfo& info) {
1185
+ Napi::Env env = info.Env();
1186
+
1187
+ int versionNum = processor->versionNumber();
1188
+
1189
+ // LibRaw version number is encoded as XXYYZZ where XX.YY.ZZ is the version
1190
+ int major = versionNum / 10000;
1191
+ int minor = (versionNum % 10000) / 100;
1192
+ int patch = versionNum % 100;
1193
+
1194
+ Napi::Array result = Napi::Array::New(env, 3);
1195
+ result[static_cast<uint32_t>(0)] = Napi::Number::New(env, major);
1196
+ result[static_cast<uint32_t>(1)] = Napi::Number::New(env, minor);
1197
+ result[static_cast<uint32_t>(2)] = Napi::Number::New(env, patch);
1198
+
1199
+ return result;
1200
+ }
1201
+
1202
+ // ============== ERROR HANDLING ==============
1203
+
1204
+ Napi::Value LibRawWrapper::GetLastError(const Napi::CallbackInfo& info) {
1205
+ Napi::Env env = info.Env();
1206
+
1207
+ // LibRaw doesn't store the last error, so we return a generic message
1208
+ // In practice, errors are thrown as exceptions
1209
+ return Napi::String::New(env, "No error information available");
1210
+ }
1211
+
1212
+ Napi::Value LibRawWrapper::Strerror(const Napi::CallbackInfo& info) {
1213
+ Napi::Env env = info.Env();
1214
+
1215
+ if (info.Length() < 1 || !info[0].IsNumber()) {
1216
+ Napi::TypeError::New(env, "Expected error code as number").ThrowAsJavaScriptException();
1217
+ return env.Null();
1218
+ }
1219
+
1220
+ int errorCode = info[0].As<Napi::Number>().Int32Value();
1221
+ const char* errorMsg = processor->strerror(errorCode);
1222
+ return Napi::String::New(env, errorMsg);
1223
+ }