@photivra/engine 0.6.0 → 1.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/AGENTS.md +674 -0
- package/CHANGELOG.md +186 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +138 -71
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +14 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +15 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +87 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -6
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +16 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +16 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +15 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +11 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +18 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +18 -0
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +8 -0
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +14 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -1
- package/dist/sensor/capture-mode.js +13 -0
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts.map +1 -1
- package/dist/sensor/color-sampling.js +19 -0
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +14 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -1
- package/dist/sensor/exposure-window.js +14 -0
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -1
- package/dist/sensor/optical-stack.js +17 -0
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +12 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +13 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -1
- package/dist/sensor/readout-timing.js +13 -0
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -1
- package/dist/sensor/sampling-aperture.js +14 -0
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +51 -5
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +27 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +132 -0
- package/docs/ARCHITECTURE.md +134 -24
- package/docs/AUTOMATION_COORDINATION.md +2 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +80 -10
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +5 -3
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +65 -0
- package/docs/RELEASE_AUDIT.md +38 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5050 -1047
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +15 -3
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses one generic relative exposure-metering profile. Schema 0.1.0 is approximation-only and
|
|
5
|
+
* consumes relative pre-exposure linear signal. It deliberately does not claim luminance, spectral
|
|
6
|
+
* radiance, sensor-plane irradiance, or a specific manufacturer's meter calibration.
|
|
7
|
+
* Meters relative pre-exposure linear signal over the actual oriented active capture frame. The first
|
|
8
|
+
* contract is an educational/relative approximation. It is intentionally independent of final output
|
|
9
|
+
* crop, display/tone mapping, exposure compensation, and automatic exposure setting resolution.
|
|
10
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
11
|
+
*/
|
|
12
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
13
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
14
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
15
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
16
|
+
export const EXPOSURE_METERING_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
17
|
+
function requireRecord(value, path) {
|
|
18
|
+
if (typeof value !== "object" ||
|
|
19
|
+
value === null ||
|
|
20
|
+
Array.isArray(value)) {
|
|
21
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function requireNonEmptyString(value, path) {
|
|
26
|
+
if (typeof value !== "string" ||
|
|
27
|
+
value.trim().length === 0) {
|
|
28
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
29
|
+
}
|
|
30
|
+
return value.trim();
|
|
31
|
+
}
|
|
32
|
+
function requireFinite(value, path) {
|
|
33
|
+
if (typeof value !== "number" ||
|
|
34
|
+
!Number.isFinite(value)) {
|
|
35
|
+
throw new InvalidConfigurationError(path + " must be finite.");
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function requirePositiveFinite(value, path) {
|
|
40
|
+
const parsed = requireFinite(value, path);
|
|
41
|
+
if (parsed <= 0) {
|
|
42
|
+
throw new InvalidConfigurationError(path + " must be greater than zero.");
|
|
43
|
+
}
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
function requireFraction(value, path) {
|
|
47
|
+
const parsed = requireFinite(value, path);
|
|
48
|
+
if (parsed < 0 || parsed > 1) {
|
|
49
|
+
throw new InvalidConfigurationError(path +
|
|
50
|
+
" must be a finite fraction from 0 through 1.");
|
|
51
|
+
}
|
|
52
|
+
return parsed;
|
|
53
|
+
}
|
|
54
|
+
function parseUv(value, path) {
|
|
55
|
+
const record = requireRecord(value, path);
|
|
56
|
+
const u = requireFinite(record.u, path + ".u");
|
|
57
|
+
const v = requireFinite(record.v, path + ".v");
|
|
58
|
+
if (u < 0 ||
|
|
59
|
+
u > 1 ||
|
|
60
|
+
v < 0 ||
|
|
61
|
+
v > 1) {
|
|
62
|
+
throw new InvalidConfigurationError(path +
|
|
63
|
+
" coordinates must lie within [0, 1].");
|
|
64
|
+
}
|
|
65
|
+
return { u, v };
|
|
66
|
+
}
|
|
67
|
+
function parseLimitations(value, path) {
|
|
68
|
+
if (!Array.isArray(value)) {
|
|
69
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
70
|
+
}
|
|
71
|
+
const limitations = value.map((entry, index) => requireNonEmptyString(entry, path + "[" + index + "]"));
|
|
72
|
+
if (new Set(limitations).size !==
|
|
73
|
+
limitations.length) {
|
|
74
|
+
throw new InvalidConfigurationError(path + " must not contain duplicates.");
|
|
75
|
+
}
|
|
76
|
+
return limitations;
|
|
77
|
+
}
|
|
78
|
+
function parsePolicy(value, path) {
|
|
79
|
+
const record = requireRecord(value, path);
|
|
80
|
+
if (record.kind ===
|
|
81
|
+
"multi-zone-uniform") {
|
|
82
|
+
return {
|
|
83
|
+
kind: "multi-zone-uniform"
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (record.kind ===
|
|
87
|
+
"center-weighted-radial") {
|
|
88
|
+
return {
|
|
89
|
+
kind: "center-weighted-radial",
|
|
90
|
+
edgeWeight: requireFraction(record.edgeWeight, path + ".edgeWeight"),
|
|
91
|
+
exponent: requirePositiveFinite(record.exponent, path + ".exponent")
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (record.kind === "spot") {
|
|
95
|
+
const radius = requirePositiveFinite(record
|
|
96
|
+
.radiusFractionOfCaptureDiagonal, path +
|
|
97
|
+
".radiusFractionOfCaptureDiagonal");
|
|
98
|
+
if (radius > 1) {
|
|
99
|
+
throw new InvalidConfigurationError(path +
|
|
100
|
+
".radiusFractionOfCaptureDiagonal must be at most 1.");
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
kind: "spot",
|
|
104
|
+
centerOrientedCaptureUv: parseUv(record
|
|
105
|
+
.centerOrientedCaptureUv, path +
|
|
106
|
+
".centerOrientedCaptureUv"),
|
|
107
|
+
radiusFractionOfCaptureDiagonal: radius
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (record.kind ===
|
|
111
|
+
"highlight-weighted") {
|
|
112
|
+
return {
|
|
113
|
+
kind: "highlight-weighted",
|
|
114
|
+
minimumWeightFraction: requireFraction(record
|
|
115
|
+
.minimumWeightFraction, path +
|
|
116
|
+
".minimumWeightFraction"),
|
|
117
|
+
exponent: requirePositiveFinite(record.exponent, path + ".exponent")
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parses one generic relative exposure-metering profile.
|
|
124
|
+
*
|
|
125
|
+
* Schema 0.1.0 is approximation-only and consumes relative pre-exposure
|
|
126
|
+
* linear signal. It deliberately does not claim luminance, spectral radiance,
|
|
127
|
+
* sensor-plane irradiance, or a specific manufacturer's meter calibration.
|
|
128
|
+
*/
|
|
129
|
+
export function parseExposureMeteringProfile(value) {
|
|
130
|
+
const record = requireRecord(value, "exposureMeteringProfile");
|
|
131
|
+
if (record.schemaVersion !==
|
|
132
|
+
EXPOSURE_METERING_PROFILE_SCHEMA_VERSION) {
|
|
133
|
+
throw new InvalidConfigurationError('exposureMeteringProfile.schemaVersion must be "' +
|
|
134
|
+
EXPOSURE_METERING_PROFILE_SCHEMA_VERSION +
|
|
135
|
+
'".');
|
|
136
|
+
}
|
|
137
|
+
if (record.scientificStatus !==
|
|
138
|
+
"approximation") {
|
|
139
|
+
throw new InvalidConfigurationError('exposureMeteringProfile.scientificStatus must be "approximation" in schema 0.1.0.');
|
|
140
|
+
}
|
|
141
|
+
if (record.inputDomain !==
|
|
142
|
+
"relative-pre-exposure-linear-signal") {
|
|
143
|
+
throw new InvalidConfigurationError('exposureMeteringProfile.inputDomain must be "relative-pre-exposure-linear-signal".');
|
|
144
|
+
}
|
|
145
|
+
if (record.captureRegion !==
|
|
146
|
+
"oriented-active-capture") {
|
|
147
|
+
throw new InvalidConfigurationError('exposureMeteringProfile.captureRegion must be "oriented-active-capture".');
|
|
148
|
+
}
|
|
149
|
+
const target = requireRecord(record.target, "exposureMeteringProfile.target");
|
|
150
|
+
if (target.kind !==
|
|
151
|
+
"relative-signal-reference") {
|
|
152
|
+
throw new InvalidConfigurationError('exposureMeteringProfile.target.kind must be "relative-signal-reference".');
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
schemaVersion: EXPOSURE_METERING_PROFILE_SCHEMA_VERSION,
|
|
156
|
+
profileId: requireNonEmptyString(record.profileId, "exposureMeteringProfile.profileId"),
|
|
157
|
+
scientificStatus: "approximation",
|
|
158
|
+
inputDomain: "relative-pre-exposure-linear-signal",
|
|
159
|
+
captureRegion: "oriented-active-capture",
|
|
160
|
+
policy: parsePolicy(record.policy, "exposureMeteringProfile.policy"),
|
|
161
|
+
target: {
|
|
162
|
+
kind: "relative-signal-reference",
|
|
163
|
+
targetRelativeSignal: requirePositiveFinite(target.targetRelativeSignal, "exposureMeteringProfile.target.targetRelativeSignal"),
|
|
164
|
+
evidence: parseEvidenceList(target.evidence, "exposureMeteringProfile.target.evidence")
|
|
165
|
+
},
|
|
166
|
+
evidence: parseEvidenceList(record.evidence, "exposureMeteringProfile.evidence"),
|
|
167
|
+
limitations: parseLimitations(record.limitations, "exposureMeteringProfile.limitations")
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function requireInputString(value, path) {
|
|
171
|
+
if (typeof value !== "string" ||
|
|
172
|
+
value.trim().length === 0) {
|
|
173
|
+
throw new InvalidScientificInputError(path + " must be a non-empty string.");
|
|
174
|
+
}
|
|
175
|
+
return value.trim();
|
|
176
|
+
}
|
|
177
|
+
function requireInputFinite(value, path) {
|
|
178
|
+
if (typeof value !== "number" ||
|
|
179
|
+
!Number.isFinite(value)) {
|
|
180
|
+
throw new InvalidScientificInputError(path + " must be finite.");
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
function requireInputPositiveFinite(value, path) {
|
|
185
|
+
const parsed = requireInputFinite(value, path);
|
|
186
|
+
if (parsed <= 0) {
|
|
187
|
+
throw new InvalidScientificInputError(path + " must be greater than zero.");
|
|
188
|
+
}
|
|
189
|
+
return parsed;
|
|
190
|
+
}
|
|
191
|
+
function requireInputNonNegativeFinite(value, path) {
|
|
192
|
+
const parsed = requireInputFinite(value, path);
|
|
193
|
+
if (parsed < 0) {
|
|
194
|
+
throw new InvalidScientificInputError(path +
|
|
195
|
+
" must be greater than or equal to zero.");
|
|
196
|
+
}
|
|
197
|
+
return parsed;
|
|
198
|
+
}
|
|
199
|
+
function validateSampleUv(uv, path) {
|
|
200
|
+
const u = requireInputFinite(uv.u, path + ".u");
|
|
201
|
+
const v = requireInputFinite(uv.v, path + ".v");
|
|
202
|
+
if (u < 0 ||
|
|
203
|
+
u > 1 ||
|
|
204
|
+
v < 0 ||
|
|
205
|
+
v > 1) {
|
|
206
|
+
throw new InvalidScientificInputError(path +
|
|
207
|
+
" coordinates must lie within [0, 1].");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function validateCaptureGeometry(geometry) {
|
|
211
|
+
const width = requireInputPositiveFinite(geometry.orientedCapture
|
|
212
|
+
.imagingArea.widthMm, "sampleSet.captureGeometry.orientedCapture.imagingArea.widthMm");
|
|
213
|
+
const height = requireInputPositiveFinite(geometry.orientedCapture
|
|
214
|
+
.imagingArea.heightMm, "sampleSet.captureGeometry.orientedCapture.imagingArea.heightMm");
|
|
215
|
+
const diagonal = Math.hypot(width, height);
|
|
216
|
+
if (!Number.isFinite(diagonal)) {
|
|
217
|
+
throw new InvalidScientificInputError("sampleSet.captureGeometry oriented capture diagonal must remain finite.");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function validateProcessingState(sampleSet) {
|
|
221
|
+
const state = sampleSet.processingState;
|
|
222
|
+
if (state.exposureSettingsApplied !==
|
|
223
|
+
false ||
|
|
224
|
+
state.whiteBalanceApplied !==
|
|
225
|
+
false ||
|
|
226
|
+
state.toneMappingApplied !==
|
|
227
|
+
false ||
|
|
228
|
+
state.displayGammaApplied !==
|
|
229
|
+
false ||
|
|
230
|
+
state.sharpeningApplied !==
|
|
231
|
+
false) {
|
|
232
|
+
throw new InvalidScientificInputError("Relative exposure metering requires pre-exposure linear samples before exposure settings, white balance, tone mapping, display gamma, and sharpening.");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function physicalNormalizedDistanceFromCenter(uv, widthMm, heightMm) {
|
|
236
|
+
const x = (uv.u - 0.5) * widthMm;
|
|
237
|
+
const y = (uv.v - 0.5) * heightMm;
|
|
238
|
+
const halfDiagonal = Math.hypot(widthMm, heightMm) / 2;
|
|
239
|
+
return Math.hypot(x, y) /
|
|
240
|
+
halfDiagonal;
|
|
241
|
+
}
|
|
242
|
+
function physicalDistanceFractionOfDiagonal(a, b, widthMm, heightMm) {
|
|
243
|
+
const dx = (a.u - b.u) * widthMm;
|
|
244
|
+
const dy = (a.v - b.v) * heightMm;
|
|
245
|
+
const diagonal = Math.hypot(widthMm, heightMm);
|
|
246
|
+
return Math.hypot(dx, dy) /
|
|
247
|
+
diagonal;
|
|
248
|
+
}
|
|
249
|
+
function policyWeight(policy, sample, widthMm, heightMm, maximumSignal) {
|
|
250
|
+
if (policy.kind ===
|
|
251
|
+
"multi-zone-uniform") {
|
|
252
|
+
return 1;
|
|
253
|
+
}
|
|
254
|
+
if (policy.kind ===
|
|
255
|
+
"center-weighted-radial") {
|
|
256
|
+
const radialPhase = Math.min(1, physicalNormalizedDistanceFromCenter(sample
|
|
257
|
+
.positionOrientedCaptureUv, widthMm, heightMm));
|
|
258
|
+
return (policy.edgeWeight +
|
|
259
|
+
(1 - policy.edgeWeight) *
|
|
260
|
+
Math.pow(1 - radialPhase, policy.exponent));
|
|
261
|
+
}
|
|
262
|
+
if (policy.kind === "spot") {
|
|
263
|
+
const distance = physicalDistanceFractionOfDiagonal(sample
|
|
264
|
+
.positionOrientedCaptureUv, policy
|
|
265
|
+
.centerOrientedCaptureUv, widthMm, heightMm);
|
|
266
|
+
return distance <=
|
|
267
|
+
policy
|
|
268
|
+
.radiusFractionOfCaptureDiagonal
|
|
269
|
+
? 1
|
|
270
|
+
: 0;
|
|
271
|
+
}
|
|
272
|
+
if (maximumSignal <= 0) {
|
|
273
|
+
return policy
|
|
274
|
+
.minimumWeightFraction;
|
|
275
|
+
}
|
|
276
|
+
const normalizedHighlight = sample.relativeLinearSignal /
|
|
277
|
+
maximumSignal;
|
|
278
|
+
return (policy.minimumWeightFraction +
|
|
279
|
+
(1 -
|
|
280
|
+
policy.minimumWeightFraction) *
|
|
281
|
+
Math.pow(normalizedHighlight, policy.exponent));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Meters relative pre-exposure linear signal over the actual oriented active
|
|
285
|
+
* capture frame.
|
|
286
|
+
*
|
|
287
|
+
* The first contract is an educational/relative approximation. It is
|
|
288
|
+
* intentionally independent of final output crop, display/tone mapping,
|
|
289
|
+
* exposure compensation, and automatic exposure setting resolution.
|
|
290
|
+
*/
|
|
291
|
+
export function meterRelativeExposure(input) {
|
|
292
|
+
const profile = parseExposureMeteringProfile(input.profile);
|
|
293
|
+
const sampleSet = input.sampleSet;
|
|
294
|
+
requireInputString(sampleSet.measurementId, "sampleSet.measurementId");
|
|
295
|
+
requireInputString(sampleSet.sceneStateId, "sampleSet.sceneStateId");
|
|
296
|
+
if (sampleSet.inputDomain !==
|
|
297
|
+
profile.inputDomain) {
|
|
298
|
+
throw new InvalidScientificInputError("sampleSet.inputDomain must match the metering profile.");
|
|
299
|
+
}
|
|
300
|
+
if (sampleSet.captureRegion !==
|
|
301
|
+
profile.captureRegion) {
|
|
302
|
+
throw new InvalidScientificInputError("sampleSet.captureRegion must match the metering profile.");
|
|
303
|
+
}
|
|
304
|
+
validateCaptureGeometry(sampleSet.captureGeometry);
|
|
305
|
+
validateProcessingState(sampleSet);
|
|
306
|
+
if (!Array.isArray(sampleSet.samples) ||
|
|
307
|
+
sampleSet.samples.length === 0) {
|
|
308
|
+
throw new InvalidScientificInputError("sampleSet.samples must be a non-empty array.");
|
|
309
|
+
}
|
|
310
|
+
const sampleIds = [];
|
|
311
|
+
let maximumSignal = 0;
|
|
312
|
+
for (let index = 0; index < sampleSet.samples.length; index += 1) {
|
|
313
|
+
const sample = sampleSet.samples[index];
|
|
314
|
+
const path = "sampleSet.samples[" +
|
|
315
|
+
index +
|
|
316
|
+
"]";
|
|
317
|
+
sampleIds.push(requireInputString(sample.sampleId, path + ".sampleId"));
|
|
318
|
+
validateSampleUv(sample
|
|
319
|
+
.positionOrientedCaptureUv, path +
|
|
320
|
+
".positionOrientedCaptureUv");
|
|
321
|
+
const signal = requireInputNonNegativeFinite(sample.relativeLinearSignal, path +
|
|
322
|
+
".relativeLinearSignal");
|
|
323
|
+
requireInputPositiveFinite(sample.areaWeight, path + ".areaWeight");
|
|
324
|
+
maximumSignal = Math.max(maximumSignal, signal);
|
|
325
|
+
}
|
|
326
|
+
if (new Set(sampleIds).size !==
|
|
327
|
+
sampleIds.length) {
|
|
328
|
+
throw new InvalidScientificInputError("sampleSet.samples[].sampleId must not contain duplicates.");
|
|
329
|
+
}
|
|
330
|
+
const widthMm = sampleSet.captureGeometry
|
|
331
|
+
.orientedCapture.imagingArea
|
|
332
|
+
.widthMm;
|
|
333
|
+
const heightMm = sampleSet.captureGeometry
|
|
334
|
+
.orientedCapture.imagingArea
|
|
335
|
+
.heightMm;
|
|
336
|
+
let weightedSignal = 0;
|
|
337
|
+
let weightSum = 0;
|
|
338
|
+
let selectedSampleCount = 0;
|
|
339
|
+
for (const sample of sampleSet.samples) {
|
|
340
|
+
const policyMultiplier = policyWeight(profile.policy, sample, widthMm, heightMm, maximumSignal);
|
|
341
|
+
if (policyMultiplier <= 0) {
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
const weight = sample.areaWeight *
|
|
345
|
+
policyMultiplier;
|
|
346
|
+
weightedSignal +=
|
|
347
|
+
sample.relativeLinearSignal *
|
|
348
|
+
weight;
|
|
349
|
+
weightSum += weight;
|
|
350
|
+
selectedSampleCount += 1;
|
|
351
|
+
}
|
|
352
|
+
if (!Number.isFinite(weightedSignal) ||
|
|
353
|
+
!Number.isFinite(weightSum)) {
|
|
354
|
+
throw new InvalidScientificInputError("Metering weighted sums must remain finite.");
|
|
355
|
+
}
|
|
356
|
+
if (weightSum <= 0) {
|
|
357
|
+
throw new InvalidScientificInputError("Metering policy selected no samples with positive weight.");
|
|
358
|
+
}
|
|
359
|
+
const meteredRelativeSignal = weightedSignal / weightSum;
|
|
360
|
+
if (!Number.isFinite(meteredRelativeSignal) ||
|
|
361
|
+
meteredRelativeSignal < 0) {
|
|
362
|
+
throw new InvalidScientificInputError("Metered relative signal must remain finite and non-negative.");
|
|
363
|
+
}
|
|
364
|
+
const base = {
|
|
365
|
+
measurementId: sampleSet.measurementId,
|
|
366
|
+
sceneStateId: sampleSet.sceneStateId,
|
|
367
|
+
profileId: profile.profileId,
|
|
368
|
+
scientificStatus: "approximation",
|
|
369
|
+
inputDomain: "relative-pre-exposure-linear-signal",
|
|
370
|
+
captureRegion: "oriented-active-capture",
|
|
371
|
+
orientation: sampleSet.captureGeometry
|
|
372
|
+
.orientedCapture.orientation,
|
|
373
|
+
activeCaptureImagingAreaMm: {
|
|
374
|
+
width: widthMm,
|
|
375
|
+
height: heightMm
|
|
376
|
+
},
|
|
377
|
+
policyKind: profile.policy.kind,
|
|
378
|
+
targetRelativeSignal: profile.target
|
|
379
|
+
.targetRelativeSignal,
|
|
380
|
+
meteredRelativeSignal,
|
|
381
|
+
totalSampleCount: sampleSet.samples.length,
|
|
382
|
+
selectedSampleCount,
|
|
383
|
+
normalizedWeightSum: 1,
|
|
384
|
+
outputCropUsedForMetering: false,
|
|
385
|
+
exposureCompensationApplied: false,
|
|
386
|
+
finalToneMappingUsed: false,
|
|
387
|
+
displayGammaUsed: false,
|
|
388
|
+
calibratedLuminanceClaimAuthorized: false,
|
|
389
|
+
calibratedSceneRadianceClaimAuthorized: false,
|
|
390
|
+
automaticExposureResolved: false,
|
|
391
|
+
resultReusableForAeLock: true
|
|
392
|
+
};
|
|
393
|
+
const value = meteredRelativeSignal === 0
|
|
394
|
+
? {
|
|
395
|
+
...base,
|
|
396
|
+
status: "no-signal",
|
|
397
|
+
requiredExposureScaleResolved: false,
|
|
398
|
+
exposureOffsetStopsResolved: false
|
|
399
|
+
}
|
|
400
|
+
: {
|
|
401
|
+
...base,
|
|
402
|
+
status: "resolved",
|
|
403
|
+
requiredExposureScaleToTarget: profile.target
|
|
404
|
+
.targetRelativeSignal /
|
|
405
|
+
meteredRelativeSignal,
|
|
406
|
+
exposureOffsetStopsToTarget: Math.log2(profile.target
|
|
407
|
+
.targetRelativeSignal /
|
|
408
|
+
meteredRelativeSignal)
|
|
409
|
+
};
|
|
410
|
+
return approximationResult(value, "relative-pre-exposure-metering", "1.0.0", [
|
|
411
|
+
"Input samples are relative pre-exposure linear signal, not calibrated luminance, scene spectral radiance, sensor-plane irradiance, or final rendered output.",
|
|
412
|
+
"Sample areaWeight is supplied by the producer and is assumed to represent the active capture frame consistently.",
|
|
413
|
+
"Metering coordinates are normalized over the physically oriented active capture frame, not the final output crop or CSS/display box.",
|
|
414
|
+
"Multi-zone, center-weighted, spot, and highlight-weighted policies are generic explicit approximations and do not claim to reproduce a specific commercial camera.",
|
|
415
|
+
"The declared relative target is profile policy, not a universal 18% gray truth.",
|
|
416
|
+
"Exposure compensation is not applied by the meter.",
|
|
417
|
+
"Automatic aperture, shutter, and ISO resolution remains downstream.",
|
|
418
|
+
"White balance, tone mapping, display gamma, sharpening, and final output crop do not participate in this metering calculation.",
|
|
419
|
+
"A no-signal result does not fabricate an infinite exposure correction."
|
|
420
|
+
]);
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=metering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering.js","sourceRoot":"","sources":["../../src/exposure/metering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
2
|
+
export declare const EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION: "0.1.0";
|
|
3
|
+
export interface ExposureProgramLineNode {
|
|
4
|
+
nodeId: string;
|
|
5
|
+
opticalExposureStopsFromReference: number;
|
|
6
|
+
aperture: number;
|
|
7
|
+
shutterSeconds: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ExposureProgramLineProfile {
|
|
10
|
+
schemaVersion: typeof EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION;
|
|
11
|
+
profileId: string;
|
|
12
|
+
profileVersion: string;
|
|
13
|
+
scientificStatus: "approximation";
|
|
14
|
+
policyKind: "generic-program-line";
|
|
15
|
+
interpolation: "log2-aperture-shutter";
|
|
16
|
+
evidence: readonly EvidenceProvenance[];
|
|
17
|
+
limitations: readonly string[];
|
|
18
|
+
nodes: readonly ExposureProgramLineNode[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses a generic educational/product exposure program line.
|
|
22
|
+
*
|
|
23
|
+
* A program line is control policy, not physics. Nodes declare desired
|
|
24
|
+
* aperture/shutter pairs at explicit optical-exposure stops relative to the
|
|
25
|
+
* resolver's reference exposure. Resolution later verifies that every node is
|
|
26
|
+
* physically consistent with that reference and current equipment capability.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseExposureProgramLineProfile(value: unknown): ExposureProgramLineProfile;
|
|
29
|
+
//# sourceMappingURL=program-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program-line.d.ts","sourceRoot":"","sources":["../../src/exposure/program-line.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAIxC,eAAO,MAAM,oCAAoC,EAC/C,OAAgB,CAAC;AAEnB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EACX,OAAO,oCAAoC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,eAAe,CAAC;IAClC,UAAU,EACR,sBAAsB,CAAC;IACzB,aAAa,EACX,uBAAuB,CAAC;IAC1B,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,KAAK,EACH,SAAS,uBAAuB,EAAE,CAAC;CACtC;AA2FD;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,0BAA0B,CA0I5B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses a generic educational/product exposure program line. A program line is control policy, not
|
|
5
|
+
* physics. Nodes declare desired aperture/shutter pairs at explicit optical-exposure stops relative to
|
|
6
|
+
* the resolver's reference exposure. Resolution later verifies that every node is physically
|
|
7
|
+
* consistent with that reference and current equipment capability.
|
|
8
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
9
|
+
*/
|
|
10
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
11
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
12
|
+
export const EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION = "0.1.0";
|
|
13
|
+
function requireRecord(value, path) {
|
|
14
|
+
if (typeof value !== "object" ||
|
|
15
|
+
value === null ||
|
|
16
|
+
Array.isArray(value)) {
|
|
17
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function requireNonEmptyString(value, path) {
|
|
22
|
+
if (typeof value !== "string" ||
|
|
23
|
+
value.trim().length === 0) {
|
|
24
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
25
|
+
}
|
|
26
|
+
return value.trim();
|
|
27
|
+
}
|
|
28
|
+
function requireFinite(value, path) {
|
|
29
|
+
if (typeof value !== "number" ||
|
|
30
|
+
!Number.isFinite(value)) {
|
|
31
|
+
throw new InvalidConfigurationError(path + " must be finite.");
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function requirePositiveFinite(value, path) {
|
|
36
|
+
const parsed = requireFinite(value, path);
|
|
37
|
+
if (parsed <= 0) {
|
|
38
|
+
throw new InvalidConfigurationError(path +
|
|
39
|
+
" must be greater than zero.");
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
function parseLimitations(value, path) {
|
|
44
|
+
if (!Array.isArray(value)) {
|
|
45
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
46
|
+
}
|
|
47
|
+
const parsed = value.map((entry, index) => requireNonEmptyString(entry, path + "[" + index + "]"));
|
|
48
|
+
if (new Set(parsed).size !==
|
|
49
|
+
parsed.length) {
|
|
50
|
+
throw new InvalidConfigurationError(path +
|
|
51
|
+
" must not contain duplicates.");
|
|
52
|
+
}
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parses a generic educational/product exposure program line.
|
|
57
|
+
*
|
|
58
|
+
* A program line is control policy, not physics. Nodes declare desired
|
|
59
|
+
* aperture/shutter pairs at explicit optical-exposure stops relative to the
|
|
60
|
+
* resolver's reference exposure. Resolution later verifies that every node is
|
|
61
|
+
* physically consistent with that reference and current equipment capability.
|
|
62
|
+
*/
|
|
63
|
+
export function parseExposureProgramLineProfile(value) {
|
|
64
|
+
const record = requireRecord(value, "exposureProgramLineProfile");
|
|
65
|
+
if (record.schemaVersion !==
|
|
66
|
+
EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION) {
|
|
67
|
+
throw new InvalidConfigurationError('exposureProgramLineProfile.schemaVersion must be "' +
|
|
68
|
+
EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION +
|
|
69
|
+
'".');
|
|
70
|
+
}
|
|
71
|
+
if (record.scientificStatus !==
|
|
72
|
+
"approximation") {
|
|
73
|
+
throw new InvalidConfigurationError('exposureProgramLineProfile.scientificStatus must be "approximation".');
|
|
74
|
+
}
|
|
75
|
+
if (record.policyKind !==
|
|
76
|
+
"generic-program-line") {
|
|
77
|
+
throw new InvalidConfigurationError('exposureProgramLineProfile.policyKind must be "generic-program-line".');
|
|
78
|
+
}
|
|
79
|
+
if (record.interpolation !==
|
|
80
|
+
"log2-aperture-shutter") {
|
|
81
|
+
throw new InvalidConfigurationError('exposureProgramLineProfile.interpolation must be "log2-aperture-shutter".');
|
|
82
|
+
}
|
|
83
|
+
if (!Array.isArray(record.nodes) ||
|
|
84
|
+
record.nodes.length < 2) {
|
|
85
|
+
throw new InvalidConfigurationError("exposureProgramLineProfile.nodes must contain at least two nodes.");
|
|
86
|
+
}
|
|
87
|
+
let previousStops = Number.NEGATIVE_INFINITY;
|
|
88
|
+
const ids = [];
|
|
89
|
+
const nodes = record.nodes.map((entry, index) => {
|
|
90
|
+
const path = "exposureProgramLineProfile.nodes[" +
|
|
91
|
+
index +
|
|
92
|
+
"]";
|
|
93
|
+
const node = requireRecord(entry, path);
|
|
94
|
+
const nodeId = requireNonEmptyString(node.nodeId, path + ".nodeId");
|
|
95
|
+
const stops = requireFinite(node
|
|
96
|
+
.opticalExposureStopsFromReference, path +
|
|
97
|
+
".opticalExposureStopsFromReference");
|
|
98
|
+
if (stops <= previousStops) {
|
|
99
|
+
throw new InvalidConfigurationError("exposureProgramLineProfile.nodes opticalExposureStopsFromReference must be strictly increasing.");
|
|
100
|
+
}
|
|
101
|
+
previousStops = stops;
|
|
102
|
+
ids.push(nodeId);
|
|
103
|
+
return {
|
|
104
|
+
nodeId,
|
|
105
|
+
opticalExposureStopsFromReference: stops,
|
|
106
|
+
aperture: requirePositiveFinite(node.aperture, path + ".aperture"),
|
|
107
|
+
shutterSeconds: requirePositiveFinite(node.shutterSeconds, path +
|
|
108
|
+
".shutterSeconds")
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
if (new Set(ids).size !== ids.length) {
|
|
112
|
+
throw new InvalidConfigurationError("exposureProgramLineProfile.nodes[].nodeId must not contain duplicates.");
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
schemaVersion: EXPOSURE_PROGRAM_LINE_SCHEMA_VERSION,
|
|
116
|
+
profileId: requireNonEmptyString(record.profileId, "exposureProgramLineProfile.profileId"),
|
|
117
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "exposureProgramLineProfile.profileVersion"),
|
|
118
|
+
scientificStatus: "approximation",
|
|
119
|
+
policyKind: "generic-program-line",
|
|
120
|
+
interpolation: "log2-aperture-shutter",
|
|
121
|
+
evidence: parseEvidenceList(record.evidence, "exposureProgramLineProfile.evidence"),
|
|
122
|
+
limitations: parseLimitations(record.limitations, "exposureProgramLineProfile.limitations"),
|
|
123
|
+
nodes
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=program-line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program-line.js","sourceRoot":"","sources":["../../src/exposure/program-line.ts"],"names":[],"mappings":"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"}
|