@photivra/engine 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dng-import.js","sourceRoot":"","sources":["../../src/capture/dng-import.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// This product includes DNG technology under license by Adobe.\n\n/**\n * Browser-safe reader for DNG and TIFF-EP raw files with a CFA (colour filter array) mosaic.\n *\n * It was written independently from the published TIFF 6.0 tag definitions, the Adobe Digital\n * Negative (DNG) Specification 1.7.1.0 and the Exif 2.32/3.0 CFAPattern definition (CIPA DC-008;\n * the TIFF/EP tags are also specified in ISO 12234-2). No third-party reader source was used.\n *\n * It returns the stored raw codes plus the metadata the engine's RAW development needs: CFA\n * pattern, black and white levels, active area, default crop, colour matrices, as-shot neutral,\n * calibration illuminants and orientation. It never applies linearization, black subtraction,\n * white balance, demosaicing or colour transforms.\n *\n * Input is untrusted. Every offset, count, IFD (image file directory) chain, strip or tile table\n * and decoded size is checked against the buffer and explicit limits before allocation. IFD loops,\n * IFDs that alias each other, oversized frames and over-long tag arrays fail with\n * `InvalidConfigurationError`.\n * @see docs/IMPORT_AND_PNG.md for supported subsets and limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseLosslessJpeg } from \"./lossless-jpeg.js\";\n\nexport const DNG_IMPORT_SCHEMA_VERSION = \"1.0.0\" as const;\n/** Upper bound for `maximumPixels`. 200 MP (megapixels) of 16-bit codes is 400 MB. */\nexport const DNG_IMPORT_LIMITS = Object.freeze({ defaultMaximumPixels: 64_000_000, maximumPixels: 200_000_000, defaultMaximumIfds: 64, maximumIfds: 1024 });\nexport interface DngImportInput {\n bytes: Uint8Array;\n /** Pixel-count limit (width x height), checked before any decode allocation. Default 64 000 000, at most 200 000 000. */\n maximumPixels?: number;\n /** Total IFDs (main chain plus SubIFDs) visited. Default 64, at most 1024. */\n maximumIfds?: number;\n}\n/** Repeating CFA pattern. Its origin is the top-left corner of `activeArea` (DNG 1.7.1.0, PhotometricInterpretation). */\nexport interface ImportedDngCfa {\n repeatRows: number;\n repeatColumns: number;\n /** Row-major plane indices into `planeColors`, length repeatRows x repeatColumns. */\n pattern: number[];\n /** CFAPlaneColor: 0 red, 1 green, 2 blue, 3 cyan, 4 magenta, 5 yellow, 6 white. Default [0, 1, 2]. */\n planeColors: number[];\n}\n/** Black level (the code for zero light) pattern, from BlackLevel, BlackLevelRepeatDim and BlackLevelDeltaH/V. Origin is the active-area top-left. */\nexport interface ImportedDngBlackLevel {\n repeatRows: number;\n repeatColumns: number;\n /** Row-column-sample order, length repeatRows x repeatColumns x samplesPerPixel. */\n values: number[];\n /** Per active-area column offset, or null when absent (all zeros). */\n deltaH: number[] | null;\n /** Per active-area row offset, or null when absent (all zeros). */\n deltaV: number[] | null;\n}\n/** Half-open raster rectangle in stored-image pixel coordinates (+X right, +Y down). */\nexport interface ImportedDngRect { x: number; y: number; width: number; height: number }\nexport interface ImportedDngRaw {\n schemaVersion: typeof DNG_IMPORT_SCHEMA_VERSION;\n byteOrder: \"little-endian\" | \"big-endian\";\n /** DNGVersion bytes, or null for a TIFF-EP file without DNG tags. */\n dngVersion: [number, number, number, number] | null;\n make: string | null;\n model: string | null;\n uniqueCameraModel: string | null;\n /** TIFF/Exif Orientation 1..8 (default 1). Codes are returned in stored, not oriented, order. */\n orientation: number;\n width: number;\n height: number;\n samplesPerPixel: number;\n bitsPerSample: number;\n compression: \"uncompressed\" | \"lossless-jpeg\";\n photometricInterpretation: \"cfa\" | \"linear-raw\";\n /** Stored raw codes, row-major then sample, length width x height x samplesPerPixel. */\n codes: Uint16Array;\n cfa: ImportedDngCfa | null;\n /** LinearizationTable when present; not applied to `codes`. */\n linearizationTable: Uint16Array | null;\n blackLevel: ImportedDngBlackLevel;\n /** WhiteLevel per sample (default 2^bitsPerSample − 1). */\n whiteLevel: number[];\n /** ActiveArea as a rectangle (default the whole image). */\n activeArea: ImportedDngRect;\n /** DefaultCropOrigin/Size relative to the active-area origin; may be fractional (RATIONAL). */\n defaultCrop: ImportedDngRect;\n /** XYZ → camera (reference) matrices, row-major colorPlanes x 3, or null. */\n colorMatrix1: number[] | null;\n colorMatrix2: number[] | null;\n /** CalibrationIlluminant1/2 (Exif LightSource code), or null when absent. */\n calibrationIlluminant1: number | null;\n calibrationIlluminant2: number | null;\n /** AsShotNeutral in camera (reference) coordinates, or null. */\n asShotNeutral: number[] | null;\n /** RawDataUniqueID as 32 lowercase hex digits, or null. */\n rawDataUniqueId: string | null;\n}\n\nconst TYPE_SIZES = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4] as const;\ninterface Entry { type: number; count: number; at: number }\ntype Ifd = Map<number, Entry>;\nfunction fail(message: string): never { throw new InvalidConfigurationError(\"DNG import: \" + message); }\nfunction limit(value: number | undefined, fallback: number, max: number, name: string): number {\n if (value === undefined) return fallback;\n if (!Number.isSafeInteger(value) || value < 1 || value > max) fail(name + \" must be an integer from 1 to \" + max + \".\");\n return value;\n}\n\n/**\n * Parse one DNG or TIFF-EP file and decode its primary CFA or LinearRaw image (the first IFD with\n * NewSubFileType 0 and PhotometricInterpretation 32803 or 34892, in IFD-chain then SubIFD order).\n *\n * Supported raw data: Compression 1 at 8..16 bits/sample (8 bits as bytes, 16 bits in the file byte\n * order, other depths packed MSB-first with byte-aligned rows, per DNG BitsPerSample) and Compression 7\n * lossless Huffman JPEG (T.81 Annex H) in strips or tiles, chunky planar configuration only.\n * @returns Owned typed arrays and plain metadata; nothing is applied to the codes.\n */\nexport function parseDngRawImage(input: DngImportInput): ImportedDngRaw {\n if (input === null || typeof input !== \"object\") fail(\"input must be an object.\");\n for (const key of Object.keys(input)) if (![\"bytes\", \"maximumPixels\", \"maximumIfds\"].includes(key)) fail(`unknown input field. Unknown field ${JSON.stringify(key)}.`);\n const bytes = input.bytes;\n if (!(bytes instanceof Uint8Array)) fail(\"bytes must be a Uint8Array.\");\n const maximumPixels = limit(input.maximumPixels, DNG_IMPORT_LIMITS.defaultMaximumPixels, DNG_IMPORT_LIMITS.maximumPixels, \"maximumPixels\");\n const maximumIfds = limit(input.maximumIfds, DNG_IMPORT_LIMITS.defaultMaximumIfds, DNG_IMPORT_LIMITS.maximumIfds, \"maximumIfds\");\n const n = bytes.length, view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (n < 8) fail(\"file is too short.\");\n const little = bytes[0] === 0x49 && bytes[1] === 0x49;\n if (!little && !(bytes[0] === 0x4d && bytes[1] === 0x4d)) fail(\"missing TIFF byte-order mark.\");\n const u16 = (o: number): number => view.getUint16(o, little), u32 = (o: number): number => view.getUint32(o, little);\n if (u16(2) === 43) fail(\"BigTIFF is not supported.\");\n if (u16(2) !== 42) fail(\"missing TIFF magic number.\");\n\n const visited = new Set<number>(), ifds: Ifd[] = [];\n const readIfd = (offset: number): { ifd: Ifd; next: number } => {\n if (offset < 8 || offset % 2 !== 0 || offset + 2 > n) fail(\"IFD offset out of range.\");\n if (visited.has(offset)) fail(\"IFD loop or aliased IFD.\");\n if (visited.size >= maximumIfds) fail(\"too many IFDs.\");\n visited.add(offset);\n const count = u16(offset), end = offset + 2 + count * 12;\n if (count === 0 || end + 4 > n) fail(\"IFD exceeds the file.\");\n const ifd: Ifd = new Map();\n for (let i = 0; i < count; i++) {\n const p = offset + 2 + i * 12, id = u16(p), type = u16(p + 2), c = u32(p + 4);\n if (ifd.has(id)) fail(\"duplicate tag in one IFD.\");\n if (type < 1 || type > 13) continue; // TIFF 6.0: readers skip fields of unknown type.\n const size = TYPE_SIZES[type]! * c, at = size <= 4 ? p + 8 : u32(p + 8);\n if (at + size > n) fail(\"tag value exceeds the file.\");\n ifd.set(id, { type, count: c, at });\n }\n return { ifd, next: u32(end) };\n };\n const walk = (offset: number, depth: number): void => {\n for (let next = offset; next !== 0;) {\n const { ifd, next: following } = readIfd(next);\n ifds.push(ifd);\n const sub = ifd.get(330);\n if (sub) {\n if (depth >= 3) fail(\"SubIFD nesting is too deep.\");\n if ((sub.type !== 4 && sub.type !== 13) || sub.count > maximumIfds) fail(\"invalid SubIFDs tag.\");\n for (let i = 0; i < sub.count; i++) walk(u32(sub.at + i * 4), depth + 1);\n }\n next = following;\n }\n };\n walk(u32(4), 0);\n\n const numbers = (entry: Entry | undefined, maximumCount: number): number[] | null => {\n if (!entry) return null;\n if (entry.count > maximumCount) fail(\"tag count exceeds its expected size.\");\n const out: number[] = [], { type, at } = entry;\n for (let i = 0; i < entry.count; i++) {\n switch (type) {\n case 1: case 7: out.push(bytes[at + i]!); break;\n case 6: out.push(view.getInt8(at + i)); break;\n case 3: out.push(u16(at + i * 2)); break;\n case 8: out.push(view.getInt16(at + i * 2, little)); break;\n case 4: case 13: out.push(u32(at + i * 4)); break;\n case 9: out.push(view.getInt32(at + i * 4, little)); break;\n case 5: case 10: {\n const num = type === 5 ? u32(at + i * 8) : view.getInt32(at + i * 8, little), den = type === 5 ? u32(at + i * 8 + 4) : view.getInt32(at + i * 8 + 4, little);\n if (den === 0) fail(\"rational with zero denominator.\");\n out.push(num / den); break;\n }\n case 11: out.push(view.getFloat32(at + i * 4, little)); break;\n case 12: out.push(view.getFloat64(at + i * 8, little)); break;\n default: fail(\"unsupported tag type.\");\n }\n if (!Number.isFinite(out[i])) fail(\"non-finite tag value.\");\n }\n return out;\n };\n const integers = (entry: Entry | undefined, maximumCount: number, types: readonly number[]): number[] | null => {\n if (entry && !types.includes(entry.type)) fail(\"tag has an unsupported field type.\");\n return numbers(entry, maximumCount);\n };\n const ascii = (entry: Entry | undefined): string | null => {\n if (!entry) return null;\n if (entry.type !== 2 || entry.count > 4096) fail(\"invalid ASCII tag.\");\n let s = \"\";\n for (let i = 0; i < entry.count && bytes[entry.at + i] !== 0; i++) s += String.fromCharCode(bytes[entry.at + i]!);\n return s;\n };\n const one = (ifd: Ifd, id: number, fallback: number): number => {\n const v = integers(ifd.get(id), 1, [3, 4]);\n return v ? v[0]! : fallback;\n };\n\n const raw = ifds.find((ifd) => one(ifd, 254, 0) === 0 && [32803, 34892].includes(one(ifd, 262, -1)));\n if (!raw) fail(\"no primary CFA or LinearRaw image IFD.\");\n const ifd0 = ifds[0]!;\n // DNG places camera-level tags in IFD 0; TIFF-EP files may carry them only in the raw IFD.\n const pick = (id: number): Entry | undefined => ifd0.get(id) ?? raw.get(id);\n\n const width = one(raw, 256, 0), height = one(raw, 257, 0), spp = one(raw, 277, 1), compressionCode = one(raw, 259, 1), photometric = one(raw, 262, 0);\n if (width < 1 || height < 1 || width > 65535 * 4 || height > 65535 * 4) fail(\"invalid image dimensions.\");\n if (width * height > maximumPixels) fail(\"image exceeds the pixel limit.\");\n const cfaImage = photometric === 32803;\n if (cfaImage ? spp !== 1 : spp < 1 || spp > 4) fail(\"unsupported SamplesPerPixel.\");\n if (spp > 1 && one(raw, 284, 1) !== 1) fail(\"only chunky PlanarConfiguration is supported.\");\n const bps = integers(raw.get(258), spp, [3]) ?? [1];\n if (bps.length !== spp || bps.some((b) => b !== bps[0])) fail(\"BitsPerSample must be equal for every sample.\");\n const bitsPerSample = bps[0]!;\n if (bitsPerSample < 8 || bitsPerSample > 16) fail(\"only 8 to 16 bits per sample are supported.\");\n if (one(raw, 339, 1) !== 1) fail(\"only unsigned integer samples are supported.\");\n if (compressionCode !== 1 && compressionCode !== 7) fail(\"only uncompressed and lossless JPEG raw data are supported.\");\n const dngVersionTag = integers(ifd0.get(50706), 4, [1]);\n const dngVersion = dngVersionTag && dngVersionTag.length === 4 ? dngVersionTag as [number, number, number, number] : null;\n if (dngVersionTag && !dngVersion) fail(\"invalid DNGVersion.\");\n\n // Strip or tile layout.\n const tiled = raw.has(322) || raw.has(324);\n const tileWidth = tiled ? one(raw, 322, 0) : width, tileLength = tiled ? one(raw, 323, 0) : Math.min(height, one(raw, 278, 0xffffffff));\n if (tileWidth < 1 || tileLength < 1 || tileWidth > 65535 * 4 || tileLength > 65535 * 4 || (tiled && tileWidth * tileLength > maximumPixels)) fail(\"invalid strip or tile size.\");\n const across = Math.ceil(width / tileWidth), down = Math.ceil(height / tileLength), chunks = across * down;\n const offsets = integers(raw.get(tiled ? 324 : 273), chunks, [3, 4]), counts = integers(raw.get(tiled ? 325 : 279), chunks, [3, 4]);\n if (!offsets || !counts || offsets.length !== chunks || counts.length !== chunks) fail(\"strip or tile tables do not match the image layout.\");\n for (let i = 0; i < chunks; i++) if (offsets[i]! + counts[i]! > n) fail(\"strip or tile data exceeds the file.\");\n\n const codes = new Uint16Array(width * height * spp), maxCode = 2 ** bitsPerSample - 1;\n for (let ty = 0; ty < down; ty++) for (let tx = 0; tx < across; tx++) {\n const index = ty * across + tx, start = offsets[index]!, data = bytes.subarray(start, start + counts[index]!);\n // Strips cover whole rows (the last may be short); tiles are always full-size and clipped on copy.\n const chunkWidth = tiled ? tileWidth : width, chunkRows = tiled ? tileLength : Math.min(tileLength, height - ty * tileLength);\n const chunkSamples = chunkWidth * chunkRows * spp, x0 = tx * tileWidth, y0 = ty * tileLength;\n let samples: Uint16Array;\n if (compressionCode === 7) {\n const image = parseLosslessJpeg(data, { maximumSamples: chunkSamples, legacySixteenBitDifference: dngVersion !== null && (dngVersion[0] < 1 || (dngVersion[0] === 1 && dngVersion[1] < 1)) });\n if (image.width * image.height * image.components !== chunkSamples) fail(\"lossless JPEG sample count does not match the strip or tile.\");\n samples = image.samples;\n } else samples = unpack(data, chunkWidth * spp, chunkRows, bitsPerSample, little);\n for (let y = 0; y < chunkRows && y0 + y < height; y++) {\n const columns = Math.min(chunkWidth, width - x0) * spp, from = y * chunkWidth * spp, to = ((y0 + y) * width + x0) * spp;\n for (let i = 0; i < columns; i++) {\n const v = samples[from + i]!;\n if (v > maxCode) fail(\"raw code exceeds BitsPerSample.\");\n codes[to + i] = v;\n }\n }\n }\n\n // CFA description.\n let cfa: ImportedDngCfa | null = null, colorPlanes = spp;\n if (cfaImage) {\n const dim = integers(raw.get(33421), 2, [3]), pattern = integers(raw.get(33422), 256, [1]);\n if (!dim || dim.length !== 2 || dim[0]! < 1 || dim[1]! < 1 || !pattern || pattern.length !== dim[0]! * dim[1]!) fail(\"CFA images require CFARepeatPatternDim and a matching CFAPattern.\");\n const planeColors = integers(raw.get(50710), 16, [1]) ?? [0, 1, 2];\n if (planeColors.length < 1 || planeColors.some((c) => c > 6) || new Set(planeColors).size !== planeColors.length) fail(\"invalid CFAPlaneColor.\");\n if (pattern.some((v) => v >= planeColors.length)) fail(\"CFAPattern references an undefined plane.\");\n if (one(raw, 50711, 1) !== 1) fail(\"only rectangular CFALayout is supported.\");\n cfa = { repeatRows: dim[0]!, repeatColumns: dim[1]!, pattern, planeColors };\n colorPlanes = planeColors.length;\n }\n\n // Active area, levels and crop.\n const area = integers(raw.get(50829), 4, [3, 4]) ?? [0, 0, height, width];\n if (area.length !== 4 || area[0]! >= area[2]! || area[1]! >= area[3]! || area[2]! > height || area[3]! > width) fail(\"ActiveArea is outside the image.\");\n const activeArea = { x: area[1]!, y: area[0]!, width: area[3]! - area[1]!, height: area[2]! - area[0]! };\n const repeat = integers(raw.get(50713), 2, [3]) ?? [1, 1];\n if (repeat.length !== 2 || repeat[0]! < 1 || repeat[1]! < 1 || repeat[0]! * repeat[1]! > 1024) fail(\"invalid BlackLevelRepeatDim.\");\n const levelCount = repeat[0]! * repeat[1]! * spp;\n const black = integers(raw.get(50714), levelCount, [3, 4, 5]) ?? Array<number>(levelCount).fill(0);\n if (black.length !== levelCount) fail(\"BlackLevel count does not match BlackLevelRepeatDim.\");\n const deltaH = integers(raw.get(50715), activeArea.width, [10]), deltaV = integers(raw.get(50716), activeArea.height, [10]);\n if ((deltaH && deltaH.length !== activeArea.width) || (deltaV && deltaV.length !== activeArea.height)) fail(\"BlackLevelDelta count does not match the ActiveArea.\");\n const whiteLevel = integers(raw.get(50717), spp, [3, 4]) ?? Array<number>(spp).fill(maxCode);\n if (whiteLevel.length !== spp) fail(\"WhiteLevel count does not match SamplesPerPixel.\");\n const origin = integers(raw.get(50719), 2, [3, 4, 5]) ?? [0, 0], size = integers(raw.get(50720), 2, [3, 4, 5]) ?? [width, height];\n if (origin.length !== 2 || size.length !== 2 || size[0]! <= 0 || size[1]! <= 0 || origin[0]! < 0 || origin[1]! < 0) fail(\"invalid default crop.\");\n const linear = integers(raw.get(50712), 65536, [3]);\n\n const matrix = (id: number): number[] | null => {\n const m = integers(pick(id), colorPlanes * 3, [10]);\n if (m && m.length !== colorPlanes * 3) fail(\"ColorMatrix count does not match the colour planes.\");\n return m;\n };\n const neutral = integers(pick(50728), colorPlanes, [3, 5]);\n if (neutral && (neutral.length !== colorPlanes || neutral.some((v) => v <= 0))) fail(\"invalid AsShotNeutral.\");\n const illuminant = (id: number): number | null => { const v = integers(pick(id), 1, [3]); return v ? v[0]! : null; };\n const uniqueId = integers(pick(50781), 16, [1]);\n if (uniqueId && uniqueId.length !== 16) fail(\"RawDataUniqueID must have 16 bytes.\");\n const orientation = one(ifd0.has(274) ? ifd0 : raw, 274, 1);\n if (orientation < 1 || orientation > 8) fail(\"invalid Orientation.\");\n\n return {\n schemaVersion: DNG_IMPORT_SCHEMA_VERSION, byteOrder: little ? \"little-endian\" : \"big-endian\", dngVersion,\n make: ascii(pick(271)), model: ascii(pick(272)), uniqueCameraModel: ascii(pick(50708)), orientation,\n width, height, samplesPerPixel: spp, bitsPerSample, compression: compressionCode === 1 ? \"uncompressed\" : \"lossless-jpeg\",\n photometricInterpretation: cfaImage ? \"cfa\" : \"linear-raw\", codes, cfa,\n linearizationTable: linear ? Uint16Array.from(linear) : null,\n blackLevel: { repeatRows: repeat[0]!, repeatColumns: repeat[1]!, values: black, deltaH, deltaV },\n whiteLevel, activeArea, defaultCrop: { x: origin[0]!, y: origin[1]!, width: size[0]!, height: size[1]! },\n colorMatrix1: matrix(50721), colorMatrix2: matrix(50722),\n calibrationIlluminant1: illuminant(50778), calibrationIlluminant2: illuminant(50779), asShotNeutral: neutral,\n rawDataUniqueId: uniqueId ? uniqueId.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\") : null\n };\n}\n\n/** Unpack uncompressed rows: 8-bit bytes, 16-bit words in file byte order, other depths MSB-first with byte-aligned rows. */\nfunction unpack(data: Uint8Array, rowSamples: number, rows: number, bits: number, little: boolean): Uint16Array {\n const rowBytes = Math.ceil(rowSamples * bits / 8), out = new Uint16Array(rowSamples * rows);\n if (data.length < rowBytes * rows) fail(\"uncompressed strip or tile is truncated.\");\n for (let y = 0; y < rows; y++) {\n const base = y * rowBytes, o = y * rowSamples;\n if (bits === 8) for (let i = 0; i < rowSamples; i++) out[o + i] = data[base + i]!;\n else if (bits === 16) for (let i = 0; i < rowSamples; i++) {\n const a = data[base + i * 2]!, b = data[base + i * 2 + 1]!;\n out[o + i] = little ? a | (b << 8) : (a << 8) | b;\n } else {\n // Bit accumulator, most significant bit first. At most bits + 7 <= 23 bits are pending, well within 32-bit integer range.\n let accumulator = 0, pending = 0, next = base;\n const mask = (1 << bits) - 1;\n for (let i = 0; i < rowSamples; i++) {\n while (pending < bits) { accumulator = ((accumulator << 8) | data[next++]!) & 0xffffff; pending += 8; }\n pending -= bits;\n out[o + i] = (accumulator >>> pending) & mask;\n }\n }\n }\n return out;\n}\n"]}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Simulates a RAW frame from a scene-radiance provider: provider radiance → optics → EQE (external
|
|
3
|
+
* quantum efficiency) → charge → noise → readout → RAW codes, for every native sensor site.
|
|
4
|
+
*
|
|
5
|
+
* Before calling any provider code, it checks that the sites cover the full native frame and that
|
|
6
|
+
* all inputs are supported. Dark current, charge completeness, capacity, noise and ADC
|
|
7
|
+
* (analogue-to-digital conversion) use the existing sensor modules. The RAW frame it returns works
|
|
8
|
+
* with the existing reconstruction and paired-export APIs.
|
|
6
9
|
* @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
|
|
7
10
|
* support limits.
|
|
8
11
|
*/
|
|
@@ -11,7 +14,7 @@ import { type CalculationResult } from "../core/calculation-result.js";
|
|
|
11
14
|
import { simulateSensorRawFrame, type SensorRawProducerInput, type SensorRawProducerSiteInput, type NativeRawProducerFrameContext, type SensorRawProducerExposureWindowInput } from "./sensor-raw-producer.js";
|
|
12
15
|
import { type SensorDarkCurrentProfile } from "../sensor/dark-current.js";
|
|
13
16
|
import { planEnvironmentSensorPhotoSignal, executeEnvironmentSensorPhotoSignal, type CalculateEnvironmentSensorPhotoSignalInput, type EnvironmentRadianceEvaluator, type EnvironmentApertureRadianceEvaluator } from "../sensor/environment-photo-signal.js";
|
|
14
|
-
/**
|
|
17
|
+
/** All native sites, in native order. Generated photo or dark charge cannot be passed in as a shortcut. */
|
|
15
18
|
export interface SimulateEnvironmentSensorRawFrameInput {
|
|
16
19
|
frame: SensorRawProducerInput["frame"];
|
|
17
20
|
sceneBinding: {
|
|
@@ -19,7 +22,7 @@ export interface SimulateEnvironmentSensorRawFrameInput {
|
|
|
19
22
|
providerSceneId: string;
|
|
20
23
|
evidence: readonly EvidenceProvenance[];
|
|
21
24
|
};
|
|
22
|
-
/**
|
|
25
|
+
/** The shared shutter schedule, tied to the committed frame duration. */
|
|
23
26
|
exposureWindow: NonNullable<SensorRawProducerInput["exposureWindow"]>;
|
|
24
27
|
sites: readonly {
|
|
25
28
|
environment: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">;
|
|
@@ -32,11 +35,14 @@ export interface SimulateEnvironmentSensorRawFrameInput {
|
|
|
32
35
|
evaluateApertureRadiance?: EnvironmentApertureRadianceEvaluator;
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
38
|
+
* Result: the approximate record of what ran, from provider to RAW.
|
|
39
|
+
*
|
|
40
|
+
* - `sites` keeps the per-site optics and EQE results.
|
|
41
|
+
* - `raw` keeps charge, capacity, seeded-noise and readout diagnostics, and the exact native frame.
|
|
42
|
+
* - `providerEvaluationCount` is the actual (bounded) work done, not a quality score.
|
|
43
|
+
*
|
|
44
|
+
* The cautious verification and activation flags belong to this standalone function. A parent
|
|
45
|
+
* production plan records its own execution and does not upgrade them.
|
|
40
46
|
*/
|
|
41
47
|
export interface EnvironmentSensorRawFrame {
|
|
42
48
|
upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe";
|
|
@@ -47,12 +53,26 @@ export interface EnvironmentSensorRawFrame {
|
|
|
47
53
|
sites: readonly ReturnType<typeof executeEnvironmentSensorPhotoSignal>[];
|
|
48
54
|
raw: ReturnType<typeof simulateSensorRawFrame>;
|
|
49
55
|
}
|
|
50
|
-
/** Internal frame-binding and scalar optical/EQE planning shared with bounded native execution. */
|
|
51
|
-
export declare function planEnvironmentRawSite(site: SimulateEnvironmentSensorRawFrameInput["sites"][number], i: number, frame: NativeRawProducerFrameContext, sceneBinding: SimulateEnvironmentSensorRawFrameInput["sceneBinding"], exposureWindow: SensorRawProducerExposureWindowInput): ReturnType<typeof planEnvironmentSensorPhotoSignal>;
|
|
52
56
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
57
|
+
* Internal per-frame cache of the frame's canonical strings that every site is compared with (a 2.0
|
|
58
|
+
* performance change). Each string is computed the first time a comparison needs it, so the first
|
|
59
|
+
* failing comparison and its error are unchanged. The cache is valid only for the exact frame and
|
|
60
|
+
* exposure-window objects it was made for; callers do not change them while planning a frame.
|
|
61
|
+
*/
|
|
62
|
+
export interface EnvironmentRawFrameCanonicalMemo {
|
|
63
|
+
readonly frame: NativeRawProducerFrameContext;
|
|
64
|
+
readonly exposureWindow: SensorRawProducerExposureWindowInput;
|
|
65
|
+
readonly strings: Map<"imagingArea" | "colorSamplingProfile" | "bindingProfile" | "exposureWindow" | "focus", string>;
|
|
66
|
+
}
|
|
67
|
+
export declare function createEnvironmentRawFrameCanonicalMemo(frame: NativeRawProducerFrameContext, exposureWindow: SensorRawProducerExposureWindowInput): EnvironmentRawFrameCanonicalMemo;
|
|
68
|
+
/** Internal: frame-binding checks and per-site optics/EQE planning, shared with bounded native execution. Same ownership rules as planEnvironmentSensorPhotoSignal. */
|
|
69
|
+
export declare function planEnvironmentRawSite(site: SimulateEnvironmentSensorRawFrameInput["sites"][number], i: number, frame: NativeRawProducerFrameContext, sceneBinding: SimulateEnvironmentSensorRawFrameInput["sceneBinding"], exposureWindow: SensorRawProducerExposureWindowInput, ownership?: "copy" | "engine-owned", memo?: EnvironmentRawFrameCanonicalMemo, retention?: "full" | "photo-only"): ReturnType<typeof planEnvironmentSensorPhotoSignal>;
|
|
70
|
+
/**
|
|
71
|
+
* Simulates a RAW frame from a scene-radiance provider.
|
|
72
|
+
*
|
|
73
|
+
* Before calling any provider code, it checks that the sites cover the full native
|
|
74
|
+
* frame and that all inputs are supported. Dark current, charge completeness,
|
|
75
|
+
* capacity, noise and ADC use the existing sensor modules. The returned RAW frame
|
|
76
|
+
* works with the existing reconstruction and paired-export APIs.
|
|
56
77
|
*/
|
|
57
78
|
export declare function simulateEnvironmentSensorRawFrame(input: SimulateEnvironmentSensorRawFrameInput): CalculationResult<EnvironmentSensorRawFrame>;
|
|
58
|
-
//# sourceMappingURL=environment-raw-producer.d.ts.map
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Simulates a RAW frame from a scene-radiance provider: provider radiance → optics → EQE (external
|
|
4
|
+
* quantum efficiency) → charge → noise → readout → RAW codes, for every native sensor site.
|
|
5
|
+
*
|
|
6
|
+
* Before calling any provider code, it checks that the sites cover the full native frame and that
|
|
7
|
+
* all inputs are supported. Dark current, charge completeness, capacity, noise and ADC
|
|
8
|
+
* (analogue-to-digital conversion) use the existing sensor modules. The RAW frame it returns works
|
|
9
|
+
* with the existing reconstruction and paired-export APIs.
|
|
7
10
|
* @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
|
|
8
11
|
* support limits.
|
|
9
12
|
*/
|
|
10
13
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
11
|
-
import { requirePublicOpaqueId } from "../core/record-validation.js";
|
|
14
|
+
import { requirePublicOpaqueId, requireInputKeys } from "../core/record-validation.js";
|
|
12
15
|
import { stringifyCanonicalJson } from "../core/canonical-json.js";
|
|
13
16
|
import { approximationResult } from "../core/calculation-result.js";
|
|
14
17
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
@@ -21,30 +24,46 @@ function canonical(value) {
|
|
|
21
24
|
return stringifyCanonicalJson(value, { undefinedObjectProperties: "omit",
|
|
22
25
|
nonFiniteNumberMessage: "Environment capture binding must be finite.", unsupportedValueMessage: "Environment capture binding requires plain data." });
|
|
23
26
|
}
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
export function createEnvironmentRawFrameCanonicalMemo(frame, exposureWindow) {
|
|
28
|
+
return { frame, exposureWindow, strings: new Map() };
|
|
29
|
+
}
|
|
30
|
+
/** Internal: frame-binding checks and per-site optics/EQE planning, shared with bounded native execution. Same ownership rules as planEnvironmentSensorPhotoSignal. */
|
|
31
|
+
export function planEnvironmentRawSite(site, i, frame, sceneBinding, exposureWindow, ownership = "copy", memo, retention = "full") {
|
|
26
32
|
const capture = frame.capture, native = capture.geometry.nativeRaster;
|
|
33
|
+
const strings = memo !== undefined && memo.frame === frame && memo.exposureWindow === exposureWindow ? memo.strings : undefined;
|
|
34
|
+
const frameCanonical = (key, value) => {
|
|
35
|
+
let text = strings?.get(key);
|
|
36
|
+
if (text === undefined) {
|
|
37
|
+
text = canonical(value());
|
|
38
|
+
strings?.set(key, text);
|
|
39
|
+
}
|
|
40
|
+
return text;
|
|
41
|
+
};
|
|
27
42
|
const e = site.environment, sensor = e.sensor;
|
|
28
43
|
if (sensor.spatialSampling.site.x !== i % native.pixelWidth || sensor.spatialSampling.site.y !== Math.floor(i / native.pixelWidth) ||
|
|
29
|
-
canonical(sensor.spatialSampling.imagingArea) !==
|
|
30
|
-
canonical(sensor.colorSamplingProfile) !==
|
|
31
|
-
canonical(sensor.localExposure.bindingProfile) !==
|
|
32
|
-
canonical(sensor.localExposure.exposureWindowInput) !==
|
|
44
|
+
canonical(sensor.spatialSampling.imagingArea) !== frameCanonical("imagingArea", () => capture.geometry.imagingArea) ||
|
|
45
|
+
canonical(sensor.colorSamplingProfile) !== frameCanonical("colorSamplingProfile", () => frame.colorSamplingProfile) ||
|
|
46
|
+
canonical(sensor.localExposure.bindingProfile) !== frameCanonical("bindingProfile", () => frame.bindingProfile) ||
|
|
47
|
+
canonical(sensor.localExposure.exposureWindowInput) !== frameCanonical("exposureWindow", () => ({ ...exposureWindow, nativeRaster: native })) ||
|
|
33
48
|
e.optics.focalLengthMm !== capture.exposure.focalLengthMm || e.optics.nominalFNumber !== capture.exposure.aperture) {
|
|
34
49
|
throw new InvalidScientificInputError("Environment site, frame geometry/profiles, optics and exact shutter event must match the committed capture.");
|
|
35
50
|
}
|
|
36
|
-
const plan = planEnvironmentSensorPhotoSignal(e);
|
|
37
|
-
if (canonical(plan.focus) !==
|
|
51
|
+
const plan = planEnvironmentSensorPhotoSignal(e, ownership, retention);
|
|
52
|
+
if (canonical(plan.focus) !== frameCanonical("focus", () => capture.focus) ||
|
|
38
53
|
e.sceneBindings.providerProfile.sceneId !== sceneBinding.providerSceneId)
|
|
39
54
|
throw new InvalidScientificInputError("Environment optical focus and provider scene must match the committed capture binding.");
|
|
40
55
|
return plan;
|
|
41
56
|
}
|
|
42
57
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
58
|
+
* Simulates a RAW frame from a scene-radiance provider.
|
|
59
|
+
*
|
|
60
|
+
* Before calling any provider code, it checks that the sites cover the full native
|
|
61
|
+
* frame and that all inputs are supported. Dark current, charge completeness,
|
|
62
|
+
* capacity, noise and ADC use the existing sensor modules. The returned RAW frame
|
|
63
|
+
* works with the existing reconstruction and paired-export APIs.
|
|
46
64
|
*/
|
|
47
65
|
export function simulateEnvironmentSensorRawFrame(input) {
|
|
66
|
+
requireInputKeys(input, "simulateEnvironmentSensorRawFrame", ["frame", "sceneBinding", "exposureWindow", "sites", "evaluateRadiance", "evaluateApertureRadiance"]);
|
|
48
67
|
const { evaluateRadiance, evaluateApertureRadiance, ...data } = input;
|
|
49
68
|
if (typeof evaluateRadiance !== "function")
|
|
50
69
|
throw new InvalidScientificInputError("Environment RAW requires a synchronous evaluator.");
|
|
@@ -62,16 +81,21 @@ export function simulateEnvironmentSensorRawFrame(input) {
|
|
|
62
81
|
let evaluations = 0;
|
|
63
82
|
const ids = new Set();
|
|
64
83
|
const sharedState = (e) => canonical({
|
|
65
|
-
sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, pupil: e.pupil, fieldThroughput: e.fieldThroughput
|
|
84
|
+
sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, pupil: e.pupil, fieldThroughput: e.fieldThroughput,
|
|
85
|
+
lensFieldMapping: e.lensFieldMapping
|
|
66
86
|
});
|
|
87
|
+
// Site 0's shared state is serialized once per frame instead of once per site. It is still checked after the
|
|
88
|
+
// per-site duplicate-ID check and per-site serialization, as before, so the first error is unchanged.
|
|
89
|
+
let firstSharedState;
|
|
90
|
+
const memo = createEnvironmentRawFrameCanonicalMemo(owned.frame, owned.exposureWindow);
|
|
67
91
|
const plans = Array.from(owned.sites, (site, i) => {
|
|
68
92
|
if (!site)
|
|
69
93
|
throw new InvalidScientificInputError("Environment RAW site array must be dense.");
|
|
70
94
|
const e = site.environment;
|
|
71
|
-
if (ids.has(e.temporalIntegrationId) || sharedState(e) !== sharedState(owned.sites[0].environment)) {
|
|
95
|
+
if (ids.has(e.temporalIntegrationId) || sharedState(e) !== (firstSharedState ??= sharedState(owned.sites[0].environment))) {
|
|
72
96
|
throw new InvalidScientificInputError("Environment site, frame geometry/profiles, optics and exact shutter event must match the committed capture.");
|
|
73
97
|
}
|
|
74
|
-
const plan = planEnvironmentRawSite(site, i, owned.frame, owned.sceneBinding, owned.exposureWindow);
|
|
98
|
+
const plan = planEnvironmentRawSite(site, i, owned.frame, owned.sceneBinding, owned.exposureWindow, "copy", memo);
|
|
75
99
|
ids.add(e.temporalIntegrationId);
|
|
76
100
|
evaluations += plan.count;
|
|
77
101
|
if (evaluations > 100000)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-raw-producer.js","sourceRoot":"","sources":["../../src/capture/environment-raw-producer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"environment-raw-producer.js","sourceRoot":"","sources":["../../src/capture/environment-raw-producer.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Simulates a RAW frame from a scene-radiance provider: provider radiance → optics → EQE (external\n * quantum efficiency) → charge → noise → readout → RAW codes, for every native sensor site.\n *\n * Before calling any provider code, it checks that the sites cover the full native frame and that\n * all inputs are supported. Dark current, charge completeness, capacity, noise and ADC\n * (analogue-to-digital conversion) use the existing sensor modules. The RAW frame it returns works\n * with the existing reconstruction and paired-export APIs.\n * @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and\n * support limits.\n */\n\nimport { parseEvidenceList, type EvidenceProvenance } from \"../core/evidence-provenance.js\";\nimport { requirePublicOpaqueId, requireInputKeys } from \"../core/record-validation.js\";\nimport { stringifyCanonicalJson } from \"../core/canonical-json.js\";\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { parseSimulatedCapture } from \"./simulated-capture.js\";\nimport { RAW_REFERENCE_MAX_NATIVE_SITES } from \"./raw-frame-limits.js\";\nimport { simulateSensorRawFrame, type SensorRawProducerInput, type SensorRawProducerSiteInput, type NativeRawProducerFrameContext, type SensorRawProducerExposureWindowInput } from \"./sensor-raw-producer.js\";\nimport { calculateSensorDarkCurrentCharge, type SensorDarkCurrentProfile } from \"../sensor/dark-current.js\";\nimport { planEnvironmentSensorPhotoSignal, executeEnvironmentSensorPhotoSignal,\n type CalculateEnvironmentSensorPhotoSignalInput, type EnvironmentRadianceEvaluator, type EnvironmentApertureRadianceEvaluator } from \"../sensor/environment-photo-signal.js\";\n\nfunction canonical(value: unknown): string {\n return stringifyCanonicalJson(value, { undefinedObjectProperties: \"omit\",\n nonFiniteNumberMessage: \"Environment capture binding must be finite.\", unsupportedValueMessage: \"Environment capture binding requires plain data.\" });\n}\n\n/** All native sites, in native order. Generated photo or dark charge cannot be passed in as a shortcut. */\nexport interface SimulateEnvironmentSensorRawFrameInput {\n frame: SensorRawProducerInput[\"frame\"];\n sceneBinding: { sceneStateId: string; providerSceneId: string; evidence: readonly EvidenceProvenance[] };\n /** The shared shutter schedule, tied to the committed frame duration. */\n exposureWindow: NonNullable<SensorRawProducerInput[\"exposureWindow\"]>;\n sites: readonly {\n environment: Omit<CalculateEnvironmentSensorPhotoSignalInput, \"evaluateRadiance\" | \"evaluateApertureRadiance\">;\n darkCurrentProfile: SensorDarkCurrentProfile;\n operatingTemperatureC: number;\n charge: Omit<SensorRawProducerSiteInput[\"charge\"], \"photoSignal\" | \"darkCharge\">;\n readout: Omit<SensorRawProducerSiteInput, \"charge\">;\n }[];\n evaluateRadiance: EnvironmentRadianceEvaluator;\n evaluateApertureRadiance?: EnvironmentApertureRadianceEvaluator;\n}\n/**\n * Result: the approximate record of what ran, from provider to RAW.\n *\n * - `sites` keeps the per-site optics and EQE results.\n * - `raw` keeps charge, capacity, seeded-noise and readout diagnostics, and the exact native frame.\n * - `providerEvaluationCount` is the actual (bounded) work done, not a quality score.\n *\n * The cautious verification and activation flags belong to this standalone function. A parent\n * production plan records its own execution and does not upgrade them.\n */\nexport interface EnvironmentSensorRawFrame {\n upstreamOrigin: \"executed-environment-query-provider-optics-psf-eqe\";\n providerTransportVerified: false;\n productionPlanActivated: false;\n providerEvaluationCount: number;\n sceneBinding: SimulateEnvironmentSensorRawFrameInput[\"sceneBinding\"];\n sites: readonly ReturnType<typeof executeEnvironmentSensorPhotoSignal>[];\n raw: ReturnType<typeof simulateSensorRawFrame>;\n}\n\n/**\n * Internal per-frame cache of the frame's canonical strings that every site is compared with (a 2.0\n * performance change). Each string is computed the first time a comparison needs it, so the first\n * failing comparison and its error are unchanged. The cache is valid only for the exact frame and\n * exposure-window objects it was made for; callers do not change them while planning a frame.\n */\nexport interface EnvironmentRawFrameCanonicalMemo {\n readonly frame: NativeRawProducerFrameContext;\n readonly exposureWindow: SensorRawProducerExposureWindowInput;\n readonly strings: Map<\"imagingArea\" | \"colorSamplingProfile\" | \"bindingProfile\" | \"exposureWindow\" | \"focus\", string>;\n}\nexport function createEnvironmentRawFrameCanonicalMemo(frame: NativeRawProducerFrameContext,\n exposureWindow: SensorRawProducerExposureWindowInput): EnvironmentRawFrameCanonicalMemo {\n return { frame, exposureWindow, strings: new Map() };\n}\n/** Internal: frame-binding checks and per-site optics/EQE planning, shared with bounded native execution. Same ownership rules as planEnvironmentSensorPhotoSignal. */\nexport function planEnvironmentRawSite(site: SimulateEnvironmentSensorRawFrameInput[\"sites\"][number], i: number,\n frame: NativeRawProducerFrameContext, sceneBinding: SimulateEnvironmentSensorRawFrameInput[\"sceneBinding\"],\n exposureWindow: SensorRawProducerExposureWindowInput, ownership: \"copy\" | \"engine-owned\" = \"copy\",\n memo?: EnvironmentRawFrameCanonicalMemo, retention: \"full\" | \"photo-only\" = \"full\"): ReturnType<typeof planEnvironmentSensorPhotoSignal> {\n const capture=frame.capture,native=capture.geometry.nativeRaster;\n const strings = memo !== undefined && memo.frame === frame && memo.exposureWindow === exposureWindow ? memo.strings : undefined;\n const frameCanonical = (key: \"imagingArea\" | \"colorSamplingProfile\" | \"bindingProfile\" | \"exposureWindow\" | \"focus\", value: () => unknown): string => {\n let text = strings?.get(key);\n if (text === undefined) { text = canonical(value()); strings?.set(key, text); }\n return text;\n };\n const e = site.environment, sensor = e.sensor;\n if (sensor.spatialSampling.site.x !== i%native.pixelWidth || sensor.spatialSampling.site.y !== Math.floor(i/native.pixelWidth) ||\n canonical(sensor.spatialSampling.imagingArea) !== frameCanonical(\"imagingArea\", () => capture.geometry.imagingArea) ||\n canonical(sensor.colorSamplingProfile) !== frameCanonical(\"colorSamplingProfile\", () => frame.colorSamplingProfile) ||\n canonical(sensor.localExposure.bindingProfile) !== frameCanonical(\"bindingProfile\", () => frame.bindingProfile) ||\n canonical(sensor.localExposure.exposureWindowInput) !== frameCanonical(\"exposureWindow\", () => ({ ...exposureWindow, nativeRaster: native })) ||\n e.optics.focalLengthMm !== capture.exposure.focalLengthMm || e.optics.nominalFNumber !== capture.exposure.aperture) {\n throw new InvalidScientificInputError(\"Environment site, frame geometry/profiles, optics and exact shutter event must match the committed capture.\");\n }\n const plan = planEnvironmentSensorPhotoSignal(e, ownership, retention);\n if (canonical(plan.focus) !== frameCanonical(\"focus\", () => capture.focus) ||\n e.sceneBindings.providerProfile.sceneId !== sceneBinding.providerSceneId) throw new InvalidScientificInputError(\"Environment optical focus and provider scene must match the committed capture binding.\");\n return plan;\n}\n/**\n * Simulates a RAW frame from a scene-radiance provider.\n *\n * Before calling any provider code, it checks that the sites cover the full native\n * frame and that all inputs are supported. Dark current, charge completeness,\n * capacity, noise and ADC use the existing sensor modules. The returned RAW frame\n * works with the existing reconstruction and paired-export APIs.\n */\nexport function simulateEnvironmentSensorRawFrame(input: SimulateEnvironmentSensorRawFrameInput): CalculationResult<EnvironmentSensorRawFrame> {\n requireInputKeys(input, \"simulateEnvironmentSensorRawFrame\", [\"frame\", \"sceneBinding\", \"exposureWindow\", \"sites\", \"evaluateRadiance\", \"evaluateApertureRadiance\"]);\n const { evaluateRadiance, evaluateApertureRadiance, ...data } = input;\n if (typeof evaluateRadiance !== \"function\") throw new InvalidScientificInputError(\"Environment RAW requires a synchronous evaluator.\");\n const owned = structuredClone(data);\n const capture = parseSimulatedCapture(owned.frame.capture), native = capture.geometry.nativeRaster;\n const count = native.pixelWidth*native.pixelHeight;\n if (count > RAW_REFERENCE_MAX_NATIVE_SITES || !Array.isArray(owned.sites) || owned.sites.length !== count ||\n owned.exposureWindow.nominalExposureDurationSeconds.value !== capture.exposure.shutterSeconds) {\n throw new InvalidScientificInputError(\"Environment RAW requires complete bounded native coverage and the committed shutter duration.\");\n }\n requirePublicOpaqueId(owned.sceneBinding.providerSceneId, \"Scene binding requires a public provider scene identity.\");\n parseEvidenceList(owned.sceneBinding.evidence, \"environmentCaptureSceneBinding.evidence\");\n if (owned.sceneBinding.sceneStateId !== capture.sceneStateId || capture.sceneTimeSeconds !== 0) throw new InvalidScientificInputError(\"Environment RAW requires explicit committed scene binding at the opening-reference scene time zero.\");\n let evaluations = 0;\n const ids = new Set<string>();\n const sharedState = (e: SimulateEnvironmentSensorRawFrameInput[\"sites\"][number][\"environment\"]): string => canonical({\n sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, pupil: e.pupil, fieldThroughput: e.fieldThroughput,\n lensFieldMapping: e.lensFieldMapping });\n // Site 0's shared state is serialized once per frame instead of once per site. It is still checked after the\n // per-site duplicate-ID check and per-site serialization, as before, so the first error is unchanged.\n let firstSharedState: string | undefined;\n const memo = createEnvironmentRawFrameCanonicalMemo(owned.frame, owned.exposureWindow);\n const plans = Array.from(owned.sites, (site, i) => {\n if (!site) throw new InvalidScientificInputError(\"Environment RAW site array must be dense.\");\n const e = site.environment;\n if (ids.has(e.temporalIntegrationId) || sharedState(e) !== (firstSharedState ??= sharedState(owned.sites[0]!.environment))) {\n throw new InvalidScientificInputError(\"Environment site, frame geometry/profiles, optics and exact shutter event must match the committed capture.\");\n }\n const plan = planEnvironmentRawSite(site,i,owned.frame,owned.sceneBinding,owned.exposureWindow,\"copy\",memo);\n ids.add(e.temporalIntegrationId);\n evaluations += plan.count;\n if (evaluations > 100000) throw new InvalidScientificInputError(\"Environment RAW exceeds the aggregate 100000-provider-evaluation budget.\");\n return plan;\n });\n if (plans.some(plan => plan.owned.pupil !== undefined) && typeof evaluateApertureRadiance !== \"function\") throw new InvalidScientificInputError(\"Pupil capture requires an origin-aware aperture evaluator before any callback.\");\n const sites = plans.map(plan => executeEnvironmentSensorPhotoSignal(plan, evaluateRadiance, evaluateApertureRadiance));\n const raw = simulateSensorRawFrame({ frame: owned.frame, exposureWindow: owned.exposureWindow,\n sites: owned.sites.map((s, i) => {\n const photoSignal = sites[i]!.value.photo.value.photoSignal;\n const darkCharge = calculateSensorDarkCurrentCharge({ exposure: photoSignal,\n darkCurrentProfile: s.darkCurrentProfile, operatingTemperatureC: s.operatingTemperatureC }).value;\n return { ...s.readout, charge: { ...s.charge, photoSignal, darkCharge } };\n }) });\n return approximationResult({ upstreamOrigin: \"executed-environment-query-provider-optics-psf-eqe\",\n providerTransportVerified: false, productionPlanActivated: false, providerEvaluationCount: evaluations, sceneBinding: { ...owned.sceneBinding, evidence: parseEvidenceList(owned.sceneBinding.evidence, \"sceneBinding.evidence\") }, sites, raw\n }, \"environment-native-raw-producer\", \"0.1.0\", [\n \"Full native capture uses executed supplied environment provider code, not verified scene transport or calibrated photographic truth.\",\n \"Existing response, charge completeness, capacity, seeded noise and ADC validators remain authoritative; RAW origin flags remain conservative.\",\n \"Reference native-site and aggregate evaluation budgets remain in force; production-plan activation and full-resolution/editor acceptance remain separate.\"\n ]);\n}\n"]}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Identifies the exact byte output of the baseline encoder.
|
|
3
|
+
*
|
|
4
|
+
* Version 2 (engine 2.0.0) uses the fixed cosine table below instead of runtime `Math.cos`, and rounds
|
|
5
|
+
* quantized coefficients half away from zero. Compared with version 1, bytes can differ only where a
|
|
6
|
+
* coefficient before rounding was within about one ULP (unit in the last place) of a half-integer, or
|
|
7
|
+
* was exactly a negative half-integer. The repository's test images are unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare const EXPORT_JPEG_ENCODER_ID: "photivra-baseline-jpeg-444-v2";
|
|
10
|
+
/**
|
|
11
|
+
* C(u,x) = cos((2x+1)·u·π/16) for u,x in 0..7, row-major by u.
|
|
12
|
+
*
|
|
13
|
+
* Each entry is the correctly rounded IEEE-754 double of the exact cosine. They were computed offline with
|
|
14
|
+
* 130-digit decimal arithmetic and checked so that no neighbouring double is closer (see
|
|
15
|
+
* docs/PHOTOGRAPHIC_EXPORT.md). Hard-coding them makes the DCT independent of each JavaScript engine's
|
|
16
|
+
* `Math.cos`, which differs in the last bit between engines. These are mathematical facts, not third-party data.
|
|
17
|
+
*/
|
|
18
|
+
export declare const JPEG_DCT_COSINES: Readonly<Float64Array>;
|
|
19
|
+
/**
|
|
20
|
+
* Rounds a quantized coefficient to the nearest integer, with ties going away from zero (−2.5 → −3,
|
|
21
|
+
* 2.5 → 3), so positive and negative values round the same way. `Math.round` alone sends −2.5 to −2.
|
|
22
|
+
*/
|
|
23
|
+
export declare function roundJpegCoefficient(value: number): number;
|
|
24
|
+
/** Internal baseline JPEG settings: 8-bit YCbCr 4:4:4, one explicit constant quantization step, and uniform Huffman tables written for this project. */
|
|
2
25
|
export interface ExportJpegInput {
|
|
3
26
|
width: number;
|
|
4
27
|
height: number;
|
|
@@ -7,15 +30,23 @@ export interface ExportJpegInput {
|
|
|
7
30
|
exif: Uint8Array;
|
|
8
31
|
xmp: Uint8Array;
|
|
9
32
|
}
|
|
10
|
-
/**
|
|
33
|
+
/** Encodes a baseline JPEG with a directly computed DCT. Uses no third-party encoder source, default quantization tables or Huffman tables. */
|
|
11
34
|
export declare function encodeExportJpeg(input: ExportJpegInput): Uint8Array;
|
|
12
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Internal size-limited JPEG writer. The reference export and the scalable export use exactly the same
|
|
37
|
+
* DCT and entropy-coding equations.
|
|
38
|
+
*
|
|
39
|
+
* When `densityDotsPerInch` is supplied, it is written to the JFIF 1.02 APP0 segment as units=1 (dots
|
|
40
|
+
* per inch) with equal X and Y density. JFIF density fields are 16-bit unsigned, so it must be an integer
|
|
41
|
+
* in 1..65535; callers round any fractional density and store the exact value in EXIF. When omitted,
|
|
42
|
+
* APP0 keeps units=0 with a 1:1 pixel aspect ratio and states no physical size.
|
|
43
|
+
*/
|
|
13
44
|
export declare function createExportJpegEncoder(input: Omit<ExportJpegInput, "samples"> & {
|
|
14
45
|
maximumOutputBytes: number;
|
|
15
46
|
icc?: Uint8Array;
|
|
47
|
+
densityDotsPerInch?: number;
|
|
16
48
|
}): {
|
|
17
49
|
writeRgbBlock(samples: readonly number[]): void;
|
|
18
50
|
finish(): Uint8Array;
|
|
19
51
|
dispose(): void;
|
|
20
52
|
};
|
|
21
|
-
//# sourceMappingURL=export-jpeg.d.ts.map
|