@photivra/engine 0.5.1 → 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 +218 -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 +157 -56
- 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 +101 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -7
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +76 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +111 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
- package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
- package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
- package/dist/motion/capture-rotation-trajectory.js +168 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -0
- 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 +23 -4
- 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 +22 -2
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +101 -23
- 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 +32 -11
- 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 +212 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.js +437 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
- 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 +157 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -0
- package/dist/sensor/capture-mode.js +447 -0
- package/dist/sensor/capture-mode.js.map +1 -0
- package/dist/sensor/color-sampling.d.ts +133 -0
- package/dist/sensor/color-sampling.d.ts.map +1 -0
- package/dist/sensor/color-sampling.js +245 -0
- package/dist/sensor/color-sampling.js.map +1 -0
- 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 +117 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -0
- package/dist/sensor/exposure-window.js +305 -0
- package/dist/sensor/exposure-window.js.map +1 -0
- 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 +132 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -0
- package/dist/sensor/optical-stack.js +303 -0
- package/dist/sensor/optical-stack.js.map +1 -0
- 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 +123 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
- package/dist/sensor/readout-exposure-linkage.js +222 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -0
- package/dist/sensor/readout-timing.d.ts +137 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -0
- package/dist/sensor/readout-timing.js +243 -0
- package/dist/sensor/readout-timing.js.map +1 -0
- 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 +154 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -0
- package/dist/sensor/sampling-aperture.js +388 -0
- package/dist/sensor/sampling-aperture.js.map +1 -0
- 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 +171 -0
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
- package/dist/sensor/spatial-sample-reduction.js +345 -0
- package/dist/sensor/spatial-sample-reduction.js.map +1 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
- package/dist/sensor/spatial-sampling-quadrature.js +224 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
- 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 +150 -23
- package/docs/AUTOMATION_COORDINATION.md +190 -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 +105 -9
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +145 -1
- 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 +5604 -331
- 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 +18 -4
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Parses a capture-mode profile without inferring sensor physics from output resolution or marketing
|
|
5
|
+
* mode names. The profile is intentionally orthogonal: acquisition frame sequence, per-frame sampling,
|
|
6
|
+
* optional inter-frame sensor shift, reconstruction stages, processed raster and downstream
|
|
7
|
+
* dependencies are independent axes.
|
|
8
|
+
* Resolves one capture mode against the selected sensor's native effective image-sampling raster.
|
|
9
|
+
* Resolution changes do not mutate physical sensor geometry. The returned processed raster is
|
|
10
|
+
* pre-output geometry and must not be used to infer crop factor, field of view or physical photosite
|
|
11
|
+
* count.
|
|
12
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
13
|
+
* limits.
|
|
14
|
+
*/
|
|
15
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
16
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
17
|
+
import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
|
|
18
|
+
const COMBINATION_DOMAINS = new Set([
|
|
19
|
+
"charge-domain",
|
|
20
|
+
"pre-conversion-analog",
|
|
21
|
+
"post-conversion-digital"
|
|
22
|
+
]);
|
|
23
|
+
const RECONSTRUCTION_STAGES = new Set([
|
|
24
|
+
"remosaic",
|
|
25
|
+
"pixel-shift-combination",
|
|
26
|
+
"multi-frame-computational-combination"
|
|
27
|
+
]);
|
|
28
|
+
const DEPENDENCIES = new Set([
|
|
29
|
+
"color-sampling-model",
|
|
30
|
+
"mode-specific-readout-timing",
|
|
31
|
+
"radiometric-calibration",
|
|
32
|
+
"inter-frame-registration"
|
|
33
|
+
]);
|
|
34
|
+
function requireRecord(value, path) {
|
|
35
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
36
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function requireNonEmptyString(value, path) {
|
|
41
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
42
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function requirePositiveSafeIntegerValue(value, path) {
|
|
47
|
+
if (typeof value !== "number" ||
|
|
48
|
+
!Number.isSafeInteger(value) ||
|
|
49
|
+
value <= 0) {
|
|
50
|
+
throw new InvalidConfigurationError(path + " must be a positive safe integer.");
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function parseIntegerFact(value, path) {
|
|
55
|
+
const record = requireRecord(value, path);
|
|
56
|
+
return {
|
|
57
|
+
value: requirePositiveSafeIntegerValue(record.value, path + ".value"),
|
|
58
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function parseRasterDimensions(value, path) {
|
|
62
|
+
const record = requireRecord(value, path);
|
|
63
|
+
const pixelWidth = requirePositiveSafeIntegerValue(record.pixelWidth, path + ".pixelWidth");
|
|
64
|
+
const pixelHeight = requirePositiveSafeIntegerValue(record.pixelHeight, path + ".pixelHeight");
|
|
65
|
+
const total = pixelWidth * pixelHeight;
|
|
66
|
+
if (!Number.isSafeInteger(total)) {
|
|
67
|
+
throw new InvalidConfigurationError(path + " total sample count must be a safe integer.");
|
|
68
|
+
}
|
|
69
|
+
return { pixelWidth, pixelHeight };
|
|
70
|
+
}
|
|
71
|
+
function parseRasterFact(value, path) {
|
|
72
|
+
const record = requireRecord(value, path);
|
|
73
|
+
return {
|
|
74
|
+
value: parseRasterDimensions(record.value, path + ".value"),
|
|
75
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function parseCombinationDomainFact(value, path) {
|
|
79
|
+
const record = requireRecord(value, path);
|
|
80
|
+
if (typeof record.value !== "string" ||
|
|
81
|
+
!COMBINATION_DOMAINS.has(record.value)) {
|
|
82
|
+
throw new InvalidConfigurationError(path + ".value is invalid.");
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
value: record.value,
|
|
86
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function parseAcquisition(value, path) {
|
|
90
|
+
const record = requireRecord(value, path);
|
|
91
|
+
if (record.kind === "single-frame") {
|
|
92
|
+
if (record.frameCount !== undefined ||
|
|
93
|
+
record.minimumFrameCount !== undefined ||
|
|
94
|
+
record.maximumFrameCount !== undefined ||
|
|
95
|
+
record.evidence !== undefined) {
|
|
96
|
+
throw new InvalidConfigurationError(path +
|
|
97
|
+
" single-frame acquisition must omit frame-count and evidence fields.");
|
|
98
|
+
}
|
|
99
|
+
return { kind: "single-frame" };
|
|
100
|
+
}
|
|
101
|
+
if (record.kind === "fixed-multi-frame") {
|
|
102
|
+
if (record.minimumFrameCount !== undefined ||
|
|
103
|
+
record.maximumFrameCount !== undefined ||
|
|
104
|
+
record.evidence !== undefined) {
|
|
105
|
+
throw new InvalidConfigurationError(path +
|
|
106
|
+
" fixed-multi-frame acquisition must use frameCount only.");
|
|
107
|
+
}
|
|
108
|
+
const frameCount = parseIntegerFact(record.frameCount, path + ".frameCount");
|
|
109
|
+
if (frameCount.value < 2) {
|
|
110
|
+
throw new InvalidConfigurationError(path +
|
|
111
|
+
".frameCount.value must be at least 2 for fixed-multi-frame acquisition.");
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
kind: "fixed-multi-frame",
|
|
115
|
+
frameCount
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (record.kind === "variable-multi-frame") {
|
|
119
|
+
if (record.frameCount !== undefined) {
|
|
120
|
+
throw new InvalidConfigurationError(path +
|
|
121
|
+
".frameCount must be omitted for variable-multi-frame acquisition.");
|
|
122
|
+
}
|
|
123
|
+
const evidence = parseEvidenceList(record.evidence, path + ".evidence");
|
|
124
|
+
const minimumFrameCount = record.minimumFrameCount === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: parseIntegerFact(record.minimumFrameCount, path + ".minimumFrameCount");
|
|
127
|
+
const maximumFrameCount = record.maximumFrameCount === undefined
|
|
128
|
+
? undefined
|
|
129
|
+
: parseIntegerFact(record.maximumFrameCount, path + ".maximumFrameCount");
|
|
130
|
+
if (minimumFrameCount !== undefined &&
|
|
131
|
+
minimumFrameCount.value < 2) {
|
|
132
|
+
throw new InvalidConfigurationError(path +
|
|
133
|
+
".minimumFrameCount.value must be at least 2 for variable-multi-frame acquisition.");
|
|
134
|
+
}
|
|
135
|
+
if (maximumFrameCount !== undefined &&
|
|
136
|
+
maximumFrameCount.value < 2) {
|
|
137
|
+
throw new InvalidConfigurationError(path +
|
|
138
|
+
".maximumFrameCount.value must be at least 2 for variable-multi-frame acquisition.");
|
|
139
|
+
}
|
|
140
|
+
if (minimumFrameCount !== undefined &&
|
|
141
|
+
maximumFrameCount !== undefined &&
|
|
142
|
+
minimumFrameCount.value > maximumFrameCount.value) {
|
|
143
|
+
throw new InvalidConfigurationError(path +
|
|
144
|
+
".minimumFrameCount.value must not exceed maximumFrameCount.value.");
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
kind: "variable-multi-frame",
|
|
148
|
+
evidence,
|
|
149
|
+
...(minimumFrameCount === undefined
|
|
150
|
+
? {}
|
|
151
|
+
: { minimumFrameCount }),
|
|
152
|
+
...(maximumFrameCount === undefined
|
|
153
|
+
? {}
|
|
154
|
+
: { maximumFrameCount })
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
158
|
+
}
|
|
159
|
+
function parsePerFrameSampling(value, path) {
|
|
160
|
+
const record = requireRecord(value, path);
|
|
161
|
+
if (record.kind === "native-effective-raster") {
|
|
162
|
+
if (record.groupWidthSamples !== undefined ||
|
|
163
|
+
record.groupHeightSamples !== undefined ||
|
|
164
|
+
record.combinationDomain !== undefined ||
|
|
165
|
+
record.raster !== undefined) {
|
|
166
|
+
throw new InvalidConfigurationError(path +
|
|
167
|
+
" native-effective-raster sampling must omit grouping/raster fields.");
|
|
168
|
+
}
|
|
169
|
+
return { kind: "native-effective-raster" };
|
|
170
|
+
}
|
|
171
|
+
if (record.kind === "grouped-native-samples") {
|
|
172
|
+
if (record.raster !== undefined) {
|
|
173
|
+
throw new InvalidConfigurationError(path +
|
|
174
|
+
".raster must be omitted for grouped-native-samples sampling.");
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
kind: "grouped-native-samples",
|
|
178
|
+
groupWidthSamples: parseIntegerFact(record.groupWidthSamples, path + ".groupWidthSamples"),
|
|
179
|
+
groupHeightSamples: parseIntegerFact(record.groupHeightSamples, path + ".groupHeightSamples"),
|
|
180
|
+
...(record.combinationDomain === undefined
|
|
181
|
+
? {}
|
|
182
|
+
: {
|
|
183
|
+
combinationDomain: parseCombinationDomainFact(record.combinationDomain, path + ".combinationDomain")
|
|
184
|
+
})
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (record.kind === "declared-effective-raster") {
|
|
188
|
+
if (record.groupWidthSamples !== undefined ||
|
|
189
|
+
record.groupHeightSamples !== undefined ||
|
|
190
|
+
record.combinationDomain !== undefined) {
|
|
191
|
+
throw new InvalidConfigurationError(path +
|
|
192
|
+
" declared-effective-raster sampling must omit grouping fields.");
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
kind: "declared-effective-raster",
|
|
196
|
+
raster: parseRasterFact(record.raster, path + ".raster")
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
200
|
+
}
|
|
201
|
+
function parseOffsetsFact(value, path) {
|
|
202
|
+
const record = requireRecord(value, path);
|
|
203
|
+
if (!Array.isArray(record.value) ||
|
|
204
|
+
record.value.length === 0) {
|
|
205
|
+
throw new InvalidConfigurationError(path + ".value must be a non-empty array.");
|
|
206
|
+
}
|
|
207
|
+
const offsets = record.value.map((entry, index) => {
|
|
208
|
+
const item = requireRecord(entry, path + ".value[" + index + "]");
|
|
209
|
+
if (typeof item.x !== "number" ||
|
|
210
|
+
!Number.isFinite(item.x) ||
|
|
211
|
+
typeof item.y !== "number" ||
|
|
212
|
+
!Number.isFinite(item.y)) {
|
|
213
|
+
throw new InvalidConfigurationError(path +
|
|
214
|
+
".value[" +
|
|
215
|
+
index +
|
|
216
|
+
"] x/y must be finite numbers.");
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
x: item.x,
|
|
220
|
+
y: item.y
|
|
221
|
+
};
|
|
222
|
+
});
|
|
223
|
+
return {
|
|
224
|
+
value: offsets,
|
|
225
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence")
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function parseReconstructionStages(value, path) {
|
|
229
|
+
if (!Array.isArray(value)) {
|
|
230
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
231
|
+
}
|
|
232
|
+
const stages = value.map((entry, index) => {
|
|
233
|
+
const record = requireRecord(entry, path + "[" + index + "]");
|
|
234
|
+
if (typeof record.value !== "string" ||
|
|
235
|
+
!RECONSTRUCTION_STAGES.has(record.value)) {
|
|
236
|
+
throw new InvalidConfigurationError(path + "[" + index + "].value is invalid.");
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
value: record.value,
|
|
240
|
+
evidence: parseEvidenceList(record.evidence, path + "[" + index + "].evidence")
|
|
241
|
+
};
|
|
242
|
+
});
|
|
243
|
+
const values = stages.map((stage) => stage.value);
|
|
244
|
+
if (new Set(values).size !== values.length) {
|
|
245
|
+
throw new InvalidConfigurationError(path + " must not contain duplicate stages.");
|
|
246
|
+
}
|
|
247
|
+
return stages;
|
|
248
|
+
}
|
|
249
|
+
function parseDependencies(value, path) {
|
|
250
|
+
if (!Array.isArray(value)) {
|
|
251
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
252
|
+
}
|
|
253
|
+
const dependencies = value.map((entry, index) => {
|
|
254
|
+
if (typeof entry !== "string" ||
|
|
255
|
+
!DEPENDENCIES.has(entry)) {
|
|
256
|
+
throw new InvalidConfigurationError(path + "[" + index + "] is invalid.");
|
|
257
|
+
}
|
|
258
|
+
return entry;
|
|
259
|
+
});
|
|
260
|
+
if (new Set(dependencies).size !== dependencies.length) {
|
|
261
|
+
throw new InvalidConfigurationError(path + " must not contain duplicates.");
|
|
262
|
+
}
|
|
263
|
+
return dependencies;
|
|
264
|
+
}
|
|
265
|
+
function parseModeDefinition(value, path) {
|
|
266
|
+
const record = requireRecord(value, path);
|
|
267
|
+
const modeId = requireNonEmptyString(record.modeId, path + ".modeId");
|
|
268
|
+
const acquisition = parseAcquisition(record.acquisition, path + ".acquisition");
|
|
269
|
+
const interFrameSensorOffsetsNativeSamples = record.interFrameSensorOffsetsNativeSamples === undefined
|
|
270
|
+
? undefined
|
|
271
|
+
: parseOffsetsFact(record.interFrameSensorOffsetsNativeSamples, path + ".interFrameSensorOffsetsNativeSamples");
|
|
272
|
+
if (interFrameSensorOffsetsNativeSamples !== undefined &&
|
|
273
|
+
acquisition.kind !== "fixed-multi-frame") {
|
|
274
|
+
throw new InvalidConfigurationError(path +
|
|
275
|
+
".interFrameSensorOffsetsNativeSamples is supported only for fixed-multi-frame acquisition.");
|
|
276
|
+
}
|
|
277
|
+
if (interFrameSensorOffsetsNativeSamples !== undefined &&
|
|
278
|
+
acquisition.kind === "fixed-multi-frame" &&
|
|
279
|
+
interFrameSensorOffsetsNativeSamples.value.length !==
|
|
280
|
+
acquisition.frameCount.value) {
|
|
281
|
+
throw new InvalidConfigurationError(path +
|
|
282
|
+
".interFrameSensorOffsetsNativeSamples.value length must equal acquisition.frameCount.value.");
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
modeId,
|
|
286
|
+
evidence: parseEvidenceList(record.evidence, path + ".evidence"),
|
|
287
|
+
acquisition,
|
|
288
|
+
perFrameSampling: parsePerFrameSampling(record.perFrameSampling, path + ".perFrameSampling"),
|
|
289
|
+
...(interFrameSensorOffsetsNativeSamples === undefined
|
|
290
|
+
? {}
|
|
291
|
+
: { interFrameSensorOffsetsNativeSamples }),
|
|
292
|
+
reconstructionStages: record.reconstructionStages === undefined
|
|
293
|
+
? []
|
|
294
|
+
: parseReconstructionStages(record.reconstructionStages, path + ".reconstructionStages"),
|
|
295
|
+
processedImageRaster: parseRasterFact(record.processedImageRaster, path + ".processedImageRaster"),
|
|
296
|
+
dependencies: record.dependencies === undefined
|
|
297
|
+
? []
|
|
298
|
+
: parseDependencies(record.dependencies, path + ".dependencies")
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Parses a capture-mode profile without inferring sensor physics from output
|
|
303
|
+
* resolution or marketing mode names.
|
|
304
|
+
*
|
|
305
|
+
* The profile is intentionally orthogonal: acquisition frame sequence,
|
|
306
|
+
* per-frame sampling, optional inter-frame sensor shift, reconstruction stages,
|
|
307
|
+
* processed raster and downstream dependencies are independent axes.
|
|
308
|
+
*/
|
|
309
|
+
export function parseCaptureModeProfile(value) {
|
|
310
|
+
const profile = requireRecord(value, "captureModes");
|
|
311
|
+
if (profile.schemaVersion !== "0.1.0") {
|
|
312
|
+
throw new InvalidConfigurationError('captureModes.schemaVersion must be "0.1.0".');
|
|
313
|
+
}
|
|
314
|
+
if (!Array.isArray(profile.modes) ||
|
|
315
|
+
profile.modes.length === 0) {
|
|
316
|
+
throw new InvalidConfigurationError("captureModes.modes must be a non-empty array.");
|
|
317
|
+
}
|
|
318
|
+
const modes = profile.modes.map((mode, index) => parseModeDefinition(mode, "captureModes.modes[" + index + "]"));
|
|
319
|
+
const ids = modes.map((mode) => mode.modeId);
|
|
320
|
+
if (new Set(ids).size !== ids.length) {
|
|
321
|
+
throw new InvalidConfigurationError("captureModes.modes must not contain duplicate modeId values.");
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
schemaVersion: "0.1.0",
|
|
325
|
+
modes
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
function validateNativeRaster(raster) {
|
|
329
|
+
requirePositiveInteger("nativeRaster.pixelWidth", raster.pixelWidth);
|
|
330
|
+
requirePositiveInteger("nativeRaster.pixelHeight", raster.pixelHeight);
|
|
331
|
+
const total = raster.pixelWidth * raster.pixelHeight;
|
|
332
|
+
if (!Number.isSafeInteger(total)) {
|
|
333
|
+
throw new InvalidScientificInputError("nativeRaster total image-sample count must be a safe integer.");
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
function resolvePerFrameSampling(sampling, nativeRaster) {
|
|
337
|
+
if (sampling.kind === "native-effective-raster") {
|
|
338
|
+
return {
|
|
339
|
+
kind: "native-effective-raster",
|
|
340
|
+
raster: { ...nativeRaster }
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
if (sampling.kind === "declared-effective-raster") {
|
|
344
|
+
return {
|
|
345
|
+
kind: "declared-effective-raster",
|
|
346
|
+
raster: {
|
|
347
|
+
value: { ...sampling.raster.value },
|
|
348
|
+
evidence: sampling.raster.evidence
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
const groupWidth = sampling.groupWidthSamples.value;
|
|
353
|
+
const groupHeight = sampling.groupHeightSamples.value;
|
|
354
|
+
if (nativeRaster.pixelWidth % groupWidth !== 0 ||
|
|
355
|
+
nativeRaster.pixelHeight % groupHeight !== 0) {
|
|
356
|
+
throw new InvalidScientificInputError("Grouped native sampling requires nativeRaster dimensions to be exactly divisible by the declared grouping factors.");
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
kind: "grouped-native-samples",
|
|
360
|
+
raster: {
|
|
361
|
+
pixelWidth: nativeRaster.pixelWidth / groupWidth,
|
|
362
|
+
pixelHeight: nativeRaster.pixelHeight / groupHeight
|
|
363
|
+
},
|
|
364
|
+
groupWidthSamples: sampling.groupWidthSamples,
|
|
365
|
+
groupHeightSamples: sampling.groupHeightSamples,
|
|
366
|
+
...(sampling.combinationDomain === undefined
|
|
367
|
+
? {}
|
|
368
|
+
: {
|
|
369
|
+
combinationDomain: sampling.combinationDomain
|
|
370
|
+
})
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Resolves one capture mode against the selected sensor's native effective
|
|
375
|
+
* image-sampling raster.
|
|
376
|
+
*
|
|
377
|
+
* Resolution changes do not mutate physical sensor geometry. The returned
|
|
378
|
+
* processed raster is pre-output geometry and must not be used to infer crop
|
|
379
|
+
* factor, field of view or physical photosite count.
|
|
380
|
+
*/
|
|
381
|
+
export function resolveCaptureMode(input) {
|
|
382
|
+
validateNativeRaster(input.nativeRaster);
|
|
383
|
+
if (typeof input.modeId !== "string" ||
|
|
384
|
+
input.modeId.trim().length === 0) {
|
|
385
|
+
throw new InvalidScientificInputError("modeId must be a non-empty string.");
|
|
386
|
+
}
|
|
387
|
+
const profile = parseCaptureModeProfile(input.profile);
|
|
388
|
+
const mode = profile.modes.find((candidate) => candidate.modeId === input.modeId);
|
|
389
|
+
if (mode === undefined) {
|
|
390
|
+
throw new InvalidScientificInputError("modeId does not exist in the supplied capture-mode profile.");
|
|
391
|
+
}
|
|
392
|
+
const processedTotal = mode.processedImageRaster.value.pixelWidth *
|
|
393
|
+
mode.processedImageRaster.value.pixelHeight;
|
|
394
|
+
if (!Number.isSafeInteger(processedTotal)) {
|
|
395
|
+
throw new InvalidScientificInputError("processedImageRaster total image-sample count must be a safe integer.");
|
|
396
|
+
}
|
|
397
|
+
const acquisition = mode.acquisition.kind === "single-frame"
|
|
398
|
+
? {
|
|
399
|
+
kind: "single-frame",
|
|
400
|
+
frameCount: 1
|
|
401
|
+
}
|
|
402
|
+
: mode.acquisition.kind === "fixed-multi-frame"
|
|
403
|
+
? {
|
|
404
|
+
kind: "fixed-multi-frame",
|
|
405
|
+
frameCount: mode.acquisition.frameCount
|
|
406
|
+
}
|
|
407
|
+
: {
|
|
408
|
+
kind: "variable-multi-frame",
|
|
409
|
+
evidence: mode.acquisition.evidence,
|
|
410
|
+
...(mode.acquisition.minimumFrameCount === undefined
|
|
411
|
+
? {}
|
|
412
|
+
: {
|
|
413
|
+
minimumFrameCount: mode.acquisition.minimumFrameCount
|
|
414
|
+
}),
|
|
415
|
+
...(mode.acquisition.maximumFrameCount === undefined
|
|
416
|
+
? {}
|
|
417
|
+
: {
|
|
418
|
+
maximumFrameCount: mode.acquisition.maximumFrameCount
|
|
419
|
+
})
|
|
420
|
+
};
|
|
421
|
+
return {
|
|
422
|
+
modeId: mode.modeId,
|
|
423
|
+
modeEvidence: mode.evidence,
|
|
424
|
+
nativeRaster: { ...input.nativeRaster },
|
|
425
|
+
nativeRasterSemantic: "effective-image-sampling-grid-not-photosite-count",
|
|
426
|
+
acquisition,
|
|
427
|
+
perFrameSampling: resolvePerFrameSampling(mode.perFrameSampling, input.nativeRaster),
|
|
428
|
+
...(mode.interFrameSensorOffsetsNativeSamples === undefined
|
|
429
|
+
? {}
|
|
430
|
+
: {
|
|
431
|
+
interFrameSensorOffsetsNativeSamples: mode.interFrameSensorOffsetsNativeSamples
|
|
432
|
+
}),
|
|
433
|
+
reconstructionStages: mode.reconstructionStages ?? [],
|
|
434
|
+
processedImageRaster: {
|
|
435
|
+
value: {
|
|
436
|
+
...mode.processedImageRaster.value
|
|
437
|
+
},
|
|
438
|
+
evidence: mode.processedImageRaster.evidence
|
|
439
|
+
},
|
|
440
|
+
processedImageMegapixels: processedTotal / 1_000_000,
|
|
441
|
+
dependencies: mode.dependencies ?? [],
|
|
442
|
+
physicalSensorGeometryMutation: false,
|
|
443
|
+
photositeCountInference: "not-permitted-from-native-or-processed-raster",
|
|
444
|
+
finalOutputRasterOwnership: "downstream-capture-output-geometry"
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=capture-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-mode.js","sourceRoot":"","sources":["../../src/sensor/capture-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
2
|
+
export type NativeColorSamplingSiteCoordinateSystem = "native-sensor-color-sampling-site-index";
|
|
3
|
+
export type SensorColorSamplingProfileCoordinateSystem = NativeColorSamplingSiteCoordinateSystem | "native-sensor-layered-spatial-relationship-not-resolved";
|
|
4
|
+
export interface NativeColorSamplingSiteIndex {
|
|
5
|
+
/**
|
|
6
|
+
* Zero-based integer site index from the native sensor's left edge.
|
|
7
|
+
*
|
|
8
|
+
* This is an abstract color-sampling-site lattice index. It is not a
|
|
9
|
+
* NativeImageRaster coordinate and does not assert one site = one physical
|
|
10
|
+
* photodiode.
|
|
11
|
+
*/
|
|
12
|
+
x: number;
|
|
13
|
+
/**
|
|
14
|
+
* Zero-based integer site index from the native sensor's top edge.
|
|
15
|
+
*
|
|
16
|
+
* +Y points downward in native sensor-facing coordinates.
|
|
17
|
+
*/
|
|
18
|
+
y: number;
|
|
19
|
+
}
|
|
20
|
+
export interface MonochromeColorSamplingLayout {
|
|
21
|
+
kind: "monochrome";
|
|
22
|
+
/**
|
|
23
|
+
* Semantic measurement-channel identifier only. It is not a spectral
|
|
24
|
+
* response curve, wavelength, colorimetric primary, or calibration.
|
|
25
|
+
*/
|
|
26
|
+
channelId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface PeriodicMosaicColorSamplingLayout {
|
|
29
|
+
kind: "periodic-mosaic";
|
|
30
|
+
/**
|
|
31
|
+
* Number of color-sampling sites in one horizontal repeat period.
|
|
32
|
+
*/
|
|
33
|
+
repeatWidthSites: number;
|
|
34
|
+
/**
|
|
35
|
+
* Number of color-sampling sites in one vertical repeat period.
|
|
36
|
+
*/
|
|
37
|
+
repeatHeightSites: number;
|
|
38
|
+
/**
|
|
39
|
+
* Row-major semantic channel IDs for one repeating tile.
|
|
40
|
+
*
|
|
41
|
+
* Length must equal repeatWidthSites × repeatHeightSites.
|
|
42
|
+
*/
|
|
43
|
+
siteChannelIds: readonly string[];
|
|
44
|
+
/**
|
|
45
|
+
* The repeat tile is anchored at native sensor sampling-site index (0, 0).
|
|
46
|
+
*
|
|
47
|
+
* Active crops and physical orientation must not silently reset this phase.
|
|
48
|
+
*/
|
|
49
|
+
anchor: "native-sensor-top-left-site";
|
|
50
|
+
}
|
|
51
|
+
export interface LayeredColorSamplingLayout {
|
|
52
|
+
kind: "layered";
|
|
53
|
+
/**
|
|
54
|
+
* Semantic layer/channel identifiers only. They do not define spectral
|
|
55
|
+
* response, depth ordering, spatial sampling density, or registration.
|
|
56
|
+
*/
|
|
57
|
+
layerChannelIds: readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* The first layered representation is deliberately structural only because
|
|
60
|
+
* real layered sensors may use unequal per-layer spatial sampling.
|
|
61
|
+
*/
|
|
62
|
+
spatialSamplingRelationship: "not-resolved";
|
|
63
|
+
}
|
|
64
|
+
export type SensorColorSamplingLayout = MonochromeColorSamplingLayout | PeriodicMosaicColorSamplingLayout | LayeredColorSamplingLayout;
|
|
65
|
+
export interface SensorColorSamplingProfile {
|
|
66
|
+
schemaVersion: "0.1.0";
|
|
67
|
+
profileId: string;
|
|
68
|
+
/**
|
|
69
|
+
* Evidence supporting this exact topology declaration.
|
|
70
|
+
*
|
|
71
|
+
* Descriptive architecture-family metadata remains a separate contract.
|
|
72
|
+
*/
|
|
73
|
+
evidence: readonly EvidenceProvenance[];
|
|
74
|
+
coordinateSystem: SensorColorSamplingProfileCoordinateSystem;
|
|
75
|
+
layout: SensorColorSamplingLayout;
|
|
76
|
+
}
|
|
77
|
+
export interface ResolveColorSamplingSiteInput {
|
|
78
|
+
profile: SensorColorSamplingProfile;
|
|
79
|
+
site: NativeColorSamplingSiteIndex;
|
|
80
|
+
}
|
|
81
|
+
export interface ResolvedColorSamplingSite {
|
|
82
|
+
profileId: string;
|
|
83
|
+
coordinateSystem: NativeColorSamplingSiteCoordinateSystem;
|
|
84
|
+
site: NativeColorSamplingSiteIndex;
|
|
85
|
+
mapping: {
|
|
86
|
+
kind: "monochrome";
|
|
87
|
+
channelId: string;
|
|
88
|
+
} | {
|
|
89
|
+
kind: "periodic-mosaic";
|
|
90
|
+
channelId: string;
|
|
91
|
+
repeatCoordinate: {
|
|
92
|
+
x: number;
|
|
93
|
+
y: number;
|
|
94
|
+
};
|
|
95
|
+
repeatWidthSites: number;
|
|
96
|
+
repeatHeightSites: number;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Explicit scientific boundaries for downstream consumers.
|
|
100
|
+
*/
|
|
101
|
+
spectralResponseEstablished: false;
|
|
102
|
+
nativeImageRasterBindingEstablished: false;
|
|
103
|
+
physicalPhotodiodeBindingEstablished: false;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parses an exact color-sampling topology declaration without binding it to
|
|
107
|
+
* NativeImageRaster, physical photodiodes, spectral response, or a
|
|
108
|
+
* manufacturer-specific family enum.
|
|
109
|
+
*
|
|
110
|
+
* Periodic mosaics use an abstract native sensor color-sampling-site lattice
|
|
111
|
+
* with zero-based integer indices, top-left origin, +X right and +Y down.
|
|
112
|
+
* The repeat phase is anchored to the sensor lattice, so later active crops or
|
|
113
|
+
* orientation transforms must preserve the original native site indices.
|
|
114
|
+
*
|
|
115
|
+
* Layered layouts are structural-only in this first contract because real
|
|
116
|
+
* layered sensors may use unequal spatial sampling density/registration across
|
|
117
|
+
* layers. No per-site layered resolver is exposed until that relationship is
|
|
118
|
+
* modeled explicitly.
|
|
119
|
+
*/
|
|
120
|
+
export declare function parseSensorColorSamplingProfile(value: unknown): SensorColorSamplingProfile;
|
|
121
|
+
/**
|
|
122
|
+
* Resolves the semantic measurement-channel assignment at one abstract native
|
|
123
|
+
* sensor color-sampling-site index for monochrome or periodic-mosaic layouts.
|
|
124
|
+
*
|
|
125
|
+
* This API intentionally has no NativeImageRaster input. A later explicit
|
|
126
|
+
* binding must establish how a selected capture mode's effective raster maps
|
|
127
|
+
* to this color-sampling-site lattice before RAW/CFA sampling can be simulated.
|
|
128
|
+
*
|
|
129
|
+
* Layered layouts fail closed because their per-layer spatial relationship is
|
|
130
|
+
* not resolved by the first structural contract.
|
|
131
|
+
*/
|
|
132
|
+
export declare function resolveColorSamplingSite(input: ResolveColorSamplingSiteInput): ResolvedColorSamplingSite;
|
|
133
|
+
//# sourceMappingURL=color-sampling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-sampling.d.ts","sourceRoot":"","sources":["../../src/sensor/color-sampling.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAKxC,MAAM,MAAM,uCAAuC,GACjD,yCAAyC,CAAC;AAE5C,MAAM,MAAM,0CAA0C,GAClD,uCAAuC,GACvC,yDAAyD,CAAC;AAE9D,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,CAAC,EAAE,MAAM,CAAC;IACV;;;;OAIG;IACH,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,iBAAiB,CAAC;IACxB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;OAIG;IACH,MAAM,EAAE,6BAA6B,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;OAGG;IACH,2BAA2B,EAAE,cAAc,CAAC;CAC7C;AAED,MAAM,MAAM,yBAAyB,GACjC,6BAA6B,GAC7B,iCAAiC,GACjC,0BAA0B,CAAC;AAE/B,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,gBAAgB,EAAE,0CAA0C,CAAC;IAC7D,MAAM,EAAE,yBAAyB,CAAC;CACnC;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,4BAA4B,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,uCAAuC,CAAC;IAC1D,IAAI,EAAE,4BAA4B,CAAC;IACnC,OAAO,EACH;QACE,IAAI,EAAE,YAAY,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GACD;QACE,IAAI,EAAE,iBAAiB,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE;YAChB,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;SACX,CAAC;QACF,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACN;;OAEG;IACH,2BAA2B,EAAE,KAAK,CAAC;IACnC,mCAAmC,EAAE,KAAK,CAAC;IAC3C,oCAAoC,EAAE,KAAK,CAAC;CAC7C;AA2ND;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,0BAA0B,CA4C5B;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,yBAAyB,CAwF3B"}
|