@photivra/engine 1.5.0 → 2.1.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 +414 -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/diffraction-provider.d.ts +30 -0
- package/dist/facade/diffraction-provider.js +127 -0
- package/dist/facade/diffraction-provider.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +19 -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 +363 -0
- package/dist/facade/simulate-capture.js +1281 -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 +91 -25
- package/dist/index.js +60 -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-psf-profile.d.ts +118 -0
- package/dist/optics/diffraction-psf-profile.js +252 -0
- package/dist/optics/diffraction-psf-profile.js.map +1 -0
- 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 +777 -2
- package/docs/QUICK_START.md +663 -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 +2253 -3
- 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 +397 -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-psf-profile.md +96 -0
- 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 -11
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tone-mapping.js","sourceRoot":"","sources":["../../src/processing/tone-mapping.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * HDR → SDR tone-mapping operators, and exposure fusion. Each is a named rendering choice (an\n * approximation), not a perceptual or display-calibrated model:\n * - Reinhard et al. 2002 global photographic operator: log-average key, L = a·L_w/L̄_w,\n * L_d = L(1 + L/L_white²)/(1 + L); colour by the luminance ratio L_d/L_w (chromaticity-preserving).\n * - Durand & Dorsey 2002 local operator: base = bilateral(log₁₀ L), detail = log₁₀ L − base,\n * output log = base·c + detail − max(base)·c with c = log₁₀(contrast)/(max(base) − min(base)); the\n * bilateral filter uses the paper's piecewise-linear acceleration with spatial downsampling.\n * - Mertens, Kautz & Van Reeth 2007 exposure fusion of display-referred frames: per-pixel weight\n * W = C^ωc·S^ωs·E^ωe from Laplacian contrast, RGB standard deviation and well-exposedness\n * exp(−(v − 0.5)²/(2·0.2²)), normalized across frames and blended with Laplacian pyramids\n * (Burt & Adelson 1983).\n * The HDR operators output display-referred linear RGB in the input primaries; encode it with the SDR\n * rendering functions. Fusion output stays in the (encoded) domain of its inputs.\n * @see docs/PROCESSING.md for equations, sources and limits.\n */\n\nimport {\n autoLevels, collapse, collapseRows, convolveRows, convolveSeparable, gaussianKernel, gaussianPyramid, gaussianPyramidRows, laplacianPyramid,\n laplacianPyramidRows, luminanceWeights, pyramidBytes, reflect\n} from \"./image-ops.js\";\nimport {\n createProcessingTask, finiteRows, maximumWorkingBytes, optionalFiniteIn, optionalIntegerIn, processingProvenance, requireEnum, requireImage,\n requireImageList, requireOptions,\n type ProcessingBody, type ProcessingLinearColorSpace, type ProcessingProvenance, type ProcessingProvider, type ProcessingRgbImage, type ProcessingTask\n} from \"./processing-task.js\";\n\nconst SPACES = [\"linear-srgb-d65\", \"linear-display-p3-d65\", \"linear-rec2020-d65\"] as const;\n\nexport interface ToneMappedImage extends ProcessingRgbImage {\n /** Output components above 1 (left unclipped for the downstream gamut/encoding stage). */\n aboveOneSampleCount: number;\n provenance: ProcessingProvenance;\n}\n\nexport interface ReinhardGlobalToneMappingInput {\n image: ProcessingRgbImage;\n inputColorSpace: ProcessingLinearColorSpace;\n /** Key value a; default 0.18. */\n key?: number;\n /** Smallest scaled luminance mapped to white; default the largest scaled luminance. */\n whiteLuminance?: number;\n /** δ in the log-average exp(mean(log(δ + L_w))); default 1e-6. */\n logAverageDelta?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface ReinhardGlobalToneMappingOutput extends ToneMappedImage {\n logAverageLuminance: number;\n whiteLuminance: number;\n}\n\n/** Reinhard, Stark, Shirley & Ferwerda (2002) global photographic tone reproduction. */\nexport function createReinhardGlobalToneMappingTask(input: ReinhardGlobalToneMappingInput, provider: ProcessingProvider): ProcessingTask<ReinhardGlobalToneMappingOutput> {\n const r = requireOptions(input, [\"image\", \"inputColorSpace\", \"key\", \"whiteLuminance\", \"logAverageDelta\", \"maximumWorkingBytes\"], \"createReinhardGlobalToneMappingTask input\");\n const image = requireImage(r.image, \"image\"), space = requireEnum(r.inputColorSpace, SPACES, \"inputColorSpace\");\n const key = optionalFiniteIn(r.key, 0.18, \"key\", 0, 1e6, true), delta = optionalFiniteIn(r.logAverageDelta, 1e-6, \"logAverageDelta\", 0, 1, true);\n const white = r.whiteLuminance === undefined ? undefined : optionalFiniteIn(r.whiteLuminance, 1, \"whiteLuminance\", 0, 1e12, true);\n const [wr, wg, wb] = luminanceWeights(space), h = image.height, stride = image.width * 3, n = image.width * h;\n return createProcessingTask({\n provider, totalTileCount: 3 * h, estimatedWorkingBytes: n * 12, maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<ReinhardGlobalToneMappingOutput> {\n yield* finiteRows(image.data, image.width, h, 3, \"image\");\n const d = image.data;\n let logSum = 0, maxL = 0;\n for (let y = 0; y < h; y++) {\n for (let i = y * stride; i < (y + 1) * stride; i += 3) {\n const l = Math.max(0, wr * d[i]! + wg * d[i + 1]! + wb * d[i + 2]!);\n logSum += Math.log(delta + l); maxL = Math.max(maxL, l);\n }\n yield;\n }\n const logAverage = Math.exp(logSum / n), scale = key / logAverage, lWhite = white ?? Math.max(maxL * scale, Number.MIN_VALUE);\n const out = new Float32Array(3 * n);\n let above = 0;\n for (let y = 0; y < h; y++) {\n for (let i = y * stride; i < (y + 1) * stride; i += 3) {\n const lw = wr * d[i]! + wg * d[i + 1]! + wb * d[i + 2]!;\n if (!(lw > 0)) { out[i] = 0; out[i + 1] = 0; out[i + 2] = 0; continue; }\n const l = scale * lw, ld = l * (1 + l / (lWhite * lWhite)) / (1 + l), ratio = ld / lw;\n for (let c = 0; c < 3; c++) { const v = (out[i + c] = Math.max(0, d[i + c]!) * ratio); if (v > 1) above++; }\n }\n yield;\n }\n return { width: image.width, height: h, data: out, aboveOneSampleCount: above, logAverageLuminance: logAverage, whiteLuminance: lWhite,\n provenance: processingProvenance(\"tone-reinhard-2002-global\", [\n \"Global photographic operator L_d = L(1 + L/L_white^2)/(1 + L) with L = a L_w / exp(mean log(delta + L_w)).\",\n \"Colour scaled by L_d/L_w (preserves chromaticity); negative components and non-positive luminance map to 0.\",\n \"Display-referred linear output; no dodging-and-burning (local) variant, gamut mapping or transfer encoding.\"]) };\n }\n });\n}\n\nexport interface DurandDorseyToneMappingInput {\n image: ProcessingRgbImage;\n inputColorSpace: ProcessingLinearColorSpace;\n /** Spatial σ in pixels; default 2% of the larger image side. */\n spatialSigmaPixels?: number;\n /** Range σ in log₁₀ luminance; default 0.4. */\n rangeSigmaLog10?: number;\n /** Target base-layer contrast ratio; default 5. */\n targetContrast?: number;\n /** Spatial downsampling factor of the fast bilateral filter; default max(1, round(σ_s/4)). */\n downsampleFactor?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface DurandDorseyToneMappingOutput extends ToneMappedImage {\n /** Bilateral base layer (log₁₀ luminance) per pixel; −Infinity for pixels with luminance ≤ 0, which are excluded from the filter. */\n baseLog10: Float32Array;\n compressionFactor: number;\n}\n\n/**\n * Durand & Dorsey (2002) bilateral base/detail tone mapping. The fast bilateral filter is the paper's\n * piecewise-linear scheme:\n * 1. Place intensity nodes i_j no more than σ_r apart.\n * 2. For each node, compute J_j = (f ⊗ (g_r(I − i_j)·I)) / (f ⊗ g_r(I − i_j)) on a box-downsampled grid.\n * 3. Upsample bilinearly, then interpolate linearly between the two nodes on either side of each\n * full-resolution intensity.\n */\nexport function createDurandDorseyToneMappingTask(input: DurandDorseyToneMappingInput, provider: ProcessingProvider): ProcessingTask<DurandDorseyToneMappingOutput> {\n const r = requireOptions(input, [\"image\", \"inputColorSpace\", \"spatialSigmaPixels\", \"rangeSigmaLog10\", \"targetContrast\", \"downsampleFactor\",\n \"maximumWorkingBytes\"], \"createDurandDorseyToneMappingTask input\");\n const image = requireImage(r.image, \"image\"), space = requireEnum(r.inputColorSpace, SPACES, \"inputColorSpace\");\n const W = image.width, H = image.height, n = W * H;\n const sigmaS = optionalFiniteIn(r.spatialSigmaPixels, Math.max(0.5, 0.02 * Math.max(W, H)), \"spatialSigmaPixels\", 0, 1e5, true);\n const sigmaR = optionalFiniteIn(r.rangeSigmaLog10, 0.4, \"rangeSigmaLog10\", 0, 100, true);\n const contrast = optionalFiniteIn(r.targetContrast, 5, \"targetContrast\", 1, 1e12, true);\n const z = optionalIntegerIn(r.downsampleFactor, Math.max(1, Math.round(sigmaS / 4)), \"downsampleFactor\", 1, 1024);\n const cw = Math.ceil(W / z), ch = Math.ceil(H / z), kernel = gaussianKernel(sigmaS / z);\n const [wr, wg, wb] = luminanceWeights(space);\n // Node count depends on the data range; the plan bounds it by the float32 log₁₀ range (≈ 90 decades).\n const maxNodes = Math.ceil(90 / sigmaR) + 2;\n const nodeRows = 2 * convolveRows(ch) + ch;\n return createProcessingTask({\n provider, totalTileCount: 4 * H + ch + maxNodes * nodeRows, estimatedWorkingBytes: n * (3 * 4 + 4 + 4) + cw * ch * 4 * 6 + Math.min(maxNodes, 4096) * cw * ch * 4,\n maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<DurandDorseyToneMappingOutput> {\n yield* finiteRows(image.data, W, H, 3, \"image\");\n const d = image.data, logL = new Float32Array(n);\n // Pixels with luminance ≤ 0 have no finite log₁₀; they are marked −∞, excluded from the filter and from the\n // ranges below, and output as 0 by the colour pass.\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, l = wr * d[3 * i]! + wg * d[3 * i + 1]! + wb * d[3 * i + 2]!;\n logL[i] = l > 0 ? Math.log10(l) : -Infinity;\n }\n yield;\n }\n const coarse = new Float32Array(cw * ch);\n let lo = Infinity, hi = -Infinity;\n for (let y = 0; y < ch; y++) {\n for (let x = 0; x < cw; x++) {\n let s = 0, c = 0;\n for (let yy = y * z; yy < Math.min(H, (y + 1) * z); yy++) for (let xx = x * z; xx < Math.min(W, (x + 1) * z); xx++) {\n const v = logL[yy * W + xx]!;\n if (v > -Infinity) { s += v; c++; }\n }\n // A cell with no positive-luminance pixel is NaN and carries zero filter weight.\n const v = (coarse[y * cw + x] = c > 0 ? s / c : NaN);\n if (c > 0) { lo = Math.min(lo, v); hi = Math.max(hi, v); }\n }\n yield;\n }\n for (let i = 0; i < n; i++) if (logL[i]! > -Infinity) { lo = Math.min(lo, logL[i]!); hi = Math.max(hi, logL[i]!); }\n if (!(hi >= lo)) { lo = 0; hi = 0; } // all-zero image\n const nodes = hi > lo ? Math.min(maxNodes, Math.ceil((hi - lo) / sigmaR) + 1) : 1;\n const step = nodes > 1 ? (hi - lo) / (nodes - 1) : 0, J: Float32Array[] = [];\n const g = new Float32Array(cw * ch), hgt = new Float32Array(cw * ch), tmp = new Float32Array(cw * ch), gs = new Float32Array(cw * ch), hs = new Float32Array(cw * ch);\n for (let j = 0; j < maxNodes; j++) {\n if (j >= nodes) { for (let k = 0; k < nodeRows; k++) yield; continue; }\n const node = lo + j * step;\n for (let i = 0; i < cw * ch; i++) {\n const c = coarse[i]!;\n if (Number.isNaN(c)) { g[i] = 0; hgt[i] = 0; continue; }\n const w = Math.exp(-((c - node) ** 2) / (2 * sigmaR * sigmaR)); g[i] = w; hgt[i] = w * c;\n }\n yield* convolveSeparable(g, cw, ch, 1, kernel, tmp, gs);\n yield* convolveSeparable(hgt, cw, ch, 1, kernel, tmp, hs);\n const out = new Float32Array(cw * ch);\n for (let y = 0; y < ch; y++) {\n for (let i = y * cw; i < (y + 1) * cw; i++) out[i] = gs[i]! > 0 ? hs[i]! / gs[i]! : node;\n yield;\n }\n J.push(out);\n }\n const sample = (plane: Float32Array, x: number, y: number): number => {\n const fx = Math.min(Math.max((x + 0.5) / z - 0.5, 0), cw - 1), fy = Math.min(Math.max((y + 0.5) / z - 0.5, 0), ch - 1);\n const x0 = Math.floor(fx), y0 = Math.floor(fy), x1 = Math.min(x0 + 1, cw - 1), y1 = Math.min(y0 + 1, ch - 1), ax = fx - x0, ay = fy - y0;\n return (1 - ay) * ((1 - ax) * plane[y0 * cw + x0]! + ax * plane[y0 * cw + x1]!) + ay * ((1 - ax) * plane[y1 * cw + x0]! + ax * plane[y1 * cw + x1]!);\n };\n const base = new Float32Array(n);\n let bLo = Infinity, bHi = -Infinity;\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, v = logL[i]!;\n if (!(v > -Infinity)) { base[i] = -Infinity; continue; }\n let b: number;\n if (nodes === 1) b = sample(J[0]!, x, y);\n else {\n const t = Math.min(Math.max((v - lo) / step, 0), nodes - 1), j0 = Math.min(Math.floor(t), nodes - 2), a = t - j0;\n b = (1 - a) * sample(J[j0]!, x, y) + a * sample(J[j0 + 1]!, x, y);\n }\n base[i] = b; bLo = Math.min(bLo, b); bHi = Math.max(bHi, b);\n }\n yield;\n }\n if (!(bHi >= bLo)) { bLo = 0; bHi = 0; } // all-zero image\n const factor = bHi > bLo ? Math.log10(contrast) / (bHi - bLo) : 1, offset = bHi * factor, out = new Float32Array(3 * n);\n let above = 0;\n for (let y = 0; y < H; y++) {\n for (let i = y * W; i < (y + 1) * W; i++) {\n const lw = wr * d[3 * i]! + wg * d[3 * i + 1]! + wb * d[3 * i + 2]!;\n if (!(lw > 0)) { out[3 * i] = 0; out[3 * i + 1] = 0; out[3 * i + 2] = 0; continue; }\n const ratio = 10 ** (base[i]! * factor + (logL[i]! - base[i]!) - offset) / lw;\n for (let c = 0; c < 3; c++) { const v = (out[3 * i + c] = Math.max(0, d[3 * i + c]!) * ratio); if (v > 1) above++; }\n }\n yield;\n }\n return { width: W, height: H, data: out, baseLog10: base, compressionFactor: factor, aboveOneSampleCount: above,\n provenance: processingProvenance(\"tone-durand-dorsey-2002-bilateral\", [\n \"Base = fast piecewise-linear bilateral filter of log10 luminance (spatial sigma \" + sigmaS + \" px, range sigma \" + sigmaR + \", downsampling \" + z + \").\",\n \"Base compressed to a \" + contrast + \":1 contrast, detail kept, largest base mapped to luminance 1.\",\n \"Colour scaled by the luminance ratio; display-referred linear output without gamut mapping or transfer encoding.\"]) };\n }\n });\n}\n\n// ------------------------------------------------------------------ exposure fusion\n\nexport interface ExposureFusionInput {\n /** Display-referred (e.g. sRGB-encoded) frames with values nominally in [0, 1]. */\n frames: readonly ProcessingRgbImage[];\n contrastExponent?: number;\n saturationExponent?: number;\n wellExposednessExponent?: number;\n /** Well-exposedness Gaussian σ; default 0.2. */\n wellExposednessSigma?: number;\n /** Pyramid levels; default down to a 1-pixel side (at most 12). */\n pyramidLevels?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface ExposureFusionOutput extends ProcessingRgbImage {\n /** Components clipped to [0, 1] after collapsing the blended pyramid. */\n clippedSampleCount: number;\n provenance: ProcessingProvenance;\n}\n\n// Patent note (public record, not legal advice): standard Mertens et al. Laplacian-pyramid fusion. CyberLink\n// US 8,885,976 (in force to 2034) claims a specific merged-pyramid variant that this implementation does not use;\n// see THIRD_PARTY.md.\n/** Mertens, Kautz & Van Reeth (2007) exposure fusion with Laplacian-pyramid blending. */\nexport function createExposureFusionTask(input: ExposureFusionInput, provider: ProcessingProvider): ProcessingTask<ExposureFusionOutput> {\n const r = requireOptions(input, [\"frames\", \"contrastExponent\", \"saturationExponent\", \"wellExposednessExponent\", \"wellExposednessSigma\",\n \"pyramidLevels\", \"maximumWorkingBytes\"], \"createExposureFusionTask input\");\n const frames = requireImageList(r.frames, \"frames\", 1), W = frames[0]!.width, H = frames[0]!.height, n = W * H, K = frames.length;\n const wc = optionalFiniteIn(r.contrastExponent, 1, \"contrastExponent\", 0, 16), ws = optionalFiniteIn(r.saturationExponent, 1, \"saturationExponent\", 0, 16);\n const we = optionalFiniteIn(r.wellExposednessExponent, 1, \"wellExposednessExponent\", 0, 16), sigma = optionalFiniteIn(r.wellExposednessSigma, 0.2, \"wellExposednessSigma\", 0, 10, true);\n const levels = optionalIntegerIn(r.pyramidLevels, autoLevels(W, H, 12), \"pyramidLevels\", 1, autoLevels(W, H, 32));\n const rows = K * H + H + K * (laplacianPyramidRows(W, H, levels) + gaussianPyramidRows(W, H, levels)) + collapseRows(W, H, levels) + H;\n return createProcessingTask({\n provider, totalTileCount: K * H + rows, estimatedWorkingBytes: K * n * 4 + 3 * pyramidBytes(W, H, 3, levels) + 2 * pyramidBytes(W, H, 1, levels) + n * 12,\n maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<ExposureFusionOutput> {\n for (const [k, f] of frames.entries()) yield* finiteRows(f.data, W, H, 3, \"frames[\" + k + \"]\");\n const weights = frames.map(() => new Float32Array(n)), [lr, lg, lb] = luminanceWeights(\"linear-srgb-d65\");\n for (const [k, f] of frames.entries()) {\n const d = f.data, w = weights[k]!;\n const gray = (x: number, y: number): number => { const i = 3 * (reflect(y, H) * W + reflect(x, W)); return lr * d[i]! + lg * d[i + 1]! + lb * d[i + 2]!; };\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, R = d[3 * i]!, G = d[3 * i + 1]!, B = d[3 * i + 2]!;\n const c = Math.abs(gray(x - 1, y) + gray(x + 1, y) + gray(x, y - 1) + gray(x, y + 1) - 4 * gray(x, y));\n const mu = (R + G + B) / 3, s = Math.sqrt(((R - mu) ** 2 + (G - mu) ** 2 + (B - mu) ** 2) / 3);\n const e = Math.exp(-((R - 0.5) ** 2 + (G - 0.5) ** 2 + (B - 0.5) ** 2) / (2 * sigma * sigma));\n w[i] = c ** wc * s ** ws * e ** we + 1e-12;\n }\n yield;\n }\n }\n for (let y = 0; y < H; y++) {\n for (let i = y * W; i < (y + 1) * W; i++) {\n let sum = 0;\n for (const w of weights) sum += w[i]!;\n for (const w of weights) w[i] = w[i]! / sum;\n }\n yield;\n }\n let acc: Float32Array[] | null = null, sizes: { width: number; height: number }[] = [];\n for (const [k, f] of frames.entries()) {\n const lap = yield* laplacianPyramid(f.data, W, H, 3, levels), gw = yield* gaussianPyramid(weights[k]!, W, H, 1, levels);\n sizes = lap.sizes;\n acc ??= lap.sizes.map((s) => new Float32Array(s.width * s.height * 3));\n for (let l = 0; l < levels; l++) {\n const a = acc[l]!, L = lap.levels[l]!, G = gw.levels[l]!;\n for (let i = 0; i < G.length; i++) for (let c = 0; c < 3; c++) a[3 * i + c] = a[3 * i + c]! + G[i]! * L[3 * i + c]!;\n }\n }\n const fused = yield* collapse({ levels: acc!, sizes, channels: 3 });\n let clipped = 0;\n for (let y = 0; y < H; y++) {\n for (let i = 3 * y * W; i < 3 * (y + 1) * W; i++) {\n const v = fused[i]!;\n if (v < 0) { fused[i] = 0; clipped++; } else if (v > 1) { fused[i] = 1; clipped++; }\n }\n yield;\n }\n return { width: W, height: H, data: fused, clippedSampleCount: clipped, provenance: processingProvenance(\"exposure-fusion-mertens-2007\", [\n \"Weights: |3x3 Laplacian of Rec.709 luma|^wc * RGB std^ws * prod exp(-(v-0.5)^2/(2 sigma^2))^we, normalized per pixel.\",\n \"Laplacian-pyramid blending with Burt-Adelson 5-tap kernel and reflect-101 borders; output clipped to [0, 1].\",\n \"Display-referred blending of registered frames; not a radiance estimate.\"]) };\n }\n });\n}\n\n"]}
|
package/dist/schema/camera.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The legacy CameraConfiguration
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The legacy CameraConfiguration: one set of camera settings, with units, for the
|
|
3
|
+
* proof-of-concept (POC) simulation. It is not a full description of what a camera can do.
|
|
4
|
+
*
|
|
5
|
+
* Its parser is in schema/validation. Newer ISO and exposure capabilities are separate types,
|
|
6
|
+
* so adding a control policy never changes the meaning of saved POC data.
|
|
5
7
|
* @see docs/RELEASE_1_0.md and the corresponding domain guide.
|
|
6
8
|
*/
|
|
7
9
|
export interface SensorConfiguration {
|
|
@@ -37,4 +39,3 @@ export interface CameraConfiguration {
|
|
|
37
39
|
focus: FocusConfiguration;
|
|
38
40
|
stabilization?: StabilizationConfiguration;
|
|
39
41
|
}
|
|
40
|
-
//# sourceMappingURL=camera.d.ts.map
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* continuous
|
|
6
|
-
* Resolves a discrete illumination spectrum into integrated per-line source quantities. Relative line
|
|
7
|
-
* weights are fractions of the declared wavelength-integrated source magnitude. A disabled source
|
|
8
|
-
* resolves to zero contribution. This helper does not evaluate visibility, material response,
|
|
9
|
-
* transport, outgoing scene radiance, optics, or sensor response.
|
|
2
|
+
* Connects light-source spectra to the shared spectral helpers in core/spectral-composition.
|
|
3
|
+
*
|
|
4
|
+
* Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep
|
|
5
|
+
* their own path and are never widened into continuous spectra.
|
|
10
6
|
* @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
|
|
11
7
|
* and support limits.
|
|
12
8
|
*/
|
|
@@ -31,21 +27,19 @@ export interface SceneIlluminationDiscreteLineMeasure {
|
|
|
31
27
|
sceneRadianceCalculated: false;
|
|
32
28
|
}
|
|
33
29
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
30
|
+
* Converts a continuous light-source spectrum into the shared spectral coverage
|
|
31
|
+
* type (wavelength range plus breakpoints).
|
|
36
32
|
*
|
|
37
|
-
* Discrete-line spectra
|
|
38
|
-
*
|
|
33
|
+
* Discrete-line spectra are handled separately and are never widened into
|
|
34
|
+
* continuous breakpoints.
|
|
39
35
|
*/
|
|
40
36
|
export declare function createSceneIlluminationSpectralCoverageParticipant(input: CreateSceneIlluminationSpectralCoverageParticipantInput): SpectralCoverageParticipant;
|
|
41
37
|
/**
|
|
42
|
-
*
|
|
43
|
-
* quantities.
|
|
38
|
+
* Splits a discrete-line light source into the amount carried by each line.
|
|
44
39
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
40
|
+
* Each relative line weight is a fraction of the source's declared total (integrated
|
|
41
|
+
* over wavelength). A disabled source contributes zero. This helper does not handle
|
|
42
|
+
* visibility, material response, light transport, outgoing scene radiance, optics or
|
|
43
|
+
* sensor response.
|
|
49
44
|
*/
|
|
50
45
|
export declare function resolveSceneIlluminationDiscreteLineMeasure(source: SceneIlluminationSource): SceneIlluminationDiscreteLineMeasure;
|
|
51
|
-
//# sourceMappingURL=illumination-spectral.d.ts.map
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* continuous
|
|
7
|
-
* Resolves a discrete illumination spectrum into integrated per-line source quantities. Relative line
|
|
8
|
-
* weights are fractions of the declared wavelength-integrated source magnitude. A disabled source
|
|
9
|
-
* resolves to zero contribution. This helper does not evaluate visibility, material response,
|
|
10
|
-
* transport, outgoing scene radiance, optics, or sensor response.
|
|
3
|
+
* Connects light-source spectra to the shared spectral helpers in core/spectral-composition.
|
|
4
|
+
*
|
|
5
|
+
* Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep
|
|
6
|
+
* their own path and are never widened into continuous spectra.
|
|
11
7
|
* @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
|
|
12
8
|
* and support limits.
|
|
13
9
|
*/
|
|
14
10
|
import { distributeIntegratedQuantityAcrossDiscreteSpectralLines } from "../core/spectral-composition.js";
|
|
15
11
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
12
|
+
import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
|
|
13
|
+
import { parseSceneIlluminationSource } from "./illumination.js";
|
|
14
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
16
15
|
function nonEmptyParticipantId(candidate) {
|
|
17
16
|
if (candidate.trim().length === 0) {
|
|
18
|
-
throw new
|
|
17
|
+
throw new InvalidConfigurationError("participantId must be a non-empty string when supplied.");
|
|
19
18
|
}
|
|
20
19
|
return candidate;
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Converts a continuous light-source spectrum into the shared spectral coverage
|
|
23
|
+
* type (wavelength range plus breakpoints).
|
|
25
24
|
*
|
|
26
|
-
* Discrete-line spectra
|
|
27
|
-
*
|
|
25
|
+
* Discrete-line spectra are handled separately and are never widened into
|
|
26
|
+
* continuous breakpoints.
|
|
28
27
|
*/
|
|
29
28
|
export function createSceneIlluminationSpectralCoverageParticipant(input) {
|
|
29
|
+
requireInputKeys(input, "createSceneIlluminationSpectralCoverageParticipant", ["source", "participantId"]);
|
|
30
|
+
requireInputObject(input.source, "source");
|
|
30
31
|
const spectrum = input.source.spectrum;
|
|
31
32
|
if (spectrum.kind !==
|
|
32
33
|
"continuous-relative-spectrum") {
|
|
@@ -90,15 +91,18 @@ function magnitudeQuantity(source) {
|
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
|
-
*
|
|
94
|
-
* quantities.
|
|
94
|
+
* Splits a discrete-line light source into the amount carried by each line.
|
|
95
95
|
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
96
|
+
* Each relative line weight is a fraction of the source's declared total (integrated
|
|
97
|
+
* over wavelength). A disabled source contributes zero. This helper does not handle
|
|
98
|
+
* visibility, material response, light transport, outgoing scene radiance, optics or
|
|
99
|
+
* sensor response.
|
|
100
100
|
*/
|
|
101
101
|
export function resolveSceneIlluminationDiscreteLineMeasure(source) {
|
|
102
|
+
requireInputObject(source, "resolveSceneIlluminationDiscreteLineMeasure input");
|
|
103
|
+
// 2.0.0: the whole source is validated, so an unknown field at any level is rejected.
|
|
104
|
+
parseSceneIlluminationSource(source, "source");
|
|
105
|
+
requireInputObject(source.spectrum, "source.spectrum");
|
|
102
106
|
if (source.spectrum.kind !==
|
|
103
107
|
"discrete-relative-lines") {
|
|
104
108
|
throw new InvalidScientificInputError("Discrete line measure resolution requires a discrete-relative-lines spectrum.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"illumination-spectral.js","sourceRoot":"","sources":["../../src/schema/illumination-spectral.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"illumination-spectral.js","sourceRoot":"","sources":["../../src/schema/illumination-spectral.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Connects light-source spectra to the shared spectral helpers in core/spectral-composition.\n *\n * Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep\n * their own path and are never widened into continuous spectra.\n * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers\n * and support limits.\n */\n\nimport {\n distributeIntegratedQuantityAcrossDiscreteSpectralLines,\n type DiscreteSpectralLineMeasure,\n type DiscreteSpectralLineQuantityUnit,\n type SpectralCoverageParticipant\n} from \"../core/spectral-composition.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n SceneIlluminationScientificStatus,\n SceneIlluminationSource\n} from \"./illumination.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { parseSceneIlluminationSource } from \"./illumination.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface CreateSceneIlluminationSpectralCoverageParticipantInput {\n source: SceneIlluminationSource;\n participantId?: string;\n}\n\nexport interface SceneIlluminationDiscreteLineMeasure {\n sourceId: string;\n sourceFamily:\n SceneIlluminationSource[\"family\"];\n sourceEnabled: boolean;\n spectrumId: string;\n magnitudeKind:\n SceneIlluminationSource[\"magnitude\"][\"kind\"];\n magnitudeScientificStatus:\n SceneIlluminationScientificStatus;\n spectrumScientificStatus:\n \"calibrated-relative-lines\" |\n \"approximation\";\n measure: DiscreteSpectralLineMeasure;\n combinedUncertaintyCalculated: false;\n calibratedAbsoluteLineClaimAuthorized:\n false;\n materialTransportApplied: false;\n sceneRadianceCalculated: false;\n}\n\nfunction nonEmptyParticipantId(\n candidate: string\n): string {\n if (candidate.trim().length === 0) {\n throw new InvalidConfigurationError(\n \"participantId must be a non-empty string when supplied.\"\n );\n }\n return candidate;\n}\n\n/**\n * Converts a continuous light-source spectrum into the shared spectral coverage\n * type (wavelength range plus breakpoints).\n *\n * Discrete-line spectra are handled separately and are never widened into\n * continuous breakpoints.\n */\nexport function createSceneIlluminationSpectralCoverageParticipant(\n input:\n CreateSceneIlluminationSpectralCoverageParticipantInput\n): SpectralCoverageParticipant {\n requireInputKeys(input, \"createSceneIlluminationSpectralCoverageParticipant\", [\"source\", \"participantId\"]);\n requireInputObject(input.source, \"source\");\n const spectrum = input.source.spectrum;\n if (\n spectrum.kind !==\n \"continuous-relative-spectrum\"\n ) {\n throw new InvalidScientificInputError(\n \"Continuous spectral coverage requires a continuous-relative-spectrum; discrete lines, RGB, blackbody approximation, and unresolved spectra use different semantics.\"\n );\n }\n if (\n spectrum.wavelengthBasis ===\n \"unspecified\"\n ) {\n throw new InvalidScientificInputError(\n \"Continuous illumination spectral coverage requires a resolved air or vacuum wavelength basis.\"\n );\n }\n\n const first = spectrum.samples[0]!;\n const last =\n spectrum.samples[\n spectrum.samples.length - 1\n ]!;\n const participantId =\n nonEmptyParticipantId(\n input.participantId ??\n \"illumination-source:\" +\n input.source.sourceId +\n \":\" +\n spectrum.spectrumId\n );\n\n return {\n participantId,\n role: \"illumination-source\",\n wavelengthBasis:\n spectrum.wavelengthBasis,\n wavelengthRangeNanometers: {\n minimum:\n first.wavelengthNanometers,\n maximum:\n last.wavelengthNanometers\n },\n breakpointsNanometers:\n spectrum.samples\n .slice(1, -1)\n .map(\n (sample) =>\n sample.wavelengthNanometers\n )\n };\n}\n\nfunction magnitudeQuantity(\n source: SceneIlluminationSource\n): {\n totalIntegratedQuantity: number;\n quantityUnit:\n DiscreteSpectralLineQuantityUnit;\n scientificStatus:\n SceneIlluminationScientificStatus;\n} {\n const magnitude = source.magnitude;\n\n if (\n magnitude.kind ===\n \"relative-linear-scale\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude.scale,\n quantityUnit: \"relative\",\n scientificStatus:\n \"approximation\"\n };\n }\n if (\n magnitude.kind ===\n \"radiant-intensity\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude.wattsPerSteradian,\n quantityUnit: \"W/sr\",\n scientificStatus:\n magnitude.scientificStatus\n };\n }\n if (\n magnitude.kind ===\n \"surface-radiance\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude\n .wattsPerSquareMeterSteradian,\n quantityUnit: \"W/m^2/sr\",\n scientificStatus:\n magnitude.scientificStatus\n };\n }\n return {\n totalIntegratedQuantity:\n magnitude.wattsPerSquareMeter,\n quantityUnit: \"W/m^2\",\n scientificStatus:\n magnitude.scientificStatus\n };\n}\n\n/**\n * Splits a discrete-line light source into the amount carried by each line.\n *\n * Each relative line weight is a fraction of the source's declared total (integrated\n * over wavelength). A disabled source contributes zero. This helper does not handle\n * visibility, material response, light transport, outgoing scene radiance, optics or\n * sensor response.\n */\nexport function resolveSceneIlluminationDiscreteLineMeasure(\n source:\n SceneIlluminationSource\n): SceneIlluminationDiscreteLineMeasure {\n requireInputObject(source, \"resolveSceneIlluminationDiscreteLineMeasure input\");\n // 2.0.0: the whole source is validated, so an unknown field at any level is rejected.\n parseSceneIlluminationSource(source, \"source\");\n requireInputObject(source.spectrum, \"source.spectrum\");\n if (\n source.spectrum.kind !==\n \"discrete-relative-lines\"\n ) {\n throw new InvalidScientificInputError(\n \"Discrete line measure resolution requires a discrete-relative-lines spectrum.\"\n );\n }\n\n const magnitude =\n magnitudeQuantity(source);\n const effectiveTotal =\n source.enabled\n ? magnitude\n .totalIntegratedQuantity\n : 0;\n\n return {\n sourceId: source.sourceId,\n sourceFamily: source.family,\n sourceEnabled: source.enabled,\n spectrumId:\n source.spectrum.spectrumId,\n magnitudeKind:\n source.magnitude.kind,\n magnitudeScientificStatus:\n magnitude.scientificStatus,\n spectrumScientificStatus:\n source.spectrum\n .scientificStatus,\n measure:\n distributeIntegratedQuantityAcrossDiscreteSpectralLines(\n {\n distribution:\n source.spectrum\n .distribution,\n totalIntegratedQuantity:\n effectiveTotal,\n quantityUnit:\n magnitude.quantityUnit\n }\n ),\n combinedUncertaintyCalculated:\n false,\n calibratedAbsoluteLineClaimAuthorized:\n false,\n materialTransportApplied: false,\n sceneRadianceCalculated: false\n };\n}\n"]}
|
|
@@ -38,7 +38,7 @@ export interface SceneIlluminationTemporalSourceBinding {
|
|
|
38
38
|
waveformId: string;
|
|
39
39
|
captureTimeReference: "first-opening-boundary-phase";
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
41
|
+
* The capture time at which the waveform's own t=0 falls.
|
|
42
42
|
*
|
|
43
43
|
* waveformTime = captureTime - waveformTimeZeroSecondsFromCaptureReference
|
|
44
44
|
*/
|
|
@@ -128,29 +128,26 @@ export interface SceneIlluminationTemporalExposureIntegration {
|
|
|
128
128
|
convergenceErrorEstimated: false;
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
131
|
-
* Parses time-varying illumination
|
|
132
|
-
*
|
|
131
|
+
* Parses a time-varying illumination profile that sits on top of one existing
|
|
132
|
+
* illumination profile.
|
|
133
133
|
*
|
|
134
|
-
* The base source magnitude
|
|
135
|
-
* one relative
|
|
136
|
-
* remain time-invariant.
|
|
134
|
+
* The base source magnitude and spectrum still apply. Each binding multiplies one
|
|
135
|
+
* source by one relative waveform over time. Sources with no binding stay constant.
|
|
137
136
|
*/
|
|
138
137
|
export declare function parseSceneIlluminationTemporalProfile(value: unknown): SceneIlluminationTemporalProfile;
|
|
139
138
|
/**
|
|
140
|
-
*
|
|
141
|
-
* physical capture time.
|
|
139
|
+
* Returns one registered source's time-varying multiplier at one capture time.
|
|
142
140
|
*
|
|
143
|
-
* Capture time is seconds from the first opening
|
|
144
|
-
* readout timing is
|
|
141
|
+
* Capture time is in seconds from the first opening boundary of the exposure. Sensor
|
|
142
|
+
* readout timing is never used in place of capture time.
|
|
145
143
|
*/
|
|
146
144
|
export declare function evaluateSceneIlluminationTemporalMultiplier(input: EvaluateSceneIlluminationTemporalMultiplierInput): SceneIlluminationTemporalMultiplierEvaluation;
|
|
147
145
|
/**
|
|
148
|
-
* Integrates one time-varying
|
|
149
|
-
* exposure
|
|
146
|
+
* Integrates one source's time-varying multiplier over one local exposure window
|
|
147
|
+
* (from sensor/exposure-window), using the deterministic midpoint rule.
|
|
150
148
|
*
|
|
151
|
-
*
|
|
152
|
-
* magnitude, scene transport, optics, sensor response
|
|
149
|
+
* It integrates only the relative modulation over time. It does not apply source
|
|
150
|
+
* magnitude, scene light transport, optics, sensor response or metering policy.
|
|
153
151
|
*/
|
|
154
152
|
export declare function integrateSceneIlluminationTemporalMultiplierOverExposureWindow(input: IntegrateSceneIlluminationTemporalMultiplierInput): SceneIlluminationTemporalExposureIntegration;
|
|
155
153
|
export {};
|
|
156
|
-
//# sourceMappingURL=illumination-temporal.d.ts.map
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* profile
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* used as a time surrogate.
|
|
3
|
+
* Time-varying light sources, such as flicker or a pulsed light.
|
|
4
|
+
*
|
|
5
|
+
* A temporal profile sits on top of an existing illumination profile. Each binding multiplies
|
|
6
|
+
* one source by a relative waveform over time. The base source magnitude and spectrum still
|
|
7
|
+
* apply, and sources with no binding stay constant. This module parses the profile, evaluates
|
|
8
|
+
* a waveform at one capture time, and integrates it over an exposure window.
|
|
10
9
|
* @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
|
|
11
10
|
* and support limits.
|
|
12
11
|
*/
|
|
13
12
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
14
13
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
15
14
|
import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
|
|
15
|
+
import { requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS, requireFixedFieldsWhenPresent } from "../core/record-validation.js";
|
|
16
16
|
export const SCENE_ILLUMINATION_TEMPORAL_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
17
|
-
function requireRecord(value, path) {
|
|
17
|
+
function requireRecord(value, path, allowedKeys) {
|
|
18
18
|
if (typeof value !== "object" ||
|
|
19
19
|
value === null ||
|
|
20
20
|
Array.isArray(value)) {
|
|
21
21
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
22
22
|
}
|
|
23
|
+
if (allowedKeys !== null)
|
|
24
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
23
25
|
return value;
|
|
24
26
|
}
|
|
25
27
|
function requireNonEmptyString(value, path) {
|
|
@@ -71,7 +73,8 @@ function parseScientificStatus(value, path) {
|
|
|
71
73
|
return value;
|
|
72
74
|
}
|
|
73
75
|
function parseUncertainty(value, path) {
|
|
74
|
-
const record = requireRecord(value, path);
|
|
76
|
+
const record = requireRecord(value, path, null);
|
|
77
|
+
rejectUnknownVariantFields(record, "kind", UNCERTAINTY_VARIANT_FIELDS, path);
|
|
75
78
|
if (record.kind === "relative") {
|
|
76
79
|
return {
|
|
77
80
|
kind: "relative",
|
|
@@ -88,7 +91,8 @@ function parseUncertainty(value, path) {
|
|
|
88
91
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
89
92
|
}
|
|
90
93
|
function parseRegistrationUncertainty(value, path) {
|
|
91
|
-
const record = requireRecord(value, path);
|
|
94
|
+
const record = requireRecord(value, path, null);
|
|
95
|
+
rejectUnknownVariantFields(record, "kind", { "absolute-seconds": ["kind", "plusMinusSeconds", "basis"], "not-quantified": ["kind", "limitation"] }, path);
|
|
92
96
|
if (record.kind ===
|
|
93
97
|
"absolute-seconds") {
|
|
94
98
|
return {
|
|
@@ -115,7 +119,7 @@ function parseWaveformSamples(value, path) {
|
|
|
115
119
|
let previous = Number.NEGATIVE_INFINITY;
|
|
116
120
|
return value.map((entry, index) => {
|
|
117
121
|
const samplePath = path + "[" + index + "]";
|
|
118
|
-
const sample = requireRecord(entry, samplePath);
|
|
122
|
+
const sample = requireRecord(entry, samplePath, ["timeSecondsFromWaveformReference", "relativeMagnitudeMultiplier"]);
|
|
119
123
|
const time = requireNonNegativeFinite(sample
|
|
120
124
|
.timeSecondsFromWaveformReference, samplePath +
|
|
121
125
|
".timeSecondsFromWaveformReference");
|
|
@@ -132,8 +136,13 @@ function parseWaveformSamples(value, path) {
|
|
|
132
136
|
};
|
|
133
137
|
});
|
|
134
138
|
}
|
|
139
|
+
const WAVEFORM_BASE_FIELDS = ["kind", "waveformId", "timeUnit", "scientificStatus", "uncertainty", "evidence", "interpolation", "samples"];
|
|
135
140
|
function parseWaveform(value, path) {
|
|
136
|
-
const record = requireRecord(value, path);
|
|
141
|
+
const record = requireRecord(value, path, null);
|
|
142
|
+
rejectUnknownVariantFields(record, "kind", {
|
|
143
|
+
"aperiodic-relative-multiplier": [...WAVEFORM_BASE_FIELDS, "outsideSupportBehavior"],
|
|
144
|
+
"periodic-relative-multiplier": [...WAVEFORM_BASE_FIELDS, "periodSeconds", "endpointContinuityRequired"]
|
|
145
|
+
}, path);
|
|
137
146
|
if (record.timeUnit !== "s") {
|
|
138
147
|
throw new InvalidConfigurationError(path + '.timeUnit must be "s".');
|
|
139
148
|
}
|
|
@@ -214,7 +223,7 @@ function parseWaveform(value, path) {
|
|
|
214
223
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
215
224
|
}
|
|
216
225
|
function parseSourceBinding(value, path) {
|
|
217
|
-
const record = requireRecord(value, path);
|
|
226
|
+
const record = requireRecord(value, path, ["captureTimeReference", "scientificStatus", "timingUncertainty", "bindingId", "sourceId", "waveformId", "waveformTimeZeroSecondsFromCaptureReference", "evidence"]);
|
|
218
227
|
if (record.captureTimeReference !==
|
|
219
228
|
"first-opening-boundary-phase") {
|
|
220
229
|
throw new InvalidConfigurationError(path +
|
|
@@ -241,16 +250,21 @@ function parseSourceBinding(value, path) {
|
|
|
241
250
|
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
242
251
|
};
|
|
243
252
|
}
|
|
253
|
+
/** Fixed flags the parser writes; a parsed profile may carry them back in unchanged. */
|
|
254
|
+
const TEMPORAL_PROFILE_FIXED_FIELDS = {
|
|
255
|
+
baseIlluminationProfileRemainsAuthoritative: true, sensorReadoutTimingUsedAsExposureTiming: false,
|
|
256
|
+
automaticExposurePolicyIncluded: false
|
|
257
|
+
};
|
|
244
258
|
/**
|
|
245
|
-
* Parses time-varying illumination
|
|
246
|
-
*
|
|
259
|
+
* Parses a time-varying illumination profile that sits on top of one existing
|
|
260
|
+
* illumination profile.
|
|
247
261
|
*
|
|
248
|
-
* The base source magnitude
|
|
249
|
-
* one relative
|
|
250
|
-
* remain time-invariant.
|
|
262
|
+
* The base source magnitude and spectrum still apply. Each binding multiplies one
|
|
263
|
+
* source by one relative waveform over time. Sources with no binding stay constant.
|
|
251
264
|
*/
|
|
252
265
|
export function parseSceneIlluminationTemporalProfile(value) {
|
|
253
|
-
const record = requireRecord(value, "sceneIlluminationTemporalProfile");
|
|
266
|
+
const record = requireRecord(value, "sceneIlluminationTemporalProfile", ["schemaVersion", "waveforms", "sourceBindings", "profileId", "sceneId", "illuminationProfileId", "evidence", ...Object.keys(TEMPORAL_PROFILE_FIXED_FIELDS)]);
|
|
267
|
+
requireFixedFieldsWhenPresent(record, TEMPORAL_PROFILE_FIXED_FIELDS, "sceneIlluminationTemporalProfile");
|
|
254
268
|
if (record.schemaVersion !==
|
|
255
269
|
SCENE_ILLUMINATION_TEMPORAL_PROFILE_SCHEMA_VERSION) {
|
|
256
270
|
throw new InvalidConfigurationError('sceneIlluminationTemporalProfile.schemaVersion must be "' +
|
|
@@ -402,16 +416,16 @@ function evaluateWaveform(waveform, waveformTimeSeconds) {
|
|
|
402
416
|
return interpolateWaveform(waveform.samples, periodicTime);
|
|
403
417
|
}
|
|
404
418
|
/**
|
|
405
|
-
*
|
|
406
|
-
* physical capture time.
|
|
419
|
+
* Returns one registered source's time-varying multiplier at one capture time.
|
|
407
420
|
*
|
|
408
|
-
* Capture time is seconds from the first opening
|
|
409
|
-
* readout timing is
|
|
421
|
+
* Capture time is in seconds from the first opening boundary of the exposure. Sensor
|
|
422
|
+
* readout timing is never used in place of capture time.
|
|
410
423
|
*/
|
|
411
424
|
export function evaluateSceneIlluminationTemporalMultiplier(input) {
|
|
425
|
+
requireInputKeys(input, "evaluateSceneIlluminationTemporalMultiplier", ["illuminationProfile", "temporalProfile", "sourceId", "captureTimeSecondsFromReference"]);
|
|
412
426
|
if (typeof input.sourceId !== "string" ||
|
|
413
427
|
input.sourceId.trim().length === 0) {
|
|
414
|
-
throw new
|
|
428
|
+
throw new InvalidConfigurationError("sourceId must be a non-empty string.");
|
|
415
429
|
}
|
|
416
430
|
if (typeof input
|
|
417
431
|
.captureTimeSecondsFromReference !==
|
|
@@ -447,13 +461,14 @@ export function evaluateSceneIlluminationTemporalMultiplier(input) {
|
|
|
447
461
|
};
|
|
448
462
|
}
|
|
449
463
|
/**
|
|
450
|
-
* Integrates one time-varying
|
|
451
|
-
* exposure
|
|
464
|
+
* Integrates one source's time-varying multiplier over one local exposure window
|
|
465
|
+
* (from sensor/exposure-window), using the deterministic midpoint rule.
|
|
452
466
|
*
|
|
453
|
-
*
|
|
454
|
-
* magnitude, scene transport, optics, sensor response
|
|
467
|
+
* It integrates only the relative modulation over time. It does not apply source
|
|
468
|
+
* magnitude, scene light transport, optics, sensor response or metering policy.
|
|
455
469
|
*/
|
|
456
470
|
export function integrateSceneIlluminationTemporalMultiplierOverExposureWindow(input) {
|
|
471
|
+
requireInputKeys(input, "integrateSceneIlluminationTemporalMultiplierOverExposureWindow", ["illuminationProfile", "temporalProfile", "sourceId", "exposureWindows", "sampleIndex", "temporalSampleCount"]);
|
|
457
472
|
requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
|
|
458
473
|
if (!Number.isSafeInteger(input.sampleIndex) ||
|
|
459
474
|
input.sampleIndex < 0) {
|