Merge ~r41k0u/ubuntu/+source/libcamera:pisp into ubuntu/+source/libcamera:ubuntu/devel

Proposed by Pragyansh Chaturvedi
Status: Needs review
Proposed branch: ~r41k0u/ubuntu/+source/libcamera:pisp
Merge into: ubuntu/+source/libcamera:ubuntu/devel
Diff against target: 19095 lines (+19026/-2)
7 files modified
debian/changelog (+16/-0)
debian/control (+4/-2)
debian/libcamera-dev.install (+2/-0)
debian/patches/add_pisp_rpi5.patch (+19000/-0)
debian/patches/series (+1/-0)
debian/rules (+2/-0)
debian/source/include-binaries (+1/-0)
Reviewer Review Type Date Requested Status
Simon Quigley (community) Approve
git-ubuntu import Pending
Review via email: mp+477052@code.launchpad.net

Commit message

* Add pisp driver for cameras on Raspberry Pi 5
  - d/p/add_pisp_rpi5.patch: This patch adds the new pisp driver used
    by camera modules on the Raspberry Pi 5 (they used unicam till Rpi4)
    and other changes required by it. IT only supports IMX219 sensor for
    now, but support for all sensors on RPi4 can be added trivially.
  - d/p/series: add new patch to series

Description of the change

This patch adds the new pisp driver from the Raspberry Pi Foundation's
fork of libcamera (https://github.com/raspberrypi/libcamera)
The camera module uses the pisp driver instead of unicam on RPi5, so this
patch is essential to make them work.

To post a comment you must log in.
Revision history for this message
Simon Quigley (tsimonq2) :
review: Approve

Unmerged commits

bb98d86... by Pragyansh Chaturvedi

Update maintainer

504d3b5... by Pragyansh Chaturvedi

changelog

890fe15... by Pragyansh Chaturvedi

* Add pisp driver for cameras on Raspberry Pi 5
  - d/p/add_pisp_rpi5.patch: This patch adds the new pisp driver used
    by camera modules on the Raspberry Pi 5 (they used unicam till Rpi4)
    and other changes required by it. IT only supports IMX219 sensor for
    now, but support for all sensors on RPi4 can be added trivially.
  - d/p/series: add new patch to series
  - d/vendor: add libpisp source archive
  - d/rules: Add custom rules to uncompress libpisp as a subproject
  - d/control: add nlohmann-json-dev as dependency for libpisp
  - d/s/include-binaries: include libpisp source tarball
  - d/libcamera-dev.install: include libpisp installation

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/debian/changelog b/debian/changelog
index 83df129..811bf25 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
1libcamera (0.3.2-2ubuntu1) plucky; urgency=medium
2
3 * Add pisp driver for cameras on Raspberry Pi 5
4 - d/p/add_pisp_rpi5.patch: This patch adds the new pisp driver used
5 by camera modules on the Raspberry Pi 5 (they used unicam till Rpi4)
6 and other changes required by it. IT only supports IMX219 sensor for
7 now, but support for all sensors on RPi4 can be added trivially.
8 - d/p/series: add new patch to series
9 - d/vendor: add libpisp source archive
10 - d/rules: Add custom rules to uncompress libpisp as a subproject
11 - d/control: add nlohmann-json-dev as dependency for libpisp
12 - d/s/include-binaries: include libpisp source tarball
13 - d/libcamera-dev.install: include libpisp installation
14
15 -- Pragyansh Chaturvedi <pragyansh.chaturvedi@canonical.com> Fri, 22 Nov 2024 17:58:41 +0530
16
1libcamera (0.3.2-2) unstable; urgency=medium17libcamera (0.3.2-2) unstable; urgency=medium
218
3 [ Helmut Grohne ]19 [ Helmut Grohne ]
diff --git a/debian/control b/debian/control
index 87985c1..259261d 100644
--- a/debian/control
+++ b/debian/control
@@ -1,5 +1,6 @@
1Source: libcamera1Source: libcamera
2Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>2Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
3XSBC-Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
3Uploaders: Emmanuel Arias <emmanuelarias30@gmail.com>,4Uploaders: Emmanuel Arias <emmanuelarias30@gmail.com>,
4 IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,5 IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,
5 Andrej Shadura <andrewsh@debian.org>,6 Andrej Shadura <andrewsh@debian.org>,
@@ -29,7 +30,8 @@ Build-Depends: debhelper-compat (= 13),
29 python3-ply,30 python3-ply,
30 python3-pybind11 <!pkg.libcamera.nopython>,31 python3-pybind11 <!pkg.libcamera.nopython>,
31 python3-yaml,32 python3-yaml,
32 qt6-base-dev [!i386] <!pkg.libcamera.noqt>33 qt6-base-dev [!i386] <!pkg.libcamera.noqt>,
34 nlohmann-json3-dev [!i386]
33Build-Depends-Indep: doxygen <!nodoc>,35Build-Depends-Indep: doxygen <!nodoc>,
34 doxygen-latex [!sh4] <!nodoc> | texlive-latex-extra <!nodoc>,36 doxygen-latex [!sh4] <!nodoc> | texlive-latex-extra <!nodoc>,
35 graphviz <!nodoc>,37 graphviz <!nodoc>,
diff --git a/debian/libcamera-dev.install b/debian/libcamera-dev.install
index 25e9244..442685a 100644
--- a/debian/libcamera-dev.install
+++ b/debian/libcamera-dev.install
@@ -1,3 +1,5 @@
1usr/include1usr/include
2usr/lib/*/l*.so2usr/lib/*/l*.so
3usr/lib/*/pkgconfig/*.pc3usr/lib/*/pkgconfig/*.pc
4usr/lib/*/libpisp.so.*
5usr/share/libpisp/*
diff --git a/debian/patches/add_pisp_rpi5.patch b/debian/patches/add_pisp_rpi5.patch
4new file mode 1006446new file mode 100644
index 0000000..16ff121
--- /dev/null
+++ b/debian/patches/add_pisp_rpi5.patch
@@ -0,0 +1,19000 @@
1Description: Add pisp driver to make cameras work on Raspbery Pi 5
2 This patch adds the new pisp driver used on the Raspberry Pi 5 from
3 the Raspberry Pi Foundation's fork of libcamera
4 (https://github.com/raspberrypi/libcamera)
5 The camera module uses the pisp driver instead of unicam on RPi5,
6 so this patch is essential to make them work. This only supports
7 the IMX219 sensor for now, but it is trivial to add support for
8 sensors which already worked on the RPi4.
9Author: Pragyansh Chaturvedi <pragyansh.chaturvedi@canonical.com>
10Last-Update: 2024-11-22
11---
12--- a/include/libcamera/ipa/meson.build 2024-11-25 21:08:37.649494681 +0530
13+++ b/include/libcamera/ipa/meson.build 2024-11-25 21:08:37.634494077 +0530
14@@ -65,6 +65,7 @@
15 pipeline_ipa_mojom_mapping = {
16 'ipu3': 'ipu3.mojom',
17 'rkisp1': 'rkisp1.mojom',
18+ 'rpi/pisp': 'raspberrypi.mojom',
19 'rpi/vc4': 'raspberrypi.mojom',
20 'simple': 'soft.mojom',
21 'vimc': 'vimc.mojom',
22--- a/include/libcamera/meson.build 2024-11-25 21:08:37.649494681 +0530
23+++ b/include/libcamera/meson.build 2024-11-25 21:08:37.634494077 +0530
24@@ -36,6 +36,7 @@
25 'controls': {
26 'draft': 'control_ids_draft.yaml',
27 'core': 'control_ids_core.yaml',
28+ 'rpi/pisp': 'control_ids_rpi.yaml',
29 'rpi/vc4': 'control_ids_rpi.yaml',
30 },
31
32--- a/meson.build 2024-11-25 21:08:37.649494681 +0530
33+++ b/meson.build 2024-11-25 21:08:37.634494077 +0530
34@@ -210,6 +210,7 @@
35 'ipu3': arch_x86,
36 'mali-c55': arch_arm,
37 'rkisp1': arch_arm,
38+ 'rpi/pisp': ['any'],
39 'rpi/vc4': arch_arm,
40 'simple': ['any'],
41 'uvcvideo': ['any'],
42--- a/meson_options.txt 2024-11-25 21:08:37.649494681 +0530
43+++ b/meson_options.txt 2024-11-25 21:08:37.635494117 +0530
44@@ -32,7 +32,7 @@
45
46 option('ipas',
47 type : 'array',
48- choices : ['ipu3', 'rkisp1', 'rpi/vc4', 'simple', 'vimc'],
49+ choices : ['ipu3', 'rkisp1', 'rpi/pisp', 'rpi/vc4', 'simple', 'vimc'],
50 description : 'Select which IPA modules to build')
51
52 option('lc-compliance',
53@@ -50,6 +50,7 @@
54 'ipu3',
55 'mali-c55',
56 'rkisp1',
57+ 'rpi/pisp',
58 'rpi/vc4',
59 'simple',
60 'uvcvideo',
61--- a/src/ipa/rpi/cam_helper/cam_helper.cpp 2024-11-25 21:08:37.649494681 +0530
62+++ b/src/ipa/rpi/cam_helper/cam_helper.cpp 2024-11-25 21:08:37.635494117 +0530
63@@ -156,6 +156,11 @@
64 }
65 }
66
67+void CamHelper::setHwConfig(const Controller::HardwareConfig &hwConfig)
68+{
69+ hwConfig_ = hwConfig;
70+}
71+
72 void CamHelper::getDelays(int &exposureDelay, int &gainDelay,
73 int &vblankDelay, int &hblankDelay) const
74 {
75--- a/src/ipa/rpi/cam_helper/cam_helper.h 2024-11-25 21:08:37.649494681 +0530
76+++ b/src/ipa/rpi/cam_helper/cam_helper.h 2024-11-25 21:08:37.635494117 +0530
77@@ -76,6 +76,7 @@
78 CamHelper(std::unique_ptr<MdParser> parser, unsigned int frameIntegrationDiff);
79 virtual ~CamHelper();
80 void setCameraMode(const CameraMode &mode);
81+ void setHwConfig(const Controller::HardwareConfig &hwConfig);
82 virtual void prepare(libcamera::Span<const uint8_t> buffer,
83 Metadata &metadata);
84 virtual void process(StatisticsPtr &stats, Metadata &metadata);
85@@ -108,6 +109,7 @@
86
87 std::unique_ptr<MdParser> parser_;
88 CameraMode mode_;
89+ Controller::HardwareConfig hwConfig_;
90
91 private:
92 /*
93--- a/src/ipa/rpi/common/ipa_base.cpp 2024-11-25 21:08:37.649494681 +0530
94+++ b/src/ipa/rpi/common/ipa_base.cpp 2024-11-25 21:08:37.636494158 +0530
95@@ -96,6 +96,13 @@
96 { &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) }
97 };
98
99+/* Platform specific controls */
100+const std::map<const std::string, ControlInfoMap::Map> platformControls {
101+ { "pisp", {
102+ { &controls::rpi::ScalerCrops, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) }
103+ } },
104+};
105+
106 } /* namespace */
107
108 LOG_DEFINE_CATEGORY(IPARPI)
109@@ -153,12 +160,17 @@
110 lensPresent_ = params.lensPresent;
111
112 controller_.initialise();
113+ helper_->setHwConfig(controller_.getHardwareConfig());
114
115 /* Return the controls handled by the IPA */
116 ControlInfoMap::Map ctrlMap = ipaControls;
117 if (lensPresent_)
118 ctrlMap.merge(ControlInfoMap::Map(ipaAfControls));
119
120+ auto platformCtrlsIt = platformControls.find(controller_.getTarget());
121+ if (platformCtrlsIt != platformControls.end())
122+ ctrlMap.merge(ControlInfoMap::Map(platformCtrlsIt->second));
123+
124 monoSensor_ = params.sensorInfo.cfaPattern == properties::draft::ColorFilterArrangementEnum::MONO;
125 if (!monoSensor_)
126 ctrlMap.merge(ControlInfoMap::Map(ipaColourControls));
127@@ -1070,7 +1082,7 @@
128 break;
129 }
130
131- case controls::SCALER_CROP: {
132+ case controls::rpi::SCALER_CROPS: {
133 /* We do nothing with this, but should avoid the warning below. */
134 break;
135 }
136--- /dev/null 1970-01-01 00:00:00.000000000 +0000
137+++ b/src/ipa/rpi/pisp/data/imx219.json 2024-11-25 21:08:37.637494198 +0530
138@@ -0,0 +1,1187 @@
139+{
140+ "version": 2.0,
141+ "target": "pisp",
142+ "algorithms": [
143+ {
144+ "rpi.black_level":
145+ {
146+ "black_level": 4096
147+ }
148+ },
149+ {
150+ "rpi.lux":
151+ {
152+ "reference_shutter_speed": 21965,
153+ "reference_gain": 1.0,
154+ "reference_aperture": 1.0,
155+ "reference_lux": 800,
156+ "reference_Y": 11460
157+ }
158+ },
159+ {
160+ "rpi.dpc":
161+ {
162+ "strength": 1
163+ }
164+ },
165+ {
166+ "rpi.noise":
167+ {
168+ "reference_constant": 0,
169+ "reference_slope": 3.661
170+ }
171+ },
172+ {
173+ "rpi.geq":
174+ {
175+ "offset": 239,
176+ "slope": 0.00766
177+ }
178+ },
179+ {
180+ "rpi.denoise":
181+ {
182+ "normal":
183+ {
184+ "sdn":
185+ {
186+ "deviation": 1.6,
187+ "strength": 0.5,
188+ "deviation2": 3.2,
189+ "deviation_no_tdn": 3.2,
190+ "strength_no_tdn": 0.75
191+ },
192+ "cdn":
193+ {
194+ "deviation": 200,
195+ "strength": 0.3
196+ },
197+ "tdn":
198+ {
199+ "deviation": 0.8,
200+ "threshold": 0.05
201+ }
202+ },
203+ "hdr":
204+ {
205+ "sdn":
206+ {
207+ "deviation": 1.6,
208+ "strength": 0.5,
209+ "deviation2": 3.2,
210+ "deviation_no_tdn": 3.2,
211+ "strength_no_tdn": 0.75
212+ },
213+ "cdn":
214+ {
215+ "deviation": 200,
216+ "strength": 0.3
217+ },
218+ "tdn":
219+ {
220+ "deviation": 1.3,
221+ "threshold": 0.1
222+ }
223+ },
224+ "night":
225+ {
226+ "sdn":
227+ {
228+ "deviation": 1.6,
229+ "strength": 0.5,
230+ "deviation2": 3.2,
231+ "deviation_no_tdn": 3.2,
232+ "strength_no_tdn": 0.75
233+ },
234+ "cdn":
235+ {
236+ "deviation": 200,
237+ "strength": 0.3
238+ },
239+ "tdn":
240+ {
241+ "deviation": 1.3,
242+ "threshold": 0.1
243+ }
244+ }
245+ }
246+ },
247+ {
248+ "rpi.awb":
249+ {
250+ "priors": [
251+ {
252+ "lux": 0,
253+ "prior":
254+ [
255+ 2000, 1.0,
256+ 3000, 0.0,
257+ 13000, 0.0
258+ ]
259+ },
260+ {
261+ "lux": 800,
262+ "prior":
263+ [
264+ 2000, 0.0,
265+ 6000, 2.0,
266+ 13000, 2.0
267+ ]
268+ },
269+ {
270+ "lux": 1500,
271+ "prior":
272+ [
273+ 2000, 0.0,
274+ 4000, 1.0,
275+ 6000, 6.0,
276+ 6500, 7.0,
277+ 7000, 1.0,
278+ 13000, 1.0
279+ ]
280+ }
281+ ],
282+ "modes":
283+ {
284+ "auto":
285+ {
286+ "lo": 2500,
287+ "hi": 7700
288+ },
289+ "incandescent":
290+ {
291+ "lo": 2500,
292+ "hi": 3000
293+ },
294+ "tungsten":
295+ {
296+ "lo": 3000,
297+ "hi": 3500
298+ },
299+ "fluorescent":
300+ {
301+ "lo": 4000,
302+ "hi": 4700
303+ },
304+ "indoor":
305+ {
306+ "lo": 3000,
307+ "hi": 5000
308+ },
309+ "daylight":
310+ {
311+ "lo": 5500,
312+ "hi": 6500
313+ },
314+ "cloudy":
315+ {
316+ "lo": 7000,
317+ "hi": 8000
318+ }
319+ },
320+ "bayes": 1,
321+ "ct_curve":
322+ [
323+ 2860.0, 0.9514, 0.4156,
324+ 2960.0, 0.9289, 0.4372,
325+ 3603.0, 0.8305, 0.5251,
326+ 4650.0, 0.6756, 0.6433,
327+ 5858.0, 0.6193, 0.6807,
328+ 7580.0, 0.5019, 0.7495
329+ ],
330+ "sensitivity_r": 1.0,
331+ "sensitivity_b": 1.0,
332+ "transverse_pos": 0.03392,
333+ "transverse_neg": 0.034
334+ }
335+ },
336+ {
337+ "rpi.agc":
338+ {
339+ "channels": [
340+ {
341+ "comment": "Channel 0 is normal AGC",
342+ "metering_modes":
343+ {
344+ "centre-weighted":
345+ {
346+ "weights":
347+ [
348+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
349+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
350+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
351+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
352+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
353+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
354+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
355+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
356+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
357+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
358+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
359+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
360+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
361+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
362+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
363+ ]
364+ },
365+ "spot":
366+ {
367+ "weights":
368+ [
369+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
370+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
371+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
372+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
373+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
374+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
375+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
376+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
377+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
378+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
379+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
380+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
381+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
382+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
383+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
384+ ]
385+ },
386+ "matrix":
387+ {
388+ "weights":
389+ [
390+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
391+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
392+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
393+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
394+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
395+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
396+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
397+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
398+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
399+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
400+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
401+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
402+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
403+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
404+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
405+ ]
406+ }
407+ },
408+ "exposure_modes":
409+ {
410+ "normal":
411+ {
412+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
413+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
414+ },
415+ "short":
416+ {
417+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
418+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
419+ },
420+ "long":
421+ {
422+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
423+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
424+ }
425+ },
426+ "constraint_modes":
427+ {
428+ "normal": [
429+ {
430+ "bound": "LOWER",
431+ "q_lo": 0.98,
432+ "q_hi": 1.0,
433+ "y_target":
434+ [
435+ 0, 0.5,
436+ 1000, 0.5
437+ ]
438+ }
439+ ],
440+ "highlight": [
441+ {
442+ "bound": "LOWER",
443+ "q_lo": 0.98,
444+ "q_hi": 1.0,
445+ "y_target":
446+ [
447+ 0, 0.5,
448+ 1000, 0.5
449+ ]
450+ },
451+ {
452+ "bound": "UPPER",
453+ "q_lo": 0.98,
454+ "q_hi": 1.0,
455+ "y_target":
456+ [
457+ 0, 0.8,
458+ 1000, 0.8
459+ ]
460+ }
461+ ],
462+ "shadows": [
463+ {
464+ "bound": "LOWER",
465+ "q_lo": 0.0,
466+ "q_hi": 0.5,
467+ "y_target":
468+ [
469+ 0, 0.17,
470+ 1000, 0.17
471+ ]
472+ }
473+ ]
474+ },
475+ "y_target":
476+ [
477+ 0, 0.16,
478+ 1000, 0.165,
479+ 10000, 0.17
480+ ]
481+ },
482+ {
483+ "comment": "Channel 1 is the HDR short channel",
484+ "desaturate": 0,
485+ "metering_modes":
486+ {
487+ "centre-weighted":
488+ {
489+ "weights":
490+ [
491+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
492+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
493+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
494+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
495+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
496+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
497+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
498+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
499+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
500+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
501+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
502+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
503+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
504+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
505+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
506+ ]
507+ },
508+ "spot":
509+ {
510+ "weights":
511+ [
512+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
513+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
514+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
515+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
516+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
517+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
518+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
519+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
520+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
521+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
522+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
523+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
524+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
525+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
526+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
527+ ]
528+ },
529+ "matrix":
530+ {
531+ "weights":
532+ [
533+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
534+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
535+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
536+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
537+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
538+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
539+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
540+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
541+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
542+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
543+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
544+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
545+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
546+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
547+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
548+ ]
549+ }
550+ },
551+ "exposure_modes":
552+ {
553+ "normal":
554+ {
555+ "shutter": [ 100, 15000, 30000 ],
556+ "gain": [ 1.0, 1.0, 2.0 ]
557+ },
558+ "short":
559+ {
560+ "shutter": [ 100, 15000, 30000 ],
561+ "gain": [ 1.0, 2.0, 2.0 ]
562+ },
563+ "long":
564+ {
565+ "shutter": [ 100, 15000, 60000 ],
566+ "gain": [ 1.0, 1.0, 1.0 ]
567+ }
568+ },
569+ "constraint_modes":
570+ {
571+ "normal": [
572+ {
573+ "bound": "LOWER",
574+ "q_lo": 0.0,
575+ "q_hi": 0.2,
576+ "y_target":
577+ [
578+ 0, 0.02,
579+ 1000, 0.02
580+ ]
581+ },
582+ {
583+ "bound": "UPPER",
584+ "q_lo": 0.98,
585+ "q_hi": 1.0,
586+ "y_target":
587+ [
588+ 0, 0.7,
589+ 1000, 0.7
590+ ]
591+ },
592+ {
593+ "bound": "LOWER",
594+ "q_lo": 0.0,
595+ "q_hi": 0.2,
596+ "y_target":
597+ [
598+ 0, 0.01,
599+ 1000, 0.01
600+ ]
601+ },
602+ {
603+ "bound": "UPPER",
604+ "q_lo": 0.9,
605+ "q_hi": 1.0,
606+ "y_target":
607+ [
608+ 0, 0.7,
609+ 1000, 0.7
610+ ]
611+ },
612+ {
613+ "bound": "LOWER",
614+ "q_lo": 0.0,
615+ "q_hi": 0.2,
616+ "y_target":
617+ [
618+ 0, 0.005,
619+ 1000, 0.005
620+ ]
621+ }
622+ ],
623+ "highlight": [
624+ {
625+ "bound": "LOWER",
626+ "q_lo": 0.95,
627+ "q_hi": 1.0,
628+ "y_target":
629+ [
630+ 0, 0.5,
631+ 1000, 0.5
632+ ]
633+ },
634+ {
635+ "bound": "UPPER",
636+ "q_lo": 0.95,
637+ "q_hi": 1.0,
638+ "y_target":
639+ [
640+ 0, 0.7,
641+ 1000, 0.7
642+ ]
643+ },
644+ {
645+ "bound": "LOWER",
646+ "q_lo": 0.0,
647+ "q_hi": 0.2,
648+ "y_target":
649+ [
650+ 0, 0.002,
651+ 1000, 0.002
652+ ]
653+ }
654+ ],
655+ "shadows": [
656+ {
657+ "bound": "LOWER",
658+ "q_lo": 0.95,
659+ "q_hi": 1.0,
660+ "y_target":
661+ [
662+ 0, 0.5,
663+ 1000, 0.5
664+ ]
665+ },
666+ {
667+ "bound": "UPPER",
668+ "q_lo": 0.95,
669+ "q_hi": 1.0,
670+ "y_target":
671+ [
672+ 0, 0.7,
673+ 1000, 0.7
674+ ]
675+ },
676+ {
677+ "bound": "LOWER",
678+ "q_lo": 0.0,
679+ "q_hi": 0.2,
680+ "y_target":
681+ [
682+ 0, 0.002,
683+ 1000, 0.002
684+ ]
685+ }
686+ ]
687+ },
688+ "y_target":
689+ [
690+ 0, 0.19,
691+ 1000, 0.19,
692+ 10000, 0.19
693+ ]
694+ },
695+ {
696+ "comment": "Channel 2 is the HDR long channel",
697+ "desaturate": 0,
698+ "metering_modes":
699+ {
700+ "centre-weighted":
701+ {
702+ "weights":
703+ [
704+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
705+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
706+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
707+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
708+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
709+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
710+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
711+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
712+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
713+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
714+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
715+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
716+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
717+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
718+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
719+ ]
720+ },
721+ "spot":
722+ {
723+ "weights":
724+ [
725+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
726+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
727+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
728+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
729+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
730+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
731+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
732+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
733+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
734+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
735+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
736+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
737+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
738+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
739+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
740+ ]
741+ },
742+ "matrix":
743+ {
744+ "weights":
745+ [
746+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
747+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
748+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
749+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
750+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
751+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
752+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
753+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
754+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
755+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
756+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
757+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
758+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
759+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
760+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
761+ ]
762+ }
763+ },
764+ "exposure_modes":
765+ {
766+ "normal":
767+ {
768+ "shutter": [ 100, 20000, 30000, 60000 ],
769+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
770+ },
771+ "short":
772+ {
773+ "shutter": [ 100, 20000, 30000, 60000 ],
774+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
775+ },
776+ "long":
777+ {
778+ "shutter": [ 100, 20000, 30000, 60000 ],
779+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
780+ }
781+ },
782+ "constraint_modes":
783+ {
784+ "normal": [ ],
785+ "highlight": [ ],
786+ "shadows": [ ]
787+ },
788+ "channel_constraints": [
789+ {
790+ "bound": "UPPER",
791+ "channel": 4,
792+ "factor": 8
793+ },
794+ {
795+ "bound": "LOWER",
796+ "channel": 4,
797+ "factor": 2
798+ }
799+ ],
800+ "y_target":
801+ [
802+ 0, 0.16,
803+ 1000, 0.165,
804+ 10000, 0.17
805+ ]
806+ },
807+ {
808+ "comment": "Channel 3 is the night mode channel",
809+ "base_ev": 0.33,
810+ "metering_modes":
811+ {
812+ "centre-weighted":
813+ {
814+ "weights":
815+ [
816+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
817+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
818+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
819+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
820+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
821+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
822+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
823+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
824+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
825+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
826+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
827+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
828+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
829+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
830+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
831+ ]
832+ },
833+ "spot":
834+ {
835+ "weights":
836+ [
837+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
838+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
839+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
840+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
841+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
842+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
843+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
844+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
845+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
846+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
847+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
848+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
849+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
850+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
851+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
852+ ]
853+ },
854+ "matrix":
855+ {
856+ "weights":
857+ [
858+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
859+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
860+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
861+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
862+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
863+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
864+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
865+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
866+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
867+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
868+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
869+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
870+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
871+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
872+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
873+ ]
874+ }
875+ },
876+ "exposure_modes":
877+ {
878+ "normal":
879+ {
880+ "shutter": [ 100, 20000, 66666 ],
881+ "gain": [ 1.0, 2.0, 4.0 ]
882+ },
883+ "short":
884+ {
885+ "shutter": [ 100, 20000, 33333 ],
886+ "gain": [ 1.0, 2.0, 4.0 ]
887+ },
888+ "long":
889+ {
890+ "shutter": [ 100, 20000, 66666, 120000 ],
891+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
892+ }
893+ },
894+ "constraint_modes":
895+ {
896+ "normal": [
897+ {
898+ "bound": "LOWER",
899+ "q_lo": 0.98,
900+ "q_hi": 1.0,
901+ "y_target":
902+ [
903+ 0, 0.5,
904+ 1000, 0.5
905+ ]
906+ }
907+ ],
908+ "highlight": [
909+ {
910+ "bound": "LOWER",
911+ "q_lo": 0.98,
912+ "q_hi": 1.0,
913+ "y_target":
914+ [
915+ 0, 0.5,
916+ 1000, 0.5
917+ ]
918+ },
919+ {
920+ "bound": "UPPER",
921+ "q_lo": 0.98,
922+ "q_hi": 1.0,
923+ "y_target":
924+ [
925+ 0, 0.8,
926+ 1000, 0.8
927+ ]
928+ }
929+ ],
930+ "shadows": [
931+ {
932+ "bound": "LOWER",
933+ "q_lo": 0.98,
934+ "q_hi": 1.0,
935+ "y_target":
936+ [
937+ 0, 0.5,
938+ 1000, 0.5
939+ ]
940+ }
941+ ]
942+ },
943+ "y_target":
944+ [
945+ 0, 0.16,
946+ 1000, 0.165,
947+ 10000, 0.17
948+ ]
949+ }
950+ ]
951+ }
952+ },
953+ {
954+ "rpi.alsc":
955+ {
956+ "omega": 1.3,
957+ "n_iter": 100,
958+ "luminance_strength": 0.8,
959+ "calibrations_Cr": [
960+ {
961+ "ct": 3000,
962+ "table":
963+ [
964+ 1.418, 1.428, 1.446, 1.454, 1.454, 1.451, 1.441, 1.428, 1.411, 1.391, 1.371, 1.349, 1.334, 1.327, 1.325, 1.325, 1.325, 1.325, 1.331, 1.344, 1.363, 1.383, 1.402, 1.418, 1.433, 1.446, 1.452, 1.453, 1.446, 1.435, 1.415, 1.404,
965+ 1.428, 1.442, 1.453, 1.455, 1.454, 1.447, 1.431, 1.413, 1.392, 1.371, 1.349, 1.331, 1.318, 1.307, 1.299, 1.299, 1.299, 1.303, 1.313, 1.328, 1.344, 1.363, 1.383, 1.404, 1.424, 1.439, 1.451, 1.453, 1.453, 1.445, 1.431, 1.415,
966+ 1.436, 1.448, 1.453, 1.455, 1.449, 1.435, 1.415, 1.393, 1.369, 1.345, 1.322, 1.303, 1.287, 1.276, 1.269, 1.268, 1.268, 1.272, 1.283, 1.298, 1.316, 1.337, 1.362, 1.384, 1.406, 1.427, 1.444, 1.454, 1.454, 1.452, 1.438, 1.426,
967+ 1.441, 1.451, 1.454, 1.451, 1.439, 1.422, 1.396, 1.372, 1.345, 1.319, 1.295, 1.274, 1.257, 1.245, 1.239, 1.238, 1.238, 1.245, 1.255, 1.269, 1.289, 1.311, 1.336, 1.362, 1.388, 1.412, 1.433, 1.448, 1.454, 1.453, 1.445, 1.433,
968+ 1.445, 1.452, 1.452, 1.445, 1.428, 1.405, 1.379, 1.349, 1.319, 1.295, 1.269, 1.247, 1.229, 1.219, 1.212, 1.211, 1.211, 1.217, 1.228, 1.242, 1.261, 1.286, 1.311, 1.339, 1.367, 1.395, 1.419, 1.439, 1.452, 1.452, 1.451, 1.436,
969+ 1.448, 1.451, 1.451, 1.435, 1.414, 1.387, 1.358, 1.327, 1.296, 1.269, 1.245, 1.222, 1.205, 1.193, 1.187, 1.185, 1.186, 1.191, 1.202, 1.217, 1.237, 1.261, 1.286, 1.316, 1.346, 1.378, 1.404, 1.429, 1.445, 1.451, 1.451, 1.442,
970+ 1.448, 1.448, 1.445, 1.427, 1.401, 1.371, 1.338, 1.306, 1.274, 1.245, 1.222, 1.199, 1.183, 1.171, 1.164, 1.162, 1.162, 1.168, 1.181, 1.194, 1.215, 1.237, 1.264, 1.294, 1.325, 1.359, 1.389, 1.418, 1.441, 1.449, 1.449, 1.443,
971+ 1.449, 1.448, 1.438, 1.415, 1.387, 1.352, 1.318, 1.284, 1.252, 1.223, 1.199, 1.179, 1.161, 1.149, 1.142, 1.142, 1.142, 1.149, 1.159, 1.174, 1.194, 1.215, 1.242, 1.272, 1.307, 1.341, 1.376, 1.405, 1.431, 1.447, 1.447, 1.444,
972+ 1.448, 1.447, 1.431, 1.405, 1.373, 1.336, 1.301, 1.264, 1.234, 1.204, 1.179, 1.161, 1.143, 1.131, 1.124, 1.123, 1.123, 1.131, 1.141, 1.156, 1.174, 1.197, 1.224, 1.254, 1.288, 1.324, 1.361, 1.394, 1.423, 1.442, 1.444, 1.444,
973+ 1.447, 1.442, 1.424, 1.393, 1.359, 1.322, 1.284, 1.248, 1.216, 1.187, 1.162, 1.143, 1.128, 1.115, 1.109, 1.108, 1.108, 1.113, 1.124, 1.139, 1.156, 1.179, 1.206, 1.236, 1.272, 1.309, 1.347, 1.382, 1.411, 1.435, 1.443, 1.444,
974+ 1.444, 1.439, 1.417, 1.383, 1.347, 1.308, 1.271, 1.233, 1.201, 1.173, 1.147, 1.128, 1.115, 1.101, 1.095, 1.093, 1.093, 1.099, 1.111, 1.124, 1.142, 1.165, 1.191, 1.222, 1.258, 1.296, 1.333, 1.372, 1.404, 1.429, 1.441, 1.442,
975+ 1.443, 1.434, 1.409, 1.375, 1.336, 1.297, 1.257, 1.221, 1.189, 1.159, 1.136, 1.116, 1.101, 1.092, 1.083, 1.082, 1.082, 1.089, 1.099, 1.111, 1.131, 1.153, 1.181, 1.211, 1.246, 1.284, 1.324, 1.361, 1.398, 1.425, 1.441, 1.441,
976+ 1.443, 1.431, 1.405, 1.369, 1.328, 1.287, 1.247, 1.211, 1.178, 1.149, 1.126, 1.107, 1.092, 1.083, 1.075, 1.073, 1.073, 1.082, 1.089, 1.101, 1.121, 1.143, 1.171, 1.201, 1.237, 1.274, 1.314, 1.353, 1.389, 1.421, 1.439, 1.441,
977+ 1.442, 1.429, 1.401, 1.364, 1.323, 1.279, 1.241, 1.205, 1.172, 1.144, 1.119, 1.101, 1.085, 1.075, 1.071, 1.067, 1.067, 1.073, 1.082, 1.096, 1.114, 1.136, 1.163, 1.194, 1.229, 1.268, 1.308, 1.348, 1.387, 1.417, 1.439, 1.439,
978+ 1.443, 1.429, 1.399, 1.362, 1.319, 1.276, 1.237, 1.199, 1.169, 1.141, 1.115, 1.096, 1.081, 1.071, 1.066, 1.063, 1.066, 1.068, 1.078, 1.092, 1.109, 1.132, 1.159, 1.191, 1.226, 1.263, 1.304, 1.346, 1.384, 1.416, 1.438, 1.439,
979+ 1.443, 1.428, 1.399, 1.361, 1.319, 1.276, 1.236, 1.199, 1.167, 1.139, 1.115, 1.096, 1.081, 1.071, 1.064, 1.062, 1.062, 1.067, 1.077, 1.091, 1.109, 1.131, 1.158, 1.189, 1.224, 1.262, 1.303, 1.345, 1.383, 1.416, 1.438, 1.439,
980+ 1.444, 1.429, 1.399, 1.361, 1.319, 1.276, 1.236, 1.199, 1.167, 1.139, 1.116, 1.096, 1.081, 1.071, 1.064, 1.063, 1.063, 1.067, 1.077, 1.091, 1.109, 1.131, 1.159, 1.189, 1.224, 1.262, 1.303, 1.345, 1.384, 1.416, 1.438, 1.441,
981+ 1.444, 1.431, 1.402, 1.364, 1.322, 1.281, 1.239, 1.202, 1.171, 1.142, 1.118, 1.099, 1.084, 1.073, 1.069, 1.065, 1.067, 1.071, 1.079, 1.094, 1.112, 1.135, 1.163, 1.191, 1.227, 1.265, 1.307, 1.348, 1.386, 1.418, 1.438, 1.441,
982+ 1.447, 1.433, 1.406, 1.369, 1.328, 1.286, 1.244, 1.209, 1.177, 1.148, 1.124, 1.105, 1.089, 1.081, 1.073, 1.071, 1.071, 1.079, 1.085, 1.099, 1.118, 1.141, 1.168, 1.198, 1.233, 1.271, 1.312, 1.352, 1.391, 1.422, 1.441, 1.444,
983+ 1.448, 1.438, 1.412, 1.376, 1.335, 1.295, 1.255, 1.218, 1.186, 1.157, 1.134, 1.113, 1.098, 1.089, 1.081, 1.079, 1.079, 1.085, 1.094, 1.107, 1.125, 1.149, 1.175, 1.207, 1.242, 1.281, 1.319, 1.359, 1.396, 1.425, 1.445, 1.447,
984+ 1.449, 1.443, 1.417, 1.384, 1.345, 1.305, 1.266, 1.229, 1.197, 1.169, 1.145, 1.124, 1.111, 1.098, 1.091, 1.089, 1.089, 1.094, 1.107, 1.118, 1.137, 1.159, 1.187, 1.218, 1.253, 1.291, 1.329, 1.369, 1.405, 1.433, 1.447, 1.449,
985+ 1.453, 1.449, 1.425, 1.395, 1.358, 1.318, 1.281, 1.244, 1.211, 1.183, 1.158, 1.138, 1.124, 1.111, 1.104, 1.103, 1.103, 1.107, 1.118, 1.133, 1.151, 1.174, 1.201, 1.232, 1.267, 1.304, 1.344, 1.379, 1.413, 1.437, 1.449, 1.449,
986+ 1.457, 1.453, 1.434, 1.405, 1.371, 1.335, 1.297, 1.261, 1.229, 1.199, 1.174, 1.155, 1.138, 1.126, 1.119, 1.117, 1.117, 1.124, 1.133, 1.149, 1.167, 1.189, 1.217, 1.248, 1.284, 1.319, 1.357, 1.393, 1.423, 1.444, 1.452, 1.452,
987+ 1.459, 1.457, 1.443, 1.418, 1.385, 1.352, 1.314, 1.279, 1.246, 1.218, 1.193, 1.174, 1.155, 1.144, 1.137, 1.136, 1.136, 1.141, 1.151, 1.167, 1.187, 1.208, 1.236, 1.267, 1.301, 1.337, 1.373, 1.405, 1.434, 1.453, 1.455, 1.455,
988+ 1.461, 1.461, 1.454, 1.429, 1.401, 1.369, 1.333, 1.301, 1.269, 1.239, 1.216, 1.193, 1.177, 1.165, 1.158, 1.156, 1.156, 1.161, 1.171, 1.187, 1.208, 1.229, 1.258, 1.288, 1.321, 1.356, 1.389, 1.419, 1.445, 1.459, 1.459, 1.455,
989+ 1.462, 1.462, 1.459, 1.442, 1.418, 1.386, 1.354, 1.322, 1.292, 1.262, 1.239, 1.216, 1.199, 1.187, 1.179, 1.178, 1.178, 1.184, 1.194, 1.208, 1.229, 1.253, 1.279, 1.309, 1.342, 1.375, 1.406, 1.433, 1.452, 1.464, 1.464, 1.454,
990+ 1.461, 1.465, 1.465, 1.454, 1.431, 1.405, 1.376, 1.346, 1.316, 1.288, 1.262, 1.242, 1.223, 1.212, 1.205, 1.203, 1.203, 1.208, 1.218, 1.234, 1.253, 1.279, 1.305, 1.334, 1.363, 1.393, 1.421, 1.445, 1.461, 1.465, 1.464, 1.452,
991+ 1.459, 1.465, 1.466, 1.461, 1.443, 1.421, 1.395, 1.368, 1.341, 1.316, 1.288, 1.268, 1.251, 1.238, 1.232, 1.229, 1.229, 1.235, 1.246, 1.261, 1.279, 1.305, 1.331, 1.356, 1.385, 1.411, 1.435, 1.454, 1.466, 1.466, 1.464, 1.451,
992+ 1.454, 1.465, 1.467, 1.466, 1.456, 1.436, 1.414, 1.389, 1.367, 1.341, 1.318, 1.297, 1.279, 1.269, 1.261, 1.259, 1.259, 1.265, 1.274, 1.288, 1.308, 1.331, 1.355, 1.381, 1.404, 1.428, 1.447, 1.462, 1.468, 1.467, 1.457, 1.445,
993+ 1.447, 1.459, 1.466, 1.467, 1.463, 1.451, 1.434, 1.411, 1.389, 1.367, 1.344, 1.325, 1.311, 1.297, 1.292, 1.289, 1.289, 1.295, 1.303, 1.317, 1.336, 1.356, 1.381, 1.402, 1.423, 1.441, 1.457, 1.467, 1.468, 1.463, 1.451, 1.439,
994+ 1.438, 1.449, 1.462, 1.464, 1.464, 1.459, 1.446, 1.429, 1.408, 1.388, 1.369, 1.353, 1.339, 1.329, 1.321, 1.321, 1.321, 1.325, 1.333, 1.348, 1.362, 1.379, 1.401, 1.421, 1.439, 1.454, 1.463, 1.465, 1.465, 1.456, 1.442, 1.427,
995+ 1.429, 1.439, 1.454, 1.464, 1.464, 1.459, 1.449, 1.435, 1.421, 1.402, 1.385, 1.369, 1.353, 1.341, 1.338, 1.337, 1.337, 1.338, 1.348, 1.362, 1.378, 1.395, 1.411, 1.429, 1.445, 1.455, 1.463, 1.464, 1.457, 1.447, 1.427, 1.419
996+ ]
997+ },
998+ {
999+ "ct": 5000,
1000+ "table":
1001+ [
1002+ 2.163, 2.177, 2.194, 2.196, 2.197, 2.192, 2.181, 2.161, 2.139, 2.113, 2.088, 2.063, 2.047, 2.041, 2.036, 2.036, 2.036, 2.037, 2.046, 2.059, 2.083, 2.113, 2.135, 2.158, 2.181, 2.193, 2.205, 2.205, 2.202, 2.189, 2.171, 2.158,
1003+ 2.169, 2.184, 2.195, 2.196, 2.194, 2.182, 2.163, 2.141, 2.116, 2.088, 2.063, 2.042, 2.025, 2.013, 2.004, 2.004, 2.006, 2.011, 2.022, 2.038, 2.059, 2.083, 2.113, 2.137, 2.162, 2.182, 2.197, 2.204, 2.203, 2.199, 2.183, 2.171,
1004+ 2.177, 2.187, 2.193, 2.193, 2.184, 2.166, 2.142, 2.116, 2.087, 2.057, 2.033, 2.008, 1.991, 1.977, 1.969, 1.969, 1.969, 1.975, 1.988, 2.006, 2.028, 2.055, 2.083, 2.114, 2.139, 2.166, 2.187, 2.199, 2.202, 2.201, 2.189, 2.179,
1005+ 2.183, 2.189, 2.192, 2.186, 2.172, 2.146, 2.119, 2.089, 2.058, 2.026, 2.001, 1.975, 1.956, 1.942, 1.934, 1.932, 1.933, 1.941, 1.955, 1.971, 1.995, 2.023, 2.055, 2.084, 2.119, 2.146, 2.171, 2.191, 2.201, 2.201, 2.194, 2.183,
1006+ 2.186, 2.189, 2.189, 2.177, 2.158, 2.127, 2.096, 2.059, 2.026, 1.998, 1.969, 1.944, 1.925, 1.911, 1.901, 1.901, 1.903, 1.912, 1.924, 1.941, 1.964, 1.995, 2.023, 2.058, 2.091, 2.126, 2.155, 2.181, 2.195, 2.199, 2.198, 2.188,
1007+ 2.189, 2.189, 2.184, 2.166, 2.138, 2.108, 2.071, 2.036, 1.999, 1.969, 1.941, 1.914, 1.894, 1.879, 1.871, 1.871, 1.872, 1.879, 1.893, 1.913, 1.937, 1.964, 1.997, 2.029, 2.065, 2.104, 2.137, 2.169, 2.187, 2.199, 2.199, 2.189,
1008+ 2.187, 2.186, 2.176, 2.154, 2.123, 2.087, 2.044, 2.011, 1.974, 1.941, 1.913, 1.887, 1.868, 1.852, 1.844, 1.843, 1.844, 1.852, 1.866, 1.885, 1.912, 1.937, 1.972, 2.004, 2.042, 2.081, 2.119, 2.154, 2.179, 2.195, 2.196, 2.193,
1009+ 2.187, 2.181, 2.167, 2.141, 2.103, 2.062, 2.023, 1.984, 1.947, 1.916, 1.887, 1.864, 1.841, 1.828, 1.821, 1.819, 1.819, 1.828, 1.842, 1.862, 1.885, 1.913, 1.945, 1.982, 2.021, 2.058, 2.102, 2.137, 2.168, 2.192, 2.193, 2.193,
1010+ 2.182, 2.181, 2.161, 2.127, 2.083, 2.044, 2.002, 1.961, 1.924, 1.891, 1.864, 1.841, 1.819, 1.806, 1.797, 1.797, 1.797, 1.805, 1.819, 1.841, 1.862, 1.892, 1.924, 1.959, 1.999, 2.041, 2.082, 2.123, 2.161, 2.185, 2.191, 2.192,
1011+ 2.182, 2.172, 2.149, 2.112, 2.069, 2.026, 1.982, 1.941, 1.904, 1.871, 1.841, 1.819, 1.799, 1.785, 1.776, 1.776, 1.778, 1.784, 1.798, 1.819, 1.841, 1.869, 1.903, 1.939, 1.977, 2.021, 2.067, 2.108, 2.145, 2.174, 2.189, 2.191,
1012+ 2.181, 2.167, 2.139, 2.098, 2.056, 2.006, 1.965, 1.921, 1.883, 1.851, 1.823, 1.799, 1.783, 1.767, 1.759, 1.758, 1.758, 1.767, 1.783, 1.798, 1.825, 1.851, 1.883, 1.919, 1.959, 2.004, 2.049, 2.094, 2.136, 2.167, 2.187, 2.189,
1013+ 2.179, 2.163, 2.131, 2.087, 2.041, 1.994, 1.948, 1.907, 1.871, 1.835, 1.806, 1.784, 1.767, 1.754, 1.744, 1.742, 1.742, 1.752, 1.767, 1.783, 1.808, 1.838, 1.869, 1.905, 1.945, 1.989, 2.036, 2.083, 2.128, 2.159, 2.183, 2.187,
1014+ 2.178, 2.161, 2.126, 2.082, 2.032, 1.982, 1.936, 1.896, 1.857, 1.823, 1.795, 1.772, 1.754, 1.744, 1.732, 1.731, 1.732, 1.742, 1.752, 1.771, 1.796, 1.824, 1.857, 1.895, 1.934, 1.977, 2.024, 2.071, 2.116, 2.154, 2.181, 2.185,
1015+ 2.177, 2.157, 2.121, 2.074, 2.025, 1.973, 1.927, 1.886, 1.849, 1.815, 1.787, 1.765, 1.746, 1.732, 1.725, 1.722, 1.724, 1.732, 1.743, 1.762, 1.786, 1.813, 1.848, 1.886, 1.924, 1.969, 2.017, 2.066, 2.111, 2.153, 2.179, 2.183,
1016+ 2.177, 2.155, 2.119, 2.072, 2.022, 1.969, 1.925, 1.881, 1.844, 1.811, 1.782, 1.758, 1.739, 1.725, 1.721, 1.717, 1.721, 1.724, 1.739, 1.757, 1.781, 1.809, 1.842, 1.879, 1.921, 1.965, 2.012, 2.062, 2.108, 2.151, 2.179, 2.182,
1017+ 2.177, 2.156, 2.121, 2.071, 2.021, 1.968, 1.922, 1.879, 1.842, 1.811, 1.781, 1.757, 1.739, 1.725, 1.717, 1.715, 1.715, 1.723, 1.737, 1.757, 1.779, 1.808, 1.841, 1.877, 1.918, 1.963, 2.011, 2.061, 2.107, 2.148, 2.179, 2.183,
1018+ 2.178, 2.157, 2.121, 2.072, 2.021, 1.969, 1.922, 1.881, 1.842, 1.811, 1.781, 1.758, 1.739, 1.726, 1.718, 1.717, 1.718, 1.723, 1.737, 1.757, 1.781, 1.809, 1.841, 1.877, 1.918, 1.964, 2.012, 2.061, 2.108, 2.149, 2.179, 2.183,
1019+ 2.178, 2.159, 2.124, 2.074, 2.024, 1.974, 1.926, 1.885, 1.847, 1.813, 1.784, 1.762, 1.743, 1.731, 1.725, 1.719, 1.723, 1.728, 1.742, 1.762, 1.785, 1.814, 1.847, 1.881, 1.922, 1.966, 2.017, 2.065, 2.109, 2.151, 2.181, 2.184,
1020+ 2.181, 2.163, 2.129, 2.082, 2.032, 1.982, 1.934, 1.891, 1.854, 1.822, 1.794, 1.769, 1.751, 1.739, 1.731, 1.727, 1.728, 1.739, 1.747, 1.768, 1.791, 1.821, 1.852, 1.889, 1.929, 1.972, 2.022, 2.071, 2.117, 2.155, 2.182, 2.189,
1021+ 2.184, 2.169, 2.135, 2.091, 2.041, 1.994, 1.947, 1.902, 1.865, 1.833, 1.805, 1.779, 1.762, 1.751, 1.739, 1.739, 1.739, 1.747, 1.761, 1.779, 1.803, 1.831, 1.864, 1.898, 1.941, 1.984, 2.033, 2.079, 2.123, 2.163, 2.188, 2.193,
1022+ 2.185, 2.174, 2.142, 2.099, 2.054, 2.004, 1.959, 1.917, 1.879, 1.846, 1.819, 1.794, 1.779, 1.762, 1.754, 1.753, 1.753, 1.761, 1.777, 1.793, 1.816, 1.843, 1.877, 1.913, 1.953, 1.995, 2.043, 2.091, 2.135, 2.169, 2.191, 2.196,
1023+ 2.191, 2.179, 2.154, 2.118, 2.069, 2.023, 1.977, 1.935, 1.898, 1.865, 1.834, 1.813, 1.794, 1.779, 1.769, 1.769, 1.769, 1.777, 1.793, 1.809, 1.834, 1.863, 1.895, 1.929, 1.972, 2.015, 2.061, 2.105, 2.145, 2.178, 2.195, 2.199,
1024+ 2.197, 2.188, 2.166, 2.129, 2.087, 2.041, 1.997, 1.956, 1.918, 1.884, 1.855, 1.834, 1.813, 1.798, 1.788, 1.788, 1.788, 1.796, 1.809, 1.832, 1.853, 1.881, 1.912, 1.949, 1.991, 2.033, 2.076, 2.119, 2.159, 2.187, 2.202, 2.205,
1025+ 2.202, 2.197, 2.176, 2.148, 2.106, 2.065, 2.021, 1.979, 1.943, 1.909, 1.879, 1.855, 1.835, 1.819, 1.811, 1.811, 1.811, 1.818, 1.832, 1.853, 1.875, 1.904, 1.937, 1.972, 2.013, 2.055, 2.097, 2.138, 2.175, 2.197, 2.206, 2.207,
1026+ 2.205, 2.202, 2.189, 2.162, 2.126, 2.084, 2.044, 2.004, 1.967, 1.935, 1.907, 1.879, 1.861, 1.845, 1.838, 1.835, 1.835, 1.844, 1.855, 1.875, 1.902, 1.928, 1.961, 1.998, 2.033, 2.076, 2.118, 2.155, 2.186, 2.205, 2.208, 2.208,
1027+ 2.207, 2.205, 2.195, 2.175, 2.145, 2.108, 2.069, 2.029, 1.996, 1.963, 1.934, 1.908, 1.885, 1.872, 1.864, 1.863, 1.863, 1.869, 1.884, 1.902, 1.928, 1.956, 1.989, 2.023, 2.059, 2.099, 2.137, 2.172, 2.199, 2.212, 2.213, 2.209,
1028+ 2.207, 2.207, 2.203, 2.188, 2.162, 2.128, 2.094, 2.058, 2.023, 1.993, 1.963, 1.936, 1.916, 1.899, 1.893, 1.892, 1.893, 1.899, 1.912, 1.929, 1.956, 1.986, 2.016, 2.049, 2.084, 2.121, 2.156, 2.187, 2.208, 2.215, 2.215, 2.208,
1029+ 2.205, 2.208, 2.209, 2.199, 2.178, 2.149, 2.117, 2.083, 2.052, 2.023, 1.993, 1.967, 1.947, 1.933, 1.925, 1.922, 1.922, 1.929, 1.943, 1.961, 1.986, 2.015, 2.045, 2.076, 2.109, 2.143, 2.173, 2.198, 2.214, 2.218, 2.216, 2.205,
1030+ 2.201, 2.207, 2.211, 2.211, 2.193, 2.168, 2.141, 2.112, 2.082, 2.052, 2.025, 2.001, 1.981, 1.967, 1.959, 1.958, 1.958, 1.967, 1.975, 1.992, 2.018, 2.046, 2.076, 2.105, 2.136, 2.163, 2.189, 2.208, 2.217, 2.217, 2.212, 2.203,
1031+ 2.194, 2.204, 2.212, 2.213, 2.203, 2.187, 2.165, 2.139, 2.112, 2.083, 2.055, 2.034, 2.016, 2.001, 1.993, 1.993, 1.994, 1.999, 2.011, 2.027, 2.051, 2.077, 2.105, 2.133, 2.158, 2.181, 2.202, 2.217, 2.218, 2.218, 2.206, 2.193,
1032+ 2.185, 2.198, 2.213, 2.214, 2.212, 2.201, 2.184, 2.163, 2.135, 2.111, 2.089, 2.071, 2.052, 2.039, 2.032, 2.031, 2.031, 2.036, 2.048, 2.065, 2.085, 2.106, 2.131, 2.155, 2.178, 2.198, 2.212, 2.219, 2.219, 2.215, 2.201, 2.185,
1033+ 2.176, 2.191, 2.208, 2.217, 2.216, 2.205, 2.195, 2.177, 2.156, 2.133, 2.109, 2.089, 2.071, 2.055, 2.053, 2.053, 2.053, 2.057, 2.065, 2.085, 2.105, 2.123, 2.149, 2.171, 2.192, 2.205, 2.217, 2.219, 2.219, 2.202, 2.185, 2.181
1034+ ]
1035+ }
1036+ ],
1037+ "calibrations_Cb": [
1038+ {
1039+ "ct": 3000,
1040+ "table":
1041+ [
1042+ 2.518, 2.513, 2.503, 2.496, 2.488, 2.484, 2.485, 2.485, 2.486, 2.487, 2.487, 2.489, 2.494, 2.496, 2.496, 2.497, 2.499, 2.499, 2.496, 2.495, 2.492, 2.491, 2.491, 2.491, 2.492, 2.493, 2.495, 2.501, 2.508, 2.516, 2.528, 2.533,
1043+ 2.515, 2.508, 2.495, 2.487, 2.483, 2.481, 2.482, 2.483, 2.485, 2.487, 2.489, 2.491, 2.495, 2.497, 2.498, 2.501, 2.502, 2.502, 2.499, 2.496, 2.494, 2.491, 2.491, 2.489, 2.489, 2.491, 2.493, 2.496, 2.502, 2.511, 2.521, 2.531,
1044+ 2.507, 2.495, 2.486, 2.482, 2.478, 2.477, 2.481, 2.482, 2.484, 2.488, 2.491, 2.495, 2.499, 2.502, 2.506, 2.508, 2.509, 2.508, 2.505, 2.501, 2.497, 2.493, 2.491, 2.489, 2.488, 2.489, 2.489, 2.492, 2.496, 2.501, 2.511, 2.524,
1045+ 2.501, 2.487, 2.482, 2.481, 2.478, 2.477, 2.481, 2.483, 2.487, 2.491, 2.501, 2.503, 2.509, 2.511, 2.518, 2.519, 2.519, 2.519, 2.516, 2.509, 2.504, 2.498, 2.495, 2.493, 2.489, 2.489, 2.488, 2.489, 2.492, 2.498, 2.505, 2.523,
1046+ 2.499, 2.484, 2.481, 2.476, 2.476, 2.476, 2.481, 2.485, 2.492, 2.501, 2.509, 2.514, 2.519, 2.524, 2.528, 2.531, 2.533, 2.533, 2.525, 2.519, 2.514, 2.507, 2.501, 2.497, 2.493, 2.489, 2.489, 2.488, 2.491, 2.494, 2.501, 2.514,
1047+ 2.497, 2.483, 2.478, 2.476, 2.476, 2.478, 2.482, 2.491, 2.499, 2.509, 2.515, 2.522, 2.528, 2.535, 2.539, 2.541, 2.543, 2.542, 2.539, 2.529, 2.522, 2.516, 2.507, 2.502, 2.497, 2.491, 2.489, 2.488, 2.489, 2.492, 2.498, 2.514,
1048+ 2.492, 2.479, 2.476, 2.475, 2.476, 2.481, 2.488, 2.496, 2.505, 2.516, 2.524, 2.532, 2.541, 2.545, 2.552, 2.554, 2.554, 2.554, 2.548, 2.541, 2.532, 2.522, 2.516, 2.507, 2.502, 2.494, 2.491, 2.489, 2.489, 2.492, 2.494, 2.511,
1049+ 2.491, 2.479, 2.476, 2.477, 2.478, 2.482, 2.491, 2.502, 2.514, 2.524, 2.533, 2.543, 2.548, 2.555, 2.562, 2.566, 2.567, 2.562, 2.557, 2.551, 2.541, 2.531, 2.523, 2.512, 2.506, 2.498, 2.493, 2.491, 2.491, 2.491, 2.493, 2.507,
1050+ 2.489, 2.478, 2.476, 2.477, 2.481, 2.485, 2.494, 2.507, 2.517, 2.529, 2.542, 2.548, 2.557, 2.563, 2.567, 2.571, 2.572, 2.571, 2.565, 2.558, 2.549, 2.538, 2.528, 2.521, 2.509, 2.501, 2.494, 2.492, 2.491, 2.491, 2.491, 2.505,
1051+ 2.488, 2.478, 2.477, 2.478, 2.482, 2.489, 2.499, 2.509, 2.523, 2.538, 2.548, 2.556, 2.563, 2.568, 2.573, 2.577, 2.578, 2.577, 2.573, 2.564, 2.555, 2.543, 2.535, 2.524, 2.515, 2.504, 2.495, 2.492, 2.489, 2.488, 2.489, 2.501,
1052+ 2.486, 2.476, 2.475, 2.477, 2.483, 2.491, 2.503, 2.515, 2.529, 2.542, 2.553, 2.562, 2.568, 2.574, 2.581, 2.583, 2.584, 2.581, 2.578, 2.571, 2.562, 2.551, 2.539, 2.531, 2.517, 2.508, 2.497, 2.492, 2.488, 2.487, 2.489, 2.498,
1053+ 2.486, 2.476, 2.475, 2.479, 2.484, 2.492, 2.504, 2.519, 2.533, 2.544, 2.557, 2.566, 2.573, 2.581, 2.584, 2.588, 2.588, 2.586, 2.581, 2.575, 2.567, 2.555, 2.546, 2.534, 2.517, 2.509, 2.499, 2.492, 2.489, 2.485, 2.488, 2.497,
1054+ 2.487, 2.476, 2.476, 2.479, 2.486, 2.494, 2.506, 2.521, 2.535, 2.549, 2.559, 2.571, 2.578, 2.583, 2.589, 2.591, 2.591, 2.591, 2.587, 2.579, 2.571, 2.559, 2.551, 2.538, 2.523, 2.513, 2.503, 2.493, 2.489, 2.486, 2.487, 2.499,
1055+ 2.486, 2.475, 2.475, 2.479, 2.486, 2.495, 2.509, 2.525, 2.541, 2.555, 2.563, 2.573, 2.582, 2.588, 2.591, 2.594, 2.595, 2.592, 2.591, 2.585, 2.574, 2.564, 2.552, 2.541, 2.525, 2.514, 2.503, 2.493, 2.489, 2.486, 2.486, 2.501,
1056+ 2.486, 2.475, 2.475, 2.479, 2.488, 2.497, 2.509, 2.526, 2.542, 2.556, 2.564, 2.575, 2.584, 2.591, 2.595, 2.596, 2.597, 2.595, 2.592, 2.587, 2.577, 2.568, 2.554, 2.542, 2.527, 2.515, 2.504, 2.494, 2.491, 2.487, 2.487, 2.505,
1057+ 2.484, 2.476, 2.475, 2.478, 2.488, 2.498, 2.509, 2.526, 2.542, 2.555, 2.565, 2.576, 2.584, 2.589, 2.595, 2.598, 2.598, 2.597, 2.593, 2.587, 2.578, 2.569, 2.556, 2.543, 2.528, 2.515, 2.504, 2.494, 2.489, 2.485, 2.485, 2.501,
1058+ 2.484, 2.475, 2.475, 2.478, 2.489, 2.498, 2.509, 2.524, 2.539, 2.553, 2.565, 2.576, 2.584, 2.589, 2.594, 2.597, 2.597, 2.596, 2.593, 2.587, 2.577, 2.569, 2.555, 2.543, 2.529, 2.515, 2.503, 2.496, 2.491, 2.485, 2.486, 2.497,
1059+ 2.484, 2.474, 2.474, 2.479, 2.487, 2.497, 2.509, 2.523, 2.539, 2.551, 2.563, 2.574, 2.581, 2.587, 2.592, 2.595, 2.596, 2.595, 2.591, 2.584, 2.574, 2.567, 2.554, 2.541, 2.526, 2.514, 2.503, 2.495, 2.489, 2.485, 2.486, 2.497,
1060+ 2.484, 2.475, 2.475, 2.478, 2.485, 2.494, 2.507, 2.522, 2.535, 2.546, 2.559, 2.568, 2.579, 2.584, 2.589, 2.592, 2.593, 2.592, 2.588, 2.579, 2.571, 2.562, 2.551, 2.537, 2.524, 2.514, 2.501, 2.493, 2.489, 2.486, 2.487, 2.498,
1061+ 2.485, 2.476, 2.475, 2.477, 2.485, 2.491, 2.506, 2.519, 2.531, 2.544, 2.555, 2.563, 2.571, 2.581, 2.584, 2.589, 2.589, 2.588, 2.583, 2.576, 2.566, 2.555, 2.546, 2.534, 2.522, 2.511, 2.499, 2.491, 2.488, 2.486, 2.487, 2.502,
1062+ 2.487, 2.477, 2.475, 2.477, 2.483, 2.489, 2.503, 2.515, 2.525, 2.541, 2.551, 2.559, 2.567, 2.573, 2.579, 2.582, 2.583, 2.582, 2.576, 2.569, 2.562, 2.549, 2.542, 2.527, 2.518, 2.505, 2.497, 2.491, 2.489, 2.487, 2.487, 2.502,
1063+ 2.487, 2.478, 2.475, 2.477, 2.482, 2.489, 2.497, 2.512, 2.522, 2.536, 2.544, 2.551, 2.562, 2.566, 2.573, 2.578, 2.578, 2.575, 2.571, 2.564, 2.556, 2.548, 2.536, 2.523, 2.513, 2.503, 2.493, 2.489, 2.487, 2.486, 2.487, 2.502,
1064+ 2.488, 2.479, 2.477, 2.478, 2.482, 2.488, 2.496, 2.505, 2.516, 2.528, 2.538, 2.547, 2.553, 2.561, 2.565, 2.569, 2.569, 2.568, 2.564, 2.558, 2.549, 2.541, 2.531, 2.517, 2.509, 2.499, 2.492, 2.488, 2.486, 2.484, 2.486, 2.503,
1065+ 2.492, 2.482, 2.479, 2.479, 2.482, 2.487, 2.491, 2.501, 2.512, 2.523, 2.531, 2.541, 2.549, 2.552, 2.558, 2.561, 2.562, 2.559, 2.558, 2.552, 2.542, 2.535, 2.525, 2.514, 2.505, 2.497, 2.491, 2.486, 2.485, 2.484, 2.487, 2.503,
1066+ 2.495, 2.483, 2.479, 2.479, 2.482, 2.487, 2.491, 2.498, 2.508, 2.515, 2.526, 2.533, 2.541, 2.547, 2.551, 2.554, 2.555, 2.554, 2.552, 2.541, 2.537, 2.527, 2.519, 2.507, 2.502, 2.495, 2.488, 2.485, 2.484, 2.485, 2.488, 2.503,
1067+ 2.499, 2.485, 2.483, 2.481, 2.482, 2.486, 2.489, 2.494, 2.504, 2.511, 2.519, 2.527, 2.531, 2.539, 2.542, 2.546, 2.546, 2.545, 2.539, 2.535, 2.527, 2.522, 2.509, 2.505, 2.497, 2.491, 2.486, 2.485, 2.485, 2.487, 2.491, 2.506,
1068+ 2.499, 2.489, 2.483, 2.481, 2.481, 2.483, 2.488, 2.491, 2.499, 2.506, 2.512, 2.519, 2.524, 2.529, 2.535, 2.537, 2.536, 2.534, 2.532, 2.525, 2.522, 2.514, 2.506, 2.499, 2.492, 2.489, 2.485, 2.484, 2.485, 2.488, 2.492, 2.506,
1069+ 2.507, 2.494, 2.486, 2.483, 2.482, 2.482, 2.486, 2.488, 2.495, 2.501, 2.507, 2.511, 2.517, 2.519, 2.523, 2.525, 2.525, 2.523, 2.523, 2.521, 2.514, 2.506, 2.502, 2.496, 2.491, 2.488, 2.485, 2.485, 2.487, 2.489, 2.496, 2.516,
1070+ 2.511, 2.503, 2.489, 2.486, 2.485, 2.485, 2.485, 2.487, 2.489, 2.495, 2.501, 2.505, 2.509, 2.514, 2.517, 2.519, 2.518, 2.517, 2.515, 2.511, 2.505, 2.501, 2.495, 2.492, 2.488, 2.486, 2.485, 2.486, 2.488, 2.492, 2.499, 2.519,
1071+ 2.517, 2.505, 2.494, 2.489, 2.487, 2.486, 2.486, 2.486, 2.489, 2.491, 2.496, 2.499, 2.503, 2.506, 2.508, 2.509, 2.511, 2.509, 2.507, 2.503, 2.501, 2.496, 2.493, 2.489, 2.485, 2.485, 2.486, 2.487, 2.491, 2.495, 2.505, 2.526,
1072+ 2.526, 2.516, 2.504, 2.494, 2.493, 2.489, 2.489, 2.489, 2.489, 2.491, 2.496, 2.498, 2.501, 2.504, 2.506, 2.506, 2.506, 2.505, 2.503, 2.501, 2.499, 2.496, 2.494, 2.491, 2.487, 2.486, 2.489, 2.492, 2.497, 2.505, 2.517, 2.528,
1073+ 2.529, 2.526, 2.508, 2.502, 2.501, 2.498, 2.495, 2.495, 2.495, 2.495, 2.497, 2.499, 2.501, 2.503, 2.504, 2.506, 2.505, 2.505, 2.503, 2.501, 2.499, 2.496, 2.495, 2.494, 2.492, 2.494, 2.494, 2.498, 2.504, 2.513, 2.525, 2.536
1074+ ]
1075+ },
1076+ {
1077+ "ct": 5000,
1078+ "table":
1079+ [
1080+ 1.427, 1.425, 1.423, 1.422, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.422, 1.423, 1.424, 1.425, 1.426, 1.426, 1.426, 1.425, 1.425, 1.424, 1.422, 1.421, 1.421, 1.421, 1.421, 1.422, 1.422, 1.422, 1.424, 1.424, 1.426, 1.428,
1081+ 1.426, 1.424, 1.422, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.422, 1.423, 1.424, 1.425, 1.426, 1.427, 1.427, 1.427, 1.426, 1.425, 1.424, 1.422, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.422, 1.424, 1.427,
1082+ 1.423, 1.421, 1.421, 1.419, 1.419, 1.418, 1.419, 1.419, 1.421, 1.423, 1.425, 1.426, 1.428, 1.429, 1.431, 1.431, 1.431, 1.431, 1.429, 1.426, 1.424, 1.422, 1.421, 1.421, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.422, 1.425,
1083+ 1.422, 1.419, 1.419, 1.419, 1.418, 1.418, 1.419, 1.421, 1.422, 1.426, 1.428, 1.429, 1.433, 1.434, 1.436, 1.436, 1.436, 1.434, 1.432, 1.429, 1.426, 1.424, 1.423, 1.422, 1.421, 1.419, 1.419, 1.419, 1.419, 1.419, 1.421, 1.425,
1084+ 1.422, 1.419, 1.419, 1.418, 1.418, 1.419, 1.419, 1.422, 1.425, 1.429, 1.432, 1.435, 1.436, 1.438, 1.439, 1.439, 1.441, 1.439, 1.435, 1.433, 1.429, 1.427, 1.425, 1.423, 1.422, 1.419, 1.419, 1.418, 1.418, 1.418, 1.419, 1.425,
1085+ 1.422, 1.419, 1.418, 1.418, 1.418, 1.419, 1.421, 1.424, 1.428, 1.432, 1.436, 1.437, 1.439, 1.442, 1.443, 1.445, 1.444, 1.443, 1.441, 1.436, 1.434, 1.431, 1.427, 1.425, 1.422, 1.421, 1.419, 1.418, 1.418, 1.418, 1.419, 1.424,
1086+ 1.422, 1.418, 1.417, 1.418, 1.419, 1.421, 1.423, 1.427, 1.431, 1.436, 1.438, 1.442, 1.444, 1.446, 1.448, 1.449, 1.448, 1.446, 1.445, 1.441, 1.436, 1.434, 1.429, 1.427, 1.423, 1.421, 1.419, 1.418, 1.418, 1.418, 1.418, 1.423,
1087+ 1.421, 1.418, 1.418, 1.418, 1.419, 1.421, 1.424, 1.429, 1.434, 1.438, 1.442, 1.445, 1.447, 1.449, 1.451, 1.452, 1.452, 1.449, 1.447, 1.445, 1.441, 1.436, 1.433, 1.429, 1.425, 1.422, 1.419, 1.419, 1.418, 1.417, 1.418, 1.423,
1088+ 1.421, 1.418, 1.418, 1.419, 1.419, 1.423, 1.426, 1.432, 1.436, 1.441, 1.445, 1.448, 1.449, 1.452, 1.453, 1.454, 1.454, 1.453, 1.451, 1.447, 1.444, 1.439, 1.433, 1.431, 1.427, 1.422, 1.421, 1.419, 1.418, 1.417, 1.418, 1.423,
1089+ 1.421, 1.418, 1.418, 1.419, 1.421, 1.423, 1.428, 1.433, 1.439, 1.443, 1.448, 1.449, 1.453, 1.454, 1.455, 1.456, 1.456, 1.454, 1.453, 1.449, 1.446, 1.441, 1.437, 1.433, 1.429, 1.423, 1.421, 1.419, 1.418, 1.416, 1.417, 1.423,
1090+ 1.421, 1.417, 1.417, 1.419, 1.422, 1.424, 1.429, 1.435, 1.441, 1.444, 1.449, 1.453, 1.454, 1.456, 1.458, 1.459, 1.458, 1.456, 1.454, 1.451, 1.448, 1.442, 1.439, 1.435, 1.429, 1.426, 1.421, 1.419, 1.418, 1.416, 1.417, 1.422,
1091+ 1.419, 1.418, 1.417, 1.419, 1.422, 1.425, 1.429, 1.436, 1.442, 1.446, 1.451, 1.454, 1.456, 1.458, 1.461, 1.461, 1.461, 1.459, 1.456, 1.453, 1.451, 1.446, 1.441, 1.436, 1.431, 1.427, 1.422, 1.419, 1.418, 1.416, 1.417, 1.422,
1092+ 1.419, 1.418, 1.418, 1.421, 1.423, 1.426, 1.431, 1.437, 1.444, 1.449, 1.452, 1.456, 1.458, 1.461, 1.462, 1.463, 1.463, 1.461, 1.458, 1.454, 1.452, 1.447, 1.443, 1.438, 1.432, 1.428, 1.423, 1.421, 1.419, 1.417, 1.417, 1.421,
1093+ 1.419, 1.418, 1.417, 1.421, 1.423, 1.428, 1.432, 1.439, 1.445, 1.451, 1.453, 1.457, 1.459, 1.462, 1.464, 1.465, 1.465, 1.463, 1.461, 1.457, 1.453, 1.449, 1.444, 1.441, 1.432, 1.429, 1.425, 1.421, 1.419, 1.417, 1.418, 1.422,
1094+ 1.418, 1.417, 1.417, 1.419, 1.423, 1.428, 1.433, 1.439, 1.446, 1.451, 1.453, 1.457, 1.461, 1.464, 1.465, 1.466, 1.466, 1.464, 1.462, 1.459, 1.454, 1.451, 1.445, 1.441, 1.436, 1.429, 1.425, 1.422, 1.421, 1.417, 1.417, 1.423,
1095+ 1.417, 1.416, 1.416, 1.419, 1.423, 1.428, 1.433, 1.441, 1.446, 1.451, 1.454, 1.458, 1.461, 1.463, 1.465, 1.466, 1.466, 1.465, 1.463, 1.459, 1.454, 1.451, 1.446, 1.441, 1.437, 1.431, 1.426, 1.422, 1.421, 1.418, 1.418, 1.423,
1096+ 1.417, 1.416, 1.417, 1.418, 1.423, 1.428, 1.433, 1.439, 1.445, 1.451, 1.453, 1.457, 1.461, 1.463, 1.465, 1.466, 1.466, 1.464, 1.462, 1.459, 1.454, 1.451, 1.446, 1.441, 1.437, 1.431, 1.426, 1.422, 1.419, 1.417, 1.417, 1.422,
1097+ 1.417, 1.416, 1.416, 1.418, 1.422, 1.428, 1.433, 1.438, 1.444, 1.449, 1.453, 1.456, 1.459, 1.462, 1.464, 1.465, 1.465, 1.463, 1.461, 1.458, 1.453, 1.449, 1.445, 1.441, 1.435, 1.429, 1.426, 1.421, 1.419, 1.417, 1.417, 1.422,
1098+ 1.418, 1.416, 1.416, 1.418, 1.421, 1.426, 1.432, 1.438, 1.443, 1.447, 1.451, 1.454, 1.458, 1.459, 1.462, 1.463, 1.463, 1.462, 1.459, 1.455, 1.451, 1.447, 1.443, 1.439, 1.434, 1.429, 1.425, 1.421, 1.419, 1.417, 1.417, 1.422,
1099+ 1.418, 1.416, 1.416, 1.418, 1.421, 1.425, 1.431, 1.435, 1.442, 1.445, 1.449, 1.452, 1.455, 1.458, 1.458, 1.461, 1.461, 1.459, 1.456, 1.453, 1.449, 1.445, 1.442, 1.436, 1.433, 1.427, 1.425, 1.421, 1.419, 1.418, 1.418, 1.422,
1100+ 1.419, 1.416, 1.415, 1.417, 1.419, 1.424, 1.429, 1.434, 1.439, 1.443, 1.446, 1.449, 1.452, 1.454, 1.456, 1.457, 1.457, 1.456, 1.453, 1.451, 1.447, 1.443, 1.441, 1.435, 1.431, 1.426, 1.424, 1.421, 1.419, 1.418, 1.418, 1.422,
1101+ 1.419, 1.416, 1.415, 1.416, 1.419, 1.422, 1.426, 1.433, 1.437, 1.441, 1.444, 1.447, 1.449, 1.452, 1.453, 1.455, 1.455, 1.453, 1.451, 1.447, 1.444, 1.441, 1.438, 1.432, 1.428, 1.424, 1.421, 1.419, 1.418, 1.417, 1.417, 1.421,
1102+ 1.419, 1.416, 1.415, 1.416, 1.418, 1.421, 1.425, 1.431, 1.435, 1.438, 1.442, 1.445, 1.446, 1.449, 1.451, 1.451, 1.451, 1.451, 1.447, 1.445, 1.443, 1.439, 1.434, 1.431, 1.427, 1.422, 1.421, 1.418, 1.417, 1.417, 1.417, 1.421,
1103+ 1.418, 1.416, 1.415, 1.416, 1.417, 1.421, 1.423, 1.428, 1.433, 1.437, 1.439, 1.442, 1.444, 1.446, 1.448, 1.449, 1.449, 1.447, 1.445, 1.443, 1.439, 1.437, 1.432, 1.429, 1.425, 1.422, 1.419, 1.417, 1.417, 1.416, 1.416, 1.419,
1104+ 1.418, 1.416, 1.416, 1.416, 1.417, 1.421, 1.422, 1.426, 1.429, 1.433, 1.436, 1.438, 1.441, 1.443, 1.445, 1.446, 1.445, 1.445, 1.443, 1.439, 1.437, 1.434, 1.431, 1.427, 1.424, 1.421, 1.419, 1.417, 1.417, 1.416, 1.416, 1.421,
1105+ 1.419, 1.417, 1.416, 1.416, 1.417, 1.421, 1.422, 1.424, 1.427, 1.429, 1.432, 1.436, 1.437, 1.439, 1.442, 1.443, 1.443, 1.441, 1.439, 1.437, 1.434, 1.431, 1.429, 1.425, 1.422, 1.421, 1.419, 1.417, 1.416, 1.416, 1.417, 1.419,
1106+ 1.421, 1.418, 1.416, 1.417, 1.418, 1.421, 1.421, 1.423, 1.424, 1.427, 1.429, 1.432, 1.434, 1.436, 1.438, 1.439, 1.439, 1.438, 1.436, 1.434, 1.431, 1.429, 1.426, 1.423, 1.422, 1.421, 1.418, 1.417, 1.417, 1.417, 1.417, 1.421,
1107+ 1.423, 1.419, 1.418, 1.418, 1.419, 1.419, 1.421, 1.422, 1.423, 1.424, 1.427, 1.429, 1.432, 1.432, 1.434, 1.435, 1.435, 1.434, 1.433, 1.431, 1.429, 1.426, 1.424, 1.422, 1.421, 1.419, 1.418, 1.417, 1.417, 1.417, 1.418, 1.421,
1108+ 1.425, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.421, 1.421, 1.423, 1.424, 1.426, 1.428, 1.431, 1.431, 1.432, 1.432, 1.431, 1.431, 1.428, 1.425, 1.425, 1.422, 1.421, 1.419, 1.419, 1.418, 1.418, 1.418, 1.418, 1.419, 1.425,
1109+ 1.426, 1.422, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.421, 1.422, 1.424, 1.426, 1.427, 1.428, 1.429, 1.429, 1.429, 1.427, 1.424, 1.423, 1.422, 1.421, 1.419, 1.418, 1.418, 1.418, 1.418, 1.418, 1.418, 1.419, 1.426,
1110+ 1.428, 1.425, 1.421, 1.421, 1.421, 1.421, 1.421, 1.419, 1.419, 1.421, 1.422, 1.423, 1.424, 1.426, 1.426, 1.426, 1.426, 1.425, 1.424, 1.424, 1.422, 1.422, 1.421, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.423, 1.426,
1111+ 1.429, 1.427, 1.424, 1.422, 1.422, 1.422, 1.421, 1.421, 1.421, 1.422, 1.422, 1.422, 1.424, 1.425, 1.426, 1.426, 1.425, 1.425, 1.424, 1.423, 1.422, 1.422, 1.421, 1.421, 1.421, 1.421, 1.419, 1.419, 1.421, 1.422, 1.424, 1.426
1112+ ]
1113+ }
1114+ ],
1115+ "luminance_lut":
1116+ [
1117+ 2.964, 2.872, 2.691, 2.544, 2.416, 2.302, 2.196, 2.093, 2.006, 1.928, 1.852, 1.801, 1.769, 1.752, 1.743, 1.743, 1.743, 1.746, 1.759, 1.784, 1.824, 1.888, 1.968, 2.052, 2.149, 2.253, 2.359, 2.483, 2.626, 2.785, 2.988, 3.051,
1118+ 2.872, 2.748, 2.583, 2.442, 2.313, 2.201, 2.104, 2.012, 1.928, 1.852, 1.791, 1.742, 1.701, 1.671, 1.651, 1.643, 1.643, 1.659, 1.685, 1.721, 1.768, 1.824, 1.888, 1.971, 2.068, 2.152, 2.259, 2.381, 2.514, 2.669, 2.853, 2.988,
1119+ 2.761, 2.655, 2.497, 2.356, 2.226, 2.114, 2.012, 1.928, 1.845, 1.769, 1.707, 1.653, 1.612, 1.583, 1.562, 1.556, 1.556, 1.572, 1.599, 1.635, 1.681, 1.742, 1.806, 1.888, 1.971, 2.068, 2.175, 2.292, 2.431, 2.576, 2.747, 2.853,
1120+ 2.679, 2.571, 2.415, 2.275, 2.151, 2.035, 1.936, 1.845, 1.769, 1.689, 1.623, 1.572, 1.532, 1.501, 1.481, 1.473, 1.473, 1.492, 1.517, 1.556, 1.599, 1.659, 1.731, 1.806, 1.895, 1.992, 2.101, 2.218, 2.349, 2.493, 2.664, 2.753,
1121+ 2.609, 2.492, 2.339, 2.204, 2.079, 1.971, 1.865, 1.772, 1.689, 1.619, 1.551, 1.499, 1.457, 1.423, 1.405, 1.397, 1.397, 1.411, 1.438, 1.477, 1.525, 1.585, 1.659, 1.731, 1.823, 1.922, 2.027, 2.148, 2.275, 2.422, 2.586, 2.683,
1122+ 2.545, 2.426, 2.279, 2.139, 2.014, 1.903, 1.799, 1.702, 1.619, 1.551, 1.482, 1.427, 1.385, 1.353, 1.331, 1.325, 1.325, 1.338, 1.364, 1.403, 1.455, 1.522, 1.585, 1.665, 1.757, 1.858, 1.963, 2.081, 2.207, 2.356, 2.518, 2.615,
1123+ 2.489, 2.367, 2.218, 2.079, 1.956, 1.844, 1.739, 1.642, 1.559, 1.482, 1.426, 1.363, 1.321, 1.287, 1.266, 1.259, 1.259, 1.274, 1.301, 1.339, 1.395, 1.455, 1.523, 1.606, 1.697, 1.797, 1.905, 2.024, 2.154, 2.296, 2.455, 2.563,
1124+ 2.439, 2.316, 2.164, 2.028, 1.906, 1.793, 1.686, 1.589, 1.505, 1.427, 1.363, 1.308, 1.261, 1.229, 1.207, 1.202, 1.202, 1.215, 1.242, 1.283, 1.339, 1.395, 1.467, 1.551, 1.639, 1.742, 1.851, 1.972, 2.104, 2.243, 2.402, 2.515,
1125+ 2.398, 2.262, 2.116, 1.982, 1.861, 1.745, 1.639, 1.541, 1.456, 1.377, 1.308, 1.261, 1.208, 1.177, 1.157, 1.153, 1.153, 1.167, 1.191, 1.233, 1.283, 1.343, 1.418, 1.499, 1.591, 1.696, 1.804, 1.928, 2.057, 2.194, 2.352, 2.471,
1126+ 2.363, 2.222, 2.078, 1.942, 1.818, 1.706, 1.597, 1.501, 1.412, 1.334, 1.266, 1.208, 1.171, 1.134, 1.113, 1.109, 1.109, 1.123, 1.149, 1.191, 1.233, 1.296, 1.371, 1.457, 1.546, 1.654, 1.768, 1.886, 2.014, 2.155, 2.312, 2.436,
1127+ 2.334, 2.188, 2.042, 1.909, 1.783, 1.668, 1.561, 1.464, 1.374, 1.295, 1.228, 1.171, 1.134, 1.098, 1.076, 1.072, 1.072, 1.087, 1.119, 1.149, 1.196, 1.259, 1.332, 1.419, 1.514, 1.616, 1.728, 1.849, 1.981, 2.123, 2.276, 2.406,
1128+ 2.306, 2.159, 2.015, 1.881, 1.753, 1.639, 1.533, 1.434, 1.341, 1.263, 1.195, 1.139, 1.098, 1.074, 1.046, 1.044, 1.045, 1.059, 1.087, 1.119, 1.165, 1.227, 1.302, 1.387, 1.482, 1.586, 1.698, 1.819, 1.953, 2.093, 2.248, 2.383,
1129+ 2.291, 2.141, 1.991, 1.856, 1.732, 1.615, 1.508, 1.409, 1.318, 1.238, 1.171, 1.114, 1.074, 1.046, 1.027, 1.023, 1.025, 1.043, 1.059, 1.095, 1.142, 1.203, 1.278, 1.362, 1.456, 1.559, 1.673, 1.796, 1.928, 2.071, 2.225, 2.359,
1130+ 2.279, 2.118, 1.972, 1.839, 1.715, 1.599, 1.488, 1.389, 1.298, 1.219, 1.153, 1.097, 1.057, 1.027, 1.018, 1.009, 1.013, 1.025, 1.044, 1.078, 1.125, 1.186, 1.258, 1.342, 1.438, 1.541, 1.655, 1.779, 1.909, 2.053, 2.211, 2.351,
1131+ 2.274, 2.108, 1.963, 1.831, 1.706, 1.588, 1.477, 1.376, 1.288, 1.207, 1.139, 1.086, 1.049, 1.021, 1.005, 1.002, 1.004, 1.013, 1.035, 1.069, 1.116, 1.176, 1.246, 1.331, 1.427, 1.531, 1.645, 1.767, 1.899, 2.045, 2.197, 2.351,
1132+ 2.274, 2.106, 1.961, 1.827, 1.701, 1.585, 1.474, 1.374, 1.285, 1.206, 1.139, 1.085, 1.047, 1.019, 1.003, 1.001, 1.001, 1.012, 1.033, 1.067, 1.113, 1.173, 1.245, 1.329, 1.423, 1.529, 1.642, 1.765, 1.897, 2.042, 2.196, 2.349,
1133+ 2.274, 2.108, 1.961, 1.827, 1.701, 1.585, 1.474, 1.374, 1.285, 1.206, 1.139, 1.085, 1.047, 1.021, 1.005, 1.001, 1.004, 1.012, 1.033, 1.068, 1.113, 1.173, 1.246, 1.329, 1.423, 1.529, 1.642, 1.766, 1.897, 2.042, 2.198, 2.349,
1134+ 2.278, 2.116, 1.968, 1.833, 1.707, 1.591, 1.482, 1.382, 1.291, 1.214, 1.147, 1.091, 1.055, 1.028, 1.016, 1.006, 1.012, 1.018, 1.039, 1.074, 1.121, 1.182, 1.255, 1.339, 1.433, 1.538, 1.651, 1.777, 1.911, 2.051, 2.207, 2.351,
1135+ 2.283, 2.127, 1.979, 1.846, 1.723, 1.605, 1.496, 1.397, 1.309, 1.229, 1.162, 1.108, 1.067, 1.041, 1.027, 1.018, 1.018, 1.036, 1.051, 1.087, 1.136, 1.197, 1.269, 1.354, 1.448, 1.554, 1.664, 1.789, 1.922, 2.065, 2.222, 2.365,
1136+ 2.298, 2.145, 1.999, 1.865, 1.744, 1.627, 1.518, 1.421, 1.331, 1.251, 1.183, 1.129, 1.087, 1.065, 1.041, 1.036, 1.036, 1.051, 1.074, 1.107, 1.158, 1.219, 1.292, 1.378, 1.471, 1.575, 1.687, 1.809, 1.942, 2.085, 2.239, 2.378,
1137+ 2.315, 2.174, 2.024, 1.893, 1.768, 1.652, 1.543, 1.445, 1.355, 1.278, 1.211, 1.155, 1.116, 1.087, 1.066, 1.061, 1.061, 1.074, 1.105, 1.137, 1.186, 1.248, 1.322, 1.405, 1.498, 1.602, 1.713, 1.835, 1.965, 2.109, 2.267, 2.399,
1138+ 2.341, 2.206, 2.057, 1.923, 1.799, 1.685, 1.576, 1.479, 1.392, 1.312, 1.244, 1.187, 1.154, 1.116, 1.096, 1.092, 1.092, 1.106, 1.137, 1.173, 1.221, 1.282, 1.356, 1.439, 1.532, 1.635, 1.747, 1.869, 1.997, 2.141, 2.298, 2.425,
1139+ 2.375, 2.244, 2.098, 1.965, 1.839, 1.722, 1.614, 1.519, 1.434, 1.355, 1.288, 1.234, 1.187, 1.155, 1.136, 1.132, 1.132, 1.147, 1.173, 1.219, 1.263, 1.324, 1.398, 1.479, 1.571, 1.674, 1.784, 1.904, 2.035, 2.177, 2.336, 2.455,
1140+ 2.414, 2.286, 2.144, 2.011, 1.883, 1.767, 1.661, 1.566, 1.479, 1.401, 1.335, 1.286, 1.234, 1.202, 1.183, 1.178, 1.178, 1.195, 1.222, 1.263, 1.313, 1.372, 1.444, 1.526, 1.618, 1.718, 1.827, 1.951, 2.081, 2.221, 2.379, 2.498,
1141+ 2.463, 2.339, 2.191, 2.056, 1.931, 1.819, 1.712, 1.616, 1.529, 1.452, 1.392, 1.335, 1.286, 1.254, 1.235, 1.232, 1.232, 1.248, 1.275, 1.313, 1.371, 1.425, 1.495, 1.576, 1.671, 1.768, 1.877, 1.999, 2.128, 2.269, 2.428, 2.541,
1142+ 2.514, 2.396, 2.247, 2.112, 1.988, 1.873, 1.766, 1.671, 1.588, 1.513, 1.452, 1.392, 1.348, 1.316, 1.298, 1.292, 1.292, 1.307, 1.336, 1.373, 1.425, 1.486, 1.552, 1.636, 1.728, 1.826, 1.933, 2.051, 2.183, 2.327, 2.488, 2.587,
1143+ 2.573, 2.459, 2.307, 2.171, 2.049, 1.931, 1.828, 1.731, 1.649, 1.582, 1.513, 1.459, 1.415, 1.381, 1.363, 1.358, 1.358, 1.373, 1.399, 1.439, 1.486, 1.552, 1.617, 1.696, 1.787, 1.888, 1.995, 2.112, 2.244, 2.391, 2.552, 2.652,
1144+ 2.635, 2.525, 2.377, 2.239, 2.111, 1.996, 1.895, 1.799, 1.719, 1.649, 1.582, 1.531, 1.486, 1.454, 1.434, 1.429, 1.429, 1.444, 1.469, 1.507, 1.555, 1.617, 1.692, 1.766, 1.854, 1.954, 2.065, 2.181, 2.313, 2.459, 2.623, 2.722,
1145+ 2.714, 2.604, 2.452, 2.313, 2.188, 2.071, 1.966, 1.876, 1.799, 1.719, 1.656, 1.604, 1.562, 1.529, 1.511, 1.504, 1.504, 1.519, 1.544, 1.583, 1.632, 1.692, 1.766, 1.839, 1.929, 2.029, 2.138, 2.259, 2.391, 2.539, 2.712, 2.811,
1146+ 2.809, 2.698, 2.537, 2.396, 2.277, 2.163, 2.053, 1.965, 1.876, 1.799, 1.741, 1.688, 1.643, 1.613, 1.592, 1.586, 1.586, 1.601, 1.628, 1.666, 1.715, 1.773, 1.839, 1.927, 2.012, 2.111, 2.222, 2.342, 2.477, 2.625, 2.811, 2.926,
1147+ 2.921, 2.809, 2.637, 2.493, 2.376, 2.256, 2.149, 2.053, 1.966, 1.893, 1.832, 1.778, 1.736, 1.708, 1.687, 1.681, 1.681, 1.696, 1.721, 1.757, 1.806, 1.864, 1.929, 2.012, 2.106, 2.199, 2.313, 2.437, 2.577, 2.731, 2.926, 3.051,
1148+ 3.029, 2.921, 2.745, 2.591, 2.474, 2.355, 2.246, 2.146, 2.049, 1.966, 1.893, 1.832, 1.799, 1.776, 1.768, 1.768, 1.768, 1.771, 1.783, 1.809, 1.864, 1.929, 2.012, 2.097, 2.195, 2.297, 2.412, 2.539, 2.682, 2.846, 3.051, 3.123
1149+ ],
1150+ "sigma": 0.00463,
1151+ "sigma_Cb": 0.00149
1152+ }
1153+ },
1154+ {
1155+ "rpi.contrast":
1156+ {
1157+ "ce_enable": 1,
1158+ "lo_max": 1000,
1159+ "gamma_curve":
1160+ [
1161+ 0, 0,
1162+ 1024, 5040,
1163+ 2048, 9338,
1164+ 3072, 12356,
1165+ 4096, 15312,
1166+ 5120, 18051,
1167+ 6144, 20790,
1168+ 7168, 23193,
1169+ 8192, 25744,
1170+ 9216, 27942,
1171+ 10240, 30035,
1172+ 11264, 32005,
1173+ 12288, 33975,
1174+ 13312, 35815,
1175+ 14336, 37600,
1176+ 15360, 39168,
1177+ 16384, 40642,
1178+ 18432, 43379,
1179+ 20480, 45749,
1180+ 22528, 47753,
1181+ 24576, 49621,
1182+ 26624, 51253,
1183+ 28672, 52698,
1184+ 30720, 53796,
1185+ 32768, 54876,
1186+ 36864, 57012,
1187+ 40960, 58656,
1188+ 45056, 59954,
1189+ 49152, 61183,
1190+ 53248, 62355,
1191+ 57344, 63419,
1192+ 61440, 64476,
1193+ 65535, 65535
1194+ ]
1195+ }
1196+ },
1197+ {
1198+ "rpi.ccm":
1199+ {
1200+ "ccms": [
1201+ {
1202+ "ct": 2860,
1203+ "ccm":
1204+ [
1205+ 2.12089, -0.52461, -0.59629,
1206+ -0.85342, 2.80445, -0.95103,
1207+ -0.26897, -1.14788, 2.41685
1208+ ]
1209+ },
1210+ {
1211+ "ct": 2960,
1212+ "ccm":
1213+ [
1214+ 2.26962, -0.54174, -0.72789,
1215+ -0.77008, 2.60271, -0.83262,
1216+ -0.26036, -1.51254, 2.77289
1217+ ]
1218+ },
1219+ {
1220+ "ct": 3603,
1221+ "ccm":
1222+ [
1223+ 2.18644, -0.66148, -0.52496,
1224+ -0.77828, 2.69474, -0.91645,
1225+ -0.25239, -0.83059, 2.08298
1226+ ]
1227+ },
1228+ {
1229+ "ct": 4650,
1230+ "ccm":
1231+ [
1232+ 2.18174, -0.70887, -0.47287,
1233+ -0.70196, 2.76426, -1.06231,
1234+ -0.25157, -0.71978, 1.97135
1235+ ]
1236+ },
1237+ {
1238+ "ct": 5858,
1239+ "ccm":
1240+ [
1241+ 2.32392, -0.88421, -0.43971,
1242+ -0.63821, 2.58348, -0.94527,
1243+ -0.28541, -0.54112, 1.82653
1244+ ]
1245+ },
1246+ {
1247+ "ct": 7580,
1248+ "ccm":
1249+ [
1250+ 2.21175, -0.53242, -0.67933,
1251+ -0.57875, 3.07922, -1.50047,
1252+ -0.27709, -0.73338, 2.01048
1253+ ]
1254+ }
1255+ ]
1256+ }
1257+ },
1258+ {
1259+ "rpi.sharpen":
1260+ {
1261+ "threshold": 0.25,
1262+ "limit": 1.0,
1263+ "strength": 1.0
1264+ }
1265+ },
1266+ {
1267+ "rpi.hdr":
1268+ {
1269+ "Off":
1270+ {
1271+ "cadence": [ 0 ]
1272+ },
1273+ "MultiExposureUnmerged":
1274+ {
1275+ "cadence": [ 1, 2 ],
1276+ "channel_map":
1277+ {
1278+ "short": 1,
1279+ "long": 2
1280+ }
1281+ },
1282+ "SingleExposure":
1283+ {
1284+ "cadence": [ 1 ],
1285+ "channel_map":
1286+ {
1287+ "short": 1
1288+ },
1289+ "spatial_gain": 2.0,
1290+ "tonemap_enable": 1
1291+ },
1292+ "MultiExposure":
1293+ {
1294+ "cadence": [ 1, 2 ],
1295+ "channel_map":
1296+ {
1297+ "short": 1,
1298+ "long": 2
1299+ },
1300+ "stitch_enable": 1,
1301+ "spatial_gain": 2.0,
1302+ "tonemap_enable": 1
1303+ },
1304+ "Night":
1305+ {
1306+ "cadence": [ 3 ],
1307+ "channel_map":
1308+ {
1309+ "short": 3
1310+ },
1311+ "tonemap_enable": 1,
1312+ "tonemap":
1313+ [
1314+ 0, 0,
1315+ 5000, 20000,
1316+ 10000, 30000,
1317+ 20000, 47000,
1318+ 30000, 55000,
1319+ 65535, 65535
1320+ ]
1321+ }
1322+ }
1323+ }
1324+ ]
1325+}
1326\ No newline at end of file
1327--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1328+++ b/src/ipa/rpi/pisp/data/imx219_noir.json 2024-11-25 21:08:37.638494238 +0530
1329@@ -0,0 +1,1112 @@
1330+{
1331+ "version": 2.0,
1332+ "target": "pisp",
1333+ "algorithms": [
1334+ {
1335+ "rpi.black_level":
1336+ {
1337+ "black_level": 4096
1338+ }
1339+ },
1340+ {
1341+ "rpi.lux":
1342+ {
1343+ "reference_shutter_speed": 21965,
1344+ "reference_gain": 1.0,
1345+ "reference_aperture": 1.0,
1346+ "reference_lux": 800,
1347+ "reference_Y": 11460
1348+ }
1349+ },
1350+ {
1351+ "rpi.dpc":
1352+ {
1353+ "strength": 1
1354+ }
1355+ },
1356+ {
1357+ "rpi.noise":
1358+ {
1359+ "reference_constant": 0,
1360+ "reference_slope": 3.661
1361+ }
1362+ },
1363+ {
1364+ "rpi.geq":
1365+ {
1366+ "offset": 239,
1367+ "slope": 0.00766
1368+ }
1369+ },
1370+ {
1371+ "rpi.denoise":
1372+ {
1373+ "normal":
1374+ {
1375+ "sdn":
1376+ {
1377+ "deviation": 1.6,
1378+ "strength": 0.5,
1379+ "deviation2": 3.2,
1380+ "deviation_no_tdn": 3.2,
1381+ "strength_no_tdn": 0.75
1382+ },
1383+ "cdn":
1384+ {
1385+ "deviation": 200,
1386+ "strength": 0.3
1387+ },
1388+ "tdn":
1389+ {
1390+ "deviation": 0.8,
1391+ "threshold": 0.05
1392+ }
1393+ },
1394+ "hdr":
1395+ {
1396+ "sdn":
1397+ {
1398+ "deviation": 1.6,
1399+ "strength": 0.5,
1400+ "deviation2": 3.2,
1401+ "deviation_no_tdn": 3.2,
1402+ "strength_no_tdn": 0.75
1403+ },
1404+ "cdn":
1405+ {
1406+ "deviation": 200,
1407+ "strength": 0.3
1408+ },
1409+ "tdn":
1410+ {
1411+ "deviation": 1.3,
1412+ "threshold": 0.1
1413+ }
1414+ },
1415+ "night":
1416+ {
1417+ "sdn":
1418+ {
1419+ "deviation": 1.6,
1420+ "strength": 0.5,
1421+ "deviation2": 3.2,
1422+ "deviation_no_tdn": 3.2,
1423+ "strength_no_tdn": 0.75
1424+ },
1425+ "cdn":
1426+ {
1427+ "deviation": 200,
1428+ "strength": 0.3
1429+ },
1430+ "tdn":
1431+ {
1432+ "deviation": 1.3,
1433+ "threshold": 0.1
1434+ }
1435+ }
1436+ }
1437+ },
1438+ {
1439+ "rpi.awb":
1440+ {
1441+ "bayes": 0
1442+ }
1443+ },
1444+ {
1445+ "rpi.agc":
1446+ {
1447+ "channels": [
1448+ {
1449+ "comment": "Channel 0 is normal AGC",
1450+ "metering_modes":
1451+ {
1452+ "centre-weighted":
1453+ {
1454+ "weights":
1455+ [
1456+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1457+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1458+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1459+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1460+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1461+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1462+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1463+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
1464+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1465+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1466+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1467+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1468+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1469+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1470+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
1471+ ]
1472+ },
1473+ "spot":
1474+ {
1475+ "weights":
1476+ [
1477+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1478+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1479+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1480+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1481+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1482+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1483+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1484+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
1485+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1486+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1487+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1488+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1490+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1491+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1492+ ]
1493+ },
1494+ "matrix":
1495+ {
1496+ "weights":
1497+ [
1498+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1499+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1500+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1501+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1502+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1503+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1504+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1505+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1506+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1507+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1508+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1509+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1510+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1511+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1512+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1513+ ]
1514+ }
1515+ },
1516+ "exposure_modes":
1517+ {
1518+ "normal":
1519+ {
1520+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
1521+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
1522+ },
1523+ "short":
1524+ {
1525+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
1526+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
1527+ },
1528+ "long":
1529+ {
1530+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
1531+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
1532+ }
1533+ },
1534+ "constraint_modes":
1535+ {
1536+ "normal": [
1537+ {
1538+ "bound": "LOWER",
1539+ "q_lo": 0.98,
1540+ "q_hi": 1.0,
1541+ "y_target":
1542+ [
1543+ 0, 0.5,
1544+ 1000, 0.5
1545+ ]
1546+ }
1547+ ],
1548+ "highlight": [
1549+ {
1550+ "bound": "LOWER",
1551+ "q_lo": 0.98,
1552+ "q_hi": 1.0,
1553+ "y_target":
1554+ [
1555+ 0, 0.5,
1556+ 1000, 0.5
1557+ ]
1558+ },
1559+ {
1560+ "bound": "UPPER",
1561+ "q_lo": 0.98,
1562+ "q_hi": 1.0,
1563+ "y_target":
1564+ [
1565+ 0, 0.8,
1566+ 1000, 0.8
1567+ ]
1568+ }
1569+ ],
1570+ "shadows": [
1571+ {
1572+ "bound": "LOWER",
1573+ "q_lo": 0.0,
1574+ "q_hi": 0.5,
1575+ "y_target":
1576+ [
1577+ 0, 0.17,
1578+ 1000, 0.17
1579+ ]
1580+ }
1581+ ]
1582+ },
1583+ "y_target":
1584+ [
1585+ 0, 0.16,
1586+ 1000, 0.165,
1587+ 10000, 0.17
1588+ ]
1589+ },
1590+ {
1591+ "comment": "Channel 1 is the HDR short channel",
1592+ "desaturate": 0,
1593+ "metering_modes":
1594+ {
1595+ "centre-weighted":
1596+ {
1597+ "weights":
1598+ [
1599+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1600+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1601+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1602+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1603+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1604+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1605+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1606+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
1607+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1608+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1609+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1610+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1611+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1612+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1613+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
1614+ ]
1615+ },
1616+ "spot":
1617+ {
1618+ "weights":
1619+ [
1620+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1621+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1622+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1623+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1624+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1625+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1626+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1627+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
1628+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1629+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1630+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1631+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1632+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1633+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1634+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1635+ ]
1636+ },
1637+ "matrix":
1638+ {
1639+ "weights":
1640+ [
1641+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1642+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1643+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1644+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1645+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1646+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1647+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1648+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1649+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1650+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1651+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1652+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1653+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1654+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1655+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1656+ ]
1657+ }
1658+ },
1659+ "exposure_modes":
1660+ {
1661+ "normal":
1662+ {
1663+ "shutter": [ 100, 15000, 30000 ],
1664+ "gain": [ 1.0, 1.0, 2.0 ]
1665+ },
1666+ "short":
1667+ {
1668+ "shutter": [ 100, 15000, 30000 ],
1669+ "gain": [ 1.0, 2.0, 2.0 ]
1670+ },
1671+ "long":
1672+ {
1673+ "shutter": [ 100, 15000, 60000 ],
1674+ "gain": [ 1.0, 1.0, 1.0 ]
1675+ }
1676+ },
1677+ "constraint_modes":
1678+ {
1679+ "normal": [
1680+ {
1681+ "bound": "LOWER",
1682+ "q_lo": 0.0,
1683+ "q_hi": 0.2,
1684+ "y_target":
1685+ [
1686+ 0, 0.02,
1687+ 1000, 0.02
1688+ ]
1689+ },
1690+ {
1691+ "bound": "UPPER",
1692+ "q_lo": 0.98,
1693+ "q_hi": 1.0,
1694+ "y_target":
1695+ [
1696+ 0, 0.7,
1697+ 1000, 0.7
1698+ ]
1699+ },
1700+ {
1701+ "bound": "LOWER",
1702+ "q_lo": 0.0,
1703+ "q_hi": 0.2,
1704+ "y_target":
1705+ [
1706+ 0, 0.01,
1707+ 1000, 0.01
1708+ ]
1709+ },
1710+ {
1711+ "bound": "UPPER",
1712+ "q_lo": 0.9,
1713+ "q_hi": 1.0,
1714+ "y_target":
1715+ [
1716+ 0, 0.7,
1717+ 1000, 0.7
1718+ ]
1719+ },
1720+ {
1721+ "bound": "LOWER",
1722+ "q_lo": 0.0,
1723+ "q_hi": 0.2,
1724+ "y_target":
1725+ [
1726+ 0, 0.005,
1727+ 1000, 0.005
1728+ ]
1729+ }
1730+ ],
1731+ "highlight": [
1732+ {
1733+ "bound": "LOWER",
1734+ "q_lo": 0.95,
1735+ "q_hi": 1.0,
1736+ "y_target":
1737+ [
1738+ 0, 0.5,
1739+ 1000, 0.5
1740+ ]
1741+ },
1742+ {
1743+ "bound": "UPPER",
1744+ "q_lo": 0.95,
1745+ "q_hi": 1.0,
1746+ "y_target":
1747+ [
1748+ 0, 0.7,
1749+ 1000, 0.7
1750+ ]
1751+ },
1752+ {
1753+ "bound": "LOWER",
1754+ "q_lo": 0.0,
1755+ "q_hi": 0.2,
1756+ "y_target":
1757+ [
1758+ 0, 0.002,
1759+ 1000, 0.002
1760+ ]
1761+ }
1762+ ],
1763+ "shadows": [
1764+ {
1765+ "bound": "LOWER",
1766+ "q_lo": 0.95,
1767+ "q_hi": 1.0,
1768+ "y_target":
1769+ [
1770+ 0, 0.5,
1771+ 1000, 0.5
1772+ ]
1773+ },
1774+ {
1775+ "bound": "UPPER",
1776+ "q_lo": 0.95,
1777+ "q_hi": 1.0,
1778+ "y_target":
1779+ [
1780+ 0, 0.7,
1781+ 1000, 0.7
1782+ ]
1783+ },
1784+ {
1785+ "bound": "LOWER",
1786+ "q_lo": 0.0,
1787+ "q_hi": 0.2,
1788+ "y_target":
1789+ [
1790+ 0, 0.002,
1791+ 1000, 0.002
1792+ ]
1793+ }
1794+ ]
1795+ },
1796+ "y_target":
1797+ [
1798+ 0, 0.19,
1799+ 1000, 0.19,
1800+ 10000, 0.19
1801+ ]
1802+ },
1803+ {
1804+ "comment": "Channel 2 is the HDR long channel",
1805+ "desaturate": 0,
1806+ "metering_modes":
1807+ {
1808+ "centre-weighted":
1809+ {
1810+ "weights":
1811+ [
1812+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1813+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1814+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1815+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1816+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1817+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1818+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1819+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
1820+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1821+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1822+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1823+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1824+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1825+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1826+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
1827+ ]
1828+ },
1829+ "spot":
1830+ {
1831+ "weights":
1832+ [
1833+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1834+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1835+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1836+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1837+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1838+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1839+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1840+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
1841+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1842+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1843+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1844+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1845+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1846+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1847+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1848+ ]
1849+ },
1850+ "matrix":
1851+ {
1852+ "weights":
1853+ [
1854+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1855+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1856+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1857+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1858+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1859+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1860+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1861+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1862+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1863+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1864+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1865+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1866+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1867+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1868+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1869+ ]
1870+ }
1871+ },
1872+ "exposure_modes":
1873+ {
1874+ "normal":
1875+ {
1876+ "shutter": [ 100, 20000, 30000, 60000 ],
1877+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
1878+ }
1879+ },
1880+ "constraint_modes":
1881+ {
1882+ "normal": [ ],
1883+ "highlight": [ ],
1884+ "shadows": [ ]
1885+ },
1886+ "channel_constraints": [
1887+ {
1888+ "bound": "UPPER",
1889+ "channel": 4,
1890+ "factor": 8
1891+ },
1892+ {
1893+ "bound": "LOWER",
1894+ "channel": 4,
1895+ "factor": 2
1896+ }
1897+ ],
1898+ "y_target":
1899+ [
1900+ 0, 0.16,
1901+ 1000, 0.165,
1902+ 10000, 0.17
1903+ ]
1904+ },
1905+ {
1906+ "comment": "Channel 3 is the night mode channel",
1907+ "base_ev": 0.33,
1908+ "metering_modes":
1909+ {
1910+ "centre-weighted":
1911+ {
1912+ "weights":
1913+ [
1914+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1915+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1916+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1917+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1918+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1919+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1920+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1921+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
1922+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
1923+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1924+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
1925+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1926+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
1927+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
1928+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
1929+ ]
1930+ },
1931+ "spot":
1932+ {
1933+ "weights":
1934+ [
1935+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1936+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1937+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1938+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1939+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1940+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1941+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1942+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
1943+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
1944+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1945+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1946+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1947+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1948+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1949+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1950+ ]
1951+ },
1952+ "matrix":
1953+ {
1954+ "weights":
1955+ [
1956+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1957+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1958+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1959+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1960+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1961+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1962+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1963+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1964+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1965+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1966+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1967+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1968+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1969+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1970+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1971+ ]
1972+ }
1973+ },
1974+ "exposure_modes":
1975+ {
1976+ "normal":
1977+ {
1978+ "shutter": [ 100, 20000, 66666 ],
1979+ "gain": [ 1.0, 2.0, 4.0 ]
1980+ },
1981+ "short":
1982+ {
1983+ "shutter": [ 100, 20000, 33333 ],
1984+ "gain": [ 1.0, 2.0, 4.0 ]
1985+ },
1986+ "long":
1987+ {
1988+ "shutter": [ 100, 20000, 66666, 120000 ],
1989+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
1990+ }
1991+ },
1992+ "constraint_modes":
1993+ {
1994+ "normal": [
1995+ {
1996+ "bound": "LOWER",
1997+ "q_lo": 0.98,
1998+ "q_hi": 1.0,
1999+ "y_target":
2000+ [
2001+ 0, 0.5,
2002+ 1000, 0.5
2003+ ]
2004+ }
2005+ ],
2006+ "highlight": [
2007+ {
2008+ "bound": "LOWER",
2009+ "q_lo": 0.98,
2010+ "q_hi": 1.0,
2011+ "y_target":
2012+ [
2013+ 0, 0.5,
2014+ 1000, 0.5
2015+ ]
2016+ },
2017+ {
2018+ "bound": "UPPER",
2019+ "q_lo": 0.98,
2020+ "q_hi": 1.0,
2021+ "y_target":
2022+ [
2023+ 0, 0.8,
2024+ 1000, 0.8
2025+ ]
2026+ }
2027+ ],
2028+ "shadows": [
2029+ {
2030+ "bound": "LOWER",
2031+ "q_lo": 0.98,
2032+ "q_hi": 1.0,
2033+ "y_target":
2034+ [
2035+ 0, 0.5,
2036+ 1000, 0.5
2037+ ]
2038+ }
2039+ ]
2040+ },
2041+ "y_target":
2042+ [
2043+ 0, 0.16,
2044+ 1000, 0.165,
2045+ 10000, 0.17
2046+ ]
2047+ }
2048+ ]
2049+ }
2050+ },
2051+ {
2052+ "rpi.alsc":
2053+ {
2054+ "omega": 1.3,
2055+ "n_iter": 100,
2056+ "luminance_strength": 0.8,
2057+ "calibrations_Cr": [
2058+ {
2059+ "ct": 3000,
2060+ "table":
2061+ [
2062+ 1.418, 1.428, 1.446, 1.454, 1.454, 1.451, 1.441, 1.428, 1.411, 1.391, 1.371, 1.349, 1.334, 1.327, 1.325, 1.325, 1.325, 1.325, 1.331, 1.344, 1.363, 1.383, 1.402, 1.418, 1.433, 1.446, 1.452, 1.453, 1.446, 1.435, 1.415, 1.404,
2063+ 1.428, 1.442, 1.453, 1.455, 1.454, 1.447, 1.431, 1.413, 1.392, 1.371, 1.349, 1.331, 1.318, 1.307, 1.299, 1.299, 1.299, 1.303, 1.313, 1.328, 1.344, 1.363, 1.383, 1.404, 1.424, 1.439, 1.451, 1.453, 1.453, 1.445, 1.431, 1.415,
2064+ 1.436, 1.448, 1.453, 1.455, 1.449, 1.435, 1.415, 1.393, 1.369, 1.345, 1.322, 1.303, 1.287, 1.276, 1.269, 1.268, 1.268, 1.272, 1.283, 1.298, 1.316, 1.337, 1.362, 1.384, 1.406, 1.427, 1.444, 1.454, 1.454, 1.452, 1.438, 1.426,
2065+ 1.441, 1.451, 1.454, 1.451, 1.439, 1.422, 1.396, 1.372, 1.345, 1.319, 1.295, 1.274, 1.257, 1.245, 1.239, 1.238, 1.238, 1.245, 1.255, 1.269, 1.289, 1.311, 1.336, 1.362, 1.388, 1.412, 1.433, 1.448, 1.454, 1.453, 1.445, 1.433,
2066+ 1.445, 1.452, 1.452, 1.445, 1.428, 1.405, 1.379, 1.349, 1.319, 1.295, 1.269, 1.247, 1.229, 1.219, 1.212, 1.211, 1.211, 1.217, 1.228, 1.242, 1.261, 1.286, 1.311, 1.339, 1.367, 1.395, 1.419, 1.439, 1.452, 1.452, 1.451, 1.436,
2067+ 1.448, 1.451, 1.451, 1.435, 1.414, 1.387, 1.358, 1.327, 1.296, 1.269, 1.245, 1.222, 1.205, 1.193, 1.187, 1.185, 1.186, 1.191, 1.202, 1.217, 1.237, 1.261, 1.286, 1.316, 1.346, 1.378, 1.404, 1.429, 1.445, 1.451, 1.451, 1.442,
2068+ 1.448, 1.448, 1.445, 1.427, 1.401, 1.371, 1.338, 1.306, 1.274, 1.245, 1.222, 1.199, 1.183, 1.171, 1.164, 1.162, 1.162, 1.168, 1.181, 1.194, 1.215, 1.237, 1.264, 1.294, 1.325, 1.359, 1.389, 1.418, 1.441, 1.449, 1.449, 1.443,
2069+ 1.449, 1.448, 1.438, 1.415, 1.387, 1.352, 1.318, 1.284, 1.252, 1.223, 1.199, 1.179, 1.161, 1.149, 1.142, 1.142, 1.142, 1.149, 1.159, 1.174, 1.194, 1.215, 1.242, 1.272, 1.307, 1.341, 1.376, 1.405, 1.431, 1.447, 1.447, 1.444,
2070+ 1.448, 1.447, 1.431, 1.405, 1.373, 1.336, 1.301, 1.264, 1.234, 1.204, 1.179, 1.161, 1.143, 1.131, 1.124, 1.123, 1.123, 1.131, 1.141, 1.156, 1.174, 1.197, 1.224, 1.254, 1.288, 1.324, 1.361, 1.394, 1.423, 1.442, 1.444, 1.444,
2071+ 1.447, 1.442, 1.424, 1.393, 1.359, 1.322, 1.284, 1.248, 1.216, 1.187, 1.162, 1.143, 1.128, 1.115, 1.109, 1.108, 1.108, 1.113, 1.124, 1.139, 1.156, 1.179, 1.206, 1.236, 1.272, 1.309, 1.347, 1.382, 1.411, 1.435, 1.443, 1.444,
2072+ 1.444, 1.439, 1.417, 1.383, 1.347, 1.308, 1.271, 1.233, 1.201, 1.173, 1.147, 1.128, 1.115, 1.101, 1.095, 1.093, 1.093, 1.099, 1.111, 1.124, 1.142, 1.165, 1.191, 1.222, 1.258, 1.296, 1.333, 1.372, 1.404, 1.429, 1.441, 1.442,
2073+ 1.443, 1.434, 1.409, 1.375, 1.336, 1.297, 1.257, 1.221, 1.189, 1.159, 1.136, 1.116, 1.101, 1.092, 1.083, 1.082, 1.082, 1.089, 1.099, 1.111, 1.131, 1.153, 1.181, 1.211, 1.246, 1.284, 1.324, 1.361, 1.398, 1.425, 1.441, 1.441,
2074+ 1.443, 1.431, 1.405, 1.369, 1.328, 1.287, 1.247, 1.211, 1.178, 1.149, 1.126, 1.107, 1.092, 1.083, 1.075, 1.073, 1.073, 1.082, 1.089, 1.101, 1.121, 1.143, 1.171, 1.201, 1.237, 1.274, 1.314, 1.353, 1.389, 1.421, 1.439, 1.441,
2075+ 1.442, 1.429, 1.401, 1.364, 1.323, 1.279, 1.241, 1.205, 1.172, 1.144, 1.119, 1.101, 1.085, 1.075, 1.071, 1.067, 1.067, 1.073, 1.082, 1.096, 1.114, 1.136, 1.163, 1.194, 1.229, 1.268, 1.308, 1.348, 1.387, 1.417, 1.439, 1.439,
2076+ 1.443, 1.429, 1.399, 1.362, 1.319, 1.276, 1.237, 1.199, 1.169, 1.141, 1.115, 1.096, 1.081, 1.071, 1.066, 1.063, 1.066, 1.068, 1.078, 1.092, 1.109, 1.132, 1.159, 1.191, 1.226, 1.263, 1.304, 1.346, 1.384, 1.416, 1.438, 1.439,
2077+ 1.443, 1.428, 1.399, 1.361, 1.319, 1.276, 1.236, 1.199, 1.167, 1.139, 1.115, 1.096, 1.081, 1.071, 1.064, 1.062, 1.062, 1.067, 1.077, 1.091, 1.109, 1.131, 1.158, 1.189, 1.224, 1.262, 1.303, 1.345, 1.383, 1.416, 1.438, 1.439,
2078+ 1.444, 1.429, 1.399, 1.361, 1.319, 1.276, 1.236, 1.199, 1.167, 1.139, 1.116, 1.096, 1.081, 1.071, 1.064, 1.063, 1.063, 1.067, 1.077, 1.091, 1.109, 1.131, 1.159, 1.189, 1.224, 1.262, 1.303, 1.345, 1.384, 1.416, 1.438, 1.441,
2079+ 1.444, 1.431, 1.402, 1.364, 1.322, 1.281, 1.239, 1.202, 1.171, 1.142, 1.118, 1.099, 1.084, 1.073, 1.069, 1.065, 1.067, 1.071, 1.079, 1.094, 1.112, 1.135, 1.163, 1.191, 1.227, 1.265, 1.307, 1.348, 1.386, 1.418, 1.438, 1.441,
2080+ 1.447, 1.433, 1.406, 1.369, 1.328, 1.286, 1.244, 1.209, 1.177, 1.148, 1.124, 1.105, 1.089, 1.081, 1.073, 1.071, 1.071, 1.079, 1.085, 1.099, 1.118, 1.141, 1.168, 1.198, 1.233, 1.271, 1.312, 1.352, 1.391, 1.422, 1.441, 1.444,
2081+ 1.448, 1.438, 1.412, 1.376, 1.335, 1.295, 1.255, 1.218, 1.186, 1.157, 1.134, 1.113, 1.098, 1.089, 1.081, 1.079, 1.079, 1.085, 1.094, 1.107, 1.125, 1.149, 1.175, 1.207, 1.242, 1.281, 1.319, 1.359, 1.396, 1.425, 1.445, 1.447,
2082+ 1.449, 1.443, 1.417, 1.384, 1.345, 1.305, 1.266, 1.229, 1.197, 1.169, 1.145, 1.124, 1.111, 1.098, 1.091, 1.089, 1.089, 1.094, 1.107, 1.118, 1.137, 1.159, 1.187, 1.218, 1.253, 1.291, 1.329, 1.369, 1.405, 1.433, 1.447, 1.449,
2083+ 1.453, 1.449, 1.425, 1.395, 1.358, 1.318, 1.281, 1.244, 1.211, 1.183, 1.158, 1.138, 1.124, 1.111, 1.104, 1.103, 1.103, 1.107, 1.118, 1.133, 1.151, 1.174, 1.201, 1.232, 1.267, 1.304, 1.344, 1.379, 1.413, 1.437, 1.449, 1.449,
2084+ 1.457, 1.453, 1.434, 1.405, 1.371, 1.335, 1.297, 1.261, 1.229, 1.199, 1.174, 1.155, 1.138, 1.126, 1.119, 1.117, 1.117, 1.124, 1.133, 1.149, 1.167, 1.189, 1.217, 1.248, 1.284, 1.319, 1.357, 1.393, 1.423, 1.444, 1.452, 1.452,
2085+ 1.459, 1.457, 1.443, 1.418, 1.385, 1.352, 1.314, 1.279, 1.246, 1.218, 1.193, 1.174, 1.155, 1.144, 1.137, 1.136, 1.136, 1.141, 1.151, 1.167, 1.187, 1.208, 1.236, 1.267, 1.301, 1.337, 1.373, 1.405, 1.434, 1.453, 1.455, 1.455,
2086+ 1.461, 1.461, 1.454, 1.429, 1.401, 1.369, 1.333, 1.301, 1.269, 1.239, 1.216, 1.193, 1.177, 1.165, 1.158, 1.156, 1.156, 1.161, 1.171, 1.187, 1.208, 1.229, 1.258, 1.288, 1.321, 1.356, 1.389, 1.419, 1.445, 1.459, 1.459, 1.455,
2087+ 1.462, 1.462, 1.459, 1.442, 1.418, 1.386, 1.354, 1.322, 1.292, 1.262, 1.239, 1.216, 1.199, 1.187, 1.179, 1.178, 1.178, 1.184, 1.194, 1.208, 1.229, 1.253, 1.279, 1.309, 1.342, 1.375, 1.406, 1.433, 1.452, 1.464, 1.464, 1.454,
2088+ 1.461, 1.465, 1.465, 1.454, 1.431, 1.405, 1.376, 1.346, 1.316, 1.288, 1.262, 1.242, 1.223, 1.212, 1.205, 1.203, 1.203, 1.208, 1.218, 1.234, 1.253, 1.279, 1.305, 1.334, 1.363, 1.393, 1.421, 1.445, 1.461, 1.465, 1.464, 1.452,
2089+ 1.459, 1.465, 1.466, 1.461, 1.443, 1.421, 1.395, 1.368, 1.341, 1.316, 1.288, 1.268, 1.251, 1.238, 1.232, 1.229, 1.229, 1.235, 1.246, 1.261, 1.279, 1.305, 1.331, 1.356, 1.385, 1.411, 1.435, 1.454, 1.466, 1.466, 1.464, 1.451,
2090+ 1.454, 1.465, 1.467, 1.466, 1.456, 1.436, 1.414, 1.389, 1.367, 1.341, 1.318, 1.297, 1.279, 1.269, 1.261, 1.259, 1.259, 1.265, 1.274, 1.288, 1.308, 1.331, 1.355, 1.381, 1.404, 1.428, 1.447, 1.462, 1.468, 1.467, 1.457, 1.445,
2091+ 1.447, 1.459, 1.466, 1.467, 1.463, 1.451, 1.434, 1.411, 1.389, 1.367, 1.344, 1.325, 1.311, 1.297, 1.292, 1.289, 1.289, 1.295, 1.303, 1.317, 1.336, 1.356, 1.381, 1.402, 1.423, 1.441, 1.457, 1.467, 1.468, 1.463, 1.451, 1.439,
2092+ 1.438, 1.449, 1.462, 1.464, 1.464, 1.459, 1.446, 1.429, 1.408, 1.388, 1.369, 1.353, 1.339, 1.329, 1.321, 1.321, 1.321, 1.325, 1.333, 1.348, 1.362, 1.379, 1.401, 1.421, 1.439, 1.454, 1.463, 1.465, 1.465, 1.456, 1.442, 1.427,
2093+ 1.429, 1.439, 1.454, 1.464, 1.464, 1.459, 1.449, 1.435, 1.421, 1.402, 1.385, 1.369, 1.353, 1.341, 1.338, 1.337, 1.337, 1.338, 1.348, 1.362, 1.378, 1.395, 1.411, 1.429, 1.445, 1.455, 1.463, 1.464, 1.457, 1.447, 1.427, 1.419
2094+ ]
2095+ },
2096+ {
2097+ "ct": 5000,
2098+ "table":
2099+ [
2100+ 2.163, 2.177, 2.194, 2.196, 2.197, 2.192, 2.181, 2.161, 2.139, 2.113, 2.088, 2.063, 2.047, 2.041, 2.036, 2.036, 2.036, 2.037, 2.046, 2.059, 2.083, 2.113, 2.135, 2.158, 2.181, 2.193, 2.205, 2.205, 2.202, 2.189, 2.171, 2.158,
2101+ 2.169, 2.184, 2.195, 2.196, 2.194, 2.182, 2.163, 2.141, 2.116, 2.088, 2.063, 2.042, 2.025, 2.013, 2.004, 2.004, 2.006, 2.011, 2.022, 2.038, 2.059, 2.083, 2.113, 2.137, 2.162, 2.182, 2.197, 2.204, 2.203, 2.199, 2.183, 2.171,
2102+ 2.177, 2.187, 2.193, 2.193, 2.184, 2.166, 2.142, 2.116, 2.087, 2.057, 2.033, 2.008, 1.991, 1.977, 1.969, 1.969, 1.969, 1.975, 1.988, 2.006, 2.028, 2.055, 2.083, 2.114, 2.139, 2.166, 2.187, 2.199, 2.202, 2.201, 2.189, 2.179,
2103+ 2.183, 2.189, 2.192, 2.186, 2.172, 2.146, 2.119, 2.089, 2.058, 2.026, 2.001, 1.975, 1.956, 1.942, 1.934, 1.932, 1.933, 1.941, 1.955, 1.971, 1.995, 2.023, 2.055, 2.084, 2.119, 2.146, 2.171, 2.191, 2.201, 2.201, 2.194, 2.183,
2104+ 2.186, 2.189, 2.189, 2.177, 2.158, 2.127, 2.096, 2.059, 2.026, 1.998, 1.969, 1.944, 1.925, 1.911, 1.901, 1.901, 1.903, 1.912, 1.924, 1.941, 1.964, 1.995, 2.023, 2.058, 2.091, 2.126, 2.155, 2.181, 2.195, 2.199, 2.198, 2.188,
2105+ 2.189, 2.189, 2.184, 2.166, 2.138, 2.108, 2.071, 2.036, 1.999, 1.969, 1.941, 1.914, 1.894, 1.879, 1.871, 1.871, 1.872, 1.879, 1.893, 1.913, 1.937, 1.964, 1.997, 2.029, 2.065, 2.104, 2.137, 2.169, 2.187, 2.199, 2.199, 2.189,
2106+ 2.187, 2.186, 2.176, 2.154, 2.123, 2.087, 2.044, 2.011, 1.974, 1.941, 1.913, 1.887, 1.868, 1.852, 1.844, 1.843, 1.844, 1.852, 1.866, 1.885, 1.912, 1.937, 1.972, 2.004, 2.042, 2.081, 2.119, 2.154, 2.179, 2.195, 2.196, 2.193,
2107+ 2.187, 2.181, 2.167, 2.141, 2.103, 2.062, 2.023, 1.984, 1.947, 1.916, 1.887, 1.864, 1.841, 1.828, 1.821, 1.819, 1.819, 1.828, 1.842, 1.862, 1.885, 1.913, 1.945, 1.982, 2.021, 2.058, 2.102, 2.137, 2.168, 2.192, 2.193, 2.193,
2108+ 2.182, 2.181, 2.161, 2.127, 2.083, 2.044, 2.002, 1.961, 1.924, 1.891, 1.864, 1.841, 1.819, 1.806, 1.797, 1.797, 1.797, 1.805, 1.819, 1.841, 1.862, 1.892, 1.924, 1.959, 1.999, 2.041, 2.082, 2.123, 2.161, 2.185, 2.191, 2.192,
2109+ 2.182, 2.172, 2.149, 2.112, 2.069, 2.026, 1.982, 1.941, 1.904, 1.871, 1.841, 1.819, 1.799, 1.785, 1.776, 1.776, 1.778, 1.784, 1.798, 1.819, 1.841, 1.869, 1.903, 1.939, 1.977, 2.021, 2.067, 2.108, 2.145, 2.174, 2.189, 2.191,
2110+ 2.181, 2.167, 2.139, 2.098, 2.056, 2.006, 1.965, 1.921, 1.883, 1.851, 1.823, 1.799, 1.783, 1.767, 1.759, 1.758, 1.758, 1.767, 1.783, 1.798, 1.825, 1.851, 1.883, 1.919, 1.959, 2.004, 2.049, 2.094, 2.136, 2.167, 2.187, 2.189,
2111+ 2.179, 2.163, 2.131, 2.087, 2.041, 1.994, 1.948, 1.907, 1.871, 1.835, 1.806, 1.784, 1.767, 1.754, 1.744, 1.742, 1.742, 1.752, 1.767, 1.783, 1.808, 1.838, 1.869, 1.905, 1.945, 1.989, 2.036, 2.083, 2.128, 2.159, 2.183, 2.187,
2112+ 2.178, 2.161, 2.126, 2.082, 2.032, 1.982, 1.936, 1.896, 1.857, 1.823, 1.795, 1.772, 1.754, 1.744, 1.732, 1.731, 1.732, 1.742, 1.752, 1.771, 1.796, 1.824, 1.857, 1.895, 1.934, 1.977, 2.024, 2.071, 2.116, 2.154, 2.181, 2.185,
2113+ 2.177, 2.157, 2.121, 2.074, 2.025, 1.973, 1.927, 1.886, 1.849, 1.815, 1.787, 1.765, 1.746, 1.732, 1.725, 1.722, 1.724, 1.732, 1.743, 1.762, 1.786, 1.813, 1.848, 1.886, 1.924, 1.969, 2.017, 2.066, 2.111, 2.153, 2.179, 2.183,
2114+ 2.177, 2.155, 2.119, 2.072, 2.022, 1.969, 1.925, 1.881, 1.844, 1.811, 1.782, 1.758, 1.739, 1.725, 1.721, 1.717, 1.721, 1.724, 1.739, 1.757, 1.781, 1.809, 1.842, 1.879, 1.921, 1.965, 2.012, 2.062, 2.108, 2.151, 2.179, 2.182,
2115+ 2.177, 2.156, 2.121, 2.071, 2.021, 1.968, 1.922, 1.879, 1.842, 1.811, 1.781, 1.757, 1.739, 1.725, 1.717, 1.715, 1.715, 1.723, 1.737, 1.757, 1.779, 1.808, 1.841, 1.877, 1.918, 1.963, 2.011, 2.061, 2.107, 2.148, 2.179, 2.183,
2116+ 2.178, 2.157, 2.121, 2.072, 2.021, 1.969, 1.922, 1.881, 1.842, 1.811, 1.781, 1.758, 1.739, 1.726, 1.718, 1.717, 1.718, 1.723, 1.737, 1.757, 1.781, 1.809, 1.841, 1.877, 1.918, 1.964, 2.012, 2.061, 2.108, 2.149, 2.179, 2.183,
2117+ 2.178, 2.159, 2.124, 2.074, 2.024, 1.974, 1.926, 1.885, 1.847, 1.813, 1.784, 1.762, 1.743, 1.731, 1.725, 1.719, 1.723, 1.728, 1.742, 1.762, 1.785, 1.814, 1.847, 1.881, 1.922, 1.966, 2.017, 2.065, 2.109, 2.151, 2.181, 2.184,
2118+ 2.181, 2.163, 2.129, 2.082, 2.032, 1.982, 1.934, 1.891, 1.854, 1.822, 1.794, 1.769, 1.751, 1.739, 1.731, 1.727, 1.728, 1.739, 1.747, 1.768, 1.791, 1.821, 1.852, 1.889, 1.929, 1.972, 2.022, 2.071, 2.117, 2.155, 2.182, 2.189,
2119+ 2.184, 2.169, 2.135, 2.091, 2.041, 1.994, 1.947, 1.902, 1.865, 1.833, 1.805, 1.779, 1.762, 1.751, 1.739, 1.739, 1.739, 1.747, 1.761, 1.779, 1.803, 1.831, 1.864, 1.898, 1.941, 1.984, 2.033, 2.079, 2.123, 2.163, 2.188, 2.193,
2120+ 2.185, 2.174, 2.142, 2.099, 2.054, 2.004, 1.959, 1.917, 1.879, 1.846, 1.819, 1.794, 1.779, 1.762, 1.754, 1.753, 1.753, 1.761, 1.777, 1.793, 1.816, 1.843, 1.877, 1.913, 1.953, 1.995, 2.043, 2.091, 2.135, 2.169, 2.191, 2.196,
2121+ 2.191, 2.179, 2.154, 2.118, 2.069, 2.023, 1.977, 1.935, 1.898, 1.865, 1.834, 1.813, 1.794, 1.779, 1.769, 1.769, 1.769, 1.777, 1.793, 1.809, 1.834, 1.863, 1.895, 1.929, 1.972, 2.015, 2.061, 2.105, 2.145, 2.178, 2.195, 2.199,
2122+ 2.197, 2.188, 2.166, 2.129, 2.087, 2.041, 1.997, 1.956, 1.918, 1.884, 1.855, 1.834, 1.813, 1.798, 1.788, 1.788, 1.788, 1.796, 1.809, 1.832, 1.853, 1.881, 1.912, 1.949, 1.991, 2.033, 2.076, 2.119, 2.159, 2.187, 2.202, 2.205,
2123+ 2.202, 2.197, 2.176, 2.148, 2.106, 2.065, 2.021, 1.979, 1.943, 1.909, 1.879, 1.855, 1.835, 1.819, 1.811, 1.811, 1.811, 1.818, 1.832, 1.853, 1.875, 1.904, 1.937, 1.972, 2.013, 2.055, 2.097, 2.138, 2.175, 2.197, 2.206, 2.207,
2124+ 2.205, 2.202, 2.189, 2.162, 2.126, 2.084, 2.044, 2.004, 1.967, 1.935, 1.907, 1.879, 1.861, 1.845, 1.838, 1.835, 1.835, 1.844, 1.855, 1.875, 1.902, 1.928, 1.961, 1.998, 2.033, 2.076, 2.118, 2.155, 2.186, 2.205, 2.208, 2.208,
2125+ 2.207, 2.205, 2.195, 2.175, 2.145, 2.108, 2.069, 2.029, 1.996, 1.963, 1.934, 1.908, 1.885, 1.872, 1.864, 1.863, 1.863, 1.869, 1.884, 1.902, 1.928, 1.956, 1.989, 2.023, 2.059, 2.099, 2.137, 2.172, 2.199, 2.212, 2.213, 2.209,
2126+ 2.207, 2.207, 2.203, 2.188, 2.162, 2.128, 2.094, 2.058, 2.023, 1.993, 1.963, 1.936, 1.916, 1.899, 1.893, 1.892, 1.893, 1.899, 1.912, 1.929, 1.956, 1.986, 2.016, 2.049, 2.084, 2.121, 2.156, 2.187, 2.208, 2.215, 2.215, 2.208,
2127+ 2.205, 2.208, 2.209, 2.199, 2.178, 2.149, 2.117, 2.083, 2.052, 2.023, 1.993, 1.967, 1.947, 1.933, 1.925, 1.922, 1.922, 1.929, 1.943, 1.961, 1.986, 2.015, 2.045, 2.076, 2.109, 2.143, 2.173, 2.198, 2.214, 2.218, 2.216, 2.205,
2128+ 2.201, 2.207, 2.211, 2.211, 2.193, 2.168, 2.141, 2.112, 2.082, 2.052, 2.025, 2.001, 1.981, 1.967, 1.959, 1.958, 1.958, 1.967, 1.975, 1.992, 2.018, 2.046, 2.076, 2.105, 2.136, 2.163, 2.189, 2.208, 2.217, 2.217, 2.212, 2.203,
2129+ 2.194, 2.204, 2.212, 2.213, 2.203, 2.187, 2.165, 2.139, 2.112, 2.083, 2.055, 2.034, 2.016, 2.001, 1.993, 1.993, 1.994, 1.999, 2.011, 2.027, 2.051, 2.077, 2.105, 2.133, 2.158, 2.181, 2.202, 2.217, 2.218, 2.218, 2.206, 2.193,
2130+ 2.185, 2.198, 2.213, 2.214, 2.212, 2.201, 2.184, 2.163, 2.135, 2.111, 2.089, 2.071, 2.052, 2.039, 2.032, 2.031, 2.031, 2.036, 2.048, 2.065, 2.085, 2.106, 2.131, 2.155, 2.178, 2.198, 2.212, 2.219, 2.219, 2.215, 2.201, 2.185,
2131+ 2.176, 2.191, 2.208, 2.217, 2.216, 2.205, 2.195, 2.177, 2.156, 2.133, 2.109, 2.089, 2.071, 2.055, 2.053, 2.053, 2.053, 2.057, 2.065, 2.085, 2.105, 2.123, 2.149, 2.171, 2.192, 2.205, 2.217, 2.219, 2.219, 2.202, 2.185, 2.181
2132+ ]
2133+ }
2134+ ],
2135+ "calibrations_Cb": [
2136+ {
2137+ "ct": 3000,
2138+ "table":
2139+ [
2140+ 2.518, 2.513, 2.503, 2.496, 2.488, 2.484, 2.485, 2.485, 2.486, 2.487, 2.487, 2.489, 2.494, 2.496, 2.496, 2.497, 2.499, 2.499, 2.496, 2.495, 2.492, 2.491, 2.491, 2.491, 2.492, 2.493, 2.495, 2.501, 2.508, 2.516, 2.528, 2.533,
2141+ 2.515, 2.508, 2.495, 2.487, 2.483, 2.481, 2.482, 2.483, 2.485, 2.487, 2.489, 2.491, 2.495, 2.497, 2.498, 2.501, 2.502, 2.502, 2.499, 2.496, 2.494, 2.491, 2.491, 2.489, 2.489, 2.491, 2.493, 2.496, 2.502, 2.511, 2.521, 2.531,
2142+ 2.507, 2.495, 2.486, 2.482, 2.478, 2.477, 2.481, 2.482, 2.484, 2.488, 2.491, 2.495, 2.499, 2.502, 2.506, 2.508, 2.509, 2.508, 2.505, 2.501, 2.497, 2.493, 2.491, 2.489, 2.488, 2.489, 2.489, 2.492, 2.496, 2.501, 2.511, 2.524,
2143+ 2.501, 2.487, 2.482, 2.481, 2.478, 2.477, 2.481, 2.483, 2.487, 2.491, 2.501, 2.503, 2.509, 2.511, 2.518, 2.519, 2.519, 2.519, 2.516, 2.509, 2.504, 2.498, 2.495, 2.493, 2.489, 2.489, 2.488, 2.489, 2.492, 2.498, 2.505, 2.523,
2144+ 2.499, 2.484, 2.481, 2.476, 2.476, 2.476, 2.481, 2.485, 2.492, 2.501, 2.509, 2.514, 2.519, 2.524, 2.528, 2.531, 2.533, 2.533, 2.525, 2.519, 2.514, 2.507, 2.501, 2.497, 2.493, 2.489, 2.489, 2.488, 2.491, 2.494, 2.501, 2.514,
2145+ 2.497, 2.483, 2.478, 2.476, 2.476, 2.478, 2.482, 2.491, 2.499, 2.509, 2.515, 2.522, 2.528, 2.535, 2.539, 2.541, 2.543, 2.542, 2.539, 2.529, 2.522, 2.516, 2.507, 2.502, 2.497, 2.491, 2.489, 2.488, 2.489, 2.492, 2.498, 2.514,
2146+ 2.492, 2.479, 2.476, 2.475, 2.476, 2.481, 2.488, 2.496, 2.505, 2.516, 2.524, 2.532, 2.541, 2.545, 2.552, 2.554, 2.554, 2.554, 2.548, 2.541, 2.532, 2.522, 2.516, 2.507, 2.502, 2.494, 2.491, 2.489, 2.489, 2.492, 2.494, 2.511,
2147+ 2.491, 2.479, 2.476, 2.477, 2.478, 2.482, 2.491, 2.502, 2.514, 2.524, 2.533, 2.543, 2.548, 2.555, 2.562, 2.566, 2.567, 2.562, 2.557, 2.551, 2.541, 2.531, 2.523, 2.512, 2.506, 2.498, 2.493, 2.491, 2.491, 2.491, 2.493, 2.507,
2148+ 2.489, 2.478, 2.476, 2.477, 2.481, 2.485, 2.494, 2.507, 2.517, 2.529, 2.542, 2.548, 2.557, 2.563, 2.567, 2.571, 2.572, 2.571, 2.565, 2.558, 2.549, 2.538, 2.528, 2.521, 2.509, 2.501, 2.494, 2.492, 2.491, 2.491, 2.491, 2.505,
2149+ 2.488, 2.478, 2.477, 2.478, 2.482, 2.489, 2.499, 2.509, 2.523, 2.538, 2.548, 2.556, 2.563, 2.568, 2.573, 2.577, 2.578, 2.577, 2.573, 2.564, 2.555, 2.543, 2.535, 2.524, 2.515, 2.504, 2.495, 2.492, 2.489, 2.488, 2.489, 2.501,
2150+ 2.486, 2.476, 2.475, 2.477, 2.483, 2.491, 2.503, 2.515, 2.529, 2.542, 2.553, 2.562, 2.568, 2.574, 2.581, 2.583, 2.584, 2.581, 2.578, 2.571, 2.562, 2.551, 2.539, 2.531, 2.517, 2.508, 2.497, 2.492, 2.488, 2.487, 2.489, 2.498,
2151+ 2.486, 2.476, 2.475, 2.479, 2.484, 2.492, 2.504, 2.519, 2.533, 2.544, 2.557, 2.566, 2.573, 2.581, 2.584, 2.588, 2.588, 2.586, 2.581, 2.575, 2.567, 2.555, 2.546, 2.534, 2.517, 2.509, 2.499, 2.492, 2.489, 2.485, 2.488, 2.497,
2152+ 2.487, 2.476, 2.476, 2.479, 2.486, 2.494, 2.506, 2.521, 2.535, 2.549, 2.559, 2.571, 2.578, 2.583, 2.589, 2.591, 2.591, 2.591, 2.587, 2.579, 2.571, 2.559, 2.551, 2.538, 2.523, 2.513, 2.503, 2.493, 2.489, 2.486, 2.487, 2.499,
2153+ 2.486, 2.475, 2.475, 2.479, 2.486, 2.495, 2.509, 2.525, 2.541, 2.555, 2.563, 2.573, 2.582, 2.588, 2.591, 2.594, 2.595, 2.592, 2.591, 2.585, 2.574, 2.564, 2.552, 2.541, 2.525, 2.514, 2.503, 2.493, 2.489, 2.486, 2.486, 2.501,
2154+ 2.486, 2.475, 2.475, 2.479, 2.488, 2.497, 2.509, 2.526, 2.542, 2.556, 2.564, 2.575, 2.584, 2.591, 2.595, 2.596, 2.597, 2.595, 2.592, 2.587, 2.577, 2.568, 2.554, 2.542, 2.527, 2.515, 2.504, 2.494, 2.491, 2.487, 2.487, 2.505,
2155+ 2.484, 2.476, 2.475, 2.478, 2.488, 2.498, 2.509, 2.526, 2.542, 2.555, 2.565, 2.576, 2.584, 2.589, 2.595, 2.598, 2.598, 2.597, 2.593, 2.587, 2.578, 2.569, 2.556, 2.543, 2.528, 2.515, 2.504, 2.494, 2.489, 2.485, 2.485, 2.501,
2156+ 2.484, 2.475, 2.475, 2.478, 2.489, 2.498, 2.509, 2.524, 2.539, 2.553, 2.565, 2.576, 2.584, 2.589, 2.594, 2.597, 2.597, 2.596, 2.593, 2.587, 2.577, 2.569, 2.555, 2.543, 2.529, 2.515, 2.503, 2.496, 2.491, 2.485, 2.486, 2.497,
2157+ 2.484, 2.474, 2.474, 2.479, 2.487, 2.497, 2.509, 2.523, 2.539, 2.551, 2.563, 2.574, 2.581, 2.587, 2.592, 2.595, 2.596, 2.595, 2.591, 2.584, 2.574, 2.567, 2.554, 2.541, 2.526, 2.514, 2.503, 2.495, 2.489, 2.485, 2.486, 2.497,
2158+ 2.484, 2.475, 2.475, 2.478, 2.485, 2.494, 2.507, 2.522, 2.535, 2.546, 2.559, 2.568, 2.579, 2.584, 2.589, 2.592, 2.593, 2.592, 2.588, 2.579, 2.571, 2.562, 2.551, 2.537, 2.524, 2.514, 2.501, 2.493, 2.489, 2.486, 2.487, 2.498,
2159+ 2.485, 2.476, 2.475, 2.477, 2.485, 2.491, 2.506, 2.519, 2.531, 2.544, 2.555, 2.563, 2.571, 2.581, 2.584, 2.589, 2.589, 2.588, 2.583, 2.576, 2.566, 2.555, 2.546, 2.534, 2.522, 2.511, 2.499, 2.491, 2.488, 2.486, 2.487, 2.502,
2160+ 2.487, 2.477, 2.475, 2.477, 2.483, 2.489, 2.503, 2.515, 2.525, 2.541, 2.551, 2.559, 2.567, 2.573, 2.579, 2.582, 2.583, 2.582, 2.576, 2.569, 2.562, 2.549, 2.542, 2.527, 2.518, 2.505, 2.497, 2.491, 2.489, 2.487, 2.487, 2.502,
2161+ 2.487, 2.478, 2.475, 2.477, 2.482, 2.489, 2.497, 2.512, 2.522, 2.536, 2.544, 2.551, 2.562, 2.566, 2.573, 2.578, 2.578, 2.575, 2.571, 2.564, 2.556, 2.548, 2.536, 2.523, 2.513, 2.503, 2.493, 2.489, 2.487, 2.486, 2.487, 2.502,
2162+ 2.488, 2.479, 2.477, 2.478, 2.482, 2.488, 2.496, 2.505, 2.516, 2.528, 2.538, 2.547, 2.553, 2.561, 2.565, 2.569, 2.569, 2.568, 2.564, 2.558, 2.549, 2.541, 2.531, 2.517, 2.509, 2.499, 2.492, 2.488, 2.486, 2.484, 2.486, 2.503,
2163+ 2.492, 2.482, 2.479, 2.479, 2.482, 2.487, 2.491, 2.501, 2.512, 2.523, 2.531, 2.541, 2.549, 2.552, 2.558, 2.561, 2.562, 2.559, 2.558, 2.552, 2.542, 2.535, 2.525, 2.514, 2.505, 2.497, 2.491, 2.486, 2.485, 2.484, 2.487, 2.503,
2164+ 2.495, 2.483, 2.479, 2.479, 2.482, 2.487, 2.491, 2.498, 2.508, 2.515, 2.526, 2.533, 2.541, 2.547, 2.551, 2.554, 2.555, 2.554, 2.552, 2.541, 2.537, 2.527, 2.519, 2.507, 2.502, 2.495, 2.488, 2.485, 2.484, 2.485, 2.488, 2.503,
2165+ 2.499, 2.485, 2.483, 2.481, 2.482, 2.486, 2.489, 2.494, 2.504, 2.511, 2.519, 2.527, 2.531, 2.539, 2.542, 2.546, 2.546, 2.545, 2.539, 2.535, 2.527, 2.522, 2.509, 2.505, 2.497, 2.491, 2.486, 2.485, 2.485, 2.487, 2.491, 2.506,
2166+ 2.499, 2.489, 2.483, 2.481, 2.481, 2.483, 2.488, 2.491, 2.499, 2.506, 2.512, 2.519, 2.524, 2.529, 2.535, 2.537, 2.536, 2.534, 2.532, 2.525, 2.522, 2.514, 2.506, 2.499, 2.492, 2.489, 2.485, 2.484, 2.485, 2.488, 2.492, 2.506,
2167+ 2.507, 2.494, 2.486, 2.483, 2.482, 2.482, 2.486, 2.488, 2.495, 2.501, 2.507, 2.511, 2.517, 2.519, 2.523, 2.525, 2.525, 2.523, 2.523, 2.521, 2.514, 2.506, 2.502, 2.496, 2.491, 2.488, 2.485, 2.485, 2.487, 2.489, 2.496, 2.516,
2168+ 2.511, 2.503, 2.489, 2.486, 2.485, 2.485, 2.485, 2.487, 2.489, 2.495, 2.501, 2.505, 2.509, 2.514, 2.517, 2.519, 2.518, 2.517, 2.515, 2.511, 2.505, 2.501, 2.495, 2.492, 2.488, 2.486, 2.485, 2.486, 2.488, 2.492, 2.499, 2.519,
2169+ 2.517, 2.505, 2.494, 2.489, 2.487, 2.486, 2.486, 2.486, 2.489, 2.491, 2.496, 2.499, 2.503, 2.506, 2.508, 2.509, 2.511, 2.509, 2.507, 2.503, 2.501, 2.496, 2.493, 2.489, 2.485, 2.485, 2.486, 2.487, 2.491, 2.495, 2.505, 2.526,
2170+ 2.526, 2.516, 2.504, 2.494, 2.493, 2.489, 2.489, 2.489, 2.489, 2.491, 2.496, 2.498, 2.501, 2.504, 2.506, 2.506, 2.506, 2.505, 2.503, 2.501, 2.499, 2.496, 2.494, 2.491, 2.487, 2.486, 2.489, 2.492, 2.497, 2.505, 2.517, 2.528,
2171+ 2.529, 2.526, 2.508, 2.502, 2.501, 2.498, 2.495, 2.495, 2.495, 2.495, 2.497, 2.499, 2.501, 2.503, 2.504, 2.506, 2.505, 2.505, 2.503, 2.501, 2.499, 2.496, 2.495, 2.494, 2.492, 2.494, 2.494, 2.498, 2.504, 2.513, 2.525, 2.536
2172+ ]
2173+ },
2174+ {
2175+ "ct": 5000,
2176+ "table":
2177+ [
2178+ 1.427, 1.425, 1.423, 1.422, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.422, 1.423, 1.424, 1.425, 1.426, 1.426, 1.426, 1.425, 1.425, 1.424, 1.422, 1.421, 1.421, 1.421, 1.421, 1.422, 1.422, 1.422, 1.424, 1.424, 1.426, 1.428,
2179+ 1.426, 1.424, 1.422, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.422, 1.423, 1.424, 1.425, 1.426, 1.427, 1.427, 1.427, 1.426, 1.425, 1.424, 1.422, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.421, 1.422, 1.424, 1.427,
2180+ 1.423, 1.421, 1.421, 1.419, 1.419, 1.418, 1.419, 1.419, 1.421, 1.423, 1.425, 1.426, 1.428, 1.429, 1.431, 1.431, 1.431, 1.431, 1.429, 1.426, 1.424, 1.422, 1.421, 1.421, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.422, 1.425,
2181+ 1.422, 1.419, 1.419, 1.419, 1.418, 1.418, 1.419, 1.421, 1.422, 1.426, 1.428, 1.429, 1.433, 1.434, 1.436, 1.436, 1.436, 1.434, 1.432, 1.429, 1.426, 1.424, 1.423, 1.422, 1.421, 1.419, 1.419, 1.419, 1.419, 1.419, 1.421, 1.425,
2182+ 1.422, 1.419, 1.419, 1.418, 1.418, 1.419, 1.419, 1.422, 1.425, 1.429, 1.432, 1.435, 1.436, 1.438, 1.439, 1.439, 1.441, 1.439, 1.435, 1.433, 1.429, 1.427, 1.425, 1.423, 1.422, 1.419, 1.419, 1.418, 1.418, 1.418, 1.419, 1.425,
2183+ 1.422, 1.419, 1.418, 1.418, 1.418, 1.419, 1.421, 1.424, 1.428, 1.432, 1.436, 1.437, 1.439, 1.442, 1.443, 1.445, 1.444, 1.443, 1.441, 1.436, 1.434, 1.431, 1.427, 1.425, 1.422, 1.421, 1.419, 1.418, 1.418, 1.418, 1.419, 1.424,
2184+ 1.422, 1.418, 1.417, 1.418, 1.419, 1.421, 1.423, 1.427, 1.431, 1.436, 1.438, 1.442, 1.444, 1.446, 1.448, 1.449, 1.448, 1.446, 1.445, 1.441, 1.436, 1.434, 1.429, 1.427, 1.423, 1.421, 1.419, 1.418, 1.418, 1.418, 1.418, 1.423,
2185+ 1.421, 1.418, 1.418, 1.418, 1.419, 1.421, 1.424, 1.429, 1.434, 1.438, 1.442, 1.445, 1.447, 1.449, 1.451, 1.452, 1.452, 1.449, 1.447, 1.445, 1.441, 1.436, 1.433, 1.429, 1.425, 1.422, 1.419, 1.419, 1.418, 1.417, 1.418, 1.423,
2186+ 1.421, 1.418, 1.418, 1.419, 1.419, 1.423, 1.426, 1.432, 1.436, 1.441, 1.445, 1.448, 1.449, 1.452, 1.453, 1.454, 1.454, 1.453, 1.451, 1.447, 1.444, 1.439, 1.433, 1.431, 1.427, 1.422, 1.421, 1.419, 1.418, 1.417, 1.418, 1.423,
2187+ 1.421, 1.418, 1.418, 1.419, 1.421, 1.423, 1.428, 1.433, 1.439, 1.443, 1.448, 1.449, 1.453, 1.454, 1.455, 1.456, 1.456, 1.454, 1.453, 1.449, 1.446, 1.441, 1.437, 1.433, 1.429, 1.423, 1.421, 1.419, 1.418, 1.416, 1.417, 1.423,
2188+ 1.421, 1.417, 1.417, 1.419, 1.422, 1.424, 1.429, 1.435, 1.441, 1.444, 1.449, 1.453, 1.454, 1.456, 1.458, 1.459, 1.458, 1.456, 1.454, 1.451, 1.448, 1.442, 1.439, 1.435, 1.429, 1.426, 1.421, 1.419, 1.418, 1.416, 1.417, 1.422,
2189+ 1.419, 1.418, 1.417, 1.419, 1.422, 1.425, 1.429, 1.436, 1.442, 1.446, 1.451, 1.454, 1.456, 1.458, 1.461, 1.461, 1.461, 1.459, 1.456, 1.453, 1.451, 1.446, 1.441, 1.436, 1.431, 1.427, 1.422, 1.419, 1.418, 1.416, 1.417, 1.422,
2190+ 1.419, 1.418, 1.418, 1.421, 1.423, 1.426, 1.431, 1.437, 1.444, 1.449, 1.452, 1.456, 1.458, 1.461, 1.462, 1.463, 1.463, 1.461, 1.458, 1.454, 1.452, 1.447, 1.443, 1.438, 1.432, 1.428, 1.423, 1.421, 1.419, 1.417, 1.417, 1.421,
2191+ 1.419, 1.418, 1.417, 1.421, 1.423, 1.428, 1.432, 1.439, 1.445, 1.451, 1.453, 1.457, 1.459, 1.462, 1.464, 1.465, 1.465, 1.463, 1.461, 1.457, 1.453, 1.449, 1.444, 1.441, 1.432, 1.429, 1.425, 1.421, 1.419, 1.417, 1.418, 1.422,
2192+ 1.418, 1.417, 1.417, 1.419, 1.423, 1.428, 1.433, 1.439, 1.446, 1.451, 1.453, 1.457, 1.461, 1.464, 1.465, 1.466, 1.466, 1.464, 1.462, 1.459, 1.454, 1.451, 1.445, 1.441, 1.436, 1.429, 1.425, 1.422, 1.421, 1.417, 1.417, 1.423,
2193+ 1.417, 1.416, 1.416, 1.419, 1.423, 1.428, 1.433, 1.441, 1.446, 1.451, 1.454, 1.458, 1.461, 1.463, 1.465, 1.466, 1.466, 1.465, 1.463, 1.459, 1.454, 1.451, 1.446, 1.441, 1.437, 1.431, 1.426, 1.422, 1.421, 1.418, 1.418, 1.423,
2194+ 1.417, 1.416, 1.417, 1.418, 1.423, 1.428, 1.433, 1.439, 1.445, 1.451, 1.453, 1.457, 1.461, 1.463, 1.465, 1.466, 1.466, 1.464, 1.462, 1.459, 1.454, 1.451, 1.446, 1.441, 1.437, 1.431, 1.426, 1.422, 1.419, 1.417, 1.417, 1.422,
2195+ 1.417, 1.416, 1.416, 1.418, 1.422, 1.428, 1.433, 1.438, 1.444, 1.449, 1.453, 1.456, 1.459, 1.462, 1.464, 1.465, 1.465, 1.463, 1.461, 1.458, 1.453, 1.449, 1.445, 1.441, 1.435, 1.429, 1.426, 1.421, 1.419, 1.417, 1.417, 1.422,
2196+ 1.418, 1.416, 1.416, 1.418, 1.421, 1.426, 1.432, 1.438, 1.443, 1.447, 1.451, 1.454, 1.458, 1.459, 1.462, 1.463, 1.463, 1.462, 1.459, 1.455, 1.451, 1.447, 1.443, 1.439, 1.434, 1.429, 1.425, 1.421, 1.419, 1.417, 1.417, 1.422,
2197+ 1.418, 1.416, 1.416, 1.418, 1.421, 1.425, 1.431, 1.435, 1.442, 1.445, 1.449, 1.452, 1.455, 1.458, 1.458, 1.461, 1.461, 1.459, 1.456, 1.453, 1.449, 1.445, 1.442, 1.436, 1.433, 1.427, 1.425, 1.421, 1.419, 1.418, 1.418, 1.422,
2198+ 1.419, 1.416, 1.415, 1.417, 1.419, 1.424, 1.429, 1.434, 1.439, 1.443, 1.446, 1.449, 1.452, 1.454, 1.456, 1.457, 1.457, 1.456, 1.453, 1.451, 1.447, 1.443, 1.441, 1.435, 1.431, 1.426, 1.424, 1.421, 1.419, 1.418, 1.418, 1.422,
2199+ 1.419, 1.416, 1.415, 1.416, 1.419, 1.422, 1.426, 1.433, 1.437, 1.441, 1.444, 1.447, 1.449, 1.452, 1.453, 1.455, 1.455, 1.453, 1.451, 1.447, 1.444, 1.441, 1.438, 1.432, 1.428, 1.424, 1.421, 1.419, 1.418, 1.417, 1.417, 1.421,
2200+ 1.419, 1.416, 1.415, 1.416, 1.418, 1.421, 1.425, 1.431, 1.435, 1.438, 1.442, 1.445, 1.446, 1.449, 1.451, 1.451, 1.451, 1.451, 1.447, 1.445, 1.443, 1.439, 1.434, 1.431, 1.427, 1.422, 1.421, 1.418, 1.417, 1.417, 1.417, 1.421,
2201+ 1.418, 1.416, 1.415, 1.416, 1.417, 1.421, 1.423, 1.428, 1.433, 1.437, 1.439, 1.442, 1.444, 1.446, 1.448, 1.449, 1.449, 1.447, 1.445, 1.443, 1.439, 1.437, 1.432, 1.429, 1.425, 1.422, 1.419, 1.417, 1.417, 1.416, 1.416, 1.419,
2202+ 1.418, 1.416, 1.416, 1.416, 1.417, 1.421, 1.422, 1.426, 1.429, 1.433, 1.436, 1.438, 1.441, 1.443, 1.445, 1.446, 1.445, 1.445, 1.443, 1.439, 1.437, 1.434, 1.431, 1.427, 1.424, 1.421, 1.419, 1.417, 1.417, 1.416, 1.416, 1.421,
2203+ 1.419, 1.417, 1.416, 1.416, 1.417, 1.421, 1.422, 1.424, 1.427, 1.429, 1.432, 1.436, 1.437, 1.439, 1.442, 1.443, 1.443, 1.441, 1.439, 1.437, 1.434, 1.431, 1.429, 1.425, 1.422, 1.421, 1.419, 1.417, 1.416, 1.416, 1.417, 1.419,
2204+ 1.421, 1.418, 1.416, 1.417, 1.418, 1.421, 1.421, 1.423, 1.424, 1.427, 1.429, 1.432, 1.434, 1.436, 1.438, 1.439, 1.439, 1.438, 1.436, 1.434, 1.431, 1.429, 1.426, 1.423, 1.422, 1.421, 1.418, 1.417, 1.417, 1.417, 1.417, 1.421,
2205+ 1.423, 1.419, 1.418, 1.418, 1.419, 1.419, 1.421, 1.422, 1.423, 1.424, 1.427, 1.429, 1.432, 1.432, 1.434, 1.435, 1.435, 1.434, 1.433, 1.431, 1.429, 1.426, 1.424, 1.422, 1.421, 1.419, 1.418, 1.417, 1.417, 1.417, 1.418, 1.421,
2206+ 1.425, 1.421, 1.419, 1.419, 1.419, 1.421, 1.421, 1.421, 1.421, 1.423, 1.424, 1.426, 1.428, 1.431, 1.431, 1.432, 1.432, 1.431, 1.431, 1.428, 1.425, 1.425, 1.422, 1.421, 1.419, 1.419, 1.418, 1.418, 1.418, 1.418, 1.419, 1.425,
2207+ 1.426, 1.422, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.421, 1.422, 1.424, 1.426, 1.427, 1.428, 1.429, 1.429, 1.429, 1.427, 1.424, 1.423, 1.422, 1.421, 1.419, 1.418, 1.418, 1.418, 1.418, 1.418, 1.418, 1.419, 1.426,
2208+ 1.428, 1.425, 1.421, 1.421, 1.421, 1.421, 1.421, 1.419, 1.419, 1.421, 1.422, 1.423, 1.424, 1.426, 1.426, 1.426, 1.426, 1.425, 1.424, 1.424, 1.422, 1.422, 1.421, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.423, 1.426,
2209+ 1.429, 1.427, 1.424, 1.422, 1.422, 1.422, 1.421, 1.421, 1.421, 1.422, 1.422, 1.422, 1.424, 1.425, 1.426, 1.426, 1.425, 1.425, 1.424, 1.423, 1.422, 1.422, 1.421, 1.421, 1.421, 1.421, 1.419, 1.419, 1.421, 1.422, 1.424, 1.426
2210+ ]
2211+ }
2212+ ],
2213+ "luminance_lut":
2214+ [
2215+ 2.964, 2.872, 2.691, 2.544, 2.416, 2.302, 2.196, 2.093, 2.006, 1.928, 1.852, 1.801, 1.769, 1.752, 1.743, 1.743, 1.743, 1.746, 1.759, 1.784, 1.824, 1.888, 1.968, 2.052, 2.149, 2.253, 2.359, 2.483, 2.626, 2.785, 2.988, 3.051,
2216+ 2.872, 2.748, 2.583, 2.442, 2.313, 2.201, 2.104, 2.012, 1.928, 1.852, 1.791, 1.742, 1.701, 1.671, 1.651, 1.643, 1.643, 1.659, 1.685, 1.721, 1.768, 1.824, 1.888, 1.971, 2.068, 2.152, 2.259, 2.381, 2.514, 2.669, 2.853, 2.988,
2217+ 2.761, 2.655, 2.497, 2.356, 2.226, 2.114, 2.012, 1.928, 1.845, 1.769, 1.707, 1.653, 1.612, 1.583, 1.562, 1.556, 1.556, 1.572, 1.599, 1.635, 1.681, 1.742, 1.806, 1.888, 1.971, 2.068, 2.175, 2.292, 2.431, 2.576, 2.747, 2.853,
2218+ 2.679, 2.571, 2.415, 2.275, 2.151, 2.035, 1.936, 1.845, 1.769, 1.689, 1.623, 1.572, 1.532, 1.501, 1.481, 1.473, 1.473, 1.492, 1.517, 1.556, 1.599, 1.659, 1.731, 1.806, 1.895, 1.992, 2.101, 2.218, 2.349, 2.493, 2.664, 2.753,
2219+ 2.609, 2.492, 2.339, 2.204, 2.079, 1.971, 1.865, 1.772, 1.689, 1.619, 1.551, 1.499, 1.457, 1.423, 1.405, 1.397, 1.397, 1.411, 1.438, 1.477, 1.525, 1.585, 1.659, 1.731, 1.823, 1.922, 2.027, 2.148, 2.275, 2.422, 2.586, 2.683,
2220+ 2.545, 2.426, 2.279, 2.139, 2.014, 1.903, 1.799, 1.702, 1.619, 1.551, 1.482, 1.427, 1.385, 1.353, 1.331, 1.325, 1.325, 1.338, 1.364, 1.403, 1.455, 1.522, 1.585, 1.665, 1.757, 1.858, 1.963, 2.081, 2.207, 2.356, 2.518, 2.615,
2221+ 2.489, 2.367, 2.218, 2.079, 1.956, 1.844, 1.739, 1.642, 1.559, 1.482, 1.426, 1.363, 1.321, 1.287, 1.266, 1.259, 1.259, 1.274, 1.301, 1.339, 1.395, 1.455, 1.523, 1.606, 1.697, 1.797, 1.905, 2.024, 2.154, 2.296, 2.455, 2.563,
2222+ 2.439, 2.316, 2.164, 2.028, 1.906, 1.793, 1.686, 1.589, 1.505, 1.427, 1.363, 1.308, 1.261, 1.229, 1.207, 1.202, 1.202, 1.215, 1.242, 1.283, 1.339, 1.395, 1.467, 1.551, 1.639, 1.742, 1.851, 1.972, 2.104, 2.243, 2.402, 2.515,
2223+ 2.398, 2.262, 2.116, 1.982, 1.861, 1.745, 1.639, 1.541, 1.456, 1.377, 1.308, 1.261, 1.208, 1.177, 1.157, 1.153, 1.153, 1.167, 1.191, 1.233, 1.283, 1.343, 1.418, 1.499, 1.591, 1.696, 1.804, 1.928, 2.057, 2.194, 2.352, 2.471,
2224+ 2.363, 2.222, 2.078, 1.942, 1.818, 1.706, 1.597, 1.501, 1.412, 1.334, 1.266, 1.208, 1.171, 1.134, 1.113, 1.109, 1.109, 1.123, 1.149, 1.191, 1.233, 1.296, 1.371, 1.457, 1.546, 1.654, 1.768, 1.886, 2.014, 2.155, 2.312, 2.436,
2225+ 2.334, 2.188, 2.042, 1.909, 1.783, 1.668, 1.561, 1.464, 1.374, 1.295, 1.228, 1.171, 1.134, 1.098, 1.076, 1.072, 1.072, 1.087, 1.119, 1.149, 1.196, 1.259, 1.332, 1.419, 1.514, 1.616, 1.728, 1.849, 1.981, 2.123, 2.276, 2.406,
2226+ 2.306, 2.159, 2.015, 1.881, 1.753, 1.639, 1.533, 1.434, 1.341, 1.263, 1.195, 1.139, 1.098, 1.074, 1.046, 1.044, 1.045, 1.059, 1.087, 1.119, 1.165, 1.227, 1.302, 1.387, 1.482, 1.586, 1.698, 1.819, 1.953, 2.093, 2.248, 2.383,
2227+ 2.291, 2.141, 1.991, 1.856, 1.732, 1.615, 1.508, 1.409, 1.318, 1.238, 1.171, 1.114, 1.074, 1.046, 1.027, 1.023, 1.025, 1.043, 1.059, 1.095, 1.142, 1.203, 1.278, 1.362, 1.456, 1.559, 1.673, 1.796, 1.928, 2.071, 2.225, 2.359,
2228+ 2.279, 2.118, 1.972, 1.839, 1.715, 1.599, 1.488, 1.389, 1.298, 1.219, 1.153, 1.097, 1.057, 1.027, 1.018, 1.009, 1.013, 1.025, 1.044, 1.078, 1.125, 1.186, 1.258, 1.342, 1.438, 1.541, 1.655, 1.779, 1.909, 2.053, 2.211, 2.351,
2229+ 2.274, 2.108, 1.963, 1.831, 1.706, 1.588, 1.477, 1.376, 1.288, 1.207, 1.139, 1.086, 1.049, 1.021, 1.005, 1.002, 1.004, 1.013, 1.035, 1.069, 1.116, 1.176, 1.246, 1.331, 1.427, 1.531, 1.645, 1.767, 1.899, 2.045, 2.197, 2.351,
2230+ 2.274, 2.106, 1.961, 1.827, 1.701, 1.585, 1.474, 1.374, 1.285, 1.206, 1.139, 1.085, 1.047, 1.019, 1.003, 1.001, 1.001, 1.012, 1.033, 1.067, 1.113, 1.173, 1.245, 1.329, 1.423, 1.529, 1.642, 1.765, 1.897, 2.042, 2.196, 2.349,
2231+ 2.274, 2.108, 1.961, 1.827, 1.701, 1.585, 1.474, 1.374, 1.285, 1.206, 1.139, 1.085, 1.047, 1.021, 1.005, 1.001, 1.004, 1.012, 1.033, 1.068, 1.113, 1.173, 1.246, 1.329, 1.423, 1.529, 1.642, 1.766, 1.897, 2.042, 2.198, 2.349,
2232+ 2.278, 2.116, 1.968, 1.833, 1.707, 1.591, 1.482, 1.382, 1.291, 1.214, 1.147, 1.091, 1.055, 1.028, 1.016, 1.006, 1.012, 1.018, 1.039, 1.074, 1.121, 1.182, 1.255, 1.339, 1.433, 1.538, 1.651, 1.777, 1.911, 2.051, 2.207, 2.351,
2233+ 2.283, 2.127, 1.979, 1.846, 1.723, 1.605, 1.496, 1.397, 1.309, 1.229, 1.162, 1.108, 1.067, 1.041, 1.027, 1.018, 1.018, 1.036, 1.051, 1.087, 1.136, 1.197, 1.269, 1.354, 1.448, 1.554, 1.664, 1.789, 1.922, 2.065, 2.222, 2.365,
2234+ 2.298, 2.145, 1.999, 1.865, 1.744, 1.627, 1.518, 1.421, 1.331, 1.251, 1.183, 1.129, 1.087, 1.065, 1.041, 1.036, 1.036, 1.051, 1.074, 1.107, 1.158, 1.219, 1.292, 1.378, 1.471, 1.575, 1.687, 1.809, 1.942, 2.085, 2.239, 2.378,
2235+ 2.315, 2.174, 2.024, 1.893, 1.768, 1.652, 1.543, 1.445, 1.355, 1.278, 1.211, 1.155, 1.116, 1.087, 1.066, 1.061, 1.061, 1.074, 1.105, 1.137, 1.186, 1.248, 1.322, 1.405, 1.498, 1.602, 1.713, 1.835, 1.965, 2.109, 2.267, 2.399,
2236+ 2.341, 2.206, 2.057, 1.923, 1.799, 1.685, 1.576, 1.479, 1.392, 1.312, 1.244, 1.187, 1.154, 1.116, 1.096, 1.092, 1.092, 1.106, 1.137, 1.173, 1.221, 1.282, 1.356, 1.439, 1.532, 1.635, 1.747, 1.869, 1.997, 2.141, 2.298, 2.425,
2237+ 2.375, 2.244, 2.098, 1.965, 1.839, 1.722, 1.614, 1.519, 1.434, 1.355, 1.288, 1.234, 1.187, 1.155, 1.136, 1.132, 1.132, 1.147, 1.173, 1.219, 1.263, 1.324, 1.398, 1.479, 1.571, 1.674, 1.784, 1.904, 2.035, 2.177, 2.336, 2.455,
2238+ 2.414, 2.286, 2.144, 2.011, 1.883, 1.767, 1.661, 1.566, 1.479, 1.401, 1.335, 1.286, 1.234, 1.202, 1.183, 1.178, 1.178, 1.195, 1.222, 1.263, 1.313, 1.372, 1.444, 1.526, 1.618, 1.718, 1.827, 1.951, 2.081, 2.221, 2.379, 2.498,
2239+ 2.463, 2.339, 2.191, 2.056, 1.931, 1.819, 1.712, 1.616, 1.529, 1.452, 1.392, 1.335, 1.286, 1.254, 1.235, 1.232, 1.232, 1.248, 1.275, 1.313, 1.371, 1.425, 1.495, 1.576, 1.671, 1.768, 1.877, 1.999, 2.128, 2.269, 2.428, 2.541,
2240+ 2.514, 2.396, 2.247, 2.112, 1.988, 1.873, 1.766, 1.671, 1.588, 1.513, 1.452, 1.392, 1.348, 1.316, 1.298, 1.292, 1.292, 1.307, 1.336, 1.373, 1.425, 1.486, 1.552, 1.636, 1.728, 1.826, 1.933, 2.051, 2.183, 2.327, 2.488, 2.587,
2241+ 2.573, 2.459, 2.307, 2.171, 2.049, 1.931, 1.828, 1.731, 1.649, 1.582, 1.513, 1.459, 1.415, 1.381, 1.363, 1.358, 1.358, 1.373, 1.399, 1.439, 1.486, 1.552, 1.617, 1.696, 1.787, 1.888, 1.995, 2.112, 2.244, 2.391, 2.552, 2.652,
2242+ 2.635, 2.525, 2.377, 2.239, 2.111, 1.996, 1.895, 1.799, 1.719, 1.649, 1.582, 1.531, 1.486, 1.454, 1.434, 1.429, 1.429, 1.444, 1.469, 1.507, 1.555, 1.617, 1.692, 1.766, 1.854, 1.954, 2.065, 2.181, 2.313, 2.459, 2.623, 2.722,
2243+ 2.714, 2.604, 2.452, 2.313, 2.188, 2.071, 1.966, 1.876, 1.799, 1.719, 1.656, 1.604, 1.562, 1.529, 1.511, 1.504, 1.504, 1.519, 1.544, 1.583, 1.632, 1.692, 1.766, 1.839, 1.929, 2.029, 2.138, 2.259, 2.391, 2.539, 2.712, 2.811,
2244+ 2.809, 2.698, 2.537, 2.396, 2.277, 2.163, 2.053, 1.965, 1.876, 1.799, 1.741, 1.688, 1.643, 1.613, 1.592, 1.586, 1.586, 1.601, 1.628, 1.666, 1.715, 1.773, 1.839, 1.927, 2.012, 2.111, 2.222, 2.342, 2.477, 2.625, 2.811, 2.926,
2245+ 2.921, 2.809, 2.637, 2.493, 2.376, 2.256, 2.149, 2.053, 1.966, 1.893, 1.832, 1.778, 1.736, 1.708, 1.687, 1.681, 1.681, 1.696, 1.721, 1.757, 1.806, 1.864, 1.929, 2.012, 2.106, 2.199, 2.313, 2.437, 2.577, 2.731, 2.926, 3.051,
2246+ 3.029, 2.921, 2.745, 2.591, 2.474, 2.355, 2.246, 2.146, 2.049, 1.966, 1.893, 1.832, 1.799, 1.776, 1.768, 1.768, 1.768, 1.771, 1.783, 1.809, 1.864, 1.929, 2.012, 2.097, 2.195, 2.297, 2.412, 2.539, 2.682, 2.846, 3.051, 3.123
2247+ ],
2248+ "sigma": 0.00463,
2249+ "sigma_Cb": 0.00149
2250+ }
2251+ },
2252+ {
2253+ "rpi.contrast":
2254+ {
2255+ "ce_enable": 1,
2256+ "lo_max": 1000,
2257+ "gamma_curve":
2258+ [
2259+ 0, 0,
2260+ 1024, 5040,
2261+ 2048, 9338,
2262+ 3072, 12356,
2263+ 4096, 15312,
2264+ 5120, 18051,
2265+ 6144, 20790,
2266+ 7168, 23193,
2267+ 8192, 25744,
2268+ 9216, 27942,
2269+ 10240, 30035,
2270+ 11264, 32005,
2271+ 12288, 33975,
2272+ 13312, 35815,
2273+ 14336, 37600,
2274+ 15360, 39168,
2275+ 16384, 40642,
2276+ 18432, 43379,
2277+ 20480, 45749,
2278+ 22528, 47753,
2279+ 24576, 49621,
2280+ 26624, 51253,
2281+ 28672, 52698,
2282+ 30720, 53796,
2283+ 32768, 54876,
2284+ 36864, 57012,
2285+ 40960, 58656,
2286+ 45056, 59954,
2287+ 49152, 61183,
2288+ 53248, 62355,
2289+ 57344, 63419,
2290+ 61440, 64476,
2291+ 65535, 65535
2292+ ]
2293+ }
2294+ },
2295+ {
2296+ "rpi.ccm":
2297+ {
2298+ "ccms": [
2299+ {
2300+ "ct": 2498,
2301+ "ccm":
2302+ [
2303+ 1.58731, -0.18011, -0.40721,
2304+ -0.60639, 2.03422, -0.42782,
2305+ -0.19612, -1.69203, 2.88815
2306+ ]
2307+ },
2308+ {
2309+ "ct": 2811,
2310+ "ccm":
2311+ [
2312+ 1.61593, -0.33164, -0.28429,
2313+ -0.55048, 1.97779, -0.42731,
2314+ -0.12042, -1.42847, 2.54889
2315+ ]
2316+ },
2317+ {
2318+ "ct": 2911,
2319+ "ccm":
2320+ [
2321+ 1.62771, -0.41282, -0.21489,
2322+ -0.57991, 2.04176, -0.46186,
2323+ -0.07613, -1.13359, 2.20972
2324+ ]
2325+ },
2326+ {
2327+ "ct": 2919,
2328+ "ccm":
2329+ [
2330+ 1.62661, -0.37736, -0.24925,
2331+ -0.52519, 1.95233, -0.42714,
2332+ -0.10842, -1.34929, 2.45771
2333+ ]
2334+ },
2335+ {
2336+ "ct": 3627,
2337+ "ccm":
2338+ [
2339+ 1.70385, -0.57231, -0.13154,
2340+ -0.47763, 1.85998, -0.38235,
2341+ -0.07467, -0.82678, 1.90145
2342+ ]
2343+ },
2344+ {
2345+ "ct": 4600,
2346+ "ccm":
2347+ [
2348+ 1.68486, -0.61085, -0.07402,
2349+ -0.41927, 2.04016, -0.62089,
2350+ -0.08633, -0.67672, 1.76305
2351+ ]
2352+ },
2353+ {
2354+ "ct": 5716,
2355+ "ccm":
2356+ [
2357+ 1.80439, -0.73699, -0.06739,
2358+ -0.36073, 1.83327, -0.47255,
2359+ -0.08378, -0.56403, 1.64781
2360+ ]
2361+ },
2362+ {
2363+ "ct": 8575,
2364+ "ccm":
2365+ [
2366+ 1.89357, -0.76427, -0.12931,
2367+ -0.27399, 2.15605, -0.88206,
2368+ -0.12035, -0.68256, 1.80292
2369+ ]
2370+ }
2371+ ]
2372+ }
2373+ },
2374+ {
2375+ "rpi.sharpen":
2376+ {
2377+ "threshold": 0.25,
2378+ "limit": 1.0,
2379+ "strength": 1.0
2380+ }
2381+ },
2382+ {
2383+ "rpi.hdr":
2384+ {
2385+ "Off":
2386+ {
2387+ "cadence": [ 0 ]
2388+ },
2389+ "MultiExposureUnmerged":
2390+ {
2391+ "cadence": [ 1, 2 ],
2392+ "channel_map":
2393+ {
2394+ "short": 1,
2395+ "long": 2
2396+ }
2397+ },
2398+ "SingleExposure":
2399+ {
2400+ "cadence": [ 1 ],
2401+ "channel_map":
2402+ {
2403+ "short": 1
2404+ },
2405+ "spatial_gain": 2.0,
2406+ "tonemap_enable": 1
2407+ },
2408+ "MultiExposure":
2409+ {
2410+ "cadence": [ 1, 2 ],
2411+ "channel_map":
2412+ {
2413+ "short": 1,
2414+ "long": 2
2415+ },
2416+ "stitch_enable": 1,
2417+ "spatial_gain": 2.0,
2418+ "tonemap_enable": 1
2419+ },
2420+ "Night":
2421+ {
2422+ "cadence": [ 3 ],
2423+ "channel_map":
2424+ {
2425+ "short": 3
2426+ },
2427+ "tonemap_enable": 1,
2428+ "tonemap":
2429+ [
2430+ 0, 0,
2431+ 5000, 20000,
2432+ 10000, 30000,
2433+ 20000, 47000,
2434+ 30000, 55000,
2435+ 65535, 65535
2436+ ]
2437+ }
2438+ }
2439+ }
2440+ ]
2441+}
2442\ No newline at end of file
2443--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2444+++ b/src/ipa/rpi/pisp/data/meson.build 2024-11-25 22:51:33.869906612 +0530
2445@@ -0,0 +1,21 @@
2446+# SPDX-License-Identifier: CC0-1.0
2447+
2448+conf_files = files([
2449+ 'imx219.json',
2450+ 'imx219_noir.json',
2451+ 'imx296.json',
2452+ 'imx296_mono.json',
2453+ 'imx477.json',
2454+ 'imx477_noir.json',
2455+ 'imx477_scientific.json',
2456+ 'imx708.json',
2457+ 'imx708_noir.json',
2458+ 'imx708_wide.json',
2459+ 'imx708_wide_noir.json',
2460+ 'ov5647.json',
2461+ 'ov5647_noir.json',
2462+ 'uncalibrated.json',
2463+])
2464+
2465+install_data(conf_files,
2466+ install_dir : ipa_data_dir / 'rpi' / 'pisp')
2467--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2468+++ b/src/ipa/rpi/pisp/data/uncalibrated.json 2024-11-25 21:08:37.638494238 +0530
2469@@ -0,0 +1,135 @@
2470+{
2471+ "version": 2.0,
2472+ "target": "pisp",
2473+ "algorithms": [
2474+ {
2475+ "rpi.black_level":
2476+ {
2477+ "black_level": 4096
2478+ }
2479+ },
2480+ {
2481+ "rpi.awb":
2482+ {
2483+ "use_derivatives": 0,
2484+ "bayes": 0
2485+ }
2486+ },
2487+ {
2488+ "rpi.agc":
2489+ {
2490+ "metering_modes":
2491+ {
2492+ "centre-weighted":
2493+ {
2494+ "weights":
2495+ [
2496+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
2497+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
2498+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
2499+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
2500+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
2501+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
2502+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
2503+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
2504+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
2505+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
2506+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
2507+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
2508+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
2509+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
2510+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
2511+ ]
2512+ }
2513+ },
2514+ "exposure_modes":
2515+ {
2516+ "normal":
2517+ {
2518+ "shutter": [ 100, 15000, 30000, 60000, 120000 ],
2519+ "gain": [ 1.0, 2.0, 3.0, 4.0, 6.0 ]
2520+ }
2521+ },
2522+ "constraint_modes":
2523+ {
2524+ "normal": [
2525+ {
2526+ "bound": "LOWER",
2527+ "q_lo": 0.98,
2528+ "q_hi": 1.0,
2529+ "y_target":
2530+ [
2531+ 0, 0.4,
2532+ 1000, 0.4
2533+ ]
2534+ }
2535+ ]
2536+ },
2537+ "y_target":
2538+ [
2539+ 0, 0.16,
2540+ 1000, 0.165,
2541+ 10000, 0.17
2542+ ]
2543+ }
2544+ },
2545+ {
2546+ "rpi.ccm":
2547+ {
2548+ "ccms": [
2549+ {
2550+ "ct": 4000,
2551+ "ccm":
2552+ [
2553+ 2.0, -1.0, 0.0,
2554+ -0.5, 2.0, -0.5,
2555+ 0, -1.0, 2.0
2556+ ]
2557+ }
2558+ ]
2559+ }
2560+ },
2561+ {
2562+ "rpi.contrast":
2563+ {
2564+ "ce_enable": 0,
2565+ "gamma_curve":
2566+ [
2567+ 0, 0,
2568+ 1024, 5040,
2569+ 2048, 9338,
2570+ 3072, 12356,
2571+ 4096, 15312,
2572+ 5120, 18051,
2573+ 6144, 20790,
2574+ 7168, 23193,
2575+ 8192, 25744,
2576+ 9216, 27942,
2577+ 10240, 30035,
2578+ 11264, 32005,
2579+ 12288, 33975,
2580+ 13312, 35815,
2581+ 14336, 37600,
2582+ 15360, 39168,
2583+ 16384, 40642,
2584+ 18432, 43379,
2585+ 20480, 45749,
2586+ 22528, 47753,
2587+ 24576, 49621,
2588+ 26624, 51253,
2589+ 28672, 52698,
2590+ 30720, 53796,
2591+ 32768, 54876,
2592+ 36864, 57012,
2593+ 40960, 58656,
2594+ 45056, 59954,
2595+ 49152, 61183,
2596+ 53248, 62355,
2597+ 57344, 63419,
2598+ 61440, 64476,
2599+ 65535, 65535
2600+ ]
2601+ }
2602+ }
2603+ ]
2604+}
2605\ No newline at end of file
2606--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2607+++ b/src/ipa/rpi/pisp/meson.build 2024-11-25 21:08:37.638494238 +0530
2608@@ -0,0 +1,49 @@
2609+# SPDX-License-Identifier: CC0-1.0
2610+
2611+ipa_name = 'ipa_rpi_pisp'
2612+
2613+pisp_ipa_deps = [
2614+ libcamera_private,
2615+ libatomic,
2616+ libpisp_dep,
2617+]
2618+
2619+pisp_ipa_libs = [
2620+ rpi_ipa_cam_helper_lib,
2621+ rpi_ipa_common_lib,
2622+ rpi_ipa_controller_lib
2623+]
2624+
2625+pisp_ipa_includes = [
2626+ ipa_includes,
2627+ libipa_includes,
2628+]
2629+
2630+pisp_ipa_sources = files([
2631+ 'pisp.cpp',
2632+])
2633+
2634+pisp_ipa_includes += include_directories('..')
2635+
2636+mod = shared_module(ipa_name, pisp_ipa_sources,
2637+ name_prefix : '',
2638+ include_directories : pisp_ipa_includes,
2639+ dependencies : pisp_ipa_deps,
2640+ link_with : libipa,
2641+ link_whole : pisp_ipa_libs,
2642+ install : true,
2643+ cpp_args : '-Wno-address-of-packed-member',
2644+ install_dir : ipa_install_dir)
2645+
2646+if ipa_sign_module
2647+ custom_target(ipa_name + '.so.sign',
2648+ input : mod,
2649+ output : ipa_name + '.so.sign',
2650+ command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
2651+ install : false,
2652+ build_by_default : true)
2653+endif
2654+
2655+subdir('data')
2656+
2657+ipa_names += ipa_name
2658--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2659+++ b/src/ipa/rpi/pisp/pisp.cpp 2024-11-25 21:08:37.638494238 +0530
2660@@ -0,0 +1,1068 @@
2661+/* SPDX-License-Identifier: BSD-2-Clause */
2662+/*
2663+ * Copyright (C) 2023, Raspberry Pi Ltd
2664+ *
2665+ * pisp.cpp - Raspberry Pi PiSP IPA
2666+ */
2667+#include <algorithm>
2668+#include <cmath>
2669+#include <mutex>
2670+#include <string>
2671+#include <sys/mman.h>
2672+#include <utility>
2673+#include <vector>
2674+
2675+#include <libcamera/base/log.h>
2676+#include <libcamera/control_ids.h>
2677+#include <libcamera/ipa/ipa_module_info.h>
2678+#include <libipa/pwl.h>
2679+
2680+#include "libpisp/backend/backend.hpp"
2681+#include "libpisp/frontend/frontend.hpp"
2682+
2683+#include "common/ipa_base.h"
2684+#include "controller/af_status.h"
2685+#include "controller/agc_algorithm.h"
2686+#include "controller/alsc_status.h"
2687+#include "controller/awb_algorithm.h"
2688+#include "controller/awb_status.h"
2689+#include "controller/black_level_algorithm.h"
2690+#include "controller/black_level_status.h"
2691+#include "controller/cac_status.h"
2692+#include "controller/ccm_status.h"
2693+#include "controller/contrast_status.h"
2694+#include "controller/denoise_algorithm.h"
2695+#include "controller/denoise_status.h"
2696+#include "controller/dpc_status.h"
2697+#include "controller/geq_status.h"
2698+#include "controller/hdr_status.h"
2699+#include "controller/lux_status.h"
2700+#include "controller/noise_status.h"
2701+#include "controller/saturation_status.h"
2702+#include "controller/sharpen_status.h"
2703+#include "controller/stitch_status.h"
2704+#include "controller/tonemap_status.h"
2705+
2706+using namespace std::literals::chrono_literals;
2707+
2708+namespace libcamera {
2709+
2710+LOG_DECLARE_CATEGORY(IPARPI)
2711+
2712+namespace {
2713+
2714+constexpr unsigned int NumLscCells = PISP_BE_LSC_GRID_SIZE;
2715+constexpr unsigned int NumLscVertexes = NumLscCells + 1;
2716+
2717+inline int32_t clampField(double value, std::size_t fieldBits, std::size_t fracBits = 0,
2718+ bool isSigned = false, const char *desc = nullptr)
2719+{
2720+ ASSERT(fracBits <= fieldBits && fieldBits <= 32);
2721+
2722+ int min = -(isSigned << (fieldBits - 1));
2723+ int max = (1 << (fieldBits - isSigned)) - 1;
2724+ int32_t val =
2725+ std::clamp<int32_t>(std::round(value * (1 << fracBits)), min, max);
2726+
2727+ if (desc && val / (1 << fracBits) != value)
2728+ LOG(IPARPI, Warning)
2729+ << desc << " rounded/clamped to " << val / (1 << fracBits);
2730+
2731+ return val;
2732+}
2733+
2734+int generateLut(const ipa::Pwl &pwl, uint32_t *lut, std::size_t lutSize,
2735+ unsigned int SlopeBits = 14, unsigned int PosBits = 16)
2736+{
2737+ if (pwl.empty())
2738+ return -EINVAL;
2739+
2740+ int lastY = 0;
2741+ for (unsigned int i = 0; i < lutSize; i++) {
2742+ int x, y;
2743+ if (i < 32)
2744+ x = i * 512;
2745+ else if (i < 48)
2746+ x = (i - 32) * 1024 + 16384;
2747+ else
2748+ x = std::min(65535u, (i - 48) * 2048 + 32768);
2749+
2750+ y = pwl.eval(x);
2751+ if (y < 0 || (i && y < lastY)) {
2752+ LOG(IPARPI, Error)
2753+ << "Malformed PWL for Gamma, disabling!";
2754+ return -1;
2755+ }
2756+
2757+ if (i) {
2758+ unsigned int slope = y - lastY;
2759+ if (slope >= (1u << SlopeBits)) {
2760+ slope = (1u << SlopeBits) - 1;
2761+ LOG(IPARPI, Info)
2762+ << ("Maximum Gamma slope exceeded, adjusting!");
2763+ y = lastY + slope;
2764+ }
2765+ lut[i - 1] |= slope << PosBits;
2766+ }
2767+
2768+ lut[i] = y;
2769+ lastY = y;
2770+ }
2771+
2772+ return 0;
2773+}
2774+
2775+void packLscLut(uint32_t packed[NumLscVertexes][NumLscVertexes],
2776+ double const rgb[3][NumLscVertexes][NumLscVertexes])
2777+{
2778+ for (unsigned int y = 0; y < NumLscVertexes; ++y) {
2779+ for (unsigned int x = 0; x < NumLscVertexes; ++x) {
2780+ /* Jointly encode RGB gains in one of 4 ranges: [0.5:1.5), [0:2), [0:4), [0:8) */
2781+ double lo = std::min({ rgb[0][y][x], rgb[1][y][x], rgb[2][y][x] });
2782+ double hi = std::max({ rgb[0][y][x], rgb[1][y][x], rgb[2][y][x] });
2783+ uint32_t range;
2784+ double scale, offset;
2785+ if (lo >= 0.5 && hi < 1.5) {
2786+ range = 0;
2787+ scale = 1024.0;
2788+ offset = -511.5;
2789+ } else if (hi < 2.0) {
2790+ range = 1;
2791+ scale = 512.0;
2792+ offset = 0.5;
2793+ } else if (hi < 4.0) {
2794+ range = 2;
2795+ scale = 256.0;
2796+ offset = 0.5;
2797+ } else {
2798+ range = 3;
2799+ scale = 128.0;
2800+ offset = 0.5;
2801+ }
2802+ int r = clampField(offset + scale * rgb[0][y][x], 10);
2803+ int g = clampField(offset + scale * rgb[1][y][x], 10);
2804+ int b = clampField(offset + scale * rgb[2][y][x], 10);
2805+ packed[y][x] = (range << 30) | (b << 20) | (g << 10) | r;
2806+ }
2807+ }
2808+}
2809+
2810+/*
2811+ * Resamples a srcW x srcH table with central sampling to destW x destH with
2812+ * corner sampling.
2813+ */
2814+void resampleTable(double *dest, int destW, int destH, double const *src,
2815+ int srcW, int srcH)
2816+{
2817+ /*
2818+ * Precalculate and cache the x sampling locations and phases to
2819+ * save recomputing them on every row.
2820+ */
2821+ ASSERT(destW > 1 && destH > 1 && destW <= 64);
2822+ int xLo[64], xHi[64];
2823+ double xf[64];
2824+ double x = -0.5, xInc = srcW / (destW - 1);
2825+ for (int i = 0; i < destW; i++, x += xInc) {
2826+ xLo[i] = floor(x);
2827+ xf[i] = x - xLo[i];
2828+ xHi[i] = xLo[i] < (srcW - 1) ? (xLo[i] + 1) : (srcW - 1);
2829+ xLo[i] = xLo[i] > 0 ? xLo[i] : 0;
2830+ }
2831+
2832+ /* Now march over the output table generating the new values. */
2833+ double y = -0.5, yInc = srcH / (destH - 1);
2834+ for (int j = 0; j < destH; j++, y += yInc) {
2835+ int yLo = floor(y);
2836+ double yf = y - yLo;
2837+ int yHi = yLo < (srcH - 1) ? (yLo + 1) : (srcH - 1);
2838+ yLo = yLo > 0 ? yLo : 0;
2839+ double const *rowAbove = src + yLo * srcW;
2840+ double const *rowBelow = src + yHi * srcW;
2841+ for (int i = 0; i < destW; i++) {
2842+ double above = rowAbove[xLo[i]] * (1 - xf[i]) +
2843+ rowAbove[xHi[i]] * xf[i];
2844+ double below = rowBelow[xLo[i]] * (1 - xf[i]) +
2845+ rowBelow[xHi[i]] * xf[i];
2846+ *(dest++) = above * (1 - yf) + below * yf;
2847+ }
2848+ }
2849+}
2850+
2851+} /* namespace */
2852+
2853+using ::libpisp::BackEnd;
2854+using ::libpisp::FrontEnd;
2855+
2856+namespace ipa::RPi {
2857+
2858+class IpaPiSP final : public IpaBase
2859+{
2860+public:
2861+ IpaPiSP()
2862+ : IpaBase(), fe_(nullptr), be_(nullptr)
2863+ {
2864+ }
2865+
2866+ ~IpaPiSP()
2867+ {
2868+ if (fe_)
2869+ munmap(fe_, sizeof(FrontEnd));
2870+ if (be_)
2871+ munmap(be_, sizeof(BackEnd));
2872+ }
2873+
2874+private:
2875+ int32_t platformInit(const InitParams &params, InitResult *result) override;
2876+ int32_t platformStart(const ControlList &controls, StartResult *result) override;
2877+ int32_t platformConfigure(const ConfigParams &params, ConfigResult *result) override;
2878+
2879+ void platformPrepareIsp(const PrepareParams &params,
2880+ RPiController::Metadata &rpiMetadata) override;
2881+ RPiController::StatisticsPtr platformProcessStats(Span<uint8_t> mem) override;
2882+
2883+ void handleControls(const ControlList &controls) override;
2884+
2885+ void applyWBG(const AwbStatus *awbStatus, const AgcPrepareStatus *agcStatus,
2886+ pisp_be_global_config &global);
2887+ void applyDgOnly(const AgcPrepareStatus *agcPrepareStatus, pisp_be_global_config &global);
2888+ void applyCAC(const CacStatus *cacStatus, pisp_be_global_config &global);
2889+ void applyContrast(const ContrastStatus *contrastStatus,
2890+ pisp_be_global_config &global);
2891+ void applyCCM(const CcmStatus *ccmStatus, pisp_be_global_config &global);
2892+ void applyBlackLevel(const BlackLevelStatus *blackLevelStatus,
2893+ pisp_be_global_config &global);
2894+ void applyLensShading(const AlscStatus *alscStatus,
2895+ pisp_be_global_config &global);
2896+ void applyDPC(const DpcStatus *dpcStatus, pisp_be_global_config &global);
2897+ void applySdn(const SdnStatus *sdnStatus, pisp_be_global_config &global);
2898+ void applyTdn(const TdnStatus *tdnStatus, const DeviceStatus *deviceStatus,
2899+ pisp_be_global_config &global);
2900+ void applyCdn(const CdnStatus *cdnStatus, pisp_be_global_config &global);
2901+ void applyGeq(const GeqStatus *geqStatus, pisp_be_global_config &global);
2902+ void applySaturation(const SaturationStatus *geqStatus,
2903+ pisp_be_global_config &global);
2904+ void applySharpen(const SharpenStatus *sharpenStatus,
2905+ pisp_be_global_config &global);
2906+ bool applyStitch(const StitchStatus *stitchStatus, const DeviceStatus *deviceStatus,
2907+ const AgcStatus *agcStatus, pisp_be_global_config &global);
2908+ void applyTonemap(const TonemapStatus *tonemapStatus,
2909+ pisp_be_global_config &global);
2910+ void applyFocusStats(const NoiseStatus *noiseStatus);
2911+ void applyAF(const struct AfStatus *afStatus, ControlList &lensCtrls);
2912+
2913+ void setDefaultConfig();
2914+ void setStatsAndDebin();
2915+ void setHistogramWeights();
2916+
2917+ /* Frontend/Backend objects passed in from the pipeline handler. */
2918+ SharedFD feFD_;
2919+ SharedFD beFD_;
2920+ FrontEnd *fe_;
2921+ BackEnd *be_;
2922+
2923+ /* TDN/HDR runtime need the following state. */
2924+ bool tdnReset_;
2925+ utils::Duration lastExposure_;
2926+ std::map<std::string, utils::Duration> lastStitchExposures_;
2927+ HdrStatus lastStitchHdrStatus_;
2928+};
2929+
2930+int32_t IpaPiSP::platformInit(const InitParams &params,
2931+ [[maybe_unused]] InitResult *result)
2932+{
2933+ const std::string &target = controller_.getTarget();
2934+ if (target != "pisp") {
2935+ LOG(IPARPI, Error)
2936+ << "Tuning data file target returned \"" << target << "\""
2937+ << ", expected \"pisp\"";
2938+ return -EINVAL;
2939+ }
2940+
2941+ /* Acquire the Frontend and Backend objects. */
2942+ feFD_ = std::move(params.fe);
2943+ beFD_ = std::move(params.be);
2944+
2945+ if (!feFD_.isValid() || !beFD_.isValid()) {
2946+ LOG(IPARPI, Error) << "Invalid FE/BE handles!";
2947+ return -ENODEV;
2948+ }
2949+
2950+ fe_ = static_cast<FrontEnd *>(mmap(nullptr, sizeof(FrontEnd),
2951+ PROT_READ | PROT_WRITE, MAP_SHARED,
2952+ feFD_.get(), 0));
2953+ be_ = static_cast<BackEnd *>(mmap(nullptr, sizeof(BackEnd),
2954+ PROT_READ | PROT_WRITE, MAP_SHARED,
2955+ beFD_.get(), 0));
2956+
2957+ if (!fe_ || !be_) {
2958+ LOG(IPARPI, Error) << "Unable to map FE/BE handles!";
2959+ return -ENODEV;
2960+ }
2961+
2962+ setDefaultConfig();
2963+
2964+ return 0;
2965+}
2966+
2967+int32_t IpaPiSP::platformStart([[maybe_unused]] const ControlList &controls,
2968+ [[maybe_unused]] StartResult *result)
2969+{
2970+ tdnReset_ = true;
2971+
2972+ /* Cause the stitch block to be reset correctly. */
2973+ lastStitchHdrStatus_ = HdrStatus();
2974+
2975+ return 0;
2976+}
2977+
2978+int32_t IpaPiSP::platformConfigure([[maybe_unused]] const ConfigParams &params,
2979+ [[maybe_unused]] ConfigResult *result)
2980+{
2981+ setStatsAndDebin();
2982+ return 0;
2983+}
2984+
2985+void IpaPiSP::platformPrepareIsp([[maybe_unused]] const PrepareParams &params,
2986+ RPiController::Metadata &rpiMetadata)
2987+{
2988+ std::scoped_lock<RPiController::Metadata> l(rpiMetadata);
2989+
2990+ pisp_be_global_config global;
2991+ be_->GetGlobal(global);
2992+
2993+ global.bayer_enables &= ~(PISP_BE_BAYER_ENABLE_BLC + PISP_BE_BAYER_ENABLE_WBG +
2994+ PISP_BE_BAYER_ENABLE_GEQ + PISP_BE_BAYER_ENABLE_LSC +
2995+ PISP_BE_BAYER_ENABLE_SDN + PISP_BE_BAYER_ENABLE_CDN +
2996+ PISP_BE_BAYER_ENABLE_TDN_OUTPUT + PISP_BE_BAYER_ENABLE_TDN_INPUT +
2997+ PISP_BE_BAYER_ENABLE_STITCH_INPUT + PISP_BE_BAYER_ENABLE_STITCH_OUTPUT +
2998+ PISP_BE_BAYER_ENABLE_STITCH + PISP_BE_BAYER_ENABLE_TONEMAP);
2999+ /* We leave the YCbCr and inverse conversion enabled in case of false colour or sharpening. */
3000+ global.rgb_enables &= ~(PISP_BE_RGB_ENABLE_GAMMA + PISP_BE_RGB_ENABLE_CCM +
3001+ PISP_BE_RGB_ENABLE_SHARPEN + PISP_BE_RGB_ENABLE_SAT_CONTROL);
3002+
3003+ NoiseStatus *noiseStatus = rpiMetadata.getLocked<NoiseStatus>("noise.status");
3004+ AgcPrepareStatus *agcPrepareStatus = rpiMetadata.getLocked<AgcPrepareStatus>("agc.prepare_status");
3005+
3006+ {
3007+ /* All Frontend config goes first, we do not want to hold the FE lock for long! */
3008+ std::scoped_lock<FrontEnd> lf(*fe_);
3009+
3010+ if (noiseStatus)
3011+ applyFocusStats(noiseStatus);
3012+
3013+ BlackLevelStatus *blackLevelStatus =
3014+ rpiMetadata.getLocked<BlackLevelStatus>("black_level.status");
3015+ if (blackLevelStatus)
3016+ applyBlackLevel(blackLevelStatus, global);
3017+
3018+ AwbStatus *awbStatus = rpiMetadata.getLocked<AwbStatus>("awb.status");
3019+ if (awbStatus && agcPrepareStatus) {
3020+ /* Applies digital gain as well. */
3021+ applyWBG(awbStatus, agcPrepareStatus, global);
3022+ } else if (agcPrepareStatus) {
3023+ /* Mono sensor fallback for digital gain. */
3024+ applyDgOnly(agcPrepareStatus, global);
3025+ }
3026+ }
3027+
3028+ CacStatus *cacStatus = rpiMetadata.getLocked<CacStatus>("cac.status");
3029+ if (cacStatus)
3030+ applyCAC(cacStatus, global);
3031+
3032+ ContrastStatus *contrastStatus =
3033+ rpiMetadata.getLocked<ContrastStatus>("contrast.status");
3034+ if (contrastStatus)
3035+ applyContrast(contrastStatus, global);
3036+
3037+ CcmStatus *ccmStatus = rpiMetadata.getLocked<CcmStatus>("ccm.status");
3038+ if (ccmStatus)
3039+ applyCCM(ccmStatus, global);
3040+
3041+ AlscStatus *alscStatus = rpiMetadata.getLocked<AlscStatus>("alsc.status");
3042+ if (alscStatus)
3043+ applyLensShading(alscStatus, global);
3044+
3045+ DpcStatus *dpcStatus = rpiMetadata.getLocked<DpcStatus>("dpc.status");
3046+ if (dpcStatus)
3047+ applyDPC(dpcStatus, global);
3048+
3049+ SdnStatus *sdnStatus = rpiMetadata.getLocked<SdnStatus>("sdn.status");
3050+ if (sdnStatus)
3051+ applySdn(sdnStatus, global);
3052+
3053+ DeviceStatus *deviceStatus = rpiMetadata.getLocked<DeviceStatus>("device.status");
3054+ TdnStatus *tdnStatus = rpiMetadata.getLocked<TdnStatus>("tdn.status");
3055+ if (tdnStatus && deviceStatus)
3056+ applyTdn(tdnStatus, deviceStatus, global);
3057+
3058+ CdnStatus *cdnStatus = rpiMetadata.getLocked<CdnStatus>("cdn.status");
3059+ if (cdnStatus)
3060+ applyCdn(cdnStatus, global);
3061+
3062+ GeqStatus *geqStatus = rpiMetadata.getLocked<GeqStatus>("geq.status");
3063+ if (geqStatus)
3064+ applyGeq(geqStatus, global);
3065+
3066+ SaturationStatus *saturationStatus =
3067+ rpiMetadata.getLocked<SaturationStatus>("saturation.status");
3068+ if (saturationStatus)
3069+ applySaturation(saturationStatus, global);
3070+
3071+ SharpenStatus *sharpenStatus = rpiMetadata.getLocked<SharpenStatus>("sharpen.status");
3072+ if (sharpenStatus)
3073+ applySharpen(sharpenStatus, global);
3074+
3075+ StitchStatus *stitchStatus = rpiMetadata.getLocked<StitchStatus>("stitch.status");
3076+ if (stitchStatus) {
3077+ /*
3078+ * Note that it's the *delayed* AGC status that contains the HDR mode/channel
3079+ * info that pertains to this frame!
3080+ */
3081+ AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.delayed_status");
3082+ /* prepareIsp() will fetch this value. Maybe pass it back differently? */
3083+ stitchSwapBuffers_ = applyStitch(stitchStatus, deviceStatus, agcStatus, global);
3084+ } else
3085+ lastStitchHdrStatus_ = HdrStatus();
3086+
3087+ TonemapStatus *tonemapStatus = rpiMetadata.getLocked<TonemapStatus>("tonemap.status");
3088+ if (tonemapStatus)
3089+ applyTonemap(tonemapStatus, global);
3090+
3091+ be_->SetGlobal(global);
3092+
3093+ /* Save this for TDN and HDR on the next frame. */
3094+ lastExposure_ = deviceStatus->shutterSpeed * deviceStatus->analogueGain;
3095+
3096+ /* Lens control */
3097+ const AfStatus *afStatus = rpiMetadata.getLocked<AfStatus>("af.status");
3098+ if (afStatus) {
3099+ ControlList lensctrls(lensCtrls_);
3100+ applyAF(afStatus, lensctrls);
3101+ if (!lensctrls.empty())
3102+ setLensControls.emit(lensctrls);
3103+ }
3104+}
3105+
3106+RPiController::StatisticsPtr IpaPiSP::platformProcessStats(Span<uint8_t> mem)
3107+{
3108+ using namespace RPiController;
3109+
3110+ const pisp_statistics *stats = reinterpret_cast<pisp_statistics *>(mem.data());
3111+
3112+ unsigned int i;
3113+ StatisticsPtr statistics =
3114+ std::make_unique<Statistics>(Statistics::AgcStatsPos::PostWb,
3115+ Statistics::ColourStatsPos::PreLsc);
3116+
3117+ /* RGB histograms are not used, so do not populate them. */
3118+ statistics->yHist = RPiController::Histogram(stats->agc.histogram,
3119+ PISP_AGC_STATS_NUM_BINS);
3120+
3121+ statistics->awbRegions.init({ PISP_AWB_STATS_SIZE, PISP_AWB_STATS_SIZE });
3122+ for (i = 0; i < statistics->awbRegions.numRegions(); i++)
3123+ statistics->awbRegions.set(i, { { stats->awb.zones[i].R_sum,
3124+ stats->awb.zones[i].G_sum,
3125+ stats->awb.zones[i].B_sum },
3126+ stats->awb.zones[i].counted, 0 });
3127+
3128+ /* AGC region sums only get collected on floating zones. */
3129+ statistics->agcRegions.init({ 0, 0 }, PISP_FLOATING_STATS_NUM_ZONES);
3130+ for (i = 0; i < statistics->agcRegions.numRegions(); i++)
3131+ statistics->agcRegions.setFloating(i,
3132+ { { 0, 0, 0, stats->agc.floating[i].Y_sum },
3133+ stats->agc.floating[i].counted, 0 });
3134+
3135+ statistics->focusRegions.init({ PISP_CDAF_STATS_SIZE, PISP_CDAF_STATS_SIZE });
3136+ for (i = 0; i < statistics->focusRegions.numRegions(); i++)
3137+ statistics->focusRegions.set(i, { stats->cdaf.foms[i] >> 20, 0, 0 });
3138+
3139+ if (statsMetadataOutput_) {
3140+ Span<const uint8_t> statsSpan(reinterpret_cast<const uint8_t *>(stats),
3141+ sizeof(pisp_statistics));
3142+ libcameraMetadata_.set(controls::rpi::PispStatsOutput, statsSpan);
3143+ }
3144+
3145+ return statistics;
3146+}
3147+
3148+void IpaPiSP::handleControls(const ControlList &controls)
3149+{
3150+ for (auto const &ctrl : controls) {
3151+ switch (ctrl.first) {
3152+ case controls::HDR_MODE:
3153+ case controls::AE_METERING_MODE:
3154+ setHistogramWeights();
3155+ break;
3156+
3157+ case controls::draft::NOISE_REDUCTION_MODE: {
3158+ RPiController::DenoiseAlgorithm *denoise = dynamic_cast<RPiController::DenoiseAlgorithm *>(
3159+ controller_.getAlgorithm("denoise"));
3160+
3161+ if (!denoise) {
3162+ LOG(IPARPI, Warning)
3163+ << "Could not set NOISE_REDUCTION_MODE - no Denoise algorithm";
3164+ return;
3165+ }
3166+
3167+ if (ctrl.second.get<int32_t>() == controls::draft::NoiseReductionModeOff)
3168+ denoise->setMode(RPiController::DenoiseMode::Off);
3169+ else
3170+ denoise->setMode(RPiController::DenoiseMode::ColourHighQuality);
3171+
3172+ break;
3173+ }
3174+ }
3175+ }
3176+}
3177+
3178+void IpaPiSP::applyWBG(const AwbStatus *awbStatus, const AgcPrepareStatus *agcPrepareStatus,
3179+ pisp_be_global_config &global)
3180+{
3181+ pisp_wbg_config wbg;
3182+ pisp_fe_rgby_config rgby = {};
3183+ double dg = agcPrepareStatus ? agcPrepareStatus->digitalGain : 1.0;
3184+
3185+ wbg.gain_r = clampField(dg * awbStatus->gainR, 14, 10);
3186+ wbg.gain_g = clampField(dg * awbStatus->gainG, 14, 10);
3187+ wbg.gain_b = clampField(dg * awbStatus->gainB, 14, 10);
3188+
3189+ /*
3190+ * The YCbCr conversion block should contain the appropriate YCbCr
3191+ * matrix. We should not rely on the CSC0 block as that might be
3192+ * programmed for RGB outputs.
3193+ */
3194+ pisp_be_ccm_config csc;
3195+ be_->GetYcbcr(csc);
3196+
3197+ /* The CSC coefficients already have the << 10 scaling applied. */
3198+ rgby.gain_r = clampField(csc.coeffs[0] * awbStatus->gainR, 14);
3199+ rgby.gain_g = clampField(csc.coeffs[1] * awbStatus->gainG, 14);
3200+ rgby.gain_b = clampField(csc.coeffs[2] * awbStatus->gainB, 14);
3201+
3202+ LOG(IPARPI, Debug) << "Applying WB R: " << awbStatus->gainR << " B: "
3203+ << awbStatus->gainB;
3204+
3205+ be_->SetWbg(wbg);
3206+ fe_->SetRGBY(rgby);
3207+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_WBG;
3208+}
3209+
3210+void IpaPiSP::applyDgOnly(const AgcPrepareStatus *agcPrepareStatus, pisp_be_global_config &global)
3211+{
3212+ pisp_wbg_config wbg;
3213+
3214+ wbg.gain_r = clampField(agcPrepareStatus->digitalGain, 14, 10);
3215+ wbg.gain_g = clampField(agcPrepareStatus->digitalGain, 14, 10);
3216+ wbg.gain_b = clampField(agcPrepareStatus->digitalGain, 14, 10);
3217+
3218+ LOG(IPARPI, Debug) << "Applying DG (only) : " << agcPrepareStatus->digitalGain;
3219+
3220+ be_->SetWbg(wbg);
3221+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_WBG;
3222+}
3223+
3224+void IpaPiSP::applyContrast(const ContrastStatus *contrastStatus,
3225+ pisp_be_global_config &global)
3226+{
3227+ pisp_be_gamma_config gamma;
3228+
3229+ if (!generateLut(contrastStatus->gammaCurve, gamma.lut, PISP_BE_GAMMA_LUT_SIZE)) {
3230+ be_->SetGamma(gamma);
3231+ global.rgb_enables |= PISP_BE_RGB_ENABLE_GAMMA;
3232+ }
3233+}
3234+
3235+void IpaPiSP::applyCCM(const CcmStatus *ccmStatus, pisp_be_global_config &global)
3236+{
3237+ pisp_be_ccm_config ccm = {};
3238+
3239+ for (unsigned int i = 0; i < 9; i++)
3240+ ccm.coeffs[i] = clampField(ccmStatus->matrix[i], 14, 10, true);
3241+
3242+ be_->SetCcm(ccm);
3243+ global.rgb_enables |= PISP_BE_RGB_ENABLE_CCM;
3244+}
3245+
3246+void IpaPiSP::applyCAC(const CacStatus *cacStatus, pisp_be_global_config &global)
3247+{
3248+ pisp_be_cac_config cac = {};
3249+
3250+ for (int x = 0; x < PISP_BE_CAC_GRID_SIZE + 1; x++) {
3251+ for (int y = 0; y < PISP_BE_CAC_GRID_SIZE + 1; y++) {
3252+ cac.lut[y][x][0][0] = clampField(cacStatus->lutRx[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
3253+ cac.lut[y][x][0][1] = clampField(cacStatus->lutRy[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
3254+ cac.lut[y][x][1][0] = clampField(cacStatus->lutBx[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
3255+ cac.lut[y][x][1][1] = clampField(cacStatus->lutBy[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
3256+ }
3257+ }
3258+
3259+ be_->SetCac(cac);
3260+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_CAC;
3261+}
3262+
3263+void IpaPiSP::applyBlackLevel(const BlackLevelStatus *blackLevelStatus, pisp_be_global_config &global)
3264+{
3265+ uint16_t minBlackLevel = std::min({ blackLevelStatus->blackLevelR, blackLevelStatus->blackLevelG,
3266+ blackLevelStatus->blackLevelB });
3267+ pisp_bla_config bla;
3268+
3269+ /*
3270+ * Set the Frontend to adjust the black level to the smallest black level