@photivra/engine 1.5.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 +393 -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 +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- 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 +65 -12
- package/dist/capture/native-raw.js +81 -19
- 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 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- 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/DENSE_PUPIL_QUALIFICATION.md +0 -121
- 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 -54
- 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_1_5_0.md +0 -105
- 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/SEPARABLE_EMISSION_DRAFT.md +0 -103
- 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/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-frame-reconstruction.js","sourceRoot":"","sources":["../../src/capture/raw-frame-reconstruction.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raw-frame-reconstruction.js","sourceRoot":"","sources":["../../src/capture/raw-frame-reconstruction.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Reconstructs sensor-channel values for a region of a committed RAW frame, using only the attached\n * native RAW samples.\n *\n * It revalidates the RAW codes and geometry and checks that every CFA phase has a kernel. Each pixel is\n * computed by the sensor module's explicit linear reconstruction (sensor/raw-reconstruction). No external\n * image plane can supply output values.\n * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord } from \"../core/record-validation.js\";\nimport { RAW_REFERENCE_MAX_NATIVE_SITES } from \"./raw-frame-limits.js\";\n\nimport { freezeOwnedData } from \"../core/owned-data.js\";\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport type { RasterRect } from \"../output/capture-geometry.js\";\nimport { parseSensorRawReconstructionProfile, resolveSensorRawReconstruction,\n type SensorRawReconstructionProfile, type SensorRawReconstructedPixel } from \"../sensor/raw-reconstruction.js\";\nimport { createSensorRawFrame, type SensorRawFrame, type SensorRawFrameInput } from \"./sensor-raw-frame.js\";\n\nexport const RAW_FRAME_RECONSTRUCTION_SCHEMA_VERSION = \"0.1.0\" as const;\n/** A kernel is chosen explicitly for each absolute native CFA repeat phase, not guessed from channel names. */\nexport interface RawFrameReconstructionPhaseProfile {\n phaseX: number;\n phaseY: number;\n profile: SensorRawReconstructionProfile;\n}\n/** Input to the bounded reference reconstruction. Region coordinates are in the full native sensor frame. */\nexport interface RawFrameReconstructionInput {\n rawFrame: SensorRawFrame;\n region: RasterRect;\n phaseProfiles: readonly RawFrameReconstructionPhaseProfile[];\n}\n/** Traceable sensor-channel values. Not colorimetric RGB and not a rendered photograph. */\nexport interface RawFrameReconstruction {\n schemaVersion: typeof RAW_FRAME_RECONSTRUCTION_SCHEMA_VERSION;\n rawFrame: SensorRawFrame;\n phaseProfiles: readonly RawFrameReconstructionPhaseProfile[];\n region: RasterRect;\n linearPlane: {\n imageState: \"virtual-sensor-channels\";\n rasterBinding: \"native-reconstruction-region\";\n pixelWidth: number;\n pixelHeight: number;\n channelIds: readonly string[];\n /** Interleaved values over the native region, row-major. Black-subtracted and normalized; can be negative. */\n samples: readonly number[];\n };\n /** Per-pixel result envelopes and the exact weighted RAW contributions, in the same row-major order. */\n pixels: readonly CalculationResult<SensorRawReconstructedPixel>[];\n lineage: \"engine-reconstructed-from-attached-raw\";\n producerOriginVerified: false;\n whiteBalanceApplied: false;\n colorTransformApplied: false;\n physicalOrientationApplied: false;\n outputCropApplied: false;\n sharpeningApplied: false;\n denoisingApplied: false;\n}\nfunction object(value: unknown, keys: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, keys, \"Invalid or non-allowlisted RAW reconstruction fields.\");\n}\nfunction integer(value: unknown, positive = false): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < (positive ? 1 : 0)) {\n throw new InvalidConfigurationError(\"RAW reconstruction coordinates require safe integers with valid sign.\");\n }\n return Object.is(value, -0) ? 0 : value;\n}\nfunction frame(value: unknown): SensorRawFrame {\n const r = object(value, [\"frameId\", \"capture\", \"modeId\", \"captureModeProfile\", \"colorSamplingProfile\", \"bindingProfile\",\n \"containerBitDepth\", \"samples\", \"schemaVersion\", \"sampleDomain\", \"sampleOrder\", \"producerBinding\", \"reconstructionApplied\",\n \"renderingApplied\", \"nativePixelWidth\", \"nativePixelHeight\"]);\n if (r.schemaVersion !== \"0.1.0\" || r.sampleDomain !== \"native-cfa-raw-code\" || r.sampleOrder !== \"native-row-major\" ||\n r.producerBinding !== \"caller-declared-capture-attachment\" || r.reconstructionApplied !== false || r.renderingApplied !== false ||\n !Array.isArray(r.samples) || r.samples.length > RAW_REFERENCE_MAX_NATIVE_SITES) {\n throw new InvalidConfigurationError(\"Reconstruction requires a committed native RAW frame of at most 4,096 samples.\");\n }\n const { schemaVersion, sampleDomain, sampleOrder, producerBinding, reconstructionApplied, renderingApplied,\n nativePixelWidth, nativePixelHeight, ...input } = r;\n void schemaVersion; void sampleDomain; void sampleOrder; void producerBinding; void reconstructionApplied; void renderingApplied;\n // The frame input parser checks full native coverage, site/code/seed identities and flags.\n const result = createSensorRawFrame(input as unknown as SensorRawFrameInput);\n if (nativePixelWidth !== result.nativePixelWidth || nativePixelHeight !== result.nativePixelHeight) {\n throw new InvalidConfigurationError(\"Committed RAW dimensions disagree with capture geometry.\");\n }\n return result;\n}\nfunction profile(value: unknown): SensorRawReconstructionProfile {\n const r = object(value, [\"schemaVersion\", \"profileId\", \"profileVersion\", \"captureModeId\", \"colorSamplingProfileId\", \"scientificStatus\",\n \"method\", \"normalization\", \"negativeBlackSubtractedValuesAllowed\", \"kernels\", \"evidence\", \"limitations\"]);\n if (!Array.isArray(r.kernels) || r.kernels.length === 0 || r.kernels.length > 16) {\n throw new InvalidConfigurationError(\"Reconstruction requires one to sixteen output channels.\");\n }\n let count = 0;\n for (const kernel of r.kernels) {\n const k = object(kernel, [\"outputChannelId\", \"contributions\"]);\n if (!Array.isArray(k.contributions) || k.contributions.length === 0) throw new InvalidConfigurationError(\"Missing RAW contributions.\");\n count += k.contributions.length;\n if (count > 256) throw new InvalidConfigurationError(\"Reconstruction profile exceeds 256 contributions.\");\n for (const c of k.contributions) object(c, [\"offsetX\", \"offsetY\", \"sourceChannelId\", \"weight\"]);\n }\n return parseSensorRawReconstructionProfile(r);\n}\n/** Internal: parses the kernel-per-CFA-phase table. Shared with packed native reconstruction. */\nexport function parseRawReconstructionPhaseProfiles(value: unknown, modeId: string,\n colorSamplingProfile: SensorRawFrame[\"colorSamplingProfile\"]): RawFrameReconstructionPhaseProfile[] {\n const layout = colorSamplingProfile.layout;\n if (layout.kind !== \"periodic-mosaic\") throw new InvalidConfigurationError(\"Reconstruction requires periodic native CFA.\");\n const phaseCount = layout.repeatWidthSites * layout.repeatHeightSites;\n if (phaseCount > 64 || !Array.isArray(value) || value.length !== phaseCount) {\n throw new InvalidConfigurationError(\"Every CFA phase requires one profile, with a maximum of 64 phases.\");\n }\n const phaseProfiles: RawFrameReconstructionPhaseProfile[] = [];\n const phases = new Set<string>();\n let channels: string[] | undefined;\n for (const entry of value) {\n const p = object(entry, [\"phaseX\", \"phaseY\", \"profile\"]), phaseX = integer(p.phaseX), phaseY = integer(p.phaseY), parsed = profile(p.profile);\n const key = phaseX + \":\" + phaseY, ids = parsed.kernels.map((k) => k.outputChannelId);\n if (phaseX >= layout.repeatWidthSites || phaseY >= layout.repeatHeightSites || phases.has(key) ||\n parsed.captureModeId !== modeId || parsed.colorSamplingProfileId !== colorSamplingProfile.profileId ||\n (channels && JSON.stringify(ids) !== JSON.stringify(channels))) {\n throw new InvalidConfigurationError(\"CFA phase/profile identity or output-channel order is inconsistent.\");\n }\n channels = ids; phases.add(key); phaseProfiles.push({ phaseX, phaseY, profile: parsed });\n }\n phaseProfiles.sort((a, b) => a.phaseY - b.phaseY || a.phaseX - b.phaseX);\n return phaseProfiles;\n}\n/** Revalidates the committed RAW codes and geometry and checks that every CFA phase has a kernel. No external image plane can supply output values. */\nexport function parseRawFrameReconstructionInput(value: unknown): RawFrameReconstructionInput {\n const r = object(value, [\"rawFrame\", \"region\", \"phaseProfiles\"]), rawFrame = frame(r.rawFrame);\n const rect = object(r.region, [\"x\", \"y\", \"width\", \"height\"]);\n const region = { x: integer(rect.x), y: integer(rect.y), width: integer(rect.width, true), height: integer(rect.height, true) };\n if (region.x + region.width > rawFrame.nativePixelWidth || region.y + region.height > rawFrame.nativePixelHeight) {\n throw new InvalidConfigurationError(\"Reconstruction region must lie within the full native RAW frame.\");\n }\n const phaseProfiles = parseRawReconstructionPhaseProfiles(r.phaseProfiles, rawFrame.modeId, rawFrame.colorSamplingProfile);\n return { rawFrame, region, phaseProfiles };\n}\n/** Computes each pixel with the sensor module's explicit linear reconstruction, using only the attached native RAW samples. */\nexport function resolveRawFrameReconstruction(input: RawFrameReconstructionInput): CalculationResult<RawFrameReconstruction> {\n const v = parseRawFrameReconstructionInput(input), f = v.rawFrame, layout = f.colorSamplingProfile.layout;\n if (layout.kind !== \"periodic-mosaic\") throw new InvalidConfigurationError(\"Reconstruction requires periodic native CFA.\");\n const pixels: CalculationResult<SensorRawReconstructedPixel>[] = [], samples: number[] = [];\n for (let y = v.region.y; y < v.region.y + v.region.height; y++) {\n for (let x = v.region.x; x < v.region.x + v.region.width; x++) {\n const phaseIndex = (y % layout.repeatHeightSites) * layout.repeatWidthSites + x % layout.repeatWidthSites;\n const selected = v.phaseProfiles[phaseIndex]!.profile, indices = new Set<number>();\n for (const kernel of selected.kernels) {\n for (const c of kernel.contributions) {\n const sx = x + c.offsetX, sy = y + c.offsetY;\n if (!Number.isSafeInteger(sx) || !Number.isSafeInteger(sy) || sx < 0 || sy < 0 || sx >= f.nativePixelWidth || sy >= f.nativePixelHeight) {\n throw new InvalidConfigurationError(\"Reconstruction kernel leaves the native RAW frame; no padding or renormalization is allowed.\");\n }\n const i = sy * f.nativePixelWidth + sx;\n if (f.samples[i]!.channelId !== c.sourceChannelId) throw new InvalidConfigurationError(\"Reconstruction source channel disagrees with absolute CFA phase.\");\n indices.add(i);\n }\n }\n const pixel = resolveSensorRawReconstruction({ profile: selected, colorSamplingProfile: f.colorSamplingProfile,\n centerSite: { x, y }, samples: [...indices].map((i) => f.samples[i]!) });\n pixels.push(pixel);\n samples.push(...pixel.value.outputChannels.map((c) => c.linearBlackSubtractedNormalizedValue));\n }\n }\n const value: RawFrameReconstruction = { schemaVersion: RAW_FRAME_RECONSTRUCTION_SCHEMA_VERSION,\n rawFrame: f, phaseProfiles: v.phaseProfiles, region: v.region,\n linearPlane: { imageState: \"virtual-sensor-channels\", rasterBinding: \"native-reconstruction-region\",\n pixelWidth: v.region.width, pixelHeight: v.region.height,\n channelIds: v.phaseProfiles[0]!.profile.kernels.map((k) => k.outputChannelId), samples }, pixels,\n lineage: \"engine-reconstructed-from-attached-raw\", producerOriginVerified: false, whiteBalanceApplied: false,\n colorTransformApplied: false, physicalOrientationApplied: false, outputCropApplied: false, sharpeningApplied: false, denoisingApplied: false };\n return freezeOwnedData(approximationResult(JSON.parse(JSON.stringify(value)) as RawFrameReconstruction,\n \"attached-raw-native-region-linear-reconstruction\", \"0.1.0\", [\n \"Pixel values come exclusively from exact attached RAW samples through the existing explicit linear-neighborhood resolver.\",\n \"The RAW producer/capture attachment remains caller-declared; this does not verify producer origin or calibrate sensor color.\",\n \"Phase-specific kernels are explicit approximation policy; negative values and child provenance are retained.\",\n \"No edge extension, CFA rephasing, WB, color conversion, orientation, output crop, sharpening, denoising or JPEG processing is applied.\",\n \"Attached capture float planes are metadata/source history only and are not used to reconstruct these values.\"\n ]));\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { SensorReadoutConversionProfile } from "../sensor/raw-readout.js";
|
|
2
|
+
/** Readout fields the white level depends on; a `SensorRawCodeSample` satisfies this shape. */
|
|
3
|
+
export interface EffectiveSaturationReadout {
|
|
4
|
+
physicalChargeCapacityElectrons: number;
|
|
5
|
+
preAdcSaturationElectronEquivalent: number;
|
|
6
|
+
systemConversionGainElectronsPerCode: number;
|
|
7
|
+
blackLevelCode: number;
|
|
8
|
+
digitalSaturationCode: number;
|
|
9
|
+
/** ADC code-range maximum (2^bits − 1), when known. */
|
|
10
|
+
adcMaximumCode?: number;
|
|
11
|
+
/** Post-ADC digital gain d ≥ 1; omitted means 1. */
|
|
12
|
+
digitalGain?: number;
|
|
13
|
+
/** Declared ADC integral non-linearity, the readout regime's `adc.integralNonLinearity`. */
|
|
14
|
+
integralNonLinearity?: {
|
|
15
|
+
kind: "piecewise-linear-code-offset";
|
|
16
|
+
knots: readonly {
|
|
17
|
+
code: number;
|
|
18
|
+
offsetCodes: number;
|
|
19
|
+
}[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* W as documented above; throws unless B < W ≤ D. Ties round up, matching the ADC.
|
|
24
|
+
*
|
|
25
|
+
* Accepts an `EffectiveSaturationReadout` or a whole `SensorRawCodeSample`, optionally with the
|
|
26
|
+
* regime's `integralNonLinearity`. From 2.0.0 any other field is rejected with
|
|
27
|
+
* `InvalidConfigurationError`, and the `integralNonLinearity` record and its knots are checked too.
|
|
28
|
+
*/
|
|
29
|
+
export declare function calculateEffectiveSaturationCode(readout: EffectiveSaturationReadout): number;
|
|
30
|
+
/**
|
|
31
|
+
* The white-level calculation without the field checks, for engine-internal per-site calls whose
|
|
32
|
+
* readout the engine produced itself. Not a root export.
|
|
33
|
+
*/
|
|
34
|
+
export declare function computeEffectiveSaturationCode(readout: EffectiveSaturationReadout): number;
|
|
35
|
+
/**
|
|
36
|
+
* White level of one simulated site: its readout sample (capacity, thresholds, gain, black, ADC maximum,
|
|
37
|
+
* digital gain) plus the selected regime's declared INL, which the sample records only at its own code.
|
|
38
|
+
*/
|
|
39
|
+
export declare function calculateSiteEffectiveSaturationCode(readout: EffectiveSaturationReadout, readoutProfile: Pick<SensorReadoutConversionProfile, "regimes">, regimeId: string): number;
|
|
40
|
+
/** Index of the absolute native CFA repeat phase of row-major native index `i`. */
|
|
41
|
+
export declare function nativeCfaPhaseIndex(index: number, nativeWidth: number, repeatWidth: number, repeatHeight: number): number;
|
|
42
|
+
/**
|
|
43
|
+
* Collects the white level per CFA phase for packed native RAW. White level depends only on readout
|
|
44
|
+
* and capacity settings, so it is stored once per absolute CFA phase (indexed
|
|
45
|
+
* `phaseY*repeatWidth+phaseX`, like the reconstruction phase table) instead of per pixel. If sites in
|
|
46
|
+
* one phase disagree, it throws.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createPhaseWhiteLevelAccumulator(nativeWidth: number, repeatWidth: number, repeatHeight: number): {
|
|
49
|
+
record(index: number, code: number): void;
|
|
50
|
+
finish(): Uint16Array;
|
|
51
|
+
/** The codes recorded so far, 0 for a phase with no site yet (a partition); merge them with recordPhase. */
|
|
52
|
+
partial(): Uint16Array;
|
|
53
|
+
/** Records one phase's code from a partition (0 means none). The same rule as record applies. */
|
|
54
|
+
recordPhase(phase: number, code: number): void;
|
|
55
|
+
};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Effective RAW white (saturation) level: the code at which a native site is fully saturated. This
|
|
4
|
+
* is the engine's only source for it. RAW development scales by it, and DNG writes it as `WhiteLevel`.
|
|
5
|
+
*
|
|
6
|
+
* The readout model (`simulateSensorRawCode`) does this, in order: clips charge at physical capacity,
|
|
7
|
+
* adds read noise, clips at the pre-ADC threshold (in electron equivalents), converts with the system
|
|
8
|
+
* conversion gain, adds the black pedestal, adds any declared ADC integral non-linearity (INL), rounds,
|
|
9
|
+
* limits to the ADC code range, applies any post-ADC digital gain about black, rounds again and clamps
|
|
10
|
+
* at the digital saturation code. So a signal at the lower of the two electron thresholds encodes to
|
|
11
|
+
*
|
|
12
|
+
* I = B + min(C, P)/G, A = min(Amax, round(I + INL(I))), W = min(D, round((A − B)·d + B))
|
|
13
|
+
*
|
|
14
|
+
* where C is physical charge capacity (e⁻), P the pre-ADC saturation (e⁻ equivalent), G the system
|
|
15
|
+
* conversion gain (e⁻/DN), B the black level code, INL the optional piecewise-linear integral
|
|
16
|
+
* non-linearity offset (codes), Amax the ADC maximum code, d the optional post-ADC digital gain (1 when
|
|
17
|
+
* omitted) and D the digital saturation code. With d = 1 and no INL, W = min(D, round(B + min(C, P)/G)).
|
|
18
|
+
* This is the "fully saturated encoding level" of DNG 1.7 `WhiteLevel` (Adobe DNG Specification
|
|
19
|
+
* 1.7.1.0, tag 50717) and the saturation point of EMVA 1288 Release 4.0 (signal at which the camera
|
|
20
|
+
* saturates). Read noise added after physical clipping can push individual clipped codes slightly
|
|
21
|
+
* above or below W, so development also uses the per-site saturation flags.
|
|
22
|
+
* @see docs/PHOTOGRAPHIC_EXPORT.md
|
|
23
|
+
*/
|
|
24
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
25
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
26
|
+
import { rejectUnknownFields, requireInputKeys, requireInputObject } from "../core/record-validation.js";
|
|
27
|
+
/** Piecewise-linear INL offset at continuous input code `code`. Beyond the end points it stays constant. */
|
|
28
|
+
function inlOffset(inl, code) {
|
|
29
|
+
if (inl === undefined)
|
|
30
|
+
return 0;
|
|
31
|
+
const knots = inl.knots, first = knots[0], last = knots[knots.length - 1];
|
|
32
|
+
if (!first || !last)
|
|
33
|
+
throw new InvalidConfigurationError("ADC integral non-linearity requires knots.");
|
|
34
|
+
if (code <= first.code)
|
|
35
|
+
return first.offsetCodes;
|
|
36
|
+
if (code >= last.code)
|
|
37
|
+
return last.offsetCodes;
|
|
38
|
+
let low = 0, high = knots.length - 1;
|
|
39
|
+
while (high - low > 1) {
|
|
40
|
+
const middle = (low + high) >> 1;
|
|
41
|
+
if (knots[middle].code <= code)
|
|
42
|
+
low = middle;
|
|
43
|
+
else
|
|
44
|
+
high = middle;
|
|
45
|
+
}
|
|
46
|
+
const a = knots[low], b = knots[high];
|
|
47
|
+
return a.offsetCodes + (code - a.code) / (b.code - a.code) * (b.offsetCodes - a.offsetCodes);
|
|
48
|
+
}
|
|
49
|
+
/** Fields of `EffectiveSaturationReadout`. */
|
|
50
|
+
const EFFECTIVE_SATURATION_READOUT_FIELDS = ["physicalChargeCapacityElectrons", "preAdcSaturationElectronEquivalent",
|
|
51
|
+
"systemConversionGainElectronsPerCode", "blackLevelCode", "digitalSaturationCode", "adcMaximumCode", "digitalGain",
|
|
52
|
+
"integralNonLinearity"];
|
|
53
|
+
/**
|
|
54
|
+
* The other fields of a `SensorRawCodeSample` (the result of `simulateSensorRawCode`). The white level
|
|
55
|
+
* does not read them, but a whole sample is accepted as input, so they are known fields too.
|
|
56
|
+
*/
|
|
57
|
+
const SENSOR_RAW_CODE_SAMPLE_FIELDS = ["readoutProfileId", "regimeId", "samplingProfileId", "completenessProfileId",
|
|
58
|
+
"capacityProfileId", "colorSamplingProfileId", "channelId", "site", "bindingId", "chargeSeedUint32", "readNoiseSeedUint32",
|
|
59
|
+
"realizedStoredElectronEquivalentCountBeforePhysicalCapacity", "electronEquivalentAfterPhysicalScalarSaturation",
|
|
60
|
+
"physicalScalarSaturationApplied", "overflowElectronEquivalentDiagnostic", "bloomingModeled", "electronicReadNoiseComponents",
|
|
61
|
+
"totalElectronicReadNoiseElectrons", "fixedPatternNoiseProfileId", "fixedPatternReadoutOffsetElectrons",
|
|
62
|
+
"electronEquivalentAfterReadNoise", "electronEquivalentAfterPreAdcSaturation", "preAdcSaturationApplied", "codeBeforeQuantization",
|
|
63
|
+
"adcIntegralNonLinearityOffsetCodes", "adcCodeBeforeDigitalGain", "quantizedCodeBeforeDigitalClamp", "adcBitDepth", "rawCode",
|
|
64
|
+
"digitalSaturationApplied", "lowerCodeClampApplied", "adcTransfer", "physicalSaturationApplied", "electronicReadNoiseApplied",
|
|
65
|
+
"conversionGainApplied", "adcQuantizationApplied", "rawCodeValueProduced", "isoUsedToInferRegime",
|
|
66
|
+
"deterministicSeededRealization"];
|
|
67
|
+
const ACCEPTED_READOUT_FIELDS = [...EFFECTIVE_SATURATION_READOUT_FIELDS, ...SENSOR_RAW_CODE_SAMPLE_FIELDS];
|
|
68
|
+
/**
|
|
69
|
+
* W as documented above; throws unless B < W ≤ D. Ties round up, matching the ADC.
|
|
70
|
+
*
|
|
71
|
+
* Accepts an `EffectiveSaturationReadout` or a whole `SensorRawCodeSample`, optionally with the
|
|
72
|
+
* regime's `integralNonLinearity`. From 2.0.0 any other field is rejected with
|
|
73
|
+
* `InvalidConfigurationError`, and the `integralNonLinearity` record and its knots are checked too.
|
|
74
|
+
*/
|
|
75
|
+
export function calculateEffectiveSaturationCode(readout) {
|
|
76
|
+
requireInputKeys(readout, "calculateEffectiveSaturationCode", ACCEPTED_READOUT_FIELDS);
|
|
77
|
+
const inl = readout.integralNonLinearity;
|
|
78
|
+
if (inl !== undefined) {
|
|
79
|
+
requireInputObject(inl, "calculateEffectiveSaturationCode input.integralNonLinearity");
|
|
80
|
+
rejectUnknownFields(inl, ["kind", "knots", "evidence"], "calculateEffectiveSaturationCode input.integralNonLinearity");
|
|
81
|
+
const knots = inl.knots;
|
|
82
|
+
if (Array.isArray(knots)) {
|
|
83
|
+
knots.forEach((knot, index) => {
|
|
84
|
+
const path = `calculateEffectiveSaturationCode input.integralNonLinearity.knots[${index}]`;
|
|
85
|
+
requireInputObject(knot, path);
|
|
86
|
+
rejectUnknownFields(knot, ["code", "offsetCodes"], path);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const inlEvidence = inl.evidence;
|
|
90
|
+
if (inlEvidence !== undefined)
|
|
91
|
+
parseEvidenceList(inlEvidence, "calculateEffectiveSaturationCode input.integralNonLinearity.evidence");
|
|
92
|
+
}
|
|
93
|
+
return computeEffectiveSaturationCode(readout);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The white-level calculation without the field checks, for engine-internal per-site calls whose
|
|
97
|
+
* readout the engine produced itself. Not a root export.
|
|
98
|
+
*/
|
|
99
|
+
export function computeEffectiveSaturationCode(readout) {
|
|
100
|
+
requireInputObject(readout, "Effective RAW white-level readout");
|
|
101
|
+
const c = readout.physicalChargeCapacityElectrons, p = readout.preAdcSaturationElectronEquivalent, g = readout.systemConversionGainElectronsPerCode, b = readout.blackLevelCode, d = readout.digitalSaturationCode;
|
|
102
|
+
const gain = readout.digitalGain ?? 1, adcMaximum = readout.adcMaximumCode ?? Infinity;
|
|
103
|
+
if (![c, p, g].every((v) => typeof v === "number" && Number.isFinite(v) && v > 0) ||
|
|
104
|
+
!Number.isSafeInteger(b) || !Number.isSafeInteger(d) || b < 0 || d <= b || d > 65535 ||
|
|
105
|
+
typeof gain !== "number" || !Number.isFinite(gain) || gain < 1 || !(adcMaximum > b)) {
|
|
106
|
+
throw new InvalidConfigurationError("Effective RAW white level requires positive finite capacity, gain and a valid code span.");
|
|
107
|
+
}
|
|
108
|
+
const input = b + Math.min(c, p) / g, adc = Math.min(adcMaximum, Math.round(input + inlOffset(readout.integralNonLinearity, input)));
|
|
109
|
+
const code = Math.min(d, gain === 1 ? adc : Math.round((adc - b) * gain + b));
|
|
110
|
+
if (!(code > b))
|
|
111
|
+
throw new InvalidConfigurationError("Effective RAW white level must exceed the black level.");
|
|
112
|
+
return code;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* White level of one simulated site: its readout sample (capacity, thresholds, gain, black, ADC maximum,
|
|
116
|
+
* digital gain) plus the selected regime's declared INL, which the sample records only at its own code.
|
|
117
|
+
*/
|
|
118
|
+
export function calculateSiteEffectiveSaturationCode(readout, readoutProfile, regimeId) {
|
|
119
|
+
const regime = readoutProfile.regimes.find((r) => r.regimeId === regimeId);
|
|
120
|
+
if (!regime)
|
|
121
|
+
throw new InvalidConfigurationError("Effective RAW white level requires the selected readout regime.");
|
|
122
|
+
const inl = regime.adc.integralNonLinearity;
|
|
123
|
+
return computeEffectiveSaturationCode(inl === undefined ? readout : { ...readout, integralNonLinearity: inl });
|
|
124
|
+
}
|
|
125
|
+
/** Index of the absolute native CFA repeat phase of row-major native index `i`. */
|
|
126
|
+
export function nativeCfaPhaseIndex(index, nativeWidth, repeatWidth, repeatHeight) {
|
|
127
|
+
const x = index % nativeWidth, y = (index - x) / nativeWidth;
|
|
128
|
+
return (y % repeatHeight) * repeatWidth + x % repeatWidth;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Collects the white level per CFA phase for packed native RAW. White level depends only on readout
|
|
132
|
+
* and capacity settings, so it is stored once per absolute CFA phase (indexed
|
|
133
|
+
* `phaseY*repeatWidth+phaseX`, like the reconstruction phase table) instead of per pixel. If sites in
|
|
134
|
+
* one phase disagree, it throws.
|
|
135
|
+
*/
|
|
136
|
+
export function createPhaseWhiteLevelAccumulator(nativeWidth, repeatWidth, repeatHeight) {
|
|
137
|
+
const codes = new Uint16Array(repeatWidth * repeatHeight);
|
|
138
|
+
return {
|
|
139
|
+
record(index, code) {
|
|
140
|
+
const phase = nativeCfaPhaseIndex(index, nativeWidth, repeatWidth, repeatHeight), current = codes[phase];
|
|
141
|
+
if (current === 0)
|
|
142
|
+
codes[phase] = code;
|
|
143
|
+
else if (current !== code)
|
|
144
|
+
throw new InvalidConfigurationError("Native RAW requires one effective white level per CFA phase.");
|
|
145
|
+
},
|
|
146
|
+
finish() {
|
|
147
|
+
if (codes.includes(0))
|
|
148
|
+
throw new InvalidConfigurationError("Every CFA phase requires an effective white level.");
|
|
149
|
+
return codes;
|
|
150
|
+
},
|
|
151
|
+
partial() {
|
|
152
|
+
return codes.slice();
|
|
153
|
+
},
|
|
154
|
+
recordPhase(phase, code) {
|
|
155
|
+
if (code === 0)
|
|
156
|
+
return;
|
|
157
|
+
const current = codes[phase];
|
|
158
|
+
if (current === 0)
|
|
159
|
+
codes[phase] = code;
|
|
160
|
+
else if (current !== code)
|
|
161
|
+
throw new InvalidConfigurationError("Native RAW requires one effective white level per CFA phase.");
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=raw-white-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-white-level.js","sourceRoot":"","sources":["../../src/capture/raw-white-level.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Effective RAW white (saturation) level: the code at which a native site is fully saturated. This\n * is the engine's only source for it. RAW development scales by it, and DNG writes it as `WhiteLevel`.\n *\n * The readout model (`simulateSensorRawCode`) does this, in order: clips charge at physical capacity,\n * adds read noise, clips at the pre-ADC threshold (in electron equivalents), converts with the system\n * conversion gain, adds the black pedestal, adds any declared ADC integral non-linearity (INL), rounds,\n * limits to the ADC code range, applies any post-ADC digital gain about black, rounds again and clamps\n * at the digital saturation code. So a signal at the lower of the two electron thresholds encodes to\n *\n * I = B + min(C, P)/G, A = min(Amax, round(I + INL(I))), W = min(D, round((A − B)·d + B))\n *\n * where C is physical charge capacity (e⁻), P the pre-ADC saturation (e⁻ equivalent), G the system\n * conversion gain (e⁻/DN), B the black level code, INL the optional piecewise-linear integral\n * non-linearity offset (codes), Amax the ADC maximum code, d the optional post-ADC digital gain (1 when\n * omitted) and D the digital saturation code. With d = 1 and no INL, W = min(D, round(B + min(C, P)/G)).\n * This is the \"fully saturated encoding level\" of DNG 1.7 `WhiteLevel` (Adobe DNG Specification\n * 1.7.1.0, tag 50717) and the saturation point of EMVA 1288 Release 4.0 (signal at which the camera\n * saturates). Read noise added after physical clipping can push individual clipped codes slightly\n * above or below W, so development also uses the per-site saturation flags.\n * @see docs/PHOTOGRAPHIC_EXPORT.md\n */\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseEvidenceList } from \"../core/evidence-provenance.js\";\nimport { rejectUnknownFields, requireInputKeys, requireInputObject } from \"../core/record-validation.js\";\nimport type { SensorReadoutConversionProfile } from \"../sensor/raw-readout.js\";\n\n/** Readout fields the white level depends on; a `SensorRawCodeSample` satisfies this shape. */\nexport interface EffectiveSaturationReadout {\n physicalChargeCapacityElectrons: number;\n preAdcSaturationElectronEquivalent: number;\n systemConversionGainElectronsPerCode: number;\n blackLevelCode: number;\n digitalSaturationCode: number;\n /** ADC code-range maximum (2^bits − 1), when known. */\n adcMaximumCode?: number;\n /** Post-ADC digital gain d ≥ 1; omitted means 1. */\n digitalGain?: number;\n /** Declared ADC integral non-linearity, the readout regime's `adc.integralNonLinearity`. */\n integralNonLinearity?: { kind: \"piecewise-linear-code-offset\"; knots: readonly { code: number; offsetCodes: number }[] };\n}\n/** Piecewise-linear INL offset at continuous input code `code`. Beyond the end points it stays constant. */\nfunction inlOffset(inl: EffectiveSaturationReadout[\"integralNonLinearity\"], code: number): number {\n if (inl === undefined) return 0;\n const knots = inl.knots, first = knots[0], last = knots[knots.length-1];\n if (!first || !last) throw new InvalidConfigurationError(\"ADC integral non-linearity requires knots.\");\n if (code <= first.code) return first.offsetCodes;\n if (code >= last.code) return last.offsetCodes;\n let low = 0, high = knots.length-1;\n while (high-low > 1) { const middle = (low+high) >> 1; if (knots[middle]!.code <= code) low = middle; else high = middle; }\n const a = knots[low]!, b = knots[high]!;\n return a.offsetCodes+(code-a.code)/(b.code-a.code)*(b.offsetCodes-a.offsetCodes);\n}\n\n/** Fields of `EffectiveSaturationReadout`. */\nconst EFFECTIVE_SATURATION_READOUT_FIELDS = [\"physicalChargeCapacityElectrons\", \"preAdcSaturationElectronEquivalent\",\n \"systemConversionGainElectronsPerCode\", \"blackLevelCode\", \"digitalSaturationCode\", \"adcMaximumCode\", \"digitalGain\",\n \"integralNonLinearity\"] as const;\n/**\n * The other fields of a `SensorRawCodeSample` (the result of `simulateSensorRawCode`). The white level\n * does not read them, but a whole sample is accepted as input, so they are known fields too.\n */\nconst SENSOR_RAW_CODE_SAMPLE_FIELDS = [\"readoutProfileId\", \"regimeId\", \"samplingProfileId\", \"completenessProfileId\",\n \"capacityProfileId\", \"colorSamplingProfileId\", \"channelId\", \"site\", \"bindingId\", \"chargeSeedUint32\", \"readNoiseSeedUint32\",\n \"realizedStoredElectronEquivalentCountBeforePhysicalCapacity\", \"electronEquivalentAfterPhysicalScalarSaturation\",\n \"physicalScalarSaturationApplied\", \"overflowElectronEquivalentDiagnostic\", \"bloomingModeled\", \"electronicReadNoiseComponents\",\n \"totalElectronicReadNoiseElectrons\", \"fixedPatternNoiseProfileId\", \"fixedPatternReadoutOffsetElectrons\",\n \"electronEquivalentAfterReadNoise\", \"electronEquivalentAfterPreAdcSaturation\", \"preAdcSaturationApplied\", \"codeBeforeQuantization\",\n \"adcIntegralNonLinearityOffsetCodes\", \"adcCodeBeforeDigitalGain\", \"quantizedCodeBeforeDigitalClamp\", \"adcBitDepth\", \"rawCode\",\n \"digitalSaturationApplied\", \"lowerCodeClampApplied\", \"adcTransfer\", \"physicalSaturationApplied\", \"electronicReadNoiseApplied\",\n \"conversionGainApplied\", \"adcQuantizationApplied\", \"rawCodeValueProduced\", \"isoUsedToInferRegime\",\n \"deterministicSeededRealization\"] as const;\nconst ACCEPTED_READOUT_FIELDS: readonly string[] = [...EFFECTIVE_SATURATION_READOUT_FIELDS, ...SENSOR_RAW_CODE_SAMPLE_FIELDS];\n\n/**\n * W as documented above; throws unless B < W ≤ D. Ties round up, matching the ADC.\n *\n * Accepts an `EffectiveSaturationReadout` or a whole `SensorRawCodeSample`, optionally with the\n * regime's `integralNonLinearity`. From 2.0.0 any other field is rejected with\n * `InvalidConfigurationError`, and the `integralNonLinearity` record and its knots are checked too.\n */\nexport function calculateEffectiveSaturationCode(readout: EffectiveSaturationReadout): number {\n requireInputKeys(readout, \"calculateEffectiveSaturationCode\", ACCEPTED_READOUT_FIELDS);\n const inl: unknown = readout.integralNonLinearity;\n if (inl !== undefined) {\n requireInputObject(inl, \"calculateEffectiveSaturationCode input.integralNonLinearity\");\n rejectUnknownFields(inl as object, [\"kind\", \"knots\", \"evidence\"], \"calculateEffectiveSaturationCode input.integralNonLinearity\");\n const knots = (inl as { knots?: unknown }).knots;\n if (Array.isArray(knots)) {\n knots.forEach((knot: unknown, index) => {\n const path = `calculateEffectiveSaturationCode input.integralNonLinearity.knots[${index}]`;\n requireInputObject(knot, path);\n rejectUnknownFields(knot as object, [\"code\", \"offsetCodes\"], path);\n });\n }\n const inlEvidence = (inl as { evidence?: unknown }).evidence;\n if (inlEvidence !== undefined) parseEvidenceList(inlEvidence, \"calculateEffectiveSaturationCode input.integralNonLinearity.evidence\");\n }\n return computeEffectiveSaturationCode(readout);\n}\n\n/**\n * The white-level calculation without the field checks, for engine-internal per-site calls whose\n * readout the engine produced itself. Not a root export.\n */\nexport function computeEffectiveSaturationCode(readout: EffectiveSaturationReadout): number {\n requireInputObject(readout, \"Effective RAW white-level readout\");\n const c = readout.physicalChargeCapacityElectrons, p = readout.preAdcSaturationElectronEquivalent,\n g = readout.systemConversionGainElectronsPerCode, b = readout.blackLevelCode, d = readout.digitalSaturationCode;\n const gain = readout.digitalGain ?? 1, adcMaximum = readout.adcMaximumCode ?? Infinity;\n if (![c, p, g].every((v) => typeof v === \"number\" && Number.isFinite(v) && v > 0) ||\n !Number.isSafeInteger(b) || !Number.isSafeInteger(d) || b < 0 || d <= b || d > 65535 ||\n typeof gain !== \"number\" || !Number.isFinite(gain) || gain < 1 || !(adcMaximum > b)) {\n throw new InvalidConfigurationError(\"Effective RAW white level requires positive finite capacity, gain and a valid code span.\");\n }\n const input = b + Math.min(c, p)/g, adc = Math.min(adcMaximum, Math.round(input + inlOffset(readout.integralNonLinearity, input)));\n const code = Math.min(d, gain === 1 ? adc : Math.round((adc-b)*gain + b));\n if (!(code > b)) throw new InvalidConfigurationError(\"Effective RAW white level must exceed the black level.\");\n return code;\n}\n\n/**\n * White level of one simulated site: its readout sample (capacity, thresholds, gain, black, ADC maximum,\n * digital gain) plus the selected regime's declared INL, which the sample records only at its own code.\n */\nexport function calculateSiteEffectiveSaturationCode(readout: EffectiveSaturationReadout,\n readoutProfile: Pick<SensorReadoutConversionProfile, \"regimes\">, regimeId: string): number {\n const regime = readoutProfile.regimes.find((r) => r.regimeId === regimeId);\n if (!regime) throw new InvalidConfigurationError(\"Effective RAW white level requires the selected readout regime.\");\n const inl = regime.adc.integralNonLinearity;\n return computeEffectiveSaturationCode(inl === undefined ? readout : { ...readout, integralNonLinearity: inl });\n}\n\n/** Index of the absolute native CFA repeat phase of row-major native index `i`. */\nexport function nativeCfaPhaseIndex(index: number, nativeWidth: number, repeatWidth: number, repeatHeight: number): number {\n const x = index % nativeWidth, y = (index - x)/nativeWidth;\n return (y % repeatHeight)*repeatWidth + x % repeatWidth;\n}\n\n/**\n * Collects the white level per CFA phase for packed native RAW. White level depends only on readout\n * and capacity settings, so it is stored once per absolute CFA phase (indexed\n * `phaseY*repeatWidth+phaseX`, like the reconstruction phase table) instead of per pixel. If sites in\n * one phase disagree, it throws.\n */\nexport function createPhaseWhiteLevelAccumulator(nativeWidth: number, repeatWidth: number, repeatHeight: number): {\n record(index: number, code: number): void; finish(): Uint16Array;\n /** The codes recorded so far, 0 for a phase with no site yet (a partition); merge them with recordPhase. */\n partial(): Uint16Array;\n /** Records one phase's code from a partition (0 means none). The same rule as record applies. */\n recordPhase(phase: number, code: number): void;\n} {\n const codes = new Uint16Array(repeatWidth*repeatHeight);\n return {\n record(index: number, code: number): void {\n const phase = nativeCfaPhaseIndex(index, nativeWidth, repeatWidth, repeatHeight), current = codes[phase]!;\n if (current === 0) codes[phase] = code;\n else if (current !== code) throw new InvalidConfigurationError(\"Native RAW requires one effective white level per CFA phase.\");\n },\n finish(): Uint16Array {\n if (codes.includes(0)) throw new InvalidConfigurationError(\"Every CFA phase requires an effective white level.\");\n return codes;\n },\n partial(): Uint16Array {\n return codes.slice();\n },\n recordPhase(phase: number, code: number): void {\n if (code === 0) return;\n const current = codes[phase]!;\n if (current === 0) codes[phase] = code;\n else if (current !== code) throw new InvalidConfigurationError(\"Native RAW requires one effective white level per CFA phase.\");\n }\n };\n}\n"]}
|
|
@@ -105,16 +105,14 @@ export interface CancelledReleaseSequence {
|
|
|
105
105
|
sourceSequenceUnmodified: true;
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
|
-
* Resolves one deterministic
|
|
108
|
+
* Resolves one deterministic still-release sequence.
|
|
109
109
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* timing.
|
|
110
|
+
* It schedules logical exposures only; how the sensor captures each one is
|
|
111
|
+
* handled elsewhere. Render speed or frame rate is never used as capture timing.
|
|
113
112
|
*/
|
|
114
113
|
export declare function resolveReleaseSequence(input: ResolveReleaseSequenceInput): ResolvedReleaseSequence;
|
|
115
114
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
115
|
+
* Returns a cancelled copy of a sequence. The original scheduled sequence is not
|
|
116
|
+
* changed, and it is always clear which frames were completed and which were dropped.
|
|
118
117
|
*/
|
|
119
118
|
export declare function createCancelledReleaseSequence(input: CancelReleaseSequenceInput): CancelledReleaseSequence;
|
|
120
|
-
//# sourceMappingURL=release-sequence.d.ts.map
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* leaving the completed/omitted frame boundary ambiguous.
|
|
3
|
+
* Shutter-release sequences for stills (single, burst, self-timer, bracketing), scheduled as logical exposures, and
|
|
4
|
+
* cancelling a sequence part-way.
|
|
5
|
+
*
|
|
6
|
+
* This only schedules exposures; how the sensor captures each one is handled elsewhere. Render speed
|
|
7
|
+
* or frame rate is never used as capture timing.
|
|
9
8
|
* @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
|
|
10
9
|
* limits.
|
|
11
10
|
*/
|
|
12
11
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
13
12
|
import { parseGenericReleaseCapabilityProfile } from "../equipment/release-capabilities.js";
|
|
14
13
|
import { parseFocusPlane } from "../optics/focus-state.js";
|
|
14
|
+
import { requireInputKeys } from "../core/record-validation.js";
|
|
15
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
15
16
|
export const RELEASE_SEQUENCE_VERSION = "0.1.0";
|
|
16
17
|
function requireNonEmptyString(value, path) {
|
|
17
18
|
if (typeof value !== "string" ||
|
|
18
19
|
value.trim().length === 0) {
|
|
19
|
-
throw new
|
|
20
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
20
21
|
}
|
|
21
22
|
return value.trim();
|
|
22
23
|
}
|
|
@@ -281,13 +282,13 @@ function intervalForPreviousFrame(previousFrame, requestedCadenceFps, capabiliti
|
|
|
281
282
|
};
|
|
282
283
|
}
|
|
283
284
|
/**
|
|
284
|
-
* Resolves one deterministic
|
|
285
|
+
* Resolves one deterministic still-release sequence.
|
|
285
286
|
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
* timing.
|
|
287
|
+
* It schedules logical exposures only; how the sensor captures each one is
|
|
288
|
+
* handled elsewhere. Render speed or frame rate is never used as capture timing.
|
|
289
289
|
*/
|
|
290
290
|
export function resolveReleaseSequence(input) {
|
|
291
|
+
requireInputKeys(input, "resolveReleaseSequence", ["sequenceId", "releaseRequestTimeSeconds", "sequenceSeedUint32", "drive", "bracket", "requestedCadenceFps", "baseState", "releaseCapabilities", "exposureCapabilities"]);
|
|
291
292
|
const sequenceId = requireNonEmptyString(input.sequenceId, "sequenceId");
|
|
292
293
|
const releaseRequestTime = requireFinite(input
|
|
293
294
|
.releaseRequestTimeSeconds, "releaseRequestTimeSeconds");
|
|
@@ -416,10 +417,11 @@ export function resolveReleaseSequence(input) {
|
|
|
416
417
|
return deepFreeze(cloneJson(sequence));
|
|
417
418
|
}
|
|
418
419
|
/**
|
|
419
|
-
*
|
|
420
|
-
*
|
|
420
|
+
* Returns a cancelled copy of a sequence. The original scheduled sequence is not
|
|
421
|
+
* changed, and it is always clear which frames were completed and which were dropped.
|
|
421
422
|
*/
|
|
422
423
|
export function createCancelledReleaseSequence(input) {
|
|
424
|
+
requireInputKeys(input, "createCancelledReleaseSequence", ["sequence", "completedFrameCount", "cancelledAtSeconds"]);
|
|
423
425
|
const count = requireNonNegativeFinite(input.completedFrameCount, "completedFrameCount");
|
|
424
426
|
if (!Number.isSafeInteger(count)) {
|
|
425
427
|
throw new InvalidScientificInputError("completedFrameCount must be a safe integer.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-sequence.js","sourceRoot":"","sources":["../../src/capture/release-sequence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-sequence.js","sourceRoot":"","sources":["../../src/capture/release-sequence.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Shutter-release sequences for stills (single, burst, self-timer, bracketing), scheduled as logical exposures, and\n * cancelling a sequence part-way.\n *\n * This only schedules exposures; how the sensor captures each one is handled elsewhere. Render speed\n * or frame rate is never used as capture timing.\n * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n parseGenericReleaseCapabilityProfile,\n type GenericExposureBracketAxis,\n type GenericReleaseCapabilityProfile\n} from \"../equipment/release-capabilities.js\";\nimport type {\n ResolvedGenericEquipmentExposureCapabilities,\n ResolvedNumericSettingGrid\n} from \"../equipment/exposure-capabilities.js\";\nimport {\n parseFocusPlane,\n type FocusPlane\n} from \"../optics/focus-state.js\";\nimport { requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport const RELEASE_SEQUENCE_VERSION =\n \"0.1.0\" as const;\n\nexport type ReleaseAutomationState =\n | \"manual\"\n | \"locked\"\n | \"continuous\";\n\nexport interface ReleaseBaseCaptureState {\n exposure: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n focus: FocusPlane;\n whiteBalanceStateId?: string;\n automation: {\n ae: ReleaseAutomationState;\n af: ReleaseAutomationState;\n awb: ReleaseAutomationState;\n };\n}\n\nexport type ReleaseDrivePolicy =\n | {\n kind: \"single\";\n }\n | {\n kind: \"burst\";\n frameCount: number;\n }\n | {\n kind: \"self-timer\";\n delaySeconds: number;\n frameCount: number;\n };\n\nexport type ReleaseBracketPolicy =\n | {\n kind: \"none\";\n }\n | {\n kind: \"exposure\";\n axis:\n GenericExposureBracketAxis;\n offsetsStops:\n readonly number[];\n }\n | {\n kind: \"focus\";\n focusStates:\n readonly FocusPlane[];\n };\n\nexport interface ResolveReleaseSequenceInput {\n sequenceId: string;\n releaseRequestTimeSeconds: number;\n sequenceSeedUint32: number;\n drive: ReleaseDrivePolicy;\n bracket: ReleaseBracketPolicy;\n requestedCadenceFps?: number;\n baseState:\n ReleaseBaseCaptureState;\n releaseCapabilities:\n GenericReleaseCapabilityProfile;\n exposureCapabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n}\n\nexport type ReleaseTimingConstraint =\n | \"requested-cadence\"\n | \"body-maximum-cadence\"\n | \"exposure-duration\"\n | \"minimum-inter-frame-gap\";\n\nexport interface ResolvedReleaseFrame {\n sequenceId: string;\n frameIndex: number;\n releaseFrameId: string;\n exposureStartTimeSeconds: number;\n exposureEndTimeSeconds: number;\n sceneTimeSecondsFromSequenceStart:\n number;\n startIntervalFromPreviousSeconds:\n number | null;\n timingConstraints:\n readonly ReleaseTimingConstraint[];\n stochasticSeedUint32: number;\n exposure: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n focus: FocusPlane;\n exposureBracketOffsetStops?:\n number;\n automation:\n ReleaseBaseCaptureState[\"automation\"];\n whiteBalanceStateId?: string;\n}\n\nexport interface ResolvedReleaseSequence {\n version:\n typeof RELEASE_SEQUENCE_VERSION;\n sequenceId: string;\n status: \"scheduled\";\n releaseRequestTimeSeconds: number;\n selfTimerDelaySeconds: number;\n requestedCadenceFps:\n number | null;\n capabilityMaximumCadenceFps:\n number;\n minimumInterFrameGapSeconds:\n number;\n requestedFrameCount: number;\n actualFrameCount: number;\n sequenceSeedUint32: number;\n baseStateSnapshot:\n ReleaseBaseCaptureState;\n frames:\n readonly ResolvedReleaseFrame[];\n sensorCaptureModeOwnership:\n \"separate-logical-capture-contract\";\n whiteBalanceBracketingPhysicalCaptures:\n false;\n preReleaseCaptureModeled:\n false;\n bufferMediaThermalSlowdownModeled:\n false;\n}\n\nexport interface CancelReleaseSequenceInput {\n sequence:\n ResolvedReleaseSequence;\n completedFrameCount: number;\n cancelledAtSeconds: number;\n}\n\nexport interface CancelledReleaseSequence {\n version:\n typeof RELEASE_SEQUENCE_VERSION;\n sequenceId: string;\n status: \"cancelled\";\n cancelledAtSeconds: number;\n completedFrameCount: number;\n omittedFrameCount: number;\n completedFrames:\n readonly ResolvedReleaseFrame[];\n sourceSequenceFrameCount: number;\n sourceSequenceUnmodified: true;\n}\n\nfunction requireNonEmptyString(\n value: string,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: number,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidScientificInputError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: number,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed < 0) {\n throw new InvalidScientificInputError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction requirePositiveFinite(\n value: number,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed <= 0) {\n throw new InvalidScientificInputError(\n path +\n \" must be greater than zero.\"\n );\n }\n return parsed;\n}\n\nfunction requirePositiveSafeInteger(\n value: number,\n path: string\n): number {\n if (\n !Number.isSafeInteger(value) ||\n value <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be a positive safe integer.\"\n );\n }\n return value;\n}\n\nfunction requireUint32(\n value: number,\n path: string\n): number {\n if (\n !Number.isSafeInteger(value) ||\n value < 0 ||\n value > 0xffff_ffff\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be an unsigned 32-bit integer.\"\n );\n }\n return value;\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(\n JSON.stringify(value)\n ) as T;\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Object.isFrozen(value)\n ) {\n return value;\n }\n\n Object.freeze(value);\n for (\n const child of\n Object.values(\n value as Record<string, unknown>\n )\n ) {\n deepFreeze(child);\n }\n return value;\n}\n\nfunction hashFrameSeed(\n sequenceSeedUint32: number,\n frameIndex: number\n): number {\n let hash = 0x811c9dc5;\n const text =\n sequenceSeedUint32.toString(10) +\n \":\" +\n frameIndex.toString(10);\n for (\n let index = 0;\n index < text.length;\n index += 1\n ) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(\n hash,\n 0x01000193\n ) >>> 0;\n }\n return hash >>> 0;\n}\n\nfunction includesDriveMode(\n capabilities:\n GenericReleaseCapabilityProfile,\n drive:\n ReleaseDrivePolicy[\"kind\"]\n): boolean {\n return capabilities\n .supportedDriveModes\n .value.includes(drive);\n}\n\nfunction driveFrameCount(\n drive: ReleaseDrivePolicy\n): number {\n if (drive.kind === \"single\") {\n return 1;\n }\n return requirePositiveSafeInteger(\n drive.frameCount,\n \"drive.frameCount\"\n );\n}\n\nfunction bracketFrameCount(\n bracket:\n ReleaseBracketPolicy\n): number | null {\n if (bracket.kind === \"none\") {\n return null;\n }\n const count =\n bracket.kind === \"exposure\"\n ? bracket.offsetsStops.length\n : bracket.focusStates.length;\n if (count <= 0) {\n throw new InvalidScientificInputError(\n \"Bracket sequences must contain at least one frame.\"\n );\n }\n return count;\n}\n\nfunction resolveFrameCount(\n drive: ReleaseDrivePolicy,\n bracket:\n ReleaseBracketPolicy\n): number {\n const driveCount =\n driveFrameCount(drive);\n const bracketCount =\n bracketFrameCount(bracket);\n\n if (bracketCount === null) {\n return driveCount;\n }\n\n if (drive.kind === \"burst\") {\n throw new InvalidScientificInputError(\n \"Schema 0.1.0 does not combine burst drive with bracketing; choose one multi-frame policy explicitly.\"\n );\n }\n\n if (\n drive.kind === \"self-timer\" &&\n driveCount !== bracketCount\n ) {\n throw new InvalidScientificInputError(\n \"Self-timer frameCount must match the bracket frame count.\"\n );\n }\n\n return bracketCount;\n}\n\nfunction validateGridSetting(\n value: number,\n minimum: number,\n maximum: number,\n grid:\n ResolvedNumericSettingGrid,\n path: string\n): void {\n if (\n !Number.isFinite(value) ||\n value < minimum ||\n value > maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \" lies outside the resolved equipment capability range.\"\n );\n }\n\n if (\n grid.kind ===\n \"discrete-values\" &&\n !grid.values.some(\n (candidate) =>\n Math.abs(\n candidate - value\n ) <=\n Math.max(\n 1,\n Math.abs(value)\n ) *\n 1e-12\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \" is not present in the resolved equipment setting grid.\"\n );\n }\n}\n\nfunction validateExposure(\n exposure:\n ReleaseBaseCaptureState[\"exposure\"],\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n path: string\n): void {\n validateGridSetting(\n exposure.aperture,\n capabilities.aperture\n .widestAvailableFNumber,\n capabilities.aperture\n .narrowestAvailableFNumber,\n capabilities.aperture\n .settingGrid,\n path + \".aperture\"\n );\n validateGridSetting(\n exposure.shutterSeconds,\n capabilities.shutter\n .minimumSeconds,\n capabilities.shutter\n .maximumSeconds,\n capabilities.shutter\n .settingGrid,\n path + \".shutterSeconds\"\n );\n validateGridSetting(\n exposure.iso,\n capabilities.iso.minimum,\n capabilities.iso.maximum,\n capabilities.iso.settingGrid,\n path + \".iso\"\n );\n}\n\nfunction resolveExposureBracket(\n base:\n ReleaseBaseCaptureState[\"exposure\"],\n axis:\n GenericExposureBracketAxis,\n offsetStops: number\n): ReleaseBaseCaptureState[\"exposure\"] {\n requireFinite(\n offsetStops,\n \"bracket.offsetsStops[]\"\n );\n\n if (axis === \"shutter\") {\n return {\n ...base,\n shutterSeconds:\n base.shutterSeconds *\n Math.pow(2, offsetStops)\n };\n }\n if (axis === \"iso\") {\n return {\n ...base,\n iso:\n base.iso *\n Math.pow(2, offsetStops)\n };\n }\n return {\n ...base,\n aperture:\n base.aperture /\n Math.pow(\n 2,\n offsetStops / 2\n )\n };\n}\n\nfunction resolveFrameState(\n input:\n ResolveReleaseSequenceInput,\n frameIndex: number\n): {\n exposure:\n ReleaseBaseCaptureState[\"exposure\"];\n focus: FocusPlane;\n exposureBracketOffsetStops?:\n number;\n} {\n if (input.bracket.kind === \"none\") {\n return {\n exposure:\n cloneJson(\n input.baseState.exposure\n ),\n focus:\n parseFocusPlane(\n input.baseState.focus\n )\n };\n }\n\n if (\n input.bracket.kind ===\n \"exposure\"\n ) {\n const offset =\n input.bracket\n .offsetsStops[\n frameIndex\n ];\n if (offset === undefined) {\n throw new InvalidScientificInputError(\n \"Exposure bracket frame index is out of range.\"\n );\n }\n return {\n exposure:\n resolveExposureBracket(\n input.baseState.exposure,\n input.bracket.axis,\n offset\n ),\n focus:\n parseFocusPlane(\n input.baseState.focus\n ),\n exposureBracketOffsetStops:\n offset\n };\n }\n\n const focus =\n input.bracket\n .focusStates[frameIndex];\n if (focus === undefined) {\n throw new InvalidScientificInputError(\n \"Focus bracket frame index is out of range.\"\n );\n }\n return {\n exposure:\n cloneJson(\n input.baseState.exposure\n ),\n focus:\n parseFocusPlane(focus)\n };\n}\n\nfunction validateBracketSupport(\n input:\n ResolveReleaseSequenceInput,\n capabilities:\n GenericReleaseCapabilityProfile\n): void {\n if (\n input.bracket.kind ===\n \"exposure\"\n ) {\n if (\n capabilities\n .exposureBracketing\n .availability.value !==\n \"supported\"\n ) {\n throw new InvalidScientificInputError(\n \"Exposure bracketing is not supported by the selected release capability profile.\"\n );\n }\n if (\n !capabilities\n .exposureBracketing\n .supportedAxes\n .includes(\n input.bracket.axis\n )\n ) {\n throw new InvalidScientificInputError(\n \"The selected exposure-bracket axis is not supported by the release capability profile.\"\n );\n }\n }\n\n if (\n input.bracket.kind ===\n \"focus\" &&\n capabilities\n .focusBracketing\n .availability.value !==\n \"supported\"\n ) {\n throw new InvalidScientificInputError(\n \"Focus bracketing is not supported by the selected release capability profile.\"\n );\n }\n}\n\nfunction resolveSelfTimerDelay(\n drive: ReleaseDrivePolicy\n): number {\n if (drive.kind !== \"self-timer\") {\n return 0;\n }\n return requireNonNegativeFinite(\n drive.delaySeconds,\n \"drive.delaySeconds\"\n );\n}\n\nfunction resolveRequestedCadence(\n frameCount: number,\n requestedCadenceFps:\n number | undefined\n): number | null {\n if (frameCount <= 1) {\n if (\n requestedCadenceFps !==\n undefined\n ) {\n requirePositiveFinite(\n requestedCadenceFps,\n \"requestedCadenceFps\"\n );\n }\n return null;\n }\n if (\n requestedCadenceFps ===\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"requestedCadenceFps is required for a multi-frame physical sequence.\"\n );\n }\n return requirePositiveFinite(\n requestedCadenceFps,\n \"requestedCadenceFps\"\n );\n}\n\nfunction intervalForPreviousFrame(\n previousFrame:\n ResolvedReleaseFrame,\n requestedCadenceFps: number,\n capabilities:\n GenericReleaseCapabilityProfile\n): {\n seconds: number;\n constraints:\n readonly ReleaseTimingConstraint[];\n} {\n const requested =\n 1 / requestedCadenceFps;\n const capability =\n 1 /\n capabilities\n .maximumCadenceFps.value;\n const exposure =\n previousFrame\n .exposure.shutterSeconds;\n const gap =\n capabilities\n .minimumInterFrameGapSeconds\n .value;\n const physical =\n exposure + gap;\n const seconds =\n Math.max(\n requested,\n capability,\n physical\n );\n\n const tolerance =\n Math.max(1, seconds) *\n 1e-12;\n const constraints:\n ReleaseTimingConstraint[] =\n [];\n\n if (\n Math.abs(\n seconds - requested\n ) <= tolerance\n ) {\n constraints.push(\n \"requested-cadence\"\n );\n }\n if (\n Math.abs(\n seconds - capability\n ) <= tolerance\n ) {\n constraints.push(\n \"body-maximum-cadence\"\n );\n }\n if (\n Math.abs(\n seconds - physical\n ) <= tolerance\n ) {\n constraints.push(\n \"exposure-duration\"\n );\n if (gap > 0) {\n constraints.push(\n \"minimum-inter-frame-gap\"\n );\n }\n }\n\n return {\n seconds,\n constraints\n };\n}\n\n/**\n * Resolves one deterministic still-release sequence.\n *\n * It schedules logical exposures only; how the sensor captures each one is\n * handled elsewhere. Render speed or frame rate is never used as capture timing.\n */\nexport function resolveReleaseSequence(\n input:\n ResolveReleaseSequenceInput\n): ResolvedReleaseSequence {\n requireInputKeys(input, \"resolveReleaseSequence\", [\"sequenceId\", \"releaseRequestTimeSeconds\", \"sequenceSeedUint32\", \"drive\", \"bracket\", \"requestedCadenceFps\", \"baseState\", \"releaseCapabilities\", \"exposureCapabilities\"]);\n const sequenceId =\n requireNonEmptyString(\n input.sequenceId,\n \"sequenceId\"\n );\n const releaseRequestTime =\n requireFinite(\n input\n .releaseRequestTimeSeconds,\n \"releaseRequestTimeSeconds\"\n );\n const sequenceSeed =\n requireUint32(\n input.sequenceSeedUint32,\n \"sequenceSeedUint32\"\n );\n\n const releaseCapabilities =\n parseGenericReleaseCapabilityProfile(\n input.releaseCapabilities\n );\n\n if (\n !includesDriveMode(\n releaseCapabilities,\n input.drive.kind\n )\n ) {\n throw new InvalidScientificInputError(\n \"The selected drive mode is not supported by the release capability profile.\"\n );\n }\n\n validateBracketSupport(\n input,\n releaseCapabilities\n );\n\n const frameCount =\n resolveFrameCount(\n input.drive,\n input.bracket\n );\n\n if (\n frameCount >\n releaseCapabilities\n .maximumLogicalFramesPerSequence\n .value\n ) {\n throw new InvalidScientificInputError(\n \"Requested sequence frame count exceeds the release capability profile.\"\n );\n }\n\n const requestedCadenceFps =\n resolveRequestedCadence(\n frameCount,\n input.requestedCadenceFps\n );\n\n const selfTimerDelay =\n resolveSelfTimerDelay(\n input.drive\n );\n\n const baseState:\n ReleaseBaseCaptureState = {\n exposure:\n cloneJson(\n input.baseState.exposure\n ),\n focus:\n parseFocusPlane(\n input.baseState.focus\n ),\n automation:\n cloneJson(\n input.baseState.automation\n ),\n ...(input.baseState\n .whiteBalanceStateId ===\n undefined\n ? {}\n : {\n whiteBalanceStateId:\n requireNonEmptyString(\n input.baseState\n .whiteBalanceStateId,\n \"baseState.whiteBalanceStateId\"\n )\n })\n };\n\n validateExposure(\n baseState.exposure,\n input.exposureCapabilities,\n \"baseState.exposure\"\n );\n\n const frames:\n ResolvedReleaseFrame[] = [];\n\n for (\n let frameIndex = 0;\n frameIndex < frameCount;\n frameIndex += 1\n ) {\n const state =\n resolveFrameState(\n input,\n frameIndex\n );\n validateExposure(\n state.exposure,\n input.exposureCapabilities,\n \"frames[\" +\n frameIndex +\n \"].exposure\"\n );\n\n let exposureStartTimeSeconds:\n number;\n let startInterval:\n number | null = null;\n let timingConstraints:\n readonly ReleaseTimingConstraint[] =\n [];\n\n if (frameIndex === 0) {\n exposureStartTimeSeconds =\n releaseRequestTime +\n selfTimerDelay;\n } else {\n const previous =\n frames[\n frameIndex - 1\n ]!;\n if (\n requestedCadenceFps ===\n null\n ) {\n throw new InvalidScientificInputError(\n \"Multi-frame sequence lost its requested cadence.\"\n );\n }\n const interval =\n intervalForPreviousFrame(\n previous,\n requestedCadenceFps,\n releaseCapabilities\n );\n startInterval =\n interval.seconds;\n timingConstraints =\n interval.constraints;\n exposureStartTimeSeconds =\n previous\n .exposureStartTimeSeconds +\n interval.seconds;\n }\n\n const exposureEndTimeSeconds =\n exposureStartTimeSeconds +\n state.exposure\n .shutterSeconds;\n\n if (\n !Number.isFinite(\n exposureStartTimeSeconds\n ) ||\n !Number.isFinite(\n exposureEndTimeSeconds\n )\n ) {\n throw new InvalidScientificInputError(\n \"Resolved release-sequence timing must remain finite.\"\n );\n }\n\n frames.push({\n sequenceId,\n frameIndex,\n releaseFrameId:\n sequenceId +\n \":frame:\" +\n frameIndex,\n exposureStartTimeSeconds,\n exposureEndTimeSeconds,\n sceneTimeSecondsFromSequenceStart:\n exposureStartTimeSeconds -\n releaseRequestTime,\n startIntervalFromPreviousSeconds:\n startInterval,\n timingConstraints,\n stochasticSeedUint32:\n hashFrameSeed(\n sequenceSeed,\n frameIndex\n ),\n exposure:\n cloneJson(\n state.exposure\n ),\n focus:\n cloneJson(\n state.focus\n ),\n ...(state\n .exposureBracketOffsetStops ===\n undefined\n ? {}\n : {\n exposureBracketOffsetStops:\n state\n .exposureBracketOffsetStops\n }),\n automation:\n cloneJson(\n baseState.automation\n ),\n ...(baseState\n .whiteBalanceStateId ===\n undefined\n ? {}\n : {\n whiteBalanceStateId:\n baseState\n .whiteBalanceStateId\n })\n });\n }\n\n const sequence:\n ResolvedReleaseSequence = {\n version:\n RELEASE_SEQUENCE_VERSION,\n sequenceId,\n status: \"scheduled\",\n releaseRequestTimeSeconds:\n releaseRequestTime,\n selfTimerDelaySeconds:\n selfTimerDelay,\n requestedCadenceFps,\n capabilityMaximumCadenceFps:\n releaseCapabilities\n .maximumCadenceFps.value,\n minimumInterFrameGapSeconds:\n releaseCapabilities\n .minimumInterFrameGapSeconds\n .value,\n requestedFrameCount:\n frameCount,\n actualFrameCount:\n frames.length,\n sequenceSeedUint32:\n sequenceSeed,\n baseStateSnapshot:\n baseState,\n frames,\n sensorCaptureModeOwnership:\n \"separate-logical-capture-contract\",\n whiteBalanceBracketingPhysicalCaptures:\n false,\n preReleaseCaptureModeled:\n false,\n bufferMediaThermalSlowdownModeled:\n false\n };\n\n return deepFreeze(\n cloneJson(sequence)\n );\n}\n\n/**\n * Returns a cancelled copy of a sequence. The original scheduled sequence is not\n * changed, and it is always clear which frames were completed and which were dropped.\n */\nexport function createCancelledReleaseSequence(\n input:\n CancelReleaseSequenceInput\n): CancelledReleaseSequence {\n requireInputKeys(input, \"createCancelledReleaseSequence\", [\"sequence\", \"completedFrameCount\", \"cancelledAtSeconds\"]);\n const count =\n requireNonNegativeFinite(\n input.completedFrameCount,\n \"completedFrameCount\"\n );\n if (\n !Number.isSafeInteger(count)\n ) {\n throw new InvalidScientificInputError(\n \"completedFrameCount must be a safe integer.\"\n );\n }\n if (\n count >\n input.sequence.frames.length\n ) {\n throw new InvalidScientificInputError(\n \"completedFrameCount must not exceed the source sequence frame count.\"\n );\n }\n\n const cancelledAt =\n requireFinite(\n input.cancelledAtSeconds,\n \"cancelledAtSeconds\"\n );\n\n const result:\n CancelledReleaseSequence = {\n version:\n RELEASE_SEQUENCE_VERSION,\n sequenceId:\n input.sequence.sequenceId,\n status: \"cancelled\",\n cancelledAtSeconds:\n cancelledAt,\n completedFrameCount: count,\n omittedFrameCount:\n input.sequence.frames.length -\n count,\n completedFrames:\n cloneJson(\n input.sequence.frames.slice(\n 0,\n count\n )\n ),\n sourceSequenceFrameCount:\n input.sequence.frames.length,\n sourceSequenceUnmodified:\n true\n };\n\n return deepFreeze(\n cloneJson(result)\n );\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import { type CaptureModeProfile } from "../sensor/capture-mode.js";
|
|
|
4
4
|
import { type NativeEffectiveRasterColorSamplingBindingProfile } from "../sensor/capture-color-sampling-binding.js";
|
|
5
5
|
import { type SensorRawCaptureSample } from "../sensor/raw-reconstruction.js";
|
|
6
6
|
export declare const SENSOR_RAW_FRAME_SCHEMA_VERSION: "0.1.0";
|
|
7
|
-
/**
|
|
7
|
+
/** Declares that native CFA samples from the sensor model belong to a committed photographic capture. */
|
|
8
8
|
export interface SensorRawFrameInput {
|
|
9
9
|
frameId: string;
|
|
10
10
|
capture: SimulatedCapture;
|
|
@@ -13,10 +13,10 @@ export interface SensorRawFrameInput {
|
|
|
13
13
|
colorSamplingProfile: SensorColorSamplingProfile;
|
|
14
14
|
bindingProfile: NativeEffectiveRasterColorSamplingBindingProfile;
|
|
15
15
|
containerBitDepth: 16;
|
|
16
|
-
/** Exactly one sample per
|
|
16
|
+
/** Exactly one sample per native site, row-major. Not processed RGB with a mask applied. */
|
|
17
17
|
samples: readonly SensorRawCaptureSample[];
|
|
18
18
|
}
|
|
19
|
-
/** Immutable RAW
|
|
19
|
+
/** Immutable attached RAW frame. Passing the structural checks does not prove the producer was correct or that the data is DNG-compatible. */
|
|
20
20
|
export interface SensorRawFrame extends SensorRawFrameInput {
|
|
21
21
|
schemaVersion: typeof SENSOR_RAW_FRAME_SCHEMA_VERSION;
|
|
22
22
|
sampleDomain: "native-cfa-raw-code";
|
|
@@ -27,8 +27,7 @@ export interface SensorRawFrame extends SensorRawFrameInput {
|
|
|
27
27
|
nativePixelWidth: number;
|
|
28
28
|
nativePixelHeight: number;
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
30
|
+
/** Checks that every native site has one sample, within limits, and that CFA, mode, site and code identities match exactly. No I/O. */
|
|
31
31
|
export declare function parseSensorRawFrameInput(value: unknown): SensorRawFrameInput;
|
|
32
|
-
/** Commits native RAW samples and capture metadata
|
|
32
|
+
/** Commits native RAW samples and capture metadata. No demosaicing, WB, tone mapping or file packing. */
|
|
33
33
|
export declare function createSensorRawFrame(input: SensorRawFrameInput): SensorRawFrame;
|
|
34
|
-
//# sourceMappingURL=sensor-raw-frame.d.ts.map
|