@photivra/engine 1.5.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 +393 -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 +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- 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 +65 -12
- package/dist/capture/native-raw.js +81 -19
- 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 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- 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/DENSE_PUPIL_QUALIFICATION.md +0 -121
- 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 -54
- 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_1_5_0.md +0 -105
- 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/SEPARABLE_EMISSION_DRAFT.md +0 -103
- 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/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear-encoding.js","sourceRoot":"","sources":["../../src/capture/linear-encoding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAA0B,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAgF,MAAM,wBAAwB,CAAC;AAE7I,MAAM,CAAC,MAAM,sCAAsC,GAAG,OAAgB,CAAC;AAcvE,SAAS,MAAM,CAAC,KAAc,EAAE,IAAuB;IACrD,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC;AAClF,CAAC;AACD,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IACxI,IAAI,CAAC,CAAC,aAAa,KAAK,sCAAsC,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QAChI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,KAAK;QAC3G,OAAO,CAAC,CAAC,kBAAkB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,kBAAkB,GAAG,KAAK;QAC1J,CAAC,CAAC,CAAC,cAAc,KAAK,2BAA2B,IAAI,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC;QACnF,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QAC/F,MAAM,IAAI,yBAAyB,CAAC,mDAAmD,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,sCAAsC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;QACxH,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc;QAClG,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrD,CAAC;AAmCD;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAiC;IAC9E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,0BAA0B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5B,CAAC,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,8BAA8B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAA4B,CAAC,EAAE,CAAC;QAChI,MAAM,IAAI,yBAAyB,CAAC,wCAAwC,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnG,MAAM,IAAI,yBAAyB,CAAC,sEAAsE,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,mBAAmB,GAAC,QAAQ,CAAC,UAAU,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,kBAAkB,GAAC,QAAQ,CAAC,SAAS,CAAC;IACjE,MAAM,KAAK,GAAG,SAAS,GAAC,KAAK,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,GAAC,QAAQ,CAAC,SAAS,GAAC,KAAK,CAAC;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,GAAC,CAAC,KAAK,GAAC,QAAQ,CAAC,SAAS,CAAC,GAAC,KAAK,CAAC;IACrE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACzG,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,OAAO,IAAI,OAAO;QAC1F,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,KAAK,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,yBAAyB,CAAC,6DAA6D,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACnD,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,yBAAyB,CAAC,yDAAyD,CAAC,CAAC;QACvJ,+FAA+F;QAC/F,IAAI,MAAM,GAAG,OAAO,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ;gBAAE,MAAM,IAAI,yBAAyB,CAAC,yCAAyC,CAAC,CAAC;YACrH,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;gBAAC,GAAG,EAAE,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAC1C,IAAI,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC;QACvB,CAAC;QACD,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,MAAM,KAAK,QAAQ,CAAC,UAAU;YAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;QAC9D,IAAI,MAAM,KAAK,KAAK,CAAC,mBAAmB;YAAE,OAAO,QAAQ,CAAC,kBAAkB,CAAC;QAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,GAAC,CAAC,MAAM,GAAC,QAAQ,CAAC,UAAU,CAAC,GAAC,KAAK,GAAC,SAAS,CAAC;QAC/E,+FAA+F;QAC/F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;IACxD,KAAK,QAAQ,CAAC;IAAC,KAAK,OAAO,CAAC,CAAC,uEAAuE;IACpG,OAAO,gBAAgB,CAAC,EAAE,aAAa,EAAE,sCAAsC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW;QACzI,QAAQ,EAAE,YAAY,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK;QACjG,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO;QAC7H,cAAc,EAAE,CAAC,KAAK,GAAC,QAAQ,CAAC,SAAS,CAAC,GAAC,SAAS,EAAE,oBAAoB,EAAE,EAAE,GAAC,KAAK;QACpF,qBAAqB,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,EACvG,+BAA+B,EAAE,sCAAsC,EACvE,CAAC,oGAAoG;QACnG,gGAAgG;QAChG,mGAAmG,CAAC,CAAC,CAAC;AAC1G,CAAC"}
|
|
1
|
+
{"version":3,"file":"linear-encoding.js","sourceRoot":"","sources":["../../src/capture/linear-encoding.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Linear capture encoding: converts a floating-point capture plane to 16-bit unsigned integer\n * codes with a uniform linear mapping. The capture itself is not changed.\n * @see docs/LINEAR_CAPTURE_ENCODING.md for equations, coordinate/unit conventions, blockers and\n * support limits.\n */\n\nimport { requireAllowlistedRecord, isPublicOpaqueId } from \"../core/record-validation.js\";\nimport { calculatedResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseSimulatedCapture, type SimulatedCapture, type CaptureLinearPlane, type CaptureLinearImageState } from \"./simulated-capture.js\";\n\nexport const LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION = \"0.1.0\" as const;\n/** Version of the `uniform-linear-capture-uint16` model. 0.2.0 made rounding exact: nearest, ties up (Math.round). */\nexport const LINEAR_CAPTURE_ENCODING_MODEL_VERSION = \"0.2.0\" as const;\n/** The same linear mapping for every channel. The reference white value comes from the source plane. */\nexport interface LinearCaptureEncoding {\n schemaVersion: typeof LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION;\n /** Relative source sample value assigned blackCode; may be negative. */\n blackValue: number;\n /** Integer code for blackValue, 0..65534. A nonzero offset can keep negative samples. */\n blackCode: number;\n /** Code at the plane's referenceWhiteValue, strictly above blackCode, at most 65535. */\n referenceWhiteCode: number;\n negativeValues: \"preserve-if-representable\" | \"reject\";\n outOfRange: \"clip\" | \"reject\";\n rounding: \"nearest-ties-up\";\n}\nfunction record(value: unknown, keys: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, keys, \"Invalid linear encoding fields.\");\n}\n/** Strictly parses an encoding profile. It never fills in a default clipping or rounding policy. */\nexport function parseLinearCaptureEncoding(value: unknown): LinearCaptureEncoding {\n const r = record(value, [\"schemaVersion\", \"blackValue\", \"blackCode\", \"referenceWhiteCode\", \"negativeValues\", \"outOfRange\", \"rounding\"]);\n if (r.schemaVersion !== LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION || typeof r.blackValue !== \"number\" || !Number.isFinite(r.blackValue) ||\n typeof r.blackCode !== \"number\" || !Number.isInteger(r.blackCode) || r.blackCode < 0 || r.blackCode > 65534 ||\n typeof r.referenceWhiteCode !== \"number\" || !Number.isInteger(r.referenceWhiteCode) || r.referenceWhiteCode <= r.blackCode || r.referenceWhiteCode > 65535 ||\n (r.negativeValues !== \"preserve-if-representable\" && r.negativeValues !== \"reject\") ||\n (r.outOfRange !== \"clip\" && r.outOfRange !== \"reject\") || r.rounding !== \"nearest-ties-up\") {\n throw new InvalidConfigurationError(\"Invalid linear encoding range or explicit policy.\");\n }\n return { schemaVersion: LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION, blackValue: Object.is(r.blackValue, -0) ? 0 : r.blackValue,\n blackCode: r.blackCode, referenceWhiteCode: r.referenceWhiteCode, negativeValues: r.negativeValues,\n outOfRange: r.outOfRange, rounding: r.rounding };\n}\nexport interface LinearCaptureEncodingInput {\n capture: SimulatedCapture;\n planeId: string;\n /** Identifies the exact source plane, so a plane with a different meaning cannot be swapped in. */\n requiredImageState: CaptureLinearImageState;\n encoding: LinearCaptureEncoding;\n}\n/** 16-bit unsigned codes, not tied to a file format. The metadata keeps their colour, white-balance (WB) and saturation meaning. */\nexport interface EncodedLinearCapture {\n schemaVersion: typeof LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION;\n captureId: string;\n /** Cleaned-up copy of the capture's geometry, settings, WB, adopted white and model provenance, without the float planes. */\n captureMetadata: Omit<SimulatedCapture, \"planes\">;\n sourcePlane: Omit<CaptureLinearPlane, \"storage\">;\n encoding: LinearCaptureEncoding;\n sampleLayout: \"row-major-interleaved\";\n bitDepth: 16;\n codeMinimum: 0;\n codeMaximum: 65535;\n referenceWhiteValue: number;\n /** Codes per relative source unit; same scale for all channels. */\n scale: number;\n minimumRepresentableValue: number;\n maximumRepresentableValue: number;\n /** Headroom: (maximum value − black) / (reference white − black). */\n headroomFactor: number;\n /** Largest rounding error for in-range samples, 0.5/scale. Clipping error is not included. */\n maximumRoundingError: number;\n clippedLowSampleCount: number;\n clippedHighSampleCount: number;\n /** Linear encoding never picks a default rendering exposure or display white. */\n defaultRenderingExposureEv: null;\n samples: readonly number[];\n}\n/**\n * Converts one inline float plane to integer codes. The capture data is not changed.\n *\n * Mapping: blackCode + (sample-blackValue)/(referenceWhiteValue-blackValue)\n * * (referenceWhiteCode-blackCode). It clips only when the policy says so, then rounds.\n */\nexport function calculateLinearCaptureEncoding(input: LinearCaptureEncodingInput): CalculationResult<EncodedLinearCapture> {\n const r = record(input, [\"capture\", \"planeId\", \"requiredImageState\", \"encoding\"]);\n const capture = parseSimulatedCapture(r.capture), encoding = parseLinearCaptureEncoding(r.encoding);\n if (!isPublicOpaqueId(r.planeId) ||\n ![\"scene-referred-xyz\", \"virtual-sensor-channels\", \"color-transformed-linear-rgb\"].includes(r.requiredImageState as string)) {\n throw new InvalidConfigurationError(\"Invalid encoding plane/state identity.\");\n }\n const plane = capture.planes.find((p) => p.id === r.planeId);\n if (!plane || plane.imageState !== r.requiredImageState || plane.storage.kind !== \"inline-float64\") {\n throw new InvalidConfigurationError(\"Encoding requires the exact image state and verified inline samples.\");\n }\n const width = plane.referenceWhiteValue-encoding.blackValue;\n const codeWidth = encoding.referenceWhiteCode-encoding.blackCode;\n const scale = codeWidth/width;\n const minimum = encoding.blackValue-encoding.blackCode/scale;\n const maximum = encoding.blackValue+(65535-encoding.blackCode)/scale;\n if (!(width > 0) || ![width, scale, minimum, maximum, maximum-minimum].every(Number.isFinite) || !(scale > 0) ||\n minimum > encoding.blackValue || maximum < plane.referenceWhiteValue || maximum <= minimum ||\n (encoding.blackCode > 0 && minimum === encoding.blackValue)) {\n throw new InvalidConfigurationError(\"Linear encoding cannot represent the declared finite range.\");\n }\n let low = 0, high = 0;\n const samples = plane.storage.samples.map((sample) => {\n if (encoding.negativeValues === \"reject\" && sample < 0) throw new InvalidConfigurationError(\"Negative source values are rejected by encoding policy.\");\n // Compare against the limits in source units first, so a huge finite value can clip without overflowing.\n if (sample < minimum || sample > maximum) {\n if (encoding.outOfRange === \"reject\") throw new InvalidConfigurationError(\"Source value exceeds the encoded range.\");\n if (sample < minimum) { low++; return 0; }\n high++; return 65535;\n }\n if (sample === minimum) return 0;\n if (sample === maximum) return 65535;\n if (sample === encoding.blackValue) return encoding.blackCode;\n if (sample === plane.referenceWhiteValue) return encoding.referenceWhiteCode;\n const mapped = encoding.blackCode+(sample-encoding.blackValue)/width*codeWidth;\n // Round to nearest; exact ties go to the larger code (Math.round; Math.floor(x+.5) wrongly rounds\n // 0.49999999999999994 up). Clamp only rounding error at the end points; Math.max(0, -0) is +0.\n return Math.max(0, Math.min(65535, Math.round(mapped)));\n });\n const { storage: _storage, ...sourcePlane } = plane;\n const { planes: _planes, ...captureMetadata } = capture;\n void _storage; void _planes; // The float sample arrays are deliberately left out of the encoded metadata.\n return calculatedResult({ schemaVersion: LINEAR_CAPTURE_ENCODING_SCHEMA_VERSION, captureId: capture.captureId, captureMetadata, sourcePlane,\n encoding, sampleLayout: \"row-major-interleaved\", bitDepth: 16, codeMinimum: 0, codeMaximum: 65535,\n referenceWhiteValue: plane.referenceWhiteValue, scale, minimumRepresentableValue: minimum, maximumRepresentableValue: maximum,\n headroomFactor: (65535-encoding.blackCode)/codeWidth, maximumRoundingError: .5/scale,\n clippedLowSampleCount: low, clippedHighSampleCount: high, defaultRenderingExposureEv: null, samples },\n \"uniform-linear-capture-uint16\", LINEAR_CAPTURE_ENCODING_MODEL_VERSION,\n [\"Deterministic unsigned linear codes; no dithering, transfer curve, tone mapping or serializer tags\",\n \"Reference white, capture saturation history, integer maximum and display white remain separate\",\n \"In-range error bound covers ideal rounding only; binary64 arithmetic can add floating-point error\"]);\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Decoded lossless JPEG samples, interleaved by component within each line (line, x, component). */
|
|
2
|
+
export interface LosslessJpegImage {
|
|
3
|
+
/** Samples per line (X in the frame header). */
|
|
4
|
+
width: number;
|
|
5
|
+
/** Lines (Y in the frame header). */
|
|
6
|
+
height: number;
|
|
7
|
+
components: number;
|
|
8
|
+
/** Sample precision P in bits, 2..16. */
|
|
9
|
+
precision: number;
|
|
10
|
+
predictor: number;
|
|
11
|
+
pointTransform: number;
|
|
12
|
+
samples: Uint16Array;
|
|
13
|
+
}
|
|
14
|
+
export interface LosslessJpegLimits {
|
|
15
|
+
/** Largest width x height x components accepted. Checked before output is allocated. */
|
|
16
|
+
maximumSamples: number;
|
|
17
|
+
/**
|
|
18
|
+
* DNG files with DNGVersion below 1.1.0.0 store 16 extra bits after the SSSS = 16 difference category
|
|
19
|
+
* (DNG 1.7.1.0 specification, Compatibility Issue 2). Standard streams store none.
|
|
20
|
+
*/
|
|
21
|
+
legacySixteenBitDifference?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Decodes one lossless JPEG stream. Every length, count and table index is checked against the
|
|
25
|
+
* buffer. Output is allocated only after the declared size passes `limits.maximumSamples`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseLosslessJpeg(bytes: Uint8Array, limits: LosslessJpegLimits): LosslessJpegImage;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Size-limited decoder for lossless Huffman JPEG (ITU-T T.81 | ISO/IEC 10918-1, Annex H, process 14,
|
|
4
|
+
* SOF3), the variant DNG uses for Compression = 7 raw data. Written independently from the published
|
|
5
|
+
* standard, with no third-party decoder source. Browser-safe: plain typed arrays, no I/O.
|
|
6
|
+
*
|
|
7
|
+
* Supported: one SOF3 frame, precision 2..16, 1..4 components with 1x1 sampling, one interleaved scan
|
|
8
|
+
* over all components, predictors 1..7, point transform, DRI restart intervals, 0xFF00 byte stuffing.
|
|
9
|
+
* Rejected: hierarchical/DCT/arithmetic frames, multiple scans, subsampled components, truncated data.
|
|
10
|
+
*/
|
|
11
|
+
import { rejectUnknownFields } from "../core/record-validation.js";
|
|
12
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
13
|
+
function fail(message) { throw new InvalidConfigurationError("Lossless JPEG: " + message); }
|
|
14
|
+
/** T.81 Annex C code generation and F.2.2.3 decoder tables (MINCODE, MAXCODE, VALPTR). */
|
|
15
|
+
function buildTable(counts, values) {
|
|
16
|
+
const maxCode = new Int32Array(17).fill(-1), minCode = new Int32Array(17), valPtr = new Int32Array(17);
|
|
17
|
+
let code = 0, k = 0;
|
|
18
|
+
for (let length = 1; length <= 16; length++) {
|
|
19
|
+
const n = counts[length - 1];
|
|
20
|
+
if (n) {
|
|
21
|
+
valPtr[length] = k;
|
|
22
|
+
minCode[length] = code;
|
|
23
|
+
code += n;
|
|
24
|
+
k += n;
|
|
25
|
+
maxCode[length] = code - 1;
|
|
26
|
+
}
|
|
27
|
+
// Canonical codes of `length` bits must fit in `length` bits.
|
|
28
|
+
if (code > (1 << length))
|
|
29
|
+
fail("over-subscribed Huffman table.");
|
|
30
|
+
code <<= 1;
|
|
31
|
+
}
|
|
32
|
+
return { maxCode, minCode, valPtr, values };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Decodes one lossless JPEG stream. Every length, count and table index is checked against the
|
|
36
|
+
* buffer. Output is allocated only after the declared size passes `limits.maximumSamples`.
|
|
37
|
+
*/
|
|
38
|
+
export function parseLosslessJpeg(bytes, limits) {
|
|
39
|
+
if (!(bytes instanceof Uint8Array))
|
|
40
|
+
fail("input must be a Uint8Array.");
|
|
41
|
+
if (limits === null || typeof limits !== "object" || Array.isArray(limits))
|
|
42
|
+
fail("limits must be an object.");
|
|
43
|
+
rejectUnknownFields(limits, ["maximumSamples", "legacySixteenBitDifference"], "Lossless JPEG limits");
|
|
44
|
+
if (!Number.isSafeInteger(limits.maximumSamples) || limits.maximumSamples < 1)
|
|
45
|
+
fail("invalid sample limit.");
|
|
46
|
+
const length = bytes.length;
|
|
47
|
+
if (length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
|
|
48
|
+
fail("missing SOI marker.");
|
|
49
|
+
const tables = [];
|
|
50
|
+
let frame;
|
|
51
|
+
let restartInterval = 0, p = 2;
|
|
52
|
+
for (;;) {
|
|
53
|
+
while (p < length && bytes[p] === 0xff && bytes[p + 1] === 0xff)
|
|
54
|
+
p++; // fill bytes before a marker
|
|
55
|
+
if (p + 4 > length || bytes[p] !== 0xff)
|
|
56
|
+
fail("malformed marker segment.");
|
|
57
|
+
const marker = bytes[p + 1];
|
|
58
|
+
if (marker === 0xd9)
|
|
59
|
+
fail("no scan before EOI.");
|
|
60
|
+
const size = bytes[p + 2] * 256 + bytes[p + 3], start = p + 4, end = p + 2 + size;
|
|
61
|
+
if (size < 2 || end > length)
|
|
62
|
+
fail("segment exceeds the stream.");
|
|
63
|
+
if (marker === 0xc4) {
|
|
64
|
+
let q = start;
|
|
65
|
+
while (q < end) {
|
|
66
|
+
const tc = bytes[q] >> 4, th = bytes[q] & 15;
|
|
67
|
+
if (tc !== 0 || th > 3 || q + 17 > end)
|
|
68
|
+
fail("invalid Huffman table.");
|
|
69
|
+
const counts = bytes.subarray(q + 1, q + 17);
|
|
70
|
+
let total = 0;
|
|
71
|
+
for (const c of counts)
|
|
72
|
+
total += c;
|
|
73
|
+
if (total > 256 || q + 17 + total > end)
|
|
74
|
+
fail("Huffman table exceeds its segment.");
|
|
75
|
+
tables[th] = buildTable(counts, bytes.slice(q + 17, q + 17 + total));
|
|
76
|
+
q += 17 + total;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (marker === 0xc3) {
|
|
80
|
+
if (frame || size < 8)
|
|
81
|
+
fail("unexpected frame header.");
|
|
82
|
+
const precision = bytes[start], height = bytes[start + 1] * 256 + bytes[start + 2], width = bytes[start + 3] * 256 + bytes[start + 4], nf = bytes[start + 5];
|
|
83
|
+
if (precision < 2 || precision > 16 || height < 1 || width < 1 || nf < 1 || nf > 4 || size !== 8 + 3 * nf)
|
|
84
|
+
fail("unsupported frame header.");
|
|
85
|
+
const ids = [];
|
|
86
|
+
for (let i = 0; i < nf; i++) {
|
|
87
|
+
const o = start + 6 + i * 3;
|
|
88
|
+
if (bytes[o + 1] !== 0x11)
|
|
89
|
+
fail("only 1x1 component sampling is supported.");
|
|
90
|
+
if (ids.includes(bytes[o]))
|
|
91
|
+
fail("duplicate component identifier.");
|
|
92
|
+
ids.push(bytes[o]);
|
|
93
|
+
}
|
|
94
|
+
if (width * height * nf > limits.maximumSamples)
|
|
95
|
+
fail("frame exceeds the sample limit.");
|
|
96
|
+
frame = { precision, height, width, ids };
|
|
97
|
+
}
|
|
98
|
+
else if (marker === 0xdd) {
|
|
99
|
+
if (size !== 4)
|
|
100
|
+
fail("invalid restart interval.");
|
|
101
|
+
restartInterval = bytes[start] * 256 + bytes[start + 1];
|
|
102
|
+
}
|
|
103
|
+
else if (marker === 0xda) {
|
|
104
|
+
if (!frame)
|
|
105
|
+
fail("scan before frame header.");
|
|
106
|
+
const ns = bytes[start];
|
|
107
|
+
if (ns !== frame.ids.length || size !== 6 + 2 * ns)
|
|
108
|
+
fail("only one interleaved scan over all components is supported.");
|
|
109
|
+
const selectors = [];
|
|
110
|
+
for (let i = 0; i < ns; i++) {
|
|
111
|
+
if (bytes[start + 1 + i * 2] !== frame.ids[i])
|
|
112
|
+
fail("scan component order differs from the frame.");
|
|
113
|
+
const table = tables[bytes[start + 2 + i * 2] >> 4];
|
|
114
|
+
if (!table)
|
|
115
|
+
fail("scan references an undefined Huffman table.");
|
|
116
|
+
selectors.push(table);
|
|
117
|
+
}
|
|
118
|
+
const predictor = bytes[start + 1 + 2 * ns], se = bytes[start + 2 + 2 * ns], ah = bytes[start + 3 + 2 * ns] >> 4, pt = bytes[start + 3 + 2 * ns] & 15;
|
|
119
|
+
if (predictor < 1 || predictor > 7 || se !== 0 || ah !== 0 || pt >= frame.precision)
|
|
120
|
+
fail("unsupported scan parameters.");
|
|
121
|
+
return decodeScan(bytes, end, frame, selectors, predictor, pt, restartInterval, limits.legacySixteenBitDifference === true);
|
|
122
|
+
}
|
|
123
|
+
else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2 || (marker >= 0xc5 && marker <= 0xcf && marker !== 0xc8 && marker !== 0xcc) || marker === 0xde) {
|
|
124
|
+
fail("only lossless Huffman SOF3 frames are supported.");
|
|
125
|
+
}
|
|
126
|
+
else if (marker < 0xc0 || marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7)) {
|
|
127
|
+
fail("unexpected marker.");
|
|
128
|
+
}
|
|
129
|
+
// APPn, COM, DQT and other non-frame segments are skipped by their declared length.
|
|
130
|
+
p = end;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function decodeScan(bytes, start, frame, selectors, predictor, pt, restartInterval, legacy) {
|
|
134
|
+
const { width, height, precision } = frame, nf = selectors.length, rowSamples = width * nf;
|
|
135
|
+
if (restartInterval !== 0 && restartInterval % width !== 0)
|
|
136
|
+
fail("restart interval must be a whole number of lines.");
|
|
137
|
+
const out = new Uint16Array(width * height * nf), modulus = 65536, valueLimit = 1 << (precision - pt);
|
|
138
|
+
let p = start, buffer = 0, bits = 0, padding = 0;
|
|
139
|
+
const fill = () => {
|
|
140
|
+
// Load one byte. 0xFF00 is a stuffed 0xFF. Any other marker ends the entropy-coded data; later reads return zero padding.
|
|
141
|
+
let byte = 0;
|
|
142
|
+
if (p < bytes.length && bytes[p] !== 0xff)
|
|
143
|
+
byte = bytes[p++];
|
|
144
|
+
else if (p + 1 < bytes.length && bytes[p] === 0xff && bytes[p + 1] === 0x00) {
|
|
145
|
+
byte = 0xff;
|
|
146
|
+
p += 2;
|
|
147
|
+
}
|
|
148
|
+
else if (++padding > 8)
|
|
149
|
+
fail("entropy-coded data is truncated.");
|
|
150
|
+
buffer = ((buffer << 8) | byte) >>> 0;
|
|
151
|
+
bits += 8;
|
|
152
|
+
};
|
|
153
|
+
const readBits = (count) => {
|
|
154
|
+
while (bits < count)
|
|
155
|
+
fill();
|
|
156
|
+
bits -= count;
|
|
157
|
+
return (buffer >>> bits) & ((1 << count) - 1);
|
|
158
|
+
};
|
|
159
|
+
const decodeCategory = (table) => {
|
|
160
|
+
let code = readBits(1), len = 1;
|
|
161
|
+
while (code > table.maxCode[len]) {
|
|
162
|
+
if (++len > 16)
|
|
163
|
+
fail("invalid Huffman code.");
|
|
164
|
+
code = (code << 1) | readBits(1);
|
|
165
|
+
}
|
|
166
|
+
const value = table.values[table.valPtr[len] + code - table.minCode[len]];
|
|
167
|
+
if (value === undefined || value > 16)
|
|
168
|
+
fail("invalid difference category.");
|
|
169
|
+
return value;
|
|
170
|
+
};
|
|
171
|
+
let linesSinceRestart = 0, restartIndex = 0;
|
|
172
|
+
for (let y = 0; y < height; y++) {
|
|
173
|
+
if (restartInterval && y > 0 && (y * width) % restartInterval === 0) {
|
|
174
|
+
// Byte-align, then require RSTm with m = restart count mod 8 (T.81 F.1.2.3, H.1.2.1).
|
|
175
|
+
bits = 0;
|
|
176
|
+
buffer = 0;
|
|
177
|
+
padding = 0;
|
|
178
|
+
if (p + 1 >= bytes.length || bytes[p] !== 0xff || bytes[p + 1] !== (0xd0 | (restartIndex & 7)))
|
|
179
|
+
fail("missing restart marker.");
|
|
180
|
+
p += 2;
|
|
181
|
+
restartIndex++;
|
|
182
|
+
linesSinceRestart = 0;
|
|
183
|
+
}
|
|
184
|
+
const row = y * rowSamples, above = row - rowSamples;
|
|
185
|
+
for (let x = 0; x < width; x++)
|
|
186
|
+
for (let c = 0; c < nf; c++) {
|
|
187
|
+
const i = row + x * nf + c;
|
|
188
|
+
let prediction;
|
|
189
|
+
if (linesSinceRestart === 0)
|
|
190
|
+
prediction = x === 0 ? 1 << (precision - pt - 1) : out[i - nf];
|
|
191
|
+
else if (x === 0)
|
|
192
|
+
prediction = out[above + c];
|
|
193
|
+
else {
|
|
194
|
+
const ra = out[i - nf], rb = out[i - rowSamples], rc = out[i - rowSamples - nf];
|
|
195
|
+
switch (predictor) {
|
|
196
|
+
case 1:
|
|
197
|
+
prediction = ra;
|
|
198
|
+
break;
|
|
199
|
+
case 2:
|
|
200
|
+
prediction = rb;
|
|
201
|
+
break;
|
|
202
|
+
case 3:
|
|
203
|
+
prediction = rc;
|
|
204
|
+
break;
|
|
205
|
+
case 4:
|
|
206
|
+
prediction = ra + rb - rc;
|
|
207
|
+
break;
|
|
208
|
+
case 5:
|
|
209
|
+
prediction = ra + ((rb - rc) >> 1);
|
|
210
|
+
break;
|
|
211
|
+
case 6:
|
|
212
|
+
prediction = rb + ((ra - rc) >> 1);
|
|
213
|
+
break;
|
|
214
|
+
default: prediction = (ra + rb) >> 1;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const category = decodeCategory(selectors[c]);
|
|
218
|
+
let difference = 0;
|
|
219
|
+
if (category === 16)
|
|
220
|
+
difference = legacy ? (readBits(16), 32768) : 32768;
|
|
221
|
+
else if (category > 0) {
|
|
222
|
+
const v = readBits(category);
|
|
223
|
+
difference = v < (1 << (category - 1)) ? v - (1 << category) + 1 : v;
|
|
224
|
+
}
|
|
225
|
+
const value = (((prediction + difference) % modulus) + modulus) % modulus;
|
|
226
|
+
if (value >= valueLimit)
|
|
227
|
+
fail("reconstructed sample exceeds the declared precision.");
|
|
228
|
+
out[i] = value;
|
|
229
|
+
}
|
|
230
|
+
linesSinceRestart++;
|
|
231
|
+
}
|
|
232
|
+
if (pt)
|
|
233
|
+
for (let i = 0; i < out.length; i++)
|
|
234
|
+
out[i] = out[i] << pt;
|
|
235
|
+
return { width, height, components: nf, precision, predictor, pointTransform: pt, samples: out };
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=lossless-jpeg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lossless-jpeg.js","sourceRoot":"","sources":["../../src/capture/lossless-jpeg.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Size-limited decoder for lossless Huffman JPEG (ITU-T T.81 | ISO/IEC 10918-1, Annex H, process 14,\n * SOF3), the variant DNG uses for Compression = 7 raw data. Written independently from the published\n * standard, with no third-party decoder source. Browser-safe: plain typed arrays, no I/O.\n *\n * Supported: one SOF3 frame, precision 2..16, 1..4 components with 1x1 sampling, one interleaved scan\n * over all components, predictors 1..7, point transform, DRI restart intervals, 0xFF00 byte stuffing.\n * Rejected: hierarchical/DCT/arithmetic frames, multiple scans, subsampled components, truncated data.\n */\n\nimport { rejectUnknownFields } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\n/** Decoded lossless JPEG samples, interleaved by component within each line (line, x, component). */\nexport interface LosslessJpegImage {\n /** Samples per line (X in the frame header). */\n width: number;\n /** Lines (Y in the frame header). */\n height: number;\n components: number;\n /** Sample precision P in bits, 2..16. */\n precision: number;\n predictor: number;\n pointTransform: number;\n samples: Uint16Array;\n}\nexport interface LosslessJpegLimits {\n /** Largest width x height x components accepted. Checked before output is allocated. */\n maximumSamples: number;\n /**\n * DNG files with DNGVersion below 1.1.0.0 store 16 extra bits after the SSSS = 16 difference category\n * (DNG 1.7.1.0 specification, Compatibility Issue 2). Standard streams store none.\n */\n legacySixteenBitDifference?: boolean;\n}\n\ninterface HuffmanTable { maxCode: Int32Array; valPtr: Int32Array; minCode: Int32Array; values: Uint8Array }\nfunction fail(message: string): never { throw new InvalidConfigurationError(\"Lossless JPEG: \" + message); }\n\n/** T.81 Annex C code generation and F.2.2.3 decoder tables (MINCODE, MAXCODE, VALPTR). */\nfunction buildTable(counts: Uint8Array, values: Uint8Array): HuffmanTable {\n const maxCode = new Int32Array(17).fill(-1), minCode = new Int32Array(17), valPtr = new Int32Array(17);\n let code = 0, k = 0;\n for (let length = 1; length <= 16; length++) {\n const n = counts[length - 1]!;\n if (n) { valPtr[length] = k; minCode[length] = code; code += n; k += n; maxCode[length] = code - 1; }\n // Canonical codes of `length` bits must fit in `length` bits.\n if (code > (1 << length)) fail(\"over-subscribed Huffman table.\");\n code <<= 1;\n }\n return { maxCode, minCode, valPtr, values };\n}\n\n/**\n * Decodes one lossless JPEG stream. Every length, count and table index is checked against the\n * buffer. Output is allocated only after the declared size passes `limits.maximumSamples`.\n */\nexport function parseLosslessJpeg(bytes: Uint8Array, limits: LosslessJpegLimits): LosslessJpegImage {\n if (!(bytes instanceof Uint8Array)) fail(\"input must be a Uint8Array.\");\n if (limits === null || typeof limits !== \"object\" || Array.isArray(limits)) fail(\"limits must be an object.\");\n rejectUnknownFields(limits, [\"maximumSamples\", \"legacySixteenBitDifference\"], \"Lossless JPEG limits\");\n if (!Number.isSafeInteger(limits.maximumSamples) || limits.maximumSamples < 1) fail(\"invalid sample limit.\");\n const length = bytes.length;\n if (length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) fail(\"missing SOI marker.\");\n const tables: (HuffmanTable | undefined)[] = [];\n let frame: { precision: number; height: number; width: number; ids: number[] } | undefined;\n let restartInterval = 0, p = 2;\n for (;;) {\n while (p < length && bytes[p] === 0xff && bytes[p + 1] === 0xff) p++; // fill bytes before a marker\n if (p + 4 > length || bytes[p] !== 0xff) fail(\"malformed marker segment.\");\n const marker = bytes[p + 1]!;\n if (marker === 0xd9) fail(\"no scan before EOI.\");\n const size = bytes[p + 2]! * 256 + bytes[p + 3]!, start = p + 4, end = p + 2 + size;\n if (size < 2 || end > length) fail(\"segment exceeds the stream.\");\n if (marker === 0xc4) {\n let q = start;\n while (q < end) {\n const tc = bytes[q]! >> 4, th = bytes[q]! & 15;\n if (tc !== 0 || th > 3 || q + 17 > end) fail(\"invalid Huffman table.\");\n const counts = bytes.subarray(q + 1, q + 17);\n let total = 0; for (const c of counts) total += c;\n if (total > 256 || q + 17 + total > end) fail(\"Huffman table exceeds its segment.\");\n tables[th] = buildTable(counts, bytes.slice(q + 17, q + 17 + total));\n q += 17 + total;\n }\n } else if (marker === 0xc3) {\n if (frame || size < 8) fail(\"unexpected frame header.\");\n const precision = bytes[start]!, height = bytes[start + 1]! * 256 + bytes[start + 2]!, width = bytes[start + 3]! * 256 + bytes[start + 4]!, nf = bytes[start + 5]!;\n if (precision < 2 || precision > 16 || height < 1 || width < 1 || nf < 1 || nf > 4 || size !== 8 + 3 * nf) fail(\"unsupported frame header.\");\n const ids: number[] = [];\n for (let i = 0; i < nf; i++) {\n const o = start + 6 + i * 3;\n if (bytes[o + 1] !== 0x11) fail(\"only 1x1 component sampling is supported.\");\n if (ids.includes(bytes[o]!)) fail(\"duplicate component identifier.\");\n ids.push(bytes[o]!);\n }\n if (width * height * nf > limits.maximumSamples) fail(\"frame exceeds the sample limit.\");\n frame = { precision, height, width, ids };\n } else if (marker === 0xdd) {\n if (size !== 4) fail(\"invalid restart interval.\");\n restartInterval = bytes[start]! * 256 + bytes[start + 1]!;\n } else if (marker === 0xda) {\n if (!frame) fail(\"scan before frame header.\");\n const ns = bytes[start]!;\n if (ns !== frame.ids.length || size !== 6 + 2 * ns) fail(\"only one interleaved scan over all components is supported.\");\n const selectors: HuffmanTable[] = [];\n for (let i = 0; i < ns; i++) {\n if (bytes[start + 1 + i * 2] !== frame.ids[i]) fail(\"scan component order differs from the frame.\");\n const table = tables[bytes[start + 2 + i * 2]! >> 4];\n if (!table) fail(\"scan references an undefined Huffman table.\");\n selectors.push(table);\n }\n const predictor = bytes[start + 1 + 2 * ns]!, se = bytes[start + 2 + 2 * ns]!, ah = bytes[start + 3 + 2 * ns]! >> 4, pt = bytes[start + 3 + 2 * ns]! & 15;\n if (predictor < 1 || predictor > 7 || se !== 0 || ah !== 0 || pt >= frame.precision) fail(\"unsupported scan parameters.\");\n return decodeScan(bytes, end, frame, selectors, predictor, pt, restartInterval, limits.legacySixteenBitDifference === true);\n } else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2 || (marker >= 0xc5 && marker <= 0xcf && marker !== 0xc8 && marker !== 0xcc) || marker === 0xde) {\n fail(\"only lossless Huffman SOF3 frames are supported.\");\n } else if (marker < 0xc0 || marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7)) {\n fail(\"unexpected marker.\");\n }\n // APPn, COM, DQT and other non-frame segments are skipped by their declared length.\n p = end;\n }\n}\n\nfunction decodeScan(bytes: Uint8Array, start: number, frame: { precision: number; height: number; width: number; ids: number[] },\n selectors: readonly HuffmanTable[], predictor: number, pt: number, restartInterval: number, legacy: boolean): LosslessJpegImage {\n const { width, height, precision } = frame, nf = selectors.length, rowSamples = width * nf;\n if (restartInterval !== 0 && restartInterval % width !== 0) fail(\"restart interval must be a whole number of lines.\");\n const out = new Uint16Array(width * height * nf), modulus = 65536, valueLimit = 1 << (precision - pt);\n let p = start, buffer = 0, bits = 0, padding = 0;\n const fill = (): void => {\n // Load one byte. 0xFF00 is a stuffed 0xFF. Any other marker ends the entropy-coded data; later reads return zero padding.\n let byte = 0;\n if (p < bytes.length && bytes[p] !== 0xff) byte = bytes[p++]!;\n else if (p + 1 < bytes.length && bytes[p] === 0xff && bytes[p + 1] === 0x00) { byte = 0xff; p += 2; }\n else if (++padding > 8) fail(\"entropy-coded data is truncated.\");\n buffer = ((buffer << 8) | byte) >>> 0; bits += 8;\n };\n const readBits = (count: number): number => {\n while (bits < count) fill();\n bits -= count;\n return (buffer >>> bits) & ((1 << count) - 1);\n };\n const decodeCategory = (table: HuffmanTable): number => {\n let code = readBits(1), len = 1;\n while (code > table.maxCode[len]!) {\n if (++len > 16) fail(\"invalid Huffman code.\");\n code = (code << 1) | readBits(1);\n }\n const value = table.values[table.valPtr[len]! + code - table.minCode[len]!];\n if (value === undefined || value > 16) fail(\"invalid difference category.\");\n return value;\n };\n let linesSinceRestart = 0, restartIndex = 0;\n for (let y = 0; y < height; y++) {\n if (restartInterval && y > 0 && (y * width) % restartInterval === 0) {\n // Byte-align, then require RSTm with m = restart count mod 8 (T.81 F.1.2.3, H.1.2.1).\n bits = 0; buffer = 0; padding = 0;\n if (p + 1 >= bytes.length || bytes[p] !== 0xff || bytes[p + 1] !== (0xd0 | (restartIndex & 7))) fail(\"missing restart marker.\");\n p += 2; restartIndex++; linesSinceRestart = 0;\n }\n const row = y * rowSamples, above = row - rowSamples;\n for (let x = 0; x < width; x++) for (let c = 0; c < nf; c++) {\n const i = row + x * nf + c;\n let prediction: number;\n if (linesSinceRestart === 0) prediction = x === 0 ? 1 << (precision - pt - 1) : out[i - nf]!;\n else if (x === 0) prediction = out[above + c]!;\n else {\n const ra = out[i - nf]!, rb = out[i - rowSamples]!, rc = out[i - rowSamples - nf]!;\n switch (predictor) {\n case 1: prediction = ra; break;\n case 2: prediction = rb; break;\n case 3: prediction = rc; break;\n case 4: prediction = ra + rb - rc; break;\n case 5: prediction = ra + ((rb - rc) >> 1); break;\n case 6: prediction = rb + ((ra - rc) >> 1); break;\n default: prediction = (ra + rb) >> 1;\n }\n }\n const category = decodeCategory(selectors[c]!);\n let difference = 0;\n if (category === 16) difference = legacy ? (readBits(16), 32768) : 32768;\n else if (category > 0) {\n const v = readBits(category);\n difference = v < (1 << (category - 1)) ? v - (1 << category) + 1 : v;\n }\n const value = (((prediction + difference) % modulus) + modulus) % modulus;\n if (value >= valueLimit) fail(\"reconstructed sample exceeds the declared precision.\");\n out[i] = value;\n }\n linesSinceRestart++;\n }\n if (pt) for (let i = 0; i < out.length; i++) out[i] = out[i]! << pt;\n return { width, height, components: nf, precision, predictor, pointTransform: pt, samples: out };\n}\n"]}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A faster ("lean") per-site optical executor for createNativeEnvironmentRawTask, added in 2.0 for
|
|
3
|
+
* performance. It skips only per-site re-validation and result-envelope building that can be proven
|
|
4
|
+
* redundant, and nothing else:
|
|
5
|
+
*
|
|
6
|
+
* - A site whose environment is strictly equal (plain data, same keys in the same order, Object.is leaves) to
|
|
7
|
+
* an earlier fully validated "template" site except for the two index-bound fields (temporalIntegrationId and
|
|
8
|
+
* sensor.spatialSampling.site), and whose colour-sampling site has the same CFA phase, passes every
|
|
9
|
+
* site-independent check exactly as the template did. Only the site-dependent work is recomputed: aperture
|
|
10
|
+
* geometry and its bounds, the local exposure window, field throughput, aperture rays, query projection and
|
|
11
|
+
* provider requests, with the same arithmetic in the same order as the full planner.
|
|
12
|
+
* - Execution replays the same callbacks with the same frozen requests, validates every provider result with
|
|
13
|
+
* the same parser, and evaluates the photon/charge-rate arithmetic of the full chain (scene-to-sensor
|
|
14
|
+
* acceptance, spatio-spectral reduction, operating range, EQE electron rate, Kahan sums, temporal midpoint
|
|
15
|
+
* sums) in the same floating-point operation order.
|
|
16
|
+
* - Every data-dependent check of the full chain is still evaluated. When one fails, or anything is unexpected,
|
|
17
|
+
* the lean path hands the exact same inputs to the full engine function, which then throws its own error (or
|
|
18
|
+
* returns its own value). Planning falls back before any callback. Execution falls back at the step whose check
|
|
19
|
+
* failed. So callbacks, errors and their order are unchanged.
|
|
20
|
+
* - Each template verifies itself: its own site is planned by both planners and executed by the full executor,
|
|
21
|
+
* and the lean results must be bit-identical (Object.is) before any other site uses the template. A mismatch
|
|
22
|
+
* disables the template and its sites run the full path.
|
|
23
|
+
*
|
|
24
|
+
* Sampled PSFs (point-spread functions) and lens field mappings are covered as well (2.0). A sampled-PSF site
|
|
25
|
+
* resolves its kernels with the full resolver's own code (resolveLensSampledPsfKernel), places the taps with the
|
|
26
|
+
* shared sensorPsfSourcePoint and sums each node's taps in kernel order, as calculateSensorPsfIrradianceQuadrature
|
|
27
|
+
* does. Its per-instant checks run after that instant's callbacks; when one fails, the full quadrature runs on the
|
|
28
|
+
* site's full plan and decides. A lens-mapped site builds each query with calculateMappedSensorEnvironmentRadianceQuery
|
|
29
|
+
* itself and applies the distortion area factor once, after the tap's pupil sum.
|
|
30
|
+
* @see docs/NATIVE_RAW_AND_PRINT.md for the invariance argument and limits.
|
|
31
|
+
*/
|
|
32
|
+
import type { SimulateEnvironmentSensorRawFrameInput } from "./environment-raw-producer.js";
|
|
33
|
+
import type { planEnvironmentSensorPhotoSignal, executeEnvironmentSensorPhotoSignal, EnvironmentRadianceEvaluator, EnvironmentApertureRadianceEvaluator } from "../sensor/environment-photo-signal.js";
|
|
34
|
+
import type { SensorEqeTemporalPhotoSignal } from "../sensor/temporal-photo-signal.js";
|
|
35
|
+
import { type SceneRadianceEvaluationRequest } from "../schema/scene-radiance.js";
|
|
36
|
+
import { type PreparedEnvironmentLensFieldMapping } from "../optics/sensor-environment-query.js";
|
|
37
|
+
import { type ResolveLensSampledPsfInput } from "../optics/lens-psf-profile.js";
|
|
38
|
+
import { type SensorApertureRay } from "../optics/sensor-aperture-rays.js";
|
|
39
|
+
import { parseFocusPlane } from "../optics/focus-state.js";
|
|
40
|
+
import { prepareCaptureExposureWindowSampler } from "../sensor/exposure-window.js";
|
|
41
|
+
import { type NativeRawProducerFrameContext } from "./sensor-raw-producer.js";
|
|
42
|
+
import type { NativeRawLeanSensorHook } from "./native-raw.js";
|
|
43
|
+
type Site = SimulateEnvironmentSensorRawFrameInput["sites"][number];
|
|
44
|
+
type Env = Site["environment"];
|
|
45
|
+
type FullPlan = ReturnType<typeof planEnvironmentSensorPhotoSignal>;
|
|
46
|
+
type FullResult = ReturnType<typeof executeEnvironmentSensorPhotoSignal>;
|
|
47
|
+
type FieldThroughput = FullPlan["instants"][number]["groups"][number]["taps"][number]["fieldThroughput"];
|
|
48
|
+
/** Internal counters of lean work (tests assert the lean path actually runs). Not exported from the package. */
|
|
49
|
+
export declare const nativeEnvironmentLeanStatistics: {
|
|
50
|
+
plannedSites: number;
|
|
51
|
+
executedSites: number;
|
|
52
|
+
sensorSites: number;
|
|
53
|
+
psfFallbacks: number;
|
|
54
|
+
};
|
|
55
|
+
export declare function setNativeEnvironmentLeanExecutionEnabled(enabled: boolean): void;
|
|
56
|
+
interface SpatialNode {
|
|
57
|
+
xPhase: number;
|
|
58
|
+
yPhase: number;
|
|
59
|
+
aaX: number;
|
|
60
|
+
aaY: number;
|
|
61
|
+
}
|
|
62
|
+
interface ExecutionConstants {
|
|
63
|
+
/** Per spatial node: combined normalized weight and geometric area measure in m². */
|
|
64
|
+
weight: Float64Array;
|
|
65
|
+
areaSquareMeters: Float64Array;
|
|
66
|
+
/** Per spectral node: dλ (wavelength step), photon energy and effective EQE, exactly as the template's full chain used them. */
|
|
67
|
+
measure: Float64Array;
|
|
68
|
+
photonEnergy: Float64Array;
|
|
69
|
+
eqe: Float64Array;
|
|
70
|
+
/** Per spectral node: scene-to-sensor acceptance before field throughput. */
|
|
71
|
+
acceptance: Float64Array;
|
|
72
|
+
rangeKind: "power" | "irradiance";
|
|
73
|
+
rangeMinimum: number;
|
|
74
|
+
rangeMaximum: number;
|
|
75
|
+
perBin: boolean;
|
|
76
|
+
photo: SensorEqeTemporalPhotoSignal;
|
|
77
|
+
}
|
|
78
|
+
interface Template {
|
|
79
|
+
environment: Env;
|
|
80
|
+
phase: number;
|
|
81
|
+
/** True until the template's plan constants are derived and self-checked. */
|
|
82
|
+
disabled: boolean;
|
|
83
|
+
consts?: PlanConstants;
|
|
84
|
+
/** The lean plan of the template's own site, shown equal to its full plan. */
|
|
85
|
+
selfPlan?: LeanEnvironmentPlan | undefined;
|
|
86
|
+
execution?: ExecutionConstants;
|
|
87
|
+
/** undefined until the template site executed through the full path. */
|
|
88
|
+
executionVerified?: boolean;
|
|
89
|
+
}
|
|
90
|
+
interface PlanConstants {
|
|
91
|
+
spectralCount: number;
|
|
92
|
+
spatialCount: number;
|
|
93
|
+
temporalCount: number;
|
|
94
|
+
pupilCount: number;
|
|
95
|
+
count: number;
|
|
96
|
+
/** Per group (spectral × spatial node): its number of taps (1 without a sampled PSF). */
|
|
97
|
+
tapCounts: readonly number[];
|
|
98
|
+
/** Start of each group in an instant's flat tap list, plus the total at the end. */
|
|
99
|
+
tapOffsets: readonly number[];
|
|
100
|
+
/** The template's sampled-PSF resolver input (its engine-owned, frozen profile), without wavelength and field point. */
|
|
101
|
+
psf?: Omit<ResolveLensSampledPsfInput, "wavelengthNm" | "fieldPointMm">;
|
|
102
|
+
/** The template's validated lens field mapping. */
|
|
103
|
+
lensMapping?: PreparedEnvironmentLensFieldMapping;
|
|
104
|
+
wavelengths: Float64Array;
|
|
105
|
+
nodes: readonly FullPlan["instants"][number]["groups"][number]["node"][];
|
|
106
|
+
spatial: SpatialNode[];
|
|
107
|
+
geometry: {
|
|
108
|
+
firstX: number;
|
|
109
|
+
firstY: number;
|
|
110
|
+
pitchX: number;
|
|
111
|
+
pitchY: number;
|
|
112
|
+
offsetX: number;
|
|
113
|
+
offsetY: number;
|
|
114
|
+
widthUm: number;
|
|
115
|
+
heightUm: number;
|
|
116
|
+
imagingWidthMm: number;
|
|
117
|
+
imagingHeightMm: number;
|
|
118
|
+
};
|
|
119
|
+
sampler: ReturnType<typeof prepareCaptureExposureWindowSampler>;
|
|
120
|
+
projectionDistanceMm: number;
|
|
121
|
+
focus: FullPlan["focus"];
|
|
122
|
+
/** The focus plane as calculateSensorApertureRays parses it. */
|
|
123
|
+
parsedFocus: ReturnType<typeof parseFocusPlane>;
|
|
124
|
+
requestBase: {
|
|
125
|
+
providerProfileId: string;
|
|
126
|
+
sceneId: string;
|
|
127
|
+
illuminationProfileId: string;
|
|
128
|
+
materialResponseProfileId: string;
|
|
129
|
+
wavelengthBasis: string;
|
|
130
|
+
};
|
|
131
|
+
sceneBindings: FullPlan["sceneBindings"];
|
|
132
|
+
}
|
|
133
|
+
interface LeanTap {
|
|
134
|
+
request: SceneRadianceEvaluationRequest;
|
|
135
|
+
sourcePointImagePlaneMm: {
|
|
136
|
+
x: number;
|
|
137
|
+
y: number;
|
|
138
|
+
};
|
|
139
|
+
fieldThroughput: FieldThroughput;
|
|
140
|
+
fieldFactor: number;
|
|
141
|
+
fieldValid: boolean;
|
|
142
|
+
apertureRays?: readonly SensorApertureRay[];
|
|
143
|
+
/** 1 / det(d distorted / d ideal), applied once after the tap's pupil sum. Present only with a lens field mapping. */
|
|
144
|
+
distortionAreaFactor?: number;
|
|
145
|
+
}
|
|
146
|
+
/** A lean site plan. `owned` and `count` mirror the full plan fields the native task reads. */
|
|
147
|
+
export interface LeanEnvironmentPlan {
|
|
148
|
+
readonly lean: true;
|
|
149
|
+
readonly template: Template;
|
|
150
|
+
readonly index: number;
|
|
151
|
+
readonly owned: Env;
|
|
152
|
+
readonly count: number;
|
|
153
|
+
readonly site: {
|
|
154
|
+
x: number;
|
|
155
|
+
y: number;
|
|
156
|
+
};
|
|
157
|
+
readonly start: number;
|
|
158
|
+
readonly end: number;
|
|
159
|
+
readonly duration: number;
|
|
160
|
+
/**
|
|
161
|
+
* Per instant, every tap in one flat list: group by group (spectral-major, spatial-minor), each group's taps in kernel
|
|
162
|
+
* order. Group gi holds taps tapOffsets[gi] to tapOffsets[gi + 1] - 1 of its template's plan constants.
|
|
163
|
+
*/
|
|
164
|
+
readonly instants: readonly {
|
|
165
|
+
time: number;
|
|
166
|
+
taps: readonly LeanTap[];
|
|
167
|
+
}[];
|
|
168
|
+
/** Per group: the resolved PSF kernel weights. Present only with a sampled PSF. */
|
|
169
|
+
readonly kernels?: readonly (readonly number[])[];
|
|
170
|
+
}
|
|
171
|
+
export declare function isLeanEnvironmentPlan(plan: unknown): plan is LeanEnvironmentPlan;
|
|
172
|
+
export interface NativeEnvironmentLeanFrame {
|
|
173
|
+
frameId: string;
|
|
174
|
+
nativeWidth: number;
|
|
175
|
+
nativeHeight: number;
|
|
176
|
+
repeatWidth: number;
|
|
177
|
+
repeatHeight: number;
|
|
178
|
+
/** True only when native sites and colour-sampling sites map one to one, with the same top-left origin (identity mapping). */
|
|
179
|
+
identityBinding: boolean;
|
|
180
|
+
}
|
|
181
|
+
/** Per-event lean executor state. Templates and memos live only for one native task. */
|
|
182
|
+
export interface NativeEnvironmentLeanExecutor {
|
|
183
|
+
/**
|
|
184
|
+
* Classifies a planned site. Returns a lean plan when it matches a verified template; "candidate" when it
|
|
185
|
+
* should be planned in full with "full" retention and offered to admitCandidate; or undefined (plan it in
|
|
186
|
+
* full, keeping only the photo signal).
|
|
187
|
+
*/
|
|
188
|
+
plan(environment: Env, index: number): LeanEnvironmentPlan | "candidate" | undefined;
|
|
189
|
+
/** Registers a fully planned ("full" retention) candidate; never throws. */
|
|
190
|
+
admitCandidate(environment: Env, index: number, plan: FullPlan): void;
|
|
191
|
+
/** True when this index is an accepted candidate. Its full execution must use "full" retention and be verified. */
|
|
192
|
+
isCandidate(index: number): boolean;
|
|
193
|
+
/** Verifies a candidate's full execution (full retention) against the lean arithmetic; never throws. */
|
|
194
|
+
verifyCandidate(index: number, plan: FullPlan, result: FullResult): void;
|
|
195
|
+
/**
|
|
196
|
+
* Executes a lean plan. Returns the photo signal, or undefined when the template could not be verified; the
|
|
197
|
+
* caller then plans and executes this site in full. `fullPlan` builds the site's full plan without callbacks;
|
|
198
|
+
* it is called only when a sampled-PSF check fails and the full PSF quadrature must decide.
|
|
199
|
+
*/
|
|
200
|
+
execute(plan: LeanEnvironmentPlan, evaluate: EnvironmentRadianceEvaluator, aperture: EnvironmentApertureRadianceEvaluator | undefined, fullPlan: () => FullPlan): SensorEqeTemporalPhotoSignal | undefined;
|
|
201
|
+
}
|
|
202
|
+
export declare function createNativeEnvironmentLeanExecutor(frame: NativeEnvironmentLeanFrame): NativeEnvironmentLeanExecutor;
|
|
203
|
+
/**
|
|
204
|
+
* Lean sensor stage for createNativeEnvironmentRawTask.
|
|
205
|
+
*
|
|
206
|
+
* claim() runs in the environment task, at the point where the full path composes the site (dark charge), and
|
|
207
|
+
* evaluates every parse-phase check there. compute() runs in the native RAW task's compute phase. If any
|
|
208
|
+
* compute-phase check fails, it falls back to the full parse and calculateNativeRawSite.
|
|
209
|
+
*/
|
|
210
|
+
export interface NativeEnvironmentSensorLean {
|
|
211
|
+
readonly hook: NativeRawLeanSensorHook;
|
|
212
|
+
/** Starts a tile: fully composed sites of the previous tile are forgotten. */
|
|
213
|
+
beginTile(): void;
|
|
214
|
+
/** A lean tile entry for a site matching a verified template, or undefined (compose it in full and remember it). */
|
|
215
|
+
claim(site: Site, photo: SensorEqeTemporalPhotoSignal, index: number): object | undefined;
|
|
216
|
+
/** Remembers a fully composed site so its full computation can become a template. */
|
|
217
|
+
remember(index: number, site: Site, photo: SensorEqeTemporalPhotoSignal): void;
|
|
218
|
+
}
|
|
219
|
+
export declare function createNativeEnvironmentSensorLean(frame: NativeEnvironmentLeanFrame, producerFrame: NativeRawProducerFrameContext, nativeWindow: ((point: {
|
|
220
|
+
x: number;
|
|
221
|
+
y: number;
|
|
222
|
+
}) => {
|
|
223
|
+
startOffsetSecondsFromOpeningReference: number;
|
|
224
|
+
endOffsetSecondsFromOpeningReference: number;
|
|
225
|
+
localExposureDurationSeconds: number;
|
|
226
|
+
}) | undefined): NativeEnvironmentSensorLean;
|
|
227
|
+
export {};
|