@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
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates rectilinear angular field of view as 2 * atan(sensorDimension / (2 *
|
|
5
|
+
* projectionDistance)). Without focusDistanceM, projectionDistance is nominal focal length for
|
|
6
|
+
* backwards-compatible infinity-focus/pinhole behavior. With focusDistanceM, projectionDistance is the
|
|
7
|
+
* ideal Gaussian thin-lens image distance for that focus plane. Neither mode models real-lens focus
|
|
8
|
+
* breathing or distortion.
|
|
9
|
+
* Calculates an asymmetric rectilinear FOV span from signed sensor-plane bounds relative to the
|
|
10
|
+
* optical axis. This is required for off-center active sensor crops where the optical axis is not at
|
|
11
|
+
* the center of the retained rectangle.
|
|
12
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
13
|
+
* limits.
|
|
14
|
+
*/
|
|
2
15
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
16
|
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
4
17
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-of-view.js","sourceRoot":"","sources":["../../src/camera/field-of-view.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-of-view.js","sourceRoot":"","sources":["../../src/camera/field-of-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates the projected size of a fronto-parallel object plane. Without focusDistanceM, the
|
|
4
|
+
* function preserves ideal pinhole projection using nominal focal length. With focusDistanceM, it
|
|
5
|
+
* projects to the ideal thin-lens sensor plane selected by that focus distance.
|
|
6
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
7
|
+
* limits.
|
|
8
|
+
*/
|
|
1
9
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
10
|
export interface CalculateProjectedObjectSizeInput {
|
|
3
11
|
/** Lens focal length in millimetres. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projected-object-size.d.ts","sourceRoot":"","sources":["../../src/camera/projected-object-size.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,iCAAiC;IAChD,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,iBAAiB,CAAC,mBAAmB,CAAC,CAgExC"}
|
|
1
|
+
{"version":3,"file":"projected-object-size.d.ts","sourceRoot":"","sources":["../../src/camera/projected-object-size.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,iCAAiC;IAChD,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,iBAAiB,CAAC,mBAAmB,CAAC,CAgExC"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates the projected size of a fronto-parallel object plane. Without focusDistanceM, the
|
|
5
|
+
* function preserves ideal pinhole projection using nominal focal length. With focusDistanceM, it
|
|
6
|
+
* projects to the ideal thin-lens sensor plane selected by that focus distance.
|
|
7
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
8
|
+
* limits.
|
|
9
|
+
*/
|
|
2
10
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
11
|
import { requirePositiveFinite } from "../core/validation.js";
|
|
4
12
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projected-object-size.js","sourceRoot":"","sources":["../../src/camera/projected-object-size.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAyBxE;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1D,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAEpD,MAAM,eAAe,GACnB,KAAK,CAAC,cAAc,KAAK,SAAS;QAChC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,8BAA8B,CAAC;YAC7B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,cAAc;SACtC,CAAC,CAAC;IACT,MAAM,oBAAoB,GACxB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,aAAa,CAAC;IAChE,MAAM,OAAO,GACX,oBAAoB,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,QAAQ,GACZ,oBAAoB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,KAAK,GACT,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,mCAAmC,CAAC;IAC1C,MAAM,WAAW,GACf,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC;YACE,0BAA0B;YAC1B,+CAA+C;YAC/C,uDAAuD;SACxD;QACH,CAAC,CAAC;YACE,kEAAkE;YAClE,+CAA+C;YAC/C,uDAAuD;YACvD,mEAAmE;SACpE,CAAC;IAER,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CACrB,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAC3C,KAAK,EACL,OAAO,EACP,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,qBAAqB,CACnB,uBAAuB,EACvB,KAAK,CAAC,qBAAqB,CAC5B,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAEnD,OAAO,gBAAgB,CACrB;QACE,OAAO;QACP,QAAQ;QACR,oBAAoB;QACpB,WAAW,EAAE,OAAO,GAAG,OAAO;QAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO;KACjC,EACD,KAAK,EACL,OAAO,EACP,WAAW,CACZ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"projected-object-size.js","sourceRoot":"","sources":["../../src/camera/projected-object-size.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAyBxE;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1D,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAEpD,MAAM,eAAe,GACnB,KAAK,CAAC,cAAc,KAAK,SAAS;QAChC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,8BAA8B,CAAC;YAC7B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,cAAc;SACtC,CAAC,CAAC;IACT,MAAM,oBAAoB,GACxB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,aAAa,CAAC;IAChE,MAAM,OAAO,GACX,oBAAoB,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,QAAQ,GACZ,oBAAoB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,KAAK,GACT,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,mCAAmC,CAAC;IAC1C,MAAM,WAAW,GACf,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC;YACE,0BAA0B;YAC1B,+CAA+C;YAC/C,uDAAuD;SACxD;QACH,CAAC,CAAC;YACE,kEAAkE;YAClE,+CAA+C;YAC/C,uDAAuD;YACvD,mEAAmE;SACpE,CAAC;IAER,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CACrB,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAC3C,KAAK,EACL,OAAO,EACP,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,qBAAqB,CACnB,uBAAuB,EACvB,KAAK,CAAC,qBAAqB,CAC5B,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAEnD,OAAO,gBAAgB,CACrB;QACE,OAAO;QACP,QAAQ;QACR,oBAAoB;QACpB,WAAW,EAAE,OAAO,GAAG,OAAO;QAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO;KACjC,EACD,KAAK,EACL,OAAO,EACP,WAAW,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type SimulatedCapture } from "./simulated-capture.js";
|
|
2
|
+
export declare const CAPTURE_EXPORT_METADATA_SCHEMA_VERSION: "0.1.0";
|
|
3
|
+
/** Non-generative workflows only; sampled/AI/composite media need a separate reviewed policy. */
|
|
4
|
+
export type CaptureExportWorkflow = "human-directed-non-generative" | "fully-procedural-non-generative";
|
|
5
|
+
/** Caller-owned resource and saved-incarnation UUIDs; no random IDs or wall clock in the engine. */
|
|
6
|
+
export interface CaptureExportArtifactIdentity {
|
|
7
|
+
documentId: string;
|
|
8
|
+
instanceId: string;
|
|
9
|
+
}
|
|
10
|
+
/** Metadata-only pairing input. CaptureID must already be a non-nil UUID on the committed capture. */
|
|
11
|
+
export interface CaptureExportMetadataInput {
|
|
12
|
+
capture: SimulatedCapture;
|
|
13
|
+
workflow: CaptureExportWorkflow;
|
|
14
|
+
/** Explicit capture-event UTC timestamp, exactly YYYY-MM-DDTHH:mm:ss.sssZ; never scene time. */
|
|
15
|
+
capturedAtUtc: string;
|
|
16
|
+
raw: CaptureExportArtifactIdentity;
|
|
17
|
+
jpeg: CaptureExportArtifactIdentity;
|
|
18
|
+
}
|
|
19
|
+
/** Shared semantic values, not packed EXIF/DNG tags or an XMP packet. */
|
|
20
|
+
export interface CaptureExportSharedMetadata {
|
|
21
|
+
captureId: string;
|
|
22
|
+
capturedAtUtc: string;
|
|
23
|
+
workflow: CaptureExportWorkflow;
|
|
24
|
+
digitalSourceTypeUri: string;
|
|
25
|
+
simulatedCapture: true;
|
|
26
|
+
make: "Photivra";
|
|
27
|
+
model: "Photivra Virtual Camera";
|
|
28
|
+
/** Explicitly the captured engine API version, not a claim of an npm distribution version. */
|
|
29
|
+
software: string;
|
|
30
|
+
creatorTool: string;
|
|
31
|
+
engineApiVersion: string;
|
|
32
|
+
captureContractVersion: SimulatedCapture["schemaVersion"];
|
|
33
|
+
sceneStateId: string;
|
|
34
|
+
sceneTimeSeconds: number;
|
|
35
|
+
exposure: SimulatedCapture["exposure"];
|
|
36
|
+
focus: SimulatedCapture["focus"];
|
|
37
|
+
equivalentFocalLength35Mm: number;
|
|
38
|
+
geometry: SimulatedCapture["geometry"];
|
|
39
|
+
resolvedGeometry: SimulatedCapture["resolvedGeometry"];
|
|
40
|
+
noise: SimulatedCapture["noise"];
|
|
41
|
+
whiteBalanceIntent: SimulatedCapture["whiteBalanceIntent"];
|
|
42
|
+
models: SimulatedCapture["models"];
|
|
43
|
+
}
|
|
44
|
+
/** Equal shared metadata and distinct resource IDs do not prove RAW/JPEG pixel derivation. */
|
|
45
|
+
export interface CaptureExportMetadataPair {
|
|
46
|
+
schemaVersion: typeof CAPTURE_EXPORT_METADATA_SCHEMA_VERSION;
|
|
47
|
+
shared: CaptureExportSharedMetadata;
|
|
48
|
+
raw: CaptureExportArtifactIdentity & {
|
|
49
|
+
outputRole: "raw";
|
|
50
|
+
};
|
|
51
|
+
jpeg: CaptureExportArtifactIdentity & {
|
|
52
|
+
outputRole: "jpeg";
|
|
53
|
+
};
|
|
54
|
+
imageDataPairing: "not-verified";
|
|
55
|
+
}
|
|
56
|
+
/** Fail-closed parser; no default workflow, time, creator, physical-device or file lineage claims. */
|
|
57
|
+
export declare function parseCaptureExportMetadataInput(value: unknown): CaptureExportMetadataInput;
|
|
58
|
+
/** Projects known capture metadata once for both future writers; never encodes or verifies image data. */
|
|
59
|
+
export declare function createCaptureExportMetadataPair(input: CaptureExportMetadataInput): CaptureExportMetadataPair;
|
|
60
|
+
//# sourceMappingURL=capture-export-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-export-metadata.d.ts","sourceRoot":"","sources":["../../src/capture/capture-export-metadata.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,eAAO,MAAM,sCAAsC,EAAG,OAAgB,CAAC;AACvE,iGAAiG;AACjG,MAAM,MAAM,qBAAqB,GAAG,+BAA+B,GAAG,iCAAiC,CAAC;AACxG,oGAAoG;AACpG,MAAM,WAAW,6BAA6B;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACzF,sGAAsG;AACtG,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,6BAA6B,CAAC;IACnC,IAAI,EAAE,6BAA6B,CAAC;CACrC;AACD,yEAAyE;AACzE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,IAAI,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,yBAAyB,CAAC;IACjC,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,gBAAgB,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IACvD,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjC,kBAAkB,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;CACpC;AACD,8FAA8F;AAC9F,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,OAAO,sCAAsC,CAAC;IAC7D,MAAM,EAAE,2BAA2B,CAAC;IACpC,GAAG,EAAE,6BAA6B,GAAG;QAAE,UAAU,EAAE,KAAK,CAAA;KAAE,CAAC;IAC3D,IAAI,EAAE,6BAA6B,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,gBAAgB,EAAE,cAAc,CAAC;CAClC;AAcD,sGAAsG;AACtG,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CAc1F;AACD,0GAA0G;AAC1G,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,0BAA0B,GAAG,yBAAyB,CAgB5G"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Fail-closed parser; no default workflow, time, creator, physical-device or file lineage claims.
|
|
5
|
+
* Projects known capture metadata once for both future writers; never encodes or verifies image data.
|
|
6
|
+
* @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
|
|
7
|
+
* limits.
|
|
8
|
+
*/
|
|
9
|
+
import { requireAllowlistedRecord } from "../core/record-validation.js";
|
|
10
|
+
import { freezeOwnedData } from "../core/owned-data.js";
|
|
11
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
12
|
+
import { parseSimulatedCapture } from "./simulated-capture.js";
|
|
13
|
+
export const CAPTURE_EXPORT_METADATA_SCHEMA_VERSION = "0.1.0";
|
|
14
|
+
function object(value, keys) {
|
|
15
|
+
return requireAllowlistedRecord(value, keys, "Export metadata must contain only allowlisted fields.");
|
|
16
|
+
}
|
|
17
|
+
function uuid(value) {
|
|
18
|
+
if (typeof value !== "string" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {
|
|
19
|
+
throw new InvalidConfigurationError("Export identities require non-nil RFC-variant UUIDs.");
|
|
20
|
+
}
|
|
21
|
+
return value.toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
function artifact(value) {
|
|
24
|
+
const r = object(value, ["documentId", "instanceId"]);
|
|
25
|
+
return { documentId: uuid(r.documentId), instanceId: uuid(r.instanceId) };
|
|
26
|
+
}
|
|
27
|
+
/** Fail-closed parser; no default workflow, time, creator, physical-device or file lineage claims. */
|
|
28
|
+
export function parseCaptureExportMetadataInput(value) {
|
|
29
|
+
const r = object(value, ["capture", "workflow", "capturedAtUtc", "raw", "jpeg"]);
|
|
30
|
+
const capture = parseSimulatedCapture(r.capture);
|
|
31
|
+
if (r.workflow !== "human-directed-non-generative" && r.workflow !== "fully-procedural-non-generative") {
|
|
32
|
+
throw new InvalidConfigurationError("Export workflow requires explicit non-generative classification.");
|
|
33
|
+
}
|
|
34
|
+
if (typeof r.capturedAtUtc !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(r.capturedAtUtc) ||
|
|
35
|
+
!Number.isFinite(Date.parse(r.capturedAtUtc)) || new Date(r.capturedAtUtc).toISOString() !== r.capturedAtUtc) {
|
|
36
|
+
throw new InvalidConfigurationError("Capture-event time requires a valid canonical UTC timestamp.");
|
|
37
|
+
}
|
|
38
|
+
const raw = artifact(r.raw), jpeg = artifact(r.jpeg);
|
|
39
|
+
const ids = [uuid(capture.captureId), raw.documentId, raw.instanceId, jpeg.documentId, jpeg.instanceId];
|
|
40
|
+
if (new Set(ids).size !== ids.length)
|
|
41
|
+
throw new InvalidConfigurationError("Capture, resource and incarnation IDs must be distinct.");
|
|
42
|
+
return { capture, workflow: r.workflow, capturedAtUtc: r.capturedAtUtc, raw, jpeg };
|
|
43
|
+
}
|
|
44
|
+
/** Projects known capture metadata once for both future writers; never encodes or verifies image data. */
|
|
45
|
+
export function createCaptureExportMetadataPair(input) {
|
|
46
|
+
const v = parseCaptureExportMetadataInput(input), c = v.capture;
|
|
47
|
+
const software = "Photivra " + c.engineApiVersion;
|
|
48
|
+
const shared = {
|
|
49
|
+
captureId: uuid(c.captureId), capturedAtUtc: v.capturedAtUtc, workflow: v.workflow,
|
|
50
|
+
digitalSourceTypeUri: "http://cv.iptc.org/newscodes/digitalsourcetype/" +
|
|
51
|
+
(v.workflow === "human-directed-non-generative" ? "digitalCreation" : "algorithmicMedia"),
|
|
52
|
+
simulatedCapture: true, make: "Photivra", model: "Photivra Virtual Camera", software, creatorTool: software,
|
|
53
|
+
engineApiVersion: c.engineApiVersion, captureContractVersion: c.schemaVersion, sceneStateId: c.sceneStateId,
|
|
54
|
+
sceneTimeSeconds: c.sceneTimeSeconds, exposure: c.exposure, focus: c.focus,
|
|
55
|
+
equivalentFocalLength35Mm: c.equivalentFocalLength35Mm, geometry: c.geometry, resolvedGeometry: c.resolvedGeometry,
|
|
56
|
+
noise: c.noise, whiteBalanceIntent: c.whiteBalanceIntent, models: c.models
|
|
57
|
+
};
|
|
58
|
+
const pair = { schemaVersion: CAPTURE_EXPORT_METADATA_SCHEMA_VERSION, shared,
|
|
59
|
+
raw: { ...v.raw, outputRole: "raw" }, jpeg: { ...v.jpeg, outputRole: "jpeg" }, imageDataPairing: "not-verified" };
|
|
60
|
+
return freezeOwnedData(JSON.parse(JSON.stringify(pair)));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=capture-export-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-export-metadata.js","sourceRoot":"","sources":["../../src/capture/capture-export-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Preflight complete native coverage and aggregate support before invoking supplied provider code,
|
|
4
|
+
* then reuse dark/completeness/capacity/noise/ADC ownership. The returned RAW frame feeds the existing
|
|
5
|
+
* reconstruction and paired export APIs.
|
|
6
|
+
* @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
|
|
7
|
+
* support limits.
|
|
8
|
+
*/
|
|
9
|
+
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
10
|
+
import { type CalculationResult } from "../core/calculation-result.js";
|
|
11
|
+
import { simulateSensorRawFrame, type SensorRawProducerInput, type SensorRawProducerSiteInput } from "./sensor-raw-producer.js";
|
|
12
|
+
import { type SensorDarkCurrentProfile } from "../sensor/dark-current.js";
|
|
13
|
+
import { executeEnvironmentSensorPhotoSignal, type CalculateEnvironmentSensorPhotoSignalInput, type EnvironmentRadianceEvaluator } from "../sensor/environment-photo-signal.js";
|
|
14
|
+
/** Full native site order; generated photo/dark charge cannot be supplied as a shortcut. */
|
|
15
|
+
export interface SimulateEnvironmentSensorRawFrameInput {
|
|
16
|
+
frame: SensorRawProducerInput["frame"];
|
|
17
|
+
sceneBinding: {
|
|
18
|
+
sceneStateId: string;
|
|
19
|
+
providerSceneId: string;
|
|
20
|
+
evidence: readonly EvidenceProvenance[];
|
|
21
|
+
};
|
|
22
|
+
/** Shared shutter schedule is bound to the committed frame duration. */
|
|
23
|
+
exposureWindow: NonNullable<SensorRawProducerInput["exposureWindow"]>;
|
|
24
|
+
sites: readonly {
|
|
25
|
+
environment: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance">;
|
|
26
|
+
darkCurrentProfile: SensorDarkCurrentProfile;
|
|
27
|
+
operatingTemperatureC: number;
|
|
28
|
+
charge: Omit<SensorRawProducerSiteInput["charge"], "photoSignal" | "darkCharge">;
|
|
29
|
+
readout: Omit<SensorRawProducerSiteInput, "charge">;
|
|
30
|
+
}[];
|
|
31
|
+
evaluateRadiance: EnvironmentRadianceEvaluator;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Approximate executed provider-to-RAW lineage. sites retain per-site optical/EQE
|
|
35
|
+
* results; raw retains charge, capacity, seeded-noise/readout diagnostics and exact
|
|
36
|
+
* native frame. providerEvaluationCount is actual bounded work, not a quality score.
|
|
37
|
+
* Conservative verification/activation flags belong to this standalone adapter;
|
|
38
|
+
* a parent production plan records its own graph execution without upgrading them.
|
|
39
|
+
*/
|
|
40
|
+
export interface EnvironmentSensorRawFrame {
|
|
41
|
+
upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe";
|
|
42
|
+
providerTransportVerified: false;
|
|
43
|
+
productionPlanActivated: false;
|
|
44
|
+
providerEvaluationCount: number;
|
|
45
|
+
sceneBinding: SimulateEnvironmentSensorRawFrameInput["sceneBinding"];
|
|
46
|
+
sites: readonly ReturnType<typeof executeEnvironmentSensorPhotoSignal>[];
|
|
47
|
+
raw: ReturnType<typeof simulateSensorRawFrame>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Preflight complete native coverage and aggregate support before invoking supplied
|
|
51
|
+
* provider code, then reuse dark/completeness/capacity/noise/ADC ownership. The
|
|
52
|
+
* returned RAW frame feeds the existing reconstruction and paired export APIs.
|
|
53
|
+
*/
|
|
54
|
+
export declare function simulateEnvironmentSensorRawFrame(input: SimulateEnvironmentSensorRawFrameInput): CalculationResult<EnvironmentSensorRawFrame>;
|
|
55
|
+
//# sourceMappingURL=environment-raw-producer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-raw-producer.d.ts","sourceRoot":"","sources":["../../src/capture/environment-raw-producer.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAG5F,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAI5F,OAAO,EAAE,sBAAsB,EAAE,KAAK,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAChI,OAAO,EAAoC,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAoC,mCAAmC,EAC5E,KAAK,0CAA0C,EAAE,KAAK,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAOpI,4FAA4F;AAC5F,MAAM,WAAW,sCAAsC;IACrD,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACvC,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAA;KAAE,CAAC;IACzG,wEAAwE;IACxE,cAAc,EAAE,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtE,KAAK,EAAE,SAAS;QACd,WAAW,EAAE,IAAI,CAAC,0CAA0C,EAAE,kBAAkB,CAAC,CAAC;QAClF,kBAAkB,EAAE,wBAAwB,CAAC;QAC7C,qBAAqB,EAAE,MAAM,CAAC;QAC9B,MAAM,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC;QACjF,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;KACrD,EAAE,CAAC;IACJ,gBAAgB,EAAE,4BAA4B,CAAC;CAChD;AACD;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,oDAAoD,CAAC;IACrE,yBAAyB,EAAE,KAAK,CAAC;IACjC,uBAAuB,EAAE,KAAK,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,sCAAsC,CAAC,cAAc,CAAC,CAAC;IACrE,KAAK,EAAE,SAAS,UAAU,CAAC,OAAO,mCAAmC,CAAC,EAAE,CAAC;IACzE,GAAG,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;CAChD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,sCAAsC,GAAG,iBAAiB,CAAC,yBAAyB,CAAC,CAoD7I"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Preflight complete native coverage and aggregate support before invoking supplied provider code,
|
|
5
|
+
* then reuse dark/completeness/capacity/noise/ADC ownership. The returned RAW frame feeds the existing
|
|
6
|
+
* reconstruction and paired export APIs.
|
|
7
|
+
* @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
|
|
8
|
+
* support limits.
|
|
9
|
+
*/
|
|
10
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
11
|
+
import { requirePublicOpaqueId } from "../core/record-validation.js";
|
|
12
|
+
import { stringifyCanonicalJson } from "../core/canonical-json.js";
|
|
13
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
14
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
15
|
+
import { parseSimulatedCapture } from "./simulated-capture.js";
|
|
16
|
+
import { RAW_REFERENCE_MAX_NATIVE_SITES } from "./raw-frame-limits.js";
|
|
17
|
+
import { simulateSensorRawFrame } from "./sensor-raw-producer.js";
|
|
18
|
+
import { calculateSensorDarkCurrentCharge } from "../sensor/dark-current.js";
|
|
19
|
+
import { planEnvironmentSensorPhotoSignal, executeEnvironmentSensorPhotoSignal } from "../sensor/environment-photo-signal.js";
|
|
20
|
+
function canonical(value) {
|
|
21
|
+
return stringifyCanonicalJson(value, { undefinedObjectProperties: "omit",
|
|
22
|
+
nonFiniteNumberMessage: "Environment capture binding must be finite.", unsupportedValueMessage: "Environment capture binding requires plain data." });
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Preflight complete native coverage and aggregate support before invoking supplied
|
|
26
|
+
* provider code, then reuse dark/completeness/capacity/noise/ADC ownership. The
|
|
27
|
+
* returned RAW frame feeds the existing reconstruction and paired export APIs.
|
|
28
|
+
*/
|
|
29
|
+
export function simulateEnvironmentSensorRawFrame(input) {
|
|
30
|
+
const { evaluateRadiance, ...data } = input;
|
|
31
|
+
if (typeof evaluateRadiance !== "function")
|
|
32
|
+
throw new InvalidScientificInputError("Environment RAW requires a synchronous evaluator.");
|
|
33
|
+
const owned = structuredClone(data);
|
|
34
|
+
const capture = parseSimulatedCapture(owned.frame.capture), native = capture.geometry.nativeRaster;
|
|
35
|
+
const count = native.pixelWidth * native.pixelHeight;
|
|
36
|
+
if (count > RAW_REFERENCE_MAX_NATIVE_SITES || !Array.isArray(owned.sites) || owned.sites.length !== count ||
|
|
37
|
+
owned.exposureWindow.nominalExposureDurationSeconds.value !== capture.exposure.shutterSeconds) {
|
|
38
|
+
throw new InvalidScientificInputError("Environment RAW requires complete bounded native coverage and the committed shutter duration.");
|
|
39
|
+
}
|
|
40
|
+
requirePublicOpaqueId(owned.sceneBinding.providerSceneId, "Scene binding requires a public provider scene identity.");
|
|
41
|
+
parseEvidenceList(owned.sceneBinding.evidence, "environmentCaptureSceneBinding.evidence");
|
|
42
|
+
if (owned.sceneBinding.sceneStateId !== capture.sceneStateId || capture.sceneTimeSeconds !== 0)
|
|
43
|
+
throw new InvalidScientificInputError("Environment RAW requires explicit committed scene binding at the opening-reference scene time zero.");
|
|
44
|
+
let evaluations = 0;
|
|
45
|
+
const ids = new Set();
|
|
46
|
+
const sharedState = (e) => canonical({
|
|
47
|
+
sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, fieldThroughput: e.fieldThroughput
|
|
48
|
+
});
|
|
49
|
+
const plans = Array.from(owned.sites, (site, i) => {
|
|
50
|
+
if (!site)
|
|
51
|
+
throw new InvalidScientificInputError("Environment RAW site array must be dense.");
|
|
52
|
+
const e = site.environment, sensor = e.sensor;
|
|
53
|
+
if (sensor.spatialSampling.site.x !== i % native.pixelWidth || sensor.spatialSampling.site.y !== Math.floor(i / native.pixelWidth) ||
|
|
54
|
+
canonical(sensor.spatialSampling.imagingArea) !== canonical(capture.geometry.imagingArea) ||
|
|
55
|
+
canonical(sensor.colorSamplingProfile) !== canonical(owned.frame.colorSamplingProfile) ||
|
|
56
|
+
canonical(sensor.localExposure.bindingProfile) !== canonical(owned.frame.bindingProfile) ||
|
|
57
|
+
canonical(sensor.localExposure.exposureWindowInput) !== canonical({ ...owned.exposureWindow, nativeRaster: native }) ||
|
|
58
|
+
e.optics.focalLengthMm !== capture.exposure.focalLengthMm || e.optics.nominalFNumber !== capture.exposure.aperture ||
|
|
59
|
+
ids.has(e.temporalIntegrationId) || sharedState(e) !== sharedState(owned.sites[0].environment)) {
|
|
60
|
+
throw new InvalidScientificInputError("Environment site, frame geometry/profiles, optics and exact shutter event must match the committed capture.");
|
|
61
|
+
}
|
|
62
|
+
const plan = planEnvironmentSensorPhotoSignal(e);
|
|
63
|
+
if (canonical(plan.focus) !== canonical(capture.focus) ||
|
|
64
|
+
e.sceneBindings.providerProfile.sceneId !== owned.sceneBinding.providerSceneId)
|
|
65
|
+
throw new InvalidScientificInputError("Environment optical focus and provider scene must match the committed capture binding.");
|
|
66
|
+
ids.add(e.temporalIntegrationId);
|
|
67
|
+
evaluations += plan.count;
|
|
68
|
+
if (evaluations > 100000)
|
|
69
|
+
throw new InvalidScientificInputError("Environment RAW exceeds the aggregate 100000-provider-evaluation budget.");
|
|
70
|
+
return plan;
|
|
71
|
+
});
|
|
72
|
+
const sites = plans.map(plan => executeEnvironmentSensorPhotoSignal(plan, evaluateRadiance));
|
|
73
|
+
const raw = simulateSensorRawFrame({ frame: owned.frame, exposureWindow: owned.exposureWindow,
|
|
74
|
+
sites: owned.sites.map((s, i) => {
|
|
75
|
+
const photoSignal = sites[i].value.photo.value.photoSignal;
|
|
76
|
+
const darkCharge = calculateSensorDarkCurrentCharge({ exposure: photoSignal,
|
|
77
|
+
darkCurrentProfile: s.darkCurrentProfile, operatingTemperatureC: s.operatingTemperatureC }).value;
|
|
78
|
+
return { ...s.readout, charge: { ...s.charge, photoSignal, darkCharge } };
|
|
79
|
+
}) });
|
|
80
|
+
return approximationResult({ upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe",
|
|
81
|
+
providerTransportVerified: false, productionPlanActivated: false, providerEvaluationCount: evaluations, sceneBinding: { ...owned.sceneBinding, evidence: parseEvidenceList(owned.sceneBinding.evidence, "sceneBinding.evidence") }, sites, raw
|
|
82
|
+
}, "environment-native-raw-producer", "0.1.0", [
|
|
83
|
+
"Full native capture uses executed supplied environment provider code, not verified scene transport or calibrated photographic truth.",
|
|
84
|
+
"Existing response, charge completeness, capacity, seeded noise and ADC validators remain authoritative; RAW origin flags remain conservative.",
|
|
85
|
+
"Reference native-site and aggregate evaluation budgets remain in force; production-plan activation and full-resolution/editor acceptance remain separate."
|
|
86
|
+
]);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=environment-raw-producer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-raw-producer.js","sourceRoot":"","sources":["../../src/capture/environment-raw-producer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Internal baseline JPEG profile: 8-bit YCbCr444, explicit constant quantization step and original uniform Huffman tables. */
|
|
2
|
+
export interface ExportJpegInput {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
samples: readonly number[];
|
|
6
|
+
quantizationStep: number;
|
|
7
|
+
exif: Uint8Array;
|
|
8
|
+
xmp: Uint8Array;
|
|
9
|
+
}
|
|
10
|
+
/** Independent analytical DCT implementation; no third-party encoder, source, default quantization or Huffman tables. */
|
|
11
|
+
export declare function encodeExportJpeg(input: ExportJpegInput): Uint8Array;
|
|
12
|
+
//# sourceMappingURL=export-jpeg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-jpeg.d.ts","sourceRoot":"","sources":["../../src/capture/export-jpeg.ts"],"names":[],"mappings":"AAYA,+HAA+H;AAC/H,MAAM,WAAW,eAAe;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE;AAC3J,yHAAyH;AACzH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA6EnE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Independent analytical DCT implementation; no third-party encoder, source, default quantization or
|
|
5
|
+
* Huffman tables.
|
|
6
|
+
* @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
|
|
7
|
+
* limits.
|
|
8
|
+
*/
|
|
9
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
10
|
+
/** Independent analytical DCT implementation; no third-party encoder, source, default quantization or Huffman tables. */
|
|
11
|
+
export function encodeExportJpeg(input) {
|
|
12
|
+
const { width, height, samples, quantizationStep: q } = input;
|
|
13
|
+
if (![width, height, q].every(Number.isSafeInteger) || width < 1 || height < 1 || width * height > 4096 ||
|
|
14
|
+
q < 1 || q > 255 || samples.length !== width * height * 3 || Array.from(samples).some((v) => !Number.isInteger(v) || v < 0 || v > 255)) {
|
|
15
|
+
throw new InvalidConfigurationError("Unsupported baseline JPEG input.");
|
|
16
|
+
}
|
|
17
|
+
const bytes = [255, 216];
|
|
18
|
+
const marker = (id, payload) => {
|
|
19
|
+
if (payload.length > 65533)
|
|
20
|
+
throw new InvalidConfigurationError("JPEG metadata segment exceeds the standard APP limit.");
|
|
21
|
+
bytes.push(255, id, (payload.length + 2) >> 8, (payload.length + 2) & 255, ...payload);
|
|
22
|
+
};
|
|
23
|
+
marker(224, [74, 70, 73, 70, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0]);
|
|
24
|
+
marker(225, [69, 120, 105, 102, 0, 0, ...input.exif]);
|
|
25
|
+
marker(225, [...new TextEncoder().encode("http://ns.adobe.com/xap/1.0/\0"), ...input.xmp]);
|
|
26
|
+
marker(219, [0, ...Array(64).fill(q)]);
|
|
27
|
+
marker(192, [8, height >> 8, height & 255, width >> 8, width & 255, 3, 1, 17, 0, 2, 17, 0, 3, 17, 0]);
|
|
28
|
+
// DC categories 0..11 use 4-bit codes; AC EOB/ZRL and all baseline run/category pairs use 8-bit codes.
|
|
29
|
+
// Incomplete canonical trees reserve the all-ones code, as required for JPEG padding safety.
|
|
30
|
+
const dc = Array.from({ length: 12 }, (_, i) => i), ac = [0, 240];
|
|
31
|
+
for (let run = 0; run < 16; run++)
|
|
32
|
+
for (let size = 1; size <= 10; size++)
|
|
33
|
+
ac.push(run * 16 + size);
|
|
34
|
+
marker(196, [0, ...Array.from({ length: 16 }, (_, i) => i === 3 ? 12 : 0), ...dc,
|
|
35
|
+
16, ...Array.from({ length: 16 }, (_, i) => i === 7 ? ac.length : 0), ...ac]);
|
|
36
|
+
marker(218, [3, 1, 0, 2, 0, 3, 0, 0, 63, 0]);
|
|
37
|
+
let accumulator = 0, bits = 0;
|
|
38
|
+
const emit = (value, count) => {
|
|
39
|
+
for (let i = count - 1; i >= 0; i--) {
|
|
40
|
+
accumulator = (accumulator << 1) | ((value >> i) & 1);
|
|
41
|
+
bits++;
|
|
42
|
+
if (bits === 8) {
|
|
43
|
+
bytes.push(accumulator);
|
|
44
|
+
if (accumulator === 255)
|
|
45
|
+
bytes.push(0);
|
|
46
|
+
accumulator = 0;
|
|
47
|
+
bits = 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const amplitude = (value, max) => {
|
|
52
|
+
const size = value === 0 ? 0 : Math.floor(Math.log2(Math.abs(value))) + 1;
|
|
53
|
+
if (size > max)
|
|
54
|
+
throw new InvalidConfigurationError("JPEG coefficient exceeds baseline entropy range.");
|
|
55
|
+
return size;
|
|
56
|
+
};
|
|
57
|
+
const coefficient = (value, size) => { if (size)
|
|
58
|
+
emit(value >= 0 ? value : value + (1 << size) - 1, size); };
|
|
59
|
+
const zigzag = [];
|
|
60
|
+
for (let diagonal = 0; diagonal <= 14; diagonal++) {
|
|
61
|
+
const points = [];
|
|
62
|
+
for (let y = 0; y < 8; y++) {
|
|
63
|
+
const x = diagonal - y;
|
|
64
|
+
if (x >= 0 && x < 8)
|
|
65
|
+
points.push(y * 8 + x);
|
|
66
|
+
}
|
|
67
|
+
zigzag.push(...(diagonal % 2 === 0 ? points.reverse() : points));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The separable 8×8 analytical DCT uses orthonormal DC factors and one explicitly
|
|
71
|
+
* selected scalar quantization step. This deliberately simple 4:4:4 reference
|
|
72
|
+
* encoder preserves no exact RGB pixels after lossy quantization; JPEG decode
|
|
73
|
+
* agreement is an interoperability check, not an exact scientific pixel oracle.
|
|
74
|
+
*/
|
|
75
|
+
const cosine = Array.from({ length: 8 }, (_, u) => Array.from({ length: 8 }, (_, x) => Math.cos((2 * x + 1) * u * Math.PI / 16)));
|
|
76
|
+
const previous = [0, 0, 0];
|
|
77
|
+
for (let by = 0; by < height; by += 8)
|
|
78
|
+
for (let bx = 0; bx < width; bx += 8) {
|
|
79
|
+
for (let channel = 0; channel < 3; channel++) {
|
|
80
|
+
const block = [];
|
|
81
|
+
for (let y = 0; y < 8; y++)
|
|
82
|
+
for (let x = 0; x < 8; x++) {
|
|
83
|
+
// JPEG coding pads partial 8x8 MCUs only; this never changes the declared photograph/crop dimensions.
|
|
84
|
+
const p = (Math.min(by + y, height - 1) * width + Math.min(bx + x, width - 1)) * 3;
|
|
85
|
+
const red = samples[p], green = samples[p + 1], blue = samples[p + 2], luminance = .299 * red + .587 * green + .114 * blue;
|
|
86
|
+
block.push(channel === 0 ? luminance - 128 : channel === 1 ? (blue - luminance) / (2 * (1 - .114)) : (red - luminance) / (2 * (1 - .299)));
|
|
87
|
+
}
|
|
88
|
+
const transformed = [];
|
|
89
|
+
for (let v = 0; v < 8; v++)
|
|
90
|
+
for (let u = 0; u < 8; u++) {
|
|
91
|
+
let sum = 0;
|
|
92
|
+
for (let y = 0; y < 8; y++)
|
|
93
|
+
for (let x = 0; x < 8; x++)
|
|
94
|
+
sum += block[y * 8 + x] * cosine[u][x] * cosine[v][y];
|
|
95
|
+
transformed.push(Math.round(sum * .25 * (u === 0 ? Math.SQRT1_2 : 1) * (v === 0 ? Math.SQRT1_2 : 1) / q));
|
|
96
|
+
}
|
|
97
|
+
const difference = transformed[0] - previous[channel], size = amplitude(difference, 11);
|
|
98
|
+
emit(size, 4);
|
|
99
|
+
coefficient(difference, size);
|
|
100
|
+
previous[channel] = transformed[0];
|
|
101
|
+
let zeroes = 0;
|
|
102
|
+
for (let i = 1; i < 64; i++) {
|
|
103
|
+
const value = transformed[zigzag[i]];
|
|
104
|
+
if (value === 0) {
|
|
105
|
+
zeroes++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
while (zeroes >= 16) {
|
|
109
|
+
emit(1, 8);
|
|
110
|
+
zeroes -= 16;
|
|
111
|
+
}
|
|
112
|
+
const length = amplitude(value, 10), symbol = zeroes * 16 + length;
|
|
113
|
+
emit(ac.indexOf(symbol), 8);
|
|
114
|
+
coefficient(value, length);
|
|
115
|
+
zeroes = 0;
|
|
116
|
+
}
|
|
117
|
+
if (zeroes)
|
|
118
|
+
emit(0, 8);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (bits)
|
|
122
|
+
emit((1 << (8 - bits)) - 1, 8 - bits);
|
|
123
|
+
bytes.push(255, 217);
|
|
124
|
+
return Uint8Array.from(bytes);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=export-jpeg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-jpeg.js","sourceRoot":"","sources":["../../src/capture/export-jpeg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Internal TIFF field packing; pointers are resolved only inside the returned owned buffer. */
|
|
2
|
+
export interface ExportTiffTag {
|
|
3
|
+
id: number;
|
|
4
|
+
type: number;
|
|
5
|
+
count: number;
|
|
6
|
+
data: Uint8Array;
|
|
7
|
+
pointer?: "exif" | "pixels";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Pack validated unsigned integer tag values into little-endian BYTE, SHORT or LONG payloads; reject
|
|
11
|
+
* values outside the selected storage range.
|
|
12
|
+
* @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
|
|
13
|
+
* @param type - 1 | 3 | 4. See the linked contract for coordinate, unit and profile binding semantics.
|
|
14
|
+
* @param values - readonly number[]. See the linked contract for coordinate, unit and profile binding semantics.
|
|
15
|
+
* @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
16
|
+
*
|
|
17
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
18
|
+
*/
|
|
19
|
+
export declare function exportTiffNumbers(id: number, type: 1 | 3 | 4, values: readonly number[]): ExportTiffTag;
|
|
20
|
+
/**
|
|
21
|
+
* Describe an internal BYTE/UNDEFINED tag using the supplied byte array. The payload is borrowed here;
|
|
22
|
+
* the final TIFF packer copies it into its owned output buffer.
|
|
23
|
+
* @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
|
|
24
|
+
* @param type - 1 | 7. See the linked contract for coordinate, unit and profile binding semantics.
|
|
25
|
+
* @param data - Uint8Array. See the linked contract for coordinate, unit and profile binding semantics.
|
|
26
|
+
* @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
27
|
+
*
|
|
28
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
29
|
+
*/
|
|
30
|
+
export declare function exportTiffBytes(id: number, type: 1 | 7, data: Uint8Array): ExportTiffTag;
|
|
31
|
+
/**
|
|
32
|
+
* Encode printable ASCII with the required NUL terminator; reject unsupported characters instead of
|
|
33
|
+
* silent lossy replacement.
|
|
34
|
+
* @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
|
|
35
|
+
* @param value - string. See the linked contract for coordinate, unit and profile binding semantics.
|
|
36
|
+
* @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
37
|
+
*
|
|
38
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
39
|
+
*/
|
|
40
|
+
export declare function exportTiffAscii(id: number, value: string): ExportTiffTag;
|
|
41
|
+
/** Bounded rational approximation; matrix/metadata precision is explicit, never silent overflow. */
|
|
42
|
+
export declare function exportTiffRationals(id: number, signed: boolean, values: readonly number[]): ExportTiffTag;
|
|
43
|
+
/** Independently authored little-endian TIFF6 IFD0 + EXIF IFD, with optional uncompressed strip. */
|
|
44
|
+
export declare function packExportTiff(main: readonly ExportTiffTag[], exif: readonly ExportTiffTag[], pixels?: Uint8Array<ArrayBuffer>): Uint8Array;
|
|
45
|
+
//# sourceMappingURL=export-tiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-tiff.d.ts","sourceRoot":"","sources":["../../src/capture/export-tiff.ts"],"names":[],"mappings":"AAcA,gGAAgG;AAChG,MAAM,WAAW,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE;AACzH;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAOvG;AACD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,aAAa,CAExF;AACD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAGxE;AACD,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAWzG;AACD,oGAAoG;AACpG,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,0BAAmB,GAAG,UAAU,CA8BpI"}
|