@photivra/engine 0.6.0 → 1.0.1
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 +191 -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 +139 -72
- 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 +9 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +10 -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 +139 -3
- 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 +66 -0
- package/docs/RELEASE_1_0_1.md +61 -0
- package/docs/RELEASE_AUDIT.md +39 -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,72 @@
|
|
|
1
|
+
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
2
|
+
import type { ResolvedCaptureGeometry } from "../output/capture-geometry.js";
|
|
3
|
+
import { assessSceneMaterialResponseFidelity, type SceneMaterialResponseProfile, type SceneRadianceProviderProfile } from "../schema/scene-radiance.js";
|
|
4
|
+
import type { SceneIlluminationProfile } from "../schema/illumination.js";
|
|
5
|
+
import type { SceneIlluminationTemporalProfile } from "../schema/illumination-temporal.js";
|
|
6
|
+
import type { ExposureMeteringSampleSet, ExposureMeteringZoneSample } from "./metering.js";
|
|
7
|
+
export declare const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION: "0.1.0";
|
|
8
|
+
export interface SceneRadianceMeteringDerivationProfile {
|
|
9
|
+
schemaVersion: typeof SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION;
|
|
10
|
+
derivationId: string;
|
|
11
|
+
scientificStatus: "approximation";
|
|
12
|
+
method: "renderer-provided-pre-exposure-relative-reduction";
|
|
13
|
+
spectralWeighting: "not-calibrated";
|
|
14
|
+
evidence: readonly EvidenceProvenance[];
|
|
15
|
+
limitation: string;
|
|
16
|
+
}
|
|
17
|
+
export type SceneRadianceMeteringTemporalContext = {
|
|
18
|
+
kind: "time-invariant";
|
|
19
|
+
} | {
|
|
20
|
+
kind: "registered-time-varying";
|
|
21
|
+
illuminationTemporalProfileId: string;
|
|
22
|
+
timeReference: "first-opening-boundary-phase";
|
|
23
|
+
captureTimeSecondsFromReference: number;
|
|
24
|
+
};
|
|
25
|
+
export interface SceneRadianceMeteringSourceContext {
|
|
26
|
+
kind: "scene-radiance-provider-derived-relative";
|
|
27
|
+
sceneId: string;
|
|
28
|
+
sceneStateId: string;
|
|
29
|
+
providerProfileId: string;
|
|
30
|
+
illuminationProfileId: string;
|
|
31
|
+
materialResponseProfileId: string;
|
|
32
|
+
derivationProfileId: string;
|
|
33
|
+
providerScientificStatus: SceneRadianceProviderProfile["scientificStatus"];
|
|
34
|
+
materialResponseFidelity: ReturnType<typeof assessSceneMaterialResponseFidelity>;
|
|
35
|
+
temporal: SceneRadianceMeteringTemporalContext;
|
|
36
|
+
spectralReductionCalibrated: false;
|
|
37
|
+
calibratedLuminanceClaimAuthorized: false;
|
|
38
|
+
calibratedSceneRadianceClaimAuthorized: false;
|
|
39
|
+
}
|
|
40
|
+
export interface SceneRadianceDerivedExposureMeteringSampleSet extends ExposureMeteringSampleSet {
|
|
41
|
+
sourceContext: SceneRadianceMeteringSourceContext;
|
|
42
|
+
}
|
|
43
|
+
export interface CreateSceneRadianceDerivedExposureMeteringSampleSetInput {
|
|
44
|
+
measurementId: string;
|
|
45
|
+
sceneStateId: string;
|
|
46
|
+
providerProfile: SceneRadianceProviderProfile;
|
|
47
|
+
illuminationProfile: SceneIlluminationProfile;
|
|
48
|
+
materialResponseProfile: SceneMaterialResponseProfile;
|
|
49
|
+
illuminationTemporalProfile?: SceneIlluminationTemporalProfile;
|
|
50
|
+
captureTimeSecondsFromReference?: number;
|
|
51
|
+
captureGeometry: ResolvedCaptureGeometry;
|
|
52
|
+
derivationProfile: SceneRadianceMeteringDerivationProfile;
|
|
53
|
+
samples: readonly ExposureMeteringZoneSample[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parses the declared approximation used to reduce renderer/provider scene
|
|
57
|
+
* information into the scalar relative-linear domain consumed by metering.
|
|
58
|
+
*
|
|
59
|
+
* This profile explicitly does not authorize a calibrated luminance or
|
|
60
|
+
* spectral-to-photometric conversion claim.
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseSceneRadianceMeteringDerivationProfile(value: unknown): SceneRadianceMeteringDerivationProfile;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a relative pre-exposure meter sample set bound to one validated #85
|
|
65
|
+
* provider context.
|
|
66
|
+
*
|
|
67
|
+
* The caller/renderer still supplies the scalar relative samples. This bridge
|
|
68
|
+
* validates identity and timing semantics only; it does not convert spectral
|
|
69
|
+
* radiance into luminance or define a calibrated meter spectral response.
|
|
70
|
+
*/
|
|
71
|
+
export declare function createSceneRadianceDerivedExposureMeteringSampleSet(input: CreateSceneRadianceDerivedExposureMeteringSampleSetInput): SceneRadianceDerivedExposureMeteringSampleSet;
|
|
72
|
+
//# sourceMappingURL=metering-scene-radiance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering-scene-radiance.d.ts","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mCAAmC,EACnC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,gCAAgC,EACjC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,iDAAiD,EAC5D,OAAgB,CAAC;AAEnB,MAAM,WAAW,sCAAsC;IACrD,aAAa,EACX,OAAO,iDAAiD,CAAC;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,eAAe,CAAC;IAClC,MAAM,EACJ,mDAAmD,CAAC;IACtD,iBAAiB,EACf,gBAAgB,CAAC;IACnB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oCAAoC,GAC5C;IACE,IAAI,EAAE,gBAAgB,CAAC;CACxB,GACD;IACE,IAAI,EACF,yBAAyB,CAAC;IAC5B,6BAA6B,EAC3B,MAAM,CAAC;IACT,aAAa,EACX,8BAA8B,CAAC;IACjC,+BAA+B,EAC7B,MAAM,CAAC;CACV,CAAC;AAEN,MAAM,WAAW,kCAAkC;IACjD,IAAI,EACF,0CAA0C,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EACtB,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;IACnD,wBAAwB,EACtB,UAAU,CACR,OAAO,mCAAmC,CAC3C,CAAC;IACJ,QAAQ,EACN,oCAAoC,CAAC;IACvC,2BAA2B,EAAE,KAAK,CAAC;IACnC,kCAAkC,EAChC,KAAK,CAAC;IACR,sCAAsC,EACpC,KAAK,CAAC;CACT;AAED,MAAM,WAAW,6CACf,SAAQ,yBAAyB;IACjC,aAAa,EACX,kCAAkC,CAAC;CACtC;AAED,MAAM,WAAW,wDAAwD;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EACb,4BAA4B,CAAC;IAC/B,mBAAmB,EACjB,wBAAwB,CAAC;IAC3B,uBAAuB,EACrB,4BAA4B,CAAC;IAC/B,2BAA2B,CAAC,EAC1B,gCAAgC,CAAC;IACnC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,eAAe,EACb,uBAAuB,CAAC;IAC1B,iBAAiB,EACf,sCAAsC,CAAC;IACzC,OAAO,EACL,SAAS,0BAA0B,EAAE,CAAC;CACzC;AAgDD;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,OAAO,GACb,sCAAsC,CAgExC;AAgKD;;;;;;;GAOG;AACH,wBAAgB,mDAAmD,CACjE,KAAK,EACH,wDAAwD,GACzD,6CAA6C,CA0G/C"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses the declared approximation used to reduce renderer/provider scene information into the scalar
|
|
5
|
+
* relative-linear domain consumed by metering. This profile explicitly does not authorize a calibrated
|
|
6
|
+
* luminance or spectral-to-photometric conversion claim.
|
|
7
|
+
* Creates a relative pre-exposure meter sample set bound to one validated #85 provider context. The
|
|
8
|
+
* caller/renderer still supplies the scalar relative samples. This bridge validates identity and
|
|
9
|
+
* timing semantics only; it does not convert spectral radiance into luminance or define a calibrated
|
|
10
|
+
* meter spectral response.
|
|
11
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
12
|
+
*/
|
|
13
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
14
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
15
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
16
|
+
import { assessSceneMaterialResponseFidelity } from "../schema/scene-radiance.js";
|
|
17
|
+
export const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION = "0.1.0";
|
|
18
|
+
function requireRecord(value, path) {
|
|
19
|
+
if (typeof value !== "object" ||
|
|
20
|
+
value === null ||
|
|
21
|
+
Array.isArray(value)) {
|
|
22
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function requireNonEmptyString(value, path) {
|
|
27
|
+
if (typeof value !== "string" ||
|
|
28
|
+
value.trim().length === 0) {
|
|
29
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
30
|
+
}
|
|
31
|
+
return value.trim();
|
|
32
|
+
}
|
|
33
|
+
function requireFinite(value, path) {
|
|
34
|
+
if (typeof value !== "number" ||
|
|
35
|
+
!Number.isFinite(value)) {
|
|
36
|
+
throw new InvalidScientificInputError(path + " must be finite.");
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parses the declared approximation used to reduce renderer/provider scene
|
|
42
|
+
* information into the scalar relative-linear domain consumed by metering.
|
|
43
|
+
*
|
|
44
|
+
* This profile explicitly does not authorize a calibrated luminance or
|
|
45
|
+
* spectral-to-photometric conversion claim.
|
|
46
|
+
*/
|
|
47
|
+
export function parseSceneRadianceMeteringDerivationProfile(value) {
|
|
48
|
+
const record = requireRecord(value, "sceneRadianceMeteringDerivationProfile");
|
|
49
|
+
if (record.schemaVersion !==
|
|
50
|
+
SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION) {
|
|
51
|
+
throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.schemaVersion must be "' +
|
|
52
|
+
SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION +
|
|
53
|
+
'".');
|
|
54
|
+
}
|
|
55
|
+
if (record.scientificStatus !==
|
|
56
|
+
"approximation") {
|
|
57
|
+
throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.scientificStatus must be "approximation" in schema 0.1.0.');
|
|
58
|
+
}
|
|
59
|
+
if (record.method !==
|
|
60
|
+
"renderer-provided-pre-exposure-relative-reduction") {
|
|
61
|
+
throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.method must be "renderer-provided-pre-exposure-relative-reduction".');
|
|
62
|
+
}
|
|
63
|
+
if (record.spectralWeighting !==
|
|
64
|
+
"not-calibrated") {
|
|
65
|
+
throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.spectralWeighting must be "not-calibrated" in schema 0.1.0.');
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
schemaVersion: SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION,
|
|
69
|
+
derivationId: requireNonEmptyString(record.derivationId, "sceneRadianceMeteringDerivationProfile.derivationId"),
|
|
70
|
+
scientificStatus: "approximation",
|
|
71
|
+
method: "renderer-provided-pre-exposure-relative-reduction",
|
|
72
|
+
spectralWeighting: "not-calibrated",
|
|
73
|
+
evidence: parseEvidenceList(record.evidence, "sceneRadianceMeteringDerivationProfile.evidence"),
|
|
74
|
+
limitation: requireNonEmptyString(record.limitation, "sceneRadianceMeteringDerivationProfile.limitation")
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function validateProviderContext(input) {
|
|
78
|
+
const { providerProfile, illuminationProfile, illuminationTemporalProfile, materialResponseProfile } = input;
|
|
79
|
+
if (providerProfile.sceneId !==
|
|
80
|
+
illuminationProfile.sceneId) {
|
|
81
|
+
throw new InvalidScientificInputError("Provider and illumination profiles must reference the same sceneId.");
|
|
82
|
+
}
|
|
83
|
+
if (providerProfile.sceneId !==
|
|
84
|
+
materialResponseProfile.sceneId) {
|
|
85
|
+
throw new InvalidScientificInputError("Provider and material-response profiles must reference the same sceneId.");
|
|
86
|
+
}
|
|
87
|
+
if (providerProfile.illuminationProfileId !==
|
|
88
|
+
illuminationProfile.profileId) {
|
|
89
|
+
throw new InvalidScientificInputError("Provider illuminationProfileId must match the supplied illumination profile.");
|
|
90
|
+
}
|
|
91
|
+
if (providerProfile.materialResponseProfileId !==
|
|
92
|
+
materialResponseProfile.profileId) {
|
|
93
|
+
throw new InvalidScientificInputError("Provider materialResponseProfileId must match the supplied material-response profile.");
|
|
94
|
+
}
|
|
95
|
+
const materialResponseFidelity = assessSceneMaterialResponseFidelity(materialResponseProfile);
|
|
96
|
+
if (providerProfile.fidelity.material !==
|
|
97
|
+
materialResponseFidelity) {
|
|
98
|
+
throw new InvalidScientificInputError("Provider material fidelity must match the supplied material-response profile.");
|
|
99
|
+
}
|
|
100
|
+
if (providerProfile
|
|
101
|
+
.illuminationTemporalProfileId ===
|
|
102
|
+
undefined) {
|
|
103
|
+
if (illuminationTemporalProfile !==
|
|
104
|
+
undefined) {
|
|
105
|
+
throw new InvalidScientificInputError("A temporal illumination profile was supplied but the provider profile does not bind one.");
|
|
106
|
+
}
|
|
107
|
+
if (input
|
|
108
|
+
.captureTimeSecondsFromReference !==
|
|
109
|
+
undefined) {
|
|
110
|
+
throw new InvalidScientificInputError("captureTimeSecondsFromReference must be omitted for a time-invariant provider context.");
|
|
111
|
+
}
|
|
112
|
+
return materialResponseFidelity;
|
|
113
|
+
}
|
|
114
|
+
if (illuminationTemporalProfile ===
|
|
115
|
+
undefined) {
|
|
116
|
+
throw new InvalidScientificInputError("Provider illuminationTemporalProfileId requires the matching temporal illumination profile.");
|
|
117
|
+
}
|
|
118
|
+
if (providerProfile
|
|
119
|
+
.illuminationTemporalProfileId !==
|
|
120
|
+
illuminationTemporalProfile.profileId) {
|
|
121
|
+
throw new InvalidScientificInputError("Provider illuminationTemporalProfileId must match the supplied temporal illumination profile.");
|
|
122
|
+
}
|
|
123
|
+
if (providerProfile.sceneId !==
|
|
124
|
+
illuminationTemporalProfile.sceneId) {
|
|
125
|
+
throw new InvalidScientificInputError("Provider and temporal illumination profiles must reference the same sceneId.");
|
|
126
|
+
}
|
|
127
|
+
if (providerProfile
|
|
128
|
+
.illuminationProfileId !==
|
|
129
|
+
illuminationTemporalProfile
|
|
130
|
+
.illuminationProfileId) {
|
|
131
|
+
throw new InvalidScientificInputError("Temporal illumination profile must bind the provider's illuminationProfileId.");
|
|
132
|
+
}
|
|
133
|
+
const knownSourceIds = new Set(illuminationProfile.sources.map((entry) => entry.sourceId));
|
|
134
|
+
for (const binding of illuminationTemporalProfile
|
|
135
|
+
.sourceBindings) {
|
|
136
|
+
if (!knownSourceIds.has(binding.sourceId)) {
|
|
137
|
+
throw new InvalidScientificInputError("Temporal illumination source binding references a sourceId that is not declared by the illumination profile.");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (input
|
|
141
|
+
.captureTimeSecondsFromReference ===
|
|
142
|
+
undefined) {
|
|
143
|
+
throw new InvalidScientificInputError("Time-varying scene-radiance metering requires an explicit captureTimeSecondsFromReference.");
|
|
144
|
+
}
|
|
145
|
+
requireFinite(input.captureTimeSecondsFromReference, "captureTimeSecondsFromReference");
|
|
146
|
+
return materialResponseFidelity;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Creates a relative pre-exposure meter sample set bound to one validated #85
|
|
150
|
+
* provider context.
|
|
151
|
+
*
|
|
152
|
+
* The caller/renderer still supplies the scalar relative samples. This bridge
|
|
153
|
+
* validates identity and timing semantics only; it does not convert spectral
|
|
154
|
+
* radiance into luminance or define a calibrated meter spectral response.
|
|
155
|
+
*/
|
|
156
|
+
export function createSceneRadianceDerivedExposureMeteringSampleSet(input) {
|
|
157
|
+
const derivationProfile = parseSceneRadianceMeteringDerivationProfile(input.derivationProfile);
|
|
158
|
+
const materialResponseFidelity = validateProviderContext(input);
|
|
159
|
+
if (typeof input.measurementId !==
|
|
160
|
+
"string" ||
|
|
161
|
+
input.measurementId.trim().length ===
|
|
162
|
+
0) {
|
|
163
|
+
throw new InvalidScientificInputError("measurementId must be a non-empty string.");
|
|
164
|
+
}
|
|
165
|
+
if (typeof input.sceneStateId !==
|
|
166
|
+
"string" ||
|
|
167
|
+
input.sceneStateId.trim().length ===
|
|
168
|
+
0) {
|
|
169
|
+
throw new InvalidScientificInputError("sceneStateId must be a non-empty string.");
|
|
170
|
+
}
|
|
171
|
+
if (!Array.isArray(input.samples) ||
|
|
172
|
+
input.samples.length === 0) {
|
|
173
|
+
throw new InvalidScientificInputError("samples must be a non-empty array.");
|
|
174
|
+
}
|
|
175
|
+
const temporal = input.providerProfile
|
|
176
|
+
.illuminationTemporalProfileId ===
|
|
177
|
+
undefined
|
|
178
|
+
? {
|
|
179
|
+
kind: "time-invariant"
|
|
180
|
+
}
|
|
181
|
+
: {
|
|
182
|
+
kind: "registered-time-varying",
|
|
183
|
+
illuminationTemporalProfileId: input.providerProfile
|
|
184
|
+
.illuminationTemporalProfileId,
|
|
185
|
+
timeReference: "first-opening-boundary-phase",
|
|
186
|
+
captureTimeSecondsFromReference: input
|
|
187
|
+
.captureTimeSecondsFromReference
|
|
188
|
+
};
|
|
189
|
+
return {
|
|
190
|
+
measurementId: input.measurementId.trim(),
|
|
191
|
+
sceneStateId: input.sceneStateId.trim(),
|
|
192
|
+
inputDomain: "relative-pre-exposure-linear-signal",
|
|
193
|
+
captureRegion: "oriented-active-capture",
|
|
194
|
+
captureGeometry: input.captureGeometry,
|
|
195
|
+
processingState: {
|
|
196
|
+
exposureSettingsApplied: false,
|
|
197
|
+
whiteBalanceApplied: false,
|
|
198
|
+
toneMappingApplied: false,
|
|
199
|
+
displayGammaApplied: false,
|
|
200
|
+
sharpeningApplied: false
|
|
201
|
+
},
|
|
202
|
+
samples: input.samples,
|
|
203
|
+
sourceContext: {
|
|
204
|
+
kind: "scene-radiance-provider-derived-relative",
|
|
205
|
+
sceneId: input.providerProfile.sceneId,
|
|
206
|
+
sceneStateId: input.sceneStateId.trim(),
|
|
207
|
+
providerProfileId: input.providerProfile.profileId,
|
|
208
|
+
illuminationProfileId: input.illuminationProfile.profileId,
|
|
209
|
+
materialResponseProfileId: input.materialResponseProfile
|
|
210
|
+
.profileId,
|
|
211
|
+
derivationProfileId: derivationProfile.derivationId,
|
|
212
|
+
providerScientificStatus: input.providerProfile
|
|
213
|
+
.scientificStatus,
|
|
214
|
+
materialResponseFidelity,
|
|
215
|
+
temporal,
|
|
216
|
+
spectralReductionCalibrated: false,
|
|
217
|
+
calibratedLuminanceClaimAuthorized: false,
|
|
218
|
+
calibratedSceneRadianceClaimAuthorized: false
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=metering-scene-radiance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering-scene-radiance.js","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ExposureMeteringResult } from "./metering.js";
|
|
2
|
+
import type { SceneRadianceTemporalExposureMeteringResult } from "./metering-temporal.js";
|
|
3
|
+
export declare const EXPOSURE_METER_TARGET_SCHEMA_VERSION: "0.1.0";
|
|
4
|
+
export type ExposureMeterTargetSourceResult = ExposureMeteringResult | SceneRadianceTemporalExposureMeteringResult;
|
|
5
|
+
export type ExposureMeterTargetSourceKind = "spatial-metering-result" | "temporal-metering-result";
|
|
6
|
+
export interface ExposureMeterSnapshotIdentity {
|
|
7
|
+
sourceKind: ExposureMeterTargetSourceKind;
|
|
8
|
+
measurementId: string;
|
|
9
|
+
sceneStateId: string;
|
|
10
|
+
meteringProfileId: string;
|
|
11
|
+
}
|
|
12
|
+
interface ExposureMeterTargetBase {
|
|
13
|
+
schemaVersion: typeof EXPOSURE_METER_TARGET_SCHEMA_VERSION;
|
|
14
|
+
targetId: string;
|
|
15
|
+
sourceMeterSnapshot: ExposureMeterSnapshotIdentity;
|
|
16
|
+
scientificStatus: "approximation";
|
|
17
|
+
inputDomain: "relative-pre-exposure-linear-signal";
|
|
18
|
+
baseTargetRelativeSignal: number;
|
|
19
|
+
meteredRelativeSignal: number;
|
|
20
|
+
exposureCompensationStops: number;
|
|
21
|
+
exposureCompensationApplied: boolean;
|
|
22
|
+
meterMeasurementMutated: false;
|
|
23
|
+
sourceMeterSnapshotPreserved: true;
|
|
24
|
+
resultReusableForAeLock: true;
|
|
25
|
+
automaticExposureResolved: false;
|
|
26
|
+
intendedConsumer: "exposure-mode-resolver";
|
|
27
|
+
}
|
|
28
|
+
export type ExposureMeterTarget = (ExposureMeterTargetBase & {
|
|
29
|
+
status: "resolved";
|
|
30
|
+
baseRequiredExposureScaleToTarget: number;
|
|
31
|
+
baseExposureOffsetStopsToTarget: number;
|
|
32
|
+
requiredExposureScaleToTarget: number;
|
|
33
|
+
exposureOffsetStopsToTarget: number;
|
|
34
|
+
}) | (ExposureMeterTargetBase & {
|
|
35
|
+
status: "no-signal";
|
|
36
|
+
baseRequiredExposureScaleResolved: false;
|
|
37
|
+
baseExposureOffsetStopsResolved: false;
|
|
38
|
+
requiredExposureScaleResolved: false;
|
|
39
|
+
exposureOffsetStopsResolved: false;
|
|
40
|
+
});
|
|
41
|
+
export interface CreateExposureMeterTargetInput {
|
|
42
|
+
targetId: string;
|
|
43
|
+
meterResult: ExposureMeterTargetSourceResult;
|
|
44
|
+
}
|
|
45
|
+
export interface SetExposureCompensationOnMeterTargetInput {
|
|
46
|
+
targetId: string;
|
|
47
|
+
baseTarget: ExposureMeterTarget;
|
|
48
|
+
exposureCompensationStops: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Freezes one metering result into the stable relative exposure target
|
|
52
|
+
* consumed by downstream camera-control policy.
|
|
53
|
+
*
|
|
54
|
+
* The target copies the meter snapshot by value. Future scene/light changes do
|
|
55
|
+
* not mutate this object, which is the engine seam needed for AE-lock behavior.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createExposureMeterTargetFromMeteringResult(input: CreateExposureMeterTargetInput): ExposureMeterTarget;
|
|
58
|
+
/**
|
|
59
|
+
* Sets an absolute exposure-compensation value on a frozen meter target.
|
|
60
|
+
*
|
|
61
|
+
* Compensation is always re-derived from the uncompensated base target, so
|
|
62
|
+
* repeated UI updates cannot accidentally accumulate floating-point/control
|
|
63
|
+
* drift. Positive compensation requests more exposure.
|
|
64
|
+
*/
|
|
65
|
+
export declare function setExposureCompensationOnMeterTarget(input: SetExposureCompensationOnMeterTargetInput): ExposureMeterTarget;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=metering-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering-target.d.ts","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,2CAA2C,EAC5C,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,oCAAoC,EAC/C,OAAgB,CAAC;AAEnB,MAAM,MAAM,+BAA+B,GACvC,sBAAsB,GACtB,2CAA2C,CAAC;AAEhD,MAAM,MAAM,6BAA6B,GACrC,yBAAyB,GACzB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EACR,6BAA6B,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,uBAAuB;IAC/B,aAAa,EACX,OAAO,oCAAoC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EACjB,6BAA6B,CAAC;IAChC,gBAAgB,EAAE,eAAe,CAAC;IAClC,WAAW,EACT,qCAAqC,CAAC;IACxC,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,2BAA2B,EAAE,OAAO,CAAC;IACrC,uBAAuB,EAAE,KAAK,CAAC;IAC/B,4BAA4B,EAAE,IAAI,CAAC;IACnC,uBAAuB,EAAE,IAAI,CAAC;IAC9B,yBAAyB,EAAE,KAAK,CAAC;IACjC,gBAAgB,EACd,wBAAwB,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAC3B,CAAC,uBAAuB,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC,EAC/B,MAAM,CAAC;IACT,+BAA+B,EAC7B,MAAM,CAAC;IACT,6BAA6B,EAC3B,MAAM,CAAC;IACT,2BAA2B,EACzB,MAAM,CAAC;CACV,CAAC,GACF,CAAC,uBAAuB,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,iCAAiC,EAC/B,KAAK,CAAC;IACR,+BAA+B,EAC7B,KAAK,CAAC;IACR,6BAA6B,EAC3B,KAAK,CAAC;IACR,2BAA2B,EACzB,KAAK,CAAC;CACT,CAAC,CAAC;AAEP,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EACT,+BAA+B,CAAC;CACnC;AAED,MAAM,WAAW,yCAAyC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,mBAAmB,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AA8MD;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EACH,8BAA8B,GAC/B,mBAAmB,CAsErB;AAoGD;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EACH,yCAAyC,GAC1C,mBAAmB,CA+FrB"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Freezes one metering result into the stable relative exposure target consumed by downstream
|
|
5
|
+
* camera-control policy. The target copies the meter snapshot by value. Future scene/light changes do
|
|
6
|
+
* not mutate this object, which is the engine seam needed for AE-lock behavior.
|
|
7
|
+
* Sets an absolute exposure-compensation value on a frozen meter target. Compensation is always
|
|
8
|
+
* re-derived from the uncompensated base target, so repeated UI updates cannot accidentally accumulate
|
|
9
|
+
* floating-point/control drift. Positive compensation requests more exposure.
|
|
10
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
11
|
+
*/
|
|
12
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
13
|
+
export const EXPOSURE_METER_TARGET_SCHEMA_VERSION = "0.1.0";
|
|
14
|
+
function requireNonEmptyString(value, path) {
|
|
15
|
+
if (typeof value !== "string" ||
|
|
16
|
+
value.trim().length === 0) {
|
|
17
|
+
throw new InvalidScientificInputError(path + " must be a non-empty string.");
|
|
18
|
+
}
|
|
19
|
+
return value.trim();
|
|
20
|
+
}
|
|
21
|
+
function requireFinite(value, path) {
|
|
22
|
+
if (typeof value !== "number" ||
|
|
23
|
+
!Number.isFinite(value)) {
|
|
24
|
+
throw new InvalidScientificInputError(path + " must be finite.");
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function requirePositiveFinite(value, path) {
|
|
29
|
+
const parsed = requireFinite(value, path);
|
|
30
|
+
if (parsed <= 0) {
|
|
31
|
+
throw new InvalidScientificInputError(path + " must be greater than zero.");
|
|
32
|
+
}
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
function requireNonNegativeFinite(value, path) {
|
|
36
|
+
const parsed = requireFinite(value, path);
|
|
37
|
+
if (parsed < 0) {
|
|
38
|
+
throw new InvalidScientificInputError(path +
|
|
39
|
+
" must be greater than or equal to zero.");
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
function meterSnapshotIdentity(result) {
|
|
44
|
+
const hasSpatialId = "measurementId" in result;
|
|
45
|
+
const hasTemporalId = "temporalMeasurementId" in
|
|
46
|
+
result;
|
|
47
|
+
if (hasSpatialId === hasTemporalId) {
|
|
48
|
+
throw new InvalidScientificInputError("meterResult must identify exactly one spatial or temporal metering result.");
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
sourceKind: hasSpatialId
|
|
52
|
+
? "spatial-metering-result"
|
|
53
|
+
: "temporal-metering-result",
|
|
54
|
+
measurementId: requireNonEmptyString(hasSpatialId
|
|
55
|
+
? result.measurementId
|
|
56
|
+
: result
|
|
57
|
+
.temporalMeasurementId, hasSpatialId
|
|
58
|
+
? "meterResult.measurementId"
|
|
59
|
+
: "meterResult.temporalMeasurementId"),
|
|
60
|
+
sceneStateId: requireNonEmptyString(result.sceneStateId, "meterResult.sceneStateId"),
|
|
61
|
+
meteringProfileId: requireNonEmptyString(result.profileId, "meterResult.profileId")
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function validateCommonMeterResult(result) {
|
|
65
|
+
if (result.scientificStatus !==
|
|
66
|
+
"approximation") {
|
|
67
|
+
throw new InvalidScientificInputError('meterResult.scientificStatus must be "approximation" for schema 0.1.0.');
|
|
68
|
+
}
|
|
69
|
+
if (result.inputDomain !==
|
|
70
|
+
"relative-pre-exposure-linear-signal") {
|
|
71
|
+
throw new InvalidScientificInputError('meterResult.inputDomain must be "relative-pre-exposure-linear-signal".');
|
|
72
|
+
}
|
|
73
|
+
if (result.exposureCompensationApplied !==
|
|
74
|
+
false) {
|
|
75
|
+
throw new InvalidScientificInputError("meterResult must be the uncompensated base metering result.");
|
|
76
|
+
}
|
|
77
|
+
if (result.automaticExposureResolved !==
|
|
78
|
+
false) {
|
|
79
|
+
throw new InvalidScientificInputError("meterResult must precede automatic exposure resolution.");
|
|
80
|
+
}
|
|
81
|
+
if (result.resultReusableForAeLock !==
|
|
82
|
+
true) {
|
|
83
|
+
throw new InvalidScientificInputError("meterResult must preserve reusable meter-result identity.");
|
|
84
|
+
}
|
|
85
|
+
requirePositiveFinite(result.targetRelativeSignal, "meterResult.targetRelativeSignal");
|
|
86
|
+
requireNonNegativeFinite(result.meteredRelativeSignal, "meterResult.meteredRelativeSignal");
|
|
87
|
+
}
|
|
88
|
+
function createBaseTargetFields(targetId, meterResult) {
|
|
89
|
+
validateCommonMeterResult(meterResult);
|
|
90
|
+
return {
|
|
91
|
+
schemaVersion: EXPOSURE_METER_TARGET_SCHEMA_VERSION,
|
|
92
|
+
targetId: requireNonEmptyString(targetId, "targetId"),
|
|
93
|
+
sourceMeterSnapshot: meterSnapshotIdentity(meterResult),
|
|
94
|
+
scientificStatus: "approximation",
|
|
95
|
+
inputDomain: "relative-pre-exposure-linear-signal",
|
|
96
|
+
baseTargetRelativeSignal: meterResult.targetRelativeSignal,
|
|
97
|
+
meteredRelativeSignal: meterResult.meteredRelativeSignal,
|
|
98
|
+
exposureCompensationStops: 0,
|
|
99
|
+
exposureCompensationApplied: false,
|
|
100
|
+
meterMeasurementMutated: false,
|
|
101
|
+
sourceMeterSnapshotPreserved: true,
|
|
102
|
+
resultReusableForAeLock: true,
|
|
103
|
+
automaticExposureResolved: false,
|
|
104
|
+
intendedConsumer: "exposure-mode-resolver"
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Freezes one metering result into the stable relative exposure target
|
|
109
|
+
* consumed by downstream camera-control policy.
|
|
110
|
+
*
|
|
111
|
+
* The target copies the meter snapshot by value. Future scene/light changes do
|
|
112
|
+
* not mutate this object, which is the engine seam needed for AE-lock behavior.
|
|
113
|
+
*/
|
|
114
|
+
export function createExposureMeterTargetFromMeteringResult(input) {
|
|
115
|
+
const base = createBaseTargetFields(input.targetId, input.meterResult);
|
|
116
|
+
if (input.meterResult.status ===
|
|
117
|
+
"no-signal") {
|
|
118
|
+
if (input.meterResult
|
|
119
|
+
.meteredRelativeSignal !== 0) {
|
|
120
|
+
throw new InvalidScientificInputError("A no-signal meter result must have meteredRelativeSignal equal to zero.");
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
...base,
|
|
124
|
+
status: "no-signal",
|
|
125
|
+
baseRequiredExposureScaleResolved: false,
|
|
126
|
+
baseExposureOffsetStopsResolved: false,
|
|
127
|
+
requiredExposureScaleResolved: false,
|
|
128
|
+
exposureOffsetStopsResolved: false
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const meteredRelativeSignal = requirePositiveFinite(input.meterResult
|
|
132
|
+
.meteredRelativeSignal, "meterResult.meteredRelativeSignal");
|
|
133
|
+
const baseScale = base.baseTargetRelativeSignal /
|
|
134
|
+
meteredRelativeSignal;
|
|
135
|
+
if (!Number.isFinite(baseScale) ||
|
|
136
|
+
baseScale <= 0) {
|
|
137
|
+
throw new InvalidScientificInputError("Base required exposure scale must remain finite and greater than zero.");
|
|
138
|
+
}
|
|
139
|
+
const baseStops = Math.log2(baseScale);
|
|
140
|
+
if (!Number.isFinite(baseStops)) {
|
|
141
|
+
throw new InvalidScientificInputError("Base exposure offset must remain finite.");
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
...base,
|
|
145
|
+
status: "resolved",
|
|
146
|
+
baseRequiredExposureScaleToTarget: baseScale,
|
|
147
|
+
baseExposureOffsetStopsToTarget: baseStops,
|
|
148
|
+
requiredExposureScaleToTarget: baseScale,
|
|
149
|
+
exposureOffsetStopsToTarget: baseStops
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function validateBaseTarget(target) {
|
|
153
|
+
if (target.schemaVersion !==
|
|
154
|
+
EXPOSURE_METER_TARGET_SCHEMA_VERSION) {
|
|
155
|
+
throw new InvalidScientificInputError('baseTarget.schemaVersion must be "' +
|
|
156
|
+
EXPOSURE_METER_TARGET_SCHEMA_VERSION +
|
|
157
|
+
'".');
|
|
158
|
+
}
|
|
159
|
+
requireNonEmptyString(target.targetId, "baseTarget.targetId");
|
|
160
|
+
requireNonEmptyString(target
|
|
161
|
+
.sourceMeterSnapshot
|
|
162
|
+
.measurementId, "baseTarget.sourceMeterSnapshot.measurementId");
|
|
163
|
+
requireNonEmptyString(target
|
|
164
|
+
.sourceMeterSnapshot
|
|
165
|
+
.sceneStateId, "baseTarget.sourceMeterSnapshot.sceneStateId");
|
|
166
|
+
requireNonEmptyString(target
|
|
167
|
+
.sourceMeterSnapshot
|
|
168
|
+
.meteringProfileId, "baseTarget.sourceMeterSnapshot.meteringProfileId");
|
|
169
|
+
if (target
|
|
170
|
+
.sourceMeterSnapshot
|
|
171
|
+
.sourceKind !==
|
|
172
|
+
"spatial-metering-result" &&
|
|
173
|
+
target
|
|
174
|
+
.sourceMeterSnapshot
|
|
175
|
+
.sourceKind !==
|
|
176
|
+
"temporal-metering-result") {
|
|
177
|
+
throw new InvalidScientificInputError("baseTarget.sourceMeterSnapshot.sourceKind is invalid.");
|
|
178
|
+
}
|
|
179
|
+
if (target.scientificStatus !==
|
|
180
|
+
"approximation" ||
|
|
181
|
+
target.inputDomain !==
|
|
182
|
+
"relative-pre-exposure-linear-signal" ||
|
|
183
|
+
target.meterMeasurementMutated !==
|
|
184
|
+
false ||
|
|
185
|
+
target.sourceMeterSnapshotPreserved !==
|
|
186
|
+
true ||
|
|
187
|
+
target.resultReusableForAeLock !==
|
|
188
|
+
true ||
|
|
189
|
+
target.automaticExposureResolved !==
|
|
190
|
+
false ||
|
|
191
|
+
target.intendedConsumer !==
|
|
192
|
+
"exposure-mode-resolver") {
|
|
193
|
+
throw new InvalidScientificInputError("baseTarget does not satisfy the exposure-meter target boundary.");
|
|
194
|
+
}
|
|
195
|
+
requirePositiveFinite(target.baseTargetRelativeSignal, "baseTarget.baseTargetRelativeSignal");
|
|
196
|
+
requireNonNegativeFinite(target.meteredRelativeSignal, "baseTarget.meteredRelativeSignal");
|
|
197
|
+
if (target.status === "resolved") {
|
|
198
|
+
requirePositiveFinite(target
|
|
199
|
+
.baseRequiredExposureScaleToTarget, "baseTarget.baseRequiredExposureScaleToTarget");
|
|
200
|
+
requireFinite(target
|
|
201
|
+
.baseExposureOffsetStopsToTarget, "baseTarget.baseExposureOffsetStopsToTarget");
|
|
202
|
+
}
|
|
203
|
+
else if (target.meteredRelativeSignal !== 0) {
|
|
204
|
+
throw new InvalidScientificInputError("A no-signal baseTarget must preserve zero meteredRelativeSignal.");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Sets an absolute exposure-compensation value on a frozen meter target.
|
|
209
|
+
*
|
|
210
|
+
* Compensation is always re-derived from the uncompensated base target, so
|
|
211
|
+
* repeated UI updates cannot accidentally accumulate floating-point/control
|
|
212
|
+
* drift. Positive compensation requests more exposure.
|
|
213
|
+
*/
|
|
214
|
+
export function setExposureCompensationOnMeterTarget(input) {
|
|
215
|
+
validateBaseTarget(input.baseTarget);
|
|
216
|
+
const targetId = requireNonEmptyString(input.targetId, "targetId");
|
|
217
|
+
if (targetId ===
|
|
218
|
+
input.baseTarget.targetId) {
|
|
219
|
+
throw new InvalidScientificInputError("A compensated target must use a new targetId so changed control state cannot hide behind the same identity.");
|
|
220
|
+
}
|
|
221
|
+
const compensation = requireFinite(input.exposureCompensationStops, "exposureCompensationStops");
|
|
222
|
+
const common = {
|
|
223
|
+
...input.baseTarget,
|
|
224
|
+
targetId,
|
|
225
|
+
exposureCompensationStops: compensation,
|
|
226
|
+
exposureCompensationApplied: compensation !== 0,
|
|
227
|
+
meterMeasurementMutated: false,
|
|
228
|
+
sourceMeterSnapshotPreserved: true,
|
|
229
|
+
resultReusableForAeLock: true,
|
|
230
|
+
automaticExposureResolved: false
|
|
231
|
+
};
|
|
232
|
+
if (input.baseTarget.status ===
|
|
233
|
+
"no-signal") {
|
|
234
|
+
return {
|
|
235
|
+
...common,
|
|
236
|
+
status: "no-signal",
|
|
237
|
+
baseRequiredExposureScaleResolved: false,
|
|
238
|
+
baseExposureOffsetStopsResolved: false,
|
|
239
|
+
requiredExposureScaleResolved: false,
|
|
240
|
+
exposureOffsetStopsResolved: false
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
const compensatedStops = input.baseTarget
|
|
244
|
+
.baseExposureOffsetStopsToTarget +
|
|
245
|
+
compensation;
|
|
246
|
+
const compensatedScale = input.baseTarget
|
|
247
|
+
.baseRequiredExposureScaleToTarget *
|
|
248
|
+
Math.pow(2, compensation);
|
|
249
|
+
if (!Number.isFinite(compensatedStops) ||
|
|
250
|
+
!Number.isFinite(compensatedScale) ||
|
|
251
|
+
compensatedScale <= 0) {
|
|
252
|
+
throw new InvalidScientificInputError("Compensated exposure target must remain finite and greater than zero.");
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
...common,
|
|
256
|
+
status: "resolved",
|
|
257
|
+
baseRequiredExposureScaleToTarget: input.baseTarget
|
|
258
|
+
.baseRequiredExposureScaleToTarget,
|
|
259
|
+
baseExposureOffsetStopsToTarget: input.baseTarget
|
|
260
|
+
.baseExposureOffsetStopsToTarget,
|
|
261
|
+
requiredExposureScaleToTarget: compensatedScale,
|
|
262
|
+
exposureOffsetStopsToTarget: compensatedStops
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=metering-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering-target.js","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"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"}
|