@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,151 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses generic body metering capability metadata. This profile declares which engine-owned metering
|
|
5
|
+
* profiles/modes a generic body can select. It deliberately does not duplicate target/calibration
|
|
6
|
+
* values from those metering profiles.
|
|
7
|
+
* Checks whether one engine metering profile is selectable on a generic body. Calibration/target
|
|
8
|
+
* policy remains authoritative in the metering profile and is never copied into equipment capability
|
|
9
|
+
* metadata.
|
|
10
|
+
* @see docs/GENERIC_TIER_PRESETS.md for equations, coordinate/unit conventions, blockers and support
|
|
11
|
+
* 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 { parseExposureMeteringProfile } from "../exposure/metering.js";
|
|
17
|
+
export const GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION = "0.1.0";
|
|
18
|
+
const POLICY_KINDS = new Set([
|
|
19
|
+
"multi-zone-uniform",
|
|
20
|
+
"center-weighted-radial",
|
|
21
|
+
"spot",
|
|
22
|
+
"highlight-weighted"
|
|
23
|
+
]);
|
|
24
|
+
function requireRecord(value, path) {
|
|
25
|
+
if (typeof value !== "object" ||
|
|
26
|
+
value === null ||
|
|
27
|
+
Array.isArray(value)) {
|
|
28
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
function requireNonEmptyString(value, path) {
|
|
33
|
+
if (typeof value !== "string" ||
|
|
34
|
+
value.trim().length === 0) {
|
|
35
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
36
|
+
}
|
|
37
|
+
return value.trim();
|
|
38
|
+
}
|
|
39
|
+
function parseAvailability(value, path) {
|
|
40
|
+
if (value !== "supported" &&
|
|
41
|
+
value !== "unsupported" &&
|
|
42
|
+
value !== "unknown") {
|
|
43
|
+
throw new InvalidConfigurationError(path + " is invalid.");
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function parsePolicyKind(value, path) {
|
|
48
|
+
if (typeof value !== "string" ||
|
|
49
|
+
!POLICY_KINDS.has(value)) {
|
|
50
|
+
throw new InvalidConfigurationError(path + " is invalid.");
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parses generic body metering capability metadata.
|
|
56
|
+
*
|
|
57
|
+
* This profile declares which engine-owned metering profiles/modes a generic
|
|
58
|
+
* body can select. It deliberately does not duplicate target/calibration
|
|
59
|
+
* values from those metering profiles.
|
|
60
|
+
*/
|
|
61
|
+
export function parseGenericBodyMeteringCapabilityProfile(value) {
|
|
62
|
+
const record = requireRecord(value, "genericBodyMeteringCapabilityProfile");
|
|
63
|
+
if (record.schemaVersion !==
|
|
64
|
+
GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION) {
|
|
65
|
+
throw new InvalidConfigurationError('genericBodyMeteringCapabilityProfile.schemaVersion must be "' +
|
|
66
|
+
GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION +
|
|
67
|
+
'".');
|
|
68
|
+
}
|
|
69
|
+
if (record.scientificStatus !==
|
|
70
|
+
"approximation") {
|
|
71
|
+
throw new InvalidConfigurationError('genericBodyMeteringCapabilityProfile.scientificStatus must be "approximation".');
|
|
72
|
+
}
|
|
73
|
+
if (!Array.isArray(record.supportedMeteringProfiles) ||
|
|
74
|
+
record.supportedMeteringProfiles
|
|
75
|
+
.length === 0) {
|
|
76
|
+
throw new InvalidConfigurationError("genericBodyMeteringCapabilityProfile.supportedMeteringProfiles must be a non-empty array.");
|
|
77
|
+
}
|
|
78
|
+
const supported = record.supportedMeteringProfiles.map((entry, index) => {
|
|
79
|
+
const path = "genericBodyMeteringCapabilityProfile.supportedMeteringProfiles[" +
|
|
80
|
+
index +
|
|
81
|
+
"]";
|
|
82
|
+
const item = requireRecord(entry, path);
|
|
83
|
+
return {
|
|
84
|
+
meteringProfileId: requireNonEmptyString(item.meteringProfileId, path + ".meteringProfileId"),
|
|
85
|
+
policyKind: parsePolicyKind(item.policyKind, path + ".policyKind"),
|
|
86
|
+
evidence: parseEvidenceList(item.evidence, path + ".evidence")
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
const ids = supported.map((entry) => entry.meteringProfileId);
|
|
90
|
+
if (new Set(ids).size !==
|
|
91
|
+
ids.length) {
|
|
92
|
+
throw new InvalidConfigurationError("genericBodyMeteringCapabilityProfile.supportedMeteringProfiles must not contain duplicate meteringProfileId values.");
|
|
93
|
+
}
|
|
94
|
+
const spotLink = requireRecord(record.spotFocusPointLinkage, "genericBodyMeteringCapabilityProfile.spotFocusPointLinkage");
|
|
95
|
+
return {
|
|
96
|
+
schemaVersion: GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION,
|
|
97
|
+
profileId: requireNonEmptyString(record.profileId, "genericBodyMeteringCapabilityProfile.profileId"),
|
|
98
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "genericBodyMeteringCapabilityProfile.profileVersion"),
|
|
99
|
+
scientificStatus: "approximation",
|
|
100
|
+
evidence: parseEvidenceList(record.evidence, "genericBodyMeteringCapabilityProfile.evidence"),
|
|
101
|
+
supportedMeteringProfiles: supported,
|
|
102
|
+
spotFocusPointLinkage: {
|
|
103
|
+
availability: parseAvailability(spotLink.availability, "genericBodyMeteringCapabilityProfile.spotFocusPointLinkage.availability"),
|
|
104
|
+
evidence: parseEvidenceList(spotLink.evidence, "genericBodyMeteringCapabilityProfile.spotFocusPointLinkage.evidence")
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Checks whether one engine metering profile is selectable on a generic body.
|
|
110
|
+
*
|
|
111
|
+
* Calibration/target policy remains authoritative in the metering profile and
|
|
112
|
+
* is never copied into equipment capability metadata.
|
|
113
|
+
*/
|
|
114
|
+
export function assessExposureMeteringProfileCompatibility(input) {
|
|
115
|
+
const body = parseGenericBodyMeteringCapabilityProfile(input.bodyCapabilities);
|
|
116
|
+
const metering = parseExposureMeteringProfile(input.meteringProfile);
|
|
117
|
+
const declared = body.supportedMeteringProfiles.find((entry) => entry.meteringProfileId ===
|
|
118
|
+
metering.profileId);
|
|
119
|
+
const blockers = [];
|
|
120
|
+
if (declared === undefined) {
|
|
121
|
+
blockers.push("metering-profile-unsupported");
|
|
122
|
+
}
|
|
123
|
+
else if (declared.policyKind !==
|
|
124
|
+
metering.policy.kind) {
|
|
125
|
+
blockers.push("metering-policy-mismatch");
|
|
126
|
+
}
|
|
127
|
+
if (blockers.length >
|
|
128
|
+
new Set(blockers).size) {
|
|
129
|
+
throw new InvalidScientificInputError("Metering capability compatibility blockers must remain unique.");
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
schemaVersion: GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION,
|
|
133
|
+
status: blockers.length === 0
|
|
134
|
+
? "compatible"
|
|
135
|
+
: "blocked",
|
|
136
|
+
bodyProfile: {
|
|
137
|
+
profileId: body.profileId,
|
|
138
|
+
profileVersion: body.profileVersion
|
|
139
|
+
},
|
|
140
|
+
meteringProfile: {
|
|
141
|
+
profileId: metering.profileId,
|
|
142
|
+
policyKind: metering.policy.kind
|
|
143
|
+
},
|
|
144
|
+
targetPolicyOwnership: "metering-profile",
|
|
145
|
+
targetCalibrationDuplicatedInEquipmentProfile: false,
|
|
146
|
+
spotFocusPointLinkageAvailability: body.spotFocusPointLinkage
|
|
147
|
+
.availability,
|
|
148
|
+
blockers
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=metering-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metering-capabilities.js","sourceRoot":"","sources":["../../src/equipment/metering-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type EvidenceBackedFact, type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
2
|
+
import type { GenericCapabilityAvailability } from "./exposure-capabilities.js";
|
|
3
|
+
export declare const GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION: "0.1.0";
|
|
4
|
+
export type GenericReleaseDriveMode = "single" | "burst" | "self-timer";
|
|
5
|
+
export type GenericExposureBracketAxis = "shutter" | "iso" | "aperture";
|
|
6
|
+
export interface GenericReleaseCapabilityProfile {
|
|
7
|
+
schemaVersion: typeof GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION;
|
|
8
|
+
profileId: string;
|
|
9
|
+
profileVersion: string;
|
|
10
|
+
scientificStatus: "approximation";
|
|
11
|
+
evidence: readonly EvidenceProvenance[];
|
|
12
|
+
supportedDriveModes: EvidenceBackedFact<readonly GenericReleaseDriveMode[]>;
|
|
13
|
+
maximumLogicalFramesPerSequence: EvidenceBackedFact<number>;
|
|
14
|
+
maximumCadenceFps: EvidenceBackedFact<number>;
|
|
15
|
+
minimumInterFrameGapSeconds: EvidenceBackedFact<number>;
|
|
16
|
+
overlappingOrdinaryStillExposures: false;
|
|
17
|
+
exposureBracketing: {
|
|
18
|
+
availability: EvidenceBackedFact<GenericCapabilityAvailability>;
|
|
19
|
+
supportedAxes: readonly GenericExposureBracketAxis[];
|
|
20
|
+
};
|
|
21
|
+
focusBracketing: {
|
|
22
|
+
availability: EvidenceBackedFact<GenericCapabilityAvailability>;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parses generic logical-release/drive capabilities.
|
|
27
|
+
*
|
|
28
|
+
* The first schema deliberately models non-overlapping ordinary still
|
|
29
|
+
* exposures only. Buffer/media/thermal slowdown and pre-release capture remain
|
|
30
|
+
* outside this profile.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseGenericReleaseCapabilityProfile(value: unknown): GenericReleaseCapabilityProfile;
|
|
33
|
+
//# sourceMappingURL=release-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-capabilities.d.ts","sourceRoot":"","sources":["../../src/equipment/release-capabilities.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAIhF,eAAO,MAAM,yCAAyC,EACpD,OAAgB,CAAC;AAEnB,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,MAAM,0BAA0B,GAClC,SAAS,GACT,KAAK,GACL,UAAU,CAAC;AAEf,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EACX,OAAO,yCAAyC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,eAAe,CAAC;IAClC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,mBAAmB,EACjB,kBAAkB,CAChB,SAAS,uBAAuB,EAAE,CACnC,CAAC;IACJ,+BAA+B,EAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,EACf,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,2BAA2B,EACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,iCAAiC,EAC/B,KAAK,CAAC;IACR,kBAAkB,EAAE;QAClB,YAAY,EACV,kBAAkB,CAChB,6BAA6B,CAC9B,CAAC;QACJ,aAAa,EACX,SAAS,0BAA0B,EAAE,CAAC;KACzC,CAAC;IACF,eAAe,EAAE;QACf,YAAY,EACV,kBAAkB,CAChB,6BAA6B,CAC9B,CAAC;KACL,CAAC;CACH;AA0ND;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,+BAA+B,CA+HjC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses generic logical-release/drive capabilities. The first schema deliberately models
|
|
5
|
+
* non-overlapping ordinary still exposures only. Buffer/media/thermal slowdown and pre-release capture
|
|
6
|
+
* remain outside this profile.
|
|
7
|
+
* @see docs/GENERIC_TIER_PRESETS.md for equations, coordinate/unit conventions, blockers and support
|
|
8
|
+
* limits.
|
|
9
|
+
*/
|
|
10
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
11
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
12
|
+
export const GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION = "0.1.0";
|
|
13
|
+
const DRIVE_MODES = new Set([
|
|
14
|
+
"single",
|
|
15
|
+
"burst",
|
|
16
|
+
"self-timer"
|
|
17
|
+
]);
|
|
18
|
+
const BRACKET_AXES = new Set([
|
|
19
|
+
"shutter",
|
|
20
|
+
"iso",
|
|
21
|
+
"aperture"
|
|
22
|
+
]);
|
|
23
|
+
function requireRecord(value, path) {
|
|
24
|
+
if (typeof value !== "object" ||
|
|
25
|
+
value === null ||
|
|
26
|
+
Array.isArray(value)) {
|
|
27
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function requireNonEmptyString(value, path) {
|
|
32
|
+
if (typeof value !== "string" ||
|
|
33
|
+
value.trim().length === 0) {
|
|
34
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
35
|
+
}
|
|
36
|
+
return value.trim();
|
|
37
|
+
}
|
|
38
|
+
function requirePositiveFinite(value, path) {
|
|
39
|
+
if (typeof value !== "number" ||
|
|
40
|
+
!Number.isFinite(value) ||
|
|
41
|
+
value <= 0) {
|
|
42
|
+
throw new InvalidConfigurationError(path +
|
|
43
|
+
" must be finite and greater than zero.");
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function requireNonNegativeFinite(value, path) {
|
|
48
|
+
if (typeof value !== "number" ||
|
|
49
|
+
!Number.isFinite(value) ||
|
|
50
|
+
value < 0) {
|
|
51
|
+
throw new InvalidConfigurationError(path +
|
|
52
|
+
" must be finite and greater than or equal to zero.");
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function requirePositiveSafeInteger(value, path) {
|
|
57
|
+
if (typeof value !== "number" ||
|
|
58
|
+
!Number.isSafeInteger(value) ||
|
|
59
|
+
value <= 0) {
|
|
60
|
+
throw new InvalidConfigurationError(path +
|
|
61
|
+
" must be a positive safe integer.");
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function parseAvailability(value, path) {
|
|
66
|
+
if (value !== "supported" &&
|
|
67
|
+
value !== "unsupported" &&
|
|
68
|
+
value !== "unknown") {
|
|
69
|
+
throw new InvalidConfigurationError(path + " is invalid.");
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
function parseFact(value, path, parseValue) {
|
|
74
|
+
const record = requireRecord(value, path);
|
|
75
|
+
return {
|
|
76
|
+
value: parseValue(record.value, path + ".value"),
|
|
77
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function parseDriveModes(value, path) {
|
|
81
|
+
if (!Array.isArray(value) ||
|
|
82
|
+
value.length === 0) {
|
|
83
|
+
throw new InvalidConfigurationError(path +
|
|
84
|
+
" must be a non-empty array.");
|
|
85
|
+
}
|
|
86
|
+
const parsed = value.map((entry, index) => {
|
|
87
|
+
if (typeof entry !== "string" ||
|
|
88
|
+
!DRIVE_MODES.has(entry)) {
|
|
89
|
+
throw new InvalidConfigurationError(path +
|
|
90
|
+
"[" +
|
|
91
|
+
index +
|
|
92
|
+
"] is invalid.");
|
|
93
|
+
}
|
|
94
|
+
return entry;
|
|
95
|
+
});
|
|
96
|
+
if (new Set(parsed).size !==
|
|
97
|
+
parsed.length) {
|
|
98
|
+
throw new InvalidConfigurationError(path +
|
|
99
|
+
" must not contain duplicates.");
|
|
100
|
+
}
|
|
101
|
+
return parsed;
|
|
102
|
+
}
|
|
103
|
+
function parseBracketAxes(value, path) {
|
|
104
|
+
if (!Array.isArray(value)) {
|
|
105
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
106
|
+
}
|
|
107
|
+
const parsed = value.map((entry, index) => {
|
|
108
|
+
if (typeof entry !== "string" ||
|
|
109
|
+
!BRACKET_AXES.has(entry)) {
|
|
110
|
+
throw new InvalidConfigurationError(path +
|
|
111
|
+
"[" +
|
|
112
|
+
index +
|
|
113
|
+
"] is invalid.");
|
|
114
|
+
}
|
|
115
|
+
return entry;
|
|
116
|
+
});
|
|
117
|
+
if (new Set(parsed).size !==
|
|
118
|
+
parsed.length) {
|
|
119
|
+
throw new InvalidConfigurationError(path +
|
|
120
|
+
" must not contain duplicates.");
|
|
121
|
+
}
|
|
122
|
+
return parsed;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Parses generic logical-release/drive capabilities.
|
|
126
|
+
*
|
|
127
|
+
* The first schema deliberately models non-overlapping ordinary still
|
|
128
|
+
* exposures only. Buffer/media/thermal slowdown and pre-release capture remain
|
|
129
|
+
* outside this profile.
|
|
130
|
+
*/
|
|
131
|
+
export function parseGenericReleaseCapabilityProfile(value) {
|
|
132
|
+
const record = requireRecord(value, "genericReleaseCapabilityProfile");
|
|
133
|
+
if (record.schemaVersion !==
|
|
134
|
+
GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION) {
|
|
135
|
+
throw new InvalidConfigurationError('genericReleaseCapabilityProfile.schemaVersion must be "' +
|
|
136
|
+
GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION +
|
|
137
|
+
'".');
|
|
138
|
+
}
|
|
139
|
+
if (record.scientificStatus !==
|
|
140
|
+
"approximation") {
|
|
141
|
+
throw new InvalidConfigurationError('genericReleaseCapabilityProfile.scientificStatus must be "approximation".');
|
|
142
|
+
}
|
|
143
|
+
if (record.overlappingOrdinaryStillExposures !==
|
|
144
|
+
false) {
|
|
145
|
+
throw new InvalidConfigurationError("genericReleaseCapabilityProfile.overlappingOrdinaryStillExposures must be false in schema 0.1.0.");
|
|
146
|
+
}
|
|
147
|
+
const exposureBracketing = requireRecord(record.exposureBracketing, "genericReleaseCapabilityProfile.exposureBracketing");
|
|
148
|
+
const focusBracketing = requireRecord(record.focusBracketing, "genericReleaseCapabilityProfile.focusBracketing");
|
|
149
|
+
const exposureAvailability = parseFact(exposureBracketing.availability, "genericReleaseCapabilityProfile.exposureBracketing.availability", parseAvailability);
|
|
150
|
+
const axes = parseBracketAxes(exposureBracketing.supportedAxes, "genericReleaseCapabilityProfile.exposureBracketing.supportedAxes");
|
|
151
|
+
if (exposureAvailability.value !==
|
|
152
|
+
"supported" &&
|
|
153
|
+
axes.length > 0) {
|
|
154
|
+
throw new InvalidConfigurationError("Unsupported/unknown exposure bracketing must not declare supported axes.");
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
schemaVersion: GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION,
|
|
158
|
+
profileId: requireNonEmptyString(record.profileId, "genericReleaseCapabilityProfile.profileId"),
|
|
159
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "genericReleaseCapabilityProfile.profileVersion"),
|
|
160
|
+
scientificStatus: "approximation",
|
|
161
|
+
evidence: parseEvidenceList(record.evidence, "genericReleaseCapabilityProfile.evidence"),
|
|
162
|
+
supportedDriveModes: parseFact(record.supportedDriveModes, "genericReleaseCapabilityProfile.supportedDriveModes", parseDriveModes),
|
|
163
|
+
maximumLogicalFramesPerSequence: parseFact(record.maximumLogicalFramesPerSequence, "genericReleaseCapabilityProfile.maximumLogicalFramesPerSequence", requirePositiveSafeInteger),
|
|
164
|
+
maximumCadenceFps: parseFact(record.maximumCadenceFps, "genericReleaseCapabilityProfile.maximumCadenceFps", requirePositiveFinite),
|
|
165
|
+
minimumInterFrameGapSeconds: parseFact(record.minimumInterFrameGapSeconds, "genericReleaseCapabilityProfile.minimumInterFrameGapSeconds", requireNonNegativeFinite),
|
|
166
|
+
overlappingOrdinaryStillExposures: false,
|
|
167
|
+
exposureBracketing: {
|
|
168
|
+
availability: exposureAvailability,
|
|
169
|
+
supportedAxes: axes
|
|
170
|
+
},
|
|
171
|
+
focusBracketing: {
|
|
172
|
+
availability: parseFact(focusBracketing.availability, "genericReleaseCapabilityProfile.focusBracketing.availability", parseAvailability)
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=release-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-capabilities.js","sourceRoot":"","sources":["../../src/equipment/release-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Resolves shutter-duration control semantics to a concrete positive elapsed duration before physical
|
|
4
|
+
* exposure integration. Bulb and Time are control behaviors only. Neither implies a shutter mechanism,
|
|
5
|
+
* exposure-boundary topology, tripod, stabilization state, long exposure NR, or temperature model.
|
|
6
|
+
* Binds a resolved duration into the authoritative #12 exposure-window input. The existing shutter
|
|
7
|
+
* mechanism/opening/closing schedules remain untouched. Only the seconds-valued nominal duration is
|
|
8
|
+
* supplied here.
|
|
9
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
10
|
+
*/
|
|
11
|
+
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
12
|
+
import type { CalculateCaptureExposureWindowsInput } from "../sensor/exposure-window.js";
|
|
13
|
+
export declare const EXPOSURE_DURATION_CONTROL_VERSION: "0.1.0";
|
|
14
|
+
export type ExposureDurationControl = {
|
|
15
|
+
kind: "fixed-duration";
|
|
16
|
+
durationSeconds: number;
|
|
17
|
+
} | {
|
|
18
|
+
kind: "bulb";
|
|
19
|
+
timeReference: "control-monotonic-seconds";
|
|
20
|
+
pressSeconds: number;
|
|
21
|
+
releaseSeconds?: number;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "time";
|
|
24
|
+
timeReference: "control-monotonic-seconds";
|
|
25
|
+
startSeconds: number;
|
|
26
|
+
stopSeconds?: number;
|
|
27
|
+
};
|
|
28
|
+
interface ExposureDurationControlResolutionBase {
|
|
29
|
+
version: typeof EXPOSURE_DURATION_CONTROL_VERSION;
|
|
30
|
+
controlKind: ExposureDurationControl["kind"];
|
|
31
|
+
shutterMechanismInferred: false;
|
|
32
|
+
exposureBoundaryTopologyInferred: false;
|
|
33
|
+
tripodSupportInferred: false;
|
|
34
|
+
stabilizationStateInferred: false;
|
|
35
|
+
longExposureNoiseReductionInferred: false;
|
|
36
|
+
sensorTemperatureBehaviorInferred: false;
|
|
37
|
+
}
|
|
38
|
+
export type ExposureDurationControlResolution = (ExposureDurationControlResolutionBase & {
|
|
39
|
+
status: "resolved";
|
|
40
|
+
durationSeconds: number;
|
|
41
|
+
physicalExposureIntegrationAuthorized: true;
|
|
42
|
+
}) | (ExposureDurationControlResolutionBase & {
|
|
43
|
+
status: "active";
|
|
44
|
+
durationSeconds: null;
|
|
45
|
+
physicalExposureIntegrationAuthorized: false;
|
|
46
|
+
waitingFor: "bulb-release" | "time-stop";
|
|
47
|
+
});
|
|
48
|
+
export interface BindResolvedExposureDurationToCaptureExposureInput {
|
|
49
|
+
resolution: Extract<ExposureDurationControlResolution, {
|
|
50
|
+
status: "resolved";
|
|
51
|
+
}>;
|
|
52
|
+
durationEvidence: readonly EvidenceProvenance[];
|
|
53
|
+
exposureWindowInput: Omit<CalculateCaptureExposureWindowsInput, "nominalExposureDurationSeconds">;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolves shutter-duration control semantics to a concrete positive elapsed
|
|
57
|
+
* duration before physical exposure integration.
|
|
58
|
+
*
|
|
59
|
+
* Bulb and Time are control behaviors only. Neither implies a shutter
|
|
60
|
+
* mechanism, exposure-boundary topology, tripod, stabilization state, long
|
|
61
|
+
* exposure NR, or temperature model.
|
|
62
|
+
*/
|
|
63
|
+
export declare function resolveExposureDurationControl(control: ExposureDurationControl): ExposureDurationControlResolution;
|
|
64
|
+
/**
|
|
65
|
+
* Binds a resolved duration into the authoritative #12 exposure-window input.
|
|
66
|
+
*
|
|
67
|
+
* The existing shutter mechanism/opening/closing schedules remain untouched.
|
|
68
|
+
* Only the seconds-valued nominal duration is supplied here.
|
|
69
|
+
*/
|
|
70
|
+
export declare function bindResolvedExposureDurationToCaptureExposureInput(input: BindResolvedExposureDurationToCaptureExposureInput): CalculateCaptureExposureWindowsInput;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=exposure-duration-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposure-duration-control.d.ts","sourceRoot":"","sources":["../../src/exposure/exposure-duration-control.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,oCAAoC,EACrC,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,iCAAiC,EAC5C,OAAgB,CAAC;AAEnB,MAAM,MAAM,uBAAuB,GAC/B;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EACX,2BAA2B,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EACX,2BAA2B,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,UAAU,qCAAqC;IAC7C,OAAO,EACL,OAAO,iCAAiC,CAAC;IAC3C,WAAW,EACT,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,EAAE,KAAK,CAAC;IAChC,gCAAgC,EAC9B,KAAK,CAAC;IACR,qBAAqB,EAAE,KAAK,CAAC;IAC7B,0BAA0B,EAAE,KAAK,CAAC;IAClC,kCAAkC,EAChC,KAAK,CAAC;IACR,iCAAiC,EAC/B,KAAK,CAAC;CACT;AAED,MAAM,MAAM,iCAAiC,GACzC,CAAC,qCAAqC,GAAG;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC,EACnC,IAAI,CAAC;CACR,CAAC,GACF,CAAC,qCAAqC,GAAG;IACvC,MAAM,EAAE,QAAQ,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC;IACtB,qCAAqC,EACnC,KAAK,CAAC;IACR,UAAU,EACN,cAAc,GACd,WAAW,CAAC;CACjB,CAAC,CAAC;AAEP,MAAM,WAAW,kDAAkD;IACjE,UAAU,EACR,OAAO,CACL,iCAAiC,EACjC;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CACvB,CAAC;IACJ,gBAAgB,EACd,SAAS,kBAAkB,EAAE,CAAC;IAChC,mBAAmB,EACjB,IAAI,CACF,oCAAoC,EACpC,gCAAgC,CACjC,CAAC;CACL;AA4FD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAC/B,iCAAiC,CAwGnC;AAED;;;;;GAKG;AACH,wBAAgB,kDAAkD,CAChE,KAAK,EACH,kDAAkD,GACnD,oCAAoC,CA0DtC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Resolves shutter-duration control semantics to a concrete positive elapsed duration before physical
|
|
5
|
+
* exposure integration. Bulb and Time are control behaviors only. Neither implies a shutter mechanism,
|
|
6
|
+
* exposure-boundary topology, tripod, stabilization state, long exposure NR, or temperature model.
|
|
7
|
+
* Binds a resolved duration into the authoritative #12 exposure-window input. The existing shutter
|
|
8
|
+
* mechanism/opening/closing schedules remain untouched. Only the seconds-valued nominal duration is
|
|
9
|
+
* supplied here.
|
|
10
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
11
|
+
*/
|
|
12
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
13
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
14
|
+
export const EXPOSURE_DURATION_CONTROL_VERSION = "0.1.0";
|
|
15
|
+
function requireFiniteSeconds(value, path) {
|
|
16
|
+
if (typeof value !== "number" ||
|
|
17
|
+
!Number.isFinite(value)) {
|
|
18
|
+
throw new InvalidScientificInputError(path + " must be finite.");
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function requirePositiveSeconds(value, path) {
|
|
23
|
+
const parsed = requireFiniteSeconds(value, path);
|
|
24
|
+
if (parsed <= 0) {
|
|
25
|
+
throw new InvalidScientificInputError(path +
|
|
26
|
+
" must be greater than zero.");
|
|
27
|
+
}
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
function resolved(kind, durationSeconds) {
|
|
31
|
+
return {
|
|
32
|
+
version: EXPOSURE_DURATION_CONTROL_VERSION,
|
|
33
|
+
controlKind: kind,
|
|
34
|
+
status: "resolved",
|
|
35
|
+
durationSeconds,
|
|
36
|
+
physicalExposureIntegrationAuthorized: true,
|
|
37
|
+
shutterMechanismInferred: false,
|
|
38
|
+
exposureBoundaryTopologyInferred: false,
|
|
39
|
+
tripodSupportInferred: false,
|
|
40
|
+
stabilizationStateInferred: false,
|
|
41
|
+
longExposureNoiseReductionInferred: false,
|
|
42
|
+
sensorTemperatureBehaviorInferred: false
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function active(kind) {
|
|
46
|
+
return {
|
|
47
|
+
version: EXPOSURE_DURATION_CONTROL_VERSION,
|
|
48
|
+
controlKind: kind,
|
|
49
|
+
status: "active",
|
|
50
|
+
durationSeconds: null,
|
|
51
|
+
physicalExposureIntegrationAuthorized: false,
|
|
52
|
+
waitingFor: kind === "bulb"
|
|
53
|
+
? "bulb-release"
|
|
54
|
+
: "time-stop",
|
|
55
|
+
shutterMechanismInferred: false,
|
|
56
|
+
exposureBoundaryTopologyInferred: false,
|
|
57
|
+
tripodSupportInferred: false,
|
|
58
|
+
stabilizationStateInferred: false,
|
|
59
|
+
longExposureNoiseReductionInferred: false,
|
|
60
|
+
sensorTemperatureBehaviorInferred: false
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolves shutter-duration control semantics to a concrete positive elapsed
|
|
65
|
+
* duration before physical exposure integration.
|
|
66
|
+
*
|
|
67
|
+
* Bulb and Time are control behaviors only. Neither implies a shutter
|
|
68
|
+
* mechanism, exposure-boundary topology, tripod, stabilization state, long
|
|
69
|
+
* exposure NR, or temperature model.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveExposureDurationControl(control) {
|
|
72
|
+
if (typeof control !== "object" ||
|
|
73
|
+
control === null) {
|
|
74
|
+
throw new InvalidScientificInputError("control must be an object.");
|
|
75
|
+
}
|
|
76
|
+
if (control.kind ===
|
|
77
|
+
"fixed-duration") {
|
|
78
|
+
return resolved("fixed-duration", requirePositiveSeconds(control.durationSeconds, "control.durationSeconds"));
|
|
79
|
+
}
|
|
80
|
+
if (control.kind === "bulb") {
|
|
81
|
+
if (control.timeReference !==
|
|
82
|
+
"control-monotonic-seconds") {
|
|
83
|
+
throw new InvalidScientificInputError('Bulb control timeReference must be "control-monotonic-seconds".');
|
|
84
|
+
}
|
|
85
|
+
const start = requireFiniteSeconds(control.pressSeconds, "control.pressSeconds");
|
|
86
|
+
if (control.releaseSeconds ===
|
|
87
|
+
undefined) {
|
|
88
|
+
return active("bulb");
|
|
89
|
+
}
|
|
90
|
+
const stop = requireFiniteSeconds(control.releaseSeconds, "control.releaseSeconds");
|
|
91
|
+
const duration = stop - start;
|
|
92
|
+
if (duration <= 0) {
|
|
93
|
+
throw new InvalidScientificInputError("Bulb releaseSeconds must be greater than pressSeconds.");
|
|
94
|
+
}
|
|
95
|
+
return resolved("bulb", duration);
|
|
96
|
+
}
|
|
97
|
+
if (control.kind === "time") {
|
|
98
|
+
if (control.timeReference !==
|
|
99
|
+
"control-monotonic-seconds") {
|
|
100
|
+
throw new InvalidScientificInputError('Time control timeReference must be "control-monotonic-seconds".');
|
|
101
|
+
}
|
|
102
|
+
const start = requireFiniteSeconds(control.startSeconds, "control.startSeconds");
|
|
103
|
+
if (control.stopSeconds ===
|
|
104
|
+
undefined) {
|
|
105
|
+
return active("time");
|
|
106
|
+
}
|
|
107
|
+
const stop = requireFiniteSeconds(control.stopSeconds, "control.stopSeconds");
|
|
108
|
+
const duration = stop - start;
|
|
109
|
+
if (duration <= 0) {
|
|
110
|
+
throw new InvalidScientificInputError("Time stopSeconds must be greater than startSeconds.");
|
|
111
|
+
}
|
|
112
|
+
return resolved("time", duration);
|
|
113
|
+
}
|
|
114
|
+
throw new InvalidScientificInputError("control.kind is invalid.");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Binds a resolved duration into the authoritative #12 exposure-window input.
|
|
118
|
+
*
|
|
119
|
+
* The existing shutter mechanism/opening/closing schedules remain untouched.
|
|
120
|
+
* Only the seconds-valued nominal duration is supplied here.
|
|
121
|
+
*/
|
|
122
|
+
export function bindResolvedExposureDurationToCaptureExposureInput(input) {
|
|
123
|
+
const resolution = input.resolution;
|
|
124
|
+
if (resolution.version !==
|
|
125
|
+
EXPOSURE_DURATION_CONTROL_VERSION ||
|
|
126
|
+
resolution.status !==
|
|
127
|
+
"resolved" ||
|
|
128
|
+
resolution
|
|
129
|
+
.physicalExposureIntegrationAuthorized !==
|
|
130
|
+
true) {
|
|
131
|
+
throw new InvalidScientificInputError("resolution must be a resolved exposure-duration control result authorized for physical integration.");
|
|
132
|
+
}
|
|
133
|
+
const durationSeconds = requirePositiveSeconds(resolution.durationSeconds, "resolution.durationSeconds");
|
|
134
|
+
if (resolution.shutterMechanismInferred !==
|
|
135
|
+
false ||
|
|
136
|
+
resolution
|
|
137
|
+
.exposureBoundaryTopologyInferred !==
|
|
138
|
+
false ||
|
|
139
|
+
resolution.tripodSupportInferred !==
|
|
140
|
+
false ||
|
|
141
|
+
resolution
|
|
142
|
+
.stabilizationStateInferred !==
|
|
143
|
+
false ||
|
|
144
|
+
resolution
|
|
145
|
+
.longExposureNoiseReductionInferred !==
|
|
146
|
+
false ||
|
|
147
|
+
resolution
|
|
148
|
+
.sensorTemperatureBehaviorInferred !==
|
|
149
|
+
false) {
|
|
150
|
+
throw new InvalidScientificInputError("Resolved exposure duration must not carry inferred downstream camera/long-exposure state.");
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
...input.exposureWindowInput,
|
|
154
|
+
nominalExposureDurationSeconds: {
|
|
155
|
+
value: durationSeconds,
|
|
156
|
+
unit: "s",
|
|
157
|
+
evidence: parseEvidenceList(input.durationEvidence, "durationEvidence")
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=exposure-duration-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposure-duration-control.js","sourceRoot":"","sources":["../../src/exposure/exposure-duration-control.ts"],"names":[],"mappings":"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"}
|