@photivra/engine 1.4.0 → 2.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/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
# sensor/raw-readout.ts public contracts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
4
|
|
|
5
5
|
## calculateExpectedSensorReadout
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Signal ordering is expected charge → independent seeded photo/dark draws → signed electronic read
|
|
11
|
-
noise → upper pre-ADC threshold → black pedestal → nearest-half-up ADC quantization → unsigned code
|
|
12
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
13
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
14
|
-
regime.
|
|
7
|
+
Maps the expected charge through the declared gain, offset and readout limits, with no random
|
|
8
|
+
sampling. Each kind of clipping (physical storage, pre-ADC, digital) is reported separately.
|
|
15
9
|
|
|
16
10
|
```ts
|
|
17
11
|
export function calculateExpectedSensorReadout(
|
|
@@ -40,14 +34,10 @@ export interface CalculateExpectedSensorReadoutInput {
|
|
|
40
34
|
|
|
41
35
|
## parseSensorChargeSamplingProfile
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
missing required fields and
|
|
37
|
+
Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
38
|
+
missing required fields and inconsistent scientific data are rejected.
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
noise → upper pre-ADC threshold → black pedestal → nearest-half-up ADC quantization → unsigned code
|
|
48
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
49
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
50
|
-
regime.
|
|
40
|
+
The profile sets how expected charge is sampled into random photo and dark counts.
|
|
51
41
|
|
|
52
42
|
```ts
|
|
53
43
|
export function parseSensorChargeSamplingProfile(
|
|
@@ -59,14 +49,10 @@ This call is synchronous; any supplied provider must follow its explicit synchro
|
|
|
59
49
|
|
|
60
50
|
## parseSensorReadoutConversionProfile
|
|
61
51
|
|
|
62
|
-
|
|
63
|
-
missing required fields and
|
|
52
|
+
Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
53
|
+
missing required fields and inconsistent scientific data are rejected.
|
|
64
54
|
|
|
65
|
-
|
|
66
|
-
noise → upper pre-ADC threshold → black pedestal → nearest-half-up ADC quantization → unsigned code
|
|
67
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
68
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
69
|
-
regime.
|
|
55
|
+
The profile lists the declared conversion regimes. ISO never invents a regime.
|
|
70
56
|
|
|
71
57
|
```ts
|
|
72
58
|
export function parseSensorReadoutConversionProfile(
|
|
@@ -97,14 +83,8 @@ export interface ResolvedSensorReadoutRegime {
|
|
|
97
83
|
|
|
98
84
|
## resolveSensorReadoutRegime
|
|
99
85
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Signal ordering is expected charge → independent seeded photo/dark draws → signed electronic read
|
|
104
|
-
noise → upper pre-ADC threshold → black pedestal → nearest-half-up ADC quantization → unsigned code
|
|
105
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
106
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
107
|
-
regime.
|
|
86
|
+
Selects a declared readout regime and checks it against the exact channel and profile identity.
|
|
87
|
+
The regime is never inferred from ISO.
|
|
108
88
|
|
|
109
89
|
```ts
|
|
110
90
|
export function resolveSensorReadoutRegime(
|
|
@@ -145,6 +125,20 @@ SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION =
|
|
|
145
125
|
"0.1.0" as const
|
|
146
126
|
```
|
|
147
127
|
|
|
128
|
+
## SensorAdcIntegralNonLinearity
|
|
129
|
+
|
|
130
|
+
Optional ADC integral non-linearity (INL): an offset in code units (LSB, least significant bit),
|
|
131
|
+
piecewise linear in the ideal continuous ADC input code, added before quantization. The points must
|
|
132
|
+
start at code 0 and end at the ADC maximum code. If omitted, the ADC is ideal and uniform.
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
export interface SensorAdcIntegralNonLinearity {
|
|
136
|
+
kind: "piecewise-linear-code-offset";
|
|
137
|
+
knots: readonly { code: number; offsetCodes: number }[];
|
|
138
|
+
evidence: readonly EvidenceProvenance[];
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
148
142
|
## SensorAdditionalChargeSamplingModel
|
|
149
143
|
|
|
150
144
|
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
@@ -187,6 +181,17 @@ export interface SensorChargeRealization {
|
|
|
187
181
|
photoRealizedElectronCount: number;
|
|
188
182
|
darkExpectedElectronCount: number;
|
|
189
183
|
darkRealizedElectronCount: number;
|
|
184
|
+
/** Fixed-pattern profile applied to this realization, or null for the uniform population model. */
|
|
185
|
+
fixedPatternNoiseProfileId:
|
|
186
|
+
string | null;
|
|
187
|
+
/** PRNU gain applied to the photo expectation (exactly 1 without a fixed pattern). */
|
|
188
|
+
photoResponseGainFactor: number;
|
|
189
|
+
/** DSNU/hot-pixel factor applied to the dark expectation (exactly 1 without a fixed pattern). */
|
|
190
|
+
darkCurrentFactor: number;
|
|
191
|
+
hotPixel: boolean;
|
|
192
|
+
/** Poisson means actually sampled: expectation × the site's fixed-pattern factor. */
|
|
193
|
+
photoSampledMeanElectronCount: number;
|
|
194
|
+
darkSampledMeanElectronCount: number;
|
|
190
195
|
additionalComponents:
|
|
191
196
|
readonly {
|
|
192
197
|
componentId: string;
|
|
@@ -280,8 +285,15 @@ export interface SensorExpectedReadoutSignal {
|
|
|
280
285
|
expectedCodeBeforeBlackOffset:
|
|
281
286
|
number;
|
|
282
287
|
blackLevelCode: number;
|
|
288
|
+
/** Continuous ADC input code including any declared INL offset. */
|
|
283
289
|
expectedCodeBeforeQuantization:
|
|
284
290
|
number;
|
|
291
|
+
adcIntegralNonLinearityOffsetCodes:
|
|
292
|
+
number;
|
|
293
|
+
digitalGain: number;
|
|
294
|
+
/** Continuous code after post-ADC digital gain about black (equals the ADC input without one). */
|
|
295
|
+
expectedCodeAfterDigitalGain:
|
|
296
|
+
number;
|
|
285
297
|
adcBitDepth: number;
|
|
286
298
|
adcMaximumCode: number;
|
|
287
299
|
digitalSaturationCode: number;
|
|
@@ -337,11 +349,17 @@ export interface SensorRawCodeSample {
|
|
|
337
349
|
}[];
|
|
338
350
|
totalElectronicReadNoiseElectrons:
|
|
339
351
|
number;
|
|
352
|
+
/** Fixed-pattern profile applied at readout, or null. */
|
|
353
|
+
fixedPatternNoiseProfileId:
|
|
354
|
+
string | null;
|
|
355
|
+
/** Static fixed-pattern row + column offset in input-referred electrons (0 without a pattern). */
|
|
356
|
+
fixedPatternReadoutOffsetElectrons:
|
|
357
|
+
number;
|
|
340
358
|
electronEquivalentAfterReadNoise:
|
|
341
359
|
number;
|
|
342
360
|
preAdcSaturationElectronEquivalent:
|
|
343
361
|
number;
|
|
344
|
-
/** Signed electronic signal after upper
|
|
362
|
+
/** Signed electronic signal after the upper (pre-ADC) clip, before conversion and the black pedestal. */
|
|
345
363
|
electronEquivalentAfterPreAdcSaturation:
|
|
346
364
|
number;
|
|
347
365
|
preAdcSaturationApplied:
|
|
@@ -349,8 +367,17 @@ export interface SensorRawCodeSample {
|
|
|
349
367
|
systemConversionGainElectronsPerCode:
|
|
350
368
|
number;
|
|
351
369
|
blackLevelCode: number;
|
|
370
|
+
/** Continuous ADC input code including any declared integral non-linearity offset. */
|
|
352
371
|
codeBeforeQuantization:
|
|
353
372
|
number;
|
|
373
|
+
/** INL offset added before quantization (0 for an ideal ADC). */
|
|
374
|
+
adcIntegralNonLinearityOffsetCodes:
|
|
375
|
+
number;
|
|
376
|
+
/** ADC output after quantization and the ADC code-range limit, before digital gain. */
|
|
377
|
+
adcCodeBeforeDigitalGain:
|
|
378
|
+
number;
|
|
379
|
+
/** Post-ADC digital gain (1 when the regime declares none). */
|
|
380
|
+
digitalGain: number;
|
|
354
381
|
quantizedCodeBeforeDigitalClamp:
|
|
355
382
|
number;
|
|
356
383
|
adcBitDepth: number;
|
|
@@ -397,11 +424,12 @@ export interface SensorReadoutConversionProfile {
|
|
|
397
424
|
|
|
398
425
|
## SensorReadoutConversionRegime
|
|
399
426
|
|
|
400
|
-
One explicitly selected electronic conversion regime
|
|
401
|
-
per code, upper pre-ADC electron
|
|
402
|
-
read-noise components and unsigned ADC coding policy.
|
|
403
|
-
saturation are code
|
|
404
|
-
mechanism
|
|
427
|
+
One explicitly selected electronic conversion regime. It has a sourced number of
|
|
428
|
+
electrons per code, an upper pre-ADC threshold in electron equivalents, separate
|
|
429
|
+
read-noise components (RMS electrons) and an unsigned ADC coding policy. The black
|
|
430
|
+
pedestal and digital saturation are in code units. The regime does not guess its
|
|
431
|
+
hardware mechanism, is not chosen from ISO automatically, and does not replace
|
|
432
|
+
physical storage capacity.
|
|
405
433
|
|
|
406
434
|
```ts
|
|
407
435
|
export interface SensorReadoutConversionRegime {
|
|
@@ -420,23 +448,52 @@ export interface SensorReadoutConversionRegime {
|
|
|
420
448
|
digitalSaturationCode: number;
|
|
421
449
|
transfer:
|
|
422
450
|
"uniform-round-half-up";
|
|
451
|
+
/**
|
|
452
|
+
* Optional post-ADC digital gain (>= 1) applied about the black level:
|
|
453
|
+
* code = roundHalfUp((adcCode - black) * digitalGain + black). Omission means 1.
|
|
454
|
+
*/
|
|
455
|
+
digitalGain?: number;
|
|
456
|
+
integralNonLinearity?:
|
|
457
|
+
SensorAdcIntegralNonLinearity;
|
|
423
458
|
};
|
|
459
|
+
exposureIndexGain?:
|
|
460
|
+
SensorReadoutExposureIndexGain;
|
|
424
461
|
evidence:
|
|
425
462
|
readonly EvidenceProvenance[];
|
|
426
463
|
limitations: readonly string[];
|
|
427
464
|
}
|
|
428
465
|
```
|
|
429
466
|
|
|
467
|
+
## SensorReadoutExposureIndexGain
|
|
468
|
+
|
|
469
|
+
Optional record of how one regime's ISO gain was derived (the exposure index of CIPA DC-004,
|
|
470
|
+
relative to the base exposure index). The readout equations still use
|
|
471
|
+
systemConversionGainElectronsPerCode (analog, before the ADC) and adc.digitalGain (after the ADC).
|
|
472
|
+
This record must agree with them and never replaces them.
|
|
473
|
+
|
|
474
|
+
```ts
|
|
475
|
+
export interface SensorReadoutExposureIndexGain {
|
|
476
|
+
exposureIndex: number;
|
|
477
|
+
baseExposureIndex: number;
|
|
478
|
+
/** Analog (pre-ADC) gain relative to the base-exposure-index regime. */
|
|
479
|
+
analogGain: number;
|
|
480
|
+
/** Post-ADC digital gain; equals adc.digitalGain (1 when omitted). */
|
|
481
|
+
digitalGain: number;
|
|
482
|
+
conversionGainMode:
|
|
483
|
+
| "single-conversion-gain"
|
|
484
|
+
| "low-conversion-gain"
|
|
485
|
+
| "high-conversion-gain";
|
|
486
|
+
evidence: readonly EvidenceProvenance[];
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
430
490
|
## simulateSensorChargeRealization
|
|
431
491
|
|
|
432
|
-
|
|
433
|
-
policies from expected accumulated charge.
|
|
492
|
+
Draws deterministic, separately seeded Poisson counts for photo and dark charge, and applies the
|
|
493
|
+
declared policies for additional components, starting from the expected accumulated charge.
|
|
434
494
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
438
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
439
|
-
regime.
|
|
495
|
+
This is steps 1–2 of the readout order (see the module notes). Physical storage saturation is
|
|
496
|
+
reported separately from later clipping.
|
|
440
497
|
|
|
441
498
|
```ts
|
|
442
499
|
export function simulateSensorChargeRealization(
|
|
@@ -458,19 +515,22 @@ export interface SimulateSensorChargeRealizationInput {
|
|
|
458
515
|
samplingProfile:
|
|
459
516
|
SensorChargeSamplingProfile;
|
|
460
517
|
seedUint32: number;
|
|
518
|
+
/**
|
|
519
|
+
* Optional fixed-pattern noise for this sensor. PRNU (photo-response non-uniformity) scales the
|
|
520
|
+
* photo Poisson mean; DSNU (dark-signal non-uniformity) and hot pixels scale the dark Poisson mean.
|
|
521
|
+
* If omitted, the result is exactly the uniform population model.
|
|
522
|
+
*/
|
|
523
|
+
fixedPatternNoise?:
|
|
524
|
+
SensorFixedPatternNoiseProfile;
|
|
461
525
|
}
|
|
462
526
|
```
|
|
463
527
|
|
|
464
528
|
## simulateSensorRawCode
|
|
465
529
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
noise → upper pre-ADC threshold → black pedestal → nearest-half-up ADC quantization → unsigned code
|
|
471
|
-
limits. Signed below-black values survive until the final code clamp. Physical storage saturation,
|
|
472
|
-
pre-ADC clipping and digital clipping have distinct diagnostics; ISO never invents a conversion
|
|
473
|
-
regime.
|
|
530
|
+
Simulates one RAW code from a charge realization with the declared seed and regime: steps 3–7 of
|
|
531
|
+
the readout order (see the module notes). Signed read noise is kept through the black pedestal and
|
|
532
|
+
quantization, and only the final code is clamped. Returns the bounded native ADC code and per-step
|
|
533
|
+
diagnostics.
|
|
474
534
|
|
|
475
535
|
```ts
|
|
476
536
|
export function simulateSensorRawCode(
|
|
@@ -495,5 +555,11 @@ export interface SimulateSensorRawCodeInput {
|
|
|
495
555
|
SensorReadoutConversionProfile;
|
|
496
556
|
regimeId: string;
|
|
497
557
|
readNoiseSeedUint32: number;
|
|
558
|
+
/**
|
|
559
|
+
* Optional fixed pattern; must be the same profile used for the charge realization. Its static
|
|
560
|
+
* row/column offsets are added with read noise before the pre-ADC threshold.
|
|
561
|
+
*/
|
|
562
|
+
fixedPatternNoise?:
|
|
563
|
+
SensorFixedPatternNoiseProfile;
|
|
498
564
|
}
|
|
499
565
|
```
|
|
@@ -1,16 +1,77 @@
|
|
|
1
1
|
# sensor/raw-reconstruction.ts public contracts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION
|
|
6
|
+
|
|
7
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION = "1.0.0" as const
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## BuiltInBayerDemosaicKernel
|
|
14
|
+
|
|
15
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
export type BuiltInBayerDemosaicKernel = "bilinear";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## BuiltInBayerDemosaicProfiles
|
|
22
|
+
|
|
23
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
export interface BuiltInBayerDemosaicProfiles {
|
|
27
|
+
kernel: BuiltInBayerDemosaicKernel;
|
|
28
|
+
/** One profile per absolute CFA phase, row-major (`phaseY`, then `phaseX`). */
|
|
29
|
+
phaseProfiles: { phaseX: number; phaseY: number; profile: SensorRawReconstructionProfile }[];
|
|
30
|
+
outputChannelIds: [string, string, string];
|
|
31
|
+
/** Largest |offset| of any contribution: 1 for bilinear. */
|
|
32
|
+
kernelReachSites: number;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## createBuiltInBayerDemosaicProfiles
|
|
37
|
+
|
|
38
|
+
Builds the per-phase linear reconstruction profiles of the built-in bilinear Bayer demosaic kernel.
|
|
6
39
|
|
|
7
|
-
|
|
8
|
-
reconstruction
|
|
40
|
+
The result is the ordinary `explicit-linear-native-neighborhood` profile used by RAW frame
|
|
41
|
+
reconstruction, native RAW development and `createCfaPlaneReconstructionTask`; there is no special
|
|
42
|
+
code path. Edge pixels need either a region whose neighbourhood stays inside the frame, or mirror
|
|
43
|
+
border handling.
|
|
9
44
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
45
|
+
Approximation: fixed linear interpolation, not a calibrated or adaptive demosaic. Bilinear blurs
|
|
46
|
+
and shows "zipper" artefacts at edges. Aliasing and moiré are not modelled. The adaptive AHD method
|
|
47
|
+
is `createAhdDemosaicTask`.
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
export function createBuiltInBayerDemosaicProfiles(input: CreateBuiltInBayerDemosaicProfilesInput): CalculationResult<BuiltInBayerDemosaicProfiles>;
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
54
|
+
|
|
55
|
+
## CreateBuiltInBayerDemosaicProfilesInput
|
|
56
|
+
|
|
57
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
export interface CreateBuiltInBayerDemosaicProfilesInput {
|
|
61
|
+
kernel: BuiltInBayerDemosaicKernel;
|
|
62
|
+
/** Capture mode the RAW frame belongs to; copied into every phase profile. */
|
|
63
|
+
captureModeId: string;
|
|
64
|
+
/** Must be a 2×2 periodic Bayer mosaic: one red, one blue and two diagonal green sites. */
|
|
65
|
+
colorSamplingProfile: SensorColorSamplingProfile;
|
|
66
|
+
/** CFA channel IDs for the red, green and blue roles. This is also the output channel order. */
|
|
67
|
+
channelRoles: { red: string; green: string; blue: string };
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## createSensorRawCaptureSample
|
|
72
|
+
|
|
73
|
+
Commits one validated native RAW sample, with its exact site, channel and exposure event, for use
|
|
74
|
+
in reconstruction.
|
|
14
75
|
|
|
15
76
|
```ts
|
|
16
77
|
export function createSensorRawCaptureSample(
|
|
@@ -31,18 +92,22 @@ export interface CreateSensorRawCaptureSampleInput {
|
|
|
31
92
|
SensorRawCodeSample;
|
|
32
93
|
contributors:
|
|
33
94
|
ResolvedCaptureModeColorSamplingContributors;
|
|
95
|
+
/**
|
|
96
|
+
* The selected readout regime's declared ADC integral non-linearity (INL), if any. The code sample
|
|
97
|
+
* records INL only at its own code, but the effective white level needs it at saturation.
|
|
98
|
+
*/
|
|
99
|
+
adcIntegralNonLinearity?:
|
|
100
|
+
SensorAdcIntegralNonLinearity;
|
|
34
101
|
}
|
|
35
102
|
```
|
|
36
103
|
|
|
37
104
|
## parseSensorRawReconstructionProfile
|
|
38
105
|
|
|
39
|
-
|
|
40
|
-
missing required fields and
|
|
106
|
+
Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
107
|
+
missing required fields and inconsistent scientific data are rejected.
|
|
41
108
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
|
|
45
|
-
demosaic algorithm.
|
|
109
|
+
The profile declares a normalized linear kernel for each output channel. It does not infer the
|
|
110
|
+
sensor's spectral primaries or calibrated colour.
|
|
46
111
|
|
|
47
112
|
```ts
|
|
48
113
|
export function parseSensorRawReconstructionProfile(
|
|
@@ -52,15 +117,21 @@ export function parseSensorRawReconstructionProfile(
|
|
|
52
117
|
|
|
53
118
|
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
54
119
|
|
|
120
|
+
## RawReconstructionBorderHandling
|
|
121
|
+
|
|
122
|
+
How a reconstruction neighbourhood that leaves the native frame is handled.
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
export type RawReconstructionBorderHandling = "reject" | "mirror";
|
|
126
|
+
```
|
|
127
|
+
|
|
55
128
|
## resolveSensorRawReconstruction
|
|
56
129
|
|
|
57
|
-
|
|
58
|
-
|
|
130
|
+
Combines the supplied native samples through explicit normalized kernels, keeping CFA identity
|
|
131
|
+
and signed black-subtracted values.
|
|
59
132
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
|
|
63
|
-
demosaic algorithm.
|
|
133
|
+
The CFA phase is absolute; orientation and crop come later. This fixed linear reconstruction does
|
|
134
|
+
not infer spectral primaries or calibrated colour, and is not a general demosaic algorithm.
|
|
64
135
|
|
|
65
136
|
```ts
|
|
66
137
|
export function resolveSensorRawReconstruction(
|
|
@@ -134,6 +205,12 @@ export interface SensorRawCaptureSample {
|
|
|
134
205
|
digitalSaturationCode: number;
|
|
135
206
|
blackSubtractedNormalizedCode:
|
|
136
207
|
number;
|
|
208
|
+
/** Full-saturation code from `calculateEffectiveSaturationCode`; constant per CFA phase. */
|
|
209
|
+
effectiveSaturationCode: number;
|
|
210
|
+
/** Regime system conversion gain, e⁻ per code (DNG NoiseProfile input). */
|
|
211
|
+
systemConversionGainElectronsPerCode: number;
|
|
212
|
+
/** Total read noise in e⁻: the square root of the sum of the squared RMS components (DNG NoiseProfile input). */
|
|
213
|
+
readNoiseRmsElectrons: number;
|
|
137
214
|
readoutProfileId: string;
|
|
138
215
|
readoutRegimeId: string;
|
|
139
216
|
sourceChargeSeedUint32: number;
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# sensor/readout-exposure-linkage.ts public contracts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
4
|
|
|
5
5
|
## assessReadoutExposureTimingLinkage
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Checks an explicitly declared link between the rolling readout scan and one
|
|
8
|
+
or more electronic exposure-boundary scans.
|
|
9
9
|
|
|
10
|
-
This
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
relative to exposure start/end.
|
|
10
|
+
This is deliberately weaker than time synchronization. It can show that two
|
|
11
|
+
schedules sweep the native sensor in the same order (or in reverse), but not
|
|
12
|
+
when readout happens relative to the start or end of exposure.
|
|
14
13
|
|
|
15
|
-
The total
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
reported without implying a shared clock origin.
|
|
14
|
+
The total data-readout time is kept for diagnostics and never used to check
|
|
15
|
+
the link. The readout skew and the boundary sweep time may differ; their
|
|
16
|
+
ratio is reported without implying a shared clock.
|
|
19
17
|
|
|
20
18
|
```ts
|
|
21
19
|
export function assessReadoutExposureTimingLinkage(
|
|
@@ -43,6 +41,56 @@ export interface AssessReadoutExposureTimingLinkageInput {
|
|
|
43
41
|
}
|
|
44
42
|
```
|
|
45
43
|
|
|
44
|
+
## createRollingShutterCaptureExposureSchedule
|
|
45
|
+
|
|
46
|
+
The exposure-schedule fields of a derived rolling-shutter schedule, without model metadata.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
export function createRollingShutterCaptureExposureSchedule(
|
|
50
|
+
schedule: ElectronicRollingShutterExposureSchedule
|
|
51
|
+
): Pick<CalculateCaptureExposureWindowsInput, "shutterMechanism" | "nominalExposureDurationSeconds" | "opening" | "closing">;
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
55
|
+
|
|
56
|
+
## ELECTRONIC_ROLLING_SHUTTER_MODEL
|
|
57
|
+
|
|
58
|
+
Model identity of the electronic rolling-shutter (line reset → line read) exposure schedule.
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
ELECTRONIC_ROLLING_SHUTTER_MODEL = Object.freeze({
|
|
62
|
+
id: "electronic-rolling-shutter-line-reset-read",
|
|
63
|
+
version: "1.0.0"
|
|
64
|
+
} as const)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## ElectronicRollingShutterExposureSchedule
|
|
68
|
+
|
|
69
|
+
Exposure-window schedule of an electronic rolling shutter. Its `shutterMechanism`,
|
|
70
|
+
`nominalExposureDurationSeconds`, `opening` and `closing` fields form a complete exposure schedule, so
|
|
71
|
+
they can be passed as a native RAW / environment `exposureWindow` or spread into a production
|
|
72
|
+
`temporalCapture.exposureWindowInput` (see {@link createRollingShutterCaptureExposureSchedule}).
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
export interface ElectronicRollingShutterExposureSchedule {
|
|
76
|
+
modelId: typeof ELECTRONIC_ROLLING_SHUTTER_MODEL.id;
|
|
77
|
+
modelVersion: typeof ELECTRONIC_ROLLING_SHUTTER_MODEL.version;
|
|
78
|
+
shutterMechanism: "electronic";
|
|
79
|
+
nominalExposureDurationSeconds: SourcedCaptureTimingSeconds;
|
|
80
|
+
/** Line-reset scan: a native point at normalized scan position s starts integrating at s·τ. */
|
|
81
|
+
opening: UniformLinearExposureBoundarySchedule;
|
|
82
|
+
/** Line-read scan: the same point stops integrating at T + s·τ. */
|
|
83
|
+
closing: UniformLinearExposureBoundarySchedule;
|
|
84
|
+
/** Explicit linkage declaration accepted by {@link assessReadoutExposureTimingLinkage}. */
|
|
85
|
+
linkage: Extract<ReadoutExposureTimingLinkageDeclaration, { kind: "spatial-phase-linked" }>;
|
|
86
|
+
/** τ: offset between the first and last exposure starts (equal to the readout skew). */
|
|
87
|
+
lineScanSkewSeconds: number;
|
|
88
|
+
/** Every point integrates for exactly the nominal exposure duration T. */
|
|
89
|
+
localExposureDurationSeconds: number;
|
|
90
|
+
limitations: readonly string[];
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
46
94
|
## ReadoutExposureBoundaryId
|
|
47
95
|
|
|
48
96
|
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
@@ -59,8 +107,8 @@ The exact contract is declared below; use the domain guide for assumptions and s
|
|
|
59
107
|
export interface ReadoutExposureBoundarySpatialLink {
|
|
60
108
|
boundary: ReadoutExposureBoundaryId;
|
|
61
109
|
/**
|
|
62
|
-
*
|
|
63
|
-
* selected electronic exposure-boundary scan
|
|
110
|
+
* How the normalized position of the rolling readout scan relates to that
|
|
111
|
+
* of the selected electronic exposure-boundary scan.
|
|
64
112
|
*
|
|
65
113
|
* "same": boundary normalized phase = readout normalized phase.
|
|
66
114
|
* "reversed": boundary normalized phase = 1 - readout normalized phase.
|
|
@@ -69,10 +117,10 @@ export interface ReadoutExposureBoundarySpatialLink {
|
|
|
69
117
|
*/
|
|
70
118
|
phaseOrientation: ReadoutExposureSpatialPhaseOrientation;
|
|
71
119
|
/**
|
|
72
|
-
* Evidence
|
|
120
|
+
* Evidence for the link itself.
|
|
73
121
|
*
|
|
74
|
-
* The readout direction
|
|
75
|
-
* their own separate evidence.
|
|
122
|
+
* The readout direction and timing, and the exposure-boundary direction and
|
|
123
|
+
* timing, keep their own separate evidence.
|
|
76
124
|
*/
|
|
77
125
|
evidence: readonly EvidenceProvenance[];
|
|
78
126
|
}
|
|
@@ -94,15 +142,15 @@ export interface ReadoutExposureBoundarySpatialLinkAssessment {
|
|
|
94
142
|
readoutDirectionNative: NativeSensorReadoutScanDirection;
|
|
95
143
|
boundaryDirectionNative: NativeSensorReadoutScanDirection;
|
|
96
144
|
/**
|
|
97
|
-
*
|
|
145
|
+
* Rolling readout skew: time from the first to the last scan position.
|
|
98
146
|
*/
|
|
99
147
|
readoutSpatialSamplingSkewSeconds: SourcedSensorTimingSeconds;
|
|
100
148
|
/**
|
|
101
|
-
*
|
|
149
|
+
* Time for the exposure boundary to sweep from first to last position.
|
|
102
150
|
*/
|
|
103
151
|
boundaryTraversalDurationSeconds: SourcedCaptureTimingSeconds;
|
|
104
152
|
/**
|
|
105
|
-
*
|
|
153
|
+
* A descriptive ratio only. A value of 1 does not prove time
|
|
106
154
|
* synchronization or a common clock origin.
|
|
107
155
|
*/
|
|
108
156
|
boundaryTraversalToReadoutSpatialSkewRatio: number;
|
|
@@ -135,8 +183,8 @@ export interface ReadoutExposureTimingLinkageAssessment {
|
|
|
135
183
|
activeCaptureRect: RasterRect;
|
|
136
184
|
absoluteTemporalAlignment: "not-established";
|
|
137
185
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
186
|
+
* Data-readout time for the capture. Kept for diagnostics, but never used to
|
|
187
|
+
* check an exposure-boundary link.
|
|
140
188
|
*/
|
|
141
189
|
captureReadoutDurationSeconds: SourcedSensorTimingSeconds;
|
|
142
190
|
links: readonly ReadoutExposureBoundarySpatialLinkAssessment[];
|
|
@@ -155,7 +203,7 @@ The exact contract is declared below; use the domain guide for assumptions and s
|
|
|
155
203
|
export type ReadoutExposureTimingLinkageDeclaration =
|
|
156
204
|
| {
|
|
157
205
|
/**
|
|
158
|
-
*
|
|
206
|
+
* No link between readout and exposure is stated for this capture.
|
|
159
207
|
* This is not evidence that the physical processes are independent.
|
|
160
208
|
*/
|
|
161
209
|
kind: "unlinked";
|
|
@@ -163,10 +211,58 @@ export type ReadoutExposureTimingLinkageDeclaration =
|
|
|
163
211
|
}
|
|
164
212
|
| {
|
|
165
213
|
/**
|
|
166
|
-
* One or more exposure boundaries are explicitly
|
|
167
|
-
* readout by normalized native
|
|
214
|
+
* One or more exposure boundaries are explicitly linked to the rolling
|
|
215
|
+
* readout by their normalized position across the native sensor.
|
|
168
216
|
*/
|
|
169
217
|
kind: "spatial-phase-linked";
|
|
170
218
|
links: readonly ReadoutExposureBoundarySpatialLink[];
|
|
171
219
|
};
|
|
172
220
|
```
|
|
221
|
+
|
|
222
|
+
## resolveElectronicRollingShutterExposureSchedule
|
|
223
|
+
|
|
224
|
+
Derives the exposure-window schedule of a fully electronic rolling shutter from its rolling readout
|
|
225
|
+
declaration.
|
|
226
|
+
|
|
227
|
+
In a CMOS rolling shutter, each line is reset, collects light for the exposure time T and is then
|
|
228
|
+
read. The reset pointer runs T ahead of the read pointer, and both move at the line rate (El Gamal &
|
|
229
|
+
Eltoukhy 2005; Liang, Chang & Chen 2008). With the uniform linear scan used throughout this engine, a
|
|
230
|
+
native point at normalized scan position s ∈ [0, 1] (along the declared scan direction, over the
|
|
231
|
+
active capture) collects light over [s·τ, s·τ + T], where τ is the declared first-to-last readout
|
|
232
|
+
skew. So both boundaries become uniform linear scans in the readout direction that take τ to sweep.
|
|
233
|
+
|
|
234
|
+
When this schedule feeds the per-site exposure windows, everything that samples motion, moving
|
|
235
|
+
sources or time-varying light at local exposure times (environment RAW, rotation quadrature,
|
|
236
|
+
temporal illumination integration) produces rolling-shutter skew, wobble, partial exposure and
|
|
237
|
+
flicker banding.
|
|
238
|
+
|
|
239
|
+
Approximation: constant line rate, no line-reset jitter, no hybrid of global reset with a mechanical
|
|
240
|
+
closing shutter, and the active-capture skew is declared by the caller (never scaled from a
|
|
241
|
+
full-frame value).
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
export function resolveElectronicRollingShutterExposureSchedule(
|
|
245
|
+
input: ResolveElectronicRollingShutterExposureScheduleInput
|
|
246
|
+
): ElectronicRollingShutterExposureSchedule;
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
250
|
+
|
|
251
|
+
## ResolveElectronicRollingShutterExposureScheduleInput
|
|
252
|
+
|
|
253
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
254
|
+
|
|
255
|
+
```ts
|
|
256
|
+
export interface ResolveElectronicRollingShutterExposureScheduleInput {
|
|
257
|
+
/** Rolling readout declaration whose scan direction and spatial skew drive both exposure boundaries. */
|
|
258
|
+
readout: RollingSensorReadoutTimingDeclaration;
|
|
259
|
+
/** Per-line integration time between line reset and line read. */
|
|
260
|
+
nominalExposureDurationSeconds: SourcedCaptureTimingSeconds;
|
|
261
|
+
/**
|
|
262
|
+
* Evidence that this capture uses a fully electronic, line-by-line (rolling) shutter whose reset
|
|
263
|
+
* scan runs at the readout line rate. This explicit link is required before sensor readout timing
|
|
264
|
+
* may set the exposure-window timing.
|
|
265
|
+
*/
|
|
266
|
+
linkageEvidence: readonly EvidenceProvenance[];
|
|
267
|
+
}
|
|
268
|
+
```
|