@photivra/engine 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +393 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +65 -12
- package/dist/capture/native-raw.js +81 -19
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_1_5_0.md +0 -105
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* pre-output geometry and must not be used to infer crop factor, field of view or physical photosite
|
|
11
|
-
* count.
|
|
3
|
+
* Capture modes: how a camera mode samples the sensor (for example full resolution, binning, or
|
|
4
|
+
* multi-shot sensor shift) and what image size it produces.
|
|
5
|
+
*
|
|
6
|
+
* Sensor physics is never guessed from output resolution or a marketing mode name. A mode's parts
|
|
7
|
+
* are independent: the sequence of frames, sampling within each frame, optional sensor shift between
|
|
8
|
+
* frames, reconstruction stages, the processed image size and downstream dependencies. Changing
|
|
9
|
+
* resolution never changes the physical sensor geometry.
|
|
12
10
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
13
11
|
* limits.
|
|
14
12
|
*/
|
|
15
13
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
16
14
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
17
15
|
import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
|
|
16
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
18
17
|
const COMBINATION_DOMAINS = new Set([
|
|
19
18
|
"charge-domain",
|
|
20
19
|
"pre-conversion-analog",
|
|
@@ -31,10 +30,12 @@ const DEPENDENCIES = new Set([
|
|
|
31
30
|
"radiometric-calibration",
|
|
32
31
|
"inter-frame-registration"
|
|
33
32
|
]);
|
|
34
|
-
function requireRecord(value, path) {
|
|
33
|
+
function requireRecord(value, path, allowedKeys) {
|
|
35
34
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
36
35
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
37
36
|
}
|
|
37
|
+
if (allowedKeys !== null)
|
|
38
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
38
39
|
return value;
|
|
39
40
|
}
|
|
40
41
|
function requireNonEmptyString(value, path) {
|
|
@@ -52,14 +53,14 @@ function requirePositiveSafeIntegerValue(value, path) {
|
|
|
52
53
|
return value;
|
|
53
54
|
}
|
|
54
55
|
function parseIntegerFact(value, path) {
|
|
55
|
-
const record = requireRecord(value, path);
|
|
56
|
+
const record = requireRecord(value, path, ["value", "evidence"]);
|
|
56
57
|
return {
|
|
57
58
|
value: requirePositiveSafeIntegerValue(record.value, path + ".value"),
|
|
58
59
|
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
function parseRasterDimensions(value, path) {
|
|
62
|
-
const record = requireRecord(value, path);
|
|
63
|
+
const record = requireRecord(value, path, ["pixelWidth", "pixelHeight"]);
|
|
63
64
|
const pixelWidth = requirePositiveSafeIntegerValue(record.pixelWidth, path + ".pixelWidth");
|
|
64
65
|
const pixelHeight = requirePositiveSafeIntegerValue(record.pixelHeight, path + ".pixelHeight");
|
|
65
66
|
const total = pixelWidth * pixelHeight;
|
|
@@ -69,14 +70,14 @@ function parseRasterDimensions(value, path) {
|
|
|
69
70
|
return { pixelWidth, pixelHeight };
|
|
70
71
|
}
|
|
71
72
|
function parseRasterFact(value, path) {
|
|
72
|
-
const record = requireRecord(value, path);
|
|
73
|
+
const record = requireRecord(value, path, ["value", "evidence"]);
|
|
73
74
|
return {
|
|
74
75
|
value: parseRasterDimensions(record.value, path + ".value"),
|
|
75
76
|
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
79
|
function parseCombinationDomainFact(value, path) {
|
|
79
|
-
const record = requireRecord(value, path);
|
|
80
|
+
const record = requireRecord(value, path, ["value", "evidence"]);
|
|
80
81
|
if (typeof record.value !== "string" ||
|
|
81
82
|
!COMBINATION_DOMAINS.has(record.value)) {
|
|
82
83
|
throw new InvalidConfigurationError(path + ".value is invalid.");
|
|
@@ -87,7 +88,7 @@ function parseCombinationDomainFact(value, path) {
|
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
function parseAcquisition(value, path) {
|
|
90
|
-
const record = requireRecord(value, path);
|
|
91
|
+
const record = requireRecord(value, path, ["kind", "frameCount", "minimumFrameCount", "maximumFrameCount", "evidence"]);
|
|
91
92
|
if (record.kind === "single-frame") {
|
|
92
93
|
if (record.frameCount !== undefined ||
|
|
93
94
|
record.minimumFrameCount !== undefined ||
|
|
@@ -157,7 +158,7 @@ function parseAcquisition(value, path) {
|
|
|
157
158
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
158
159
|
}
|
|
159
160
|
function parsePerFrameSampling(value, path) {
|
|
160
|
-
const record = requireRecord(value, path);
|
|
161
|
+
const record = requireRecord(value, path, ["kind", "groupWidthSamples", "groupHeightSamples", "combinationDomain", "raster"]);
|
|
161
162
|
if (record.kind === "native-effective-raster") {
|
|
162
163
|
if (record.groupWidthSamples !== undefined ||
|
|
163
164
|
record.groupHeightSamples !== undefined ||
|
|
@@ -199,13 +200,13 @@ function parsePerFrameSampling(value, path) {
|
|
|
199
200
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
200
201
|
}
|
|
201
202
|
function parseOffsetsFact(value, path) {
|
|
202
|
-
const record = requireRecord(value, path);
|
|
203
|
+
const record = requireRecord(value, path, ["value", "evidence"]);
|
|
203
204
|
if (!Array.isArray(record.value) ||
|
|
204
205
|
record.value.length === 0) {
|
|
205
206
|
throw new InvalidConfigurationError(path + ".value must be a non-empty array.");
|
|
206
207
|
}
|
|
207
208
|
const offsets = record.value.map((entry, index) => {
|
|
208
|
-
const item = requireRecord(entry, path + ".value[" + index + "]");
|
|
209
|
+
const item = requireRecord(entry, path + ".value[" + index + "]", ["x", "y"]);
|
|
209
210
|
if (typeof item.x !== "number" ||
|
|
210
211
|
!Number.isFinite(item.x) ||
|
|
211
212
|
typeof item.y !== "number" ||
|
|
@@ -230,7 +231,7 @@ function parseReconstructionStages(value, path) {
|
|
|
230
231
|
throw new InvalidConfigurationError(path + " must be an array.");
|
|
231
232
|
}
|
|
232
233
|
const stages = value.map((entry, index) => {
|
|
233
|
-
const record = requireRecord(entry, path + "[" + index + "]");
|
|
234
|
+
const record = requireRecord(entry, path + "[" + index + "]", ["value", "evidence"]);
|
|
234
235
|
if (typeof record.value !== "string" ||
|
|
235
236
|
!RECONSTRUCTION_STAGES.has(record.value)) {
|
|
236
237
|
throw new InvalidConfigurationError(path + "[" + index + "].value is invalid.");
|
|
@@ -263,7 +264,7 @@ function parseDependencies(value, path) {
|
|
|
263
264
|
return dependencies;
|
|
264
265
|
}
|
|
265
266
|
function parseModeDefinition(value, path) {
|
|
266
|
-
const record = requireRecord(value, path);
|
|
267
|
+
const record = requireRecord(value, path, ["modeId", "acquisition", "interFrameSensorOffsetsNativeSamples", "evidence", "perFrameSampling", "reconstructionStages", "processedImageRaster", "dependencies"]);
|
|
267
268
|
const modeId = requireNonEmptyString(record.modeId, path + ".modeId");
|
|
268
269
|
const acquisition = parseAcquisition(record.acquisition, path + ".acquisition");
|
|
269
270
|
const interFrameSensorOffsetsNativeSamples = record.interFrameSensorOffsetsNativeSamples === undefined
|
|
@@ -299,15 +300,15 @@ function parseModeDefinition(value, path) {
|
|
|
299
300
|
};
|
|
300
301
|
}
|
|
301
302
|
/**
|
|
302
|
-
* Parses a capture-mode profile
|
|
303
|
+
* Parses a capture-mode profile. Sensor physics is never guessed from output
|
|
303
304
|
* resolution or marketing mode names.
|
|
304
305
|
*
|
|
305
|
-
* The profile
|
|
306
|
-
*
|
|
307
|
-
* processed
|
|
306
|
+
* The profile's parts are independent of each other: the frame sequence,
|
|
307
|
+
* sampling within each frame, optional sensor shift between frames,
|
|
308
|
+
* reconstruction stages, the processed image size and downstream dependencies.
|
|
308
309
|
*/
|
|
309
310
|
export function parseCaptureModeProfile(value) {
|
|
310
|
-
const profile = requireRecord(value, "captureModes");
|
|
311
|
+
const profile = requireRecord(value, "captureModes", ["schemaVersion", "modes"]);
|
|
311
312
|
if (profile.schemaVersion !== "0.1.0") {
|
|
312
313
|
throw new InvalidConfigurationError('captureModes.schemaVersion must be "0.1.0".');
|
|
313
314
|
}
|
|
@@ -326,6 +327,7 @@ export function parseCaptureModeProfile(value) {
|
|
|
326
327
|
};
|
|
327
328
|
}
|
|
328
329
|
function validateNativeRaster(raster) {
|
|
330
|
+
requireInputObject(raster, "raster input");
|
|
329
331
|
requirePositiveInteger("nativeRaster.pixelWidth", raster.pixelWidth);
|
|
330
332
|
requirePositiveInteger("nativeRaster.pixelHeight", raster.pixelHeight);
|
|
331
333
|
const total = raster.pixelWidth * raster.pixelHeight;
|
|
@@ -371,18 +373,18 @@ function resolvePerFrameSampling(sampling, nativeRaster) {
|
|
|
371
373
|
};
|
|
372
374
|
}
|
|
373
375
|
/**
|
|
374
|
-
* Resolves one capture mode against the selected sensor's native
|
|
375
|
-
* image-sampling raster.
|
|
376
|
+
* Resolves one capture mode against the selected sensor's native pixel grid.
|
|
376
377
|
*
|
|
377
|
-
* Resolution changes do not
|
|
378
|
-
* processed
|
|
379
|
-
* factor, field of view or physical photosite count.
|
|
378
|
+
* Resolution changes do not change the physical sensor geometry. The returned
|
|
379
|
+
* processed image size is before output, and must not be used to work out crop
|
|
380
|
+
* factor, field of view or the physical photosite count.
|
|
380
381
|
*/
|
|
381
382
|
export function resolveCaptureMode(input) {
|
|
383
|
+
requireInputKeys(input, "resolveCaptureMode", ["nativeRaster", "profile", "modeId"]);
|
|
382
384
|
validateNativeRaster(input.nativeRaster);
|
|
383
385
|
if (typeof input.modeId !== "string" ||
|
|
384
386
|
input.modeId.trim().length === 0) {
|
|
385
|
-
throw new
|
|
387
|
+
throw new InvalidConfigurationError("modeId must be a non-empty string.");
|
|
386
388
|
}
|
|
387
389
|
const profile = parseCaptureModeProfile(input.profile);
|
|
388
390
|
const mode = profile.modes.find((candidate) => candidate.modeId === input.modeId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture-mode.js","sourceRoot":"","sources":["../../src/sensor/capture-mode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capture-mode.js","sourceRoot":"","sources":["../../src/sensor/capture-mode.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Capture modes: how a camera mode samples the sensor (for example full resolution, binning, or\n * multi-shot sensor shift) and what image size it produces.\n *\n * Sensor physics is never guessed from output resolution or a marketing mode name. A mode's parts\n * are independent: the sequence of frames, sampling within each frame, optional sensor shift between\n * frames, reconstruction stages, the processed image size and downstream dependencies. Changing\n * resolution never changes the physical sensor geometry.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceBackedFact,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport type {\n NativeImageRaster,\n RasterDimensions\n} from \"./sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type CaptureModeSampleCombinationDomain =\n | \"charge-domain\"\n | \"pre-conversion-analog\"\n | \"post-conversion-digital\";\n\nexport type CaptureModeReconstructionStage =\n | \"remosaic\"\n | \"pixel-shift-combination\"\n | \"multi-frame-computational-combination\";\n\nexport type CaptureModeDependency =\n | \"color-sampling-model\"\n | \"mode-specific-readout-timing\"\n | \"radiometric-calibration\"\n | \"inter-frame-registration\";\n\nexport interface CaptureModeSensorOffsetNativeSamples {\n /**\n * Horizontal sensor shift, in units of the native sample pitch. This says\n * nothing about the physical photodiode pitch.\n */\n x: number;\n /**\n * Vertical sensor shift, in units of the native sample pitch. This says\n * nothing about the physical photodiode pitch.\n */\n y: number;\n}\n\nexport type SourcedCaptureModeFact<T> = EvidenceBackedFact<T>;\n\nexport interface SingleFrameCaptureAcquisition {\n kind: \"single-frame\";\n}\n\nexport interface FixedMultiFrameCaptureAcquisition {\n kind: \"fixed-multi-frame\";\n frameCount: SourcedCaptureModeFact<number>;\n}\n\nexport interface VariableMultiFrameCaptureAcquisition {\n kind: \"variable-multi-frame\";\n /**\n * Evidence that the mode uses a variable number of frames, even when the\n * exact frame-count limits are not published.\n */\n evidence: readonly EvidenceProvenance[];\n minimumFrameCount?: SourcedCaptureModeFact<number>;\n maximumFrameCount?: SourcedCaptureModeFact<number>;\n}\n\nexport type CaptureModeAcquisition =\n | SingleFrameCaptureAcquisition\n | FixedMultiFrameCaptureAcquisition\n | VariableMultiFrameCaptureAcquisition;\n\nexport interface NativeEffectiveCaptureSampling {\n kind: \"native-effective-raster\";\n}\n\nexport interface GroupedNativeCaptureSampling {\n kind: \"grouped-native-samples\";\n groupWidthSamples: SourcedCaptureModeFact<number>;\n groupHeightSamples: SourcedCaptureModeFact<number>;\n /**\n * Omitted means \"unknown, not stated\". Do not guess where samples are\n * combined from the word \"binning\" or from the ratio of image sizes.\n */\n combinationDomain?: SourcedCaptureModeFact<CaptureModeSampleCombinationDomain>;\n}\n\nexport interface DeclaredEffectiveCaptureSampling {\n kind: \"declared-effective-raster\";\n /**\n * Sample grid per frame, for a mode whose relationship to the native grid\n * cannot safely be written as simple integer grouping.\n */\n raster: SourcedCaptureModeFact<RasterDimensions>;\n}\n\nexport type CaptureModePerFrameSampling =\n | NativeEffectiveCaptureSampling\n | GroupedNativeCaptureSampling\n | DeclaredEffectiveCaptureSampling;\n\nexport interface CaptureModeDefinition {\n modeId: string;\n /**\n * Evidence that this mode exists and for how it captures overall. Facts in\n * the fields below keep their own evidence where needed.\n */\n evidence: readonly EvidenceProvenance[];\n acquisition: CaptureModeAcquisition;\n perFrameSampling: CaptureModePerFrameSampling;\n /**\n * Optional ordered sequence of sensor shifts, for modes with a fixed number\n * of frames. The whole sequence is one evidence-backed fact, because\n * published documentation usually describes it as a unit.\n */\n interFrameSensorOffsetsNativeSamples?: SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n >;\n /**\n * Ordered reconstruction or combination stages. These labels only name the\n * stages for later reconstruction models; they implement no algorithm.\n */\n reconstructionStages?: readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[];\n /**\n * Image size produced by the capture mode and reconstruction, before the\n * final output crop or resampling.\n *\n * It does not change the physical sensor geometry or field of view.\n */\n processedImageRaster: SourcedCaptureModeFact<RasterDimensions>;\n /**\n * Explicit downstream scientific/model dependencies for this mode.\n */\n dependencies?: readonly CaptureModeDependency[];\n}\n\nexport interface CaptureModeProfile {\n schemaVersion: \"0.1.0\";\n modes: readonly CaptureModeDefinition[];\n}\n\nexport interface ResolveCaptureModeInput {\n nativeRaster: NativeImageRaster;\n profile: CaptureModeProfile;\n modeId: string;\n}\n\nexport interface ResolvedCaptureMode {\n modeId: string;\n modeEvidence: readonly EvidenceProvenance[];\n nativeRaster: NativeImageRaster;\n nativeRasterSemantic:\n \"effective-image-sampling-grid-not-photosite-count\";\n acquisition:\n | {\n kind: \"single-frame\";\n frameCount: 1;\n }\n | {\n kind: \"fixed-multi-frame\";\n frameCount: SourcedCaptureModeFact<number>;\n }\n | {\n kind: \"variable-multi-frame\";\n evidence: readonly EvidenceProvenance[];\n minimumFrameCount?: SourcedCaptureModeFact<number>;\n maximumFrameCount?: SourcedCaptureModeFact<number>;\n };\n perFrameSampling:\n | {\n kind: \"native-effective-raster\";\n raster: NativeImageRaster;\n }\n | {\n kind: \"grouped-native-samples\";\n raster: RasterDimensions;\n groupWidthSamples: SourcedCaptureModeFact<number>;\n groupHeightSamples: SourcedCaptureModeFact<number>;\n combinationDomain?: SourcedCaptureModeFact<CaptureModeSampleCombinationDomain>;\n }\n | {\n kind: \"declared-effective-raster\";\n raster: SourcedCaptureModeFact<RasterDimensions>;\n };\n interFrameSensorOffsetsNativeSamples?: SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n >;\n reconstructionStages: readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[];\n processedImageRaster: SourcedCaptureModeFact<RasterDimensions>;\n processedImageMegapixels: number;\n dependencies: readonly CaptureModeDependency[];\n physicalSensorGeometryMutation: false;\n photositeCountInference:\n \"not-permitted-from-native-or-processed-raster\";\n finalOutputRasterOwnership:\n \"downstream-capture-output-geometry\";\n}\n\nconst COMBINATION_DOMAINS =\n new Set<CaptureModeSampleCombinationDomain>([\n \"charge-domain\",\n \"pre-conversion-analog\",\n \"post-conversion-digital\"\n ]);\n\nconst RECONSTRUCTION_STAGES =\n new Set<CaptureModeReconstructionStage>([\n \"remosaic\",\n \"pixel-shift-combination\",\n \"multi-frame-computational-combination\"\n ]);\n\nconst DEPENDENCIES = new Set<CaptureModeDependency>([\n \"color-sampling-model\",\n \"mode-specific-readout-timing\",\n \"radiometric-calibration\",\n \"inter-frame-registration\"\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 requireNonEmptyString(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveSafeIntegerValue(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a positive safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseIntegerFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<number> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value: requirePositiveSafeIntegerValue(\n record.value,\n path + \".value\"\n ),\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseRasterDimensions(\n value: unknown,\n path: string\n): RasterDimensions {\n const record = requireRecord(value, path, [\"pixelWidth\", \"pixelHeight\"]);\n const pixelWidth = requirePositiveSafeIntegerValue(\n record.pixelWidth,\n path + \".pixelWidth\"\n );\n const pixelHeight = requirePositiveSafeIntegerValue(\n record.pixelHeight,\n path + \".pixelHeight\"\n );\n const total = pixelWidth * pixelHeight;\n if (!Number.isSafeInteger(total)) {\n throw new InvalidConfigurationError(\n path + \" total sample count must be a safe integer.\"\n );\n }\n return { pixelWidth, pixelHeight };\n}\n\nfunction parseRasterFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<RasterDimensions> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value: parseRasterDimensions(\n record.value,\n path + \".value\"\n ),\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseCombinationDomainFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<CaptureModeSampleCombinationDomain> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n if (\n typeof record.value !== \"string\" ||\n !COMBINATION_DOMAINS.has(\n record.value as CaptureModeSampleCombinationDomain\n )\n ) {\n throw new InvalidConfigurationError(\n path + \".value is invalid.\"\n );\n }\n return {\n value: record.value as CaptureModeSampleCombinationDomain,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseAcquisition(\n value: unknown,\n path: string\n): CaptureModeAcquisition {\n const record = requireRecord(value, path, [\"kind\", \"frameCount\", \"minimumFrameCount\", \"maximumFrameCount\", \"evidence\"]);\n\n if (record.kind === \"single-frame\") {\n if (\n record.frameCount !== undefined ||\n record.minimumFrameCount !== undefined ||\n record.maximumFrameCount !== undefined ||\n record.evidence !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" single-frame acquisition must omit frame-count and evidence fields.\"\n );\n }\n return { kind: \"single-frame\" };\n }\n\n if (record.kind === \"fixed-multi-frame\") {\n if (\n record.minimumFrameCount !== undefined ||\n record.maximumFrameCount !== undefined ||\n record.evidence !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" fixed-multi-frame acquisition must use frameCount only.\"\n );\n }\n const frameCount = parseIntegerFact(\n record.frameCount,\n path + \".frameCount\"\n );\n if (frameCount.value < 2) {\n throw new InvalidConfigurationError(\n path +\n \".frameCount.value must be at least 2 for fixed-multi-frame acquisition.\"\n );\n }\n return {\n kind: \"fixed-multi-frame\",\n frameCount\n };\n }\n\n if (record.kind === \"variable-multi-frame\") {\n if (record.frameCount !== undefined) {\n throw new InvalidConfigurationError(\n path +\n \".frameCount must be omitted for variable-multi-frame acquisition.\"\n );\n }\n\n const evidence = parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n );\n const minimumFrameCount =\n record.minimumFrameCount === undefined\n ? undefined\n : parseIntegerFact(\n record.minimumFrameCount,\n path + \".minimumFrameCount\"\n );\n const maximumFrameCount =\n record.maximumFrameCount === undefined\n ? undefined\n : parseIntegerFact(\n record.maximumFrameCount,\n path + \".maximumFrameCount\"\n );\n\n if (\n minimumFrameCount !== undefined &&\n minimumFrameCount.value < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \".minimumFrameCount.value must be at least 2 for variable-multi-frame acquisition.\"\n );\n }\n if (\n maximumFrameCount !== undefined &&\n maximumFrameCount.value < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \".maximumFrameCount.value must be at least 2 for variable-multi-frame acquisition.\"\n );\n }\n if (\n minimumFrameCount !== undefined &&\n maximumFrameCount !== undefined &&\n minimumFrameCount.value > maximumFrameCount.value\n ) {\n throw new InvalidConfigurationError(\n path +\n \".minimumFrameCount.value must not exceed maximumFrameCount.value.\"\n );\n }\n\n return {\n kind: \"variable-multi-frame\",\n evidence,\n ...(minimumFrameCount === undefined\n ? {}\n : { minimumFrameCount }),\n ...(maximumFrameCount === undefined\n ? {}\n : { maximumFrameCount })\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parsePerFrameSampling(\n value: unknown,\n path: string\n): CaptureModePerFrameSampling {\n const record = requireRecord(value, path, [\"kind\", \"groupWidthSamples\", \"groupHeightSamples\", \"combinationDomain\", \"raster\"]);\n\n if (record.kind === \"native-effective-raster\") {\n if (\n record.groupWidthSamples !== undefined ||\n record.groupHeightSamples !== undefined ||\n record.combinationDomain !== undefined ||\n record.raster !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" native-effective-raster sampling must omit grouping/raster fields.\"\n );\n }\n return { kind: \"native-effective-raster\" };\n }\n\n if (record.kind === \"grouped-native-samples\") {\n if (record.raster !== undefined) {\n throw new InvalidConfigurationError(\n path +\n \".raster must be omitted for grouped-native-samples sampling.\"\n );\n }\n\n return {\n kind: \"grouped-native-samples\",\n groupWidthSamples: parseIntegerFact(\n record.groupWidthSamples,\n path + \".groupWidthSamples\"\n ),\n groupHeightSamples: parseIntegerFact(\n record.groupHeightSamples,\n path + \".groupHeightSamples\"\n ),\n ...(record.combinationDomain === undefined\n ? {}\n : {\n combinationDomain:\n parseCombinationDomainFact(\n record.combinationDomain,\n path + \".combinationDomain\"\n )\n })\n };\n }\n\n if (record.kind === \"declared-effective-raster\") {\n if (\n record.groupWidthSamples !== undefined ||\n record.groupHeightSamples !== undefined ||\n record.combinationDomain !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" declared-effective-raster sampling must omit grouping fields.\"\n );\n }\n\n return {\n kind: \"declared-effective-raster\",\n raster: parseRasterFact(\n record.raster,\n path + \".raster\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseOffsetsFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n if (\n !Array.isArray(record.value) ||\n record.value.length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \".value must be a non-empty array.\"\n );\n }\n\n const offsets = record.value.map((entry, index) => {\n const item = requireRecord(\n entry,\n path + \".value[\" + index + \"]\", [\"x\", \"y\"]\n );\n if (\n typeof item.x !== \"number\" ||\n !Number.isFinite(item.x) ||\n typeof item.y !== \"number\" ||\n !Number.isFinite(item.y)\n ) {\n throw new InvalidConfigurationError(\n path +\n \".value[\" +\n index +\n \"] x/y must be finite numbers.\"\n );\n }\n return {\n x: item.x,\n y: item.y\n };\n });\n\n return {\n value: offsets,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseReconstructionStages(\n value: unknown,\n path: string\n): readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n const stages = value.map((entry, index) => {\n const record = requireRecord(\n entry,\n path + \"[\" + index + \"]\", [\"value\", \"evidence\"]\n );\n if (\n typeof record.value !== \"string\" ||\n !RECONSTRUCTION_STAGES.has(\n record.value as CaptureModeReconstructionStage\n )\n ) {\n throw new InvalidConfigurationError(\n path + \"[\" + index + \"].value is invalid.\"\n );\n }\n return {\n value: record.value as CaptureModeReconstructionStage,\n evidence: parseEvidenceList(\n record.evidence,\n path + \"[\" + index + \"].evidence\"\n )\n };\n });\n\n const values = stages.map((stage) => stage.value);\n if (new Set(values).size !== values.length) {\n throw new InvalidConfigurationError(\n path + \" must not contain duplicate stages.\"\n );\n }\n\n return stages;\n}\n\nfunction parseDependencies(\n value: unknown,\n path: string\n): readonly CaptureModeDependency[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n const dependencies = value.map((entry, index) => {\n if (\n typeof entry !== \"string\" ||\n !DEPENDENCIES.has(entry as CaptureModeDependency)\n ) {\n throw new InvalidConfigurationError(\n path + \"[\" + index + \"] is invalid.\"\n );\n }\n return entry as CaptureModeDependency;\n });\n\n if (new Set(dependencies).size !== dependencies.length) {\n throw new InvalidConfigurationError(\n path + \" must not contain duplicates.\"\n );\n }\n\n return dependencies;\n}\n\nfunction parseModeDefinition(\n value: unknown,\n path: string\n): CaptureModeDefinition {\n const record = requireRecord(value, path, [\"modeId\", \"acquisition\", \"interFrameSensorOffsetsNativeSamples\", \"evidence\", \"perFrameSampling\", \"reconstructionStages\", \"processedImageRaster\", \"dependencies\"]);\n const modeId = requireNonEmptyString(\n record.modeId,\n path + \".modeId\"\n );\n const acquisition = parseAcquisition(\n record.acquisition,\n path + \".acquisition\"\n );\n const interFrameSensorOffsetsNativeSamples =\n record.interFrameSensorOffsetsNativeSamples === undefined\n ? undefined\n : parseOffsetsFact(\n record.interFrameSensorOffsetsNativeSamples,\n path + \".interFrameSensorOffsetsNativeSamples\"\n );\n\n if (\n interFrameSensorOffsetsNativeSamples !== undefined &&\n acquisition.kind !== \"fixed-multi-frame\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".interFrameSensorOffsetsNativeSamples is supported only for fixed-multi-frame acquisition.\"\n );\n }\n\n if (\n interFrameSensorOffsetsNativeSamples !== undefined &&\n acquisition.kind === \"fixed-multi-frame\" &&\n interFrameSensorOffsetsNativeSamples.value.length !==\n acquisition.frameCount.value\n ) {\n throw new InvalidConfigurationError(\n path +\n \".interFrameSensorOffsetsNativeSamples.value length must equal acquisition.frameCount.value.\"\n );\n }\n\n return {\n modeId,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n ),\n acquisition,\n perFrameSampling: parsePerFrameSampling(\n record.perFrameSampling,\n path + \".perFrameSampling\"\n ),\n ...(interFrameSensorOffsetsNativeSamples === undefined\n ? {}\n : { interFrameSensorOffsetsNativeSamples }),\n reconstructionStages:\n record.reconstructionStages === undefined\n ? []\n : parseReconstructionStages(\n record.reconstructionStages,\n path + \".reconstructionStages\"\n ),\n processedImageRaster: parseRasterFact(\n record.processedImageRaster,\n path + \".processedImageRaster\"\n ),\n dependencies:\n record.dependencies === undefined\n ? []\n : parseDependencies(\n record.dependencies,\n path + \".dependencies\"\n )\n };\n}\n\n/**\n * Parses a capture-mode profile. Sensor physics is never guessed from output\n * resolution or marketing mode names.\n *\n * The profile's parts are independent of each other: the frame sequence,\n * sampling within each frame, optional sensor shift between frames,\n * reconstruction stages, the processed image size and downstream dependencies.\n */\nexport function parseCaptureModeProfile(\n value: unknown\n): CaptureModeProfile {\n const profile = requireRecord(value, \"captureModes\", [\"schemaVersion\", \"modes\"]);\n\n if (profile.schemaVersion !== \"0.1.0\") {\n throw new InvalidConfigurationError(\n 'captureModes.schemaVersion must be \"0.1.0\".'\n );\n }\n\n if (\n !Array.isArray(profile.modes) ||\n profile.modes.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"captureModes.modes must be a non-empty array.\"\n );\n }\n\n const modes = profile.modes.map((mode, index) =>\n parseModeDefinition(\n mode,\n \"captureModes.modes[\" + index + \"]\"\n )\n );\n const ids = modes.map((mode) => mode.modeId);\n if (new Set(ids).size !== ids.length) {\n throw new InvalidConfigurationError(\n \"captureModes.modes must not contain duplicate modeId values.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n modes\n };\n}\n\nfunction validateNativeRaster(\n raster: NativeImageRaster\n): void {\n requireInputObject(raster, \"raster input\");\n requirePositiveInteger(\n \"nativeRaster.pixelWidth\",\n raster.pixelWidth\n );\n requirePositiveInteger(\n \"nativeRaster.pixelHeight\",\n raster.pixelHeight\n );\n const total =\n raster.pixelWidth * raster.pixelHeight;\n if (!Number.isSafeInteger(total)) {\n throw new InvalidScientificInputError(\n \"nativeRaster total image-sample count must be a safe integer.\"\n );\n }\n}\n\nfunction resolvePerFrameSampling(\n sampling: CaptureModePerFrameSampling,\n nativeRaster: NativeImageRaster\n): ResolvedCaptureMode[\"perFrameSampling\"] {\n if (sampling.kind === \"native-effective-raster\") {\n return {\n kind: \"native-effective-raster\",\n raster: { ...nativeRaster }\n };\n }\n\n if (sampling.kind === \"declared-effective-raster\") {\n return {\n kind: \"declared-effective-raster\",\n raster: {\n value: { ...sampling.raster.value },\n evidence: sampling.raster.evidence\n }\n };\n }\n\n const groupWidth = sampling.groupWidthSamples.value;\n const groupHeight = sampling.groupHeightSamples.value;\n\n if (\n nativeRaster.pixelWidth % groupWidth !== 0 ||\n nativeRaster.pixelHeight % groupHeight !== 0\n ) {\n throw new InvalidScientificInputError(\n \"Grouped native sampling requires nativeRaster dimensions to be exactly divisible by the declared grouping factors.\"\n );\n }\n\n return {\n kind: \"grouped-native-samples\",\n raster: {\n pixelWidth:\n nativeRaster.pixelWidth / groupWidth,\n pixelHeight:\n nativeRaster.pixelHeight / groupHeight\n },\n groupWidthSamples: sampling.groupWidthSamples,\n groupHeightSamples: sampling.groupHeightSamples,\n ...(sampling.combinationDomain === undefined\n ? {}\n : {\n combinationDomain:\n sampling.combinationDomain\n })\n };\n}\n\n/**\n * Resolves one capture mode against the selected sensor's native pixel grid.\n *\n * Resolution changes do not change the physical sensor geometry. The returned\n * processed image size is before output, and must not be used to work out crop\n * factor, field of view or the physical photosite count.\n */\nexport function resolveCaptureMode(\n input: ResolveCaptureModeInput\n): ResolvedCaptureMode {\n requireInputKeys(input, \"resolveCaptureMode\", [\"nativeRaster\", \"profile\", \"modeId\"]);\n validateNativeRaster(input.nativeRaster);\n if (\n typeof input.modeId !== \"string\" ||\n input.modeId.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n \"modeId must be a non-empty string.\"\n );\n }\n const profile = parseCaptureModeProfile(input.profile);\n\n const mode = profile.modes.find(\n (candidate) => candidate.modeId === input.modeId\n );\n if (mode === undefined) {\n throw new InvalidScientificInputError(\n \"modeId does not exist in the supplied capture-mode profile.\"\n );\n }\n\n const processedTotal =\n mode.processedImageRaster.value.pixelWidth *\n mode.processedImageRaster.value.pixelHeight;\n if (!Number.isSafeInteger(processedTotal)) {\n throw new InvalidScientificInputError(\n \"processedImageRaster total image-sample count must be a safe integer.\"\n );\n }\n\n const acquisition: ResolvedCaptureMode[\"acquisition\"] =\n mode.acquisition.kind === \"single-frame\"\n ? {\n kind: \"single-frame\",\n frameCount: 1\n }\n : mode.acquisition.kind === \"fixed-multi-frame\"\n ? {\n kind: \"fixed-multi-frame\",\n frameCount: mode.acquisition.frameCount\n }\n : {\n kind: \"variable-multi-frame\",\n evidence: mode.acquisition.evidence,\n ...(mode.acquisition.minimumFrameCount === undefined\n ? {}\n : {\n minimumFrameCount:\n mode.acquisition.minimumFrameCount\n }),\n ...(mode.acquisition.maximumFrameCount === undefined\n ? {}\n : {\n maximumFrameCount:\n mode.acquisition.maximumFrameCount\n })\n };\n\n return {\n modeId: mode.modeId,\n modeEvidence: mode.evidence,\n nativeRaster: { ...input.nativeRaster },\n nativeRasterSemantic:\n \"effective-image-sampling-grid-not-photosite-count\",\n acquisition,\n perFrameSampling: resolvePerFrameSampling(\n mode.perFrameSampling,\n input.nativeRaster\n ),\n ...(mode.interFrameSensorOffsetsNativeSamples === undefined\n ? {}\n : {\n interFrameSensorOffsetsNativeSamples:\n mode.interFrameSensorOffsetsNativeSamples\n }),\n reconstructionStages:\n mode.reconstructionStages ?? [],\n processedImageRaster: {\n value: {\n ...mode.processedImageRaster.value\n },\n evidence: mode.processedImageRaster.evidence\n },\n processedImageMegapixels:\n processedTotal / 1_000_000,\n dependencies: mode.dependencies ?? [],\n physicalSensorGeometryMutation: false,\n photositeCountInference:\n \"not-permitted-from-native-or-processed-raster\",\n finalOutputRasterOwnership:\n \"downstream-capture-output-geometry\"\n };\n}\n"]}
|
|
@@ -5,8 +5,8 @@ export interface NativeColorSamplingSiteIndex {
|
|
|
5
5
|
/**
|
|
6
6
|
* Zero-based integer site index from the native sensor's left edge.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* NativeImageRaster coordinate and does not
|
|
8
|
+
* It indexes the abstract grid of colour-sampling sites. It is not a
|
|
9
|
+
* NativeImageRaster coordinate and does not claim one site is one physical
|
|
10
10
|
* photodiode.
|
|
11
11
|
*/
|
|
12
12
|
x: number;
|
|
@@ -20,8 +20,8 @@ export interface NativeColorSamplingSiteIndex {
|
|
|
20
20
|
export interface MonochromeColorSamplingLayout {
|
|
21
21
|
kind: "monochrome";
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* A name for the measured channel only. It is not a spectral response
|
|
24
|
+
* curve, wavelength, colour primary or calibration.
|
|
25
25
|
*/
|
|
26
26
|
channelId: string;
|
|
27
27
|
}
|
|
@@ -36,28 +36,28 @@ export interface PeriodicMosaicColorSamplingLayout {
|
|
|
36
36
|
*/
|
|
37
37
|
repeatHeightSites: number;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* Channel IDs for one repeating tile, in row-major order.
|
|
40
40
|
*
|
|
41
41
|
* Length must equal repeatWidthSites × repeatHeightSites.
|
|
42
42
|
*/
|
|
43
43
|
siteChannelIds: readonly string[];
|
|
44
44
|
/**
|
|
45
|
-
* The repeat tile
|
|
45
|
+
* The repeat tile starts at native sensor site (0, 0).
|
|
46
46
|
*
|
|
47
|
-
* Active crops and
|
|
47
|
+
* Active-area crops and camera orientation must not silently reset this phase.
|
|
48
48
|
*/
|
|
49
49
|
anchor: "native-sensor-top-left-site";
|
|
50
50
|
}
|
|
51
51
|
export interface LayeredColorSamplingLayout {
|
|
52
52
|
kind: "layered";
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
55
|
-
* response, depth
|
|
54
|
+
* Names for the layers or channels only. They do not define spectral
|
|
55
|
+
* response, depth order, sampling density or alignment between layers.
|
|
56
56
|
*/
|
|
57
57
|
layerChannelIds: readonly string[];
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
59
|
+
* Layered layouts are described structurally only for now, because real
|
|
60
|
+
* layered sensors may sample each layer differently.
|
|
61
61
|
*/
|
|
62
62
|
spatialSamplingRelationship: "not-resolved";
|
|
63
63
|
}
|
|
@@ -66,9 +66,9 @@ export interface SensorColorSamplingProfile {
|
|
|
66
66
|
schemaVersion: "0.1.0";
|
|
67
67
|
profileId: string;
|
|
68
68
|
/**
|
|
69
|
-
* Evidence
|
|
69
|
+
* Evidence for this exact layout.
|
|
70
70
|
*
|
|
71
|
-
* Descriptive architecture
|
|
71
|
+
* Descriptive sensor-architecture metadata is a separate type.
|
|
72
72
|
*/
|
|
73
73
|
evidence: readonly EvidenceProvenance[];
|
|
74
74
|
coordinateSystem: SensorColorSamplingProfileCoordinateSystem;
|
|
@@ -96,38 +96,35 @@ export interface ResolvedColorSamplingSite {
|
|
|
96
96
|
repeatHeightSites: number;
|
|
97
97
|
};
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* States what this profile does not establish, for downstream code.
|
|
100
100
|
*/
|
|
101
101
|
spectralResponseEstablished: false;
|
|
102
102
|
nativeImageRasterBindingEstablished: false;
|
|
103
103
|
physicalPhotodiodeBindingEstablished: false;
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* Parses an exact
|
|
107
|
-
*
|
|
108
|
-
* manufacturer-specific family enum.
|
|
106
|
+
* Parses an exact colour-sampling layout. It is not tied to NativeImageRaster,
|
|
107
|
+
* physical photodiodes, spectral response or a manufacturer's layout name.
|
|
109
108
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
109
|
+
* Repeating mosaics use an abstract grid of native sensor sites with zero-based
|
|
110
|
+
* integer indices, origin at the top left, +X right and +Y down. The repeat
|
|
111
|
+
* pattern is fixed to this grid, so later crops or orientation changes must keep
|
|
112
|
+
* the original native site indices.
|
|
114
113
|
*
|
|
115
|
-
* Layered layouts are
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* modeled explicitly.
|
|
114
|
+
* Layered layouts are described structurally only, because real layered sensors
|
|
115
|
+
* may sample each layer at different densities or offsets. There is no per-site
|
|
116
|
+
* lookup for layered layouts until that is modelled explicitly.
|
|
119
117
|
*/
|
|
120
118
|
export declare function parseSensorColorSamplingProfile(value: unknown): SensorColorSamplingProfile;
|
|
121
119
|
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
120
|
+
* Returns which channel one native site measures, for monochrome or repeating
|
|
121
|
+
* mosaic layouts.
|
|
124
122
|
*
|
|
125
|
-
*
|
|
126
|
-
* binding must
|
|
127
|
-
*
|
|
123
|
+
* It deliberately takes no NativeImageRaster. A separate binding
|
|
124
|
+
* (capture-color-sampling-binding) must say how a capture mode's sample grid
|
|
125
|
+
* maps onto this site grid before RAW or CFA sampling can be simulated.
|
|
128
126
|
*
|
|
129
|
-
* Layered layouts
|
|
130
|
-
* not
|
|
127
|
+
* Layered layouts are rejected, because how their layers line up spatially is
|
|
128
|
+
* not defined yet.
|
|
131
129
|
*/
|
|
132
130
|
export declare function resolveColorSamplingSite(input: ResolveColorSamplingSiteInput): ResolvedColorSamplingSite;
|
|
133
|
-
//# sourceMappingURL=color-sampling.d.ts.map
|
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* crops or orientation
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* is modeled explicitly.
|
|
12
|
-
* Resolves the semantic measurement-channel assignment at one abstract native sensor
|
|
13
|
-
* color-sampling-site index for monochrome or periodic-mosaic layouts. This API intentionally has no
|
|
14
|
-
* NativeImageRaster input. A later explicit binding must establish how a selected capture mode's
|
|
15
|
-
* effective raster maps to this color-sampling-site lattice before RAW/CFA sampling can be simulated.
|
|
16
|
-
* Layered layouts fail closed because their per-layer spatial relationship is not resolved by the
|
|
17
|
-
* first structural contract.
|
|
3
|
+
* Colour-sampling layout: which colour channel each sensor site measures. Examples are monochrome,
|
|
4
|
+
* a repeating mosaic such as a Bayer CFA (colour filter array), or a layered (stacked) sensor.
|
|
5
|
+
*
|
|
6
|
+
* Sites form an abstract grid with zero-based integer indices, origin at the top left, +X right and
|
|
7
|
+
* +Y down. A site is not necessarily one physical photodiode. The mosaic's repeat pattern is fixed to
|
|
8
|
+
* this grid, so later crops or orientation changes must keep the original native site indices.
|
|
9
|
+
* Layered layouts are described structurally only, because real layered sensors may sample each layer
|
|
10
|
+
* at different densities or offsets.
|
|
18
11
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
19
12
|
* limits.
|
|
20
13
|
*/
|
|
21
14
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
22
15
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
23
16
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
24
|
-
|
|
17
|
+
import { requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
18
|
+
function requireRecord(value, path, allowedKeys) {
|
|
25
19
|
if (typeof value !== "object" ||
|
|
26
20
|
value === null ||
|
|
27
21
|
Array.isArray(value)) {
|
|
28
22
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
29
23
|
}
|
|
24
|
+
if (allowedKeys !== null)
|
|
25
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
30
26
|
return value;
|
|
31
27
|
}
|
|
32
28
|
function requireNonEmptyString(value, path) {
|
|
@@ -61,7 +57,7 @@ function parseChannelIds(value, path, options) {
|
|
|
61
57
|
return ids;
|
|
62
58
|
}
|
|
63
59
|
function parseLayout(value, path) {
|
|
64
|
-
const record = requireRecord(value, path);
|
|
60
|
+
const record = requireRecord(value, path, ["kind", "repeatWidthSites", "repeatHeightSites", "siteChannelIds", "anchor", "layerChannelIds", "spatialSamplingRelationship", "channelId"]);
|
|
65
61
|
if (record.kind === "monochrome") {
|
|
66
62
|
if (record.repeatWidthSites !== undefined ||
|
|
67
63
|
record.repeatHeightSites !== undefined ||
|
|
@@ -131,22 +127,20 @@ function parseLayout(value, path) {
|
|
|
131
127
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
132
128
|
}
|
|
133
129
|
/**
|
|
134
|
-
* Parses an exact
|
|
135
|
-
*
|
|
136
|
-
* manufacturer-specific family enum.
|
|
130
|
+
* Parses an exact colour-sampling layout. It is not tied to NativeImageRaster,
|
|
131
|
+
* physical photodiodes, spectral response or a manufacturer's layout name.
|
|
137
132
|
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
133
|
+
* Repeating mosaics use an abstract grid of native sensor sites with zero-based
|
|
134
|
+
* integer indices, origin at the top left, +X right and +Y down. The repeat
|
|
135
|
+
* pattern is fixed to this grid, so later crops or orientation changes must keep
|
|
136
|
+
* the original native site indices.
|
|
142
137
|
*
|
|
143
|
-
* Layered layouts are
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* modeled explicitly.
|
|
138
|
+
* Layered layouts are described structurally only, because real layered sensors
|
|
139
|
+
* may sample each layer at different densities or offsets. There is no per-site
|
|
140
|
+
* lookup for layered layouts until that is modelled explicitly.
|
|
147
141
|
*/
|
|
148
142
|
export function parseSensorColorSamplingProfile(value) {
|
|
149
|
-
const profile = requireRecord(value, "sensorColorSampling");
|
|
143
|
+
const profile = requireRecord(value, "sensorColorSampling", ["schemaVersion", "layout", "coordinateSystem", "profileId", "evidence"]);
|
|
150
144
|
if (profile.schemaVersion !== "0.1.0") {
|
|
151
145
|
throw new InvalidConfigurationError('sensorColorSampling.schemaVersion must be "0.1.0".');
|
|
152
146
|
}
|
|
@@ -176,21 +170,22 @@ function requireNativeSiteIndex(value, path) {
|
|
|
176
170
|
return value;
|
|
177
171
|
}
|
|
178
172
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
173
|
+
* Returns which channel one native site measures, for monochrome or repeating
|
|
174
|
+
* mosaic layouts.
|
|
181
175
|
*
|
|
182
|
-
*
|
|
183
|
-
* binding must
|
|
184
|
-
*
|
|
176
|
+
* It deliberately takes no NativeImageRaster. A separate binding
|
|
177
|
+
* (capture-color-sampling-binding) must say how a capture mode's sample grid
|
|
178
|
+
* maps onto this site grid before RAW or CFA sampling can be simulated.
|
|
185
179
|
*
|
|
186
|
-
* Layered layouts
|
|
187
|
-
* not
|
|
180
|
+
* Layered layouts are rejected, because how their layers line up spatially is
|
|
181
|
+
* not defined yet.
|
|
188
182
|
*/
|
|
189
183
|
export function resolveColorSamplingSite(input) {
|
|
184
|
+
requireInputKeys(input, "resolveColorSamplingSite", ["profile", "site"]);
|
|
190
185
|
const profile = parseSensorColorSamplingProfile(input.profile);
|
|
191
186
|
if (typeof input.site !== "object" ||
|
|
192
187
|
input.site === null) {
|
|
193
|
-
throw new
|
|
188
|
+
throw new InvalidConfigurationError("site must be an object.");
|
|
194
189
|
}
|
|
195
190
|
const x = requireNativeSiteIndex(input.site.x, "site.x");
|
|
196
191
|
const y = requireNativeSiteIndex(input.site.y, "site.y");
|