@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
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* uniform
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* mechanism. Global readout has no
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
2
|
+
* Sensor readout timing: when each position on the sensor is read out during one capture.
|
|
3
|
+
*
|
|
4
|
+
* Rolling readout is modelled as a uniform linear scan along one axis of the declared active capture.
|
|
5
|
+
* The caller supplies the scan's time span (skew) explicitly. It is never worked out from the total
|
|
6
|
+
* data-readout time, the crop size, pixel density, output resolution, sensor-architecture metadata or
|
|
7
|
+
* the shutter mechanism. Global readout has no skew in this model, even when a non-zero data-readout
|
|
8
|
+
* time is declared.
|
|
9
|
+
*
|
|
10
|
+
* Not covered here: local exposure start and end times, mechanical curtain travel, EFCS (electronic
|
|
11
|
+
* first-curtain shutter) behaviour, rolling-shutter image distortion, flash or flicker, and motion
|
|
12
|
+
* integration.
|
|
11
13
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
12
14
|
* limits.
|
|
13
15
|
*/
|
|
@@ -17,11 +19,11 @@ import type { RasterPoint, RasterRect } from "../output/capture-geometry.js";
|
|
|
17
19
|
import type { NativeImageRaster } from "./sensor-geometry.js";
|
|
18
20
|
import type { SensorReadoutArchitecture } from "./architecture.js";
|
|
19
21
|
/**
|
|
20
|
-
*
|
|
22
|
+
* The readout mode chosen for one capture.
|
|
21
23
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* It uses the same names as the architecture metadata, but does not claim the
|
|
25
|
+
* hardware supports it. SensorArchitectureProfile.readoutCapabilities is
|
|
26
|
+
* descriptive only and is not checked automatically.
|
|
25
27
|
*/
|
|
26
28
|
export type SensorReadoutMode = SensorReadoutArchitecture;
|
|
27
29
|
export type NativeSensorReadoutScanDirection = "top-to-bottom" | "bottom-to-top" | "left-to-right" | "right-to-left";
|
|
@@ -36,9 +38,9 @@ export type SourcedSensorReadoutFact<T> = EvidenceBackedFact<T>;
|
|
|
36
38
|
export interface GlobalSensorReadoutTimingDeclaration {
|
|
37
39
|
readoutMode: "global";
|
|
38
40
|
/**
|
|
39
|
-
*
|
|
41
|
+
* Sensor data-readout time for this capture.
|
|
40
42
|
*
|
|
41
|
-
*
|
|
43
|
+
* It is deliberately not treated as the spatial exposure or readout skew.
|
|
42
44
|
*/
|
|
43
45
|
captureReadoutDurationSeconds: SourcedSensorTimingSeconds;
|
|
44
46
|
scanDirectionNative?: never;
|
|
@@ -47,11 +49,10 @@ export interface GlobalSensorReadoutTimingDeclaration {
|
|
|
47
49
|
export interface RollingSensorReadoutTimingDeclaration {
|
|
48
50
|
readoutMode: "rolling";
|
|
49
51
|
/**
|
|
50
|
-
*
|
|
52
|
+
* Sensor data-readout time for this capture.
|
|
51
53
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* treated as the same quantity.
|
|
54
|
+
* It is kept separate from the spatial skew, because a published readout time
|
|
55
|
+
* and the scan's time span are not necessarily the same quantity.
|
|
55
56
|
*/
|
|
56
57
|
captureReadoutDurationSeconds: SourcedSensorTimingSeconds;
|
|
57
58
|
/**
|
|
@@ -59,8 +60,8 @@ export interface RollingSensorReadoutTimingDeclaration {
|
|
|
59
60
|
*/
|
|
60
61
|
scanDirectionNative: SourcedSensorReadoutFact<NativeSensorReadoutScanDirection>;
|
|
61
62
|
/**
|
|
62
|
-
* Time
|
|
63
|
-
*
|
|
63
|
+
* Time between the first and last scan positions, in the uniform linear
|
|
64
|
+
* timing approximation (the readout skew).
|
|
64
65
|
*/
|
|
65
66
|
spatialSamplingSkewSeconds: SourcedSensorTimingSeconds;
|
|
66
67
|
}
|
|
@@ -68,23 +69,23 @@ export type SensorReadoutTimingDeclaration = GlobalSensorReadoutTimingDeclaratio
|
|
|
68
69
|
export interface CalculateSensorReadoutTimingInput {
|
|
69
70
|
nativeRaster: NativeImageRaster;
|
|
70
71
|
/**
|
|
71
|
-
* Active capture rectangle in
|
|
72
|
+
* Active capture rectangle, in fixed native pixel coordinates.
|
|
72
73
|
*
|
|
73
|
-
* Defaults to the
|
|
74
|
-
*
|
|
74
|
+
* Defaults to the whole native image. Timing is never worked out by scaling
|
|
75
|
+
* a full-frame value to this rectangle.
|
|
75
76
|
*/
|
|
76
77
|
activeCaptureRect?: RasterRect;
|
|
77
78
|
/**
|
|
78
|
-
*
|
|
79
|
+
* The shutter mechanism chosen for the capture.
|
|
79
80
|
*
|
|
80
|
-
* It is reported
|
|
81
|
-
*
|
|
81
|
+
* It is reported separately and does not change the sensor readout timing
|
|
82
|
+
* in this model.
|
|
82
83
|
*/
|
|
83
84
|
shutterMechanism: CaptureShutterMechanism;
|
|
84
85
|
readout: SensorReadoutTimingDeclaration;
|
|
85
86
|
/**
|
|
86
|
-
* Optional continuous native
|
|
87
|
-
*
|
|
87
|
+
* Optional points, in continuous native pixel coordinates measured from pixel
|
|
88
|
+
* edges, to report timing for. A pixel centre is at +0.5.
|
|
88
89
|
*/
|
|
89
90
|
samplePointsNative?: readonly RasterPoint[];
|
|
90
91
|
}
|
|
@@ -92,10 +93,9 @@ export interface SensorReadoutTimingSample {
|
|
|
92
93
|
pointNative: RasterPoint;
|
|
93
94
|
normalizedScanPosition: number | null;
|
|
94
95
|
/**
|
|
95
|
-
*
|
|
96
|
+
* Readout time of this point, in seconds, relative to the first scan position (0).
|
|
96
97
|
*
|
|
97
|
-
*
|
|
98
|
-
* exposure-start time or shutter-curtain time.
|
|
98
|
+
* It is not automatically an exposure-start time or a shutter-curtain time.
|
|
99
99
|
*/
|
|
100
100
|
readoutPhaseOffsetSeconds: number;
|
|
101
101
|
}
|
|
@@ -118,20 +118,19 @@ export interface SensorReadoutTiming {
|
|
|
118
118
|
samples: readonly SensorReadoutTimingSample[];
|
|
119
119
|
}
|
|
120
120
|
/**
|
|
121
|
-
* Resolves
|
|
121
|
+
* Resolves the sensor readout scan schedule for one capture.
|
|
122
122
|
*
|
|
123
|
-
* Rolling readout
|
|
124
|
-
* declared active capture. The caller supplies the
|
|
125
|
-
* explicitly
|
|
126
|
-
*
|
|
127
|
-
*
|
|
123
|
+
* Rolling readout is modelled as a uniform linear scan along one axis of the
|
|
124
|
+
* declared active capture. The caller supplies the scan's time span (skew)
|
|
125
|
+
* explicitly. It is never worked out from the total data-readout time, crop
|
|
126
|
+
* size, pixel density, output resolution, sensor-architecture metadata or the
|
|
127
|
+
* shutter mechanism.
|
|
128
128
|
*
|
|
129
|
-
* Global readout has no
|
|
130
|
-
*
|
|
129
|
+
* Global readout has no skew in this model, even when a non-zero data-readout
|
|
130
|
+
* time is declared.
|
|
131
131
|
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* flash
|
|
132
|
+
* Not covered: local exposure start and end times, mechanical curtain travel,
|
|
133
|
+
* EFCS (electronic first-curtain shutter) behaviour, rolling-shutter image
|
|
134
|
+
* distortion, flash or flicker, and motion integration.
|
|
135
135
|
*/
|
|
136
136
|
export declare function calculateSensorReadoutTiming(input: CalculateSensorReadoutTimingInput): CalculationResult<SensorReadoutTiming>;
|
|
137
|
-
//# sourceMappingURL=readout-timing.d.ts.map
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* uniform
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* mechanism. Global readout has no
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
3
|
+
* Sensor readout timing: when each position on the sensor is read out during one capture.
|
|
4
|
+
*
|
|
5
|
+
* Rolling readout is modelled as a uniform linear scan along one axis of the declared active capture.
|
|
6
|
+
* The caller supplies the scan's time span (skew) explicitly. It is never worked out from the total
|
|
7
|
+
* data-readout time, the crop size, pixel density, output resolution, sensor-architecture metadata or
|
|
8
|
+
* the shutter mechanism. Global readout has no skew in this model, even when a non-zero data-readout
|
|
9
|
+
* time is declared.
|
|
10
|
+
*
|
|
11
|
+
* Not covered here: local exposure start and end times, mechanical curtain travel, EFCS (electronic
|
|
12
|
+
* first-curtain shutter) behaviour, rolling-shutter image distortion, flash or flicker, and motion
|
|
13
|
+
* integration.
|
|
12
14
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
13
15
|
* limits.
|
|
14
16
|
*/
|
|
15
17
|
import { approximationResult } from "../core/calculation-result.js";
|
|
16
18
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
17
19
|
import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
|
|
20
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
21
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
18
22
|
const READOUT_MODES = new Set(["rolling", "global"]);
|
|
19
23
|
const SCAN_DIRECTIONS = new Set([
|
|
20
24
|
"top-to-bottom",
|
|
@@ -27,10 +31,12 @@ const SHUTTER_MECHANISMS = new Set([
|
|
|
27
31
|
"electronic-first-curtain",
|
|
28
32
|
"electronic"
|
|
29
33
|
]);
|
|
30
|
-
function requireRecord(value, path) {
|
|
34
|
+
function requireRecord(value, path, allowedKeys) {
|
|
31
35
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
32
|
-
throw new
|
|
36
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
33
37
|
}
|
|
38
|
+
if (allowedKeys !== null)
|
|
39
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
34
40
|
return value;
|
|
35
41
|
}
|
|
36
42
|
function requireNonNegativeInteger(name, value) {
|
|
@@ -51,9 +57,9 @@ function requirePositiveFinite(name, value) {
|
|
|
51
57
|
return value;
|
|
52
58
|
}
|
|
53
59
|
function parseSecondsFact(value, path, positive) {
|
|
54
|
-
const record = requireRecord(value, path);
|
|
60
|
+
const record = requireRecord(value, path, ["unit", "value", "evidence"]);
|
|
55
61
|
if (record.unit !== "s") {
|
|
56
|
-
throw new
|
|
62
|
+
throw new InvalidConfigurationError(path + '.unit must be "s".');
|
|
57
63
|
}
|
|
58
64
|
const seconds = positive
|
|
59
65
|
? requirePositiveFinite(path + ".value", record.value)
|
|
@@ -65,10 +71,10 @@ function parseSecondsFact(value, path, positive) {
|
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
73
|
function parseDirectionFact(value, path) {
|
|
68
|
-
const record = requireRecord(value, path);
|
|
74
|
+
const record = requireRecord(value, path, ["value", "evidence"]);
|
|
69
75
|
if (typeof record.value !== "string" ||
|
|
70
76
|
!SCAN_DIRECTIONS.has(record.value)) {
|
|
71
|
-
throw new
|
|
77
|
+
throw new InvalidConfigurationError(path + ".value is invalid.");
|
|
72
78
|
}
|
|
73
79
|
return {
|
|
74
80
|
value: record.value,
|
|
@@ -76,10 +82,10 @@ function parseDirectionFact(value, path) {
|
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
84
|
function parseReadoutDeclaration(value) {
|
|
79
|
-
const record = requireRecord(value, "readout");
|
|
85
|
+
const record = requireRecord(value, "readout", ["readoutMode", "captureReadoutDurationSeconds", "scanDirectionNative", "spatialSamplingSkewSeconds"]);
|
|
80
86
|
if (typeof record.readoutMode !== "string" ||
|
|
81
87
|
!READOUT_MODES.has(record.readoutMode)) {
|
|
82
|
-
throw new
|
|
88
|
+
throw new InvalidConfigurationError("readout.readoutMode is invalid.");
|
|
83
89
|
}
|
|
84
90
|
const captureReadoutDurationSeconds = parseSecondsFact(record.captureReadoutDurationSeconds, "readout.captureReadoutDurationSeconds", false);
|
|
85
91
|
if (record.readoutMode === "global") {
|
|
@@ -102,6 +108,7 @@ function parseReadoutDeclaration(value) {
|
|
|
102
108
|
};
|
|
103
109
|
}
|
|
104
110
|
function validateNativeRaster(raster) {
|
|
111
|
+
requireInputObject(raster, "raster input");
|
|
105
112
|
requirePositiveInteger("nativeRaster.pixelWidth", raster.pixelWidth);
|
|
106
113
|
requirePositiveInteger("nativeRaster.pixelHeight", raster.pixelHeight);
|
|
107
114
|
}
|
|
@@ -126,7 +133,7 @@ function validateActiveCaptureRect(rect, raster) {
|
|
|
126
133
|
function validateShutterMechanism(value) {
|
|
127
134
|
if (typeof value !== "string" ||
|
|
128
135
|
!SHUTTER_MECHANISMS.has(value)) {
|
|
129
|
-
throw new
|
|
136
|
+
throw new InvalidConfigurationError("shutterMechanism is invalid.");
|
|
130
137
|
}
|
|
131
138
|
}
|
|
132
139
|
function validatePointWithinActiveCapture(point, rect, index) {
|
|
@@ -167,22 +174,23 @@ function normalizedScanPosition(point, rect, direction) {
|
|
|
167
174
|
}
|
|
168
175
|
}
|
|
169
176
|
/**
|
|
170
|
-
* Resolves
|
|
177
|
+
* Resolves the sensor readout scan schedule for one capture.
|
|
171
178
|
*
|
|
172
|
-
* Rolling readout
|
|
173
|
-
* declared active capture. The caller supplies the
|
|
174
|
-
* explicitly
|
|
175
|
-
*
|
|
176
|
-
*
|
|
179
|
+
* Rolling readout is modelled as a uniform linear scan along one axis of the
|
|
180
|
+
* declared active capture. The caller supplies the scan's time span (skew)
|
|
181
|
+
* explicitly. It is never worked out from the total data-readout time, crop
|
|
182
|
+
* size, pixel density, output resolution, sensor-architecture metadata or the
|
|
183
|
+
* shutter mechanism.
|
|
177
184
|
*
|
|
178
|
-
* Global readout has no
|
|
179
|
-
*
|
|
185
|
+
* Global readout has no skew in this model, even when a non-zero data-readout
|
|
186
|
+
* time is declared.
|
|
180
187
|
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* flash
|
|
188
|
+
* Not covered: local exposure start and end times, mechanical curtain travel,
|
|
189
|
+
* EFCS (electronic first-curtain shutter) behaviour, rolling-shutter image
|
|
190
|
+
* distortion, flash or flicker, and motion integration.
|
|
184
191
|
*/
|
|
185
192
|
export function calculateSensorReadoutTiming(input) {
|
|
193
|
+
requireInputKeys(input, "calculateSensorReadoutTiming", ["nativeRaster", "activeCaptureRect", "shutterMechanism", "readout", "samplePointsNative"]);
|
|
186
194
|
validateNativeRaster(input.nativeRaster);
|
|
187
195
|
validateShutterMechanism(input.shutterMechanism);
|
|
188
196
|
const readout = parseReadoutDeclaration(input.readout);
|
|
@@ -190,7 +198,7 @@ export function calculateSensorReadoutTiming(input) {
|
|
|
190
198
|
validateActiveCaptureRect(activeCaptureRect, input.nativeRaster);
|
|
191
199
|
if (input.samplePointsNative !== undefined &&
|
|
192
200
|
!Array.isArray(input.samplePointsNative)) {
|
|
193
|
-
throw new
|
|
201
|
+
throw new InvalidConfigurationError("samplePointsNative must be an array when supplied.");
|
|
194
202
|
}
|
|
195
203
|
const scan = readout.readoutMode === "rolling"
|
|
196
204
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readout-timing.js","sourceRoot":"","sources":["../../src/sensor/readout-timing.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EACL,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAgI5F,MAAM,aAAa,GAAG,IAAI,GAAG,CAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAmC;IAChE,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAA0B;IAC1D,YAAY;IACZ,0BAA0B;IAC1B,YAAY;CACb,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,2BAA2B,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAa;IAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,2BAA2B,CACnC,IAAI,GAAG,uCAAuC,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,KAAc;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,2BAA2B,CACnC,IAAI,GAAG,yDAAyD,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,2BAA2B,CACnC,IAAI,GAAG,6CAA6C,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,IAAY,EACZ,QAAiB;IAEjB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,2BAA2B,CAAC,IAAI,GAAG,oBAAoB,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ;QACtB,CAAC,CAAC,qBAAqB,CAAC,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;QACtD,CAAC,CAAC,wBAAwB,CAAC,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5D,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IACE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAChC,CAAC,eAAe,CAAC,GAAG,CAClB,MAAM,CAAC,KAAyC,CACjD,EACD,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,IAAI,GAAG,oBAAoB,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAyC;QACvD,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc;IAEd,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/C,IACE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QACtC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,WAAgC,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,iCAAiC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,6BAA6B,GAAG,gBAAgB,CACpD,MAAM,CAAC,6BAA6B,EACpC,uCAAuC,EACvC,KAAK,CACN,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,2BAA2B,CACnC,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,IAAI,2BAA2B,CACnC,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,6BAA6B;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,6BAA6B;QAC7B,mBAAmB,EAAE,kBAAkB,CACrC,MAAM,CAAC,mBAAmB,EAC1B,6BAA6B,CAC9B;QACD,0BAA0B,EAAE,gBAAgB,CAC1C,MAAM,CAAC,0BAA0B,EACjC,oCAAoC,EACpC,IAAI,CACL;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAyB;IACrD,sBAAsB,CAAC,yBAAyB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrE,sBAAsB,CAAC,0BAA0B,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,MAAyB;IACzC,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,MAAM,EAAE,MAAM,CAAC,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAgB,EAChB,MAAyB;IAEzB,yBAAyB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzD,yBAAyB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzD,sBAAsB,CAAC,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,sBAAsB,CAAC,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhE,IACE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU;QACvC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EACzC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0DAA0D,CAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc;IAEd,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAgC,CAAC,EACzD,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,8BAA8B,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,KAAkB,EAClB,IAAgB,EAChB,KAAa;IAEb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,2BAA2B,CACnC,qBAAqB,GAAG,KAAK,GAAG,+BAA+B,CAChE,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;QAC7B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAC9B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,qBAAqB;YACnB,KAAK;YACL,6DAA6D,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CACjB,SAA2C;IAE3C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,KAAK,eAAe;YAClB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzB,KAAK,eAAe;YAClB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,KAAK,eAAe;YAClB,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAkB,EAClB,IAAgB,EAChB,SAA2C;IAE3C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1C,KAAK,eAAe;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,KAAK,eAAe;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,KAAK,eAAe;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,iBAAiB,GACrB,KAAK,CAAC,iBAAiB,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1D,yBAAyB,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEjE,IACE,KAAK,CAAC,kBAAkB,KAAK,SAAS;QACtC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EACxC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GACR,OAAO,CAAC,WAAW,KAAK,SAAS;QAC/B,CAAC,CAAC;YACE,OAAO,EAAE,4BAAqC;YAC9C,eAAe,EAAE,OAAO,CAAC,mBAAmB;YAC5C,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC/D,0BAA0B,EAAE,OAAO,CAAC,0BAA0B;SAC/D;QACH,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpE,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAElE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO;gBACL,WAAW,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;gBACvC,sBAAsB,EAAE,IAAI;gBAC5B,yBAAyB,EAAE,CAAC;aAC7B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,sBAAsB,CACvC,KAAK,EACL,iBAAiB,EACjB,IAAI,CAAC,eAAe,CAAC,KAAK,CAC3B,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;YACvC,sBAAsB,EAAE,UAAU;YAClC,yBAAyB,EACvB,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK;SACrD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,mBAAmB,CACxB;QACE,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,YAAY,EAAE,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE;QACvC,iBAAiB,EAAE,EAAE,GAAG,iBAAiB,EAAE;QAC3C,6BAA6B,EAC3B,OAAO,CAAC,6BAA6B;QACvC,iCAAiC,EAC/B,OAAO,CAAC,WAAW,KAAK,SAAS;YAC/B,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK;YAC1C,CAAC,CAAC,CAAC;QACP,IAAI;QACJ,OAAO;KACR,EACD,mCAAmC,EACnC,OAAO,EACP;QACE,6HAA6H;QAC7H,qHAAqH;QACrH,yKAAyK;QACzK,0JAA0J;QAC1J,kHAAkH;QAClH,+GAA+G;QAC/G,kHAAkH;QAClH,6GAA6G;QAC7G,mHAAmH;QACnH,0KAA0K;KAC3K,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"readout-timing.js","sourceRoot":"","sources":["../../src/sensor/readout-timing.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sensor readout timing: when each position on the sensor is read out during one capture.\n *\n * Rolling readout is modelled as a uniform linear scan along one axis of the declared active capture.\n * The caller supplies the scan's time span (skew) explicitly. It is never worked out from the total\n * data-readout time, the crop size, pixel density, output resolution, sensor-architecture metadata or\n * the shutter mechanism. Global readout has no skew in this model, even when a non-zero data-readout\n * time is declared.\n *\n * Not covered here: local exposure start and end times, mechanical curtain travel, EFCS (electronic\n * first-curtain shutter) behaviour, rolling-shutter image distortion, flash or flicker, and motion\n * integration.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport {\n parseEvidenceList,\n type EvidenceBackedFact\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError, requirePositiveInteger } from \"../core/validation.js\";\nimport type { RasterPoint, RasterRect } from \"../output/capture-geometry.js\";\nimport type { NativeImageRaster } from \"./sensor-geometry.js\";\nimport type { SensorReadoutArchitecture } from \"./architecture.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\n/**\n * The readout mode chosen for one capture.\n *\n * It uses the same names as the architecture metadata, but does not claim the\n * hardware supports it. SensorArchitectureProfile.readoutCapabilities is\n * descriptive only and is not checked automatically.\n */\nexport type SensorReadoutMode = SensorReadoutArchitecture;\n\nexport type NativeSensorReadoutScanDirection =\n | \"top-to-bottom\"\n | \"bottom-to-top\"\n | \"left-to-right\"\n | \"right-to-left\";\n\nexport type CaptureShutterMechanism =\n | \"mechanical\"\n | \"electronic-first-curtain\"\n | \"electronic\";\n\n/**\n * Evidence-backed timing value with an explicit seconds unit.\n */\nexport interface SourcedSensorTimingSeconds\n extends EvidenceBackedFact<number> {\n unit: \"s\";\n}\n\nexport type SourcedSensorReadoutFact<T> = EvidenceBackedFact<T>;\n\nexport interface GlobalSensorReadoutTimingDeclaration {\n readoutMode: \"global\";\n /**\n * Sensor data-readout time for this capture.\n *\n * It is deliberately not treated as the spatial exposure or readout skew.\n */\n captureReadoutDurationSeconds: SourcedSensorTimingSeconds;\n scanDirectionNative?: never;\n spatialSamplingSkewSeconds?: never;\n}\n\nexport interface RollingSensorReadoutTimingDeclaration {\n readoutMode: \"rolling\";\n /**\n * Sensor data-readout time for this capture.\n *\n * It is kept separate from the spatial skew, because a published readout time\n * and the scan's time span are not necessarily the same quantity.\n */\n captureReadoutDurationSeconds: SourcedSensorTimingSeconds;\n /**\n * Native-sensor scan direction for the selected capture mode.\n */\n scanDirectionNative: SourcedSensorReadoutFact<NativeSensorReadoutScanDirection>;\n /**\n * Time between the first and last scan positions, in the uniform linear\n * timing approximation (the readout skew).\n */\n spatialSamplingSkewSeconds: SourcedSensorTimingSeconds;\n}\n\nexport type SensorReadoutTimingDeclaration =\n | GlobalSensorReadoutTimingDeclaration\n | RollingSensorReadoutTimingDeclaration;\n\nexport interface CalculateSensorReadoutTimingInput {\n nativeRaster: NativeImageRaster;\n /**\n * Active capture rectangle, in fixed native pixel coordinates.\n *\n * Defaults to the whole native image. Timing is never worked out by scaling\n * a full-frame value to this rectangle.\n */\n activeCaptureRect?: RasterRect;\n /**\n * The shutter mechanism chosen for the capture.\n *\n * It is reported separately and does not change the sensor readout timing\n * in this model.\n */\n shutterMechanism: CaptureShutterMechanism;\n readout: SensorReadoutTimingDeclaration;\n /**\n * Optional points, in continuous native pixel coordinates measured from pixel\n * edges, to report timing for. A pixel centre is at +0.5.\n */\n samplePointsNative?: readonly RasterPoint[];\n}\n\nexport interface SensorReadoutTimingSample {\n pointNative: RasterPoint;\n normalizedScanPosition: number | null;\n /**\n * Readout time of this point, in seconds, relative to the first scan position (0).\n *\n * It is not automatically an exposure-start time or a shutter-curtain time.\n */\n readoutPhaseOffsetSeconds: number;\n}\n\nexport interface SensorReadoutTiming {\n readoutMode: SensorReadoutMode;\n shutterMechanism: CaptureShutterMechanism;\n nativeRaster: NativeImageRaster;\n activeCaptureRect: RasterRect;\n captureReadoutDurationSeconds: SourcedSensorTimingSeconds;\n maximumSpatialSamplingSkewSeconds: number;\n scan:\n | {\n pattern: \"uniform-linear-single-axis\";\n directionNative: SourcedSensorReadoutFact<NativeSensorReadoutScanDirection>;\n unitVectorNative: { x: number; y: number };\n spatialSamplingSkewSeconds: SourcedSensorTimingSeconds;\n }\n | null;\n samples: readonly SensorReadoutTimingSample[];\n}\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst READOUT_MODES = new Set<SensorReadoutMode>([\"rolling\", \"global\"]);\nconst SCAN_DIRECTIONS = new Set<NativeSensorReadoutScanDirection>([\n \"top-to-bottom\",\n \"bottom-to-top\",\n \"left-to-right\",\n \"right-to-left\"\n]);\nconst SHUTTER_MECHANISMS = new Set<CaptureShutterMechanism>([\n \"mechanical\",\n \"electronic-first-curtain\",\n \"electronic\"\n]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new InvalidConfigurationError(path + \" must be an object.\");\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonNegativeInteger(name: string, value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new InvalidScientificInputError(\n name + \" must be a non-negative safe integer.\"\n );\n }\n}\n\nfunction requireNonNegativeFinite(name: string, value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new InvalidScientificInputError(\n name + \" must be a finite number greater than or equal to zero.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(name: string, value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new InvalidScientificInputError(\n name + \" must be a finite number greater than zero.\"\n );\n }\n return value;\n}\n\nfunction parseSecondsFact(\n value: unknown,\n path: string,\n positive: boolean\n): SourcedSensorTimingSeconds {\n const record = requireRecord(value, path, [\"unit\", \"value\", \"evidence\"]);\n if (record.unit !== \"s\") {\n throw new InvalidConfigurationError(path + '.unit must be \"s\".');\n }\n\n const seconds = positive\n ? requirePositiveFinite(path + \".value\", record.value)\n : requireNonNegativeFinite(path + \".value\", record.value);\n\n return {\n value: seconds,\n unit: \"s\",\n evidence: parseEvidenceList(record.evidence, path + \".evidence\")\n };\n}\n\nfunction parseDirectionFact(\n value: unknown,\n path: string\n): SourcedSensorReadoutFact<NativeSensorReadoutScanDirection> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n if (\n typeof record.value !== \"string\" ||\n !SCAN_DIRECTIONS.has(\n record.value as NativeSensorReadoutScanDirection\n )\n ) {\n throw new InvalidConfigurationError(path + \".value is invalid.\");\n }\n\n return {\n value: record.value as NativeSensorReadoutScanDirection,\n evidence: parseEvidenceList(record.evidence, path + \".evidence\")\n };\n}\n\nfunction parseReadoutDeclaration(\n value: unknown\n): SensorReadoutTimingDeclaration {\n const record = requireRecord(value, \"readout\", [\"readoutMode\", \"captureReadoutDurationSeconds\", \"scanDirectionNative\", \"spatialSamplingSkewSeconds\"]);\n if (\n typeof record.readoutMode !== \"string\" ||\n !READOUT_MODES.has(record.readoutMode as SensorReadoutMode)\n ) {\n throw new InvalidConfigurationError(\"readout.readoutMode is invalid.\");\n }\n\n const captureReadoutDurationSeconds = parseSecondsFact(\n record.captureReadoutDurationSeconds,\n \"readout.captureReadoutDurationSeconds\",\n false\n );\n\n if (record.readoutMode === \"global\") {\n if (record.scanDirectionNative !== undefined) {\n throw new InvalidScientificInputError(\n \"readout.scanDirectionNative must be omitted for global readout.\"\n );\n }\n if (record.spatialSamplingSkewSeconds !== undefined) {\n throw new InvalidScientificInputError(\n \"readout.spatialSamplingSkewSeconds must be omitted for global readout.\"\n );\n }\n\n return {\n readoutMode: \"global\",\n captureReadoutDurationSeconds\n };\n }\n\n return {\n readoutMode: \"rolling\",\n captureReadoutDurationSeconds,\n scanDirectionNative: parseDirectionFact(\n record.scanDirectionNative,\n \"readout.scanDirectionNative\"\n ),\n spatialSamplingSkewSeconds: parseSecondsFact(\n record.spatialSamplingSkewSeconds,\n \"readout.spatialSamplingSkewSeconds\",\n true\n )\n };\n}\n\nfunction validateNativeRaster(raster: NativeImageRaster): void {\n requireInputObject(raster, \"raster input\");\n requirePositiveInteger(\"nativeRaster.pixelWidth\", raster.pixelWidth);\n requirePositiveInteger(\"nativeRaster.pixelHeight\", raster.pixelHeight);\n}\n\nfunction fullRect(raster: NativeImageRaster): RasterRect {\n return {\n x: 0,\n y: 0,\n width: raster.pixelWidth,\n height: raster.pixelHeight\n };\n}\n\nfunction validateActiveCaptureRect(\n rect: RasterRect,\n raster: NativeImageRaster\n): void {\n requireNonNegativeInteger(\"activeCaptureRect.x\", rect.x);\n requireNonNegativeInteger(\"activeCaptureRect.y\", rect.y);\n requirePositiveInteger(\"activeCaptureRect.width\", rect.width);\n requirePositiveInteger(\"activeCaptureRect.height\", rect.height);\n\n if (\n rect.x + rect.width > raster.pixelWidth ||\n rect.y + rect.height > raster.pixelHeight\n ) {\n throw new InvalidScientificInputError(\n \"activeCaptureRect must fit entirely within nativeRaster.\"\n );\n }\n}\n\nfunction validateShutterMechanism(\n value: unknown\n): asserts value is CaptureShutterMechanism {\n if (\n typeof value !== \"string\" ||\n !SHUTTER_MECHANISMS.has(value as CaptureShutterMechanism)\n ) {\n throw new InvalidConfigurationError(\"shutterMechanism is invalid.\");\n }\n}\n\nfunction validatePointWithinActiveCapture(\n point: RasterPoint,\n rect: RasterRect,\n index: number\n): void {\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n throw new InvalidScientificInputError(\n \"samplePointsNative[\" + index + \"] coordinates must be finite.\"\n );\n }\n\n if (\n point.x < rect.x ||\n point.x > rect.x + rect.width ||\n point.y < rect.y ||\n point.y > rect.y + rect.height\n ) {\n throw new InvalidScientificInputError(\n \"samplePointsNative[\" +\n index +\n \"] must lie within activeCaptureRect edge-coordinate bounds.\"\n );\n }\n}\n\nfunction scanVector(\n direction: NativeSensorReadoutScanDirection\n): { x: number; y: number } {\n switch (direction) {\n case \"top-to-bottom\":\n return { x: 0, y: 1 };\n case \"bottom-to-top\":\n return { x: 0, y: -1 };\n case \"left-to-right\":\n return { x: 1, y: 0 };\n case \"right-to-left\":\n return { x: -1, y: 0 };\n }\n}\n\nfunction normalizedScanPosition(\n point: RasterPoint,\n rect: RasterRect,\n direction: NativeSensorReadoutScanDirection\n): number {\n switch (direction) {\n case \"top-to-bottom\":\n return (point.y - rect.y) / rect.height;\n case \"bottom-to-top\":\n return 1 - (point.y - rect.y) / rect.height;\n case \"left-to-right\":\n return (point.x - rect.x) / rect.width;\n case \"right-to-left\":\n return 1 - (point.x - rect.x) / rect.width;\n }\n}\n\n/**\n * Resolves the sensor readout scan schedule for one capture.\n *\n * Rolling readout is modelled as a uniform linear scan along one axis of the\n * declared active capture. The caller supplies the scan's time span (skew)\n * explicitly. It is never worked out from the total data-readout time, crop\n * size, pixel density, output resolution, sensor-architecture metadata or the\n * shutter mechanism.\n *\n * Global readout has no skew in this model, even when a non-zero data-readout\n * time is declared.\n *\n * Not covered: local exposure start and end times, mechanical curtain travel,\n * EFCS (electronic first-curtain shutter) behaviour, rolling-shutter image\n * distortion, flash or flicker, and motion integration.\n */\nexport function calculateSensorReadoutTiming(\n input: CalculateSensorReadoutTimingInput\n): CalculationResult<SensorReadoutTiming> {\n requireInputKeys(input, \"calculateSensorReadoutTiming\", [\"nativeRaster\", \"activeCaptureRect\", \"shutterMechanism\", \"readout\", \"samplePointsNative\"]);\n validateNativeRaster(input.nativeRaster);\n validateShutterMechanism(input.shutterMechanism);\n\n const readout = parseReadoutDeclaration(input.readout);\n const activeCaptureRect =\n input.activeCaptureRect ?? fullRect(input.nativeRaster);\n validateActiveCaptureRect(activeCaptureRect, input.nativeRaster);\n\n if (\n input.samplePointsNative !== undefined &&\n !Array.isArray(input.samplePointsNative)\n ) {\n throw new InvalidConfigurationError(\n \"samplePointsNative must be an array when supplied.\"\n );\n }\n\n const scan =\n readout.readoutMode === \"rolling\"\n ? {\n pattern: \"uniform-linear-single-axis\" as const,\n directionNative: readout.scanDirectionNative,\n unitVectorNative: scanVector(readout.scanDirectionNative.value),\n spatialSamplingSkewSeconds: readout.spatialSamplingSkewSeconds\n }\n : null;\n\n const samples = (input.samplePointsNative ?? []).map((point, index) => {\n validatePointWithinActiveCapture(point, activeCaptureRect, index);\n\n if (scan === null) {\n return {\n pointNative: { x: point.x, y: point.y },\n normalizedScanPosition: null,\n readoutPhaseOffsetSeconds: 0\n };\n }\n\n const normalized = normalizedScanPosition(\n point,\n activeCaptureRect,\n scan.directionNative.value\n );\n\n return {\n pointNative: { x: point.x, y: point.y },\n normalizedScanPosition: normalized,\n readoutPhaseOffsetSeconds:\n normalized * scan.spatialSamplingSkewSeconds.value\n };\n });\n\n return approximationResult(\n {\n readoutMode: readout.readoutMode,\n shutterMechanism: input.shutterMechanism,\n nativeRaster: { ...input.nativeRaster },\n activeCaptureRect: { ...activeCaptureRect },\n captureReadoutDurationSeconds:\n readout.captureReadoutDurationSeconds,\n maximumSpatialSamplingSkewSeconds:\n readout.readoutMode === \"rolling\"\n ? readout.spatialSamplingSkewSeconds.value\n : 0,\n scan,\n samples\n },\n \"native-sensor-readout-scan-timing\",\n \"1.0.0\",\n [\n \"Native raster coordinates use top-left origin, +X right and +Y down and remain invariant under physical camera orientation.\",\n \"Rolling timing uses a uniform-linear single-axis approximation over continuous effective native-raster coordinates.\",\n \"NativeImageRaster is an effective image-sampling grid; the timing map does not assert one raster row or column equals one physical photodiode or hardware readout line.\",\n \"Capture data-readout duration and spatial sampling skew are independently declared facts; no equality or ordering relationship is inferred between them.\",\n \"Global readout has zero spatial sampling skew in this model even when capture data-readout duration is non-zero.\",\n \"Active-capture timing is caller-declared and is not inferred by scaling full-frame timing by crop dimensions.\",\n \"Physical orientation and digital output crop/resolution are downstream of this invariant native timing schedule.\",\n \"Shutter mechanism is reported independently and does not alter the sensor scan schedule in this foundation.\",\n \"The model does not represent segmented, center-out, interleaved, multi-tap or other non-uniform readout patterns.\",\n \"The model does not define exposure windows, shutter-curtain travel, rolling-shutter geometry distortion, flash/flicker interaction or camera/subject motion integration.\"\n ]\n );\n}\n"]}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* checks exact profile
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* selected response application path. Response application checks exact profile/channel, source plane,
|
|
10
|
-
* incident-area basis, spatial uniformity and reference conditions. Structural compatibility alone
|
|
11
|
-
* does not authorize signal conversion; per-bin operating-range validity and the typed EQE/A-W path
|
|
12
|
-
* are separate gates.
|
|
2
|
+
* Response application compatibility: checks that a measured sensor response can be applied to this
|
|
3
|
+
* light input.
|
|
4
|
+
*
|
|
5
|
+
* It checks the exact profile and channel, the plane where the input light is measured (source
|
|
6
|
+
* plane), the area the response refers to, spatial uniformity and the reference conditions of the
|
|
7
|
+
* measurement. Passing this check alone does not allow converting light to signal. The per-bin
|
|
8
|
+
* operating-range check and the EQE or A/W conversion are separate steps.
|
|
13
9
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
14
10
|
* limits.
|
|
15
11
|
*/
|
|
@@ -108,29 +104,26 @@ export interface SensorResponseApplicationCompatibilityAssessment {
|
|
|
108
104
|
};
|
|
109
105
|
}
|
|
110
106
|
/**
|
|
111
|
-
*
|
|
112
|
-
* missing required fields and
|
|
107
|
+
* Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
108
|
+
* missing required fields and inconsistent scientific data are rejected.
|
|
113
109
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* @
|
|
118
|
-
* @returns SensorResponseApplicationProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
110
|
+
* The profile states the source plane, incident-area basis, spatial uniformity and reference
|
|
111
|
+
* conditions under which a response applies.
|
|
112
|
+
* @param value - Untrusted data. TypeScript types alone are not validation.
|
|
113
|
+
* @returns The result. Success does not imply calibration.
|
|
119
114
|
*
|
|
120
|
-
* @see docs/API_REFERENCE.md for the
|
|
115
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
121
116
|
*/
|
|
122
117
|
export declare function parseSensorResponseApplicationProfile(value: unknown): SensorResponseApplicationProfile;
|
|
123
118
|
/**
|
|
124
|
-
*
|
|
125
|
-
* selected
|
|
119
|
+
* Checks whether the source plane, area, profile, channel and reference conditions allow the
|
|
120
|
+
* selected way of applying the response.
|
|
126
121
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* @
|
|
131
|
-
* @returns CalculationResult<SensorResponseApplicationCompatibilityAssessment>. Read structured blockers before consuming an authorization.
|
|
122
|
+
* Passing this alone does not allow converting light to signal. The per-bin operating-range check
|
|
123
|
+
* and the EQE or A/W conversion are separate steps.
|
|
124
|
+
* @param input - The input; see `AssessSensorResponseApplicationCompatibilityInput` for its fields, units and coordinates.
|
|
125
|
+
* @returns The assessment. Read its structured blockers before acting on an authorization.
|
|
132
126
|
*
|
|
133
|
-
* @see docs/API_REFERENCE.md for the
|
|
127
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
134
128
|
*/
|
|
135
129
|
export declare function assessSensorResponseApplicationCompatibility(input: AssessSensorResponseApplicationCompatibilityInput): CalculationResult<SensorResponseApplicationCompatibilityAssessment>;
|
|
136
|
-
//# sourceMappingURL=response-application-compatibility.d.ts.map
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* checks exact profile
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* selected response application path. Response application checks exact profile/channel, source plane,
|
|
11
|
-
* incident-area basis, spatial uniformity and reference conditions. Structural compatibility alone
|
|
12
|
-
* does not authorize signal conversion; per-bin operating-range validity and the typed EQE/A-W path
|
|
13
|
-
* are separate gates.
|
|
3
|
+
* Response application compatibility: checks that a measured sensor response can be applied to this
|
|
4
|
+
* light input.
|
|
5
|
+
*
|
|
6
|
+
* It checks the exact profile and channel, the plane where the input light is measured (source
|
|
7
|
+
* plane), the area the response refers to, spatial uniformity and the reference conditions of the
|
|
8
|
+
* measurement. Passing this check alone does not allow converting light to signal. The per-bin
|
|
9
|
+
* operating-range check and the EQE or A/W conversion are separate steps.
|
|
14
10
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
15
11
|
* limits.
|
|
16
12
|
*/
|
|
@@ -18,13 +14,16 @@ import { calculatedResult } from "../core/calculation-result.js";
|
|
|
18
14
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
19
15
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
20
16
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
17
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields } from "../core/record-validation.js";
|
|
21
18
|
const AREA_TOLERANCE = 1e-10;
|
|
22
|
-
function requireRecord(value, path) {
|
|
19
|
+
function requireRecord(value, path, allowedKeys) {
|
|
23
20
|
if (typeof value !== "object" ||
|
|
24
21
|
value === null ||
|
|
25
22
|
Array.isArray(value)) {
|
|
26
23
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
27
24
|
}
|
|
25
|
+
if (allowedKeys !== null)
|
|
26
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
28
27
|
return value;
|
|
29
28
|
}
|
|
30
29
|
function requireNonEmptyString(value, path) {
|
|
@@ -44,7 +43,7 @@ function requirePositiveFinite(value, path) {
|
|
|
44
43
|
return value;
|
|
45
44
|
}
|
|
46
45
|
function parseIncidentAreaBasis(value, path) {
|
|
47
|
-
const record = requireRecord(value, path);
|
|
46
|
+
const record = requireRecord(value, path, ["areaSquareMicrometers", "kind"]);
|
|
48
47
|
const areaSquareMicrometers = requirePositiveFinite(record.areaSquareMicrometers, path + ".areaSquareMicrometers");
|
|
49
48
|
if (record.kind !==
|
|
50
49
|
"geometric-sensitive-aperture" &&
|
|
@@ -59,7 +58,8 @@ function parseIncidentAreaBasis(value, path) {
|
|
|
59
58
|
};
|
|
60
59
|
}
|
|
61
60
|
function parseSpatialResponseModel(value, path) {
|
|
62
|
-
const record = requireRecord(value, path);
|
|
61
|
+
const record = requireRecord(value, path, null);
|
|
62
|
+
rejectUnknownVariantFields(record, "kind", { "not-established": ["kind", "limitation"], "uniform-over-geometric-sensitive-aperture": ["kind", "scientificStatus", "evidence", "limitation"] }, path);
|
|
63
63
|
if (record.kind === "not-established") {
|
|
64
64
|
return {
|
|
65
65
|
kind: "not-established",
|
|
@@ -96,7 +96,8 @@ function parseSpatialResponseModel(value, path) {
|
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
function parseReferenceConditionPolicy(value, path) {
|
|
99
|
-
const record = requireRecord(value, path);
|
|
99
|
+
const record = requireRecord(value, path, null);
|
|
100
|
+
rejectUnknownVariantFields(record, "kind", { "exact-match-required": ["kind"], "assume-compatible": ["kind", "limitation", "evidence"] }, path);
|
|
100
101
|
if (record.kind ===
|
|
101
102
|
"exact-match-required") {
|
|
102
103
|
return {
|
|
@@ -113,19 +114,18 @@ function parseReferenceConditionPolicy(value, path) {
|
|
|
113
114
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
114
115
|
}
|
|
115
116
|
/**
|
|
116
|
-
*
|
|
117
|
-
* missing required fields and
|
|
117
|
+
* Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
118
|
+
* missing required fields and inconsistent scientific data are rejected.
|
|
118
119
|
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* @
|
|
123
|
-
* @returns SensorResponseApplicationProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
120
|
+
* The profile states the source plane, incident-area basis, spatial uniformity and reference
|
|
121
|
+
* conditions under which a response applies.
|
|
122
|
+
* @param value - Untrusted data. TypeScript types alone are not validation.
|
|
123
|
+
* @returns The result. Success does not imply calibration.
|
|
124
124
|
*
|
|
125
|
-
* @see docs/API_REFERENCE.md for the
|
|
125
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
126
126
|
*/
|
|
127
127
|
export function parseSensorResponseApplicationProfile(value) {
|
|
128
|
-
const record = requireRecord(value, "sensorResponseApplication");
|
|
128
|
+
const record = requireRecord(value, "sensorResponseApplication", ["schemaVersion", "profileId", "spectralResponseProfileId", "colorSamplingProfileId", "channelId", "samplingApertureProfileId", "opticalStackProfileId", "evidence", "incidentAreaBasis", "spatialResponseModel", "referenceConditionPolicy"]);
|
|
129
129
|
if (record.schemaVersion !== "0.1.0") {
|
|
130
130
|
throw new InvalidConfigurationError('sensorResponseApplication.schemaVersion must be "0.1.0".');
|
|
131
131
|
}
|
|
@@ -144,11 +144,11 @@ export function parseSensorResponseApplicationProfile(value) {
|
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
function parseSourcePlane(value) {
|
|
147
|
-
const record = requireRecord(value, "sourcePlane");
|
|
147
|
+
const record = requireRecord(value, "sourcePlane", ["value", "evidence"]);
|
|
148
148
|
if (record.value !==
|
|
149
149
|
"sensor-package-incident" &&
|
|
150
150
|
record.value !== "site-incident") {
|
|
151
|
-
throw new
|
|
151
|
+
throw new InvalidConfigurationError("sourcePlane.value is invalid.");
|
|
152
152
|
}
|
|
153
153
|
return {
|
|
154
154
|
value: record.value,
|
|
@@ -191,6 +191,7 @@ function conditionsMatch(reference, operating) {
|
|
|
191
191
|
return true;
|
|
192
192
|
}
|
|
193
193
|
function validateReductionBoundary(reduction) {
|
|
194
|
+
requireInputObject(reduction, "reduction input");
|
|
194
195
|
if (reduction.outputMeaning !==
|
|
195
196
|
"pre-response-spatio-spectral-radiometric-reduction" ||
|
|
196
197
|
reduction
|
|
@@ -218,18 +219,18 @@ function validateReductionBoundary(reduction) {
|
|
|
218
219
|
.geometricApertureAreaSquareMicrometers;
|
|
219
220
|
}
|
|
220
221
|
/**
|
|
221
|
-
*
|
|
222
|
-
* selected
|
|
222
|
+
* Checks whether the source plane, area, profile, channel and reference conditions allow the
|
|
223
|
+
* selected way of applying the response.
|
|
223
224
|
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* @
|
|
228
|
-
* @returns CalculationResult<SensorResponseApplicationCompatibilityAssessment>. Read structured blockers before consuming an authorization.
|
|
225
|
+
* Passing this alone does not allow converting light to signal. The per-bin operating-range check
|
|
226
|
+
* and the EQE or A/W conversion are separate steps.
|
|
227
|
+
* @param input - The input; see `AssessSensorResponseApplicationCompatibilityInput` for its fields, units and coordinates.
|
|
228
|
+
* @returns The assessment. Read its structured blockers before acting on an authorization.
|
|
229
229
|
*
|
|
230
|
-
* @see docs/API_REFERENCE.md for the
|
|
230
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
231
231
|
*/
|
|
232
232
|
export function assessSensorResponseApplicationCompatibility(input) {
|
|
233
|
+
requireInputKeys(input, "assessSensorResponseApplicationCompatibility", ["reduction", "applicationProfile", "sourcePlane", "operatingConditions"]);
|
|
233
234
|
const geometricArea = validateReductionBoundary(input.reduction);
|
|
234
235
|
const profile = parseSensorResponseApplicationProfile(input.applicationProfile);
|
|
235
236
|
const sourcePlane = parseSourcePlane(input.sourcePlane);
|