@photivra/engine 2.12.0 → 2.14.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 +144 -1
- package/CITATION.cff +1 -1
- package/README.md +7 -7
- package/SECURITY.md +1 -1
- package/THIRD_PARTY.md +3 -0
- package/dist/camera/lens-projection.js +2 -1
- package/dist/camera/lens-projection.js.map +1 -1
- package/dist/capture/dng-import.js +1 -1
- package/dist/capture/dng-import.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +1 -1
- package/dist/capture/export-jpeg.js +6 -4
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/host-yield-cadence.js +1 -1
- package/dist/capture/host-yield-cadence.js.map +1 -1
- package/dist/capture/native-environment-optical-stage.js +1 -1
- package/dist/capture/native-environment-optical-stage.js.map +1 -1
- package/dist/capture/native-raw.js +1 -1
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.js +3 -3
- package/dist/capture/packed-sensor-raw.js.map +1 -1
- package/dist/capture/sensor-raw-producer.js +1 -1
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/color/capture-color.js +3 -3
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.js +2 -2
- package/dist/color/chromatic-adaptation.js.map +1 -1
- package/dist/color/color-matching-functions.js +1 -1
- package/dist/color/color-matching-functions.js.map +1 -1
- package/dist/color/colorimetry-math.js +2 -2
- package/dist/color/colorimetry-math.js.map +1 -1
- package/dist/color/illuminants.js +3 -3
- package/dist/color/illuminants.js.map +1 -1
- package/dist/color/rgb-color-spaces.js +1 -1
- package/dist/color/rgb-color-spaces.js.map +1 -1
- package/dist/color/sensor-color-development.js +1 -1
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/core/record-validation.js +3 -3
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/generic-prime-lenses.js +3 -3
- package/dist/equipment/generic-prime-lenses.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +23 -1
- package/dist/equipment/generic-tier-assets.js +58 -30
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +6 -3
- package/dist/equipment/generic-tier-presets.js +26 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/exposure/auto-iso-slowest-shutter.d.ts +120 -0
- package/dist/exposure/auto-iso-slowest-shutter.js +217 -0
- package/dist/exposure/auto-iso-slowest-shutter.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +57 -1
- package/dist/exposure/exposure-mode-resolver.js +238 -33
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/flash-ttl.js +1 -1
- package/dist/exposure/flash-ttl.js.map +1 -1
- package/dist/exposure/flash.js +1 -1
- package/dist/exposure/flash.js.map +1 -1
- package/dist/facade/chart-material-layers.js +2 -2
- package/dist/facade/chart-material-layers.js.map +1 -1
- package/dist/facade/chart-radiance-batch.js +1 -1
- package/dist/facade/chart-radiance-batch.js.map +1 -1
- package/dist/facade/chart-scenes.d.ts +45 -8
- package/dist/facade/chart-scenes.js +101 -44
- package/dist/facade/chart-scenes.js.map +1 -1
- package/dist/facade/color-patches.d.ts +129 -0
- package/dist/facade/color-patches.js +209 -0
- package/dist/facade/color-patches.js.map +1 -0
- package/dist/facade/diffraction-provider.js +12 -13
- package/dist/facade/diffraction-provider.js.map +1 -1
- package/dist/facade/display-view-gpu.js +1 -1
- package/dist/facade/display-view-gpu.js.map +1 -1
- package/dist/facade/display-view.d.ts +27 -0
- package/dist/facade/display-view.js +234 -65
- package/dist/facade/display-view.js.map +1 -1
- package/dist/facade/scene-radiance.js +2 -2
- package/dist/facade/scene-radiance.js.map +1 -1
- package/dist/facade/simulate-capture.d.ts +139 -12
- package/dist/facade/simulate-capture.js +209 -36
- package/dist/facade/simulate-capture.js.map +1 -1
- package/dist/facade/simulate-display-view.js +2 -2
- package/dist/facade/simulate-display-view.js.map +1 -1
- package/dist/gpu/chart-composite-gpu.js +2 -2
- package/dist/gpu/chart-composite-gpu.js.map +1 -1
- package/dist/gpu/display-view-composite-material-module.js +1 -1
- package/dist/gpu/display-view-composite-material-module.js.map +1 -1
- package/dist/gpu/display-view-quality-gpu.d.ts +2 -1
- package/dist/gpu/display-view-quality-gpu.js +24 -14
- package/dist/gpu/display-view-quality-gpu.js.map +1 -1
- package/dist/gpu/image-kernel-execution.js +2 -2
- package/dist/gpu/image-kernel-execution.js.map +1 -1
- package/dist/gpu/temporal-sum-gpu.js +23 -23
- package/dist/gpu/webgpu-runtime.js +1 -1
- package/dist/gpu/webgpu-runtime.js.map +1 -1
- package/dist/gpu/wgsl-chart-composite-kernel.js +318 -318
- package/dist/gpu/wgsl-chart-composite-kernel.js.map +1 -1
- package/dist/gpu/wgsl-chart-kernel.js +117 -117
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-quality-kernel.d.ts +13 -1
- package/dist/gpu/wgsl-display-view-quality-kernel.js +522 -488
- package/dist/gpu/wgsl-display-view-quality-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-speed-kernel.js +248 -248
- package/dist/gpu/wgsl-display-view-speed-kernel.js.map +1 -1
- package/dist/gpu/wgsl-kernels.js +203 -203
- package/dist/gpu/wgsl-kernels.js.map +1 -1
- package/dist/gpu/wgsl-sensor-kernel.js +302 -302
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.js +1 -1
- package/dist/motion/temporal-exposure-sum.js.map +1 -1
- package/dist/optics/diffraction-psf-profile.js +4 -4
- package/dist/optics/diffraction-psf-profile.js.map +1 -1
- package/dist/optics/front-of-lens-filter.js +1 -1
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +10 -0
- package/dist/optics/irradiance-convolution.js +49 -14
- package/dist/optics/irradiance-convolution.js.map +1 -1
- package/dist/output/native-capture-sdr.js +1 -1
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.js +2 -2
- package/dist/output/png-encoder.js.map +1 -1
- package/dist/output/print-jpeg.js +13 -10
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/text-metadata.d.ts +22 -2
- package/dist/output/text-metadata.js +58 -9
- package/dist/output/text-metadata.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.js +1 -1
- package/dist/sensor/fixed-pattern-noise.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +1 -1
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/docs/API_REFERENCE.md +49 -1
- package/docs/QUICK_START.md +104 -9
- package/docs/USAGE.md +241 -2
- package/docs/api/core-version.md +1 -1
- package/docs/api/equipment-generic-tier-assets.md +41 -1
- package/docs/api/equipment-generic-tier-presets.md +11 -3
- package/docs/api/exports.json +172 -2
- package/docs/api/exposure-auto-iso-slowest-shutter.md +139 -0
- package/docs/api/exposure-exposure-mode-resolver.md +68 -0
- package/docs/api/facade-chart-scenes.md +36 -5
- package/docs/api/facade-color-patches.md +150 -0
- package/docs/api/facade-simulate-capture.md +140 -9
- package/docs/api/output-text-metadata.md +34 -0
- package/llms.txt +1 -0
- package/package.json +2 -2
package/docs/api/exports.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packageVersion": "2.
|
|
3
|
-
"engineApiVersion": "2.
|
|
2
|
+
"packageVersion": "2.14.0",
|
|
3
|
+
"engineApiVersion": "2.14.0",
|
|
4
4
|
"exports": [
|
|
5
5
|
{
|
|
6
6
|
"name": "AbsoluteUncertaintyEstimate",
|
|
@@ -27,6 +27,16 @@
|
|
|
27
27
|
"source": "src/output/capture-geometry.ts",
|
|
28
28
|
"kind": "type"
|
|
29
29
|
},
|
|
30
|
+
{
|
|
31
|
+
"name": "addJpegTextMetadata",
|
|
32
|
+
"source": "src/output/text-metadata.ts",
|
|
33
|
+
"kind": "runtime"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "addPngTextMetadata",
|
|
37
|
+
"source": "src/output/text-metadata.ts",
|
|
38
|
+
"kind": "runtime"
|
|
39
|
+
},
|
|
30
40
|
{
|
|
31
41
|
"name": "AffineGeometricTransform",
|
|
32
42
|
"source": "src/output/geometric-transforms.ts",
|
|
@@ -192,11 +202,36 @@
|
|
|
192
202
|
"source": "src/optics/atmospheric-haze.ts",
|
|
193
203
|
"kind": "type"
|
|
194
204
|
},
|
|
205
|
+
{
|
|
206
|
+
"name": "AUTO_ISO_SLOWEST_SHUTTER_MAXIMUM_BIAS_STOPS",
|
|
207
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
208
|
+
"kind": "runtime"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "AUTO_ISO_SLOWEST_SHUTTER_MODEL_VERSION",
|
|
212
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
213
|
+
"kind": "runtime"
|
|
214
|
+
},
|
|
195
215
|
{
|
|
196
216
|
"name": "AutoIsoBaselinePolicy",
|
|
197
217
|
"source": "src/exposure/exposure-mode-resolver.ts",
|
|
198
218
|
"kind": "type"
|
|
199
219
|
},
|
|
220
|
+
{
|
|
221
|
+
"name": "AutoIsoLimits",
|
|
222
|
+
"source": "src/exposure/exposure-mode-resolver.ts",
|
|
223
|
+
"kind": "type"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "AutoIsoSlowestShutterBlurBudget",
|
|
227
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
228
|
+
"kind": "type"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "AutoIsoSlowestShutterEstimate",
|
|
232
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
233
|
+
"kind": "type"
|
|
234
|
+
},
|
|
200
235
|
{
|
|
201
236
|
"name": "AxisSamplingPitchMicrometers",
|
|
202
237
|
"source": "src/motion/camera-rotation.ts",
|
|
@@ -2042,6 +2077,26 @@
|
|
|
2042
2077
|
"source": "src/color/colorimetry-math.ts",
|
|
2043
2078
|
"kind": "type"
|
|
2044
2079
|
},
|
|
2080
|
+
{
|
|
2081
|
+
"name": "COLOR_PATCH_IDS",
|
|
2082
|
+
"source": "src/facade/color-patches.ts",
|
|
2083
|
+
"kind": "runtime"
|
|
2084
|
+
},
|
|
2085
|
+
{
|
|
2086
|
+
"name": "COLOR_PATCH_SET_ID",
|
|
2087
|
+
"source": "src/facade/color-patches.ts",
|
|
2088
|
+
"kind": "runtime"
|
|
2089
|
+
},
|
|
2090
|
+
{
|
|
2091
|
+
"name": "COLOR_PATCH_SET_VERSION",
|
|
2092
|
+
"source": "src/facade/color-patches.ts",
|
|
2093
|
+
"kind": "runtime"
|
|
2094
|
+
},
|
|
2095
|
+
{
|
|
2096
|
+
"name": "COLOR_PATCH_WAVELENGTH_RANGE_NANOMETERS",
|
|
2097
|
+
"source": "src/facade/color-patches.ts",
|
|
2098
|
+
"kind": "runtime"
|
|
2099
|
+
},
|
|
2045
2100
|
{
|
|
2046
2101
|
"name": "COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION",
|
|
2047
2102
|
"source": "src/color/white-balance.ts",
|
|
@@ -2087,6 +2142,41 @@
|
|
|
2087
2142
|
"source": "src/color/colorimetry-math.ts",
|
|
2088
2143
|
"kind": "type"
|
|
2089
2144
|
},
|
|
2145
|
+
{
|
|
2146
|
+
"name": "ColorPatch",
|
|
2147
|
+
"source": "src/facade/color-patches.ts",
|
|
2148
|
+
"kind": "type"
|
|
2149
|
+
},
|
|
2150
|
+
{
|
|
2151
|
+
"name": "ColorPatchesChartScene",
|
|
2152
|
+
"source": "src/facade/chart-scenes.ts",
|
|
2153
|
+
"kind": "type"
|
|
2154
|
+
},
|
|
2155
|
+
{
|
|
2156
|
+
"name": "ColorPatchGroup",
|
|
2157
|
+
"source": "src/facade/color-patches.ts",
|
|
2158
|
+
"kind": "type"
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
"name": "ColorPatchId",
|
|
2162
|
+
"source": "src/facade/color-patches.ts",
|
|
2163
|
+
"kind": "type"
|
|
2164
|
+
},
|
|
2165
|
+
{
|
|
2166
|
+
"name": "ColorPatchReflectance",
|
|
2167
|
+
"source": "src/facade/chart-scenes.ts",
|
|
2168
|
+
"kind": "type"
|
|
2169
|
+
},
|
|
2170
|
+
{
|
|
2171
|
+
"name": "ColorPatchSet",
|
|
2172
|
+
"source": "src/facade/color-patches.ts",
|
|
2173
|
+
"kind": "type"
|
|
2174
|
+
},
|
|
2175
|
+
{
|
|
2176
|
+
"name": "ColorPatchSpectralTerm",
|
|
2177
|
+
"source": "src/facade/color-patches.ts",
|
|
2178
|
+
"kind": "type"
|
|
2179
|
+
},
|
|
2090
2180
|
{
|
|
2091
2181
|
"name": "ColorSamplingChannelComposition",
|
|
2092
2182
|
"source": "src/sensor/capture-color-sampling-binding.ts",
|
|
@@ -2797,6 +2887,16 @@
|
|
|
2797
2887
|
"source": "src/optics/circle-of-confusion.ts",
|
|
2798
2888
|
"kind": "type"
|
|
2799
2889
|
},
|
|
2890
|
+
{
|
|
2891
|
+
"name": "estimateAutoIsoSlowestShutter",
|
|
2892
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
2893
|
+
"kind": "runtime"
|
|
2894
|
+
},
|
|
2895
|
+
{
|
|
2896
|
+
"name": "EstimateAutoIsoSlowestShutterInput",
|
|
2897
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
2898
|
+
"kind": "type"
|
|
2899
|
+
},
|
|
2800
2900
|
{
|
|
2801
2901
|
"name": "estimateAutoWhiteBalance",
|
|
2802
2902
|
"source": "src/color/white-balance.ts",
|
|
@@ -2877,6 +2977,16 @@
|
|
|
2877
2977
|
"source": "src/color/rgb-color-spaces.ts",
|
|
2878
2978
|
"kind": "runtime"
|
|
2879
2979
|
},
|
|
2980
|
+
{
|
|
2981
|
+
"name": "evaluateColorPatchReflectance",
|
|
2982
|
+
"source": "src/facade/color-patches.ts",
|
|
2983
|
+
"kind": "runtime"
|
|
2984
|
+
},
|
|
2985
|
+
{
|
|
2986
|
+
"name": "EvaluateColorPatchReflectanceInput",
|
|
2987
|
+
"source": "src/facade/color-patches.ts",
|
|
2988
|
+
"kind": "type"
|
|
2989
|
+
},
|
|
2880
2990
|
{
|
|
2881
2991
|
"name": "evaluateSceneIlluminationTemporalMultiplier",
|
|
2882
2992
|
"source": "src/schema/illumination-temporal.ts",
|
|
@@ -3322,11 +3432,21 @@
|
|
|
3322
3432
|
"source": "src/equipment/generic-tier-presets.ts",
|
|
3323
3433
|
"kind": "runtime"
|
|
3324
3434
|
},
|
|
3435
|
+
{
|
|
3436
|
+
"name": "GENERIC_EQUIPMENT_TIER_PRESET_VERSIONS",
|
|
3437
|
+
"source": "src/equipment/generic-tier-presets.ts",
|
|
3438
|
+
"kind": "runtime"
|
|
3439
|
+
},
|
|
3325
3440
|
{
|
|
3326
3441
|
"name": "GENERIC_EQUIPMENT_TIERS",
|
|
3327
3442
|
"source": "src/equipment/generic-tier-presets.ts",
|
|
3328
3443
|
"kind": "runtime"
|
|
3329
3444
|
},
|
|
3445
|
+
{
|
|
3446
|
+
"name": "GENERIC_HANDHELD_ANGULAR_VELOCITY_RAD_PER_SEC",
|
|
3447
|
+
"source": "src/exposure/auto-iso-slowest-shutter.ts",
|
|
3448
|
+
"kind": "runtime"
|
|
3449
|
+
},
|
|
3330
3450
|
{
|
|
3331
3451
|
"name": "GENERIC_ISO_SIGNAL_CHAIN_PRESET_CATALOG_SCHEMA_VERSION",
|
|
3332
3452
|
"source": "src/sensor/iso-signal-chain.ts",
|
|
@@ -3357,6 +3477,21 @@
|
|
|
3357
3477
|
"source": "src/equipment/release-capabilities.ts",
|
|
3358
3478
|
"kind": "runtime"
|
|
3359
3479
|
},
|
|
3480
|
+
{
|
|
3481
|
+
"name": "GENERIC_THIRD_STOP_ISO_SETTINGS",
|
|
3482
|
+
"source": "src/equipment/generic-tier-assets.ts",
|
|
3483
|
+
"kind": "runtime"
|
|
3484
|
+
},
|
|
3485
|
+
{
|
|
3486
|
+
"name": "GENERIC_THIRD_STOP_SHUTTER_SECONDS",
|
|
3487
|
+
"source": "src/equipment/generic-tier-assets.ts",
|
|
3488
|
+
"kind": "runtime"
|
|
3489
|
+
},
|
|
3490
|
+
{
|
|
3491
|
+
"name": "GENERIC_WHOLE_STOP_ISO_SETTINGS",
|
|
3492
|
+
"source": "src/equipment/generic-tier-assets.ts",
|
|
3493
|
+
"kind": "runtime"
|
|
3494
|
+
},
|
|
3360
3495
|
{
|
|
3361
3496
|
"name": "GenericBodyExposureCapabilityProfile",
|
|
3362
3497
|
"source": "src/equipment/exposure-capabilities.ts",
|
|
@@ -3477,6 +3612,11 @@
|
|
|
3477
3612
|
"source": "src/equipment/generic-tier-assets.ts",
|
|
3478
3613
|
"kind": "type"
|
|
3479
3614
|
},
|
|
3615
|
+
{
|
|
3616
|
+
"name": "GenericTierPresetVersion",
|
|
3617
|
+
"source": "src/equipment/generic-tier-assets.ts",
|
|
3618
|
+
"kind": "type"
|
|
3619
|
+
},
|
|
3480
3620
|
{
|
|
3481
3621
|
"name": "GenericVersionedAsset",
|
|
3482
3622
|
"source": "src/equipment/generic-tier-assets.ts",
|
|
@@ -3532,6 +3672,11 @@
|
|
|
3532
3672
|
"source": "src/output/geometric-transforms.ts",
|
|
3533
3673
|
"kind": "type"
|
|
3534
3674
|
},
|
|
3675
|
+
{
|
|
3676
|
+
"name": "getColorPatchSet",
|
|
3677
|
+
"source": "src/facade/color-patches.ts",
|
|
3678
|
+
"kind": "runtime"
|
|
3679
|
+
},
|
|
3535
3680
|
{
|
|
3536
3681
|
"name": "getImageFormationContract",
|
|
3537
3682
|
"source": "src/core/image-formation.ts",
|
|
@@ -5917,6 +6062,11 @@
|
|
|
5917
6062
|
"source": "src/exposure/exposure-mode-resolver.ts",
|
|
5918
6063
|
"kind": "type"
|
|
5919
6064
|
},
|
|
6065
|
+
{
|
|
6066
|
+
"name": "ProgramSlowestPreferredShutterPolicy",
|
|
6067
|
+
"source": "src/exposure/exposure-mode-resolver.ts",
|
|
6068
|
+
"kind": "type"
|
|
6069
|
+
},
|
|
5920
6070
|
{
|
|
5921
6071
|
"name": "ProjectedMotionBlur",
|
|
5922
6072
|
"source": "src/motion/projected-motion.ts",
|
|
@@ -8112,6 +8262,11 @@
|
|
|
8112
8262
|
"source": "src/facade/simulate-capture.ts",
|
|
8113
8263
|
"kind": "runtime"
|
|
8114
8264
|
},
|
|
8265
|
+
{
|
|
8266
|
+
"name": "SIMULATE_CAPTURE_METERING_MODES",
|
|
8267
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8268
|
+
"kind": "runtime"
|
|
8269
|
+
},
|
|
8115
8270
|
{
|
|
8116
8271
|
"name": "SIMULATE_DISPLAY_VIEW_DEFAULT_SAMPLES_PER_AXIS",
|
|
8117
8272
|
"source": "src/facade/simulate-capture.ts",
|
|
@@ -8137,6 +8292,16 @@
|
|
|
8137
8292
|
"source": "src/facade/simulate-capture.ts",
|
|
8138
8293
|
"kind": "type"
|
|
8139
8294
|
},
|
|
8295
|
+
{
|
|
8296
|
+
"name": "SimulateCaptureAutomaticSlowestShutterOptions",
|
|
8297
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8298
|
+
"kind": "type"
|
|
8299
|
+
},
|
|
8300
|
+
{
|
|
8301
|
+
"name": "SimulateCaptureAutomaticSlowestShutterReport",
|
|
8302
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8303
|
+
"kind": "type"
|
|
8304
|
+
},
|
|
8140
8305
|
{
|
|
8141
8306
|
"name": "SimulateCaptureBorderHandling",
|
|
8142
8307
|
"source": "src/facade/simulate-capture.ts",
|
|
@@ -8187,6 +8352,11 @@
|
|
|
8187
8352
|
"source": "src/facade/simulate-capture.ts",
|
|
8188
8353
|
"kind": "type"
|
|
8189
8354
|
},
|
|
8355
|
+
{
|
|
8356
|
+
"name": "SimulateCaptureMetering",
|
|
8357
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8358
|
+
"kind": "type"
|
|
8359
|
+
},
|
|
8190
8360
|
{
|
|
8191
8361
|
"name": "SimulateCaptureMotion",
|
|
8192
8362
|
"source": "src/facade/simulate-capture.ts",
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# exposure/auto-iso-slowest-shutter.ts public contracts
|
|
2
|
+
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
|
+
|
|
5
|
+
## AUTO_ISO_SLOWEST_SHUTTER_MAXIMUM_BIAS_STOPS
|
|
6
|
+
|
|
7
|
+
The largest whole-stop bias accepted, either way (makers offer up to 2 stops faster or slower).
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
AUTO_ISO_SLOWEST_SHUTTER_MAXIMUM_BIAS_STOPS = 2 as const
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## AUTO_ISO_SLOWEST_SHUTTER_MODEL_VERSION
|
|
14
|
+
|
|
15
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
AUTO_ISO_SLOWEST_SHUTTER_MODEL_VERSION = "1.0.0" as const
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## AutoIsoSlowestShutterBlurBudget
|
|
22
|
+
|
|
23
|
+
The blur allowed during the exposure, on the sensor.
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
export type AutoIsoSlowestShutterBlurBudget =
|
|
27
|
+
| {
|
|
28
|
+
/** The blur trace length in pixels of the given pitch. */
|
|
29
|
+
kind: "pixels";
|
|
30
|
+
pixels: number;
|
|
31
|
+
pixelPitchMicrometers: number;
|
|
32
|
+
}
|
|
33
|
+
| {
|
|
34
|
+
/** The blur trace length as a fraction of the image diagonal (width × height in millimetres). */
|
|
35
|
+
kind: "image-diagonal-fraction";
|
|
36
|
+
fraction: number;
|
|
37
|
+
imageWidthMm: number;
|
|
38
|
+
imageHeightMm: number;
|
|
39
|
+
};
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## AutoIsoSlowestShutterEstimate
|
|
43
|
+
|
|
44
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
export interface AutoIsoSlowestShutterEstimate {
|
|
48
|
+
/** The exposure time whose shake blur equals the budget, before the bias and the grid. */
|
|
49
|
+
derivedShutterSeconds: number;
|
|
50
|
+
fasterByStops: number;
|
|
51
|
+
/** derivedShutterSeconds · 2^−fasterByStops. */
|
|
52
|
+
biasedShutterSeconds: number;
|
|
53
|
+
/** The slowest preferred shutter: the biased value, snapped to `shutterCapability` when given. */
|
|
54
|
+
shutterSeconds: number;
|
|
55
|
+
shutterResolution: {
|
|
56
|
+
kind: "unconstrained" | "continuous" | "discrete";
|
|
57
|
+
selectionPolicy: "not-longer-than-target";
|
|
58
|
+
quantized: boolean;
|
|
59
|
+
clamped: false | "minimum" | "maximum";
|
|
60
|
+
};
|
|
61
|
+
blurBudgetMm: number;
|
|
62
|
+
/** `estimateCameraShakeBlur()`'s stabilized blur at the derived shutter (equal to the budget within rounding). */
|
|
63
|
+
blurAtDerivedShutterMm: number;
|
|
64
|
+
/** `estimateCameraShakeBlur()`'s stabilized blur at `shutterSeconds`. */
|
|
65
|
+
blurAtShutterMm: number;
|
|
66
|
+
/** The same blur lengths in pixels, for a pixel budget. */
|
|
67
|
+
blurBudgetPixels?: number;
|
|
68
|
+
blurAtShutterPixels?: number;
|
|
69
|
+
projectionDistanceMm: number;
|
|
70
|
+
residualMotionFactor: number;
|
|
71
|
+
angularVelocityRadPerSec: { yaw: number; pitch: number };
|
|
72
|
+
stabilizationStopsEquivalent: number;
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## estimateAutoIsoSlowestShutter
|
|
77
|
+
|
|
78
|
+
Estimates the slowest preferred shutter for Auto ISO from the lens, the sensor and the hand's
|
|
79
|
+
shake: the exposure time at which `estimateCameraShakeBlur()`'s stabilized blur equals the blur
|
|
80
|
+
budget, then shifted by a whole-stop bias and optionally snapped to the body's shutter grid (never
|
|
81
|
+
longer than the biased value). Longer focal lengths give faster shutters; each stabilization stop
|
|
82
|
+
doubles the time; each bias stop halves (+1) or doubles (−1) it.
|
|
83
|
+
|
|
84
|
+
An approximation: constant angular velocity (a caller profile, or the labelled generic default
|
|
85
|
+
`GENERIC_HANDHELD_ANGULAR_VELOCITY_RAD_PER_SEC`), stabilization as 2^−stops, blur on the optical axis
|
|
86
|
+
only. The 1/focal-length "reciprocal rule" is a rule of thumb and is not used.
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
export function estimateAutoIsoSlowestShutter(
|
|
90
|
+
input: EstimateAutoIsoSlowestShutterInput
|
|
91
|
+
): CalculationResult<AutoIsoSlowestShutterEstimate>;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
95
|
+
|
|
96
|
+
## EstimateAutoIsoSlowestShutterInput
|
|
97
|
+
|
|
98
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
export interface EstimateAutoIsoSlowestShutterInput {
|
|
102
|
+
focalLengthMm: number;
|
|
103
|
+
/** Optional focus distance in metres: the thin-lens image distance becomes the projection distance, as in `estimateCameraShakeBlur()`. */
|
|
104
|
+
focusDistanceM?: number;
|
|
105
|
+
/**
|
|
106
|
+
* The hand's constant angular velocity in radians per second, the explicit shake profile (signs as in
|
|
107
|
+
* `estimateCameraShakeBlur()`; only the magnitude matters here). At least one axis must be non-zero.
|
|
108
|
+
* `GENERIC_HANDHELD_ANGULAR_VELOCITY_RAD_PER_SEC` is a cited generic default, not a measurement of you.
|
|
109
|
+
*/
|
|
110
|
+
angularVelocityRadPerSec: { yaw: number; pitch: number };
|
|
111
|
+
/** Stabilization in equivalent stops (≥ 0); the motion is scaled by 2^−stops. Default 0. */
|
|
112
|
+
stabilizationStopsEquivalent?: number;
|
|
113
|
+
blurBudget: AutoIsoSlowestShutterBlurBudget;
|
|
114
|
+
/**
|
|
115
|
+
* The bias in whole stops, applied after the derivation: +1 is one stop faster (half the time), −1 one
|
|
116
|
+
* stop slower (twice the time). An integer from −2 to +2. Default 0.
|
|
117
|
+
*/
|
|
118
|
+
fasterByStops?: number;
|
|
119
|
+
/** Optional: the body's resolved shutter capability. The biased shutter then snaps to it, never longer than the biased value, and is held at its ends. */
|
|
120
|
+
shutterCapability?: ResolvedGenericEquipmentExposureCapabilities["shutter"];
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## GENERIC_HANDHELD_ANGULAR_VELOCITY_RAD_PER_SEC
|
|
125
|
+
|
|
126
|
+
A generic handheld angular velocity, labelled as a default and not a measurement of any camera or
|
|
127
|
+
photographer: 4.39 °/s (≈ 0.0766 rad/s), the linear camera-motion rate Xiao, Farrell, Catrysse and
|
|
128
|
+
Wandell use for "an average user" holding "a typical 100g mobile handset with two hands", from their
|
|
129
|
+
earlier gyroscope measurements (F. Xiao, J. Farrell, P. Catrysse, B. Wandell, "Mobile imaging: the
|
|
130
|
+
big challenge of the small pixel", Proc. SPIE 7250, Digital Photography V, 2009, §2; author copy:
|
|
131
|
+
https://web.stanford.edu/~wandell/data/papers/2009-CameraShake-Xiao.pdf; they cite F. Xiao et al.,
|
|
132
|
+
"Camera-motion and mobile imaging", Proc. SPIE 6502, 2007). The value is one rate magnitude; it is
|
|
133
|
+
placed on the yaw axis (for small angles the blur length does not depend on the direction). A
|
|
134
|
+
heavier camera, another grip or another photographer moves differently: pass your own profile.
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
GENERIC_HANDHELD_ANGULAR_VELOCITY_RAD_PER_SEC: Readonly<{ yaw: number; pitch: number }> =
|
|
138
|
+
Object.freeze({ yaw: (4.39 * Math.PI) / 180, pitch: 0 })
|
|
139
|
+
```
|
|
@@ -198,6 +198,32 @@ export interface AutoIsoBaselinePolicy {
|
|
|
198
198
|
isoBaseline: "minimum-selectable";
|
|
199
199
|
isoQuantizationPolicy:
|
|
200
200
|
"nearest-log2-lower-on-tie";
|
|
201
|
+
/** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */
|
|
202
|
+
autoIsoLimits?: AutoIsoLimits;
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## AutoIsoLimits
|
|
207
|
+
|
|
208
|
+
#505: the photographer's Auto ISO limits, a policy choice kept separate from what the body allows
|
|
209
|
+
(`capabilities.iso.autoIsoMinimum`/`autoIsoMaximum`, else the ISO range). Cameras let the
|
|
210
|
+
photographer cap Auto ISO, and some also raise its floor (for example the Nikon D850's "maximum
|
|
211
|
+
sensitivity", Fujifilm's per-preset default and maximum sensitivity, and Panasonic's separate upper
|
|
212
|
+
and lower Auto ISO limits; makers' manuals, see docs/USAGE.md).
|
|
213
|
+
|
|
214
|
+
Both values are ISO settings: inside the body's Auto ISO range and, on a discrete ISO grid, one of
|
|
215
|
+
its values, with `minimum` at most `maximum`. Anything else fails with
|
|
216
|
+
`InvalidScientificInputError`; the engine never clips a limit silently. When a limit is strictly
|
|
217
|
+
inside the body's range and the ISO is held there, the limiting constraint is `user-iso-maximum` or
|
|
218
|
+
`user-iso-minimum`; a limit equal to the body's bound adds nothing, and the body's `iso-maximum` or
|
|
219
|
+
`iso-minimum` is reported.
|
|
220
|
+
|
|
221
|
+
```ts
|
|
222
|
+
export interface AutoIsoLimits {
|
|
223
|
+
/** The highest ISO Auto ISO may choose. */
|
|
224
|
+
maximum: number;
|
|
225
|
+
/** The lowest ISO Auto ISO may choose, and so its baseline. Default: the body's Auto ISO minimum. */
|
|
226
|
+
minimum?: number;
|
|
201
227
|
}
|
|
202
228
|
```
|
|
203
229
|
|
|
@@ -219,6 +245,8 @@ export type ExposureResolutionConstraint =
|
|
|
219
245
|
| "none"
|
|
220
246
|
| "iso-minimum"
|
|
221
247
|
| "iso-maximum"
|
|
248
|
+
| "user-iso-minimum"
|
|
249
|
+
| "user-iso-maximum"
|
|
222
250
|
| "iso-grid-quantization"
|
|
223
251
|
| "shutter-minimum"
|
|
224
252
|
| "shutter-maximum"
|
|
@@ -366,6 +394,8 @@ export interface FullAutoExposurePolicy {
|
|
|
366
394
|
"minimum-selectable";
|
|
367
395
|
isoQuantizationPolicy:
|
|
368
396
|
"nearest-log2-lower-on-tie";
|
|
397
|
+
/** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */
|
|
398
|
+
autoIsoLimits?: AutoIsoLimits;
|
|
369
399
|
}
|
|
370
400
|
```
|
|
371
401
|
|
|
@@ -467,6 +497,8 @@ export type ManualIsoControl =
|
|
|
467
497
|
kind: "automatic";
|
|
468
498
|
quantizationPolicy:
|
|
469
499
|
"nearest-log2-lower-on-tie";
|
|
500
|
+
/** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */
|
|
501
|
+
autoIsoLimits?: AutoIsoLimits;
|
|
470
502
|
};
|
|
471
503
|
```
|
|
472
504
|
|
|
@@ -521,6 +553,16 @@ export type ProgramAutoExposureModeResolution =
|
|
|
521
553
|
ExposureTargetResidual,
|
|
522
554
|
{ status: "resolved" }
|
|
523
555
|
>;
|
|
556
|
+
/**
|
|
557
|
+
* #504: present only with `isoControl.slowestPreferredShutter`. `applied` is true when the line's
|
|
558
|
+
* shutter was longer than the slowest preferred shutter and was held; `afterMaximumIsoFallbackUsed`
|
|
559
|
+
* when the slower-shutter fallback ran at the Auto ISO maximum. `programLineSelection` stays the
|
|
560
|
+
* line's own selection.
|
|
561
|
+
*/
|
|
562
|
+
slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy & {
|
|
563
|
+
applied: boolean;
|
|
564
|
+
afterMaximumIsoFallbackUsed: boolean;
|
|
565
|
+
};
|
|
524
566
|
})
|
|
525
567
|
| {
|
|
526
568
|
resolverVersion:
|
|
@@ -573,6 +615,14 @@ export type ProgramAutoIsoControl =
|
|
|
573
615
|
"minimum-selectable";
|
|
574
616
|
isoQuantizationPolicy:
|
|
575
617
|
"nearest-log2-lower-on-tie";
|
|
618
|
+
/** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */
|
|
619
|
+
autoIsoLimits?: AutoIsoLimits;
|
|
620
|
+
/**
|
|
621
|
+
* #504: optionally hold the program line's shutter at or faster than a slowest preferred shutter
|
|
622
|
+
* before the ISO rises (for example from `estimateAutoIsoSlowestShutter()`). Absent, the program line
|
|
623
|
+
* is followed as before.
|
|
624
|
+
*/
|
|
625
|
+
slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy;
|
|
576
626
|
};
|
|
577
627
|
```
|
|
578
628
|
|
|
@@ -611,6 +661,24 @@ export interface ProgramLineSelectionDiagnostics {
|
|
|
611
661
|
}
|
|
612
662
|
```
|
|
613
663
|
|
|
664
|
+
## ProgramSlowestPreferredShutterPolicy
|
|
665
|
+
|
|
666
|
+
#504: Program + Auto ISO's slowest preferred shutter, the two-axis policy of Aperture Priority + Auto
|
|
667
|
+
ISO applied to the program line. When the line asks for a longer shutter than
|
|
668
|
+
`slowestPreferredShutterSeconds`, the shutter is held there (snapped, never longer) with the line's
|
|
669
|
+
aperture, and Auto ISO makes up the rest. At the Auto ISO maximum, `afterMaximumIso` decides:
|
|
670
|
+
`"allow-slower-shutter"` lengthens the shutter toward the target, but never past the program line's
|
|
671
|
+
own shutter; `"hold-preferred-shutter"` keeps it and leaves the exposure under target.
|
|
672
|
+
|
|
673
|
+
```ts
|
|
674
|
+
export interface ProgramSlowestPreferredShutterPolicy {
|
|
675
|
+
slowestPreferredShutterSeconds: number;
|
|
676
|
+
afterMaximumIso:
|
|
677
|
+
| "allow-slower-shutter"
|
|
678
|
+
| "hold-preferred-shutter";
|
|
679
|
+
}
|
|
680
|
+
```
|
|
681
|
+
|
|
614
682
|
## RelativeExposureControlAnchor
|
|
615
683
|
|
|
616
684
|
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
@@ -97,6 +97,7 @@ CHART_SCENE_DEFAULTS = Object.freeze({
|
|
|
97
97
|
"slanted-squares": Object.freeze({ columns: 3, rows: 2, sizeFraction: 0.5, angleDegrees: 5, darkReflectance: 0.15, lightReflectance: 0.6 }),
|
|
98
98
|
"line-grid": Object.freeze({ spacing: 1 / 3, lineWidth: 0.01, lineReflectance: 0.42, backgroundReflectance: 0.6 }),
|
|
99
99
|
fiducial: Object.freeze({ radiusFraction: 0.8, ringFraction: 0.18, inverted: false, darkReflectance: 0.05, lightReflectance: 0.8, backgroundReflectance: 0.18 }),
|
|
100
|
+
"color-patches": Object.freeze({ patchIds: COLOR_PATCH_IDS, gapFraction: 0.1, backgroundReflectance: 0.18 }),
|
|
100
101
|
composite: Object.freeze({ background: Object.freeze({ preset: "uniform" as const, reflectance: 0.18 }) })
|
|
101
102
|
})
|
|
102
103
|
```
|
|
@@ -108,7 +109,7 @@ The exact contract is declared below; use the domain guide for assumptions and s
|
|
|
108
109
|
```ts
|
|
109
110
|
CHART_SCENE_PRESETS: readonly ChartScenePresetId[] = Object.freeze(["uniform", "slanted-edge", "siemens-star",
|
|
110
111
|
"step-wedge", "grey-ramp", "checkerboard", "point-grid", "patches", "dead-leaves", "bar-groups", "hyperbolic-wedge", "zone-plate",
|
|
111
|
-
"slanted-squares", "line-grid", "fiducial", "composite"] as const)
|
|
112
|
+
"slanted-squares", "line-grid", "fiducial", "color-patches", "composite"] as const)
|
|
112
113
|
```
|
|
113
114
|
|
|
114
115
|
## CHART_SPECTRAL_RANGE_NANOMETERS
|
|
@@ -144,7 +145,7 @@ Any chart preset except `composite`: a composite's background or element.
|
|
|
144
145
|
|
|
145
146
|
```ts
|
|
146
147
|
export type ChartElementScene = UniformChartScene | SlantedEdgeChartScene | SiemensStarChartScene | StepWedgeChartScene | GreyRampChartScene |
|
|
147
|
-
CheckerboardChartScene | PointGridChartScene | PatchChartScene | DeadLeavesChartScene | BarGroupsChartScene | HyperbolicWedgeChartScene |
|
|
148
|
+
CheckerboardChartScene | PointGridChartScene | PatchChartScene | ColorPatchesChartScene | DeadLeavesChartScene | BarGroupsChartScene | HyperbolicWedgeChartScene |
|
|
148
149
|
ZonePlateChartScene | SlantedSquaresChartScene | LineGridChartScene | FiducialChartScene;
|
|
149
150
|
```
|
|
150
151
|
|
|
@@ -158,10 +159,11 @@ export interface ChartRectangle { u0: number; v0: number; u1: number; v1: number
|
|
|
158
159
|
|
|
159
160
|
## ChartReflectance
|
|
160
161
|
|
|
161
|
-
A neutral (spectrally flat) reflectance in [0, 1],
|
|
162
|
+
A neutral (spectrally flat) reflectance in [0, 1], a caller reflectance spectrum (values in [0, 1]) or, from 2.14, a
|
|
163
|
+
built-in color patch `{ kind: "color-patch", patchId }`.
|
|
162
164
|
|
|
163
165
|
```ts
|
|
164
|
-
export type ChartReflectance = number | ColorimetricSpectrum;
|
|
166
|
+
export type ChartReflectance = number | ColorimetricSpectrum | ColorPatchReflectance;
|
|
165
167
|
```
|
|
166
168
|
|
|
167
169
|
## ChartScene
|
|
@@ -213,6 +215,35 @@ export interface CheckerboardChartScene {
|
|
|
213
215
|
}
|
|
214
216
|
```
|
|
215
217
|
|
|
218
|
+
## ColorPatchesChartScene
|
|
219
|
+
|
|
220
|
+
2.14: the built-in Photivra color patches (`getColorPatchSet()`) in a grid, drawn like `patches`: row-major, each
|
|
221
|
+
patch centred in an equal cell with a neutral gap around it. The spectra are the engine's own analytic designs; no
|
|
222
|
+
third-party chart data, names, order or layout are used.
|
|
223
|
+
|
|
224
|
+
```ts
|
|
225
|
+
export interface ColorPatchesChartScene {
|
|
226
|
+
preset: "color-patches";
|
|
227
|
+
/** Patches to draw, row-major, distinct. Default: the whole set in `COLOR_PATCH_IDS` order (30 patches, six per row). */
|
|
228
|
+
patchIds?: readonly ColorPatchId[];
|
|
229
|
+
/** Patches per row, 1 to the patch count. Default min(6, patch count). */
|
|
230
|
+
columns?: number;
|
|
231
|
+
/** Gap between patches as a fraction of the cell size, [0, 0.5). Default 0.1. */
|
|
232
|
+
gapFraction?: number;
|
|
233
|
+
/** Neutral reflectance of the gaps and empty cells. Default 0.18. */
|
|
234
|
+
backgroundReflectance?: number;
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## ColorPatchReflectance
|
|
239
|
+
|
|
240
|
+
2.14: one of the engine's built-in color patches (see `getColorPatchSet()`): its reflectance spectrum, Photivra's own
|
|
241
|
+
analytic design, rendered through the same spectral path as a caller spectrum.
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
export interface ColorPatchReflectance { kind: "color-patch"; patchId: ColorPatchId }
|
|
245
|
+
```
|
|
246
|
+
|
|
216
247
|
## CompositeChartElement
|
|
217
248
|
|
|
218
249
|
One element of a composite chart: a preset drawn inside its placement rectangle (frame units of the
|
|
@@ -346,7 +377,7 @@ The exact contract is declared below; use the domain guide for assumptions and s
|
|
|
346
377
|
```ts
|
|
347
378
|
export interface PatchChartScene {
|
|
348
379
|
preset: "patches";
|
|
349
|
-
/** Caller reflectance per patch, row-major; the facade bundles no
|
|
380
|
+
/** Caller reflectance per patch, row-major; the facade bundles no color-chart data. 1..1024 patches. */
|
|
350
381
|
patches: readonly { patchId: string; reflectance: ChartReflectance }[];
|
|
351
382
|
/** Patches per row. Default ceil(sqrt(patch count)). */
|
|
352
383
|
columns?: number;
|