summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/ipu3/algorithms/af.cpp3
-rw-r--r--src/ipa/ipu3/algorithms/agc.cpp44
-rw-r--r--src/ipa/ipu3/algorithms/agc.h4
-rw-r--r--src/ipa/ipu3/algorithms/awb.cpp69
-rw-r--r--src/ipa/ipu3/algorithms/awb.h19
-rw-r--r--src/ipa/ipu3/algorithms/blc.cpp6
-rw-r--r--src/ipa/ipu3/ipa_context.cpp12
-rw-r--r--src/ipa/ipu3/ipa_context.h9
-rw-r--r--src/ipa/ipu3/ipu3-ipa-design-guide.rst14
-rw-r--r--src/ipa/ipu3/ipu3.cpp56
-rw-r--r--src/ipa/libipa/agc_mean_luminance.cpp65
-rw-r--r--src/ipa/libipa/agc_mean_luminance.h2
-rw-r--r--src/ipa/libipa/awb.cpp265
-rw-r--r--src/ipa/libipa/awb.h66
-rw-r--r--src/ipa/libipa/awb_bayes.cpp505
-rw-r--r--src/ipa/libipa/awb_bayes.h59
-rw-r--r--src/ipa/libipa/awb_grey.cpp114
-rw-r--r--src/ipa/libipa/awb_grey.h36
-rw-r--r--src/ipa/libipa/camera_sensor_helper.cpp230
-rw-r--r--src/ipa/libipa/camera_sensor_helper.h18
-rw-r--r--src/ipa/libipa/colours.cpp81
-rw-r--r--src/ipa/libipa/colours.h23
-rw-r--r--src/ipa/libipa/exposure_mode_helper.cpp165
-rw-r--r--src/ipa/libipa/exposure_mode_helper.h14
-rw-r--r--src/ipa/libipa/fc_queue.h21
-rw-r--r--src/ipa/libipa/fixedpoint.cpp (renamed from src/ipa/rkisp1/utils.cpp)10
-rw-r--r--src/ipa/libipa/fixedpoint.h (renamed from src/ipa/rkisp1/utils.h)7
-rw-r--r--src/ipa/libipa/histogram.cpp48
-rw-r--r--src/ipa/libipa/histogram.h2
-rw-r--r--src/ipa/libipa/interpolator.cpp163
-rw-r--r--src/ipa/libipa/interpolator.h136
-rw-r--r--src/ipa/libipa/lsc_polynomial.cpp81
-rw-r--r--src/ipa/libipa/lsc_polynomial.h105
-rw-r--r--src/ipa/libipa/lux.cpp173
-rw-r--r--src/ipa/libipa/lux.h41
-rw-r--r--src/ipa/libipa/matrix.cpp149
-rw-r--r--src/ipa/libipa/matrix.h204
-rw-r--r--src/ipa/libipa/matrix_interpolator.cpp110
-rw-r--r--src/ipa/libipa/matrix_interpolator.h122
-rw-r--r--src/ipa/libipa/meson.build22
-rw-r--r--src/ipa/libipa/pwl.cpp7
-rw-r--r--src/ipa/libipa/pwl.h6
-rw-r--r--src/ipa/libipa/vector.cpp168
-rw-r--r--src/ipa/libipa/vector.h219
-rw-r--r--src/ipa/mali-c55/algorithms/agc.cpp410
-rw-r--r--src/ipa/mali-c55/algorithms/agc.h81
-rw-r--r--src/ipa/mali-c55/algorithms/algorithm.h39
-rw-r--r--src/ipa/mali-c55/algorithms/awb.cpp230
-rw-r--r--src/ipa/mali-c55/algorithms/awb.h40
-rw-r--r--src/ipa/mali-c55/algorithms/blc.cpp140
-rw-r--r--src/ipa/mali-c55/algorithms/blc.h42
-rw-r--r--src/ipa/mali-c55/algorithms/lsc.cpp216
-rw-r--r--src/ipa/mali-c55/algorithms/lsc.h45
-rw-r--r--src/ipa/mali-c55/algorithms/meson.build8
-rw-r--r--src/ipa/mali-c55/data/imx415.yaml325
-rw-r--r--src/ipa/mali-c55/data/meson.build9
-rw-r--r--src/ipa/mali-c55/data/uncalibrated.yaml7
-rw-r--r--src/ipa/mali-c55/ipa_context.cpp101
-rw-r--r--src/ipa/mali-c55/ipa_context.h90
-rw-r--r--src/ipa/mali-c55/mali-c55.cpp399
-rw-r--r--src/ipa/mali-c55/meson.build33
-rw-r--r--src/ipa/mali-c55/module.h27
-rw-r--r--src/ipa/rkisp1/algorithms/agc.cpp297
-rw-r--r--src/ipa/rkisp1/algorithms/agc.h7
-rw-r--r--src/ipa/rkisp1/algorithms/awb.cpp381
-rw-r--r--src/ipa/rkisp1/algorithms/awb.h15
-rw-r--r--src/ipa/rkisp1/algorithms/blc.cpp60
-rw-r--r--src/ipa/rkisp1/algorithms/blc.h8
-rw-r--r--src/ipa/rkisp1/algorithms/ccm.cpp50
-rw-r--r--src/ipa/rkisp1/algorithms/ccm.h13
-rw-r--r--src/ipa/rkisp1/algorithms/cproc.cpp14
-rw-r--r--src/ipa/rkisp1/algorithms/cproc.h2
-rw-r--r--src/ipa/rkisp1/algorithms/dpcc.cpp10
-rw-r--r--src/ipa/rkisp1/algorithms/dpcc.h2
-rw-r--r--src/ipa/rkisp1/algorithms/dpf.cpp31
-rw-r--r--src/ipa/rkisp1/algorithms/dpf.h2
-rw-r--r--src/ipa/rkisp1/algorithms/filter.cpp56
-rw-r--r--src/ipa/rkisp1/algorithms/filter.h2
-rw-r--r--src/ipa/rkisp1/algorithms/goc.cpp17
-rw-r--r--src/ipa/rkisp1/algorithms/goc.h2
-rw-r--r--src/ipa/rkisp1/algorithms/gsl.cpp20
-rw-r--r--src/ipa/rkisp1/algorithms/gsl.h2
-rw-r--r--src/ipa/rkisp1/algorithms/lsc.cpp436
-rw-r--r--src/ipa/rkisp1/algorithms/lsc.h17
-rw-r--r--src/ipa/rkisp1/algorithms/lux.cpp76
-rw-r--r--src/ipa/rkisp1/algorithms/lux.h36
-rw-r--r--src/ipa/rkisp1/algorithms/meson.build1
-rw-r--r--src/ipa/rkisp1/ipa_context.cpp87
-rw-r--r--src/ipa/rkisp1/ipa_context.h57
-rw-r--r--src/ipa/rkisp1/meson.build2
-rw-r--r--src/ipa/rkisp1/module.h3
-rw-r--r--src/ipa/rkisp1/params.cpp222
-rw-r--r--src/ipa/rkisp1/params.h163
-rw-r--r--src/ipa/rkisp1/rkisp1.cpp85
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper.cpp14
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper.h9
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx219.cpp2
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx283.cpp61
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx290.cpp19
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx296.cpp11
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx415.cpp64
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx477.cpp15
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx519.cpp15
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx708.cpp17
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp15
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp12
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp54
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp14
-rw-r--r--src/ipa/rpi/cam_helper/meson.build3
-rw-r--r--src/ipa/rpi/common/ipa_base.cpp213
-rw-r--r--src/ipa/rpi/controller/agc_algorithm.h14
-rw-r--r--src/ipa/rpi/controller/agc_status.h4
-rw-r--r--src/ipa/rpi/controller/awb_algorithm.h1
-rw-r--r--src/ipa/rpi/controller/camera_mode.h6
-rw-r--r--src/ipa/rpi/controller/controller.cpp2
-rw-r--r--src/ipa/rpi/controller/controller.h1
-rw-r--r--src/ipa/rpi/controller/device_status.cpp2
-rw-r--r--src/ipa/rpi/controller/device_status.h8
-rw-r--r--src/ipa/rpi/controller/histogram.cpp6
-rw-r--r--src/ipa/rpi/controller/metadata.h23
-rw-r--r--src/ipa/rpi/controller/rpi/af.cpp2
-rw-r--r--src/ipa/rpi/controller/rpi/agc.cpp62
-rw-r--r--src/ipa/rpi/controller/rpi/agc.h14
-rw-r--r--src/ipa/rpi/controller/rpi/agc_channel.cpp240
-rw-r--r--src/ipa/rpi/controller/rpi/agc_channel.h22
-rw-r--r--src/ipa/rpi/controller/rpi/alsc.cpp18
-rw-r--r--src/ipa/rpi/controller/rpi/awb.cpp55
-rw-r--r--src/ipa/rpi/controller/rpi/awb.h5
-rw-r--r--src/ipa/rpi/controller/rpi/black_level.cpp1
-rw-r--r--src/ipa/rpi/controller/rpi/ccm.cpp65
-rw-r--r--src/ipa/rpi/controller/rpi/ccm.h35
-rw-r--r--src/ipa/rpi/controller/rpi/lux.cpp9
-rw-r--r--src/ipa/rpi/controller/rpi/lux.h2
-rw-r--r--src/ipa/rpi/controller/rpi/noise.cpp4
-rw-r--r--src/ipa/rpi/controller/rpi/sharpen.cpp4
-rw-r--r--src/ipa/rpi/pisp/data/imx219.json1187
-rw-r--r--src/ipa/rpi/pisp/data/imx219_noir.json1112
-rw-r--r--src/ipa/rpi/pisp/data/imx290.json341
-rw-r--r--src/ipa/rpi/pisp/data/imx296.json1194
-rw-r--r--src/ipa/rpi/pisp/data/imx296_16mm.json1247
-rw-r--r--src/ipa/rpi/pisp/data/imx296_6mm.json1247
-rw-r--r--src/ipa/rpi/pisp/data/imx296_mono.json960
-rw-r--r--src/ipa/rpi/pisp/data/imx378.json634
-rwxr-xr-xsrc/ipa/rpi/pisp/data/imx415.json1159
-rw-r--r--src/ipa/rpi/pisp/data/imx462.json342
-rw-r--r--src/ipa/rpi/pisp/data/imx477.json1186
-rw-r--r--src/ipa/rpi/pisp/data/imx477_16mm.json1240
-rw-r--r--src/ipa/rpi/pisp/data/imx477_6mm.json1240
-rw-r--r--src/ipa/rpi/pisp/data/imx477_noir.json1148
-rw-r--r--src/ipa/rpi/pisp/data/imx477_scientific.json546
-rw-r--r--src/ipa/rpi/pisp/data/imx519.json634
-rw-r--r--src/ipa/rpi/pisp/data/imx708.json1270
-rw-r--r--src/ipa/rpi/pisp/data/imx708_noir.json1233
-rw-r--r--src/ipa/rpi/pisp/data/imx708_wide.json1293
-rw-r--r--src/ipa/rpi/pisp/data/imx708_wide_noir.json1148
-rw-r--r--src/ipa/rpi/pisp/data/meson.build29
-rw-r--r--src/ipa/rpi/pisp/data/ov5647.json1186
-rw-r--r--src/ipa/rpi/pisp/data/ov5647_noir.json1121
-rwxr-xr-xsrc/ipa/rpi/pisp/data/ov64a40.json1133
-rw-r--r--src/ipa/rpi/pisp/data/ov9281_mono.json215
-rw-r--r--src/ipa/rpi/pisp/data/se327m12.json639
-rw-r--r--src/ipa/rpi/pisp/data/uncalibrated.json135
-rw-r--r--src/ipa/rpi/pisp/meson.build49
-rw-r--r--src/ipa/rpi/pisp/pisp.cpp1068
-rw-r--r--src/ipa/rpi/vc4/data/imx283.json313
-rw-r--r--src/ipa/rpi/vc4/data/imx327.json215
-rwxr-xr-xsrc/ipa/rpi/vc4/data/imx415.json413
-rw-r--r--src/ipa/rpi/vc4/data/imx462.json215
-rw-r--r--src/ipa/rpi/vc4/data/meson.build5
-rw-r--r--src/ipa/rpi/vc4/data/ov7251_mono.json136
-rw-r--r--src/ipa/simple/algorithms/agc.cpp146
-rw-r--r--src/ipa/simple/algorithms/agc.h33
-rw-r--r--src/ipa/simple/algorithms/algorithm.h22
-rw-r--r--src/ipa/simple/algorithms/awb.cpp100
-rw-r--r--src/ipa/simple/algorithms/awb.h36
-rw-r--r--src/ipa/simple/algorithms/blc.cpp107
-rw-r--r--src/ipa/simple/algorithms/blc.h38
-rw-r--r--src/ipa/simple/algorithms/ccm.cpp76
-rw-r--r--src/ipa/simple/algorithms/ccm.h43
-rw-r--r--src/ipa/simple/algorithms/lut.cpp159
-rw-r--r--src/ipa/simple/algorithms/lut.h46
-rw-r--r--src/ipa/simple/algorithms/meson.build9
-rw-r--r--src/ipa/simple/black_level.cpp88
-rw-r--r--src/ipa/simple/black_level.h29
-rw-r--r--src/ipa/simple/data/uncalibrated.yaml14
-rw-r--r--src/ipa/simple/ipa_context.cpp102
-rw-r--r--src/ipa/simple/ipa_context.h101
-rw-r--r--src/ipa/simple/meson.build9
-rw-r--r--src/ipa/simple/module.h30
-rw-r--r--src/ipa/simple/soft_simple.cpp324
-rw-r--r--src/ipa/vimc/vimc.cpp7
191 files changed, 35164 insertions, 2822 deletions
diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp
index 29eb7355..cf68fb59 100644
--- a/src/ipa/ipu3/algorithms/af.cpp
+++ b/src/ipa/ipu3/algorithms/af.cpp
@@ -11,7 +11,6 @@
#include <chrono>
#include <cmath>
#include <fcntl.h>
-#include <numeric>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -23,8 +22,6 @@
#include <libcamera/ipa/core_ipa_interface.h>
-#include "libipa/histogram.h"
-
/**
* \file af.h
*/
diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index 0e0114f6..39d0aebb 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -9,14 +9,15 @@
#include <algorithm>
#include <chrono>
-#include <cmath>
#include <libcamera/base/log.h>
#include <libcamera/base/utils.h>
#include <libcamera/control_ids.h>
+
#include <libcamera/ipa/core_ipa_interface.h>
+#include "libipa/colours.h"
#include "libipa/histogram.h"
/**
@@ -33,7 +34,7 @@ namespace ipa::ipu3::algorithms {
* \class Agc
* \brief A mean-based auto-exposure algorithm
*
- * This algorithm calculates a shutter time and an analogue gain so that the
+ * This algorithm calculates an exposure time and an analogue gain so that the
* average value of the green channel of the brightest 2% of pixels approaches
* 0.5. The AWB gains are not used here, and all cells in the grid have the same
* weight, like an average-metering case. In this metering mode, the camera uses
@@ -51,13 +52,13 @@ LOG_DEFINE_CATEGORY(IPU3Agc)
static constexpr double kMinAnalogueGain = 1.0;
/* \todo Honour the FrameDurationLimits control instead of hardcoding a limit */
-static constexpr utils::Duration kMaxShutterSpeed = 60ms;
+static constexpr utils::Duration kMaxExposureTime = 60ms;
/* Histogram constants */
static constexpr uint32_t knumHistogramBins = 256;
Agc::Agc()
- : minShutterSpeed_(0s), maxShutterSpeed_(0s)
+ : minExposureTime_(0s), maxExposureTime_(0s)
{
}
@@ -100,9 +101,9 @@ int Agc::configure(IPAContext &context,
stride_ = configuration.grid.stride;
bdsGrid_ = configuration.grid.bdsGrid;
- minShutterSpeed_ = configuration.agc.minShutterSpeed;
- maxShutterSpeed_ = std::min(configuration.agc.maxShutterSpeed,
- kMaxShutterSpeed);
+ minExposureTime_ = configuration.agc.minExposureTime;
+ maxExposureTime_ = std::min(configuration.agc.maxExposureTime,
+ kMaxExposureTime);
minAnalogueGain_ = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);
maxAnalogueGain_ = configuration.agc.maxAnalogueGain;
@@ -115,7 +116,7 @@ int Agc::configure(IPAContext &context,
context.activeState.agc.exposureMode = exposureModeHelpers().begin()->first;
/* \todo Run this again when FrameDurationLimits is passed in */
- setLimits(minShutterSpeed_, maxShutterSpeed_, minAnalogueGain_,
+ setLimits(minExposureTime_, maxExposureTime_, minAnalogueGain_,
maxAnalogueGain_);
resetFrameCount();
@@ -177,18 +178,16 @@ Histogram Agc::parseStatistics(const ipu3_uapi_stats_3a *stats,
*/
double Agc::estimateLuminance(double gain) const
{
- double redSum = 0, greenSum = 0, blueSum = 0;
+ RGB<double> sum{ 0.0 };
for (unsigned int i = 0; i < rgbTriples_.size(); i++) {
- redSum += std::min(std::get<0>(rgbTriples_[i]) * gain, 255.0);
- greenSum += std::min(std::get<1>(rgbTriples_[i]) * gain, 255.0);
- blueSum += std::min(std::get<2>(rgbTriples_[i]) * gain, 255.0);
+ sum.r() += std::min(std::get<0>(rgbTriples_[i]) * gain, 255.0);
+ sum.g() += std::min(std::get<1>(rgbTriples_[i]) * gain, 255.0);
+ sum.b() += std::min(std::get<2>(rgbTriples_[i]) * gain, 255.0);
}
- double ySum = redSum * rGain_ * 0.299
- + greenSum * gGain_ * 0.587
- + blueSum * bGain_ * 0.114;
-
+ RGB<double> gains{{ rGain_, gGain_, bGain_ }};
+ double ySum = rec601LuminanceFromRGB(sum * gains);
return ySum / (bdsGrid_.height * bdsGrid_.width) / 255;
}
@@ -222,20 +221,20 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
double analogueGain = frameContext.sensor.gain;
utils::Duration effectiveExposureValue = exposureTime * analogueGain;
- utils::Duration shutterTime;
+ utils::Duration newExposureTime;
double aGain, dGain;
- std::tie(shutterTime, aGain, dGain) =
+ std::tie(newExposureTime, aGain, dGain) =
calculateNewEv(context.activeState.agc.constraintMode,
context.activeState.agc.exposureMode, hist,
effectiveExposureValue);
LOG(IPU3Agc, Debug)
- << "Divided up shutter, analogue gain and digital gain are "
- << shutterTime << ", " << aGain << " and " << dGain;
+ << "Divided up exposure time, analogue gain and digital gain are "
+ << newExposureTime << ", " << aGain << " and " << dGain;
IPAActiveState &activeState = context.activeState;
- /* Update the estimated exposure and gain. */
- activeState.agc.exposure = shutterTime / context.configuration.sensor.lineDuration;
+ /* Update the estimated exposure time and gain. */
+ activeState.agc.exposure = newExposureTime / context.configuration.sensor.lineDuration;
activeState.agc.gain = aGain;
metadata.set(controls::AnalogueGain, frameContext.sensor.gain);
@@ -247,7 +246,6 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
utils::Duration frameDuration = context.configuration.sensor.lineDuration
* vTotal;
metadata.set(controls::FrameDuration, frameDuration.get<std::micro>());
-
}
REGISTER_IPA_ALGORITHM(Agc, "Agc")
diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h
index 411f4da0..890c271b 100644
--- a/src/ipa/ipu3/algorithms/agc.h
+++ b/src/ipa/ipu3/algorithms/agc.h
@@ -42,8 +42,8 @@ private:
Histogram parseStatistics(const ipu3_uapi_stats_3a *stats,
const ipu3_uapi_grid_config &grid);
- utils::Duration minShutterSpeed_;
- utils::Duration maxShutterSpeed_;
+ utils::Duration minExposureTime_;
+ utils::Duration maxExposureTime_;
double minAnalogueGain_;
double maxAnalogueGain_;
diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
index 4d6e3994..55de05d9 100644
--- a/src/ipa/ipu3/algorithms/awb.cpp
+++ b/src/ipa/ipu3/algorithms/awb.cpp
@@ -13,6 +13,8 @@
#include <libcamera/control_ids.h>
+#include "libipa/colours.h"
+
/**
* \file awb.h
*/
@@ -301,51 +303,24 @@ void Awb::prepare(IPAContext &context,
params->use.acc_ccm = 1;
}
-/**
- * The function estimates the correlated color temperature using
- * from RGB color space input.
- * In physics and color science, the Planckian locus or black body locus is
- * the path or locus that the color of an incandescent black body would take
- * in a particular chromaticity space as the blackbody temperature changes.
- *
- * If a narrow range of color temperatures is considered (those encapsulating
- * daylight being the most practical case) one can approximate the Planckian
- * locus in order to calculate the CCT in terms of chromaticity coordinates.
- *
- * More detailed information can be found in:
- * https://en.wikipedia.org/wiki/Color_temperature#Approximation
- */
-uint32_t Awb::estimateCCT(double red, double green, double blue)
-{
- /* Convert the RGB values to CIE tristimulus values (XYZ) */
- double X = (-0.14282) * (red) + (1.54924) * (green) + (-0.95641) * (blue);
- double Y = (-0.32466) * (red) + (1.57837) * (green) + (-0.73191) * (blue);
- double Z = (-0.68202) * (red) + (0.77073) * (green) + (0.56332) * (blue);
-
- /* Calculate the normalized chromaticity values */
- double x = X / (X + Y + Z);
- double y = Y / (X + Y + Z);
-
- /* Calculate CCT */
- double n = (x - 0.3320) / (0.1858 - y);
- return 449 * n * n * n + 3525 * n * n + 6823.3 * n + 5520.33;
-}
-
/* Generate an RGB vector with the average values for each zone */
void Awb::generateZones()
{
zones_.clear();
for (unsigned int i = 0; i < kAwbStatsSizeX * kAwbStatsSizeY; i++) {
- RGB zone;
double counted = awbStats_[i].counted;
if (counted >= cellsPerZoneThreshold_) {
- zone.G = awbStats_[i].sum.green / counted;
- if (zone.G >= kMinGreenLevelInZone) {
- zone.R = awbStats_[i].sum.red / counted;
- zone.B = awbStats_[i].sum.blue / counted;
+ RGB<double> zone{{
+ static_cast<double>(awbStats_[i].sum.red),
+ static_cast<double>(awbStats_[i].sum.green),
+ static_cast<double>(awbStats_[i].sum.blue)
+ }};
+
+ zone /= counted;
+
+ if (zone.g() >= kMinGreenLevelInZone)
zones_.push_back(zone);
- }
}
}
}
@@ -412,32 +387,32 @@ void Awb::awbGreyWorld()
* consider some variations, such as normalising all the zones first, or
* doing an L2 average etc.
*/
- std::vector<RGB> &redDerivative(zones_);
- std::vector<RGB> blueDerivative(redDerivative);
+ std::vector<RGB<double>> &redDerivative(zones_);
+ std::vector<RGB<double>> blueDerivative(redDerivative);
std::sort(redDerivative.begin(), redDerivative.end(),
- [](RGB const &a, RGB const &b) {
- return a.G * b.R < b.G * a.R;
+ [](RGB<double> const &a, RGB<double> const &b) {
+ return a.g() * b.r() < b.g() * a.r();
});
std::sort(blueDerivative.begin(), blueDerivative.end(),
- [](RGB const &a, RGB const &b) {
- return a.G * b.B < b.G * a.B;
+ [](RGB<double> const &a, RGB<double> const &b) {
+ return a.g() * b.b() < b.g() * a.b();
});
/* Average the middle half of the values. */
int discard = redDerivative.size() / 4;
- RGB sumRed(0, 0, 0);
- RGB sumBlue(0, 0, 0);
+ RGB<double> sumRed{ 0.0 };
+ RGB<double> sumBlue{ 0.0 };
for (auto ri = redDerivative.begin() + discard,
bi = blueDerivative.begin() + discard;
ri != redDerivative.end() - discard; ri++, bi++)
sumRed += *ri, sumBlue += *bi;
- double redGain = sumRed.G / (sumRed.R + 1),
- blueGain = sumBlue.G / (sumBlue.B + 1);
+ double redGain = sumRed.g() / (sumRed.r() + 1),
+ blueGain = sumBlue.g() / (sumBlue.b() + 1);
/* Color temperature is not relevant in Grey world but still useful to estimate it :-) */
- asyncResults_.temperatureK = estimateCCT(sumRed.R, sumRed.G, sumBlue.B);
+ asyncResults_.temperatureK = estimateCCT({{ sumRed.r(), sumRed.g(), sumBlue.b() }});
/*
* Gain values are unsigned integer value ranging [0, 8) with 13 bit
diff --git a/src/ipa/ipu3/algorithms/awb.h b/src/ipa/ipu3/algorithms/awb.h
index c0202823..dbf69c90 100644
--- a/src/ipa/ipu3/algorithms/awb.h
+++ b/src/ipa/ipu3/algorithms/awb.h
@@ -13,6 +13,8 @@
#include <libcamera/geometry.h>
+#include "libcamera/internal/vector.h"
+
#include "algorithm.h"
namespace libcamera {
@@ -48,20 +50,6 @@ public:
ControlList &metadata) override;
private:
- /* \todo Make these structs available to all the ISPs ? */
- struct RGB {
- RGB(double _R = 0, double _G = 0, double _B = 0)
- : R(_R), G(_G), B(_B)
- {
- }
- double R, G, B;
- RGB &operator+=(RGB const &other)
- {
- R += other.R, G += other.G, B += other.B;
- return *this;
- }
- };
-
struct AwbStatus {
double temperatureK;
double redGain;
@@ -75,11 +63,10 @@ private:
void generateAwbStats(const ipu3_uapi_stats_3a *stats);
void clearAwbStats();
void awbGreyWorld();
- uint32_t estimateCCT(double red, double green, double blue);
static constexpr uint16_t threshold(float value);
static constexpr uint16_t gainValue(double gain);
- std::vector<RGB> zones_;
+ std::vector<RGB<double>> zones_;
Accumulator awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];
AwbStatus asyncResults_;
diff --git a/src/ipa/ipu3/algorithms/blc.cpp b/src/ipa/ipu3/algorithms/blc.cpp
index 257f40e2..35748fb2 100644
--- a/src/ipa/ipu3/algorithms/blc.cpp
+++ b/src/ipa/ipu3/algorithms/blc.cpp
@@ -7,8 +7,6 @@
#include "blc.h"
-#include <string.h>
-
/**
* \file blc.h
* \brief IPU3 Black Level Correction control
@@ -57,8 +55,8 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
* tuning processes. This is a first rough approximation.
*/
params->obgrid_param.gr = 64;
- params->obgrid_param.r = 64;
- params->obgrid_param.b = 64;
+ params->obgrid_param.r = 64;
+ params->obgrid_param.b = 64;
params->obgrid_param.gb = 64;
/* Enable the custom black level correction processing */
diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
index 917d0654..3b22f791 100644
--- a/src/ipa/ipu3/ipa_context.cpp
+++ b/src/ipa/ipu3/ipa_context.cpp
@@ -39,6 +39,10 @@ namespace libcamera::ipa::ipu3 {
* \struct IPAContext
* \brief Global IPA context data shared between all algorithms
*
+ * \fn IPAContext::IPAContext
+ * \brief Initialize the instance with the given number of frame contexts
+ * \param[in] frameContextSize Size of the frame context ring buffer
+ *
* \var IPAContext::configuration
* \brief The IPA session configuration, immutable during the session
*
@@ -92,11 +96,11 @@ namespace libcamera::ipa::ipu3 {
* \var IPASessionConfiguration::agc
* \brief AGC parameters configuration of the IPA
*
- * \var IPASessionConfiguration::agc.minShutterSpeed
- * \brief Minimum shutter speed supported with the configured sensor
+ * \var IPASessionConfiguration::agc.minExposureTime
+ * \brief Minimum exposure time supported with the configured sensor
*
- * \var IPASessionConfiguration::agc.maxShutterSpeed
- * \brief Maximum shutter speed supported with the configured sensor
+ * \var IPASessionConfiguration::agc.maxExposureTime
+ * \brief Maximum exposure time supported with the configured sensor
*
* \var IPASessionConfiguration::agc.minAnalogueGain
* \brief Minimum analogue gain supported with the configured sensor
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index c85d1e34..97fcf06c 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -33,8 +33,8 @@ struct IPASessionConfiguration {
} af;
struct {
- utils::Duration minShutterSpeed;
- utils::Duration maxShutterSpeed;
+ utils::Duration minExposureTime;
+ utils::Duration maxExposureTime;
double minAnalogueGain;
double maxAnalogueGain;
} agc;
@@ -84,6 +84,11 @@ struct IPAFrameContext : public FrameContext {
};
struct IPAContext {
+ IPAContext(unsigned int frameContextSize)
+ : frameContexts(frameContextSize)
+ {
+ }
+
IPASessionConfiguration configuration;
IPAActiveState activeState;
diff --git a/src/ipa/ipu3/ipu3-ipa-design-guide.rst b/src/ipa/ipu3/ipu3-ipa-design-guide.rst
index 72506397..85d735c6 100644
--- a/src/ipa/ipu3/ipu3-ipa-design-guide.rst
+++ b/src/ipa/ipu3/ipu3-ipa-design-guide.rst
@@ -27,8 +27,8 @@ from applications, and managing events from the pipeline handler.
└─┬───┬───┬──────┬────┬────┬────┬─┴────▼─┬──┘ 1: init()
│ │ │ │ ▲ │ ▲ │ ▲ │ ▲ │ 2: configure()
│1 │2 │3 │4│ │4│ │4│ │4│ │5 3: mapBuffers(), start()
- │ │ │ │ │ │ │ │ │ │ │ │ 4: (▼) queueRequest(), fillParamsBuffer(), processStatsBuffer()
- ▼ ▼ ▼ ▼ │ ▼ │ ▼ │ ▼ │ ▼ (▲) setSensorControls, paramsBufferReady, metadataReady Signals
+ │ │ │ │ │ │ │ │ │ │ │ │ 4: (▼) queueRequest(), computeParams(), processStats()
+ ▼ ▼ ▼ ▼ │ ▼ │ ▼ │ ▼ │ ▼ (▲) setSensorControls, paramsComputed, metadataReady Signals
┌──────────────────┴────┴────┴────┴─────────┐ 5: stop(), unmapBuffers()
│ IPU3 IPA │
│ ┌───────────────────────┐ │
@@ -104,8 +104,8 @@ to operate when running:
- configure()
- queueRequest()
-- fillParamsBuffer()
-- processStatsBuffer()
+- computeParams()
+- processStats()
The configuration phase allows the pipeline-handler to inform the IPA of
the current stream configurations, which is then passed into each
@@ -119,7 +119,7 @@ When configured, the IPA is notified by the pipeline handler of the
Camera ``start()`` event, after which incoming requests will be queued
for processing, requiring a parameter buffer (``ipu3_uapi_params``) to
be populated for the ImgU. This is given to the IPA through
-``fillParamsBuffer()``, and then passed directly to each algorithm
+``computeParams()``, and then passed directly to each algorithm
through the ``prepare()`` call allowing the ISP configuration to be
updated for the needs of each component that the algorithm is
responsible for.
@@ -129,7 +129,7 @@ structure that it modifies, and it should take care to ensure that any
structure set by a use flag is fully initialised to suitable values.
The parameter buffer is returned to the pipeline handler through the
-``paramsBufferReady`` signal, and from there queued to the ImgU along
+``paramsComputed`` signal, and from there queued to the ImgU along
with a raw frame captured with the CIO2.
Post-frame completion
@@ -138,7 +138,7 @@ Post-frame completion
When the capture of an image is completed, and successfully processed
through the ImgU, the generated statistics buffer
(``ipu3_uapi_stats_3a``) is given to the IPA through
-``processStatsBuffer()``. This provides the IPA with an opportunity to
+``processStats()``. This provides the IPA with an opportunity to
examine the results of the ISP and run the calculations required by each
algorithm on the new data. The algorithms may require context from the
operations of other algorithms, for example, the AWB might choose to use
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index cdcdf1fb..1cae08bf 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -23,24 +23,22 @@
#include <libcamera/base/utils.h>
#include <libcamera/control_ids.h>
+#include <libcamera/controls.h>
#include <libcamera/framebuffer.h>
+#include <libcamera/geometry.h>
+#include <libcamera/request.h>
+
#include <libcamera/ipa/ipa_interface.h>
#include <libcamera/ipa/ipa_module_info.h>
#include <libcamera/ipa/ipu3_ipa_interface.h>
-#include <libcamera/request.h>
#include "libcamera/internal/mapped_framebuffer.h"
#include "libcamera/internal/yaml_parser.h"
-#include "algorithms/af.h"
-#include "algorithms/agc.h"
-#include "algorithms/algorithm.h"
-#include "algorithms/awb.h"
-#include "algorithms/blc.h"
-#include "algorithms/tone_mapping.h"
#include "libipa/camera_sensor_helper.h"
#include "ipa_context.h"
+#include "module.h"
/* Minimum grid width, expressed as a number of cells */
static constexpr uint32_t kMinGridWidth = 16;
@@ -89,14 +87,14 @@ namespace ipa::ipu3 {
* parameter buffer, and adapting the settings of the sensor attached to the
* IPU3 CIO2 through sensor-specific V4L2 controls.
*
- * In fillParamsBuffer(), we populate the ImgU parameter buffer with
+ * In computeParams(), we populate the ImgU parameter buffer with
* settings to configure the device in preparation for handling the frame
* queued in the Request.
*
* When the frame has completed processing, the ImgU will generate a statistics
- * buffer which is given to the IPA with processStatsBuffer(). In this we run the
+ * buffer which is given to the IPA with processStats(). In this we run the
* algorithms to parse the statistics and cache any results for the next
- * fillParamsBuffer() call.
+ * computeParams() call.
*
* The individual algorithms are split into modular components that are called
* iteratively to allow them to process statistics from the ImgU in the order
@@ -114,7 +112,7 @@ namespace ipa::ipu3 {
* blue gains to apply to generate a neutral grey frame overall.
*
* AGC is handled by calculating a histogram of the green channel to estimate an
- * analogue gain and shutter time which will provide a well exposed frame. A
+ * analogue gain and exposure time which will provide a well exposed frame. A
* low-pass IIR filter is used to smooth the changes to the sensor to reduce
* perceivable steps.
*
@@ -157,10 +155,10 @@ public:
void unmapBuffers(const std::vector<unsigned int> &ids) override;
void queueRequest(const uint32_t frame, const ControlList &controls) override;
- void fillParamsBuffer(const uint32_t frame, const uint32_t bufferId) override;
- void processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp,
- const uint32_t bufferId,
- const ControlList &sensorControls) override;
+ void computeParams(const uint32_t frame, const uint32_t bufferId) override;
+ void processStats(const uint32_t frame, const int64_t frameTimestamp,
+ const uint32_t bufferId,
+ const ControlList &sensorControls) override;
protected:
std::string logPrefix() const override;
@@ -189,7 +187,7 @@ private:
};
IPAIPU3::IPAIPU3()
- : context_({ {}, {}, { kMaxFrameContexts }, {} })
+ : context_(kMaxFrameContexts)
{
}
@@ -217,13 +215,13 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)
/*
* When the AGC computes the new exposure values for a frame, it needs
- * to know the limits for shutter speed and analogue gain.
+ * to know the limits for exposure time and analogue gain.
* As it depends on the sensor, update it with the controls.
*
- * \todo take VBLANK into account for maximum shutter speed
+ * \todo take VBLANK into account for maximum exposure time
*/
- context_.configuration.agc.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration;
- context_.configuration.agc.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.agc.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.agc.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;
context_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);
context_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);
}
@@ -313,8 +311,8 @@ int IPAIPU3::init(const IPASettings &settings,
/* Clean context */
context_.configuration = {};
- context_.configuration.sensor.lineDuration = sensorInfo.minLineLength
- * 1.0s / sensorInfo.pixelRate;
+ context_.configuration.sensor.lineDuration =
+ sensorInfo.minLineLength * 1.0s / sensorInfo.pixelRate;
/* Load the tuning data file. */
File file(settings.configurationFile);
@@ -477,8 +475,8 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo,
context_.frameContexts.clear();
/* Initialise the sensor configuration. */
- context_.configuration.sensor.lineDuration = sensorInfo_.minLineLength
- * 1.0s / sensorInfo_.pixelRate;
+ context_.configuration.sensor.lineDuration =
+ sensorInfo_.minLineLength * 1.0s / sensorInfo_.pixelRate;
context_.configuration.sensor.size = sensorInfo_.outputSize;
/*
@@ -540,7 +538,7 @@ void IPAIPU3::unmapBuffers(const std::vector<unsigned int> &ids)
* Algorithms are expected to fill the IPU3 parameter buffer for the next
* frame given their most recent processing of the ImgU statistics.
*/
-void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
+void IPAIPU3::computeParams(const uint32_t frame, const uint32_t bufferId)
{
auto it = buffers_.find(bufferId);
if (it == buffers_.end()) {
@@ -568,7 +566,7 @@ void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
for (auto const &algo : algorithms())
algo->prepare(context_, frame, frameContext, params);
- paramsBufferReady.emit(frame);
+ paramsComputed.emit(frame);
}
/**
@@ -582,9 +580,9 @@ void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
* statistics are passed to each algorithm module to run their calculations and
* update their state accordingly.
*/
-void IPAIPU3::processStatsBuffer(const uint32_t frame,
- [[maybe_unused]] const int64_t frameTimestamp,
- const uint32_t bufferId, const ControlList &sensorControls)
+void IPAIPU3::processStats(const uint32_t frame,
+ [[maybe_unused]] const int64_t frameTimestamp,
+ const uint32_t bufferId, const ControlList &sensorControls)
{
auto it = buffers_.find(bufferId);
if (it == buffers_.end()) {
diff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp
index f97ef117..f617fde8 100644
--- a/src/ipa/libipa/agc_mean_luminance.cpp
+++ b/src/ipa/libipa/agc_mean_luminance.cpp
@@ -89,10 +89,10 @@ static constexpr double kDefaultRelativeLuminanceTarget = 0.16;
* \class AgcMeanLuminance
* \brief A mean-based auto-exposure algorithm
*
- * This algorithm calculates a shutter time, analogue and digital gain such that
- * the normalised mean luminance value of an image is driven towards a target,
- * which itself is discovered from tuning data. The algorithm is a two-stage
- * process.
+ * This algorithm calculates an exposure time, analogue and digital gain such
+ * that the normalised mean luminance value of an image is driven towards a
+ * target, which itself is discovered from tuning data. The algorithm is a
+ * two-stage process.
*
* In the first stage, an initial gain value is derived by iteratively comparing
* the gain-adjusted mean luminance across the entire image against a target,
@@ -109,7 +109,7 @@ static constexpr double kDefaultRelativeLuminanceTarget = 0.16;
* stage is then clamped to the gain from this stage.
*
* The final gain is used to adjust the effective exposure value of the image,
- * and that new exposure value is divided into shutter time, analogue gain and
+ * and that new exposure value is divided into exposure time, analogue gain and
* digital gain according to the selected AeExposureMode. This class uses the
* \ref ExposureModeHelper class to assist in that division, and expects the
* data needed to initialise that class to be present in tuning data in a
@@ -247,27 +247,27 @@ int AgcMeanLuminance::parseExposureModes(const YamlObject &tuningData)
return -EINVAL;
}
- std::vector<uint32_t> shutters =
- modeValues["shutter"].getList<uint32_t>().value_or(std::vector<uint32_t>{});
+ std::vector<uint32_t> exposureTimes =
+ modeValues["exposureTime"].getList<uint32_t>().value_or(std::vector<uint32_t>{});
std::vector<double> gains =
modeValues["gain"].getList<double>().value_or(std::vector<double>{});
- if (shutters.size() != gains.size()) {
+ if (exposureTimes.size() != gains.size()) {
LOG(AgcMeanLuminance, Error)
- << "Shutter and gain array sizes unequal";
+ << "Exposure time and gain array sizes unequal";
return -EINVAL;
}
- if (shutters.empty()) {
+ if (exposureTimes.empty()) {
LOG(AgcMeanLuminance, Error)
- << "Shutter and gain arrays are empty";
+ << "Exposure time and gain arrays are empty";
return -EINVAL;
}
std::vector<std::pair<utils::Duration, double>> stages;
- for (unsigned int i = 0; i < shutters.size(); i++) {
+ for (unsigned int i = 0; i < exposureTimes.size(); i++) {
stages.push_back({
- std::chrono::microseconds(shutters[i]),
+ std::chrono::microseconds(exposureTimes[i]),
gains[i]
});
}
@@ -283,7 +283,7 @@ int AgcMeanLuminance::parseExposureModes(const YamlObject &tuningData)
/*
* If we don't have any exposure modes in the tuning data we create an
* ExposureModeHelper using an empty vector of stages. This will result
- * in the ExposureModeHelper simply driving the shutter as high as
+ * in the ExposureModeHelper simply driving the exposure time as high as
* possible before touching gain.
*/
if (availableExposureModes.empty()) {
@@ -338,18 +338,18 @@ int AgcMeanLuminance::parseExposureModes(const YamlObject &tuningData)
* For the AeExposureMode control the data should contain a dictionary called
* AeExposureMode containing per-mode setting dictionaries with the key being a
* value from \ref controls::AeExposureModeNameValueMap. Each mode dict should
- * contain an array of shutter times with the key "shutter" and an array of gain
- * values with the key "gain", in this format:
+ * contain an array of exposure times with the key "exposureTime" and an array
+ * of gain values with the key "gain", in this format:
*
* \code{.unparsed}
* algorithms:
* - Agc:
* AeExposureMode:
* ExposureNormal:
- * shutter: [ 100, 10000, 30000, 60000, 120000 ]
+ * exposureTime: [ 100, 10000, 30000, 60000, 120000 ]
* gain: [ 2.0, 4.0, 6.0, 8.0, 10.0 ]
* ExposureShort:
- * shutter: [ 100, 10000, 30000, 60000, 120000 ]
+ * exposureTime: [ 100, 10000, 30000, 60000, 120000 ]
* gain: [ 2.0, 4.0, 6.0, 8.0, 10.0 ]
*
* \endcode
@@ -371,20 +371,20 @@ int AgcMeanLuminance::parseTuningData(const YamlObject &tuningData)
/**
* \brief Set the ExposureModeHelper limits for this class
- * \param[in] minShutter Minimum shutter time to allow
- * \param[in] maxShutter Maximum shutter time to allow
+ * \param[in] minExposureTime Minimum exposure time to allow
+ * \param[in] maxExposureTime Maximum ewposure time to allow
* \param[in] minGain Minimum gain to allow
* \param[in] maxGain Maximum gain to allow
*
* This function calls \ref ExposureModeHelper::setLimits() for each
* ExposureModeHelper that has been created for this class.
*/
-void AgcMeanLuminance::setLimits(utils::Duration minShutter,
- utils::Duration maxShutter,
+void AgcMeanLuminance::setLimits(utils::Duration minExposureTime,
+ utils::Duration maxExposureTime,
double minGain, double maxGain)
{
for (auto &[id, helper] : exposureModeHelpers_)
- helper->setLimits(minShutter, maxShutter, minGain, maxGain);
+ helper->setLimits(minExposureTime, maxExposureTime, minGain, maxGain);
}
/**
@@ -513,7 +513,8 @@ utils::Duration AgcMeanLuminance::filterExposure(utils::Duration exposureValue)
}
/**
- * \brief Calculate the new exposure value and splut it between shutter time and gain
+ * \brief Calculate the new exposure value and splut it between exposure time
+ * and gain
* \param[in] constraintModeIndex The index of the current constraint mode
* \param[in] exposureModeIndex The index of the current exposure mode
* \param[in] yHist A Histogram from the ISP statistics to use in constraining
@@ -523,9 +524,9 @@ utils::Duration AgcMeanLuminance::filterExposure(utils::Duration exposureValue)
*
* Calculate a new exposure value to try to obtain the target. The calculated
* exposure value is filtered to prevent rapid changes from frame to frame, and
- * divided into shutter time, analogue and digital gain.
+ * divided into exposure time, analogue and digital gain.
*
- * \return Tuple of shutter time, analogue gain, and digital gain
+ * \return Tuple of exposure time, analogue gain, and digital gain
*/
std::tuple<utils::Duration, double, double>
AgcMeanLuminance::calculateNewEv(uint32_t constraintModeIndex,
@@ -540,6 +541,18 @@ AgcMeanLuminance::calculateNewEv(uint32_t constraintModeIndex,
std::shared_ptr<ExposureModeHelper> exposureModeHelper =
exposureModeHelpers_.at(exposureModeIndex);
+ if (effectiveExposureValue == 0s) {
+ LOG(AgcMeanLuminance, Error)
+ << "Effective exposure value is 0. This is a bug in AGC "
+ "and must be fixed for proper operation.";
+ /*
+ * Return an arbitrary exposure time > 0 to ensure regulation
+ * doesn't get stuck with 0 in case the sensor driver allows a
+ * min exposure of 0.
+ */
+ return exposureModeHelper->splitExposure(10ms);
+ }
+
double gain = estimateInitialGain();
gain = constraintClampGain(constraintModeIndex, yHist, gain);
diff --git a/src/ipa/libipa/agc_mean_luminance.h b/src/ipa/libipa/agc_mean_luminance.h
index 576d28be..c41391cb 100644
--- a/src/ipa/libipa/agc_mean_luminance.h
+++ b/src/ipa/libipa/agc_mean_luminance.h
@@ -44,7 +44,7 @@ public:
int parseTuningData(const YamlObject &tuningData);
- void setLimits(utils::Duration minShutter, utils::Duration maxShutter,
+ void setLimits(utils::Duration minExposureTime, utils::Duration maxExposureTime,
double minGain, double maxGain);
std::map<int32_t, std::vector<AgcConstraint>> constraintModes()
diff --git a/src/ipa/libipa/awb.cpp b/src/ipa/libipa/awb.cpp
new file mode 100644
index 00000000..925fac23
--- /dev/null
+++ b/src/ipa/libipa/awb.cpp
@@ -0,0 +1,265 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * Generic AWB algorithms
+ */
+
+#include "awb.h"
+
+#include <libcamera/base/log.h>
+
+#include <libcamera/control_ids.h>
+
+/**
+ * \file awb.h
+ * \brief Base classes for AWB algorithms
+ */
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(Awb)
+
+namespace ipa {
+
+/**
+ * \class AwbResult
+ * \brief The result of an AWB calculation
+ *
+ * This class holds the result of an auto white balance calculation.
+ */
+
+/**
+ * \var AwbResult::gains
+ * \brief The calculated white balance gains
+ */
+
+/**
+ * \var AwbResult::colourTemperature
+ * \brief The calculated colour temperature in Kelvin
+ */
+
+/**
+ * \class AwbStats
+ * \brief An abstraction class wrapping hardware-specific AWB statistics
+ *
+ * IPA modules using an AWB algorithm based on the AwbAlgorithm class need to
+ * implement this class to give the algorithm access to the hardware-specific
+ * statistics data.
+ */
+
+/**
+ * \fn AwbStats::computeColourError()
+ * \brief Compute an error value for when the given gains would be applied
+ * \param[in] gains The gains to apply
+ *
+ * Compute an error value (non-greyness) assuming the given \a gains would be
+ * applied. To keep the actual implementations computationally inexpensive,
+ * the squared colour error shall be returned.
+ *
+ * If the AWB statistics provide multiple zones, the average of the individual
+ * squared errors shall be returned. Averaging/normalizing is necessary so that
+ * the numeric dimensions are the same on all hardware platforms.
+ *
+ * \return The computed error value
+ */
+
+/**
+ * \fn AwbStats::rgbMeans()
+ * \brief Get RGB means of the statistics
+ *
+ * Fetch the RGB means from the statistics. The values of each channel are
+ * dimensionless and only the ratios are used for further calculations. This is
+ * used by the simple grey world model to calculate the gains to apply.
+ *
+ * \return The RGB means
+ */
+
+/**
+ * \class AwbAlgorithm
+ * \brief A base class for auto white balance algorithms
+ *
+ * This class is a base class for auto white balance algorithms. It defines an
+ * interface for the algorithms to implement, and is used by the IPAs to
+ * interact with the concrete implementation.
+ */
+
+/**
+ * \fn AwbAlgorithm::init()
+ * \brief Initialize the algorithm with the given tuning data
+ * \param[in] tuningData The tuning data to use for the algorithm
+ *
+ * \return 0 on success, a negative error code otherwise
+ */
+
+/**
+ * \fn AwbAlgorithm::calculateAwb()
+ * \brief Calculate AWB data from the given statistics
+ * \param[in] stats The statistics to use for the calculation
+ * \param[in] lux The lux value of the scene
+ *
+ * Calculate an AwbResult object from the given statistics and lux value. A \a
+ * lux value of 0 means it is unknown or invalid and the algorithm shall ignore
+ * it.
+ *
+ * \return The AWB result
+ */
+
+/**
+ * \fn AwbAlgorithm::gainsFromColourTemperature()
+ * \brief Compute white balance gains from a colour temperature
+ * \param[in] colourTemperature The colour temperature in Kelvin
+ *
+ * Compute the white balance gains from a \a colourTemperature. This function
+ * does not take any statistics into account. It is used to compute the colour
+ * gains when the user manually specifies a colour temperature.
+ *
+ * \return The colour gains
+ */
+
+/**
+ * \fn AwbAlgorithm::controls()
+ * \brief Get the controls info map for this algorithm
+ *
+ * \return The controls info map
+ */
+
+/**
+ * \fn AwbAlgorithm::handleControls()
+ * \param[in] controls The controls to handle
+ * \brief Handle the controls supplied in a request
+ */
+
+/**
+ * \brief Parse the mode configurations from the tuning data
+ * \param[in] tuningData the YamlObject representing the tuning data
+ * \param[in] def The default value for the AwbMode control
+ *
+ * Utility function to parse the tuning data for an AwbMode entry and read all
+ * provided modes. It adds controls::AwbMode to AwbAlgorithm::controls_ and
+ * populates AwbAlgorithm::modes_. For a list of possible modes see \ref
+ * controls::AwbModeEnum.
+ *
+ * Each mode entry must contain a "lo" and "hi" key to specify the lower and
+ * upper colour temperature of that mode. For example:
+ *
+ * \code{.unparsed}
+ * algorithms:
+ * - Awb:
+ * AwbMode:
+ * AwbAuto:
+ * lo: 2500
+ * hi: 8000
+ * AwbIncandescent:
+ * lo: 2500
+ * hi: 3000
+ * ...
+ * \endcode
+ *
+ * If \a def is supplied but not contained in the the \a tuningData, -EINVAL is
+ * returned.
+ *
+ * \sa controls::AwbModeEnum
+ * \return Zero on success, negative error code otherwise
+ */
+int AwbAlgorithm::parseModeConfigs(const YamlObject &tuningData,
+ const ControlValue &def)
+{
+ std::vector<ControlValue> availableModes;
+
+ const YamlObject &yamlModes = tuningData[controls::AwbMode.name()];
+ if (!yamlModes.isDictionary()) {
+ LOG(Awb, Error)
+ << "AwbModes must be a dictionary.";
+ return -EINVAL;
+ }
+
+ for (const auto &[modeName, modeDict] : yamlModes.asDict()) {
+ if (controls::AwbModeNameValueMap.find(modeName) ==
+ controls::AwbModeNameValueMap.end()) {
+ LOG(Awb, Warning)
+ << "Skipping unknown AWB mode '"
+ << modeName << "'";
+ continue;
+ }
+
+ if (!modeDict.isDictionary()) {
+ LOG(Awb, Error)
+ << "Invalid AWB mode '" << modeName << "'";
+ return -EINVAL;
+ }
+
+ const auto &modeValue = static_cast<controls::AwbModeEnum>(
+ controls::AwbModeNameValueMap.at(modeName));
+
+ ModeConfig &config = modes_[modeValue];
+
+ auto hi = modeDict["hi"].get<double>();
+ if (!hi) {
+ LOG(Awb, Error) << "Failed to read hi param of mode "
+ << modeName;
+ return -EINVAL;
+ }
+ config.ctHi = *hi;
+
+ auto lo = modeDict["lo"].get<double>();
+ if (!lo) {
+ LOG(Awb, Error) << "Failed to read low param of mode "
+ << modeName;
+ return -EINVAL;
+ }
+ config.ctLo = *lo;
+
+ availableModes.push_back(modeValue);
+ }
+
+ if (modes_.empty()) {
+ LOG(Awb, Error) << "No AWB modes configured";
+ return -EINVAL;
+ }
+
+ if (!def.isNone() &&
+ modes_.find(def.get<controls::AwbModeEnum>()) == modes_.end()) {
+ const auto &names = controls::AwbMode.enumerators();
+ LOG(Awb, Error) << names.at(def.get<controls::AwbModeEnum>())
+ << " mode is missing in the configuration.";
+ return -EINVAL;
+ }
+
+ controls_[&controls::AwbMode] = ControlInfo(availableModes, def);
+
+ return 0;
+}
+
+/**
+ * \class AwbAlgorithm::ModeConfig
+ * \brief Holds the configuration of a single AWB mode
+ *
+ * AWB modes limit the regulation of the AWB algorithm to a specific range of
+ * colour temperatures.
+ */
+
+/**
+ * \var AwbAlgorithm::ModeConfig::ctLo
+ * \brief The lowest valid colour temperature of that mode
+ */
+
+/**
+ * \var AwbAlgorithm::ModeConfig::ctHi
+ * \brief The highest valid colour temperature of that mode
+ */
+
+/**
+ * \var AwbAlgorithm::controls_
+ * \brief Controls info map for the controls provided by the algorithm
+ */
+
+/**
+ * \var AwbAlgorithm::modes_
+ * \brief Map of all configured modes
+ * \sa AwbAlgorithm::parseModeConfigs
+ */
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/awb.h b/src/ipa/libipa/awb.h
new file mode 100644
index 00000000..4bab7a45
--- /dev/null
+++ b/src/ipa/libipa/awb.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * Generic AWB algorithms
+ */
+
+#pragma once
+
+#include <map>
+
+#include <libcamera/control_ids.h>
+#include <libcamera/controls.h>
+
+#include "libcamera/internal/vector.h"
+#include "libcamera/internal/yaml_parser.h"
+
+namespace libcamera {
+
+namespace ipa {
+
+struct AwbResult {
+ RGB<double> gains;
+ double colourTemperature;
+};
+
+struct AwbStats {
+ virtual double computeColourError(const RGB<double> &gains) const = 0;
+ virtual RGB<double> rgbMeans() const = 0;
+
+protected:
+ ~AwbStats() = default;
+};
+
+class AwbAlgorithm
+{
+public:
+ virtual ~AwbAlgorithm() = default;
+
+ virtual int init(const YamlObject &tuningData) = 0;
+ virtual AwbResult calculateAwb(const AwbStats &stats, unsigned int lux) = 0;
+ virtual RGB<double> gainsFromColourTemperature(double colourTemperature) = 0;
+
+ const ControlInfoMap::Map &controls() const
+ {
+ return controls_;
+ }
+
+ virtual void handleControls([[maybe_unused]] const ControlList &controls) {}
+
+protected:
+ int parseModeConfigs(const YamlObject &tuningData,
+ const ControlValue &def = {});
+
+ struct ModeConfig {
+ double ctHi;
+ double ctLo;
+ };
+
+ ControlInfoMap::Map controls_;
+ std::map<controls::AwbModeEnum, AwbAlgorithm::ModeConfig> modes_;
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/awb_bayes.cpp b/src/ipa/libipa/awb_bayes.cpp
new file mode 100644
index 00000000..d1d0eaf0
--- /dev/null
+++ b/src/ipa/libipa/awb_bayes.cpp
@@ -0,0 +1,505 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Raspberry Pi Ltd
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * Implementation of a bayesian AWB algorithm
+ */
+
+#include "awb_bayes.h"
+
+#include <algorithm>
+#include <cmath>
+#include <limits>
+#include <map>
+#include <ostream>
+#include <vector>
+
+#include <libcamera/base/log.h>
+#include <libcamera/control_ids.h>
+
+#include "colours.h"
+
+/**
+ * \file awb_bayes.h
+ * \brief Implementation of bayesian auto white balance algorithm
+ *
+ * This implementation is based on the initial implementation done by
+ * RaspberryPi.
+ *
+ * \todo Documentation
+ *
+ * \todo Not all the features implemented by RaspberryPi were ported over to
+ * this algorithm because they either rely on hardware features not generally
+ * available or were considered not important enough at the moment.
+ *
+ * The following parts are not implemented:
+ *
+ * - min_pixels: minimum proportion of pixels counted within AWB region for it
+ * to be "useful"
+ * - min_g: minimum G value of those pixels, to be regarded a "useful"
+ * - min_regions: number of AWB regions that must be "useful" in order to do the
+ * AWB calculation
+ * - deltaLimit: clamp on colour error term (so as not to penalize non-grey
+ * excessively)
+ * - bias_proportion: The biasProportion parameter adds a small proportion of
+ * the counted pixels to a region biased to the biasCT colour temperature.
+ * A typical value for biasProportion would be between 0.05 to 0.1.
+ * - bias_ct: CT target for the search bias
+ * - sensitivityR: red sensitivity ratio (set to canonical sensor's R/G divided
+ * by this sensor's R/G)
+ * - sensitivityB: blue sensitivity ratio (set to canonical sensor's B/G divided
+ * by this sensor's B/G)
+ */
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(Awb)
+
+namespace {
+
+template<typename T>
+class LimitsRecorder
+{
+public:
+ LimitsRecorder()
+ : min_(std::numeric_limits<T>::max()),
+ max_(std::numeric_limits<T>::min())
+ {
+ }
+
+ void record(const T &value)
+ {
+ min_ = std::min(min_, value);
+ max_ = std::max(max_, value);
+ }
+
+ const T &min() const { return min_; }
+ const T &max() const { return max_; }
+
+private:
+ T min_;
+ T max_;
+};
+
+#ifndef __DOXYGEN__
+template<typename T>
+std::ostream &operator<<(std::ostream &out, const LimitsRecorder<T> &v)
+{
+ out << "[ " << v.min() << ", " << v.max() << " ]";
+ return out;
+}
+#endif
+
+} /* namespace */
+
+namespace ipa {
+
+/**
+ * \brief Step size control for CT search
+ */
+constexpr double kSearchStep = 0.2;
+
+/**
+ * \copydoc libcamera::ipa::Interpolator::interpolate()
+ */
+template<>
+void Interpolator<Pwl>::interpolate(const Pwl &a, const Pwl &b, Pwl &dest, double lambda)
+{
+ dest = Pwl::combine(a, b,
+ [=](double /*x*/, double y0, double y1) -> double {
+ return y0 * (1.0 - lambda) + y1 * lambda;
+ });
+}
+
+/**
+ * \class AwbBayes
+ * \brief Implementation of a bayesian auto white balance algorithm
+ *
+ * In a bayesian AWB algorithm the auto white balance estimation is improved by
+ * taking the likelihood of a given lightsource based on the estimated lux level
+ * into account. E.g. If it is very bright we can assume that we are outside and
+ * that colour temperatures around 6500 are preferred.
+ *
+ * The second part of this algorithm is the search for the most likely colour
+ * temperature. It is implemented in AwbBayes::coarseSearch() and in
+ * AwbBayes::fineSearch(). The search works very well without prior likelihoods
+ * and therefore the algorithm itself provides very good results even without
+ * prior likelihoods.
+ */
+
+/**
+ * \var AwbBayes::transversePos_
+ * \brief How far to wander off CT curve towards "more purple"
+ */
+
+/**
+ * \var AwbBayes::transverseNeg_
+ * \brief How far to wander off CT curve towards "more green"
+ */
+
+/**
+ * \var AwbBayes::currentMode_
+ * \brief The currently selected mode
+ */
+
+int AwbBayes::init(const YamlObject &tuningData)
+{
+ int ret = colourGainCurve_.readYaml(tuningData["colourGains"], "ct", "gains");
+ if (ret) {
+ LOG(Awb, Error)
+ << "Failed to parse 'colourGains' "
+ << "parameter from tuning file";
+ return ret;
+ }
+
+ ctR_.clear();
+ ctB_.clear();
+ for (const auto &[ct, g] : colourGainCurve_.data()) {
+ ctR_.append(ct, 1.0 / g[0]);
+ ctB_.append(ct, 1.0 / g[1]);
+ }
+
+ /* We will want the inverse functions of these too. */
+ ctRInverse_ = ctR_.inverse().first;
+ ctBInverse_ = ctB_.inverse().first;
+
+ ret = readPriors(tuningData);
+ if (ret) {
+ LOG(Awb, Error) << "Failed to read priors";
+ return ret;
+ }
+
+ ret = parseModeConfigs(tuningData, controls::AwbAuto);
+ if (ret) {
+ LOG(Awb, Error)
+ << "Failed to parse mode parameter from tuning file";
+ return ret;
+ }
+ currentMode_ = &modes_[controls::AwbAuto];
+
+ transversePos_ = tuningData["transversePos"].get<double>(0.01);
+ transverseNeg_ = tuningData["transverseNeg"].get<double>(0.01);
+ if (transversePos_ <= 0 || transverseNeg_ <= 0) {
+ LOG(Awb, Error) << "AwbConfig: transversePos/Neg must be > 0";
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int AwbBayes::readPriors(const YamlObject &tuningData)
+{
+ const auto &priorsList = tuningData["priors"];
+ std::map<uint32_t, Pwl> priors;
+
+ if (!priorsList) {
+ LOG(Awb, Error) << "No priors specified";
+ return -EINVAL;
+ }
+
+ for (const auto &p : priorsList.asList()) {
+ if (!p.contains("lux")) {
+ LOG(Awb, Error) << "Missing lux value";
+ return -EINVAL;
+ }
+
+ uint32_t lux = p["lux"].get<uint32_t>(0);
+ if (priors.count(lux)) {
+ LOG(Awb, Error) << "Duplicate prior for lux value " << lux;
+ return -EINVAL;
+ }
+
+ std::vector<uint32_t> temperatures =
+ p["ct"].getList<uint32_t>().value_or(std::vector<uint32_t>{});
+ std::vector<double> probabilities =
+ p["probability"].getList<double>().value_or(std::vector<double>{});
+
+ if (temperatures.size() != probabilities.size()) {
+ LOG(Awb, Error)
+ << "Ct and probability array sizes are unequal";
+ return -EINVAL;
+ }
+
+ if (temperatures.empty()) {
+ LOG(Awb, Error)
+ << "Ct and probability arrays are empty";
+ return -EINVAL;
+ }
+
+ std::map<int, double> ctToProbability;
+ for (unsigned int i = 0; i < temperatures.size(); i++) {
+ int t = temperatures[i];
+ if (ctToProbability.count(t)) {
+ LOG(Awb, Error) << "Duplicate ct value";
+ return -EINVAL;
+ }
+
+ ctToProbability[t] = probabilities[i];
+ }
+
+ auto &pwl = priors[lux];
+ for (const auto &[ct, prob] : ctToProbability) {
+ if (prob < 1e-6) {
+ LOG(Awb, Error) << "Prior probability must be larger than 1e-6";
+ return -EINVAL;
+ }
+ pwl.append(ct, prob);
+ }
+ }
+
+ if (priors.empty()) {
+ LOG(Awb, Error) << "No priors specified";
+ return -EINVAL;
+ }
+
+ priors_.setData(std::move(priors));
+
+ return 0;
+}
+
+void AwbBayes::handleControls(const ControlList &controls)
+{
+ auto mode = controls.get(controls::AwbMode);
+ if (mode) {
+ auto it = modes_.find(static_cast<controls::AwbModeEnum>(*mode));
+ if (it != modes_.end())
+ currentMode_ = &it->second;
+ else
+ LOG(Awb, Error) << "Unsupported AWB mode " << *mode;
+ }
+}
+
+RGB<double> AwbBayes::gainsFromColourTemperature(double colourTemperature)
+{
+ /*
+ * \todo In the RaspberryPi code, the ct curve was interpolated in
+ * the white point space (1/x) not in gains space. This feels counter
+ * intuitive, as the gains are in linear space. But I can't prove it.
+ */
+ const auto &gains = colourGainCurve_.getInterpolated(colourTemperature);
+ return { { gains[0], 1.0, gains[1] } };
+}
+
+AwbResult AwbBayes::calculateAwb(const AwbStats &stats, unsigned int lux)
+{
+ ipa::Pwl prior;
+ if (lux > 0) {
+ prior = priors_.getInterpolated(lux);
+ prior.map([](double x, double y) {
+ LOG(Awb, Debug) << "(" << x << "," << y << ")";
+ });
+ } else {
+ prior.append(0, 1.0);
+ }
+
+ double t = coarseSearch(prior, stats);
+ double r = ctR_.eval(t);
+ double b = ctB_.eval(t);
+ LOG(Awb, Debug)
+ << "After coarse search: r " << r << " b " << b << " (gains r "
+ << 1 / r << " b " << 1 / b << ")";
+
+ /*
+ * Original comment from RaspberryPi:
+ * Not entirely sure how to handle the fine search yet. Mostly the
+ * estimated CT is already good enough, but the fine search allows us to
+ * wander transversely off the CT curve. Under some illuminants, where
+ * there may be more or less green light, this may prove beneficial,
+ * though I probably need more real datasets before deciding exactly how
+ * this should be controlled and tuned.
+ */
+ fineSearch(t, r, b, prior, stats);
+ LOG(Awb, Debug)
+ << "After fine search: r " << r << " b " << b << " (gains r "
+ << 1 / r << " b " << 1 / b << ")";
+
+ return { { { 1.0 / r, 1.0, 1.0 / b } }, t };
+}
+
+double AwbBayes::coarseSearch(const ipa::Pwl &prior, const AwbStats &stats) const
+{
+ std::vector<Pwl::Point> points;
+ size_t bestPoint = 0;
+ double t = currentMode_->ctLo;
+ int spanR = -1;
+ int spanB = -1;
+ LimitsRecorder<double> errorLimits;
+ LimitsRecorder<double> priorLogLikelihoodLimits;
+
+ /* Step down the CT curve evaluating log likelihood. */
+ while (true) {
+ double r = ctR_.eval(t, &spanR);
+ double b = ctB_.eval(t, &spanB);
+ RGB<double> gains({ 1 / r, 1.0, 1 / b });
+ double delta2Sum = stats.computeColourError(gains);
+ double priorLogLikelihood = log(prior.eval(prior.domain().clamp(t)));
+ double finalLogLikelihood = delta2Sum - priorLogLikelihood;
+
+ errorLimits.record(delta2Sum);
+ priorLogLikelihoodLimits.record(priorLogLikelihood);
+
+ points.push_back({ { t, finalLogLikelihood } });
+ if (points.back().y() < points[bestPoint].y())
+ bestPoint = points.size() - 1;
+
+ if (t == currentMode_->ctHi)
+ break;
+
+ /*
+ * Ensure even steps along the r/b curve by scaling them by the
+ * current t.
+ */
+ t = std::min(t + t / 10 * kSearchStep, currentMode_->ctHi);
+ }
+
+ t = points[bestPoint].x();
+ LOG(Awb, Debug) << "Coarse search found CT " << t
+ << " error limits:" << errorLimits
+ << " prior log likelihood limits:" << priorLogLikelihoodLimits;
+
+ /*
+ * We have the best point of the search, but refine it with a quadratic
+ * interpolation around its neighbors.
+ */
+ if (points.size() > 2) {
+ bestPoint = std::clamp(bestPoint, std::size_t{ 1 }, points.size() - 2);
+ t = interpolateQuadratic(points[bestPoint - 1],
+ points[bestPoint],
+ points[bestPoint + 1]);
+ LOG(Awb, Debug)
+ << "After quadratic refinement, coarse search has CT "
+ << t;
+ }
+
+ return t;
+}
+
+void AwbBayes::fineSearch(double &t, double &r, double &b, ipa::Pwl const &prior, const AwbStats &stats) const
+{
+ int spanR = -1;
+ int spanB = -1;
+ double step = t / 10 * kSearchStep * 0.1;
+ int nsteps = 5;
+ ctR_.eval(t, &spanR);
+ ctB_.eval(t, &spanB);
+ double rDiff = ctR_.eval(t + nsteps * step, &spanR) -
+ ctR_.eval(t - nsteps * step, &spanR);
+ double bDiff = ctB_.eval(t + nsteps * step, &spanB) -
+ ctB_.eval(t - nsteps * step, &spanB);
+ Pwl::Point transverse({ bDiff, -rDiff });
+ if (transverse.length2() < 1e-6)
+ return;
+ /*
+ * transverse is a unit vector orthogonal to the b vs. r function
+ * (pointing outwards with r and b increasing)
+ */
+ transverse = transverse / transverse.length();
+ double bestLogLikelihood = 0;
+ double bestT = 0;
+ Pwl::Point bestRB(0);
+ double transverseRange = transverseNeg_ + transversePos_;
+ const int maxNumDeltas = 12;
+ LimitsRecorder<double> errorLimits;
+ LimitsRecorder<double> priorLogLikelihoodLimits;
+
+
+ /* a transverse step approximately every 0.01 r/b units */
+ int numDeltas = floor(transverseRange * 100 + 0.5) + 1;
+ numDeltas = std::clamp(numDeltas, 3, maxNumDeltas);
+
+ /*
+ * Step down CT curve. March a bit further if the transverse range is
+ * large.
+ */
+ nsteps += numDeltas;
+ for (int i = -nsteps; i <= nsteps; i++) {
+ double tTest = t + i * step;
+ double priorLogLikelihood =
+ log(prior.eval(prior.domain().clamp(tTest)));
+ priorLogLikelihoodLimits.record(priorLogLikelihood);
+ Pwl::Point rbStart{ { ctR_.eval(tTest, &spanR),
+ ctB_.eval(tTest, &spanB) } };
+ Pwl::Point samples[maxNumDeltas];
+ int bestPoint = 0;
+
+ /*
+ * Sample numDeltas points transversely *off* the CT curve
+ * in the range [-transverseNeg, transversePos].
+ * The x values of a sample contains the distance and the y
+ * value contains the corresponding log likelihood.
+ */
+ double transverseStep = transverseRange / (numDeltas - 1);
+ for (int j = 0; j < numDeltas; j++) {
+ auto &p = samples[j];
+ p.x() = -transverseNeg_ + transverseStep * j;
+ Pwl::Point rbTest = rbStart + transverse * p.x();
+ RGB<double> gains({ 1 / rbTest[0], 1.0, 1 / rbTest[1] });
+ double delta2Sum = stats.computeColourError(gains);
+ errorLimits.record(delta2Sum);
+ p.y() = delta2Sum - priorLogLikelihood;
+
+ if (p.y() < samples[bestPoint].y())
+ bestPoint = j;
+ }
+
+ /*
+ * We have all samples transversely across the CT curve,
+ * now let's do a quadratic interpolation for the best result.
+ */
+ bestPoint = std::clamp(bestPoint, 1, numDeltas - 2);
+ double bestOffset = interpolateQuadratic(samples[bestPoint - 1],
+ samples[bestPoint],
+ samples[bestPoint + 1]);
+ Pwl::Point rbTest = rbStart + transverse * bestOffset;
+ RGB<double> gains({ 1 / rbTest[0], 1.0, 1 / rbTest[1] });
+ double delta2Sum = stats.computeColourError(gains);
+ errorLimits.record(delta2Sum);
+ double finalLogLikelihood = delta2Sum - priorLogLikelihood;
+
+ if (bestT == 0 || finalLogLikelihood < bestLogLikelihood) {
+ bestLogLikelihood = finalLogLikelihood;
+ bestT = tTest;
+ bestRB = rbTest;
+ }
+ }
+
+ t = bestT;
+ r = bestRB[0];
+ b = bestRB[1];
+ LOG(Awb, Debug)
+ << "Fine search found t " << t << " r " << r << " b " << b
+ << " error limits: " << errorLimits
+ << " prior log likelihood limits: " << priorLogLikelihoodLimits;
+}
+
+/**
+ * \brief Find extremum of function
+ * \param[in] a First point
+ * \param[in] b Second point
+ * \param[in] c Third point
+ *
+ * Given 3 points on a curve, find the extremum of the function in that interval
+ * by fitting a quadratic.
+ *
+ * \return The x value of the extremum clamped to the interval [a.x(), c.x()]
+ */
+double AwbBayes::interpolateQuadratic(Pwl::Point const &a, Pwl::Point const &b,
+ Pwl::Point const &c) const
+{
+ const double eps = 1e-3;
+ Pwl::Point ca = c - a;
+ Pwl::Point ba = b - a;
+ double denominator = 2 * (ba.y() * ca.x() - ca.y() * ba.x());
+ if (std::abs(denominator) > eps) {
+ double numerator = ba.y() * ca.x() * ca.x() - ca.y() * ba.x() * ba.x();
+ double result = numerator / denominator + a.x();
+ return std::max(a.x(), std::min(c.x(), result));
+ }
+ /* has degenerated to straight line segment */
+ return a.y() < c.y() - eps ? a.x() : (c.y() < a.y() - eps ? c.x() : b.x());
+}
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/awb_bayes.h b/src/ipa/libipa/awb_bayes.h
new file mode 100644
index 00000000..bb933038
--- /dev/null
+++ b/src/ipa/libipa/awb_bayes.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * Base class for bayes AWB algorithms
+ */
+
+#pragma once
+
+#include <libcamera/controls.h>
+
+#include "libcamera/internal/vector.h"
+#include "libcamera/internal/yaml_parser.h"
+
+#include "awb.h"
+#include "interpolator.h"
+#include "pwl.h"
+
+namespace libcamera {
+
+namespace ipa {
+
+class AwbBayes : public AwbAlgorithm
+{
+public:
+ AwbBayes() = default;
+
+ int init(const YamlObject &tuningData) override;
+ AwbResult calculateAwb(const AwbStats &stats, unsigned int lux) override;
+ RGB<double> gainsFromColourTemperature(double temperatureK) override;
+ void handleControls(const ControlList &controls) override;
+
+private:
+ int readPriors(const YamlObject &tuningData);
+
+ void fineSearch(double &t, double &r, double &b, ipa::Pwl const &prior,
+ const AwbStats &stats) const;
+ double coarseSearch(const ipa::Pwl &prior, const AwbStats &stats) const;
+ double interpolateQuadratic(ipa::Pwl::Point const &a,
+ ipa::Pwl::Point const &b,
+ ipa::Pwl::Point const &c) const;
+
+ Interpolator<Pwl> priors_;
+ Interpolator<Vector<double, 2>> colourGainCurve_;
+
+ ipa::Pwl ctR_;
+ ipa::Pwl ctB_;
+ ipa::Pwl ctRInverse_;
+ ipa::Pwl ctBInverse_;
+
+ double transversePos_;
+ double transverseNeg_;
+
+ ModeConfig *currentMode_ = nullptr;
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/awb_grey.cpp b/src/ipa/libipa/awb_grey.cpp
new file mode 100644
index 00000000..d3d2132b
--- /dev/null
+++ b/src/ipa/libipa/awb_grey.cpp
@@ -0,0 +1,114 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * Implementation of grey world AWB algorithm
+ */
+
+#include "awb_grey.h"
+
+#include <algorithm>
+
+#include <libcamera/base/log.h>
+#include <libcamera/control_ids.h>
+
+#include "colours.h"
+
+using namespace libcamera::controls;
+
+/**
+ * \file awb_grey.h
+ * \brief Implementation of a grey world AWB algorithm
+ */
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(Awb)
+namespace ipa {
+
+/**
+ * \class AwbGrey
+ * \brief A Grey world auto white balance algorithm
+ */
+
+/**
+ * \brief Initialize the algorithm with the given tuning data
+ * \param[in] tuningData The tuning data for the algorithm
+ *
+ * Load the colour temperature curve from the tuning data. If there is no tuning
+ * data available, continue with a warning. Manual colour temperature will not
+ * work in that case.
+ *
+ * \return 0 on success, a negative error code otherwise
+ */
+int AwbGrey::init(const YamlObject &tuningData)
+{
+ Interpolator<Vector<double, 2>> gains;
+ int ret = gains.readYaml(tuningData["colourGains"], "ct", "gains");
+ if (ret < 0)
+ LOG(Awb, Warning)
+ << "Failed to parse 'colourGains' "
+ << "parameter from tuning file; "
+ << "manual colour temperature will not work properly";
+ else
+ colourGainCurve_ = gains;
+
+ return 0;
+}
+
+/**
+ * \brief Calculate AWB data from the given statistics
+ * \param[in] stats The statistics to use for the calculation
+ * \param[in] lux The lux value of the scene
+ *
+ * The colour temperature is estimated based on the colours::estimateCCT()
+ * function. The gains are calculated purely based on the RGB means provided by
+ * the \a stats. The colour temperature is not taken into account when
+ * calculating the gains.
+ *
+ * The \a lux parameter is not used in this algorithm.
+ *
+ * \return The AWB result
+ */
+AwbResult AwbGrey::calculateAwb(const AwbStats &stats, [[maybe_unused]] unsigned int lux)
+{
+ AwbResult result;
+ auto means = stats.rgbMeans();
+ result.colourTemperature = estimateCCT(means);
+
+ /*
+ * Estimate the red and blue gains to apply in a grey world. The green
+ * gain is hardcoded to 1.0. Avoid divisions by zero by clamping the
+ * divisor to a minimum value of 1.0.
+ */
+ result.gains.r() = means.g() / std::max(means.r(), 1.0);
+ result.gains.g() = 1.0;
+ result.gains.b() = means.g() / std::max(means.b(), 1.0);
+ return result;
+}
+
+/**
+ * \brief Compute white balance gains from a colour temperature
+ * \param[in] colourTemperature The colour temperature in Kelvin
+ *
+ * Compute the white balance gains from a \a colourTemperature. This function
+ * does not take any statistics into account. It simply interpolates the colour
+ * gains configured in the colour temperature curve.
+ *
+ * \return The colour gains if a colour temperature curve is available,
+ * [1, 1, 1] otherwise.
+ */
+RGB<double> AwbGrey::gainsFromColourTemperature(double colourTemperature)
+{
+ if (!colourGainCurve_) {
+ LOG(Awb, Error) << "No gains defined";
+ return RGB<double>({ 1.0, 1.0, 1.0 });
+ }
+
+ auto gains = colourGainCurve_->getInterpolated(colourTemperature);
+ return { { gains[0], 1.0, gains[1] } };
+}
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/awb_grey.h b/src/ipa/libipa/awb_grey.h
new file mode 100644
index 00000000..7ec7bfa5
--- /dev/null
+++ b/src/ipa/libipa/awb_grey.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Ideas on Board Oy
+ *
+ * AWB grey world algorithm
+ */
+
+#pragma once
+
+#include <optional>
+
+#include "libcamera/internal/vector.h"
+
+#include "awb.h"
+#include "interpolator.h"
+
+namespace libcamera {
+
+namespace ipa {
+
+class AwbGrey : public AwbAlgorithm
+{
+public:
+ AwbGrey() = default;
+
+ int init(const YamlObject &tuningData) override;
+ AwbResult calculateAwb(const AwbStats &stats, unsigned int lux) override;
+ RGB<double> gainsFromColourTemperature(double colourTemperature) override;
+
+private:
+ std::optional<Interpolator<Vector<double, 2>>> colourGainCurve_;
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index ffc7c1d7..7c66cd57 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -87,21 +87,16 @@ namespace ipa {
*/
uint32_t CameraSensorHelper::gainCode(double gain) const
{
- const AnalogueGainConstants &k = gainConstants_;
+ if (auto *l = std::get_if<AnalogueGainLinear>(&gain_)) {
+ ASSERT(l->m0 == 0 || l->m1 == 0);
- switch (gainType_) {
- case AnalogueGainLinear:
- ASSERT(k.linear.m0 == 0 || k.linear.m1 == 0);
+ return (l->c0 - l->c1 * gain) /
+ (l->m1 * gain - l->m0);
+ } else if (auto *e = std::get_if<AnalogueGainExp>(&gain_)) {
+ ASSERT(e->a != 0 && e->m != 0);
- return (k.linear.c0 - k.linear.c1 * gain) /
- (k.linear.m1 * gain - k.linear.m0);
-
- case AnalogueGainExponential:
- ASSERT(k.exp.a != 0 && k.exp.m != 0);
-
- return std::log2(gain / k.exp.a) / k.exp.m;
-
- default:
+ return std::log2(gain / e->a) / e->m;
+ } else {
ASSERT(false);
return 0;
}
@@ -119,38 +114,26 @@ uint32_t CameraSensorHelper::gainCode(double gain) const
*/
double CameraSensorHelper::gain(uint32_t gainCode) const
{
- const AnalogueGainConstants &k = gainConstants_;
double gain = static_cast<double>(gainCode);
- switch (gainType_) {
- case AnalogueGainLinear:
- ASSERT(k.linear.m0 == 0 || k.linear.m1 == 0);
+ if (auto *l = std::get_if<AnalogueGainLinear>(&gain_)) {
+ ASSERT(l->m0 == 0 || l->m1 == 0);
- return (k.linear.m0 * gain + k.linear.c0) /
- (k.linear.m1 * gain + k.linear.c1);
+ return (l->m0 * gain + l->c0) /
+ (l->m1 * gain + l->c1);
+ } else if (auto *e = std::get_if<AnalogueGainExp>(&gain_)) {
+ ASSERT(e->a != 0 && e->m != 0);
- case AnalogueGainExponential:
- ASSERT(k.exp.a != 0 && k.exp.m != 0);
-
- return k.exp.a * std::exp2(k.exp.m * gain);
-
- default:
+ return e->a * std::exp2(e->m * gain);
+ } else {
ASSERT(false);
return 0.0;
}
}
/**
- * \enum CameraSensorHelper::AnalogueGainType
- * \brief The gain calculation modes as defined by the MIPI CCS
- *
- * Describes the image sensor analogue gain capabilities.
- * Two modes are possible, depending on the sensor: Linear and Exponential.
- */
-
-/**
- * \var CameraSensorHelper::AnalogueGainLinear
- * \brief Gain is computed using linear gain estimation
+ * \struct CameraSensorHelper::AnalogueGainLinear
+ * \brief Analogue gain constants for the linear gain model
*
* The relationship between the integer gain parameter and the resulting gain
* multiplier is given by the following equation:
@@ -165,11 +148,27 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
* The full Gain equation therefore reduces to either:
*
* \f$gain=\frac{c0}{m1x+c1}\f$ or \f$\frac{m0x+c0}{c1}\f$
+ *
+ * \var CameraSensorHelper::AnalogueGainLinear::m0
+ * \brief Constant used in the linear gain coding/decoding
+ *
+ * \note Either m0 or m1 shall be zero.
+ *
+ * \var CameraSensorHelper::AnalogueGainLinear::c0
+ * \brief Constant used in the linear gain coding/decoding
+ *
+ * \var CameraSensorHelper::AnalogueGainLinear::m1
+ * \brief Constant used in the linear gain coding/decoding
+ *
+ * \note Either m0 or m1 shall be zero.
+ *
+ * \var CameraSensorHelper::AnalogueGainLinear::c1
+ * \brief Constant used in the linear gain coding/decoding
*/
/**
- * \var CameraSensorHelper::AnalogueGainExponential
- * \brief Gain is expressed using an exponential model
+ * \struct CameraSensorHelper::AnalogueGainExp
+ * \brief Analogue gain constants for the exponential gain model
*
* The relationship between the integer gain parameter and the resulting gain
* multiplier is given by the following equation:
@@ -185,67 +184,22 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
*
* When the gain is expressed in dB, 'a' is equal to 1 and 'm' to
* \f$log_{2}{10^{\frac{1}{20}}}\f$.
- */
-
-/**
- * \struct CameraSensorHelper::AnalogueGainLinearConstants
- * \brief Analogue gain constants for the linear gain model
- *
- * \var CameraSensorHelper::AnalogueGainLinearConstants::m0
- * \brief Constant used in the linear gain coding/decoding
- *
- * \note Either m0 or m1 shall be zero.
- *
- * \var CameraSensorHelper::AnalogueGainLinearConstants::c0
- * \brief Constant used in the linear gain coding/decoding
- *
- * \var CameraSensorHelper::AnalogueGainLinearConstants::m1
- * \brief Constant used in the linear gain coding/decoding
- *
- * \note Either m0 or m1 shall be zero.
- *
- * \var CameraSensorHelper::AnalogueGainLinearConstants::c1
- * \brief Constant used in the linear gain coding/decoding
- */
-
-/**
- * \struct CameraSensorHelper::AnalogueGainExpConstants
- * \brief Analogue gain constants for the exponential gain model
*
- * \var CameraSensorHelper::AnalogueGainExpConstants::a
+ * \var CameraSensorHelper::AnalogueGainExp::a
* \brief Constant used in the exponential gain coding/decoding
*
- * \var CameraSensorHelper::AnalogueGainExpConstants::m
+ * \var CameraSensorHelper::AnalogueGainExp::m
* \brief Constant used in the exponential gain coding/decoding
*/
/**
- * \struct CameraSensorHelper::AnalogueGainConstants
- * \brief Analogue gain model constants
- *
- * This union stores the constants used to calculate the analogue gain. The
- * CameraSensorHelper::gainType_ variable selects which union member is valid.
- *
- * \var CameraSensorHelper::AnalogueGainConstants::linear
- * \brief Constants for the linear gain model
- *
- * \var CameraSensorHelper::AnalogueGainConstants::exp
- * \brief Constants for the exponential gain model
- */
-
-/**
* \var CameraSensorHelper::blackLevel_
* \brief The black level of the sensor
* \sa CameraSensorHelper::blackLevel()
*/
/**
- * \var CameraSensorHelper::gainType_
- * \brief The analogue gain model type
- */
-
-/**
- * \var CameraSensorHelper::gainConstants_
+ * \var CameraSensorHelper::gain_
* \brief The analogue gain parameters used for calculation
*
* The analogue gain is calculated through a formula, and its parameters are
@@ -519,6 +473,42 @@ private:
};
REGISTER_CAMERA_SENSOR_HELPER("ar0521", CameraSensorHelperAr0521)
+class CameraSensorHelperGc05a2 : public CameraSensorHelper
+{
+public:
+ CameraSensorHelperGc05a2()
+ {
+ /* From datasheet: 64 at 10bits. */
+ blackLevel_ = 4096;
+ gain_ = AnalogueGainLinear{ 100, 0, 0, 1024 };
+ }
+};
+REGISTER_CAMERA_SENSOR_HELPER("gc05a2", CameraSensorHelperGc05a2)
+
+class CameraSensorHelperGc08a3 : public CameraSensorHelper
+{
+public:
+ CameraSensorHelperGc08a3()
+ {
+ /* From datasheet: 64 at 10bits. */
+ blackLevel_ = 4096;
+ gain_ = AnalogueGainLinear{ 100, 0, 0, 1024 };
+ }
+};
+REGISTER_CAMERA_SENSOR_HELPER("gc08a3", CameraSensorHelperGc08a3)
+
+class CameraSensorHelperImx214 : public CameraSensorHelper
+{
+public:
+ CameraSensorHelperImx214()
+ {
+ /* From datasheet: 64 at 10bits. */
+ blackLevel_ = 4096;
+ gain_ = AnalogueGainLinear{ 0, 512, -1, 512 };
+ }
+};
+REGISTER_CAMERA_SENSOR_HELPER("imx214", CameraSensorHelperImx214)
+
class CameraSensorHelperImx219 : public CameraSensorHelper
{
public:
@@ -526,8 +516,7 @@ public:
{
/* From datasheet: 64 at 10bits. */
blackLevel_ = 4096;
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 0, 256, -1, 256 };
+ gain_ = AnalogueGainLinear{ 0, 256, -1, 256 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx219", CameraSensorHelperImx219)
@@ -539,8 +528,7 @@ public:
{
/* From datasheet: 0x40 at 10bits. */
blackLevel_ = 4096;
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 0, 512, -1, 512 };
+ gain_ = AnalogueGainLinear{ 0, 512, -1, 512 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx258", CameraSensorHelperImx258)
@@ -550,8 +538,9 @@ class CameraSensorHelperImx283 : public CameraSensorHelper
public:
CameraSensorHelperImx283()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 0, 2048, -1, 2048 };
+ /* From datasheet: 0x32 at 10bits. */
+ blackLevel_ = 3200;
+ gain_ = AnalogueGainLinear{ 0, 2048, -1, 2048 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx283", CameraSensorHelperImx283)
@@ -561,8 +550,9 @@ class CameraSensorHelperImx290 : public CameraSensorHelper
public:
CameraSensorHelperImx290()
{
- gainType_ = AnalogueGainExponential;
- gainConstants_.exp = { 1.0, expGainDb(0.3) };
+ /* From datasheet: 0xf0 at 12bits. */
+ blackLevel_ = 3840;
+ gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx290", CameraSensorHelperImx290)
@@ -572,8 +562,7 @@ class CameraSensorHelperImx296 : public CameraSensorHelper
public:
CameraSensorHelperImx296()
{
- gainType_ = AnalogueGainExponential;
- gainConstants_.exp = { 1.0, expGainDb(0.1) };
+ gain_ = AnalogueGainExp{ 1.0, expGainDb(0.1) };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx296", CameraSensorHelperImx296)
@@ -590,8 +579,7 @@ public:
{
/* From datasheet: 0x32 at 10bits. */
blackLevel_ = 3200;
- gainType_ = AnalogueGainExponential;
- gainConstants_.exp = { 1.0, expGainDb(0.3) };
+ gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx335", CameraSensorHelperImx335)
@@ -601,19 +589,22 @@ class CameraSensorHelperImx415 : public CameraSensorHelper
public:
CameraSensorHelperImx415()
{
- gainType_ = AnalogueGainExponential;
- gainConstants_.exp = { 1.0, expGainDb(0.3) };
+ gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx415", CameraSensorHelperImx415)
+class CameraSensorHelperImx462 : public CameraSensorHelperImx290
+{
+};
+REGISTER_CAMERA_SENSOR_HELPER("imx462", CameraSensorHelperImx462)
+
class CameraSensorHelperImx477 : public CameraSensorHelper
{
public:
CameraSensorHelperImx477()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 0, 1024, -1, 1024 };
+ gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("imx477", CameraSensorHelperImx477)
@@ -627,8 +618,7 @@ public:
* The Sensor Manual doesn't appear to document the gain model.
* This has been validated with some empirical testing only.
*/
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov2685", CameraSensorHelperOv2685)
@@ -638,8 +628,7 @@ class CameraSensorHelperOv2740 : public CameraSensorHelper
public:
CameraSensorHelperOv2740()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov2740", CameraSensorHelperOv2740)
@@ -651,8 +640,7 @@ public:
{
/* From datasheet: 0x40 at 12bits. */
blackLevel_ = 1024;
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov4689", CameraSensorHelperOv4689)
@@ -664,8 +652,7 @@ public:
{
/* From datasheet: 0x10 at 10bits. */
blackLevel_ = 1024;
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 16 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov5640", CameraSensorHelperOv5640)
@@ -675,8 +662,7 @@ class CameraSensorHelperOv5647 : public CameraSensorHelper
public:
CameraSensorHelperOv5647()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 16 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov5647", CameraSensorHelperOv5647)
@@ -686,8 +672,7 @@ class CameraSensorHelperOv5670 : public CameraSensorHelper
public:
CameraSensorHelperOv5670()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov5670", CameraSensorHelperOv5670)
@@ -699,8 +684,7 @@ public:
{
/* From Linux kernel driver: 0x40 at 10bits. */
blackLevel_ = 4096;
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov5675", CameraSensorHelperOv5675)
@@ -710,8 +694,7 @@ class CameraSensorHelperOv5693 : public CameraSensorHelper
public:
CameraSensorHelperOv5693()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 16 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov5693", CameraSensorHelperOv5693)
@@ -721,8 +704,7 @@ class CameraSensorHelperOv64a40 : public CameraSensorHelper
public:
CameraSensorHelperOv64a40()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov64a40", CameraSensorHelperOv64a40)
@@ -732,15 +714,13 @@ class CameraSensorHelperOv8858 : public CameraSensorHelper
public:
CameraSensorHelperOv8858()
{
- gainType_ = AnalogueGainLinear;
-
/*
* \todo Validate the selected 1/128 step value as it differs
* from what the sensor manual describes.
*
* See: https://patchwork.linuxtv.org/project/linux-media/patch/20221106171129.166892-2-nicholas@rothemail.net/#142267
*/
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov8858", CameraSensorHelperOv8858)
@@ -750,8 +730,7 @@ class CameraSensorHelperOv8865 : public CameraSensorHelper
public:
CameraSensorHelperOv8865()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov8865", CameraSensorHelperOv8865)
@@ -761,8 +740,7 @@ class CameraSensorHelperOv13858 : public CameraSensorHelper
public:
CameraSensorHelperOv13858()
{
- gainType_ = AnalogueGainLinear;
- gainConstants_.linear = { 1, 0, 0, 128 };
+ gain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
}
};
REGISTER_CAMERA_SENSOR_HELPER("ov13858", CameraSensorHelperOv13858)
diff --git a/src/ipa/libipa/camera_sensor_helper.h b/src/ipa/libipa/camera_sensor_helper.h
index 75868205..a9300a64 100644
--- a/src/ipa/libipa/camera_sensor_helper.h
+++ b/src/ipa/libipa/camera_sensor_helper.h
@@ -11,6 +11,7 @@
#include <optional>
#include <stdint.h>
#include <string>
+#include <variant>
#include <vector>
#include <libcamera/base/class.h>
@@ -30,31 +31,20 @@ public:
virtual double gain(uint32_t gainCode) const;
protected:
- enum AnalogueGainType {
- AnalogueGainLinear,
- AnalogueGainExponential,
- };
-
- struct AnalogueGainLinearConstants {
+ struct AnalogueGainLinear {
int16_t m0;
int16_t c0;
int16_t m1;
int16_t c1;
};
- struct AnalogueGainExpConstants {
+ struct AnalogueGainExp {
double a;
double m;
};
- union AnalogueGainConstants {
- AnalogueGainLinearConstants linear;
- AnalogueGainExpConstants exp;
- };
-
std::optional<int16_t> blackLevel_;
- AnalogueGainType gainType_;
- AnalogueGainConstants gainConstants_;
+ std::variant<std::monostate, AnalogueGainLinear, AnalogueGainExp> gain_;
private:
LIBCAMERA_DISABLE_COPY_AND_MOVE(CameraSensorHelper)
diff --git a/src/ipa/libipa/colours.cpp b/src/ipa/libipa/colours.cpp
new file mode 100644
index 00000000..97124cf4
--- /dev/null
+++ b/src/ipa/libipa/colours.cpp
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2024, Ideas on Board Oy
+ *
+ * libipa miscellaneous colour helpers
+ */
+
+#include "colours.h"
+
+#include <algorithm>
+#include <cmath>
+
+namespace libcamera {
+
+namespace ipa {
+
+/**
+ * \file colours.h
+ * \brief Functions to reduce code duplication between IPA modules
+ */
+
+/**
+ * \brief Estimate luminance from RGB values following ITU-R BT.601
+ * \param[in] rgb The RGB value
+ *
+ * This function estimates a luminance value from a triplet of Red, Green and
+ * Blue values, following the formula defined by ITU-R Recommendation BT.601-7
+ * which can be found at https://www.itu.int/rec/R-REC-BT.601
+ *
+ * \return The estimated luminance value
+ */
+double rec601LuminanceFromRGB(const RGB<double> &rgb)
+{
+ static const Vector<double, 3> rgb2y{{
+ 0.299, 0.587, 0.114
+ }};
+
+ return rgb.dot(rgb2y);
+}
+
+/**
+ * \brief Estimate correlated colour temperature from RGB color space input
+ * \param[in] rgb The RGB value
+ *
+ * This function estimates the correlated color temperature RGB color space
+ * input. In physics and color science, the Planckian locus or black body locus
+ * is the path or locus that the color of an incandescent black body would take
+ * in a particular chromaticity space as the black body temperature changes.
+ *
+ * If a narrow range of color temperatures is considered (those encapsulating
+ * daylight being the most practical case) one can approximate the Planckian
+ * locus in order to calculate the CCT in terms of chromaticity coordinates.
+ *
+ * More detailed information can be found in:
+ * https://en.wikipedia.org/wiki/Color_temperature#Approximation
+ *
+ * \return The estimated color temperature
+ */
+uint32_t estimateCCT(const RGB<double> &rgb)
+{
+ /*
+ * Convert the RGB values to CIE tristimulus values (XYZ) and divide by
+ * the sum of X, Y and Z to calculate the CIE xy chromaticity.
+ */
+ static const Matrix<double, 3, 3> rgb2xyz({
+ -0.14282, 1.54924, -0.95641,
+ -0.32466, 1.57837, -0.73191,
+ -0.68202, 0.77073, 0.56332
+ });
+
+ Vector<double, 3> xyz = rgb2xyz * rgb;
+ xyz /= xyz.sum();
+
+ /* Calculate CCT */
+ double n = (xyz.x() - 0.3320) / (0.1858 - xyz.y());
+ return 449 * n * n * n + 3525 * n * n + 6823.3 * n + 5520.33;
+}
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/colours.h b/src/ipa/libipa/colours.h
new file mode 100644
index 00000000..d39b2ca8
--- /dev/null
+++ b/src/ipa/libipa/colours.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2024, Ideas on Board Oy
+ *
+ * libipa miscellaneous colour helpers
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+#include "libcamera/internal/vector.h"
+
+namespace libcamera {
+
+namespace ipa {
+
+double rec601LuminanceFromRGB(const RGB<double> &rgb);
+uint32_t estimateCCT(const RGB<double> &rgb);
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/exposure_mode_helper.cpp b/src/ipa/libipa/exposure_mode_helper.cpp
index 7703becc..0c1e99e3 100644
--- a/src/ipa/libipa/exposure_mode_helper.cpp
+++ b/src/ipa/libipa/exposure_mode_helper.cpp
@@ -14,9 +14,9 @@
* \file exposure_mode_helper.h
* \brief Helper class that performs computations relating to exposure
*
- * AEGC algorithms have a need to split exposure between shutter time, analogue
+ * AEGC algorithms have a need to split exposure between exposure time, analogue
* and digital gain. Multiple implementations do so based on paired stages of
- * shutter time and gain limits; provide a helper to avoid duplicating the code.
+ * exposure time and gain limits; provide a helper to avoid duplicating the code.
*/
namespace libcamera {
@@ -29,24 +29,24 @@ namespace ipa {
/**
* \class ExposureModeHelper
- * \brief Class for splitting exposure into shutter time and total gain
+ * \brief Class for splitting exposure into exposure time and total gain
*
* The ExposureModeHelper class provides a standard interface through which an
- * AEGC algorithm can divide exposure between shutter time and gain. It is
- * configured with a set of shutter time and gain pairs and works by initially
- * fixing gain at 1.0 and increasing shutter time up to the shutter time value
+ * AEGC algorithm can divide exposure between exposure time and gain. It is
+ * configured with a set of exposure time and gain pairs and works by initially
+ * fixing gain at 1.0 and increasing exposure time up to the exposure time value
* from the first pair in the set in an attempt to meet the required exposure
* value.
*
- * If the required exposure is not achievable by the first shutter time value
+ * If the required exposure is not achievable by the first exposure time value
* alone it ramps gain up to the value from the first pair in the set. If the
- * required exposure is still not met it then allows shutter time to ramp up to
- * the shutter time value from the second pair in the set, and continues in this
+ * required exposure is still not met it then allows exposure time to ramp up to
+ * the exposure time value from the second pair in the set, and continues in this
* vein until either the required exposure time is met, or else the hardware's
- * shutter time or gain limits are reached.
+ * exposure time or gain limits are reached.
*
* This method allows users to strike a balance between a well-exposed image and
- * an acceptable frame-rate, as opposed to simply maximising shutter time
+ * an acceptable frame-rate, as opposed to simply maximising exposure time
* followed by gain. The same helpers can be used to perform the latter
* operation if needed by passing an empty set of pairs to the initialisation
* function.
@@ -61,56 +61,56 @@ namespace ipa {
/**
* \brief Construct an ExposureModeHelper instance
- * \param[in] stages The vector of paired shutter time and gain limits
+ * \param[in] stages The vector of paired exposure time and gain limits
*
- * The input stages are shutter time and _total_ gain pairs; the gain
+ * The input stages are exposure time and _total_ gain pairs; the gain
* encompasses both analogue and digital gain.
*
* The vector of stages may be empty. In that case, the helper will simply use
- * the runtime limits set through setShutterGainLimits() instead.
+ * the runtime limits set through setLimits() instead.
*/
ExposureModeHelper::ExposureModeHelper(const Span<std::pair<utils::Duration, double>> stages)
{
- minShutter_ = 0us;
- maxShutter_ = 0us;
+ minExposureTime_ = 0us;
+ maxExposureTime_ = 0us;
minGain_ = 0;
maxGain_ = 0;
for (const auto &[s, g] : stages) {
- shutters_.push_back(s);
+ exposureTimes_.push_back(s);
gains_.push_back(g);
}
}
/**
- * \brief Set the shutter time and gain limits
- * \param[in] minShutter The minimum shutter time supported
- * \param[in] maxShutter The maximum shutter time supported
+ * \brief Set the exposure time and gain limits
+ * \param[in] minExposureTime The minimum exposure time supported
+ * \param[in] maxExposureTime The maximum exposure time supported
* \param[in] minGain The minimum analogue gain supported
* \param[in] maxGain The maximum analogue gain supported
*
- * This function configures the shutter time and analogue gain limits that need
+ * This function configures the exposure time and analogue gain limits that need
* to be adhered to as the helper divides up exposure. Note that this function
* *must* be called whenever those limits change and before splitExposure() is
* used.
*
- * If the algorithm using the helpers needs to indicate that either shutter time
+ * If the algorithm using the helpers needs to indicate that either exposure time
* or analogue gain or both should be fixed it can do so by setting both the
* minima and maxima to the same value.
*/
-void ExposureModeHelper::setLimits(utils::Duration minShutter,
- utils::Duration maxShutter,
+void ExposureModeHelper::setLimits(utils::Duration minExposureTime,
+ utils::Duration maxExposureTime,
double minGain, double maxGain)
{
- minShutter_ = minShutter;
- maxShutter_ = maxShutter;
+ minExposureTime_ = minExposureTime;
+ maxExposureTime_ = maxExposureTime;
minGain_ = minGain;
maxGain_ = maxGain;
}
-utils::Duration ExposureModeHelper::clampShutter(utils::Duration shutter) const
+utils::Duration ExposureModeHelper::clampExposureTime(utils::Duration exposureTime) const
{
- return std::clamp(shutter, minShutter_, maxShutter_);
+ return std::clamp(exposureTime, minExposureTime_, maxExposureTime_);
}
double ExposureModeHelper::clampGain(double gain) const
@@ -119,122 +119,121 @@ double ExposureModeHelper::clampGain(double gain) const
}
/**
- * \brief Split exposure time into shutter time and gain
- * \param[in] exposure Exposure time
+ * \brief Split exposure into exposure time and gain
+ * \param[in] exposure Exposure value
*
- * This function divides a given exposure time into shutter time, analogue and
- * digital gain by iterating through stages of shutter time and gain limits. At
- * each stage the current stage's shutter time limit is multiplied by the
+ * This function divides a given exposure into exposure time, analogue and
+ * digital gain by iterating through stages of exposure time and gain limits.
+ * At each stage the current stage's exposure time limit is multiplied by the
* previous stage's gain limit (or 1.0 initially) to see if the combination of
- * the two can meet the required exposure time. If they cannot then the current
- * stage's shutter time limit is multiplied by the same stage's gain limit to
+ * the two can meet the required exposure. If they cannot then the current
+ * stage's exposure time limit is multiplied by the same stage's gain limit to
* see if that combination can meet the required exposure time. If they cannot
* then the function moves to consider the next stage.
*
- * When a combination of shutter time and gain _stage_ limits are found that are
- * sufficient to meet the required exposure time, the function attempts to
- * reduce shutter time as much as possible whilst fixing gain and still meeting
- * the exposure time. If a _runtime_ limit prevents shutter time from being
- * lowered enough to meet the exposure time with gain fixed at the stage limit,
- * gain is also lowered to compensate.
+ * When a combination of exposure time and gain _stage_ limits are found that
+ * are sufficient to meet the required exposure, the function attempts to reduce
+ * exposure time as much as possible whilst fixing gain and still meeting the
+ * exposure. If a _runtime_ limit prevents exposure time from being lowered
+ * enough to meet the exposure with gain fixed at the stage limit, gain is also
+ * lowered to compensate.
*
- * Once the shutter time and gain values are ascertained, gain is assigned as
+ * Once the exposure time and gain values are ascertained, gain is assigned as
* analogue gain as much as possible, with digital gain only in use if the
* maximum analogue gain runtime limit is unable to accommodate the exposure
* value.
*
- * If no combination of shutter time and gain limits is found that meets the
- * required exposure time, the helper falls-back to simply maximising the
- * shutter time first, followed by analogue gain, followed by digital gain.
+ * If no combination of exposure time and gain limits is found that meets the
+ * required exposure, the helper falls-back to simply maximising the exposure
+ * time first, followed by analogue gain, followed by digital gain.
*
- * \return Tuple of shutter time, analogue gain, and digital gain
+ * \return Tuple of exposure time, analogue gain, and digital gain
*/
std::tuple<utils::Duration, double, double>
ExposureModeHelper::splitExposure(utils::Duration exposure) const
{
- ASSERT(maxShutter_);
+ ASSERT(maxExposureTime_);
ASSERT(maxGain_);
bool gainFixed = minGain_ == maxGain_;
- bool shutterFixed = minShutter_ == maxShutter_;
+ bool exposureTimeFixed = minExposureTime_ == maxExposureTime_;
/*
* There's no point entering the loop if we cannot change either gain
- * nor shutter anyway.
+ * nor exposure time anyway.
*/
- if (shutterFixed && gainFixed)
- return { minShutter_, minGain_, exposure / (minShutter_ * minGain_) };
+ if (exposureTimeFixed && gainFixed)
+ return { minExposureTime_, minGain_, exposure / (minExposureTime_ * minGain_) };
- utils::Duration shutter;
+ utils::Duration exposureTime;
double stageGain = 1.0;
double gain;
for (unsigned int stage = 0; stage < gains_.size(); stage++) {
double lastStageGain = stage == 0 ? 1.0 : clampGain(gains_[stage - 1]);
- utils::Duration stageShutter = clampShutter(shutters_[stage]);
+ utils::Duration stageExposureTime = clampExposureTime(exposureTimes_[stage]);
stageGain = clampGain(gains_[stage]);
/*
- * We perform the clamping on both shutter and gain in case the
- * helper has had limits set that prevent those values being
- * lowered beyond a certain minimum...this can happen at runtime
- * for various reasons and so would not be known when the stage
- * limits are initialised.
+ * We perform the clamping on both exposure time and gain in
+ * case the helper has had limits set that prevent those values
+ * being lowered beyond a certain minimum...this can happen at
+ * runtime for various reasons and so would not be known when
+ * the stage limits are initialised.
*/
- if (stageShutter * lastStageGain >= exposure) {
- shutter = clampShutter(exposure / clampGain(lastStageGain));
- gain = clampGain(exposure / shutter);
+ /* Clamp the gain to lastStageGain and regulate exposureTime. */
+ if (stageExposureTime * lastStageGain >= exposure) {
+ exposureTime = clampExposureTime(exposure / clampGain(lastStageGain));
+ gain = clampGain(exposure / exposureTime);
- return { shutter, gain, exposure / (shutter * gain) };
+ return { exposureTime, gain, exposure / (exposureTime * gain) };
}
- if (stageShutter * stageGain >= exposure) {
- shutter = clampShutter(exposure / clampGain(stageGain));
- gain = clampGain(exposure / shutter);
+ /* Clamp the exposureTime to stageExposureTime and regulate gain. */
+ if (stageExposureTime * stageGain >= exposure) {
+ exposureTime = clampExposureTime(stageExposureTime);
+ gain = clampGain(exposure / exposureTime);
- return { shutter, gain, exposure / (shutter * gain) };
+ return { exposureTime, gain, exposure / (exposureTime * gain) };
}
}
/*
- * From here on all we can do is max out the shutter time, followed by
+ * From here on all we can do is max out the exposure time, followed by
* the analogue gain. If we still haven't achieved the target we send
* the rest of the exposure time to digital gain. If we were given no
* stages to use then the default stageGain of 1.0 is used so that
- * shutter time is maxed before gain is touched at all.
+ * exposure time is maxed before gain is touched at all.
*/
- shutter = clampShutter(exposure / clampGain(stageGain));
- gain = clampGain(exposure / shutter);
+ exposureTime = clampExposureTime(exposure / clampGain(stageGain));
+ gain = clampGain(exposure / exposureTime);
- return { shutter, gain, exposure / (shutter * gain) };
+ return { exposureTime, gain, exposure / (exposureTime * gain) };
}
/**
- * \fn ExposureModeHelper::minShutter()
- * \brief Retrieve the configured minimum shutter time limit set through
- * setShutterGainLimits()
- * \return The minShutter_ value
+ * \fn ExposureModeHelper::minExposureTime()
+ * \brief Retrieve the configured minimum exposure time limit set through
+ * setLimits()
+ * \return The minExposureTime_ value
*/
/**
- * \fn ExposureModeHelper::maxShutter()
- * \brief Retrieve the configured maximum shutter time set through
- * setShutterGainLimits()
- * \return The maxShutter_ value
+ * \fn ExposureModeHelper::maxExposureTime()
+ * \brief Retrieve the configured maximum exposure time set through setLimits()
+ * \return The maxExposureTime_ value
*/
/**
* \fn ExposureModeHelper::minGain()
- * \brief Retrieve the configured minimum gain set through
- * setShutterGainLimits()
+ * \brief Retrieve the configured minimum gain set through setLimits()
* \return The minGain_ value
*/
/**
* \fn ExposureModeHelper::maxGain()
- * \brief Retrieve the configured maximum gain set through
- * setShutterGainLimits()
+ * \brief Retrieve the configured maximum gain set through setLimits()
* \return The maxGain_ value
*/
diff --git a/src/ipa/libipa/exposure_mode_helper.h b/src/ipa/libipa/exposure_mode_helper.h
index 85c665d7..c5be1b67 100644
--- a/src/ipa/libipa/exposure_mode_helper.h
+++ b/src/ipa/libipa/exposure_mode_helper.h
@@ -24,26 +24,26 @@ public:
ExposureModeHelper(const Span<std::pair<utils::Duration, double>> stages);
~ExposureModeHelper() = default;
- void setLimits(utils::Duration minShutter, utils::Duration maxShutter,
+ void setLimits(utils::Duration minExposureTime, utils::Duration maxExposureTime,
double minGain, double maxGain);
std::tuple<utils::Duration, double, double>
splitExposure(utils::Duration exposure) const;
- utils::Duration minShutter() const { return minShutter_; }
- utils::Duration maxShutter() const { return maxShutter_; }
+ utils::Duration minExposureTime() const { return minExposureTime_; }
+ utils::Duration maxExposureTime() const { return maxExposureTime_; }
double minGain() const { return minGain_; }
double maxGain() const { return maxGain_; }
private:
- utils::Duration clampShutter(utils::Duration shutter) const;
+ utils::Duration clampExposureTime(utils::Duration exposureTime) const;
double clampGain(double gain) const;
- std::vector<utils::Duration> shutters_;
+ std::vector<utils::Duration> exposureTimes_;
std::vector<double> gains_;
- utils::Duration minShutter_;
- utils::Duration maxShutter_;
+ utils::Duration minExposureTime_;
+ utils::Duration maxExposureTime_;
double minGain_;
double maxGain_;
};
diff --git a/src/ipa/libipa/fc_queue.h b/src/ipa/libipa/fc_queue.h
index 24d9e82b..a1d13652 100644
--- a/src/ipa/libipa/fc_queue.h
+++ b/src/ipa/libipa/fc_queue.h
@@ -25,6 +25,7 @@ struct FrameContext {
private:
template<typename T> friend class FCQueue;
uint32_t frame;
+ bool initialised = false;
};
template<typename FrameContext>
@@ -38,8 +39,10 @@ public:
void clear()
{
- for (FrameContext &ctx : contexts_)
+ for (FrameContext &ctx : contexts_) {
+ ctx.initialised = false;
ctx.frame = 0;
+ }
}
FrameContext &alloc(const uint32_t frame)
@@ -83,6 +86,21 @@ public:
<< " has been overwritten by "
<< frameContext.frame;
+ if (frame == 0 && !frameContext.initialised) {
+ /*
+ * If the IPA calls get() at start() time it will get an
+ * un-intialized FrameContext as the below "frame ==
+ * frameContext.frame" check will return success because
+ * FrameContexts are zeroed at creation time.
+ *
+ * Make sure the FrameContext gets initialised if get()
+ * is called before alloc() by the IPA for frame#0.
+ */
+ init(frameContext, frame);
+
+ return frameContext;
+ }
+
if (frame == frameContext.frame)
return frameContext;
@@ -108,6 +126,7 @@ private:
{
frameContext = {};
frameContext.frame = frame;
+ frameContext.initialised = true;
}
std::vector<FrameContext> contexts_;
diff --git a/src/ipa/rkisp1/utils.cpp b/src/ipa/libipa/fixedpoint.cpp
index 960ec64e..6b698fc5 100644
--- a/src/ipa/rkisp1/utils.cpp
+++ b/src/ipa/libipa/fixedpoint.cpp
@@ -2,18 +2,18 @@
/*
* Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
*
- * Miscellaneous utility functions specific to rkisp1
+ * Fixed / floating point conversions
*/
-#include "utils.h"
+#include "fixedpoint.h"
/**
- * \file utils.h
+ * \file fixedpoint.h
*/
namespace libcamera {
-namespace ipa::rkisp1::utils {
+namespace ipa {
/**
* \fn R floatingToFixedPoint(T number)
@@ -37,6 +37,6 @@ namespace ipa::rkisp1::utils {
* \return The converted value
*/
-} /* namespace ipa::rkisp1::utils */
+} /* namespace ipa */
} /* namespace libcamera */
diff --git a/src/ipa/rkisp1/utils.h b/src/ipa/libipa/fixedpoint.h
index 450f2244..709cf50f 100644
--- a/src/ipa/rkisp1/utils.h
+++ b/src/ipa/libipa/fixedpoint.h
@@ -2,18 +2,17 @@
/*
* Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
*
- * Miscellaneous utility functions specific to rkisp1
+ * Fixed / floating point conversions
*/
#pragma once
#include <cmath>
-#include <limits>
#include <type_traits>
namespace libcamera {
-namespace ipa::rkisp1::utils {
+namespace ipa {
#ifndef __DOXYGEN__
template<unsigned int I, unsigned int F, typename R, typename T,
@@ -61,6 +60,6 @@ constexpr R fixedToFloatingPoint(T number)
return static_cast<R>(t) / static_cast<R>(1 << F);
}
-} /* namespace ipa::rkisp1::utils */
+} /* namespace ipa */
} /* namespace libcamera */
diff --git a/src/ipa/libipa/histogram.cpp b/src/ipa/libipa/histogram.cpp
index 5fbfadf5..bcf26390 100644
--- a/src/ipa/libipa/histogram.cpp
+++ b/src/ipa/libipa/histogram.cpp
@@ -63,6 +63,12 @@ Histogram::Histogram(Span<const uint32_t> data)
*/
/**
+ * \fn Histogram::data()
+ * \brief Retrieve the internal data
+ * \return The data
+ */
+
+/**
* \fn Histogram::total()
* \brief Retrieve the total number of values in the data set
* \return Number of values
@@ -124,7 +130,8 @@ double Histogram::quantile(double q, uint32_t first, uint32_t last) const
if (cumulative_[first + 1] == cumulative_[first])
frac = 0;
else
- frac = (item - cumulative_[first]) / (cumulative_[first + 1] - cumulative_[first]);
+ frac = (q * total() - cumulative_[first])
+ / (cumulative_[first + 1] - cumulative_[first]);
return first + frac;
}
@@ -142,26 +149,37 @@ double Histogram::quantile(double q, uint32_t first, uint32_t last) const
double Histogram::interQuantileMean(double lowQuantile, double highQuantile) const
{
ASSERT(highQuantile > lowQuantile);
- /* Proportion of pixels which lies below lowQuantile */
- double lowPoint = quantile(lowQuantile);
- /* Proportion of pixels which lies below highQuantile */
- double highPoint = quantile(highQuantile, static_cast<uint32_t>(lowPoint));
- double sumBinFreq = 0, cumulFreq = 0;
-
- for (double p_next = floor(lowPoint) + 1.0;
- p_next <= ceil(highPoint);
- lowPoint = p_next, p_next += 1.0) {
- int bin = floor(lowPoint);
+
+ /* Proportion of pixels which lies below lowQuantile and highQuantile. */
+ const double lowPoint = quantile(lowQuantile);
+ const double highPoint = quantile(highQuantile, static_cast<uint32_t>(lowPoint));
+
+ double sumBinFreq = 0;
+ double cumulFreq = 0;
+
+ /*
+ * Calculate the mean pixel value between the low and high points by
+ * summing all the pixels between the two points, and dividing the sum
+ * by the number of pixels. Given the discrete nature of the histogram
+ * data, the sum of the pixels is approximated by accumulating the
+ * product of the bin values (calculated as the mid point of the bin) by
+ * the number of pixels they contain, for each bin in the internal.
+ */
+ for (unsigned bin = std::floor(lowPoint); bin < std::ceil(highPoint); bin++) {
+ const double lowBound = std::max<double>(bin, lowPoint);
+ const double highBound = std::min<double>(bin + 1, highPoint);
+
double freq = (cumulative_[bin + 1] - cumulative_[bin])
- * (std::min(p_next, highPoint) - lowPoint);
+ * (highBound - lowBound);
/* Accumulate weighted bin */
- sumBinFreq += bin * freq;
+ sumBinFreq += (highBound + lowBound) / 2 * freq;
+
/* Accumulate weights */
cumulFreq += freq;
}
- /* add 0.5 to give an average for bin mid-points */
- return sumBinFreq / cumulFreq + 0.5;
+
+ return sumBinFreq / cumulFreq;
}
} /* namespace ipa */
diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h
index 032adca0..a926002c 100644
--- a/src/ipa/libipa/histogram.h
+++ b/src/ipa/libipa/histogram.h
@@ -7,7 +7,6 @@
#pragma once
-#include <assert.h>
#include <limits.h>
#include <stdint.h>
#include <type_traits>
@@ -37,6 +36,7 @@ public:
}
size_t bins() const { return cumulative_.size() - 1; }
+ const Span<const uint64_t> data() const { return cumulative_; }
uint64_t total() const { return cumulative_[cumulative_.size() - 1]; }
uint64_t cumulativeFrequency(double bin) const;
double quantile(double q, uint32_t first = 0, uint32_t last = UINT_MAX) const;
diff --git a/src/ipa/libipa/interpolator.cpp b/src/ipa/libipa/interpolator.cpp
new file mode 100644
index 00000000..f901a86e
--- /dev/null
+++ b/src/ipa/libipa/interpolator.cpp
@@ -0,0 +1,163 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
+ *
+ * Helper class for interpolating objects
+ */
+#include "interpolator.h"
+
+#include <algorithm>
+#include <string>
+
+#include <libcamera/base/log.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
+#include "interpolator.h"
+
+/**
+ * \file interpolator.h
+ * \brief Helper class for linear interpolating a set of objects
+ */
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(Interpolator)
+
+namespace ipa {
+
+/**
+ * \class Interpolator
+ * \brief Class for storing, retrieving, and interpolating objects
+ * \tparam T Type of objects stored in the interpolator
+ *
+ * The main use case is to pass a map from color temperatures to corresponding
+ * objects (eg. matrices for color correction), and then requesting a
+ * interpolated object for a specific color temperature. This class will
+ * abstract away the interpolation portion.
+ */
+
+/**
+ * \fn Interpolator::Interpolator()
+ * \brief Construct an empty interpolator
+ */
+
+/**
+ * \fn Interpolator::Interpolator(const std::map<unsigned int, T> &data)
+ * \brief Construct an interpolator from a map of objects
+ * \param data Map from which to construct the interpolator
+ */
+
+/**
+ * \fn Interpolator::Interpolator(std::map<unsigned int, T> &&data)
+ * \brief Construct an interpolator from a map of objects
+ * \param data Map from which to construct the interpolator
+ */
+
+/**
+ * \fn int Interpolator<T>::readYaml(const libcamera::YamlObject &yaml,
+ const std::string &key_name,
+ const std::string &value_name)
+ * \brief Initialize an Interpolator instance from yaml
+ * \tparam T Type of data stored in the interpolator
+ * \param[in] yaml The yaml object that contains the map of unsigned integers to
+ * objects
+ * \param[in] key_name The name of the key in the yaml object
+ * \param[in] value_name The name of the value in the yaml object
+ *
+ * The yaml object is expected to be a list of maps. Each map has two or more
+ * pairs: one of \a key_name to the key value (usually color temperature), and
+ * one or more of \a value_name to the object. This is a bit difficult to
+ * explain, so here is an example (in python, as it is easier to parse than
+ * yaml):
+ * [
+ * {
+ * 'ct': 2860,
+ * 'ccm': [ 2.12089, -0.52461, -0.59629,
+ * -0.85342, 2.80445, -0.95103,
+ * -0.26897, -1.14788, 2.41685 ],
+ * 'offsets': [ 0, 0, 0 ]
+ * },
+ *
+ * {
+ * 'ct': 2960,
+ * 'ccm': [ 2.26962, -0.54174, -0.72789,
+ * -0.77008, 2.60271, -0.83262,
+ * -0.26036, -1.51254, 2.77289 ],
+ * 'offsets': [ 0, 0, 0 ]
+ * },
+ *
+ * {
+ * 'ct': 3603,
+ * 'ccm': [ 2.18644, -0.66148, -0.52496,
+ * -0.77828, 2.69474, -0.91645,
+ * -0.25239, -0.83059, 2.08298 ],
+ * 'offsets': [ 0, 0, 0 ]
+ * },
+ * ]
+ *
+ * In this case, \a key_name would be 'ct', and \a value_name can be either
+ * 'ccm' or 'offsets'. This way multiple interpolators can be defined in
+ * one set of color temperature ranges in the tuning file, and they can be
+ * retrieved separately with the \a value_name parameter.
+ *
+ * \return Zero on success, negative error code otherwise
+ */
+
+/**
+ * \fn void Interpolator<T>::setQuantization(const unsigned int q)
+ * \brief Set the quantization value
+ * \param[in] q The quantization value
+ *
+ * Sets the quantization value. When this is set, 'key' gets quantized to this
+ * size, before doing the interpolation. This can help in reducing the number of
+ * updates pushed to the hardware.
+ *
+ * Note that normally a threshold needs to be combined with quantization.
+ * Otherwise a value that swings around the edge of the quantization step will
+ * lead to constant updates.
+ */
+
+/**
+ * \fn void Interpolator<T>::setData(std::map<unsigned int, T> &&data)
+ * \brief Set the internal map
+ *
+ * Overwrites the internal map using move semantics.
+ */
+
+/**
+ * \fn std::map<unsigned int, T> &Interpolator<T>::data() const
+ * \brief Access the internal map
+ *
+ * \return The internal map
+ */
+
+/**
+ * \fn const T& Interpolator<T>::getInterpolated()
+ * \brief Retrieve an interpolated value for the given key
+ * \param[in] key The unsigned integer key of the object to retrieve
+ * \param[out] quantizedKey If provided, the key value after quantization
+ * \return The object corresponding to the key. The object is cached internally,
+ * so on successive calls with the same key (after quantization) interpolation
+ * is not recalculated.
+ */
+
+/**
+ * \fn void Interpolator<T>::interpolate(const T &a, const T &b, T &dest, double lambda)
+ * \brief Interpolate between two instances of T
+ * \param a The first value to interpolate
+ * \param b The second value to interpolate
+ * \param dest The destination for the interpolated value
+ * \param lambda The interpolation factor (0..1)
+ *
+ * Interpolates between \a a and \a b according to \a lambda. It calculates
+ * dest = a * (1.0 - lambda) + b * lambda;
+ *
+ * If T supports multiplication with double and addition, this function can be
+ * used as is. For other types this function can be overwritten using partial
+ * template specialization.
+ */
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/interpolator.h b/src/ipa/libipa/interpolator.h
new file mode 100644
index 00000000..7880db69
--- /dev/null
+++ b/src/ipa/libipa/interpolator.h
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
+ *
+ * Helper class for interpolating maps of objects
+ */
+
+#pragma once
+
+#include <algorithm>
+#include <cmath>
+#include <map>
+#include <string>
+#include <tuple>
+
+#include <libcamera/base/log.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(Interpolator)
+
+namespace ipa {
+
+template<typename T>
+class Interpolator
+{
+public:
+ Interpolator() = default;
+ Interpolator(const std::map<unsigned int, T> &data)
+ : data_(data)
+ {
+ }
+ Interpolator(std::map<unsigned int, T> &&data)
+ : data_(std::move(data))
+ {
+ }
+
+ ~Interpolator() = default;
+
+ int readYaml(const libcamera::YamlObject &yaml,
+ const std::string &key_name,
+ const std::string &value_name)
+ {
+ data_.clear();
+ lastInterpolatedKey_.reset();
+
+ if (!yaml.isList()) {
+ LOG(Interpolator, Error) << "yaml object must be a list";
+ return -EINVAL;
+ }
+
+ for (const auto &value : yaml.asList()) {
+ unsigned int ct = std::stoul(value[key_name].get<std::string>(""));
+ std::optional<T> data =
+ value[value_name].get<T>();
+ if (!data) {
+ return -EINVAL;
+ }
+
+ data_[ct] = *data;
+ }
+
+ if (data_.size() < 1) {
+ LOG(Interpolator, Error) << "Need at least one element";
+ return -EINVAL;
+ }
+
+ return 0;
+ }
+
+ void setQuantization(const unsigned int q)
+ {
+ quantization_ = q;
+ }
+
+ void setData(std::map<unsigned int, T> &&data)
+ {
+ data_ = std::move(data);
+ lastInterpolatedKey_.reset();
+ }
+
+ const std::map<unsigned int, T> &data() const
+ {
+ return data_;
+ }
+
+ const T &getInterpolated(unsigned int key, unsigned int *quantizedKey = nullptr)
+ {
+ ASSERT(data_.size() > 0);
+
+ if (quantization_ > 0)
+ key = std::lround(key / static_cast<double>(quantization_)) * quantization_;
+
+ if (quantizedKey)
+ *quantizedKey = key;
+
+ if (lastInterpolatedKey_.has_value() &&
+ *lastInterpolatedKey_ == key)
+ return lastInterpolatedValue_;
+
+ auto it = data_.lower_bound(key);
+
+ if (it == data_.begin())
+ return it->second;
+
+ if (it == data_.end())
+ return std::prev(it)->second;
+
+ if (it->first == key)
+ return it->second;
+
+ auto it2 = std::prev(it);
+ double lambda = (key - it2->first) / static_cast<double>(it->first - it2->first);
+ interpolate(it2->second, it->second, lastInterpolatedValue_, lambda);
+ lastInterpolatedKey_ = key;
+
+ return lastInterpolatedValue_;
+ }
+
+ void interpolate(const T &a, const T &b, T &dest, double lambda)
+ {
+ dest = a * (1.0 - lambda) + b * lambda;
+ }
+
+private:
+ std::map<unsigned int, T> data_;
+ T lastInterpolatedValue_;
+ std::optional<unsigned int> lastInterpolatedKey_;
+ unsigned int quantization_ = 0;
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/lsc_polynomial.cpp b/src/ipa/libipa/lsc_polynomial.cpp
new file mode 100644
index 00000000..f607d86c
--- /dev/null
+++ b/src/ipa/libipa/lsc_polynomial.cpp
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * Polynomial class to represent lens shading correction
+ */
+
+#include "lsc_polynomial.h"
+
+#include <libcamera/base/log.h>
+
+/**
+ * \file lsc_polynomial.h
+ * \brief LscPolynomial class
+ */
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(LscPolynomial)
+
+namespace ipa {
+
+/**
+ * \class LscPolynomial
+ * \brief Class for handling even polynomials used in lens shading correction
+ *
+ * Shading artifacts of camera lenses can be modeled using even radial
+ * polynomials. This class implements a polynomial with 5 coefficients which
+ * follows the definition of the FixVignetteRadial opcode in the Adobe DNG
+ * specification.
+ */
+
+/**
+ * \fn LscPolynomial::LscPolynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,
+ double k1 = 0.0, double k2 = 0.0, double k3 = 0.0,
+ double k4 = 0.0)
+ * \brief Construct a polynomial using the given coefficients
+ * \param cx Center-x relative to the image in normalized coordinates (0..1)
+ * \param cy Center-y relative to the image in normalized coordinates (0..1)
+ * \param k0 Coefficient of the polynomial
+ * \param k1 Coefficient of the polynomial
+ * \param k2 Coefficient of the polynomial
+ * \param k3 Coefficient of the polynomial
+ * \param k4 Coefficient of the polynomial
+ */
+
+/**
+ * \fn LscPolynomial::sampleAtNormalizedPixelPos(double x, double y)
+ * \brief Sample the polynomial at the given normalized pixel position
+ *
+ * This functions samples the polynomial at the given pixel position divided by
+ * the value returned by getM().
+ *
+ * \param x x position in normalized coordinates
+ * \param y y position in normalized coordinates
+ * \return The sampled value
+ */
+
+/**
+ * \fn LscPolynomial::getM()
+ * \brief Get the value m as described in the dng specification
+ *
+ * Returns m according to dng spec. m represents the Euclidean distance
+ * (in pixels) from the optical center to the farthest pixel in the
+ * image.
+ *
+ * \return The sampled value
+ */
+
+/**
+ * \fn LscPolynomial::setReferenceImageSize(const Size &size)
+ * \brief Set the reference image size
+ *
+ * Set the reference image size that is used for subsequent calls to getM() and
+ * sampleAtNormalizedPixelPos()
+ *
+ * \param size The size of the reference image
+ */
+
+} // namespace ipa
+} // namespace libcamera
diff --git a/src/ipa/libipa/lsc_polynomial.h b/src/ipa/libipa/lsc_polynomial.h
new file mode 100644
index 00000000..c898faeb
--- /dev/null
+++ b/src/ipa/libipa/lsc_polynomial.h
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * Helper for radial polynomial used in lens shading correction.
+ */
+#pragma once
+
+#include <algorithm>
+#include <array>
+#include <assert.h>
+#include <cmath>
+
+#include <libcamera/base/log.h>
+#include <libcamera/base/span.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(LscPolynomial)
+
+namespace ipa {
+
+class LscPolynomial
+{
+public:
+ LscPolynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,
+ double k1 = 0.0, double k2 = 0.0, double k3 = 0.0,
+ double k4 = 0.0)
+ : cx_(cx), cy_(cy), cnx_(0), cny_(0),
+ coefficients_({ k0, k1, k2, k3, k4 })
+ {
+ }
+
+ double sampleAtNormalizedPixelPos(double x, double y) const
+ {
+ double dx = x - cnx_;
+ double dy = y - cny_;
+ double r = sqrt(dx * dx + dy * dy);
+ double res = 1.0;
+ for (unsigned int i = 0; i < coefficients_.size(); i++) {
+ res += coefficients_[i] * std::pow(r, (i + 1) * 2);
+ }
+ return res;
+ }
+
+ double getM() const
+ {
+ double cpx = imageSize_.width * cx_;
+ double cpy = imageSize_.height * cy_;
+ double mx = std::max(cpx, std::fabs(imageSize_.width - cpx));
+ double my = std::max(cpy, std::fabs(imageSize_.height - cpy));
+
+ return sqrt(mx * mx + my * my);
+ }
+
+ void setReferenceImageSize(const Size &size)
+ {
+ assert(!size.isNull());
+ imageSize_ = size;
+
+ /* Calculate normalized centers */
+ double m = getM();
+ cnx_ = (size.width * cx_) / m;
+ cny_ = (size.height * cy_) / m;
+ }
+
+private:
+ double cx_;
+ double cy_;
+ double cnx_;
+ double cny_;
+ std::array<double, 5> coefficients_;
+
+ Size imageSize_;
+};
+
+} /* namespace ipa */
+
+#ifndef __DOXYGEN__
+
+template<>
+struct YamlObject::Getter<ipa::LscPolynomial> {
+ std::optional<ipa::LscPolynomial> get(const YamlObject &obj) const
+ {
+ std::optional<double> cx = obj["cx"].get<double>();
+ std::optional<double> cy = obj["cy"].get<double>();
+ std::optional<double> k0 = obj["k0"].get<double>();
+ std::optional<double> k1 = obj["k1"].get<double>();
+ std::optional<double> k2 = obj["k2"].get<double>();
+ std::optional<double> k3 = obj["k3"].get<double>();
+ std::optional<double> k4 = obj["k4"].get<double>();
+
+ if (!(cx && cy && k0 && k1 && k2 && k3 && k4))
+ LOG(LscPolynomial, Error)
+ << "Polynomial is missing a parameter";
+
+ return ipa::LscPolynomial(*cx, *cy, *k0, *k1, *k2, *k3, *k4);
+ }
+};
+
+#endif
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/lux.cpp b/src/ipa/libipa/lux.cpp
new file mode 100644
index 00000000..899e8824
--- /dev/null
+++ b/src/ipa/libipa/lux.cpp
@@ -0,0 +1,173 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2019, Raspberry Pi Ltd
+ * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
+ *
+ * Helper class that implements lux estimation
+ */
+#include "lux.h"
+
+#include <algorithm>
+#include <chrono>
+
+#include <libcamera/base/log.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
+#include "histogram.h"
+
+/**
+ * \file lux.h
+ * \brief Helper class that implements lux estimation
+ *
+ * Estimating the lux level of an image is a common operation that can for
+ * instance be used to adjust the target Y value in AGC or for Bayesian AWB
+ * estimation.
+ */
+
+namespace libcamera {
+
+using namespace std::literals::chrono_literals;
+
+LOG_DEFINE_CATEGORY(Lux)
+
+namespace ipa {
+
+/**
+ * \class Lux
+ * \brief Class that implements lux estimation
+ *
+ * IPAs that wish to use lux estimation should create a Lux algorithm module
+ * that lightly wraps this module by providing the platform-specific luminance
+ * histogram. The Lux entry in the tuning file must then precede the algorithms
+ * that depend on the estimated lux value.
+ */
+
+/**
+ * \var Lux::referenceExposureTime_
+ * \brief The exposure time of the reference image, in microseconds
+ */
+
+/**
+ * \var Lux::referenceAnalogueGain_
+ * \brief The analogue gain of the reference image
+ */
+
+/**
+ * \var Lux::referenceDigitalGain_
+ * \brief The analogue gain of the reference image
+ */
+
+/**
+ * \var Lux::referenceY_
+ * \brief The measured luminance of the reference image, normalized to 1
+ *
+ */
+
+/**
+ * \var Lux::referenceLux_
+ * \brief The estimated lux level of the reference image
+ */
+
+/**
+ * \brief Construct the Lux helper module
+ */
+Lux::Lux()
+{
+}
+
+/**
+ * \brief Parse tuning data
+ * \param[in] tuningData The YamlObject representing the tuning data
+ *
+ * This function parses yaml tuning data for the common Lux module. It requires
+ * reference exposure time, analogue gain, digital gain, and lux values.
+ *
+ * \code{.unparsed}
+ * algorithms:
+ * - Lux:
+ * referenceExposureTime: 10000
+ * referenceAnalogueGain: 4.0
+ * referenceDigitalGain: 1.0
+ * referenceY: 0.1831
+ * referenceLux: 1000
+ * \endcode
+ *
+ * \return 0 on success or a negative error code
+ */
+int Lux::parseTuningData(const YamlObject &tuningData)
+{
+ auto value = tuningData["referenceExposureTime"].get<double>();
+ if (!value) {
+ LOG(Lux, Error) << "Missing tuning parameter: "
+ << "'referenceExposureTime'";
+ return -EINVAL;
+ }
+ referenceExposureTime_ = *value * 1.0us;
+
+ value = tuningData["referenceAnalogueGain"].get<double>();
+ if (!value) {
+ LOG(Lux, Error) << "Missing tuning parameter: "
+ << "'referenceAnalogueGain'";
+ return -EINVAL;
+ }
+ referenceAnalogueGain_ = *value;
+
+ value = tuningData["referenceDigitalGain"].get<double>();
+ if (!value) {
+ LOG(Lux, Error) << "Missing tuning parameter: "
+ << "'referenceDigitalGain'";
+ return -EINVAL;
+ }
+ referenceDigitalGain_ = *value;
+
+ value = tuningData["referenceY"].get<double>();
+ if (!value) {
+ LOG(Lux, Error) << "Missing tuning parameter: "
+ << "'referenceY'";
+ return -EINVAL;
+ }
+ referenceY_ = *value;
+
+ value = tuningData["referenceLux"].get<double>();
+ if (!value) {
+ LOG(Lux, Error) << "Missing tuning parameter: "
+ << "'referenceLux'";
+ return -EINVAL;
+ }
+ referenceLux_ = *value;
+
+ return 0;
+}
+
+/**
+ * \brief Estimate lux given runtime values
+ * \param[in] exposureTime Exposure time applied to the frame
+ * \param[in] aGain Analogue gain applied to the frame
+ * \param[in] dGain Digital gain applied to the frame
+ * \param[in] yHist Histogram from the ISP statistics
+ *
+ * Estimate the lux given the exposure time, gain, and histogram.
+ *
+ * \return Estimated lux value
+ */
+double Lux::estimateLux(utils::Duration exposureTime,
+ double aGain, double dGain,
+ const Histogram &yHist) const
+{
+ double currentY = yHist.interQuantileMean(0, 1);
+ double exposureTimeRatio = referenceExposureTime_ / exposureTime;
+ double aGainRatio = referenceAnalogueGain_ / aGain;
+ double dGainRatio = referenceDigitalGain_ / dGain;
+ double yRatio = (currentY / yHist.bins()) / referenceY_;
+
+ double estimatedLux = exposureTimeRatio * aGainRatio * dGainRatio *
+ yRatio * referenceLux_;
+
+ LOG(Lux, Debug) << "Estimated lux " << estimatedLux;
+ return estimatedLux;
+}
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/lux.h b/src/ipa/libipa/lux.h
new file mode 100644
index 00000000..d95bcdaf
--- /dev/null
+++ b/src/ipa/libipa/lux.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2019, Raspberry Pi Ltd
+ * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
+ *
+ * Helper class that implements lux estimation
+ */
+
+#pragma once
+
+#include <libcamera/base/utils.h>
+
+namespace libcamera {
+
+class YamlObject;
+
+namespace ipa {
+
+class Histogram;
+
+class Lux
+{
+public:
+ Lux();
+
+ int parseTuningData(const YamlObject &tuningData);
+ double estimateLux(utils::Duration exposureTime,
+ double aGain, double dGain,
+ const Histogram &yHist) const;
+
+private:
+ utils::Duration referenceExposureTime_;
+ double referenceAnalogueGain_;
+ double referenceDigitalGain_;
+ double referenceY_;
+ double referenceLux_;
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/matrix.cpp b/src/ipa/libipa/matrix.cpp
deleted file mode 100644
index 8346f0d3..00000000
--- a/src/ipa/libipa/matrix.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Matrix and related operations
- */
-
-#include "matrix.h"
-
-#include <libcamera/base/log.h>
-
-/**
- * \file matrix.h
- * \brief Matrix class
- */
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(Matrix)
-
-namespace ipa {
-
-/**
- * \class Matrix
- * \brief Matrix class
- * \tparam T Type of numerical values to be stored in the matrix
- * \tparam Rows Number of rows in the matrix
- * \tparam Cols Number of columns in the matrix
- */
-
-/**
- * \fn Matrix::Matrix()
- * \brief Construct a zero matrix
- */
-
-/**
- * \fn Matrix::Matrix(const std::vector<T> &data)
- * \brief Construct a matrix from supplied data
- * \param[in] data Data from which to construct a matrix
- *
- * \a data is a one-dimensional vector and will be turned into a matrix in
- * row-major order. The size of \a data must be equal to the product of the
- * number of rows and columns of the matrix (Rows x Cols).
- */
-
-/**
- * \fn Matrix::identity()
- * \brief Construct an identity matrix
- */
-
-/**
- * \fn Matrix::toString()
- * \brief Assemble and return a string describing the matrix
- * \return A string describing the matrix
- */
-
-/**
- * \fn Span<const T, Cols> Matrix::operator[](size_t i) const
- * \brief Index to a row in the matrix
- * \param[in] i Index of row to retrieve
- *
- * This operator[] returns a Span, which can then be indexed into again with
- * another operator[], allowing a convenient m[i][j] to access elements of the
- * matrix. Note that the lifetime of the Span returned by this first-level
- * operator[] is bound to that of the Matrix itself, so it is not recommended
- * to save the Span that is the result of this operator[].
- *
- * \return Row \a i from the matrix, as a Span
- */
-
-/**
- * \fn Matrix::operator[](size_t i)
- * \copydoc Matrix::operator[](size_t i) const
- */
-
-/**
- * \fn Matrix<T, Rows, Cols> &Matrix::operator*=(U d)
- * \brief Multiply the matrix by a scalar in-place
- * \tparam U Type of the numerical scalar value
- * \param d The scalar multiplier
- * \return Product of this matrix and scalar \a d
- */
-
-/**
- * \fn Matrix::Matrix<U, Rows, Cols> operator*(T d, const Matrix<U, Rows, Cols> &m)
- * \brief Multiply the matrix by a scalar
- * \tparam T Type of the numerical scalar value
- * \tparam U Type of numerical values in the matrix
- * \tparam Rows Number of rows in the matrix
- * \tparam Cols Number of columns in the matrix
- * \param d The scalar multiplier
- * \param m The matrix
- * \return Product of scalar \a d and matrix \a m
- */
-
-/**
- * \fn Matrix::Matrix<U, Rows, Cols> operator*(const Matrix<U, Rows, Cols> &m, T d)
- * \copydoc operator*(T d, const Matrix<U, Rows, Cols> &m)
- */
-
-/**
- * \fn Matrix<T, R1, C2> operator*(const Matrix<T, R1, C1> &m1, const Matrix<T, R2, C2> &m2)
- * \brief Matrix multiplication
- * \tparam T Type of numerical values in the matrices
- * \tparam R1 Number of rows in the first matrix
- * \tparam C1 Number of columns in the first matrix
- * \tparam R2 Number of rows in the second matrix
- * \tparam C2 Number of columns in the second matrix
- * \param m1 Multiplicand matrix
- * \param m2 Multiplier matrix
- * \return Matrix product of matrices \a m1 and \a m2
- */
-
-/**
- * \fn Matrix<T, Rows, Cols> operator+(const Matrix<T, Rows, Cols> &m1, const Matrix<T, Rows, Cols> &m2)
- * \brief Matrix addition
- * \tparam T Type of numerical values in the matrices
- * \tparam Rows Number of rows in the matrices
- * \tparam Cols Number of columns in the matrices
- * \param m1 Summand matrix
- * \param m2 Summand matrix
- * \return Matrix sum of matrices \a m1 and \a m2
- */
-
-#ifndef __DOXYGEN__
-/*
- * The YAML data shall be a list of numerical values. Its size shall be equal
- * to the product of the number of rows and columns of the matrix (Rows x
- * Cols). The values shall be stored in row-major order.
- */
-bool matrixValidateYaml(const YamlObject &obj, unsigned int size)
-{
- if (!obj.isList())
- return false;
-
- if (obj.size() != size) {
- LOG(Matrix, Error)
- << "Wrong number of values in matrix: expected "
- << size << ", got " << obj.size();
- return false;
- }
-
- return true;
-}
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/matrix.h b/src/ipa/libipa/matrix.h
deleted file mode 100644
index 8aa8f343..00000000
--- a/src/ipa/libipa/matrix.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Matrix and related operations
- */
-#pragma once
-
-#include <algorithm>
-#include <cmath>
-#include <sstream>
-#include <vector>
-
-#include <libcamera/base/log.h>
-#include <libcamera/base/span.h>
-
-#include "libcamera/internal/yaml_parser.h"
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(Matrix)
-
-namespace ipa {
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows, unsigned int Cols,
- std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, unsigned int Rows, unsigned int Cols>
-#endif /* __DOXYGEN__ */
-class Matrix
-{
-public:
- Matrix()
- {
- data_.fill(static_cast<T>(0));
- }
-
- Matrix(const std::vector<T> &data)
- {
- std::copy(data.begin(), data.end(), data_.begin());
- }
-
- static Matrix identity()
- {
- Matrix ret;
- for (size_t i = 0; i < std::min(Rows, Cols); i++)
- ret[i][i] = static_cast<T>(1);
- return ret;
- }
-
- ~Matrix() = default;
-
- const std::string toString() const
- {
- std::stringstream out;
-
- out << "Matrix { ";
- for (unsigned int i = 0; i < Rows; i++) {
- out << "[ ";
- for (unsigned int j = 0; j < Cols; j++) {
- out << (*this)[i][j];
- out << ((j + 1 < Cols) ? ", " : " ");
- }
- out << ((i + 1 < Rows) ? "], " : "]");
- }
- out << " }";
-
- return out.str();
- }
-
- Span<const T, Cols> operator[](size_t i) const
- {
- return Span<const T, Cols>{ &data_.data()[i * Cols], Cols };
- }
-
- Span<T, Cols> operator[](size_t i)
- {
- return Span<T, Cols>{ &data_.data()[i * Cols], Cols };
- }
-
-#ifndef __DOXYGEN__
- template<typename U, std::enable_if_t<std::is_arithmetic_v<U>>>
-#else
- template<typename U>
-#endif /* __DOXYGEN__ */
- Matrix<T, Rows, Cols> &operator*=(U d)
- {
- for (unsigned int i = 0; i < Rows * Cols; i++)
- data_[i] *= d;
- return *this;
- }
-
-private:
- std::array<T, Rows * Cols> data_;
-};
-
-#ifndef __DOXYGEN__
-template<typename T, typename U, unsigned int Rows, unsigned int Cols,
- std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, typename U, unsigned int Rows, unsigned int Cols>
-#endif /* __DOXYGEN__ */
-Matrix<U, Rows, Cols> operator*(T d, const Matrix<U, Rows, Cols> &m)
-{
- Matrix<U, Rows, Cols> result;
-
- for (unsigned int i = 0; i < Rows; i++) {
- for (unsigned int j = 0; j < Cols; j++)
- result[i][j] = d * m[i][j];
- }
-
- return result;
-}
-
-#ifndef __DOXYGEN__
-template<typename T, typename U, unsigned int Rows, unsigned int Cols,
- std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, typename U, unsigned int Rows, unsigned int Cols>
-#endif /* __DOXYGEN__ */
-Matrix<U, Rows, Cols> operator*(const Matrix<U, Rows, Cols> &m, T d)
-{
- return d * m;
-}
-
-#ifndef __DOXYGEN__
-template<typename T,
- unsigned int R1, unsigned int C1,
- unsigned int R2, unsigned int C2,
- std::enable_if_t<C1 == R2> * = nullptr>
-#else
-template<typename T, unsigned int R1, unsigned int C1, unsigned int R2, unsigned in C2>
-#endif /* __DOXYGEN__ */
-Matrix<T, R1, C2> operator*(const Matrix<T, R1, C1> &m1, const Matrix<T, R2, C2> &m2)
-{
- Matrix<T, R1, C2> result;
-
- for (unsigned int i = 0; i < R1; i++) {
- for (unsigned int j = 0; j < C2; j++) {
- T sum = 0;
-
- for (unsigned int k = 0; k < C1; k++)
- sum += m1[i][k] * m2[k][j];
-
- result[i][j] = sum;
- }
- }
-
- return result;
-}
-
-template<typename T, unsigned int Rows, unsigned int Cols>
-Matrix<T, Rows, Cols> operator+(const Matrix<T, Rows, Cols> &m1, const Matrix<T, Rows, Cols> &m2)
-{
- Matrix<T, Rows, Cols> result;
-
- for (unsigned int i = 0; i < Rows; i++) {
- for (unsigned int j = 0; j < Cols; j++)
- result[i][j] = m1[i][j] + m2[i][j];
- }
-
- return result;
-}
-
-#ifndef __DOXYGEN__
-bool matrixValidateYaml(const YamlObject &obj, unsigned int size);
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows, unsigned int Cols>
-std::ostream &operator<<(std::ostream &out, const ipa::Matrix<T, Rows, Cols> &m)
-{
- out << m.toString();
- return out;
-}
-
-template<typename T, unsigned int Rows, unsigned int Cols>
-struct YamlObject::Getter<ipa::Matrix<T, Rows, Cols>> {
- std::optional<ipa::Matrix<T, Rows, Cols>> get(const YamlObject &obj) const
- {
- if (!ipa::matrixValidateYaml(obj, Rows * Cols))
- return std::nullopt;
-
- ipa::Matrix<T, Rows, Cols> matrix;
- T *data = &matrix[0][0];
-
- unsigned int i = 0;
- for (const YamlObject &entry : obj.asList()) {
- const auto value = entry.get<T>();
- if (!value)
- return std::nullopt;
-
- data[i++] = *value;
- }
-
- return matrix;
- }
-};
-#endif /* __DOXYGEN__ */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/matrix_interpolator.cpp b/src/ipa/libipa/matrix_interpolator.cpp
deleted file mode 100644
index 04ca177f..00000000
--- a/src/ipa/libipa/matrix_interpolator.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Helper class for interpolating maps of matrices
- */
-#include "matrix_interpolator.h"
-
-#include <algorithm>
-#include <string>
-
-#include <libcamera/base/log.h>
-
-#include "libcamera/internal/yaml_parser.h"
-
-#include "matrix.h"
-
-/**
- * \file matrix_interpolator.h
- * \brief Helper class for interpolating maps of matrices
- */
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(MatrixInterpolator)
-
-namespace ipa {
-
-/**
- * \class MatrixInterpolator
- * \brief Class for storing, retrieving, and interpolating matrices
- * \tparam T Type of numerical values to be stored in the matrices
- * \tparam R Number of rows in the matrices
- * \tparam C Number of columns in the matrices
- *
- * The main use case is to pass a map from color temperatures to corresponding
- * matrices (eg. color correction), and then requesting a matrix for a specific
- * color temperature. This class will abstract away the interpolation portion.
- */
-
-/**
- * \fn MatrixInterpolator::MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
- * \brief Construct a matrix interpolator from a map of matrices
- * \param matrices Map from which to construct the matrix interpolator
- */
-
-/**
- * \fn MatrixInterpolator::reset()
- * \brief Reset the matrix interpolator content to a single identity matrix
- */
-
-/**
- * \fn int MatrixInterpolator<T, R, C>::readYaml()
- * \brief Initialize an MatrixInterpolator instance from yaml
- * \tparam T Type of data stored in the matrices
- * \tparam R Number of rows of the matrices
- * \tparam C Number of columns of the matrices
- * \param[in] yaml The yaml object that contains the map of unsigned integers to matrices
- * \param[in] key_name The name of the key in the yaml object
- * \param[in] matrix_name The name of the matrix in the yaml object
- *
- * The yaml object is expected to be a list of maps. Each map has two or more
- * pairs: one of \a key_name to the key value (usually color temperature), and
- * one or more of \a matrix_name to the matrix. This is a bit difficult to
- * explain, so here is an example (in python, as it is easier to parse than
- * yaml):
- * [
- * {
- * 'ct': 2860,
- * 'ccm': [ 2.12089, -0.52461, -0.59629,
- * -0.85342, 2.80445, -0.95103,
- * -0.26897, -1.14788, 2.41685 ],
- * 'offsets': [ 0, 0, 0 ]
- * },
- *
- * {
- * 'ct': 2960,
- * 'ccm': [ 2.26962, -0.54174, -0.72789,
- * -0.77008, 2.60271, -0.83262,
- * -0.26036, -1.51254, 2.77289 ],
- * 'offsets': [ 0, 0, 0 ]
- * },
- *
- * {
- * 'ct': 3603,
- * 'ccm': [ 2.18644, -0.66148, -0.52496,
- * -0.77828, 2.69474, -0.91645,
- * -0.25239, -0.83059, 2.08298 ],
- * 'offsets': [ 0, 0, 0 ]
- * },
- * ]
- *
- * In this case, \a key_name would be 'ct', and \a matrix_name can be either
- * 'ccm' or 'offsets'. This way multiple matrix interpolators can be defined in
- * one set of color temperature ranges in the tuning file, and they can be
- * retrieved separately with the \a matrix_name parameter.
- *
- * \return Zero on success, negative error code otherwise
- */
-
-/**
- * \fn Matrix<T, R, C> MatrixInterpolator<T, R, C>::get(unsigned int key)
- * \brief Retrieve a matrix from the list of matrices, interpolating if necessary
- * \param[in] key The unsigned integer key of the matrix to retrieve
- * \return The matrix corresponding to the color temperature
- */
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/matrix_interpolator.h b/src/ipa/libipa/matrix_interpolator.h
deleted file mode 100644
index 087c4fd1..00000000
--- a/src/ipa/libipa/matrix_interpolator.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Helper class for interpolating maps of matrices
- */
-
-#pragma once
-
-#include <algorithm>
-#include <map>
-#include <string>
-#include <tuple>
-
-#include <libcamera/base/log.h>
-
-#include "libcamera/internal/yaml_parser.h"
-
-#include "matrix.h"
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(MatrixInterpolator)
-
-namespace ipa {
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int R, unsigned int C,
- std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, unsigned int R, unsigned int C>
-#endif /* __DOXYGEN__ */
-class MatrixInterpolator
-{
-public:
- MatrixInterpolator()
- {
- reset();
- }
-
- MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
- {
- for (const auto &pair : matrices)
- matrices_[pair.first] = pair.second;
- }
-
- ~MatrixInterpolator() {}
-
- void reset()
- {
- matrices_.clear();
- matrices_[0] = Matrix<T, R, C>::identity();
- }
-
- int readYaml(const libcamera::YamlObject &yaml,
- const std::string &key_name,
- const std::string &matrix_name)
- {
- matrices_.clear();
-
- if (!yaml.isList()) {
- LOG(MatrixInterpolator, Error) << "yaml object must be a list";
- return -EINVAL;
- }
-
- for (const auto &value : yaml.asList()) {
- unsigned int ct = std::stoul(value[key_name].get<std::string>(""));
- std::optional<Matrix<T, R, C>> matrix =
- value[matrix_name].get<Matrix<T, R, C>>();
- if (!matrix) {
- LOG(MatrixInterpolator, Error) << "Failed to read matrix";
- return -EINVAL;
- }
-
- matrices_[ct] = *matrix;
-
- LOG(MatrixInterpolator, Debug)
- << "Read matrix '" << matrix_name << "' for key '"
- << key_name << "' " << ct << ": "
- << matrices_[ct].toString();
- }
-
- if (matrices_.size() < 1) {
- LOG(MatrixInterpolator, Error) << "Need at least one matrix";
- return -EINVAL;
- }
-
- return 0;
- }
-
- Matrix<T, R, C> get(unsigned int ct)
- {
- ASSERT(matrices_.size() > 0);
-
- if (matrices_.size() == 1 ||
- ct <= matrices_.begin()->first)
- return matrices_.begin()->second;
-
- if (ct >= matrices_.rbegin()->first)
- return matrices_.rbegin()->second;
-
- if (matrices_.find(ct) != matrices_.end())
- return matrices_[ct];
-
- /* The above four guarantee that this will succeed */
- auto iter = matrices_.upper_bound(ct);
- unsigned int ctUpper = iter->first;
- unsigned int ctLower = (--iter)->first;
-
- double lambda = (ct - ctLower) / static_cast<double>(ctUpper - ctLower);
- Matrix<T, R, C> ret =
- lambda * matrices_[ctUpper] + (1.0 - lambda) * matrices_[ctLower];
- return ret;
- }
-
-private:
- std::map<unsigned int, Matrix<T, R, C>> matrices_;
-};
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index eff8ce26..660be940 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -3,29 +3,39 @@
libipa_headers = files([
'agc_mean_luminance.h',
'algorithm.h',
+ 'awb_bayes.h',
+ 'awb_grey.h',
+ 'awb.h',
'camera_sensor_helper.h',
+ 'colours.h',
'exposure_mode_helper.h',
'fc_queue.h',
+ 'fixedpoint.h',
'histogram.h',
- 'matrix.h',
- 'matrix_interpolator.h',
+ 'interpolator.h',
+ 'lsc_polynomial.h',
+ 'lux.h',
'module.h',
'pwl.h',
- 'vector.h',
])
libipa_sources = files([
'agc_mean_luminance.cpp',
'algorithm.cpp',
+ 'awb_bayes.cpp',
+ 'awb_grey.cpp',
+ 'awb.cpp',
'camera_sensor_helper.cpp',
+ 'colours.cpp',
'exposure_mode_helper.cpp',
'fc_queue.cpp',
+ 'fixedpoint.cpp',
'histogram.cpp',
- 'matrix.cpp',
- 'matrix_interpolator.cpp',
+ 'interpolator.cpp',
+ 'lsc_polynomial.cpp',
+ 'lux.cpp',
'module.cpp',
'pwl.cpp',
- 'vector.cpp',
])
libipa_includes = include_directories('..')
diff --git a/src/ipa/libipa/pwl.cpp b/src/ipa/libipa/pwl.cpp
index 9b213754..3fa005ba 100644
--- a/src/ipa/libipa/pwl.cpp
+++ b/src/ipa/libipa/pwl.cpp
@@ -8,10 +8,8 @@
#include "pwl.h"
-#include <assert.h>
#include <cmath>
#include <sstream>
-#include <stdexcept>
/**
* \file pwl.h
@@ -162,6 +160,11 @@ void Pwl::prepend(double x, double y, const double eps)
*/
/**
+ * \fn Pwl::clear()
+ * \brief Clear the piecewise linear function
+ */
+
+/**
* \fn Pwl::size() const
* \brief Retrieve the number of points in the piecewise linear function
* \return The number of points in the piecewise linear function
diff --git a/src/ipa/libipa/pwl.h b/src/ipa/libipa/pwl.h
index b6f93494..c1496c30 100644
--- a/src/ipa/libipa/pwl.h
+++ b/src/ipa/libipa/pwl.h
@@ -7,15 +7,12 @@
#pragma once
#include <algorithm>
-#include <cmath>
#include <functional>
#include <string>
#include <utility>
#include <vector>
-#include "libcamera/internal/yaml_parser.h"
-
-#include "vector.h"
+#include "libcamera/internal/vector.h"
namespace libcamera {
@@ -52,6 +49,7 @@ public:
void append(double x, double y, double eps = 1e-6);
bool empty() const { return points_.empty(); }
+ void clear() { points_.clear(); }
size_t size() const { return points_.size(); }
Interval domain() const;
diff --git a/src/ipa/libipa/vector.cpp b/src/ipa/libipa/vector.cpp
deleted file mode 100644
index bd00b019..00000000
--- a/src/ipa/libipa/vector.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Vector and related operations
- */
-
-#include "vector.h"
-
-#include <libcamera/base/log.h>
-
-/**
- * \file vector.h
- * \brief Vector class
- */
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(Vector)
-
-namespace ipa {
-
-/**
- * \class Vector
- * \brief Vector class
- * \tparam T Type of numerical values to be stored in the vector
- * \tparam Rows Number of dimension of the vector (= number of elements)
- */
-
-/**
- * \fn Vector::Vector()
- * \brief Construct a zero vector
- */
-
-/**
- * \fn Vector::Vector(const std::array<T, Rows> &data)
- * \brief Construct vector from supplied data
- * \param data Data from which to construct a vector
- *
- * The size of \a data must be equal to the dimension size Rows of the vector.
- */
-
-/**
- * \fn T Vector::operator[](size_t i) const
- * \brief Index to an element in the vector
- * \param i Index of element to retrieve
- * \return Element at index \a i from the vector
- */
-
-/**
- * \fn T &Vector::operator[](size_t i)
- * \copydoc Vector::operator[](size_t i) const
- */
-
-/**
- * \fn Vector::x()
- * \brief Convenience function to access the first element of the vector
- * \return The first element of the vector
- */
-
-/**
- * \fn Vector::y()
- * \brief Convenience function to access the second element of the vector
- * \return The second element of the vector
- */
-
-/**
- * \fn Vector::z()
- * \brief Convenience function to access the third element of the vector
- * \return The third element of the vector
- */
-
-/**
- * \fn Vector::operator-() const
- * \brief Negate a Vector by negating both all of its coordinates
- * \return The negated vector
- */
-
-/**
- * \fn Vector::operator-(Vector const &other) const
- * \brief Subtract one vector from another
- * \param[in] other The other vector
- * \return The difference of \a other from this vector
- */
-
-/**
- * \fn Vector::operator+()
- * \brief Add two vectors together
- * \param[in] other The other vector
- * \return The sum of the two vectors
- */
-
-/**
- * \fn Vector::operator*(const Vector<T, Rows> &other) const
- * \brief Compute the dot product
- * \param[in] other The other vector
- * \return The dot product of the two vectors
- */
-
-/**
- * \fn Vector::operator*(T factor) const
- * \brief Multiply the vector by a scalar
- * \param[in] factor The factor
- * \return The vector multiplied by \a factor
- */
-
-/**
- * \fn Vector::operator/()
- * \brief Divide the vector by a scalar
- * \param[in] factor The factor
- * \return The vector divided by \a factor
- */
-
-/**
- * \fn Vector::length2()
- * \brief Get the squared length of the vector
- * \return The squared length of the vector
- */
-
-/**
- * \fn Vector::length()
- * \brief Get the length of the vector
- * \return The length of the vector
- */
-
-/**
- * \fn Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
- * \brief Multiply a matrix by a vector
- * \tparam T Numerical type of the contents of the matrix and vector
- * \tparam Rows The number of rows in the matrix
- * \tparam Cols The number of columns in the matrix (= rows in the vector)
- * \param m The matrix
- * \param v The vector
- * \return Product of matrix \a m and vector \a v
- */
-
-/**
- * \fn bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
- * \brief Compare vectors for equality
- * \return True if the two vectors are equal, false otherwise
- */
-
-/**
- * \fn bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
- * \brief Compare vectors for inequality
- * \return True if the two vectors are not equal, false otherwise
- */
-
-#ifndef __DOXYGEN__
-bool vectorValidateYaml(const YamlObject &obj, unsigned int size)
-{
- if (!obj.isList())
- return false;
-
- if (obj.size() != size) {
- LOG(Vector, Error)
- << "Wrong number of values in YAML vector: expected "
- << size << ", got " << obj.size();
- return false;
- }
-
- return true;
-}
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/vector.h b/src/ipa/libipa/vector.h
deleted file mode 100644
index 556e0967..00000000
--- a/src/ipa/libipa/vector.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Vector and related operations
- */
-#pragma once
-
-#include <algorithm>
-#include <array>
-#include <cmath>
-#include <sstream>
-
-#include <libcamera/base/log.h>
-#include <libcamera/base/span.h>
-
-#include "libcamera/internal/yaml_parser.h"
-
-#include "matrix.h"
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(Vector)
-
-namespace ipa {
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows,
- std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, unsigned int Rows>
-#endif /* __DOXYGEN__ */
-class Vector
-{
-public:
- constexpr Vector() = default;
-
- constexpr Vector(const std::array<T, Rows> &data)
- {
- for (unsigned int i = 0; i < Rows; i++)
- data_[i] = data[i];
- }
-
- const T &operator[](size_t i) const
- {
- ASSERT(i < data_.size());
- return data_[i];
- }
-
- T &operator[](size_t i)
- {
- ASSERT(i < data_.size());
- return data_[i];
- }
-
-#ifndef __DOXYGEN__
- template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
-#endif /* __DOXYGEN__ */
- constexpr T x() const
- {
- return data_[0];
- }
-
-#ifndef __DOXYGEN__
- template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
-#endif /* __DOXYGEN__ */
- constexpr T y() const
- {
- return data_[1];
- }
-
-#ifndef __DOXYGEN__
- template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
-#endif /* __DOXYGEN__ */
- constexpr T z() const
- {
- return data_[2];
- }
-
- constexpr Vector<T, Rows> operator-() const
- {
- Vector<T, Rows> ret;
- for (unsigned int i = 0; i < Rows; i++)
- ret[i] = -data_[i];
- return ret;
- }
-
- constexpr Vector<T, Rows> operator-(const Vector<T, Rows> &other) const
- {
- Vector<T, Rows> ret;
- for (unsigned int i = 0; i < Rows; i++)
- ret[i] = data_[i] - other[i];
- return ret;
- }
-
- constexpr Vector<T, Rows> operator+(const Vector<T, Rows> &other) const
- {
- Vector<T, Rows> ret;
- for (unsigned int i = 0; i < Rows; i++)
- ret[i] = data_[i] + other[i];
- return ret;
- }
-
- constexpr T operator*(const Vector<T, Rows> &other) const
- {
- T ret = 0;
- for (unsigned int i = 0; i < Rows; i++)
- ret += data_[i] * other[i];
- return ret;
- }
-
- constexpr Vector<T, Rows> operator*(T factor) const
- {
- Vector<T, Rows> ret;
- for (unsigned int i = 0; i < Rows; i++)
- ret[i] = data_[i] * factor;
- return ret;
- }
-
- constexpr Vector<T, Rows> operator/(T factor) const
- {
- Vector<T, Rows> ret;
- for (unsigned int i = 0; i < Rows; i++)
- ret[i] = data_[i] / factor;
- return ret;
- }
-
- constexpr double length2() const
- {
- double ret = 0;
- for (unsigned int i = 0; i < Rows; i++)
- ret += data_[i] * data_[i];
- return ret;
- }
-
- constexpr double length() const
- {
- return std::sqrt(length2());
- }
-
-private:
- std::array<T, Rows> data_;
-};
-
-template<typename T, unsigned int Rows, unsigned int Cols>
-Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
-{
- Vector<T, Rows> result;
-
- for (unsigned int i = 0; i < Rows; i++) {
- T sum = 0;
- for (unsigned int j = 0; j < Cols; j++)
- sum += m[i][j] * v[j];
- result[i] = sum;
- }
-
- return result;
-}
-
-template<typename T, unsigned int Rows>
-bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
-{
- for (unsigned int i = 0; i < Rows; i++) {
- if (lhs[i] != rhs[i])
- return false;
- }
-
- return true;
-}
-
-template<typename T, unsigned int Rows>
-bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
-{
- return !(lhs == rhs);
-}
-
-#ifndef __DOXYGEN__
-bool vectorValidateYaml(const YamlObject &obj, unsigned int size);
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows>
-std::ostream &operator<<(std::ostream &out, const ipa::Vector<T, Rows> &v)
-{
- out << "Vector { ";
- for (unsigned int i = 0; i < Rows; i++) {
- out << v[i];
- out << ((i + 1 < Rows) ? ", " : " ");
- }
- out << " }";
-
- return out;
-}
-
-template<typename T, unsigned int Rows>
-struct YamlObject::Getter<ipa::Vector<T, Rows>> {
- std::optional<ipa::Vector<T, Rows>> get(const YamlObject &obj) const
- {
- if (!ipa::vectorValidateYaml(obj, Rows))
- return std::nullopt;
-
- ipa::Vector<T, Rows> vector;
-
- unsigned int i = 0;
- for (const YamlObject &entry : obj.asList()) {
- const auto value = entry.get<T>();
- if (!value)
- return std::nullopt;
- vector[i++] = *value;
- }
-
- return vector;
- }
-};
-#endif /* __DOXYGEN__ */
-
-} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp
new file mode 100644
index 00000000..70667db3
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/agc.cpp
@@ -0,0 +1,410 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * agc.cpp - AGC/AEC mean-based control algorithm
+ */
+
+#include "agc.h"
+
+#include <cmath>
+
+#include <libcamera/base/log.h>
+#include <libcamera/base/utils.h>
+
+#include <libcamera/control_ids.h>
+#include <libcamera/property_ids.h>
+
+#include "libipa/colours.h"
+#include "libipa/fixedpoint.h"
+
+namespace libcamera {
+
+using namespace std::literals::chrono_literals;
+
+namespace ipa::mali_c55::algorithms {
+
+LOG_DEFINE_CATEGORY(MaliC55Agc)
+
+/*
+ * Number of histogram bins. This is only true for the specific configuration we
+ * set to the ISP; 4 separate histograms of 256 bins each. If that configuration
+ * ever changes then this constant will need updating.
+ */
+static constexpr unsigned int kNumHistogramBins = 256;
+
+/*
+ * The Mali-C55 ISP has a digital gain block which allows setting gain in Q5.8
+ * format, a range of 0.0 to (very nearly) 32.0. We clamp from 1.0 to the actual
+ * max value which is 8191 * 2^-8.
+ */
+static constexpr double kMinDigitalGain = 1.0;
+static constexpr double kMaxDigitalGain = 31.99609375;
+
+uint32_t AgcStatistics::decodeBinValue(uint16_t binVal)
+{
+ int exponent = (binVal & 0xf000) >> 12;
+ int mantissa = binVal & 0xfff;
+
+ if (!exponent)
+ return mantissa * 2;
+ else
+ return (mantissa + 4096) * std::pow(2, exponent);
+}
+
+/*
+ * We configure the ISP to give us 4 histograms of 256 bins each, with
+ * a single histogram per colour channel (R/Gr/Gb/B). The memory space
+ * containing the data is a single block containing all 4 histograms
+ * with the position of each colour's histogram within it dependent on
+ * the bayer pattern of the data input to the ISP.
+ *
+ * NOTE: The validity of this function depends on the parameters we have
+ * configured. With different skip/offset x, y values not all of the
+ * colour channels would be populated, and they may not be in the same
+ * planes as calculated here.
+ */
+int AgcStatistics::setBayerOrderIndices(BayerFormat::Order bayerOrder)
+{
+ switch (bayerOrder) {
+ case BayerFormat::Order::RGGB:
+ rIndex_ = 0;
+ grIndex_ = 1;
+ gbIndex_ = 2;
+ bIndex_ = 3;
+ break;
+ case BayerFormat::Order::GRBG:
+ grIndex_ = 0;
+ rIndex_ = 1;
+ bIndex_ = 2;
+ gbIndex_ = 3;
+ break;
+ case BayerFormat::Order::GBRG:
+ gbIndex_ = 0;
+ bIndex_ = 1;
+ rIndex_ = 2;
+ grIndex_ = 3;
+ break;
+ case BayerFormat::Order::BGGR:
+ bIndex_ = 0;
+ gbIndex_ = 1;
+ grIndex_ = 2;
+ rIndex_ = 3;
+ break;
+ default:
+ LOG(MaliC55Agc, Error)
+ << "Invalid bayer format " << bayerOrder;
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+void AgcStatistics::parseStatistics(const mali_c55_stats_buffer *stats)
+{
+ uint32_t r[256], g[256], b[256], y[256];
+
+ /*
+ * We need to decode the bin values for each histogram from their 16-bit
+ * compressed values to a 32-bit value. We also take the average of the
+ * Gr/Gb values into a single green histogram.
+ */
+ for (unsigned int i = 0; i < 256; i++) {
+ r[i] = decodeBinValue(stats->ae_1024bin_hist.bins[i + (256 * rIndex_)]);
+ g[i] = (decodeBinValue(stats->ae_1024bin_hist.bins[i + (256 * grIndex_)]) +
+ decodeBinValue(stats->ae_1024bin_hist.bins[i + (256 * gbIndex_)])) / 2;
+ b[i] = decodeBinValue(stats->ae_1024bin_hist.bins[i + (256 * bIndex_)]);
+
+ y[i] = rec601LuminanceFromRGB({ { static_cast<double>(r[i]),
+ static_cast<double>(g[i]),
+ static_cast<double>(b[i]) } });
+ }
+
+ rHist = Histogram(Span<uint32_t>(r, kNumHistogramBins));
+ gHist = Histogram(Span<uint32_t>(g, kNumHistogramBins));
+ bHist = Histogram(Span<uint32_t>(b, kNumHistogramBins));
+ yHist = Histogram(Span<uint32_t>(y, kNumHistogramBins));
+}
+
+Agc::Agc()
+ : AgcMeanLuminance()
+{
+}
+
+int Agc::init(IPAContext &context, const YamlObject &tuningData)
+{
+ int ret = parseTuningData(tuningData);
+ if (ret)
+ return ret;
+
+ context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true);
+ context.ctrlMap[&controls::DigitalGain] = ControlInfo(
+ static_cast<float>(kMinDigitalGain),
+ static_cast<float>(kMaxDigitalGain),
+ static_cast<float>(kMinDigitalGain)
+ );
+ context.ctrlMap.merge(controls());
+
+ return 0;
+}
+
+int Agc::configure(IPAContext &context,
+ [[maybe_unused]] const IPACameraSensorInfo &configInfo)
+{
+ int ret = statistics_.setBayerOrderIndices(context.configuration.sensor.bayerOrder);
+ if (ret)
+ return ret;
+
+ /*
+ * Defaults; we use whatever the sensor's default exposure is and the
+ * minimum analogue gain. AEGC is _active_ by default.
+ */
+ context.activeState.agc.autoEnabled = true;
+ context.activeState.agc.automatic.sensorGain = context.configuration.agc.minAnalogueGain;
+ context.activeState.agc.automatic.exposure = context.configuration.agc.defaultExposure;
+ context.activeState.agc.automatic.ispGain = kMinDigitalGain;
+ context.activeState.agc.manual.sensorGain = context.configuration.agc.minAnalogueGain;
+ context.activeState.agc.manual.exposure = context.configuration.agc.defaultExposure;
+ context.activeState.agc.manual.ispGain = kMinDigitalGain;
+ context.activeState.agc.constraintMode = constraintModes().begin()->first;
+ context.activeState.agc.exposureMode = exposureModeHelpers().begin()->first;
+
+ /* \todo Run this again when FrameDurationLimits is passed in */
+ setLimits(context.configuration.agc.minShutterSpeed,
+ context.configuration.agc.maxShutterSpeed,
+ context.configuration.agc.minAnalogueGain,
+ context.configuration.agc.maxAnalogueGain);
+
+ resetFrameCount();
+
+ return 0;
+}
+
+void Agc::queueRequest(IPAContext &context, const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
+ const ControlList &controls)
+{
+ auto &agc = context.activeState.agc;
+
+ const auto &constraintMode = controls.get(controls::AeConstraintMode);
+ agc.constraintMode = constraintMode.value_or(agc.constraintMode);
+
+ const auto &exposureMode = controls.get(controls::AeExposureMode);
+ agc.exposureMode = exposureMode.value_or(agc.exposureMode);
+
+ const auto &agcEnable = controls.get(controls::AeEnable);
+ if (agcEnable && *agcEnable != agc.autoEnabled) {
+ agc.autoEnabled = *agcEnable;
+
+ LOG(MaliC55Agc, Info)
+ << (agc.autoEnabled ? "Enabling" : "Disabling")
+ << " AGC";
+ }
+
+ /*
+ * If the automatic exposure and gain is enabled we have no further work
+ * to do here...
+ */
+ if (agc.autoEnabled)
+ return;
+
+ /*
+ * ...otherwise we need to look for exposure and gain controls and use
+ * those to set the activeState.
+ */
+ const auto &exposure = controls.get(controls::ExposureTime);
+ if (exposure) {
+ agc.manual.exposure = *exposure * 1.0us / context.configuration.sensor.lineDuration;
+
+ LOG(MaliC55Agc, Debug)
+ << "Exposure set to " << agc.manual.exposure
+ << " on request sequence " << frame;
+ }
+
+ const auto &analogueGain = controls.get(controls::AnalogueGain);
+ if (analogueGain) {
+ agc.manual.sensorGain = *analogueGain;
+
+ LOG(MaliC55Agc, Debug)
+ << "Analogue gain set to " << agc.manual.sensorGain
+ << " on request sequence " << frame;
+ }
+
+ const auto &digitalGain = controls.get(controls::DigitalGain);
+ if (digitalGain) {
+ agc.manual.ispGain = *digitalGain;
+
+ LOG(MaliC55Agc, Debug)
+ << "Digital gain set to " << agc.manual.ispGain
+ << " on request sequence " << frame;
+ }
+}
+
+size_t Agc::fillGainParamBlock(IPAContext &context, IPAFrameContext &frameContext,
+ mali_c55_params_block block)
+{
+ IPAActiveState &activeState = context.activeState;
+ double gain;
+
+ if (activeState.agc.autoEnabled)
+ gain = activeState.agc.automatic.ispGain;
+ else
+ gain = activeState.agc.manual.ispGain;
+
+ block.header->type = MALI_C55_PARAM_BLOCK_DIGITAL_GAIN;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_digital_gain);
+
+ block.digital_gain->gain = floatingToFixedPoint<5, 8, uint16_t, double>(gain);
+ frameContext.agc.ispGain = gain;
+
+ return block.header->size;
+}
+
+size_t Agc::fillParamsBuffer(mali_c55_params_block block,
+ enum mali_c55_param_block_type type)
+{
+ block.header->type = type;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_aexp_hist);
+
+ /* Collect every 3rd pixel horizontally */
+ block.aexp_hist->skip_x = 1;
+ /* Start from first column */
+ block.aexp_hist->offset_x = 0;
+ /* Collect every pixel vertically */
+ block.aexp_hist->skip_y = 0;
+ /* Start from the first row */
+ block.aexp_hist->offset_y = 0;
+ /* 1x scaling (i.e. none) */
+ block.aexp_hist->scale_bottom = 0;
+ block.aexp_hist->scale_top = 0;
+ /* Collect all Bayer planes into 4 separate histograms */
+ block.aexp_hist->plane_mode = 1;
+ /* Tap the data immediately after the digital gain block */
+ block.aexp_hist->tap_point = MALI_C55_AEXP_HIST_TAP_FS;
+
+ return block.header->size;
+}
+
+size_t Agc::fillWeightsArrayBuffer(mali_c55_params_block block,
+ enum mali_c55_param_block_type type)
+{
+ block.header->type = type;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_aexp_weights);
+
+ /* We use every zone - a 15x15 grid */
+ block.aexp_weights->nodes_used_horiz = 15;
+ block.aexp_weights->nodes_used_vert = 15;
+
+ /*
+ * We uniformly weight the zones to 1 - this results in the collected
+ * histograms containing a true pixel count, which we can then use to
+ * approximate colour channel averages for the image.
+ */
+ Span<uint8_t> weights{
+ block.aexp_weights->zone_weights,
+ MALI_C55_MAX_ZONES
+ };
+ std::fill(weights.begin(), weights.end(), 1);
+
+ return block.header->size;
+}
+
+void Agc::prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext, mali_c55_params_buffer *params)
+{
+ mali_c55_params_block block;
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillGainParamBlock(context, frameContext, block);
+
+ if (frame > 0)
+ return;
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillParamsBuffer(block,
+ MALI_C55_PARAM_BLOCK_AEXP_HIST);
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillWeightsArrayBuffer(block,
+ MALI_C55_PARAM_BLOCK_AEXP_HIST_WEIGHTS);
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillParamsBuffer(block,
+ MALI_C55_PARAM_BLOCK_AEXP_IHIST);
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillWeightsArrayBuffer(block,
+ MALI_C55_PARAM_BLOCK_AEXP_IHIST_WEIGHTS);
+}
+
+double Agc::estimateLuminance(const double gain) const
+{
+ double rAvg = statistics_.rHist.interQuantileMean(0, 1) * gain;
+ double gAvg = statistics_.gHist.interQuantileMean(0, 1) * gain;
+ double bAvg = statistics_.bHist.interQuantileMean(0, 1) * gain;
+ double yAvg = rec601LuminanceFromRGB({ { rAvg, gAvg, bAvg } });
+
+ return yAvg / kNumHistogramBins;
+}
+
+void Agc::process(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const mali_c55_stats_buffer *stats,
+ [[maybe_unused]] ControlList &metadata)
+{
+ IPASessionConfiguration &configuration = context.configuration;
+ IPAActiveState &activeState = context.activeState;
+
+ if (!stats) {
+ LOG(MaliC55Agc, Error) << "No statistics buffer passed to Agc";
+ return;
+ }
+
+ statistics_.parseStatistics(stats);
+ context.activeState.agc.temperatureK = estimateCCT({ { statistics_.rHist.interQuantileMean(0, 1),
+ statistics_.gHist.interQuantileMean(0, 1),
+ statistics_.bHist.interQuantileMean(0, 1) } });
+
+ /*
+ * The Agc algorithm needs to know the effective exposure value that was
+ * applied to the sensor when the statistics were collected.
+ */
+ uint32_t exposure = frameContext.agc.exposure;
+ double analogueGain = frameContext.agc.sensorGain;
+ double digitalGain = frameContext.agc.ispGain;
+ double totalGain = analogueGain * digitalGain;
+ utils::Duration currentShutter = exposure * configuration.sensor.lineDuration;
+ utils::Duration effectiveExposureValue = currentShutter * totalGain;
+
+ utils::Duration shutterTime;
+ double aGain, dGain;
+ std::tie(shutterTime, aGain, dGain) =
+ calculateNewEv(activeState.agc.constraintMode,
+ activeState.agc.exposureMode, statistics_.yHist,
+ effectiveExposureValue);
+
+ dGain = std::clamp(dGain, kMinDigitalGain, kMaxDigitalGain);
+
+ LOG(MaliC55Agc, Debug)
+ << "Divided up shutter, analogue gain and digital gain are "
+ << shutterTime << ", " << aGain << " and " << dGain;
+
+ activeState.agc.automatic.exposure = shutterTime / configuration.sensor.lineDuration;
+ activeState.agc.automatic.sensorGain = aGain;
+ activeState.agc.automatic.ispGain = dGain;
+
+ metadata.set(controls::ExposureTime, currentShutter.get<std::micro>());
+ metadata.set(controls::AnalogueGain, frameContext.agc.sensorGain);
+ metadata.set(controls::DigitalGain, frameContext.agc.ispGain);
+ metadata.set(controls::ColourTemperature, context.activeState.agc.temperatureK);
+}
+
+REGISTER_IPA_ALGORITHM(Agc, "Agc")
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/agc.h b/src/ipa/mali-c55/algorithms/agc.h
new file mode 100644
index 00000000..c5c574e5
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/agc.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2023, Ideas on Board Oy
+ *
+ * agc.h - Mali C55 AGC/AEC mean-based control algorithm
+ */
+
+#pragma once
+
+#include <libcamera/base/utils.h>
+
+#include "libcamera/internal/bayer_format.h"
+
+#include "libipa/agc_mean_luminance.h"
+#include "libipa/histogram.h"
+
+#include "algorithm.h"
+#include "ipa_context.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+class AgcStatistics
+{
+public:
+ AgcStatistics()
+ {
+ }
+
+ int setBayerOrderIndices(BayerFormat::Order bayerOrder);
+ uint32_t decodeBinValue(uint16_t binVal);
+ void parseStatistics(const mali_c55_stats_buffer *stats);
+
+ Histogram rHist;
+ Histogram gHist;
+ Histogram bHist;
+ Histogram yHist;
+private:
+ unsigned int rIndex_;
+ unsigned int grIndex_;
+ unsigned int gbIndex_;
+ unsigned int bIndex_;
+};
+
+class Agc : public Algorithm, public AgcMeanLuminance
+{
+public:
+ Agc();
+ ~Agc() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ int configure(IPAContext &context,
+ const IPACameraSensorInfo &configInfo) override;
+ void queueRequest(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const ControlList &controls) override;
+ void prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const mali_c55_stats_buffer *stats,
+ ControlList &metadata) override;
+
+private:
+ double estimateLuminance(const double gain) const override;
+ size_t fillGainParamBlock(IPAContext &context,
+ IPAFrameContext &frameContext,
+ mali_c55_params_block block);
+ size_t fillParamsBuffer(mali_c55_params_block block,
+ enum mali_c55_param_block_type type);
+ size_t fillWeightsArrayBuffer(mali_c55_params_block block,
+ enum mali_c55_param_block_type type);
+
+ AgcStatistics statistics_;
+};
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/algorithm.h b/src/ipa/mali-c55/algorithms/algorithm.h
new file mode 100644
index 00000000..36a3bff0
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/algorithm.h
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * algorithm.h - Mali-C55 control algorithm interface
+ */
+
+#pragma once
+
+#include <linux/mali-c55-config.h>
+
+#include <libipa/algorithm.h>
+
+#include "module.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55 {
+
+class Algorithm : public libcamera::ipa::Algorithm<Module>
+{
+};
+
+union mali_c55_params_block {
+ struct mali_c55_params_block_header *header;
+ struct mali_c55_params_sensor_off_preshading *sensor_offs;
+ struct mali_c55_params_aexp_hist *aexp_hist;
+ struct mali_c55_params_aexp_weights *aexp_weights;
+ struct mali_c55_params_digital_gain *digital_gain;
+ struct mali_c55_params_awb_gains *awb_gains;
+ struct mali_c55_params_awb_config *awb_config;
+ struct mali_c55_params_mesh_shading_config *shading_config;
+ struct mali_c55_params_mesh_shading_selection *shading_selection;
+ __u8 *data;
+};
+
+} /* namespace ipa::mali_c55 */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/awb.cpp b/src/ipa/mali-c55/algorithms/awb.cpp
new file mode 100644
index 00000000..050b191b
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/awb.cpp
@@ -0,0 +1,230 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * awb.cpp - Mali C55 grey world auto white balance algorithm
+ */
+
+#include "awb.h"
+
+#include <cmath>
+
+#include <libcamera/base/log.h>
+#include <libcamera/base/utils.h>
+
+#include <libcamera/control_ids.h>
+
+#include "libipa/fixedpoint.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+LOG_DEFINE_CATEGORY(MaliC55Awb)
+
+/* Number of frames at which we should run AWB at full speed */
+static constexpr uint32_t kNumStartupFrames = 4;
+
+Awb::Awb()
+{
+}
+
+int Awb::configure([[maybe_unused]] IPAContext &context,
+ [[maybe_unused]] const IPACameraSensorInfo &configInfo)
+{
+ /*
+ * Initially we have no idea what the colour balance will be like, so
+ * for the first frame we will make no assumptions and leave the R/B
+ * channels unmodified.
+ */
+ context.activeState.awb.rGain = 1.0;
+ context.activeState.awb.bGain = 1.0;
+
+ return 0;
+}
+
+size_t Awb::fillGainsParamBlock(mali_c55_params_block block, IPAContext &context,
+ IPAFrameContext &frameContext)
+{
+ block.header->type = MALI_C55_PARAM_BLOCK_AWB_GAINS;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_awb_gains);
+
+ double rGain = context.activeState.awb.rGain;
+ double bGain = context.activeState.awb.bGain;
+
+ /*
+ * The gains here map as follows:
+ * gain00 = R
+ * gain01 = Gr
+ * gain10 = Gb
+ * gain11 = B
+ *
+ * This holds true regardless of the bayer order of the input data, as
+ * the mapping is done internally in the ISP.
+ */
+ block.awb_gains->gain00 = floatingToFixedPoint<4, 8, uint16_t, double>(rGain);
+ block.awb_gains->gain01 = floatingToFixedPoint<4, 8, uint16_t, double>(1.0);
+ block.awb_gains->gain10 = floatingToFixedPoint<4, 8, uint16_t, double>(1.0);
+ block.awb_gains->gain11 = floatingToFixedPoint<4, 8, uint16_t, double>(bGain);
+
+ frameContext.awb.rGain = rGain;
+ frameContext.awb.bGain = bGain;
+
+ return sizeof(struct mali_c55_params_awb_gains);
+}
+
+size_t Awb::fillConfigParamBlock(mali_c55_params_block block)
+{
+ block.header->type = MALI_C55_PARAM_BLOCK_AWB_CONFIG;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_awb_config);
+
+ /* Tap the stats after the purple fringe block */
+ block.awb_config->tap_point = MALI_C55_AWB_STATS_TAP_PF;
+
+ /* Get R/G and B/G ratios as statistics */
+ block.awb_config->stats_mode = MALI_C55_AWB_MODE_RGBG;
+
+ /* Default white level */
+ block.awb_config->white_level = 1023;
+
+ /* Default black level */
+ block.awb_config->black_level = 0;
+
+ /*
+ * By default pixels are included who's colour ratios are bounded in a
+ * region (on a cr ratio x cb ratio graph) defined by four points:
+ * (0.25, 0.25)
+ * (0.25, 1.99609375)
+ * (1.99609375, 1.99609375)
+ * (1.99609375, 0.25)
+ *
+ * The ratios themselves are stored in Q4.8 format.
+ *
+ * \todo should these perhaps be tunable?
+ */
+ block.awb_config->cr_max = 511;
+ block.awb_config->cr_min = 64;
+ block.awb_config->cb_max = 511;
+ block.awb_config->cb_min = 64;
+
+ /* We use the full 15x15 zoning scheme */
+ block.awb_config->nodes_used_horiz = 15;
+ block.awb_config->nodes_used_vert = 15;
+
+ /*
+ * We set the trimming boundaries equivalent to the main boundaries. In
+ * other words; no trimming.
+ */
+ block.awb_config->cr_high = 511;
+ block.awb_config->cr_low = 64;
+ block.awb_config->cb_high = 511;
+ block.awb_config->cb_low = 64;
+
+ return sizeof(struct mali_c55_params_awb_config);
+}
+
+void Awb::prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext, mali_c55_params_buffer *params)
+{
+ mali_c55_params_block block;
+ block.data = &params->data[params->total_size];
+
+ params->total_size += fillGainsParamBlock(block, context, frameContext);
+
+ if (frame > 0)
+ return;
+
+ block.data = &params->data[params->total_size];
+ params->total_size += fillConfigParamBlock(block);
+}
+
+void Awb::process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext, const mali_c55_stats_buffer *stats,
+ [[maybe_unused]] ControlList &metadata)
+{
+ const struct mali_c55_awb_average_ratios *awb_ratios = stats->awb_ratios;
+
+ /*
+ * The ISP produces average R:G and B:G ratios for zones. We take the
+ * average of all the zones with data and simply invert them to provide
+ * gain figures that we can apply to approximate a grey world.
+ */
+ unsigned int counted_zones = 0;
+ double rgSum = 0, bgSum = 0;
+
+ for (unsigned int i = 0; i < 225; i++) {
+ if (!awb_ratios[i].num_pixels)
+ continue;
+
+ /*
+ * The statistics are in Q4.8 format, so we convert to double
+ * here.
+ */
+ rgSum += fixedToFloatingPoint<4, 8, double, uint16_t>(awb_ratios[i].avg_rg_gr);
+ bgSum += fixedToFloatingPoint<4, 8, double, uint16_t>(awb_ratios[i].avg_bg_br);
+ counted_zones++;
+ }
+
+ /*
+ * Sometimes the first frame's statistics have no valid pixels, in which
+ * case we'll just assume a grey world until they say otherwise.
+ */
+ double rgAvg, bgAvg;
+ if (!counted_zones) {
+ rgAvg = 1.0;
+ bgAvg = 1.0;
+ } else {
+ rgAvg = rgSum / counted_zones;
+ bgAvg = bgSum / counted_zones;
+ }
+
+ /*
+ * The statistics are generated _after_ white balancing is performed in
+ * the ISP. To get the true ratio we therefore have to adjust the stats
+ * figure by the gains that were applied when the statistics for this
+ * frame were generated.
+ */
+ double rRatio = rgAvg / frameContext.awb.rGain;
+ double bRatio = bgAvg / frameContext.awb.bGain;
+
+ /*
+ * And then we can simply invert the ratio to find the gain we should
+ * apply.
+ */
+ double rGain = 1 / rRatio;
+ double bGain = 1 / bRatio;
+
+ /*
+ * Running at full speed, this algorithm results in oscillations in the
+ * colour balance. To remove those we dampen the speed at which it makes
+ * changes in gain, unless we're in the startup phase in which case we
+ * want to fix the miscolouring as quickly as possible.
+ */
+ double speed = frame < kNumStartupFrames ? 1.0 : 0.2;
+ rGain = speed * rGain + context.activeState.awb.rGain * (1.0 - speed);
+ bGain = speed * bGain + context.activeState.awb.bGain * (1.0 - speed);
+
+ context.activeState.awb.rGain = rGain;
+ context.activeState.awb.bGain = bGain;
+
+ metadata.set(controls::ColourGains, {
+ static_cast<float>(frameContext.awb.rGain),
+ static_cast<float>(frameContext.awb.bGain),
+ });
+
+ LOG(MaliC55Awb, Debug) << "For frame number " << frame << ": "
+ << "Average R/G Ratio: " << rgAvg
+ << ", Average B/G Ratio: " << bgAvg
+ << "\nrGain applied to this frame: " << frameContext.awb.rGain
+ << ", bGain applied to this frame: " << frameContext.awb.bGain
+ << "\nrGain to apply: " << context.activeState.awb.rGain
+ << ", bGain to apply: " << context.activeState.awb.bGain;
+}
+
+REGISTER_IPA_ALGORITHM(Awb, "Awb")
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/awb.h b/src/ipa/mali-c55/algorithms/awb.h
new file mode 100644
index 00000000..800c2e83
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/awb.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas on Board Oy
+ *
+ * awb.h - Mali C55 grey world auto white balance algorithm
+ */
+
+#include "algorithm.h"
+#include "ipa_context.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+class Awb : public Algorithm
+{
+public:
+ Awb();
+ ~Awb() = default;
+
+ int configure(IPAContext &context,
+ const IPACameraSensorInfo &configInfo) override;
+ void prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const mali_c55_stats_buffer *stats,
+ ControlList &metadata) override;
+
+private:
+ size_t fillGainsParamBlock(mali_c55_params_block block,
+ IPAContext &context,
+ IPAFrameContext &frameContext);
+ size_t fillConfigParamBlock(mali_c55_params_block block);
+};
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/blc.cpp b/src/ipa/mali-c55/algorithms/blc.cpp
new file mode 100644
index 00000000..2a54c86a
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/blc.cpp
@@ -0,0 +1,140 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * Mali-C55 sensor offset (black level) correction
+ */
+
+#include "blc.h"
+
+#include <libcamera/base/log.h>
+#include <libcamera/control_ids.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
+/**
+ * \file blc.h
+ */
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+/**
+ * \class BlackLevelCorrection
+ * \brief MaliC55 Black Level Correction control
+ */
+
+LOG_DEFINE_CATEGORY(MaliC55Blc)
+
+BlackLevelCorrection::BlackLevelCorrection()
+ : tuningParameters_(false)
+{
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::init
+ */
+int BlackLevelCorrection::init([[maybe_unused]] IPAContext &context,
+ const YamlObject &tuningData)
+{
+ offset00 = tuningData["offset00"].get<uint32_t>(0);
+ offset01 = tuningData["offset01"].get<uint32_t>(0);
+ offset10 = tuningData["offset10"].get<uint32_t>(0);
+ offset11 = tuningData["offset11"].get<uint32_t>(0);
+
+ if (offset00 > kMaxOffset || offset01 > kMaxOffset ||
+ offset10 > kMaxOffset || offset11 > kMaxOffset) {
+ LOG(MaliC55Blc, Error) << "Invalid black level offsets";
+ return -EINVAL;
+ }
+
+ tuningParameters_ = true;
+
+ LOG(MaliC55Blc, Debug)
+ << "Black levels: 00 " << offset00 << ", 01 " << offset01
+ << ", 10 " << offset10 << ", 11 " << offset11;
+
+ return 0;
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::configure
+ */
+int BlackLevelCorrection::configure(IPAContext &context,
+ [[maybe_unused]] const IPACameraSensorInfo &configInfo)
+{
+ /*
+ * If no Black Levels were passed in through tuning data then we could
+ * use the value from the CameraSensorHelper if one is available.
+ */
+ if (context.configuration.sensor.blackLevel &&
+ !(offset00 + offset01 + offset10 + offset11)) {
+ offset00 = context.configuration.sensor.blackLevel;
+ offset01 = context.configuration.sensor.blackLevel;
+ offset10 = context.configuration.sensor.blackLevel;
+ offset11 = context.configuration.sensor.blackLevel;
+ }
+
+ return 0;
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::prepare
+ */
+void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
+ const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params)
+{
+ mali_c55_params_block block;
+ block.data = &params->data[params->total_size];
+
+ if (frame > 0)
+ return;
+
+ if (!tuningParameters_)
+ return;
+
+ block.header->type = MALI_C55_PARAM_BLOCK_SENSOR_OFFS;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(mali_c55_params_sensor_off_preshading);
+
+ block.sensor_offs->chan00 = offset00;
+ block.sensor_offs->chan01 = offset01;
+ block.sensor_offs->chan10 = offset10;
+ block.sensor_offs->chan11 = offset11;
+
+ params->total_size += block.header->size;
+}
+
+void BlackLevelCorrection::process([[maybe_unused]] IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
+ [[maybe_unused]] const mali_c55_stats_buffer *stats,
+ ControlList &metadata)
+{
+ /*
+ * Black Level Offsets in tuning data need to be 20-bit, whereas the
+ * metadata expects values from a 16-bit range. Right-shift to remove
+ * the 4 least significant bits.
+ *
+ * The black levels should be reported in the order R, Gr, Gb, B. We
+ * ignore that here given we're using matching values so far, but it
+ * would be safer to check the sensor's bayer order.
+ *
+ * \todo Account for bayer order.
+ */
+ metadata.set(controls::SensorBlackLevels, {
+ static_cast<int32_t>(offset00 >> 4),
+ static_cast<int32_t>(offset01 >> 4),
+ static_cast<int32_t>(offset10 >> 4),
+ static_cast<int32_t>(offset11 >> 4),
+ });
+}
+
+REGISTER_IPA_ALGORITHM(BlackLevelCorrection, "BlackLevelCorrection")
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/blc.h b/src/ipa/mali-c55/algorithms/blc.h
new file mode 100644
index 00000000..9696e8e9
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/blc.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * Mali-C55 sensor offset (black level) correction
+ */
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+class BlackLevelCorrection : public Algorithm
+{
+public:
+ BlackLevelCorrection();
+ ~BlackLevelCorrection() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ int configure(IPAContext &context,
+ const IPACameraSensorInfo &configInfo) override;
+ void prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const mali_c55_stats_buffer *stats,
+ ControlList &metadata) override;
+
+private:
+ static constexpr uint32_t kMaxOffset = 0xfffff;
+
+ bool tuningParameters_;
+ uint32_t offset00;
+ uint32_t offset01;
+ uint32_t offset10;
+ uint32_t offset11;
+};
+
+} /* namespace ipa::mali_c55::algorithms */
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/lsc.cpp b/src/ipa/mali-c55/algorithms/lsc.cpp
new file mode 100644
index 00000000..c5afc04d
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/lsc.cpp
@@ -0,0 +1,216 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * lsc.cpp - Mali-C55 Lens shading correction algorithm
+ */
+
+#include "lsc.h"
+
+#include "libcamera/internal/yaml_parser.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+LOG_DEFINE_CATEGORY(MaliC55Lsc)
+
+int Lsc::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData)
+{
+ if (!tuningData.contains("meshScale")) {
+ LOG(MaliC55Lsc, Error) << "meshScale missing from tuningData";
+ return -EINVAL;
+ }
+
+ meshScale_ = tuningData["meshScale"].get<uint32_t>(0);
+
+ const YamlObject &yamlSets = tuningData["sets"];
+ if (!yamlSets.isList()) {
+ LOG(MaliC55Lsc, Error) << "LSC tables missing or invalid";
+ return -EINVAL;
+ }
+
+ size_t tableSize = 0;
+ const auto &sets = yamlSets.asList();
+ for (const auto &yamlSet : sets) {
+ uint32_t ct = yamlSet["ct"].get<uint32_t>(0);
+
+ if (!ct) {
+ LOG(MaliC55Lsc, Error) << "Invalid colour temperature";
+ return -EINVAL;
+ }
+
+ if (std::count(colourTemperatures_.begin(),
+ colourTemperatures_.end(), ct)) {
+ LOG(MaliC55Lsc, Error)
+ << "Multiple sets found for colour temperature";
+ return -EINVAL;
+ }
+
+ std::vector<uint8_t> rTable =
+ yamlSet["r"].getList<uint8_t>().value_or(std::vector<uint8_t>{});
+ std::vector<uint8_t> gTable =
+ yamlSet["g"].getList<uint8_t>().value_or(std::vector<uint8_t>{});
+ std::vector<uint8_t> bTable =
+ yamlSet["b"].getList<uint8_t>().value_or(std::vector<uint8_t>{});
+
+ /*
+ * Some validation to do; only 16x16 and 32x32 tables of
+ * coefficients are acceptable, and all tables across all of the
+ * sets must be the same size. The first time we encounter a
+ * table we check that it is an acceptable size and if so make
+ * sure all other tables are of equal size.
+ */
+ if (!tableSize) {
+ if (rTable.size() != 256 && rTable.size() != 1024) {
+ LOG(MaliC55Lsc, Error)
+ << "Invalid table size for colour temperature " << ct;
+ return -EINVAL;
+ }
+ tableSize = rTable.size();
+ }
+
+ if (rTable.size() != tableSize ||
+ gTable.size() != tableSize ||
+ bTable.size() != tableSize) {
+ LOG(MaliC55Lsc, Error)
+ << "Invalid or mismatched table size for colour temperature " << ct;
+ return -EINVAL;
+ }
+
+ if (colourTemperatures_.size() >= 3) {
+ LOG(MaliC55Lsc, Error)
+ << "A maximum of 3 colour temperatures are supported";
+ return -EINVAL;
+ }
+
+ for (unsigned int i = 0; i < tableSize; i++) {
+ mesh_[kRedOffset + i] |=
+ (rTable[i] << (colourTemperatures_.size() * 8));
+ mesh_[kGreenOffset + i] |=
+ (gTable[i] << (colourTemperatures_.size() * 8));
+ mesh_[kBlueOffset + i] |=
+ (bTable[i] << (colourTemperatures_.size() * 8));
+ }
+
+ colourTemperatures_.push_back(ct);
+ }
+
+ /*
+ * The mesh has either 16x16 or 32x32 nodes, we tell the driver which it
+ * is based on the number of values in the tuning data's table.
+ */
+ if (tableSize == 256)
+ meshSize_ = 15;
+ else
+ meshSize_ = 31;
+
+ return 0;
+}
+
+size_t Lsc::fillConfigParamsBlock(mali_c55_params_block block) const
+{
+ block.header->type = MALI_C55_PARAM_MESH_SHADING_CONFIG;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_mesh_shading_config);
+
+ block.shading_config->mesh_show = false;
+ block.shading_config->mesh_scale = meshScale_;
+ block.shading_config->mesh_page_r = 0;
+ block.shading_config->mesh_page_g = 1;
+ block.shading_config->mesh_page_b = 2;
+ block.shading_config->mesh_width = meshSize_;
+ block.shading_config->mesh_height = meshSize_;
+
+ std::copy(mesh_.begin(), mesh_.end(), block.shading_config->mesh);
+
+ return block.header->size;
+}
+
+size_t Lsc::fillSelectionParamsBlock(mali_c55_params_block block, uint8_t bank,
+ uint8_t alpha) const
+{
+ block.header->type = MALI_C55_PARAM_MESH_SHADING_SELECTION;
+ block.header->flags = MALI_C55_PARAM_BLOCK_FL_NONE;
+ block.header->size = sizeof(struct mali_c55_params_mesh_shading_selection);
+
+ block.shading_selection->mesh_alpha_bank_r = bank;
+ block.shading_selection->mesh_alpha_bank_g = bank;
+ block.shading_selection->mesh_alpha_bank_b = bank;
+ block.shading_selection->mesh_alpha_r = alpha;
+ block.shading_selection->mesh_alpha_g = alpha;
+ block.shading_selection->mesh_alpha_b = alpha;
+ block.shading_selection->mesh_strength = 0x1000; /* Otherwise known as 1.0 */
+
+ return block.header->size;
+}
+
+std::tuple<uint8_t, uint8_t> Lsc::findBankAndAlpha(uint32_t ct) const
+{
+ unsigned int i;
+
+ ct = std::clamp<uint32_t>(ct, colourTemperatures_.front(),
+ colourTemperatures_.back());
+
+ for (i = 0; i < colourTemperatures_.size() - 1; i++) {
+ if (ct >= colourTemperatures_[i] &&
+ ct <= colourTemperatures_[i + 1])
+ break;
+ }
+
+ /*
+ * With the clamping, we're guaranteed an index into colourTemperatures_
+ * that's <= colourTemperatures_.size() - 1.
+ */
+ uint8_t alpha = (255 * (ct - colourTemperatures_[i])) /
+ (colourTemperatures_[i + 1] - colourTemperatures_[i]);
+
+ return { i, alpha };
+}
+
+void Lsc::prepare(IPAContext &context, [[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params)
+{
+ /*
+ * For each frame we assess the colour temperature of the **last** frame
+ * and then select an appropriately blended table of coefficients based
+ * on that ct. As a bit of a shortcut, if we've only a single table the
+ * handling is somewhat simpler; if it's the first frame we just select
+ * that table and if we're past the first frame then we can just do
+ * nothing - the config will never change.
+ */
+ uint32_t temperatureK = context.activeState.agc.temperatureK;
+ uint8_t bank, alpha;
+
+ if (colourTemperatures_.size() == 1) {
+ if (frame > 0)
+ return;
+
+ bank = 0;
+ alpha = 0;
+ } else {
+ std::tie(bank, alpha) = findBankAndAlpha(temperatureK);
+ }
+
+ mali_c55_params_block block;
+ block.data = &params->data[params->total_size];
+
+ params->total_size += fillSelectionParamsBlock(block, bank, alpha);
+
+ if (frame > 0)
+ return;
+
+ /*
+ * If this is the first frame, we need to load the parsed coefficient
+ * tables from tuning data to the ISP.
+ */
+ block.data = &params->data[params->total_size];
+ params->total_size += fillConfigParamsBlock(block);
+}
+
+REGISTER_IPA_ALGORITHM(Lsc, "Lsc")
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/lsc.h b/src/ipa/mali-c55/algorithms/lsc.h
new file mode 100644
index 00000000..e613277a
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/lsc.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * lsc.h - Mali-C55 Lens shading correction algorithm
+ */
+
+#include <map>
+#include <tuple>
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55::algorithms {
+
+class Lsc : public Algorithm
+{
+public:
+ Lsc() = default;
+ ~Lsc() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ void prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ mali_c55_params_buffer *params) override;
+private:
+ static constexpr unsigned int kRedOffset = 0;
+ static constexpr unsigned int kGreenOffset = 1024;
+ static constexpr unsigned int kBlueOffset = 2048;
+
+ size_t fillConfigParamsBlock(mali_c55_params_block block) const;
+ size_t fillSelectionParamsBlock(mali_c55_params_block block,
+ uint8_t bank, uint8_t alpha) const;
+ std::tuple<uint8_t, uint8_t> findBankAndAlpha(uint32_t ct) const;
+
+ std::vector<uint32_t> mesh_ = std::vector<uint32_t>(3072);
+ std::vector<uint32_t> colourTemperatures_;
+ uint32_t meshScale_;
+ uint32_t meshSize_;
+};
+
+} /* namespace ipa::mali_c55::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/algorithms/meson.build b/src/ipa/mali-c55/algorithms/meson.build
new file mode 100644
index 00000000..1665da07
--- /dev/null
+++ b/src/ipa/mali-c55/algorithms/meson.build
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: CC0-1.0
+
+mali_c55_ipa_algorithms = files([
+ 'agc.cpp',
+ 'awb.cpp',
+ 'blc.cpp',
+ 'lsc.cpp',
+])
diff --git a/src/ipa/mali-c55/data/imx415.yaml b/src/ipa/mali-c55/data/imx415.yaml
new file mode 100644
index 00000000..126b427a
--- /dev/null
+++ b/src/ipa/mali-c55/data/imx415.yaml
@@ -0,0 +1,325 @@
+# SPDX-License-Identifier: CC0-1.0
+%YAML 1.1
+---
+version: 1
+algorithms:
+ - Agc:
+ - Awb:
+ - BlackLevelCorrection:
+ offset00: 51200
+ offset01: 51200
+ offset10: 51200
+ offset11: 51200
+ - Lsc:
+ meshScale: 4 # 1.0 - 2.0 Gain
+ sets:
+ - ct: 2500
+ r: [
+ 21, 20, 19, 17, 15, 14, 12, 11, 9, 9, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 13, 13, 10, 10, 13, 16, 17, 18, 21, 22,
+ 21, 20, 18, 16, 14, 13, 12, 11, 10, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 15, 17, 18, 21, 21,
+ 20, 19, 17, 16, 14, 13, 12, 11, 10, 9, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 11, 15, 17, 18, 21, 21,
+ 19, 19, 17, 15, 14, 13, 12, 11, 10, 8, 8, 7, 7, 7, 6, 6, 7, 7, 8, 8, 8, 8, 8, 7, 7, 8, 10, 14, 17, 18, 20, 22,
+ 19, 18, 17, 15, 14, 13, 11, 11, 9, 8, 8, 7, 7, 6, 5, 5, 5, 5, 6, 7, 8, 7, 7, 6, 7, 7, 10, 12, 16, 18, 20, 22,
+ 18, 18, 16, 15, 14, 12, 11, 10, 9, 8, 6, 6, 5, 5, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 8, 12, 16, 18, 19, 20,
+ 18, 18, 16, 14, 13, 12, 11, 9, 9, 7, 6, 5, 5, 5, 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 5, 6, 8, 11, 15, 18, 18, 19,
+ 18, 17, 15, 14, 13, 12, 11, 9, 8, 7, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 7, 9, 14, 17, 18, 18,
+ 18, 17, 15, 14, 13, 12, 11, 9, 8, 7, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 8, 12, 17, 18, 18,
+ 18, 16, 15, 13, 12, 11, 10, 9, 8, 7, 5, 4, 4, 4, 4, 3, 3, 4, 4, 4, 3, 3, 4, 4, 4, 5, 6, 8, 12, 16, 19, 19,
+ 17, 16, 15, 13, 12, 11, 10, 8, 7, 6, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 4, 4, 5, 6, 9, 12, 16, 19, 20,
+ 17, 15, 15, 13, 12, 11, 10, 8, 6, 6, 5, 4, 3, 3, 3, 2, 3, 3, 4, 4, 3, 3, 2, 3, 4, 5, 6, 9, 11, 16, 19, 20,
+ 17, 15, 15, 14, 11, 11, 10, 8, 6, 5, 5, 4, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 4, 5, 6, 8, 11, 16, 18, 19,
+ 16, 16, 15, 13, 11, 11, 10, 7, 6, 5, 4, 4, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 3, 4, 6, 8, 11, 14, 17, 18,
+ 16, 16, 14, 13, 11, 10, 9, 7, 6, 5, 4, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 4, 6, 8, 10, 14, 17, 18,
+ 16, 15, 14, 13, 13, 10, 9, 7, 6, 4, 4, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 6, 8, 11, 17, 18, 19,
+ 16, 15, 14, 14, 13, 12, 9, 8, 7, 5, 4, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 8, 12, 17, 19, 20,
+ 17, 15, 15, 14, 13, 12, 9, 8, 7, 5, 3, 2, 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 5, 6, 8, 13, 16, 19, 21,
+ 17, 16, 15, 13, 13, 12, 9, 8, 7, 5, 3, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 5, 5, 7, 8, 13, 16, 19, 20,
+ 17, 16, 15, 14, 13, 12, 9, 8, 7, 5, 3, 2, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 6, 7, 9, 13, 17, 19, 20,
+ 18, 16, 15, 14, 13, 12, 9, 8, 7, 5, 4, 2, 1, 0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 5, 6, 8, 9, 13, 17, 20, 20,
+ 18, 16, 16, 15, 14, 12, 10, 9, 7, 6, 5, 3, 2, 1, 0, 0, 0, 1, 2, 3, 3, 3, 4, 5, 6, 7, 9, 10, 14, 18, 20, 20,
+ 18, 17, 16, 15, 14, 12, 10, 9, 8, 7, 6, 5, 3, 3, 1, 0, 0, 1, 2, 3, 4, 4, 5, 6, 6, 7, 9, 12, 15, 19, 20, 20,
+ 18, 18, 17, 16, 14, 13, 11, 10, 9, 8, 7, 6, 5, 5, 3, 1, 1, 1, 2, 3, 5, 5, 5, 6, 7, 9, 12, 15, 17, 19, 20, 20,
+ 18, 18, 17, 16, 15, 13, 12, 10, 10, 9, 8, 7, 6, 5, 4, 2, 1, 2, 3, 4, 5, 5, 6, 6, 8, 10, 13, 16, 18, 20, 20, 21,
+ 19, 18, 17, 16, 15, 14, 13, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 3, 3, 5, 5, 6, 7, 10, 11, 14, 17, 19, 20, 21, 22,
+ 20, 19, 18, 17, 16, 15, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 3, 3, 5, 6, 6, 7, 10, 12, 14, 18, 20, 21, 22, 23,
+ 21, 20, 19, 18, 17, 16, 14, 13, 12, 11, 10, 10, 9, 7, 7, 5, 5, 4, 4, 5, 6, 6, 7, 8, 11, 13, 16, 19, 21, 22, 22, 22,
+ 22, 21, 20, 19, 18, 17, 16, 14, 13, 12, 12, 10, 9, 8, 7, 6, 6, 5, 5, 6, 7, 7, 8, 9, 12, 14, 18, 20, 21, 22, 22, 22,
+ 23, 22, 21, 20, 19, 17, 16, 15, 14, 14, 13, 12, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 8, 10, 12, 15, 18, 20, 21, 22, 22, 22,
+ 24, 23, 22, 21, 20, 18, 17, 16, 15, 15, 14, 14, 13, 11, 9, 8, 6, 6, 6, 6, 7, 8, 9, 11, 14, 17, 19, 20, 21, 21, 21, 21,
+ 24, 24, 23, 21, 20, 19, 17, 16, 15, 15, 15, 14, 14, 14, 11, 9, 6, 5, 5, 6, 8, 8, 10, 12, 15, 17, 20, 20, 21, 21, 21, 21,
+ ]
+ g: [
+ 19, 18, 17, 15, 13, 12, 10, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 9, 9, 11, 15, 15, 16, 19, 20,
+ 19, 18, 16, 15, 12, 12, 10, 10, 8, 7, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 7, 7, 11, 14, 15, 16, 19, 19,
+ 18, 17, 16, 14, 12, 12, 10, 10, 8, 7, 7, 6, 6, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 10, 14, 15, 17, 19, 19,
+ 17, 17, 16, 14, 12, 12, 10, 10, 8, 7, 6, 6, 6, 5, 5, 4, 5, 5, 6, 6, 6, 7, 7, 5, 6, 6, 9, 13, 15, 17, 18, 20,
+ 17, 17, 15, 14, 12, 11, 10, 9, 8, 7, 6, 5, 5, 4, 4, 4, 4, 4, 5, 6, 6, 6, 5, 5, 5, 6, 8, 11, 15, 17, 18, 20,
+ 17, 17, 15, 13, 12, 11, 9, 9, 8, 7, 5, 5, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 7, 11, 15, 17, 18, 18,
+ 17, 16, 15, 13, 12, 11, 9, 8, 8, 6, 5, 4, 4, 4, 3, 3, 4, 4, 3, 3, 3, 4, 4, 4, 4, 5, 6, 9, 14, 17, 17, 18,
+ 17, 16, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 6, 8, 13, 16, 17, 17,
+ 17, 15, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 7, 12, 16, 17, 17,
+ 17, 15, 14, 12, 11, 10, 9, 8, 7, 6, 4, 4, 3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 3, 3, 3, 4, 5, 7, 11, 15, 18, 18,
+ 16, 14, 13, 12, 11, 10, 9, 7, 7, 5, 4, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 4, 5, 8, 11, 15, 18, 19,
+ 16, 14, 13, 12, 11, 10, 9, 7, 5, 5, 4, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 4, 5, 8, 10, 15, 18, 19,
+ 16, 14, 14, 13, 11, 10, 9, 7, 5, 5, 4, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 5, 7, 10, 15, 17, 18,
+ 16, 15, 14, 12, 11, 10, 9, 7, 5, 5, 4, 3, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 3, 5, 6, 10, 14, 17, 17,
+ 15, 15, 13, 12, 11, 10, 9, 7, 5, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 3, 5, 7, 10, 14, 17, 18,
+ 15, 14, 13, 12, 12, 10, 9, 7, 6, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 7, 10, 17, 18, 18,
+ 15, 14, 14, 13, 12, 11, 9, 7, 6, 4, 3, 2, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 7, 12, 17, 19, 19,
+ 16, 14, 14, 13, 12, 12, 9, 7, 6, 4, 3, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4, 4, 5, 8, 12, 17, 19, 20,
+ 16, 15, 14, 13, 12, 12, 9, 7, 7, 4, 3, 1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 6, 8, 12, 17, 19, 20,
+ 17, 15, 14, 13, 12, 12, 9, 7, 7, 5, 3, 1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 8, 12, 17, 19, 20,
+ 18, 15, 15, 14, 13, 12, 9, 8, 7, 5, 4, 2, 1, 0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 5, 6, 7, 9, 13, 17, 19, 20,
+ 18, 16, 15, 14, 13, 12, 9, 9, 7, 6, 5, 3, 2, 1, 0, 0, 0, 1, 2, 3, 3, 3, 4, 5, 6, 7, 9, 10, 14, 18, 20, 20,
+ 18, 16, 16, 15, 13, 12, 10, 9, 8, 7, 6, 5, 3, 3, 1, 0, 0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 9, 12, 15, 19, 20, 20,
+ 18, 18, 16, 16, 14, 13, 10, 10, 9, 8, 7, 6, 5, 5, 3, 1, 1, 1, 2, 3, 5, 5, 5, 6, 6, 8, 11, 15, 17, 19, 20, 20,
+ 18, 18, 16, 16, 14, 13, 12, 10, 9, 9, 8, 7, 6, 5, 4, 3, 1, 2, 3, 5, 5, 5, 5, 6, 7, 10, 12, 15, 18, 20, 20, 20,
+ 18, 18, 17, 16, 15, 14, 12, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 3, 3, 5, 5, 5, 6, 9, 11, 14, 16, 19, 20, 20, 21,
+ 19, 19, 18, 17, 16, 15, 13, 12, 11, 10, 10, 9, 8, 7, 5, 4, 4, 3, 3, 3, 5, 5, 6, 7, 10, 12, 14, 18, 20, 20, 21, 22,
+ 21, 20, 18, 18, 17, 16, 14, 12, 11, 11, 10, 10, 8, 7, 7, 5, 4, 4, 4, 5, 6, 6, 6, 7, 11, 13, 16, 19, 20, 21, 21, 22,
+ 22, 21, 20, 19, 18, 16, 15, 14, 12, 12, 12, 10, 9, 8, 7, 6, 5, 4, 5, 6, 6, 7, 7, 8, 12, 13, 17, 19, 21, 21, 21, 21,
+ 23, 22, 21, 20, 18, 17, 16, 16, 14, 14, 13, 12, 10, 10, 8, 7, 6, 5, 5, 6, 7, 7, 8, 9, 12, 15, 18, 19, 21, 21, 21, 20,
+ 23, 22, 22, 21, 20, 18, 17, 16, 15, 15, 15, 14, 13, 11, 9, 8, 6, 6, 6, 6, 7, 8, 9, 10, 13, 16, 19, 20, 20, 21, 21, 20,
+ 24, 23, 22, 21, 20, 19, 17, 17, 16, 16, 15, 15, 14, 14, 11, 9, 6, 6, 6, 6, 8, 8, 10, 12, 15, 17, 19, 20, 20, 21, 21, 20,
+ ]
+ b: [
+ 11, 9, 9, 7, 6, 5, 4, 4, 3, 3, 3, 3, 3, 4, 5, 5, 5, 4, 5, 4, 4, 4, 7, 7, 3, 3, 5, 8, 8, 9, 11, 11,
+ 11, 10, 8, 7, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 4, 4, 5, 4, 5, 4, 4, 4, 4, 4, 2, 2, 5, 8, 8, 9, 11, 11,
+ 10, 10, 7, 7, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 1, 1, 5, 7, 9, 9, 11, 11,
+ 10, 9, 8, 7, 6, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 2, 1, 1, 4, 7, 9, 10, 12, 13,
+ 9, 9, 8, 7, 6, 5, 5, 5, 4, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 4, 3, 2, 1, 1, 1, 4, 6, 9, 10, 12, 13,
+ 9, 9, 9, 7, 6, 6, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 1, 2, 2, 2, 1, 1, 1, 2, 6, 9, 10, 11, 12,
+ 8, 9, 9, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 0, 0, 1, 2, 5, 9, 11, 11, 11,
+ 8, 9, 9, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 0, 0, 0, 1, 3, 8, 11, 11, 11,
+ 9, 9, 8, 7, 7, 7, 6, 4, 4, 3, 3, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 0, 0, 0, 1, 3, 7, 11, 11, 11,
+ 9, 9, 8, 7, 7, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1, 0, 0, 0, 0, 0, 1, 3, 7, 10, 12, 13,
+ 9, 9, 8, 8, 7, 7, 6, 5, 4, 3, 2, 1, 2, 1, 2, 2, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 1, 4, 7, 10, 13, 13,
+ 9, 8, 8, 8, 7, 7, 6, 5, 3, 3, 2, 1, 1, 1, 1, 1, 2, 3, 3, 2, 1, 0, 0, 0, 0, 1, 2, 4, 7, 11, 13, 13,
+ 9, 8, 8, 7, 7, 6, 6, 5, 3, 3, 2, 2, 2, 1, 1, 1, 2, 3, 3, 2, 1, 0, 0, 0, 0, 1, 2, 4, 6, 11, 13, 13,
+ 9, 8, 8, 7, 7, 6, 6, 4, 3, 3, 2, 2, 1, 1, 1, 1, 2, 3, 3, 3, 1, 1, 0, 0, 1, 1, 2, 3, 6, 10, 12, 13,
+ 9, 8, 8, 7, 7, 6, 6, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 4, 6, 10, 13, 13,
+ 9, 9, 8, 8, 8, 6, 6, 4, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 3, 4, 6, 13, 14, 14,
+ 9, 9, 8, 8, 8, 8, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 3, 3, 5, 9, 13, 15, 15,
+ 10, 9, 9, 9, 10, 10, 6, 6, 5, 3, 2, 1, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 9, 13, 15, 16,
+ 10, 10, 9, 9, 10, 10, 7, 6, 5, 3, 2, 1, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 9, 13, 15, 16,
+ 11, 10, 9, 9, 10, 10, 7, 6, 6, 3, 2, 1, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 9, 13, 15, 16,
+ 12, 10, 10, 10, 10, 10, 7, 6, 6, 4, 3, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 5, 5, 6, 7, 10, 14, 15, 16,
+ 12, 11, 10, 10, 10, 10, 8, 7, 6, 6, 4, 3, 2, 1, 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 6, 8, 11, 15, 16, 16,
+ 12, 12, 11, 11, 10, 10, 9, 8, 7, 6, 6, 4, 4, 3, 2, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 7, 10, 13, 15, 16, 15,
+ 12, 12, 12, 12, 11, 10, 10, 8, 8, 7, 7, 6, 5, 5, 3, 2, 2, 2, 3, 4, 5, 5, 5, 5, 6, 7, 10, 13, 14, 16, 16, 16,
+ 12, 12, 13, 12, 12, 11, 11, 9, 8, 8, 8, 7, 6, 6, 5, 4, 3, 3, 3, 5, 6, 6, 6, 6, 7, 9, 11, 14, 15, 17, 17, 16,
+ 13, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 8, 7, 7, 6, 5, 5, 4, 4, 4, 5, 6, 6, 6, 9, 10, 12, 14, 16, 17, 17, 18,
+ 13, 13, 14, 13, 13, 13, 12, 12, 11, 10, 10, 9, 8, 7, 6, 6, 6, 5, 4, 4, 6, 6, 6, 7, 9, 11, 12, 16, 17, 17, 17, 18,
+ 15, 15, 15, 15, 14, 13, 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 6, 5, 5, 5, 6, 7, 7, 8, 10, 12, 14, 17, 17, 18, 17, 17,
+ 16, 16, 16, 16, 15, 14, 14, 14, 13, 13, 12, 11, 11, 9, 8, 7, 7, 6, 6, 6, 7, 7, 8, 8, 10, 12, 16, 17, 18, 18, 17, 17,
+ 18, 17, 17, 16, 16, 15, 14, 14, 14, 14, 14, 13, 11, 11, 9, 8, 7, 7, 6, 6, 7, 7, 8, 9, 10, 13, 16, 17, 17, 18, 17, 16,
+ 18, 17, 17, 17, 16, 15, 15, 15, 15, 15, 15, 14, 14, 12, 10, 9, 7, 7, 6, 6, 7, 7, 8, 9, 11, 14, 16, 16, 17, 17, 16, 15,
+ 18, 18, 17, 17, 17, 16, 15, 15, 15, 16, 15, 15, 14, 14, 12, 9, 7, 6, 6, 6, 7, 7, 9, 10, 12, 14, 15, 16, 16, 16, 15, 15,
+ ]
+ - ct: 5500
+ r: [
+ 19, 18, 17, 16, 15, 13, 11, 10, 9, 9, 9, 8, 8, 8, 8, 8, 8, 9, 10, 10, 8, 8, 9, 9, 9, 11, 14, 15, 16, 16, 18, 18,
+ 18, 18, 17, 15, 14, 13, 11, 11, 9, 9, 8, 8, 7, 7, 7, 7, 7, 8, 9, 8, 8, 8, 9, 9, 8, 8, 11, 14, 16, 17, 17, 18,
+ 18, 17, 17, 15, 14, 13, 12, 11, 9, 9, 8, 7, 7, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 7, 7, 10, 13, 16, 17, 18, 18,
+ 17, 17, 16, 15, 14, 12, 11, 11, 9, 8, 7, 7, 6, 5, 5, 5, 5, 6, 8, 7, 8, 8, 8, 6, 6, 6, 9, 12, 16, 16, 18, 19,
+ 17, 17, 16, 14, 13, 12, 11, 10, 10, 8, 7, 7, 5, 5, 5, 5, 5, 5, 6, 7, 7, 7, 6, 6, 6, 6, 8, 11, 15, 16, 17, 19,
+ 18, 17, 16, 14, 13, 12, 11, 10, 10, 8, 7, 6, 5, 5, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, 10, 14, 16, 17, 18,
+ 18, 17, 16, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 3, 4, 5, 5, 5, 5, 5, 6, 10, 13, 16, 16, 17,
+ 18, 16, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 4, 4, 5, 6, 8, 12, 16, 16, 16,
+ 17, 16, 15, 13, 12, 11, 10, 9, 8, 7, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 5, 7, 11, 16, 16, 16,
+ 17, 16, 15, 12, 12, 12, 10, 8, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 4, 5, 7, 10, 16, 16, 16,
+ 16, 16, 14, 12, 12, 11, 10, 8, 7, 6, 4, 4, 3, 3, 3, 3, 3, 4, 3, 3, 2, 2, 2, 3, 3, 4, 4, 7, 10, 14, 16, 16,
+ 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 4, 3, 3, 3, 2, 2, 3, 3, 3, 5, 7, 10, 14, 15, 16,
+ 16, 15, 15, 13, 11, 11, 11, 9, 7, 5, 5, 4, 3, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 5, 6, 9, 14, 15, 16,
+ 16, 15, 15, 13, 11, 11, 11, 10, 7, 5, 4, 4, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 3, 5, 6, 10, 13, 15, 17,
+ 15, 15, 14, 12, 11, 11, 11, 10, 7, 4, 4, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 5, 6, 9, 13, 16, 17,
+ 15, 15, 14, 12, 11, 11, 10, 9, 7, 4, 4, 3, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 5, 7, 10, 15, 17, 17,
+ 15, 15, 14, 12, 11, 11, 10, 9, 7, 4, 4, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 5, 7, 11, 16, 17, 18,
+ 16, 15, 15, 12, 12, 11, 10, 9, 6, 4, 4, 3, 1, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 7, 12, 15, 17, 18,
+ 16, 16, 15, 12, 12, 11, 10, 8, 6, 5, 4, 3, 1, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 6, 8, 12, 15, 17, 18,
+ 15, 15, 15, 13, 12, 12, 10, 8, 7, 5, 4, 3, 2, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 7, 9, 12, 16, 17, 18,
+ 15, 15, 15, 13, 13, 12, 10, 8, 7, 5, 5, 3, 2, 1, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 7, 9, 13, 16, 18, 18,
+ 15, 15, 15, 14, 13, 12, 10, 8, 7, 6, 5, 5, 3, 2, 1, 0, 1, 1, 1, 2, 3, 3, 3, 5, 5, 6, 8, 10, 14, 17, 18, 19,
+ 16, 16, 16, 15, 13, 12, 10, 9, 8, 7, 6, 6, 5, 4, 2, 1, 1, 1, 1, 2, 3, 3, 5, 5, 6, 7, 9, 12, 15, 18, 18, 19,
+ 17, 16, 16, 16, 13, 12, 11, 10, 9, 8, 7, 7, 6, 5, 4, 2, 1, 1, 2, 3, 4, 4, 5, 5, 6, 8, 11, 14, 16, 18, 19, 19,
+ 18, 18, 17, 16, 14, 13, 12, 10, 9, 8, 8, 7, 7, 5, 5, 3, 2, 2, 4, 4, 5, 5, 5, 5, 7, 10, 12, 16, 17, 19, 19, 20,
+ 18, 18, 17, 16, 15, 13, 12, 10, 10, 9, 9, 9, 7, 6, 5, 4, 3, 3, 4, 4, 5, 5, 5, 6, 7, 11, 15, 17, 18, 19, 19, 20,
+ 19, 18, 18, 17, 16, 14, 13, 11, 10, 10, 9, 9, 8, 6, 5, 5, 4, 4, 4, 4, 6, 6, 6, 7, 9, 11, 15, 17, 19, 19, 20, 21,
+ 20, 19, 19, 19, 17, 16, 13, 12, 11, 11, 10, 9, 9, 7, 6, 5, 5, 4, 4, 5, 6, 7, 7, 8, 9, 12, 15, 18, 19, 19, 20, 20,
+ 21, 20, 20, 19, 19, 16, 16, 13, 12, 12, 11, 11, 9, 8, 7, 6, 6, 5, 5, 6, 7, 7, 8, 8, 10, 13, 17, 19, 19, 20, 20, 20,
+ 22, 21, 20, 20, 19, 17, 16, 14, 13, 13, 14, 12, 11, 9, 8, 7, 6, 5, 5, 6, 7, 7, 8, 9, 11, 15, 17, 19, 19, 20, 20, 20,
+ 22, 22, 21, 20, 19, 18, 16, 15, 14, 14, 15, 15, 13, 11, 9, 8, 7, 5, 5, 6, 7, 8, 9, 10, 13, 16, 18, 18, 19, 20, 19, 19,
+ 22, 22, 21, 20, 19, 19, 16, 16, 15, 15, 15, 15, 15, 13, 10, 9, 7, 5, 5, 6, 8, 8, 10, 11, 14, 16, 18, 18, 19, 19, 19, 19,
+ ]
+ g: [
+ 16, 16, 15, 14, 13, 11, 10, 9, 8, 7, 7, 7, 6, 6, 6, 6, 6, 7, 8, 8, 6, 6, 7, 7, 7, 9, 12, 13, 13, 14, 14, 14,
+ 16, 16, 15, 14, 13, 11, 10, 9, 8, 7, 7, 6, 6, 6, 6, 6, 6, 6, 7, 7, 6, 6, 7, 7, 6, 6, 10, 12, 13, 14, 14, 14,
+ 16, 15, 15, 13, 13, 11, 10, 9, 8, 7, 7, 6, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 8, 12, 14, 15, 15, 16,
+ 15, 15, 14, 13, 12, 11, 10, 10, 8, 7, 6, 6, 5, 4, 4, 4, 4, 5, 6, 6, 6, 6, 6, 5, 5, 5, 7, 11, 14, 15, 15, 17,
+ 16, 15, 14, 13, 12, 11, 10, 10, 9, 7, 6, 6, 4, 4, 4, 3, 3, 4, 4, 6, 6, 5, 5, 4, 4, 5, 6, 10, 14, 14, 16, 16,
+ 16, 15, 15, 13, 12, 11, 10, 10, 9, 7, 6, 6, 4, 4, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 9, 13, 14, 15, 16,
+ 16, 15, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 4, 5, 8, 13, 14, 15, 15,
+ 16, 15, 14, 12, 11, 10, 9, 8, 7, 6, 6, 5, 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 4, 5, 7, 11, 14, 15, 15,
+ 16, 15, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 6, 10, 14, 15, 14,
+ 16, 15, 14, 12, 11, 11, 9, 8, 7, 6, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 4, 6, 10, 15, 15, 15,
+ 15, 15, 13, 12, 11, 11, 10, 8, 7, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 6, 9, 13, 15, 15,
+ 15, 14, 13, 12, 11, 11, 10, 8, 7, 5, 5, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 4, 6, 9, 13, 14, 15,
+ 15, 14, 14, 13, 11, 11, 10, 8, 7, 5, 5, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 1, 2, 2, 2, 4, 5, 8, 13, 14, 15,
+ 15, 14, 14, 13, 11, 11, 11, 10, 7, 5, 4, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 1, 2, 2, 2, 4, 5, 8, 13, 14, 15,
+ 15, 14, 13, 12, 11, 11, 10, 9, 7, 4, 4, 3, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 5, 8, 13, 15, 16,
+ 15, 15, 13, 12, 11, 11, 10, 9, 7, 4, 4, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 6, 8, 15, 16, 16,
+ 15, 15, 14, 12, 11, 11, 10, 9, 7, 4, 4, 2, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 6, 11, 15, 16, 17,
+ 15, 15, 15, 12, 12, 11, 10, 10, 7, 4, 4, 2, 1, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 6, 11, 15, 17, 17,
+ 15, 15, 15, 12, 12, 12, 10, 9, 7, 5, 4, 2, 1, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 7, 11, 15, 17, 17,
+ 15, 15, 15, 13, 12, 12, 10, 9, 7, 5, 4, 3, 2, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 6, 8, 12, 15, 17, 17,
+ 15, 15, 15, 13, 13, 12, 10, 9, 7, 6, 5, 3, 2, 1, 0, 0, 1, 1, 1, 2, 3, 3, 3, 3, 4, 5, 6, 9, 13, 16, 17, 18,
+ 15, 15, 15, 14, 13, 13, 10, 9, 8, 6, 6, 5, 3, 2, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 10, 14, 17, 18, 18,
+ 15, 16, 16, 15, 13, 13, 11, 9, 8, 7, 6, 6, 5, 4, 2, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 12, 15, 17, 18, 18,
+ 16, 16, 16, 16, 13, 13, 11, 10, 9, 8, 7, 7, 6, 6, 4, 2, 2, 2, 2, 3, 5, 5, 5, 5, 6, 8, 11, 14, 16, 18, 18, 18,
+ 17, 17, 17, 16, 14, 13, 13, 11, 10, 9, 8, 8, 7, 6, 5, 4, 2, 2, 4, 5, 5, 5, 5, 5, 7, 9, 12, 15, 17, 18, 18, 18,
+ 18, 18, 17, 16, 15, 14, 13, 11, 10, 10, 9, 9, 7, 6, 5, 5, 4, 3, 4, 4, 5, 5, 5, 6, 7, 10, 15, 16, 18, 18, 18, 19,
+ 19, 18, 18, 17, 16, 14, 13, 12, 11, 10, 10, 9, 9, 7, 6, 5, 5, 4, 4, 4, 6, 6, 6, 6, 8, 10, 15, 16, 18, 18, 18, 19,
+ 20, 19, 19, 19, 17, 16, 14, 13, 12, 11, 11, 10, 9, 7, 7, 6, 5, 4, 4, 5, 6, 6, 6, 7, 9, 11, 15, 17, 18, 18, 18, 18,
+ 22, 20, 20, 20, 19, 17, 16, 14, 13, 13, 12, 11, 10, 9, 7, 6, 6, 5, 5, 6, 7, 7, 7, 8, 9, 12, 16, 18, 18, 19, 18, 18,
+ 22, 22, 21, 20, 19, 18, 17, 16, 14, 14, 15, 13, 11, 10, 9, 8, 7, 6, 5, 6, 7, 8, 8, 9, 10, 14, 17, 18, 18, 19, 18, 17,
+ 22, 22, 22, 21, 20, 19, 17, 17, 16, 16, 16, 16, 14, 12, 10, 8, 7, 6, 6, 7, 8, 8, 8, 10, 13, 16, 18, 18, 18, 18, 18, 17,
+ 22, 22, 22, 21, 20, 20, 18, 17, 16, 16, 17, 17, 16, 14, 11, 10, 8, 6, 6, 7, 8, 8, 10, 11, 14, 17, 18, 18, 18, 18, 18, 17,
+ ]
+ b: [
+ 13, 12, 12, 12, 11, 9, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 6, 7, 7, 6, 6, 5, 5, 5, 6, 9, 9, 9, 10, 9, 8,
+ 13, 13, 12, 11, 11, 9, 9, 8, 7, 7, 7, 6, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 5, 5, 4, 4, 7, 9, 9, 10, 10, 9,
+ 13, 13, 12, 11, 11, 9, 9, 8, 7, 7, 6, 6, 5, 4, 4, 4, 4, 5, 6, 6, 6, 5, 5, 5, 3, 3, 6, 9, 10, 11, 10, 11,
+ 13, 13, 12, 11, 11, 10, 9, 9, 7, 7, 6, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 3, 3, 5, 8, 10, 11, 11, 12,
+ 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 6, 6, 4, 4, 3, 3, 3, 4, 4, 5, 5, 5, 4, 3, 2, 3, 4, 8, 11, 11, 11, 12,
+ 13, 13, 13, 11, 11, 10, 9, 9, 8, 7, 6, 6, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 7, 11, 11, 11, 12,
+ 14, 14, 13, 11, 11, 10, 9, 8, 8, 7, 6, 6, 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 3, 6, 11, 11, 11, 11,
+ 14, 14, 13, 11, 11, 10, 9, 8, 7, 7, 6, 5, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 9, 11, 11, 11,
+ 14, 14, 13, 12, 11, 11, 9, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 8, 12, 12, 11,
+ 14, 13, 13, 12, 12, 11, 10, 8, 7, 6, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 8, 12, 12, 13,
+ 13, 13, 13, 12, 12, 12, 11, 9, 7, 6, 4, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 4, 8, 12, 12, 13,
+ 14, 13, 13, 12, 12, 11, 11, 9, 7, 6, 5, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 4, 8, 12, 13, 13,
+ 14, 13, 13, 13, 12, 11, 11, 9, 7, 6, 5, 4, 2, 1, 1, 1, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 4, 7, 12, 13, 13,
+ 14, 13, 13, 13, 12, 12, 12, 11, 7, 5, 5, 4, 2, 1, 1, 1, 1, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 7, 12, 13, 13,
+ 14, 14, 13, 13, 12, 12, 11, 11, 7, 5, 4, 3, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 3, 3, 3, 4, 4, 7, 12, 13, 14,
+ 14, 14, 13, 13, 12, 12, 11, 11, 8, 5, 4, 3, 1, 1, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 8, 13, 15, 15,
+ 14, 15, 14, 13, 13, 12, 11, 11, 8, 5, 4, 3, 1, 0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 10, 15, 15, 16,
+ 15, 15, 15, 14, 13, 13, 12, 11, 8, 5, 4, 3, 1, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 6, 11, 15, 16, 16,
+ 15, 15, 15, 14, 14, 14, 12, 11, 8, 6, 5, 3, 1, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7, 11, 15, 16, 16,
+ 15, 15, 15, 15, 14, 14, 12, 11, 9, 7, 5, 3, 2, 1, 0, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 5, 6, 8, 12, 15, 16, 16,
+ 15, 16, 15, 15, 15, 14, 13, 11, 9, 7, 6, 5, 3, 2, 1, 1, 1, 1, 2, 3, 3, 4, 4, 4, 5, 6, 7, 9, 12, 16, 16, 16,
+ 15, 16, 16, 15, 15, 15, 13, 11, 10, 8, 7, 6, 4, 3, 2, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 7, 8, 10, 14, 16, 16, 16,
+ 16, 16, 17, 16, 15, 15, 14, 12, 11, 9, 8, 8, 6, 5, 3, 2, 2, 2, 3, 3, 5, 5, 6, 6, 7, 8, 9, 12, 15, 16, 16, 16,
+ 16, 17, 18, 17, 16, 15, 14, 13, 11, 10, 9, 9, 8, 6, 5, 3, 3, 3, 3, 4, 6, 6, 6, 6, 7, 8, 11, 14, 16, 16, 16, 16,
+ 17, 18, 18, 18, 17, 16, 16, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 3, 5, 6, 6, 6, 6, 6, 8, 10, 12, 16, 17, 17, 17, 16,
+ 18, 18, 18, 18, 18, 17, 16, 14, 13, 12, 11, 11, 8, 8, 6, 6, 5, 4, 5, 5, 6, 6, 6, 7, 8, 11, 15, 16, 17, 17, 16, 16,
+ 18, 19, 19, 19, 19, 17, 17, 15, 14, 13, 12, 11, 11, 8, 7, 6, 6, 5, 5, 5, 7, 7, 7, 8, 9, 11, 15, 17, 17, 17, 16, 16,
+ 20, 20, 20, 20, 19, 19, 17, 17, 15, 14, 14, 12, 11, 9, 8, 7, 7, 6, 6, 6, 8, 8, 8, 8, 9, 12, 15, 18, 18, 16, 16, 16,
+ 22, 22, 22, 22, 21, 20, 19, 18, 17, 16, 15, 14, 12, 11, 10, 8, 8, 7, 7, 7, 8, 8, 8, 9, 10, 13, 17, 18, 18, 16, 16, 15,
+ 23, 22, 22, 22, 22, 21, 20, 20, 18, 18, 19, 16, 14, 13, 11, 10, 9, 8, 7, 7, 8, 9, 9, 10, 11, 15, 17, 18, 17, 17, 16, 14,
+ 23, 23, 23, 23, 23, 22, 21, 21, 20, 20, 20, 19, 18, 15, 12, 11, 10, 8, 8, 8, 9, 9, 10, 11, 13, 17, 17, 17, 17, 16, 15, 13,
+ 23, 23, 24, 24, 23, 23, 22, 21, 21, 21, 20, 20, 19, 17, 14, 12, 11, 9, 8, 9, 9, 10, 10, 12, 15, 17, 17, 17, 16, 16, 15, 13,
+ ]
+ - ct: 8500
+ r: [
+ 18, 17, 16, 15, 13, 12, 10, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 8, 8, 10, 13, 14, 15, 17, 18,
+ 17, 17, 16, 14, 12, 11, 10, 10, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 10, 13, 14, 15, 17, 17,
+ 17, 16, 15, 13, 12, 11, 10, 10, 8, 8, 7, 7, 7, 6, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 9, 12, 14, 15, 17, 17,
+ 16, 16, 15, 13, 12, 11, 10, 10, 9, 7, 7, 7, 6, 6, 5, 5, 6, 6, 7, 7, 7, 7, 7, 5, 5, 5, 8, 11, 14, 15, 17, 19,
+ 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 6, 6, 6, 5, 5, 5, 5, 7, 10, 13, 15, 17, 19,
+ 15, 15, 14, 13, 12, 11, 9, 9, 8, 7, 6, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 4, 4, 4, 4, 5, 6, 9, 13, 15, 16, 17,
+ 15, 15, 13, 12, 11, 11, 9, 8, 8, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 5, 8, 13, 15, 15, 16,
+ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 5, 7, 11, 14, 15, 15,
+ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 4, 4, 3, 3, 4, 3, 3, 3, 2, 3, 3, 3, 3, 4, 6, 10, 14, 15, 15,
+ 15, 13, 13, 11, 11, 10, 9, 8, 7, 6, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 4, 6, 10, 13, 16, 16,
+ 14, 13, 12, 11, 10, 10, 9, 7, 7, 5, 4, 3, 3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 4, 6, 9, 13, 16, 17,
+ 14, 13, 12, 11, 10, 10, 9, 7, 6, 5, 4, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 1, 2, 2, 3, 4, 6, 9, 13, 16, 17,
+ 14, 13, 12, 12, 10, 10, 9, 7, 5, 5, 4, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 1, 1, 2, 3, 4, 6, 9, 13, 15, 17,
+ 14, 13, 12, 11, 10, 9, 9, 7, 5, 5, 4, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 1, 1, 2, 3, 4, 6, 9, 12, 15, 16,
+ 13, 13, 12, 11, 10, 9, 8, 7, 5, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 3, 4, 6, 8, 12, 15, 16,
+ 13, 13, 12, 11, 11, 9, 8, 7, 6, 4, 3, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 3, 3, 4, 6, 9, 15, 16, 16,
+ 13, 13, 12, 12, 11, 10, 9, 7, 6, 4, 3, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 6, 10, 15, 17, 18,
+ 14, 13, 13, 12, 12, 11, 9, 7, 6, 4, 3, 2, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 7, 11, 15, 17, 18,
+ 14, 13, 13, 12, 12, 11, 9, 7, 7, 4, 3, 1, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 5, 7, 11, 15, 17, 18,
+ 15, 13, 13, 12, 12, 11, 8, 7, 6, 4, 3, 1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 7, 11, 15, 17, 18,
+ 15, 14, 13, 13, 12, 11, 8, 8, 7, 5, 4, 2, 1, 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 3, 5, 5, 7, 8, 11, 15, 17, 18,
+ 15, 14, 14, 13, 12, 11, 9, 8, 7, 6, 5, 3, 2, 1, 0, 0, 0, 1, 2, 2, 3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 18, 18,
+ 15, 14, 14, 13, 12, 11, 9, 9, 8, 7, 6, 5, 3, 3, 1, 0, 0, 1, 2, 2, 3, 4, 4, 5, 5, 6, 8, 11, 14, 17, 18, 18,
+ 16, 16, 15, 14, 13, 12, 10, 9, 8, 8, 7, 6, 5, 5, 3, 1, 1, 1, 2, 3, 4, 4, 5, 5, 6, 8, 10, 13, 15, 17, 18, 18,
+ 16, 16, 15, 14, 14, 12, 11, 10, 9, 9, 8, 7, 6, 5, 4, 3, 1, 1, 2, 4, 4, 5, 5, 5, 7, 9, 11, 14, 16, 18, 18, 19,
+ 16, 16, 15, 15, 14, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 3, 3, 4, 5, 5, 6, 9, 10, 13, 15, 18, 18, 19, 19,
+ 17, 17, 16, 15, 15, 14, 12, 11, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 3, 3, 5, 5, 6, 6, 9, 11, 13, 17, 18, 19, 19, 20,
+ 19, 18, 17, 17, 15, 15, 13, 12, 11, 11, 10, 10, 9, 8, 7, 5, 5, 4, 4, 5, 6, 6, 6, 7, 10, 12, 15, 18, 19, 19, 19, 20,
+ 19, 19, 18, 17, 17, 16, 14, 13, 12, 12, 11, 10, 9, 8, 7, 6, 6, 5, 5, 6, 6, 6, 7, 8, 11, 12, 16, 18, 19, 19, 19, 19,
+ 20, 19, 19, 18, 17, 16, 15, 14, 13, 13, 12, 12, 10, 9, 8, 7, 6, 5, 5, 6, 6, 7, 8, 9, 11, 14, 17, 18, 19, 19, 19, 19,
+ 20, 20, 19, 18, 18, 17, 15, 15, 14, 14, 14, 13, 12, 11, 9, 7, 6, 5, 5, 6, 7, 7, 8, 9, 12, 15, 17, 18, 18, 19, 18, 18,
+ 21, 20, 20, 19, 18, 18, 15, 15, 14, 14, 14, 14, 13, 13, 11, 9, 6, 5, 5, 6, 7, 7, 9, 10, 13, 15, 18, 18, 18, 18, 18, 18,
+ ]
+ g: [
+ 16, 16, 15, 13, 12, 10, 9, 8, 7, 7, 7, 6, 6, 6, 7, 7, 7, 6, 6, 6, 6, 6, 11, 11, 6, 6, 9, 12, 12, 13, 15, 15,
+ 16, 15, 14, 13, 11, 10, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 9, 12, 12, 13, 15, 15,
+ 15, 15, 14, 12, 11, 11, 9, 9, 8, 7, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 4, 5, 8, 11, 13, 14, 15, 15,
+ 15, 15, 14, 12, 11, 10, 9, 9, 8, 6, 6, 6, 5, 5, 4, 4, 4, 4, 6, 6, 6, 6, 6, 4, 4, 4, 7, 11, 13, 14, 15, 17,
+ 15, 15, 13, 12, 11, 10, 9, 9, 8, 6, 6, 5, 5, 4, 4, 3, 3, 4, 4, 5, 5, 5, 4, 4, 3, 4, 6, 9, 13, 14, 15, 17,
+ 15, 14, 13, 12, 11, 10, 9, 8, 8, 6, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 4, 5, 8, 13, 14, 14, 15,
+ 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 7, 12, 14, 14, 14,
+ 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 6, 11, 14, 14, 14,
+ 14, 13, 12, 11, 11, 10, 9, 8, 7, 6, 4, 4, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 5, 10, 14, 14, 14,
+ 15, 13, 12, 11, 11, 10, 9, 8, 7, 6, 4, 4, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 5, 10, 13, 15, 16,
+ 14, 13, 12, 11, 11, 10, 9, 7, 7, 5, 4, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 2, 2, 2, 2, 3, 6, 9, 13, 16, 16,
+ 14, 13, 12, 11, 10, 10, 9, 7, 5, 5, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 4, 6, 8, 13, 16, 16,
+ 14, 13, 13, 12, 10, 10, 9, 7, 5, 5, 4, 3, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 4, 5, 8, 13, 15, 16,
+ 14, 13, 13, 12, 10, 10, 9, 7, 5, 5, 4, 3, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 3, 5, 8, 12, 14, 15,
+ 14, 13, 12, 11, 10, 10, 9, 7, 6, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 5, 8, 12, 15, 15,
+ 14, 13, 12, 11, 11, 10, 9, 7, 6, 4, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 3, 4, 5, 8, 14, 16, 16,
+ 14, 13, 13, 12, 12, 10, 9, 7, 6, 4, 3, 2, 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 10, 15, 16, 17,
+ 14, 13, 13, 13, 12, 12, 9, 7, 7, 4, 3, 2, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 6, 11, 15, 17, 17,
+ 14, 14, 13, 12, 12, 12, 9, 8, 7, 5, 3, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 5, 7, 11, 15, 17, 17,
+ 15, 14, 13, 13, 12, 12, 9, 8, 7, 5, 3, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 7, 11, 15, 17, 17,
+ 16, 14, 14, 13, 13, 12, 9, 8, 7, 5, 4, 2, 1, 0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 3, 5, 5, 6, 8, 12, 16, 17, 17,
+ 16, 15, 14, 14, 13, 12, 10, 9, 7, 6, 5, 4, 2, 1, 0, 0, 0, 1, 2, 3, 3, 3, 3, 5, 5, 6, 8, 9, 13, 17, 17, 17,
+ 16, 15, 15, 14, 13, 12, 10, 10, 8, 7, 6, 5, 4, 3, 2, 0, 1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 8, 11, 14, 17, 17, 17,
+ 16, 16, 15, 15, 14, 13, 11, 10, 9, 8, 7, 6, 5, 5, 3, 2, 1, 1, 2, 3, 5, 5, 5, 5, 6, 7, 10, 13, 16, 17, 17, 17,
+ 17, 17, 15, 15, 14, 13, 12, 11, 10, 9, 9, 7, 6, 6, 5, 3, 2, 2, 3, 4, 5, 5, 5, 6, 6, 9, 11, 14, 16, 18, 18, 18,
+ 17, 17, 16, 15, 15, 14, 13, 12, 11, 10, 10, 9, 7, 7, 5, 4, 3, 2, 3, 4, 5, 5, 5, 6, 9, 10, 13, 15, 18, 18, 18, 18,
+ 18, 17, 17, 16, 15, 15, 14, 12, 11, 11, 11, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 5, 6, 6, 9, 11, 13, 17, 18, 18, 18, 18,
+ 20, 19, 18, 18, 16, 16, 14, 13, 12, 11, 11, 10, 9, 8, 7, 5, 5, 4, 4, 5, 6, 6, 6, 7, 10, 11, 15, 18, 18, 18, 18, 18,
+ 20, 20, 19, 18, 18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 6, 6, 5, 5, 6, 6, 7, 7, 8, 11, 12, 16, 18, 18, 18, 18, 18,
+ 22, 21, 20, 19, 18, 17, 17, 17, 15, 15, 14, 13, 11, 10, 8, 7, 6, 6, 6, 6, 7, 7, 8, 8, 11, 14, 17, 18, 18, 18, 18, 17,
+ 22, 22, 21, 20, 19, 18, 17, 17, 17, 16, 16, 15, 14, 12, 10, 8, 7, 6, 6, 7, 7, 8, 8, 10, 13, 16, 18, 18, 18, 18, 18, 16,
+ 22, 22, 22, 21, 20, 19, 18, 17, 17, 17, 16, 16, 15, 15, 12, 10, 7, 6, 6, 7, 8, 8, 9, 11, 14, 16, 18, 18, 18, 18, 17, 16,
+ ]
+ b: [
+ 13, 13, 13, 11, 10, 9, 9, 8, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 9, 4, 4, 7, 9, 9, 9, 10, 10,
+ 13, 13, 12, 11, 10, 9, 9, 8, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 7, 9, 9, 10, 10, 10,
+ 13, 13, 12, 11, 10, 10, 9, 9, 7, 7, 6, 6, 6, 5, 5, 5, 5, 6, 6, 6, 5, 5, 5, 4, 3, 3, 6, 9, 10, 11, 11, 11,
+ 13, 13, 12, 11, 10, 10, 9, 9, 8, 7, 6, 6, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 5, 3, 2, 3, 5, 9, 10, 11, 11, 13,
+ 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 6, 5, 5, 4, 4, 3, 3, 4, 4, 5, 5, 5, 3, 2, 2, 3, 5, 8, 11, 11, 12, 13,
+ 13, 12, 12, 11, 11, 10, 9, 8, 8, 7, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 7, 11, 11, 11, 11,
+ 13, 13, 12, 11, 11, 10, 9, 8, 8, 7, 5, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 3, 2, 2, 2, 2, 3, 6, 11, 11, 11, 11,
+ 13, 13, 12, 11, 11, 11, 9, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 10, 12, 12, 11,
+ 13, 13, 13, 11, 11, 11, 10, 8, 7, 6, 5, 4, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 4, 9, 12, 12, 12,
+ 14, 13, 13, 12, 11, 11, 10, 8, 7, 6, 4, 4, 3, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 4, 9, 12, 13, 14,
+ 13, 13, 12, 12, 11, 11, 10, 8, 7, 6, 4, 3, 2, 2, 2, 1, 2, 3, 3, 2, 2, 1, 2, 2, 2, 2, 2, 4, 8, 12, 14, 14,
+ 13, 13, 12, 12, 11, 11, 11, 8, 7, 6, 5, 3, 2, 2, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 4, 8, 12, 14, 14,
+ 13, 13, 12, 12, 12, 11, 11, 8, 7, 6, 5, 3, 2, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 8, 12, 14, 14,
+ 13, 13, 13, 12, 12, 11, 11, 8, 6, 6, 5, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 7, 12, 13, 14,
+ 13, 13, 13, 12, 12, 11, 10, 8, 6, 5, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 7, 12, 14, 14,
+ 14, 14, 13, 13, 13, 11, 10, 8, 7, 5, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 5, 8, 14, 16, 16,
+ 14, 14, 13, 13, 13, 12, 11, 9, 7, 5, 4, 2, 1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 6, 10, 15, 16, 16,
+ 15, 14, 14, 14, 15, 15, 11, 9, 8, 5, 4, 2, 1, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 7, 11, 15, 16, 17,
+ 15, 15, 14, 14, 15, 15, 12, 10, 9, 6, 4, 2, 1, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 6, 7, 11, 15, 16, 16,
+ 15, 15, 15, 15, 15, 15, 12, 10, 9, 6, 5, 2, 1, 0, 0, 0, 1, 1, 1, 3, 3, 3, 4, 4, 5, 6, 6, 7, 11, 15, 16, 17,
+ 16, 16, 15, 16, 15, 15, 12, 11, 10, 7, 5, 3, 2, 1, 0, 0, 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 9, 12, 16, 16, 16,
+ 16, 16, 16, 16, 16, 15, 13, 12, 10, 9, 6, 5, 3, 2, 1, 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 8, 9, 14, 16, 17, 16,
+ 16, 16, 16, 16, 16, 15, 14, 12, 11, 10, 8, 6, 5, 4, 2, 1, 1, 2, 3, 4, 5, 5, 6, 6, 6, 7, 9, 12, 15, 16, 16, 16,
+ 17, 17, 18, 17, 16, 16, 14, 13, 12, 11, 9, 8, 6, 5, 4, 2, 2, 2, 3, 4, 6, 6, 6, 6, 7, 8, 11, 14, 16, 17, 16, 16,
+ 17, 17, 18, 18, 17, 16, 16, 14, 13, 12, 11, 9, 8, 7, 5, 4, 2, 3, 4, 6, 6, 6, 6, 7, 8, 10, 12, 15, 17, 17, 17, 16,
+ 18, 18, 18, 18, 18, 17, 16, 15, 14, 13, 12, 11, 9, 8, 6, 5, 4, 4, 4, 5, 6, 6, 7, 7, 10, 11, 14, 16, 17, 17, 17, 17,
+ 18, 18, 19, 19, 19, 18, 17, 16, 15, 14, 14, 11, 10, 9, 7, 6, 6, 5, 5, 5, 6, 7, 7, 7, 10, 12, 14, 17, 17, 17, 17, 17,
+ 20, 20, 20, 20, 20, 19, 18, 17, 16, 15, 14, 13, 11, 10, 9, 7, 6, 6, 6, 6, 7, 7, 7, 8, 11, 12, 15, 18, 18, 17, 17, 16,
+ 22, 21, 21, 21, 21, 21, 20, 19, 17, 16, 16, 14, 13, 11, 10, 8, 7, 7, 7, 7, 8, 8, 8, 9, 11, 13, 17, 18, 18, 17, 16, 15,
+ 23, 22, 22, 22, 22, 21, 21, 20, 19, 19, 18, 16, 14, 13, 11, 9, 8, 8, 8, 8, 8, 8, 9, 10, 12, 15, 18, 18, 18, 17, 16, 14,
+ 23, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 18, 15, 13, 11, 9, 8, 8, 8, 9, 9, 10, 11, 13, 16, 18, 18, 17, 17, 15, 14,
+ 24, 24, 24, 24, 24, 23, 22, 22, 22, 22, 20, 20, 19, 18, 15, 13, 10, 9, 9, 9, 9, 10, 11, 12, 15, 17, 18, 18, 17, 16, 15, 13,
+ ]
+...
diff --git a/src/ipa/mali-c55/data/meson.build b/src/ipa/mali-c55/data/meson.build
new file mode 100644
index 00000000..8a5fdd36
--- /dev/null
+++ b/src/ipa/mali-c55/data/meson.build
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: CC0-1.0
+
+conf_files = files([
+ 'imx415.yaml',
+ 'uncalibrated.yaml'
+])
+
+install_data(conf_files,
+ install_dir : ipa_data_dir / 'mali-c55')
diff --git a/src/ipa/mali-c55/data/uncalibrated.yaml b/src/ipa/mali-c55/data/uncalibrated.yaml
new file mode 100644
index 00000000..6dcc0295
--- /dev/null
+++ b/src/ipa/mali-c55/data/uncalibrated.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: CC0-1.0
+%YAML 1.1
+---
+version: 1
+algorithms:
+ - Agc:
+...
diff --git a/src/ipa/mali-c55/ipa_context.cpp b/src/ipa/mali-c55/ipa_context.cpp
new file mode 100644
index 00000000..99f76ecd
--- /dev/null
+++ b/src/ipa/mali-c55/ipa_context.cpp
@@ -0,0 +1,101 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * ipa_context.cpp - MaliC55 IPA Context
+ */
+
+#include "ipa_context.h"
+
+/**
+ * \file ipa_context.h
+ * \brief Context and state information shared between the algorithms
+ */
+
+namespace libcamera::ipa::mali_c55 {
+
+/**
+ * \struct IPASessionConfiguration
+ * \brief Session configuration for the IPA module
+ *
+ * The session configuration contains all IPA configuration parameters that
+ * remain constant during the capture session, from IPA module start to stop.
+ * It is typically set during the configure() operation of the IPA module, but
+ * may also be updated in the start() operation.
+ */
+
+/**
+ * \struct IPAActiveState
+ * \brief Active state for algorithms
+ *
+ * The active state contains all algorithm-specific data that needs to be
+ * maintained by algorithms across frames. Unlike the session configuration,
+ * the active state is mutable and constantly updated by algorithms. The active
+ * state is accessible through the IPAContext structure.
+ *
+ * The active state stores two distinct categories of information:
+ *
+ * - The consolidated value of all algorithm controls. Requests passed to
+ * the queueRequest() function store values for controls that the
+ * application wants to modify for that particular frame, and the
+ * queueRequest() function updates the active state with those values.
+ * The active state thus contains a consolidated view of the value of all
+ * controls handled by the algorithm.
+ *
+ * - The value of parameters computed by the algorithm when running in auto
+ * mode. Algorithms running in auto mode compute new parameters every
+ * time statistics buffers are received (either synchronously, or
+ * possibly in a background thread). The latest computed value of those
+ * parameters is stored in the active state in the process() function.
+ *
+ * Each of the members in the active state belongs to a specific algorithm. A
+ * member may be read by any algorithm, but shall only be written by its owner.
+ */
+
+/**
+ * \struct IPAFrameContext
+ * \brief Per-frame context for algorithms
+ *
+ * The frame context stores two distinct categories of information:
+ *
+ * - The value of the controls to be applied to the frame. These values are
+ * typically set in the queueRequest() function, from the consolidated
+ * control values stored in the active state. The frame context thus stores
+ * values for all controls related to the algorithm, not limited to the
+ * controls specified in the corresponding request, but consolidated from all
+ * requests that have been queued so far.
+ *
+ * For controls that can be set manually or computed by an algorithm
+ * (depending on the algorithm operation mode), such as for instance the
+ * colour gains for the AWB algorithm, the control value will be stored in
+ * the frame context in the queueRequest() function only when operating in
+ * manual mode. When operating in auto mode, the values are computed by the
+ * algorithm in process(), stored in the active state, and copied to the
+ * frame context in prepare(), just before being stored in the ISP parameters
+ * buffer.
+ *
+ * The queueRequest() function can also store ancillary data in the frame
+ * context, such as flags to indicate if (and what) control values have
+ * changed compared to the previous request.
+ *
+ * - Status information computed by the algorithm for a frame. For instance,
+ * the colour temperature estimated by the AWB algorithm from ISP statistics
+ * calculated on a frame is stored in the frame context for that frame in
+ * the process() function.
+ */
+
+/**
+ * \struct IPAContext
+ * \brief Global IPA context data shared between all algorithms
+ *
+ * \var IPAContext::configuration
+ * \brief The IPA session configuration, immutable during the session
+ *
+ * \var IPAContext::activeState
+ * \brief The IPA active state, storing the latest state for all algorithms
+ *
+ * \var IPAContext::frameContexts
+ * \brief Ring buffer of per-frame contexts
+ */
+
+} /* namespace libcamera::ipa::mali_c55 */
diff --git a/src/ipa/mali-c55/ipa_context.h b/src/ipa/mali-c55/ipa_context.h
new file mode 100644
index 00000000..5e3e2fbd
--- /dev/null
+++ b/src/ipa/mali-c55/ipa_context.h
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * ipa_context.h - Mali-C55 IPA Context
+ */
+
+#pragma once
+
+#include <libcamera/base/utils.h>
+#include <libcamera/controls.h>
+
+#include "libcamera/internal/bayer_format.h"
+
+#include <libipa/fc_queue.h>
+
+namespace libcamera {
+
+namespace ipa::mali_c55 {
+
+struct IPASessionConfiguration {
+ struct {
+ utils::Duration minShutterSpeed;
+ utils::Duration maxShutterSpeed;
+ uint32_t defaultExposure;
+ double minAnalogueGain;
+ double maxAnalogueGain;
+ } agc;
+
+ struct {
+ BayerFormat::Order bayerOrder;
+ utils::Duration lineDuration;
+ uint32_t blackLevel;
+ } sensor;
+};
+
+struct IPAActiveState {
+ struct {
+ struct {
+ uint32_t exposure;
+ double sensorGain;
+ double ispGain;
+ } automatic;
+ struct {
+ uint32_t exposure;
+ double sensorGain;
+ double ispGain;
+ } manual;
+ bool autoEnabled;
+ uint32_t constraintMode;
+ uint32_t exposureMode;
+ uint32_t temperatureK;
+ } agc;
+
+ struct {
+ double rGain;
+ double bGain;
+ } awb;
+};
+
+struct IPAFrameContext : public FrameContext {
+ struct {
+ uint32_t exposure;
+ double sensorGain;
+ double ispGain;
+ } agc;
+
+ struct {
+ double rGain;
+ double bGain;
+ } awb;
+};
+
+struct IPAContext {
+ IPAContext(unsigned int frameContextSize)
+ : frameContexts(frameContextSize)
+ {
+ }
+
+ IPASessionConfiguration configuration;
+ IPAActiveState activeState;
+
+ FCQueue<IPAFrameContext> frameContexts;
+
+ ControlInfoMap::Map ctrlMap;
+};
+
+} /* namespace ipa::mali_c55 */
+
+} /* namespace libcamera*/
diff --git a/src/ipa/mali-c55/mali-c55.cpp b/src/ipa/mali-c55/mali-c55.cpp
new file mode 100644
index 00000000..c6941a95
--- /dev/null
+++ b/src/ipa/mali-c55/mali-c55.cpp
@@ -0,0 +1,399 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2023, Ideas on Board Oy
+ *
+ * mali-c55.cpp - Mali-C55 ISP image processing algorithms
+ */
+
+#include <map>
+#include <string.h>
+#include <vector>
+
+#include <linux/mali-c55-config.h>
+#include <linux/v4l2-controls.h>
+
+#include <libcamera/base/file.h>
+#include <libcamera/base/log.h>
+
+#include <libcamera/control_ids.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
+#include <libcamera/ipa/mali-c55_ipa_interface.h>
+
+#include "libcamera/internal/bayer_format.h"
+#include "libcamera/internal/mapped_framebuffer.h"
+#include "libcamera/internal/yaml_parser.h"
+
+#include "algorithms/algorithm.h"
+#include "libipa/camera_sensor_helper.h"
+
+#include "ipa_context.h"
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(IPAMaliC55)
+
+using namespace std::literals::chrono_literals;
+
+namespace ipa::mali_c55 {
+
+/* Maximum number of frame contexts to be held */
+static constexpr uint32_t kMaxFrameContexts = 16;
+
+class IPAMaliC55 : public IPAMaliC55Interface, public Module
+{
+public:
+ IPAMaliC55();
+
+ int init(const IPASettings &settings, const IPAConfigInfo &ipaConfig,
+ ControlInfoMap *ipaControls) override;
+ int start() override;
+ void stop() override;
+ int configure(const IPAConfigInfo &ipaConfig, uint8_t bayerOrder,
+ ControlInfoMap *ipaControls) override;
+ void mapBuffers(const std::vector<IPABuffer> &buffers, bool readOnly) override;
+ void unmapBuffers(const std::vector<IPABuffer> &buffers) override;
+ void queueRequest(const uint32_t request, const ControlList &controls) override;
+ void fillParams(unsigned int request, uint32_t bufferId) override;
+ void processStats(unsigned int request, unsigned int bufferId,
+ const ControlList &sensorControls) override;
+
+protected:
+ std::string logPrefix() const override;
+
+private:
+ void updateSessionConfiguration(const IPACameraSensorInfo &info,
+ const ControlInfoMap &sensorControls,
+ BayerFormat::Order bayerOrder);
+ void updateControls(const IPACameraSensorInfo &sensorInfo,
+ const ControlInfoMap &sensorControls,
+ ControlInfoMap *ipaControls);
+ void setControls();
+
+ std::map<unsigned int, MappedFrameBuffer> buffers_;
+
+ ControlInfoMap sensorControls_;
+
+ /* Interface to the Camera Helper */
+ std::unique_ptr<CameraSensorHelper> camHelper_;
+
+ /* Local parameter storage */
+ struct IPAContext context_;
+};
+
+namespace {
+
+} /* namespace */
+
+IPAMaliC55::IPAMaliC55()
+ : context_(kMaxFrameContexts)
+{
+}
+
+std::string IPAMaliC55::logPrefix() const
+{
+ return "mali-c55";
+}
+
+int IPAMaliC55::init(const IPASettings &settings, const IPAConfigInfo &ipaConfig,
+ ControlInfoMap *ipaControls)
+{
+ camHelper_ = CameraSensorHelperFactoryBase::create(settings.sensorModel);
+ if (!camHelper_) {
+ LOG(IPAMaliC55, Error)
+ << "Failed to create camera sensor helper for "
+ << settings.sensorModel;
+ return -ENODEV;
+ }
+
+ File file(settings.configurationFile);
+ if (!file.open(File::OpenModeFlag::ReadOnly)) {
+ int ret = file.error();
+ LOG(IPAMaliC55, Error)
+ << "Failed to open configuration file "
+ << settings.configurationFile << ": " << strerror(-ret);
+ return ret;
+ }
+
+ std::unique_ptr<libcamera::YamlObject> data = YamlParser::parse(file);
+ if (!data)
+ return -EINVAL;
+
+ if (!data->contains("algorithms")) {
+ LOG(IPAMaliC55, Error)
+ << "Tuning file doesn't contain any algorithm";
+ return -EINVAL;
+ }
+
+ int ret = createAlgorithms(context_, (*data)["algorithms"]);
+ if (ret)
+ return ret;
+
+ updateControls(ipaConfig.sensorInfo, ipaConfig.sensorControls, ipaControls);
+
+ return 0;
+}
+
+void IPAMaliC55::setControls()
+{
+ IPAActiveState &activeState = context_.activeState;
+ uint32_t exposure;
+ uint32_t gain;
+
+ if (activeState.agc.autoEnabled) {
+ exposure = activeState.agc.automatic.exposure;
+ gain = camHelper_->gainCode(activeState.agc.automatic.sensorGain);
+ } else {
+ exposure = activeState.agc.manual.exposure;
+ gain = camHelper_->gainCode(activeState.agc.manual.sensorGain);
+ }
+
+ ControlList ctrls(sensorControls_);
+ ctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));
+ ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));
+
+ setSensorControls.emit(ctrls);
+}
+
+int IPAMaliC55::start()
+{
+ return 0;
+}
+
+void IPAMaliC55::stop()
+{
+ context_.frameContexts.clear();
+}
+
+void IPAMaliC55::updateSessionConfiguration(const IPACameraSensorInfo &info,
+ const ControlInfoMap &sensorControls,
+ BayerFormat::Order bayerOrder)
+{
+ context_.configuration.sensor.bayerOrder = bayerOrder;
+
+ const ControlInfo &v4l2Exposure = sensorControls.find(V4L2_CID_EXPOSURE)->second;
+ int32_t minExposure = v4l2Exposure.min().get<int32_t>();
+ int32_t maxExposure = v4l2Exposure.max().get<int32_t>();
+ int32_t defExposure = v4l2Exposure.def().get<int32_t>();
+
+ const ControlInfo &v4l2Gain = sensorControls.find(V4L2_CID_ANALOGUE_GAIN)->second;
+ int32_t minGain = v4l2Gain.min().get<int32_t>();
+ int32_t maxGain = v4l2Gain.max().get<int32_t>();
+
+ /*
+ * When the AGC computes the new exposure values for a frame, it needs
+ * to know the limits for shutter speed and analogue gain.
+ * As it depends on the sensor, update it with the controls.
+ *
+ * \todo take VBLANK into account for maximum shutter speed
+ */
+ context_.configuration.sensor.lineDuration = info.minLineLength * 1.0s / info.pixelRate;
+ context_.configuration.agc.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.agc.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.agc.defaultExposure = defExposure;
+ context_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);
+ context_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);
+
+ if (camHelper_->blackLevel().has_value()) {
+ /*
+ * The black level from CameraSensorHelper is a 16-bit value.
+ * The Mali-C55 ISP expects 20-bit settings, so we shift it to
+ * the appropriate width
+ */
+ context_.configuration.sensor.blackLevel =
+ camHelper_->blackLevel().value() << 4;
+ }
+}
+
+void IPAMaliC55::updateControls(const IPACameraSensorInfo &sensorInfo,
+ const ControlInfoMap &sensorControls,
+ ControlInfoMap *ipaControls)
+{
+ ControlInfoMap::Map ctrlMap;
+
+ /*
+ * Compute the frame duration limits.
+ *
+ * The frame length is computed assuming a fixed line length combined
+ * with the vertical frame sizes.
+ */
+ const ControlInfo &v4l2HBlank = sensorControls.find(V4L2_CID_HBLANK)->second;
+ uint32_t hblank = v4l2HBlank.def().get<int32_t>();
+ uint32_t lineLength = sensorInfo.outputSize.width + hblank;
+
+ const ControlInfo &v4l2VBlank = sensorControls.find(V4L2_CID_VBLANK)->second;
+ std::array<uint32_t, 3> frameHeights{
+ v4l2VBlank.min().get<int32_t>() + sensorInfo.outputSize.height,
+ v4l2VBlank.max().get<int32_t>() + sensorInfo.outputSize.height,
+ v4l2VBlank.def().get<int32_t>() + sensorInfo.outputSize.height,
+ };
+
+ std::array<int64_t, 3> frameDurations;
+ for (unsigned int i = 0; i < frameHeights.size(); ++i) {
+ uint64_t frameSize = lineLength * frameHeights[i];
+ frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
+ }
+
+ ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
+ frameDurations[1],
+ frameDurations[2]);
+
+ /*
+ * Compute exposure time limits from the V4L2_CID_EXPOSURE control
+ * limits and the line duration.
+ */
+ double lineDuration = sensorInfo.minLineLength / sensorInfo.pixelRate;
+
+ const ControlInfo &v4l2Exposure = sensorControls.find(V4L2_CID_EXPOSURE)->second;
+ int32_t minExposure = v4l2Exposure.min().get<int32_t>() * lineDuration;
+ int32_t maxExposure = v4l2Exposure.max().get<int32_t>() * lineDuration;
+ int32_t defExposure = v4l2Exposure.def().get<int32_t>() * lineDuration;
+ ctrlMap[&controls::ExposureTime] = ControlInfo(minExposure, maxExposure, defExposure);
+
+ /* Compute the analogue gain limits. */
+ const ControlInfo &v4l2Gain = sensorControls.find(V4L2_CID_ANALOGUE_GAIN)->second;
+ float minGain = camHelper_->gain(v4l2Gain.min().get<int32_t>());
+ float maxGain = camHelper_->gain(v4l2Gain.max().get<int32_t>());
+ float defGain = camHelper_->gain(v4l2Gain.def().get<int32_t>());
+ ctrlMap[&controls::AnalogueGain] = ControlInfo(minGain, maxGain, defGain);
+
+ /*
+ * Merge in any controls that we support either statically or from the
+ * algorithms.
+ */
+ ctrlMap.merge(context_.ctrlMap);
+
+ *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
+}
+
+int IPAMaliC55::configure(const IPAConfigInfo &ipaConfig, uint8_t bayerOrder,
+ ControlInfoMap *ipaControls)
+{
+ sensorControls_ = ipaConfig.sensorControls;
+
+ /* Clear the IPA context before the streaming session. */
+ context_.configuration = {};
+ context_.activeState = {};
+ context_.frameContexts.clear();
+
+ const IPACameraSensorInfo &info = ipaConfig.sensorInfo;
+
+ updateSessionConfiguration(info, ipaConfig.sensorControls,
+ static_cast<BayerFormat::Order>(bayerOrder));
+ updateControls(info, ipaConfig.sensorControls, ipaControls);
+
+ for (auto const &a : algorithms()) {
+ Algorithm *algo = static_cast<Algorithm *>(a.get());
+
+ int ret = algo->configure(context_, info);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+void IPAMaliC55::mapBuffers(const std::vector<IPABuffer> &buffers, bool readOnly)
+{
+ for (const IPABuffer &buffer : buffers) {
+ const FrameBuffer fb(buffer.planes);
+ buffers_.emplace(
+ buffer.id,
+ MappedFrameBuffer(
+ &fb,
+ readOnly ? MappedFrameBuffer::MapFlag::Read
+ : MappedFrameBuffer::MapFlag::ReadWrite));
+ }
+}
+
+void IPAMaliC55::unmapBuffers(const std::vector<IPABuffer> &buffers)
+{
+ for (const IPABuffer &buffer : buffers) {
+ auto it = buffers_.find(buffer.id);
+ if (it == buffers_.end())
+ continue;
+
+ buffers_.erase(buffer.id);
+ }
+}
+
+void IPAMaliC55::queueRequest(const uint32_t request, const ControlList &controls)
+{
+ IPAFrameContext &frameContext = context_.frameContexts.alloc(request);
+
+ for (auto const &a : algorithms()) {
+ Algorithm *algo = static_cast<Algorithm *>(a.get());
+
+ algo->queueRequest(context_, request, frameContext, controls);
+ }
+}
+
+void IPAMaliC55::fillParams(unsigned int request,
+ [[maybe_unused]] uint32_t bufferId)
+{
+ struct mali_c55_params_buffer *params;
+ IPAFrameContext &frameContext = context_.frameContexts.get(request);
+
+ params = reinterpret_cast<mali_c55_params_buffer *>(
+ buffers_.at(bufferId).planes()[0].data());
+ memset(params, 0, sizeof(mali_c55_params_buffer));
+
+ params->version = MALI_C55_PARAM_BUFFER_V1;
+
+ for (auto const &algo : algorithms()) {
+ algo->prepare(context_, request, frameContext, params);
+
+ ASSERT(params->total_size <= MALI_C55_PARAMS_MAX_SIZE);
+ }
+
+ paramsComputed.emit(request);
+}
+
+void IPAMaliC55::processStats(unsigned int request, unsigned int bufferId,
+ const ControlList &sensorControls)
+{
+ IPAFrameContext &frameContext = context_.frameContexts.get(request);
+ const mali_c55_stats_buffer *stats = nullptr;
+
+ stats = reinterpret_cast<mali_c55_stats_buffer *>(
+ buffers_.at(bufferId).planes()[0].data());
+
+ frameContext.agc.exposure =
+ sensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();
+ frameContext.agc.sensorGain =
+ camHelper_->gain(sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>());
+
+ ControlList metadata(controls::controls);
+
+ for (auto const &a : algorithms()) {
+ Algorithm *algo = static_cast<Algorithm *>(a.get());
+
+ algo->process(context_, request, frameContext, stats, metadata);
+ }
+
+ setControls();
+
+ statsProcessed.emit(request, metadata);
+}
+
+} /* namespace ipa::mali_c55 */
+
+/*
+ * External IPA module interface
+ */
+extern "C" {
+const struct IPAModuleInfo ipaModuleInfo = {
+ IPA_MODULE_API_VERSION,
+ 1,
+ "mali-c55",
+ "mali-c55",
+};
+
+IPAInterface *ipaCreate()
+{
+ return new ipa::mali_c55::IPAMaliC55();
+}
+
+} /* extern "C" */
+
+} /* namespace libcamera */
diff --git a/src/ipa/mali-c55/meson.build b/src/ipa/mali-c55/meson.build
new file mode 100644
index 00000000..864d90ec
--- /dev/null
+++ b/src/ipa/mali-c55/meson.build
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: CC0-1.0
+
+subdir('algorithms')
+subdir('data')
+
+ipa_name = 'ipa_mali_c55'
+
+mali_c55_ipa_sources = files([
+ 'ipa_context.cpp',
+ 'mali-c55.cpp'
+])
+
+mali_c55_ipa_sources += mali_c55_ipa_algorithms
+
+mod = shared_module(ipa_name,
+ mali_c55_ipa_sources,
+ name_prefix : '',
+ include_directories : [ipa_includes, libipa_includes],
+ dependencies : libcamera_private,
+ link_with : libipa,
+ install : true,
+ install_dir : ipa_install_dir)
+
+if ipa_sign_module
+ custom_target(ipa_name + '.so.sign',
+ input : mod,
+ output : ipa_name + '.so.sign',
+ command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
+ install : false,
+ build_by_default : true)
+endif
+
+ipa_names += ipa_name
diff --git a/src/ipa/mali-c55/module.h b/src/ipa/mali-c55/module.h
new file mode 100644
index 00000000..1d85ec1f
--- /dev/null
+++ b/src/ipa/mali-c55/module.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * module.h - Mali-C55 IPA Module
+ */
+
+#pragma once
+
+#include <linux/mali-c55-config.h>
+
+#include <libcamera/ipa/mali-c55_ipa_interface.h>
+
+#include <libipa/module.h>
+
+#include "ipa_context.h"
+
+namespace libcamera {
+
+namespace ipa::mali_c55 {
+
+using Module = ipa::Module<IPAContext, IPAFrameContext, IPACameraSensorInfo,
+ mali_c55_params_buffer, mali_c55_stats_buffer>;
+
+} /* namespace ipa::mali_c55 */
+
+} /* namespace libcamera*/
diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index f12f8b60..b3ac9400 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -148,7 +148,16 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)
if (ret)
return ret;
- context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true);
+ context.ctrlMap[&controls::ExposureTimeMode] =
+ ControlInfo({ { ControlValue(controls::ExposureTimeModeAuto),
+ ControlValue(controls::ExposureTimeModeManual) } },
+ ControlValue(controls::ExposureTimeModeAuto));
+ context.ctrlMap[&controls::AnalogueGainMode] =
+ ControlInfo({ { ControlValue(controls::AnalogueGainModeAuto),
+ ControlValue(controls::AnalogueGainModeManual) } },
+ ControlValue(controls::AnalogueGainModeAuto));
+ /* \todo Move this to the Camera class */
+ context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true, true);
context.ctrlMap.merge(controls());
return 0;
@@ -169,7 +178,8 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
10ms / context.configuration.sensor.lineDuration;
context.activeState.agc.manual.gain = context.activeState.agc.automatic.gain;
context.activeState.agc.manual.exposure = context.activeState.agc.automatic.exposure;
- context.activeState.agc.autoEnabled = !context.configuration.raw;
+ context.activeState.agc.autoExposureEnabled = !context.configuration.raw;
+ context.activeState.agc.autoGainEnabled = !context.configuration.raw;
context.activeState.agc.constraintMode =
static_cast<controls::AeConstraintModeEnum>(constraintModes().begin()->first);
@@ -178,24 +188,18 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
context.activeState.agc.meteringMode =
static_cast<controls::AeMeteringModeEnum>(meteringModes_.begin()->first);
- /*
- * \todo This should probably come from FrameDurationLimits instead,
- * except it's computed in the IPA and not here so we'd have to
- * recompute it.
- */
- context.activeState.agc.maxFrameDuration = context.configuration.sensor.maxShutterSpeed;
+ /* Limit the frame duration to match current initialisation */
+ ControlInfo &frameDurationLimits = context.ctrlMap[&controls::FrameDurationLimits];
+ context.activeState.agc.minFrameDuration = std::chrono::microseconds(frameDurationLimits.min().get<int64_t>());
+ context.activeState.agc.maxFrameDuration = std::chrono::microseconds(frameDurationLimits.max().get<int64_t>());
- /*
- * Define the measurement window for AGC as a centered rectangle
- * covering 3/4 of the image width and height.
- */
- context.configuration.agc.measureWindow.h_offs = configInfo.outputSize.width / 8;
- context.configuration.agc.measureWindow.v_offs = configInfo.outputSize.height / 8;
- context.configuration.agc.measureWindow.h_size = 3 * configInfo.outputSize.width / 4;
- context.configuration.agc.measureWindow.v_size = 3 * configInfo.outputSize.height / 4;
+ context.configuration.agc.measureWindow.h_offs = 0;
+ context.configuration.agc.measureWindow.v_offs = 0;
+ context.configuration.agc.measureWindow.h_size = configInfo.outputSize.width;
+ context.configuration.agc.measureWindow.v_size = configInfo.outputSize.height;
- setLimits(context.configuration.sensor.minShutterSpeed,
- context.configuration.sensor.maxShutterSpeed,
+ setLimits(context.configuration.sensor.minExposureTime,
+ context.configuration.sensor.maxExposureTime,
context.configuration.sensor.minAnalogueGain,
context.configuration.sensor.maxAnalogueGain);
@@ -215,18 +219,47 @@ void Agc::queueRequest(IPAContext &context,
auto &agc = context.activeState.agc;
if (!context.configuration.raw) {
- const auto &agcEnable = controls.get(controls::AeEnable);
- if (agcEnable && *agcEnable != agc.autoEnabled) {
- agc.autoEnabled = *agcEnable;
+ const auto &aeEnable = controls.get(controls::ExposureTimeMode);
+ if (aeEnable &&
+ (*aeEnable == controls::ExposureTimeModeAuto) != agc.autoExposureEnabled) {
+ agc.autoExposureEnabled = (*aeEnable == controls::ExposureTimeModeAuto);
LOG(RkISP1Agc, Debug)
- << (agc.autoEnabled ? "Enabling" : "Disabling")
- << " AGC";
+ << (agc.autoExposureEnabled ? "Enabling" : "Disabling")
+ << " AGC (exposure)";
+
+ /*
+ * If we go from auto -> manual with no manual control
+ * set, use the last computed value, which we don't
+ * know until prepare() so save this information.
+ *
+ * \todo Check the previous frame at prepare() time
+ * instead of saving a flag here
+ */
+ if (!agc.autoExposureEnabled && !controls.get(controls::ExposureTime))
+ frameContext.agc.autoExposureModeChange = true;
+ }
+
+ const auto &agEnable = controls.get(controls::AnalogueGainMode);
+ if (agEnable &&
+ (*agEnable == controls::AnalogueGainModeAuto) != agc.autoGainEnabled) {
+ agc.autoGainEnabled = (*agEnable == controls::AnalogueGainModeAuto);
+
+ LOG(RkISP1Agc, Debug)
+ << (agc.autoGainEnabled ? "Enabling" : "Disabling")
+ << " AGC (gain)";
+ /*
+ * If we go from auto -> manual with no manual control
+ * set, use the last computed value, which we don't
+ * know until prepare() so save this information.
+ */
+ if (!agc.autoGainEnabled && !controls.get(controls::AnalogueGain))
+ frameContext.agc.autoGainModeChange = true;
}
}
const auto &exposure = controls.get(controls::ExposureTime);
- if (exposure && !agc.autoEnabled) {
+ if (exposure && !agc.autoExposureEnabled) {
agc.manual.exposure = *exposure * 1.0us
/ context.configuration.sensor.lineDuration;
@@ -235,18 +268,19 @@ void Agc::queueRequest(IPAContext &context,
}
const auto &gain = controls.get(controls::AnalogueGain);
- if (gain && !agc.autoEnabled) {
+ if (gain && !agc.autoGainEnabled) {
agc.manual.gain = *gain;
LOG(RkISP1Agc, Debug) << "Set gain to " << agc.manual.gain;
}
- frameContext.agc.autoEnabled = agc.autoEnabled;
+ frameContext.agc.autoExposureEnabled = agc.autoExposureEnabled;
+ frameContext.agc.autoGainEnabled = agc.autoGainEnabled;
- if (!frameContext.agc.autoEnabled) {
+ if (!frameContext.agc.autoExposureEnabled)
frameContext.agc.exposure = agc.manual.exposure;
+ if (!frameContext.agc.autoGainEnabled)
frameContext.agc.gain = agc.manual.gain;
- }
const auto &meteringMode = controls.get(controls::AeMeteringMode);
if (meteringMode) {
@@ -270,10 +304,21 @@ void Agc::queueRequest(IPAContext &context,
const auto &frameDurationLimits = controls.get(controls::FrameDurationLimits);
if (frameDurationLimits) {
- utils::Duration maxFrameDuration =
- std::chrono::milliseconds((*frameDurationLimits).back());
- agc.maxFrameDuration = maxFrameDuration;
+ /* Limit the control value to the limits in ControlInfo */
+ ControlInfo &limits = context.ctrlMap[&controls::FrameDurationLimits];
+ int64_t minFrameDuration =
+ std::clamp((*frameDurationLimits).front(),
+ limits.min().get<int64_t>(),
+ limits.max().get<int64_t>());
+ int64_t maxFrameDuration =
+ std::clamp((*frameDurationLimits).back(),
+ limits.min().get<int64_t>(),
+ limits.max().get<int64_t>());
+
+ agc.minFrameDuration = std::chrono::microseconds(minFrameDuration);
+ agc.maxFrameDuration = std::chrono::microseconds(maxFrameDuration);
}
+ frameContext.agc.minFrameDuration = agc.minFrameDuration;
frameContext.agc.maxFrameDuration = agc.maxFrameDuration;
}
@@ -281,51 +326,66 @@ void Agc::queueRequest(IPAContext &context,
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void Agc::prepare(IPAContext &context, const uint32_t frame,
- IPAFrameContext &frameContext, rkisp1_params_cfg *params)
+ IPAFrameContext &frameContext, RkISP1Params *params)
{
- if (frameContext.agc.autoEnabled) {
- frameContext.agc.exposure = context.activeState.agc.automatic.exposure;
- frameContext.agc.gain = context.activeState.agc.automatic.gain;
+ uint32_t activeAutoExposure = context.activeState.agc.automatic.exposure;
+ double activeAutoGain = context.activeState.agc.automatic.gain;
+
+ /* Populate exposure and gain in auto mode */
+ if (frameContext.agc.autoExposureEnabled)
+ frameContext.agc.exposure = activeAutoExposure;
+ if (frameContext.agc.autoGainEnabled)
+ frameContext.agc.gain = activeAutoGain;
+
+ /*
+ * Populate manual exposure and gain from the active auto values when
+ * transitioning from auto to manual
+ */
+ if (!frameContext.agc.autoExposureEnabled && frameContext.agc.autoExposureModeChange) {
+ context.activeState.agc.manual.exposure = activeAutoExposure;
+ frameContext.agc.exposure = activeAutoExposure;
+ }
+ if (!frameContext.agc.autoGainEnabled && frameContext.agc.autoGainModeChange) {
+ context.activeState.agc.manual.gain = activeAutoGain;
+ frameContext.agc.gain = activeAutoGain;
}
if (frame > 0 && !frameContext.agc.updateMetering)
return;
- /* Configure the measurement window. */
- params->meas.aec_config.meas_window = context.configuration.agc.measureWindow;
- /* Use a continuous method for measure. */
- params->meas.aec_config.autostop = RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP_0;
- /* Estimate Y as (R + G + B) x (85/256). */
- params->meas.aec_config.mode = RKISP1_CIF_ISP_EXP_MEASURING_MODE_1;
+ /*
+ * Configure the AEC measurements. Set the window, measure
+ * continuously, and estimate Y as (R + G + B) x (85/256).
+ */
+ auto aecConfig = params->block<BlockType::Aec>();
+ aecConfig.setEnabled(true);
+
+ aecConfig->meas_window = context.configuration.agc.measureWindow;
+ aecConfig->autostop = RKISP1_CIF_ISP_EXP_CTRL_AUTOSTOP_0;
+ aecConfig->mode = RKISP1_CIF_ISP_EXP_MEASURING_MODE_1;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AEC;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_AEC;
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_AEC;
+ /*
+ * Configure the histogram measurement. Set the window, produce a
+ * luminance histogram, and set the weights and predivider.
+ */
+ auto hstConfig = params->block<BlockType::Hst>();
+ hstConfig.setEnabled(true);
- /* Configure histogram. */
- params->meas.hst_config.meas_window = context.configuration.agc.measureWindow;
- /* Produce the luminance histogram. */
- params->meas.hst_config.mode = RKISP1_CIF_ISP_HISTOGRAM_MODE_Y_HISTOGRAM;
+ hstConfig->meas_window = context.configuration.agc.measureWindow;
+ hstConfig->mode = RKISP1_CIF_ISP_HISTOGRAM_MODE_Y_HISTOGRAM;
- /* Set an average weighted histogram. */
Span<uint8_t> weights{
- params->meas.hst_config.hist_weight,
+ hstConfig->hist_weight,
context.hw->numHistogramWeights
};
std::vector<uint8_t> &modeWeights = meteringModes_.at(frameContext.agc.meteringMode);
std::copy(modeWeights.begin(), modeWeights.end(), weights.begin());
- struct rkisp1_cif_isp_window window = params->meas.hst_config.meas_window;
+ struct rkisp1_cif_isp_window window = hstConfig->meas_window;
Size windowSize = { window.h_size, window.v_size };
- params->meas.hst_config.histogram_predivider =
+ hstConfig->histogram_predivider =
computeHistogramPredivider(windowSize,
- static_cast<rkisp1_cif_isp_histogram_mode>(params->meas.hst_config.mode));
-
- /* Update the configuration for histogram. */
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_HST;
- /* Enable the histogram measure unit. */
- params->module_ens |= RKISP1_CIF_ISP_MODULE_HST;
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_HST;
+ static_cast<rkisp1_cif_isp_histogram_mode>(hstConfig->mode));
}
void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,
@@ -335,14 +395,15 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,
* frameContext.sensor.exposure;
metadata.set(controls::AnalogueGain, frameContext.sensor.gain);
metadata.set(controls::ExposureTime, exposureTime.get<std::micro>());
- metadata.set(controls::AeEnable, frameContext.agc.autoEnabled);
-
- /* \todo Use VBlank value calculated from each frame exposure. */
- uint32_t vTotal = context.configuration.sensor.size.height
- + context.configuration.sensor.defVBlank;
- utils::Duration frameDuration = context.configuration.sensor.lineDuration
- * vTotal;
- metadata.set(controls::FrameDuration, frameDuration.get<std::micro>());
+ metadata.set(controls::FrameDuration, frameContext.agc.frameDuration.get<std::micro>());
+ metadata.set(controls::ExposureTimeMode,
+ frameContext.agc.autoExposureEnabled
+ ? controls::ExposureTimeModeAuto
+ : controls::ExposureTimeModeManual);
+ metadata.set(controls::AnalogueGainMode,
+ frameContext.agc.autoGainEnabled
+ ? controls::AnalogueGainModeAuto
+ : controls::AnalogueGainModeManual);
metadata.set(controls::AeMeteringMode, frameContext.agc.meteringMode);
metadata.set(controls::AeExposureMode, frameContext.agc.exposureMode);
@@ -374,15 +435,41 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,
*/
double Agc::estimateLuminance(double gain) const
{
+ ASSERT(expMeans_.size() == weights_.size());
double ySum = 0.0;
+ double wSum = 0.0;
/* Sum the averages, saturated to 255. */
- for (uint8_t expMean : expMeans_)
- ySum += std::min(expMean * gain, 255.0);
+ for (unsigned i = 0; i < expMeans_.size(); i++) {
+ double w = weights_[i];
+ ySum += std::min(expMeans_[i] * gain, 255.0) * w;
+ wSum += w;
+ }
/* \todo Weight with the AWB gains */
- return ySum / expMeans_.size() / 255;
+ return ySum / wSum / 255;
+}
+
+/**
+ * \brief Process frame duration and compute vblank
+ * \param[in] context The shared IPA context
+ * \param[in] frameContext The current frame context
+ * \param[in] frameDuration The target frame duration
+ *
+ * Compute and populate vblank from the target frame duration.
+ */
+void Agc::processFrameDuration(IPAContext &context,
+ IPAFrameContext &frameContext,
+ utils::Duration frameDuration)
+{
+ IPACameraSensorInfo &sensorInfo = context.sensorInfo;
+ utils::Duration lineDuration = context.configuration.sensor.lineDuration;
+
+ frameContext.agc.vblank = (frameDuration / lineDuration) - sensorInfo.outputSize.height;
+
+ /* Update frame duration accounting for line length quantization. */
+ frameContext.agc.frameDuration = (sensorInfo.outputSize.height + frameContext.agc.vblank) * lineDuration;
}
/**
@@ -401,10 +488,20 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
ControlList &metadata)
{
if (!stats) {
+ processFrameDuration(context, frameContext,
+ frameContext.agc.minFrameDuration);
fillMetadata(context, frameContext, metadata);
return;
}
+ if (!(stats->meas_type & RKISP1_CIF_ISP_STAT_AUTOEXP)) {
+ fillMetadata(context, frameContext, metadata);
+ LOG(RkISP1Agc, Error) << "AUTOEXP data is missing in statistics";
+ return;
+ }
+
+ const utils::Duration &lineDuration = context.configuration.sensor.lineDuration;
+
/*
* \todo Verify that the exposure and gain applied by the sensor for
* this frame match what has been requested. This isn't a hard
@@ -414,47 +511,75 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
*/
const rkisp1_cif_isp_stat *params = &stats->params;
- ASSERT(stats->meas_type & RKISP1_CIF_ISP_STAT_AUTOEXP);
/* The lower 4 bits are fractional and meant to be discarded. */
Histogram hist({ params->hist.hist_bins, context.hw->numHistogramBins },
[](uint32_t x) { return x >> 4; });
expMeans_ = { params->ae.exp_mean, context.hw->numAeCells };
+ std::vector<uint8_t> &modeWeights = meteringModes_.at(frameContext.agc.meteringMode);
+ weights_ = { modeWeights.data(), modeWeights.size() };
- utils::Duration maxShutterSpeed =
- std::clamp(frameContext.agc.maxFrameDuration,
- context.configuration.sensor.minShutterSpeed,
- context.configuration.sensor.maxShutterSpeed);
- setLimits(context.configuration.sensor.minShutterSpeed,
- maxShutterSpeed,
- context.configuration.sensor.minAnalogueGain,
- context.configuration.sensor.maxAnalogueGain);
+ /*
+ * Set the AGC limits using the fixed exposure time and/or gain in
+ * manual mode, or the sensor limits in auto mode.
+ */
+ utils::Duration minExposureTime;
+ utils::Duration maxExposureTime;
+ double minAnalogueGain;
+ double maxAnalogueGain;
+
+ if (frameContext.agc.autoExposureEnabled) {
+ minExposureTime = context.configuration.sensor.minExposureTime;
+ maxExposureTime = std::clamp(frameContext.agc.maxFrameDuration,
+ context.configuration.sensor.minExposureTime,
+ context.configuration.sensor.maxExposureTime);
+ } else {
+ minExposureTime = context.configuration.sensor.lineDuration
+ * frameContext.agc.exposure;
+ maxExposureTime = minExposureTime;
+ }
+
+ if (frameContext.agc.autoGainEnabled) {
+ minAnalogueGain = context.configuration.sensor.minAnalogueGain;
+ maxAnalogueGain = context.configuration.sensor.maxAnalogueGain;
+ } else {
+ minAnalogueGain = frameContext.agc.gain;
+ maxAnalogueGain = frameContext.agc.gain;
+ }
+
+ setLimits(minExposureTime, maxExposureTime, minAnalogueGain, maxAnalogueGain);
/*
* The Agc algorithm needs to know the effective exposure value that was
* applied to the sensor when the statistics were collected.
*/
- utils::Duration exposureTime = context.configuration.sensor.lineDuration
- * frameContext.sensor.exposure;
+ utils::Duration exposureTime = lineDuration * frameContext.sensor.exposure;
double analogueGain = frameContext.sensor.gain;
utils::Duration effectiveExposureValue = exposureTime * analogueGain;
- utils::Duration shutterTime;
+ utils::Duration newExposureTime;
double aGain, dGain;
- std::tie(shutterTime, aGain, dGain) =
+ std::tie(newExposureTime, aGain, dGain) =
calculateNewEv(frameContext.agc.constraintMode,
frameContext.agc.exposureMode,
hist, effectiveExposureValue);
LOG(RkISP1Agc, Debug)
- << "Divided up shutter, analogue gain and digital gain are "
- << shutterTime << ", " << aGain << " and " << dGain;
+ << "Divided up exposure time, analogue gain and digital gain are "
+ << newExposureTime << ", " << aGain << " and " << dGain;
IPAActiveState &activeState = context.activeState;
/* Update the estimated exposure and gain. */
- activeState.agc.automatic.exposure = shutterTime / context.configuration.sensor.lineDuration;
+ activeState.agc.automatic.exposure = newExposureTime / lineDuration;
activeState.agc.automatic.gain = aGain;
+ /*
+ * Expand the target frame duration so that we do not run faster than
+ * the minimum frame duration when we have short exposures.
+ */
+ processFrameDuration(context, frameContext,
+ std::max(frameContext.agc.minFrameDuration, newExposureTime));
+
fillMetadata(context, frameContext, metadata);
expMeans_ = {};
}
diff --git a/src/ipa/rkisp1/algorithms/agc.h b/src/ipa/rkisp1/algorithms/agc.h
index 9ceaa82b..7867eed9 100644
--- a/src/ipa/rkisp1/algorithms/agc.h
+++ b/src/ipa/rkisp1/algorithms/agc.h
@@ -15,7 +15,6 @@
#include <libcamera/geometry.h>
#include "libipa/agc_mean_luminance.h"
-#include "libipa/histogram.h"
#include "algorithm.h"
@@ -37,7 +36,7 @@ public:
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const rkisp1_stat_buffer *stats,
@@ -51,8 +50,12 @@ private:
void fillMetadata(IPAContext &context, IPAFrameContext &frameContext,
ControlList &metadata);
double estimateLuminance(double gain) const override;
+ void processFrameDuration(IPAContext &context,
+ IPAFrameContext &frameContext,
+ utils::Duration frameDuration);
Span<const uint8_t> expMeans_;
+ Span<const uint8_t> weights_;
std::map<int32_t, std::vector<uint8_t>> meteringModes_;
};
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 4ccafd48..eafe9308 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -8,14 +8,18 @@
#include "awb.h"
#include <algorithm>
-#include <cmath>
-#include <iomanip>
+#include <ios>
#include <libcamera/base/log.h>
#include <libcamera/control_ids.h>
+
#include <libcamera/ipa/core_ipa_interface.h>
+#include "libipa/awb_bayes.h"
+#include "libipa/awb_grey.h"
+#include "libipa/colours.h"
+
/**
* \file awb.h
*/
@@ -31,27 +35,100 @@ namespace ipa::rkisp1::algorithms {
LOG_DEFINE_CATEGORY(RkISP1Awb)
+constexpr int32_t kMinColourTemperature = 2500;
+constexpr int32_t kMaxColourTemperature = 10000;
+constexpr int32_t kDefaultColourTemperature = 5000;
+
/* Minimum mean value below which AWB can't operate. */
constexpr double kMeanMinThreshold = 2.0;
+class RkISP1AwbStats final : public AwbStats
+{
+public:
+ RkISP1AwbStats(const RGB<double> &rgbMeans)
+ : rgbMeans_(rgbMeans)
+ {
+ rg_ = rgbMeans_.r() / rgbMeans_.g();
+ bg_ = rgbMeans_.b() / rgbMeans_.g();
+ }
+
+ double computeColourError(const RGB<double> &gains) const override
+ {
+ /*
+ * Compute the sum of the squared colour error (non-greyness) as
+ * it appears in the log likelihood equation.
+ */
+ double deltaR = gains.r() * rg_ - 1.0;
+ double deltaB = gains.b() * bg_ - 1.0;
+ double delta2 = deltaR * deltaR + deltaB * deltaB;
+
+ return delta2;
+ }
+
+ RGB<double> rgbMeans() const override
+ {
+ return rgbMeans_;
+ }
+
+private:
+ RGB<double> rgbMeans_;
+ double rg_;
+ double bg_;
+};
+
Awb::Awb()
: rgbMode_(false)
{
}
/**
+ * \copydoc libcamera::ipa::Algorithm::init
+ */
+int Awb::init(IPAContext &context, const YamlObject &tuningData)
+{
+ auto &cmap = context.ctrlMap;
+ cmap[&controls::ColourTemperature] = ControlInfo(kMinColourTemperature,
+ kMaxColourTemperature,
+ kDefaultColourTemperature);
+
+ if (!tuningData.contains("algorithm"))
+ LOG(RkISP1Awb, Info) << "No AWB algorithm specified."
+ << " Default to grey world";
+
+ auto mode = tuningData["algorithm"].get<std::string>("grey");
+ if (mode == "grey") {
+ awbAlgo_ = std::make_unique<AwbGrey>();
+ } else if (mode == "bayes") {
+ awbAlgo_ = std::make_unique<AwbBayes>();
+ } else {
+ LOG(RkISP1Awb, Error) << "Unknown AWB algorithm: " << mode;
+ return -EINVAL;
+ }
+ LOG(RkISP1Awb, Debug) << "Using AWB algorithm: " << mode;
+
+ int ret = awbAlgo_->init(tuningData);
+ if (ret) {
+ LOG(RkISP1Awb, Error) << "Failed to init AWB algorithm";
+ return ret;
+ }
+
+ const auto &src = awbAlgo_->controls();
+ cmap.insert(src.begin(), src.end());
+
+ return 0;
+}
+
+/**
* \copydoc libcamera::ipa::Algorithm::configure
*/
int Awb::configure(IPAContext &context,
const IPACameraSensorInfo &configInfo)
{
- context.activeState.awb.gains.manual.red = 1.0;
- context.activeState.awb.gains.manual.blue = 1.0;
- context.activeState.awb.gains.manual.green = 1.0;
- context.activeState.awb.gains.automatic.red = 1.0;
- context.activeState.awb.gains.automatic.blue = 1.0;
- context.activeState.awb.gains.automatic.green = 1.0;
+ context.activeState.awb.gains.manual = RGB<double>{ 1.0 };
+ context.activeState.awb.gains.automatic =
+ awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
context.activeState.awb.autoEnabled = true;
+ context.activeState.awb.temperatureK = kDefaultColourTemperature;
/*
* Define the measurement window for AWB as a centered rectangle
@@ -85,68 +162,80 @@ void Awb::queueRequest(IPAContext &context,
<< (*awbEnable ? "Enabling" : "Disabling") << " AWB";
}
- const auto &colourGains = controls.get(controls::ColourGains);
- if (colourGains && !awb.autoEnabled) {
- awb.gains.manual.red = (*colourGains)[0];
- awb.gains.manual.blue = (*colourGains)[1];
-
- LOG(RkISP1Awb, Debug)
- << "Set colour gains to red: " << awb.gains.manual.red
- << ", blue: " << awb.gains.manual.blue;
- }
+ awbAlgo_->handleControls(controls);
frameContext.awb.autoEnabled = awb.autoEnabled;
- if (!awb.autoEnabled) {
- frameContext.awb.gains.red = awb.gains.manual.red;
- frameContext.awb.gains.green = 1.0;
- frameContext.awb.gains.blue = awb.gains.manual.blue;
+ if (awb.autoEnabled)
+ return;
+
+ const auto &colourGains = controls.get(controls::ColourGains);
+ const auto &colourTemperature = controls.get(controls::ColourTemperature);
+ bool update = false;
+ if (colourGains) {
+ awb.gains.manual.r() = (*colourGains)[0];
+ awb.gains.manual.b() = (*colourGains)[1];
+ /*
+ * \todo Colour temperature reported in metadata is now
+ * incorrect, as we can't deduce the temperature from the gains.
+ * This will be fixed with the bayes AWB algorithm.
+ */
+ update = true;
+ } else if (colourTemperature) {
+ const auto &gains = awbAlgo_->gainsFromColourTemperature(*colourTemperature);
+ awb.gains.manual.r() = gains.r();
+ awb.gains.manual.b() = gains.b();
+ awb.temperatureK = *colourTemperature;
+ update = true;
}
+
+ if (update)
+ LOG(RkISP1Awb, Debug)
+ << "Set colour gains to " << awb.gains.manual;
+
+ frameContext.awb.gains = awb.gains.manual;
+ frameContext.awb.temperatureK = awb.temperatureK;
}
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void Awb::prepare(IPAContext &context, const uint32_t frame,
- IPAFrameContext &frameContext, rkisp1_params_cfg *params)
+ IPAFrameContext &frameContext, RkISP1Params *params)
{
/*
* This is the latest time we can read the active state. This is the
* most up-to-date automatic values we can read.
*/
if (frameContext.awb.autoEnabled) {
- frameContext.awb.gains.red = context.activeState.awb.gains.automatic.red;
- frameContext.awb.gains.green = context.activeState.awb.gains.automatic.green;
- frameContext.awb.gains.blue = context.activeState.awb.gains.automatic.blue;
+ frameContext.awb.gains = context.activeState.awb.gains.automatic;
+ frameContext.awb.temperatureK = context.activeState.awb.temperatureK;
}
- params->others.awb_gain_config.gain_green_b =
- std::clamp<int>(256 * frameContext.awb.gains.green, 0, 0x3ff);
- params->others.awb_gain_config.gain_blue =
- std::clamp<int>(256 * frameContext.awb.gains.blue, 0, 0x3ff);
- params->others.awb_gain_config.gain_red =
- std::clamp<int>(256 * frameContext.awb.gains.red, 0, 0x3ff);
- params->others.awb_gain_config.gain_green_r =
- std::clamp<int>(256 * frameContext.awb.gains.green, 0, 0x3ff);
+ auto gainConfig = params->block<BlockType::AwbGain>();
+ gainConfig.setEnabled(true);
- /* Update the gains. */
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;
+ gainConfig->gain_green_b = std::clamp<int>(256 * frameContext.awb.gains.g(), 0, 0x3ff);
+ gainConfig->gain_blue = std::clamp<int>(256 * frameContext.awb.gains.b(), 0, 0x3ff);
+ gainConfig->gain_red = std::clamp<int>(256 * frameContext.awb.gains.r(), 0, 0x3ff);
+ gainConfig->gain_green_r = std::clamp<int>(256 * frameContext.awb.gains.g(), 0, 0x3ff);
/* If we have already set the AWB measurement parameters, return. */
if (frame > 0)
return;
- rkisp1_cif_isp_awb_meas_config &awb_config = params->meas.awb_meas_config;
+ auto awbConfig = params->block<BlockType::Awb>();
+ awbConfig.setEnabled(true);
/* Configure the measure window for AWB. */
- awb_config.awb_wnd = context.configuration.awb.measureWindow;
+ awbConfig->awb_wnd = context.configuration.awb.measureWindow;
/* Number of frames to use to estimate the means (0 means 1 frame). */
- awb_config.frames = 0;
+ awbConfig->frames = 0;
/* Select RGB or YCbCr means measurement. */
if (rgbMode_) {
- awb_config.awb_mode = RKISP1_CIF_ISP_AWB_MODE_RGB;
+ awbConfig->awb_mode = RKISP1_CIF_ISP_AWB_MODE_RGB;
/*
* For RGB-based measurements, pixels are selected with maximum
@@ -154,19 +243,19 @@ void Awb::prepare(IPAContext &context, const uint32_t frame,
* awb_ref_cr, awb_min_y and awb_ref_cb respectively. The other
* values are not used, set them to 0.
*/
- awb_config.awb_ref_cr = 250;
- awb_config.min_y = 250;
- awb_config.awb_ref_cb = 250;
+ awbConfig->awb_ref_cr = 250;
+ awbConfig->min_y = 250;
+ awbConfig->awb_ref_cb = 250;
- awb_config.max_y = 0;
- awb_config.min_c = 0;
- awb_config.max_csum = 0;
+ awbConfig->max_y = 0;
+ awbConfig->min_c = 0;
+ awbConfig->max_csum = 0;
} else {
- awb_config.awb_mode = RKISP1_CIF_ISP_AWB_MODE_YCBCR;
+ awbConfig->awb_mode = RKISP1_CIF_ISP_AWB_MODE_YCBCR;
/* Set the reference Cr and Cb (AWB target) to white. */
- awb_config.awb_ref_cb = 128;
- awb_config.awb_ref_cr = 128;
+ awbConfig->awb_ref_cb = 128;
+ awbConfig->awb_ref_cr = 128;
/*
* Filter out pixels based on luminance and chrominance values.
@@ -174,36 +263,11 @@ void Awb::prepare(IPAContext &context, const uint32_t frame,
* range, while the acceptable chroma values are specified with
* a minimum of 16 and a maximum Cb+Cr sum of 250.
*/
- awb_config.min_y = 16;
- awb_config.max_y = 250;
- awb_config.min_c = 16;
- awb_config.max_csum = 250;
+ awbConfig->min_y = 16;
+ awbConfig->max_y = 250;
+ awbConfig->min_c = 16;
+ awbConfig->max_csum = 250;
}
-
- /* Enable the AWB gains. */
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;
-
- /* Update the AWB measurement parameters and enable the AWB module. */
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AWB;
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_AWB;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_AWB;
-}
-
-uint32_t Awb::estimateCCT(double red, double green, double blue)
-{
- /* Convert the RGB values to CIE tristimulus values (XYZ) */
- double X = (-0.14282) * (red) + (1.54924) * (green) + (-0.95641) * (blue);
- double Y = (-0.32466) * (red) + (1.57837) * (green) + (-0.73191) * (blue);
- double Z = (-0.68202) * (red) + (0.77073) * (green) + (0.56332) * (blue);
-
- /* Calculate the normalized chromaticity values */
- double x = X / (X + Y + Z);
- double y = Y / (X + Y + Z);
-
- /* Calculate CCT */
- double n = (x - 0.3320) / (0.1858 - y);
- return 449 * n * n * n + 3525 * n * n + 6823.3 * n + 5520.33;
}
/**
@@ -215,47 +279,108 @@ void Awb::process(IPAContext &context,
const rkisp1_stat_buffer *stats,
ControlList &metadata)
{
- const rkisp1_cif_isp_stat *params = &stats->params;
- const rkisp1_cif_isp_awb_stat *awb = &params->awb;
IPAActiveState &activeState = context.activeState;
- double greenMean;
- double redMean;
- double blueMean;
metadata.set(controls::AwbEnable, frameContext.awb.autoEnabled);
metadata.set(controls::ColourGains, {
- static_cast<float>(frameContext.awb.gains.red),
- static_cast<float>(frameContext.awb.gains.blue)
+ static_cast<float>(frameContext.awb.gains.r()),
+ static_cast<float>(frameContext.awb.gains.b())
});
+ metadata.set(controls::ColourTemperature, frameContext.awb.temperatureK);
+
+ if (!stats || !(stats->meas_type & RKISP1_CIF_ISP_STAT_AWB)) {
+ LOG(RkISP1Awb, Error) << "AWB data is missing in statistics";
+ return;
+ }
+
+ const rkisp1_cif_isp_stat *params = &stats->params;
+ const rkisp1_cif_isp_awb_stat *awb = &params->awb;
+
+ RGB<double> rgbMeans = calculateRgbMeans(frameContext, awb);
+
+ /*
+ * If the means are too small we don't have enough information to
+ * meaningfully calculate gains. Freeze the algorithm in that case.
+ */
+ if (rgbMeans.r() < kMeanMinThreshold && rgbMeans.g() < kMeanMinThreshold &&
+ rgbMeans.b() < kMeanMinThreshold)
+ return;
+
+ RkISP1AwbStats awbStats{ rgbMeans };
+ AwbResult awbResult = awbAlgo_->calculateAwb(awbStats, frameContext.lux.lux);
+
+ activeState.awb.temperatureK = awbResult.colourTemperature;
+
+ /* Metadata shall contain the up to date measurement */
+ metadata.set(controls::ColourTemperature, activeState.awb.temperatureK);
+
+ /*
+ * Clamp the gain values to the hardware, which expresses gains as Q2.8
+ * unsigned integer values. Set the minimum just above zero to avoid
+ * divisions by zero when computing the raw means in subsequent
+ * iterations.
+ */
+ awbResult.gains = awbResult.gains.max(1.0 / 256).min(1023.0 / 256);
+
+ /* Filter the values to avoid oscillations. */
+ double speed = 0.2;
+ awbResult.gains = awbResult.gains * speed +
+ activeState.awb.gains.automatic * (1 - speed);
+
+ activeState.awb.gains.automatic = awbResult.gains;
+
+ LOG(RkISP1Awb, Debug)
+ << std::showpoint
+ << "Means " << rgbMeans << ", gains "
+ << activeState.awb.gains.automatic << ", temp "
+ << activeState.awb.temperatureK << "K";
+}
+
+RGB<double> Awb::calculateRgbMeans(const IPAFrameContext &frameContext, const rkisp1_cif_isp_awb_stat *awb) const
+{
+ Vector<double, 3> rgbMeans;
if (rgbMode_) {
- greenMean = awb->awb_mean[0].mean_y_or_g;
- redMean = awb->awb_mean[0].mean_cr_or_r;
- blueMean = awb->awb_mean[0].mean_cb_or_b;
+ rgbMeans = {{
+ static_cast<double>(awb->awb_mean[0].mean_cr_or_r),
+ static_cast<double>(awb->awb_mean[0].mean_y_or_g),
+ static_cast<double>(awb->awb_mean[0].mean_cb_or_b)
+ }};
} else {
/* Get the YCbCr mean values */
- double yMean = awb->awb_mean[0].mean_y_or_g;
- double cbMean = awb->awb_mean[0].mean_cb_or_b;
- double crMean = awb->awb_mean[0].mean_cr_or_r;
+ Vector<double, 3> yuvMeans({
+ static_cast<double>(awb->awb_mean[0].mean_y_or_g),
+ static_cast<double>(awb->awb_mean[0].mean_cb_or_b),
+ static_cast<double>(awb->awb_mean[0].mean_cr_or_r)
+ });
/*
- * Convert from YCbCr to RGB.
- * The hardware uses the following formulas:
- * Y = 16 + 0.2500 R + 0.5000 G + 0.1094 B
+ * Convert from YCbCr to RGB. The hardware uses the following
+ * formulas:
+ *
+ * Y = 16 + 0.2500 R + 0.5000 G + 0.1094 B
* Cb = 128 - 0.1406 R - 0.2969 G + 0.4375 B
* Cr = 128 + 0.4375 R - 0.3750 G - 0.0625 B
*
- * The inverse matrix is thus:
+ * This seems to be based on limited range BT.601 with Q1.6
+ * precision.
+ *
+ * The inverse matrix is:
+ *
* [[1,1636, -0,0623, 1,6008]
* [1,1636, -0,4045, -0,7949]
* [1,1636, 1,9912, -0,0250]]
*/
- yMean -= 16;
- cbMean -= 128;
- crMean -= 128;
- redMean = 1.1636 * yMean - 0.0623 * cbMean + 1.6008 * crMean;
- greenMean = 1.1636 * yMean - 0.4045 * cbMean - 0.7949 * crMean;
- blueMean = 1.1636 * yMean + 1.9912 * cbMean - 0.0250 * crMean;
+ static const Matrix<double, 3, 3> yuv2rgbMatrix({
+ 1.1636, -0.0623, 1.6008,
+ 1.1636, -0.4045, -0.7949,
+ 1.1636, 1.9912, -0.0250
+ });
+ static const Vector<double, 3> yuv2rgbOffset({
+ 16, 128, 128
+ });
+
+ rgbMeans = yuv2rgbMatrix * (yuvMeans - yuv2rgbOffset);
/*
* Due to hardware rounding errors in the YCbCr means, the
@@ -263,9 +388,7 @@ void Awb::process(IPAContext &context,
* negative gains, messing up calculation. Prevent this by
* clamping the means to positive values.
*/
- redMean = std::max(redMean, 0.0);
- greenMean = std::max(greenMean, 0.0);
- blueMean = std::max(blueMean, 0.0);
+ rgbMeans = rgbMeans.max(0.0);
}
/*
@@ -273,57 +396,9 @@ void Awb::process(IPAContext &context,
* divide by the gains that were used to get the raw means from the
* sensor.
*/
- redMean /= frameContext.awb.gains.red;
- greenMean /= frameContext.awb.gains.green;
- blueMean /= frameContext.awb.gains.blue;
-
- /*
- * If the means are too small we don't have enough information to
- * meaningfully calculate gains. Freeze the algorithm in that case.
- */
- if (redMean < kMeanMinThreshold && greenMean < kMeanMinThreshold &&
- blueMean < kMeanMinThreshold) {
- metadata.set(controls::ColourTemperature, activeState.awb.temperatureK);
- return;
- }
-
- activeState.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);
-
- /* Metadata shall contain the up to date measurement */
- metadata.set(controls::ColourTemperature, activeState.awb.temperatureK);
+ rgbMeans /= frameContext.awb.gains;
- /*
- * Estimate the red and blue gains to apply in a grey world. The green
- * gain is hardcoded to 1.0. Avoid divisions by zero by clamping the
- * divisor to a minimum value of 1.0.
- */
- double redGain = greenMean / std::max(redMean, 1.0);
- double blueGain = greenMean / std::max(blueMean, 1.0);
-
- /*
- * Clamp the gain values to the hardware, which expresses gains as Q2.8
- * unsigned integer values. Set the minimum just above zero to avoid
- * divisions by zero when computing the raw means in subsequent
- * iterations.
- */
- redGain = std::clamp(redGain, 1.0 / 256, 1023.0 / 256);
- blueGain = std::clamp(blueGain, 1.0 / 256, 1023.0 / 256);
-
- /* Filter the values to avoid oscillations. */
- double speed = 0.2;
- redGain = speed * redGain + (1 - speed) * activeState.awb.gains.automatic.red;
- blueGain = speed * blueGain + (1 - speed) * activeState.awb.gains.automatic.blue;
-
- activeState.awb.gains.automatic.red = redGain;
- activeState.awb.gains.automatic.blue = blueGain;
- activeState.awb.gains.automatic.green = 1.0;
-
- LOG(RkISP1Awb, Debug) << std::showpoint
- << "Means [" << redMean << ", " << greenMean << ", " << blueMean
- << "], gains [" << activeState.awb.gains.automatic.red << ", "
- << activeState.awb.gains.automatic.green << ", "
- << activeState.awb.gains.automatic.blue << "], temp "
- << activeState.awb.temperatureK << "K";
+ return rgbMeans;
}
REGISTER_IPA_ALGORITHM(Awb, "Awb")
diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
index 06c92896..7e6c3862 100644
--- a/src/ipa/rkisp1/algorithms/awb.h
+++ b/src/ipa/rkisp1/algorithms/awb.h
@@ -7,6 +7,13 @@
#pragma once
+#include <optional>
+
+#include "libcamera/internal/vector.h"
+
+#include "libipa/awb.h"
+#include "libipa/interpolator.h"
+
#include "algorithm.h"
namespace libcamera {
@@ -19,20 +26,24 @@ public:
Awb();
~Awb() = default;
+ int init(IPAContext &context, const YamlObject &tuningData) override;
int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
void queueRequest(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const rkisp1_stat_buffer *stats,
ControlList &metadata) override;
private:
- uint32_t estimateCCT(double red, double green, double blue);
+ RGB<double> calculateRgbMeans(const IPAFrameContext &frameContext,
+ const rkisp1_cif_isp_awb_stat *awb) const;
+
+ std::unique_ptr<AwbAlgorithm> awbAlgo_;
bool rgbMode_;
};
diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp
index 871dd204..98cb7145 100644
--- a/src/ipa/rkisp1/algorithms/blc.cpp
+++ b/src/ipa/rkisp1/algorithms/blc.cpp
@@ -7,6 +7,8 @@
#include "blc.h"
+#include <linux/videodev2.h>
+
#include <libcamera/base/log.h>
#include <libcamera/control_ids.h>
@@ -38,7 +40,6 @@ namespace ipa::rkisp1::algorithms {
LOG_DEFINE_CATEGORY(RkISP1Blc)
BlackLevelCorrection::BlackLevelCorrection()
- : tuningParameters_(false)
{
/*
* This is a bit of a hack. In raw mode no black level correction
@@ -96,8 +97,6 @@ int BlackLevelCorrection::init(IPAContext &context, const YamlObject &tuningData
blackLevelBlue_ = *blackLevel;
}
- tuningParameters_ = true;
-
LOG(RkISP1Blc, Debug)
<< "Black levels: red " << blackLevelRed_
<< ", green (red) " << blackLevelGreenR_
@@ -107,13 +106,30 @@ int BlackLevelCorrection::init(IPAContext &context, const YamlObject &tuningData
return 0;
}
+int BlackLevelCorrection::configure(IPAContext &context,
+ [[maybe_unused]] const IPACameraSensorInfo &configInfo)
+{
+ /*
+ * BLC on ISP versions that include the companding block requires usage
+ * of the extensible parameters format.
+ */
+ supported_ = context.configuration.paramFormat == V4L2_META_FMT_RK_ISP1_EXT_PARAMS ||
+ !context.hw->compand;
+
+ if (!supported_)
+ LOG(RkISP1Blc, Warning)
+ << "BLC in companding block requires extensible parameters";
+
+ return 0;
+}
+
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
-void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
+void BlackLevelCorrection::prepare(IPAContext &context,
const uint32_t frame,
[[maybe_unused]] IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
if (context.configuration.raw)
return;
@@ -121,19 +137,33 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
if (frame > 0)
return;
- if (!tuningParameters_)
+ if (!supported_)
return;
- params->others.bls_config.enable_auto = 0;
- /* The rkisp1 uses 12bit based black levels. Scale down accordingly. */
- params->others.bls_config.fixed_val.r = blackLevelRed_ >> 4;
- params->others.bls_config.fixed_val.gr = blackLevelGreenR_ >> 4;
- params->others.bls_config.fixed_val.gb = blackLevelGreenB_ >> 4;
- params->others.bls_config.fixed_val.b = blackLevelBlue_ >> 4;
+ if (context.hw->compand) {
+ auto config = params->block<BlockType::CompandBls>();
+ config.setEnabled(true);
+
+ /*
+ * Scale up to the 20-bit black levels used by the companding
+ * block.
+ */
+ config->r = blackLevelRed_ << 4;
+ config->gr = blackLevelGreenR_ << 4;
+ config->gb = blackLevelGreenB_ << 4;
+ config->b = blackLevelBlue_ << 4;
+ } else {
+ auto config = params->block<BlockType::Bls>();
+ config.setEnabled(true);
+
+ config->enable_auto = 0;
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_BLS;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_BLS;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_BLS;
+ /* Scale down to the 12-bit black levels used by the BLS block. */
+ config->fixed_val.r = blackLevelRed_ >> 4;
+ config->fixed_val.gr = blackLevelGreenR_ >> 4;
+ config->fixed_val.gb = blackLevelGreenB_ >> 4;
+ config->fixed_val.b = blackLevelBlue_ >> 4;
+ }
}
/**
diff --git a/src/ipa/rkisp1/algorithms/blc.h b/src/ipa/rkisp1/algorithms/blc.h
index 4ecac233..f797ae44 100644
--- a/src/ipa/rkisp1/algorithms/blc.h
+++ b/src/ipa/rkisp1/algorithms/blc.h
@@ -20,15 +20,19 @@ public:
~BlackLevelCorrection() = default;
int init(IPAContext &context, const YamlObject &tuningData) override;
+ int configure(IPAContext &context,
+ const IPACameraSensorInfo &configInfo) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const rkisp1_stat_buffer *stats,
ControlList &metadata) override;
+
private:
- bool tuningParameters_;
+ bool supported_;
+
int16_t blackLevelRed_;
int16_t blackLevelGreenR_;
int16_t blackLevelGreenB_;
diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
index fe7246f8..eb8ca39e 100644
--- a/src/ipa/rkisp1/algorithms/ccm.cpp
+++ b/src/ipa/rkisp1/algorithms/ccm.cpp
@@ -7,11 +7,7 @@
#include "ccm.h"
-#include <algorithm>
-#include <chrono>
-#include <cmath>
-#include <tuple>
-#include <vector>
+#include <map>
#include <libcamera/base/log.h>
#include <libcamera/base/utils.h>
@@ -22,8 +18,8 @@
#include "libcamera/internal/yaml_parser.h"
-#include "../utils.h"
-#include "libipa/matrix_interpolator.h"
+#include "libipa/fixedpoint.h"
+#include "libipa/interpolator.h"
/**
* \file ccm.h
@@ -50,7 +46,7 @@ int Ccm::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData
LOG(RkISP1Ccm, Warning)
<< "Failed to parse 'ccm' "
<< "parameter from tuning file; falling back to unit matrix";
- ccm_.reset();
+ ccm_.setData({ { 0, Matrix<float, 3, 3>::identity() } });
}
ret = offsets_.readYaml(tuningData["ccms"], "ct", "offsets");
@@ -58,25 +54,17 @@ int Ccm::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData
LOG(RkISP1Ccm, Warning)
<< "Failed to parse 'offsets' "
<< "parameter from tuning file; falling back to zero offsets";
- /*
- * MatrixInterpolator::reset() resets to identity matrices
- * while here we need zero matrices so we need to construct it
- * ourselves.
- */
- Matrix<int16_t, 3, 1> m({ 0, 0, 0 });
- std::map<unsigned int, Matrix<int16_t, 3, 1>> matrices = { { 0, m } };
- offsets_ = MatrixInterpolator<int16_t, 3, 1>(matrices);
+
+ offsets_.setData({ { 0, Matrix<int16_t, 3, 1>({ 0, 0, 0 }) } });
}
return 0;
}
-void Ccm::setParameters(rkisp1_params_cfg *params,
+void Ccm::setParameters(struct rkisp1_cif_isp_ctk_config &config,
const Matrix<float, 3, 3> &matrix,
const Matrix<int16_t, 3, 1> &offsets)
{
- struct rkisp1_cif_isp_ctk_config &config = params->others.ctk_config;
-
/*
* 4 bit integer and 7 bit fractional, ranging from -8 (0x400) to
* +7.992 (0x3ff)
@@ -84,7 +72,7 @@ void Ccm::setParameters(rkisp1_params_cfg *params,
for (unsigned int i = 0; i < 3; i++) {
for (unsigned int j = 0; j < 3; j++)
config.coeff[i][j] =
- utils::floatingToFixedPoint<4, 7, uint16_t, double>(matrix[i][j]);
+ floatingToFixedPoint<4, 7, uint16_t, double>(matrix[i][j]);
}
for (unsigned int i = 0; i < 3; i++)
@@ -92,18 +80,13 @@ void Ccm::setParameters(rkisp1_params_cfg *params,
LOG(RkISP1Ccm, Debug) << "Setting matrix " << matrix;
LOG(RkISP1Ccm, Debug) << "Setting offsets " << offsets;
-
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_CTK;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_CTK;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_CTK;
}
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void Ccm::prepare(IPAContext &context, const uint32_t frame,
- IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ IPAFrameContext &frameContext, RkISP1Params *params)
{
uint32_t ct = context.activeState.awb.temperatureK;
@@ -117,13 +100,15 @@ void Ccm::prepare(IPAContext &context, const uint32_t frame,
}
ct_ = ct;
- Matrix<float, 3, 3> ccm = ccm_.get(ct);
- Matrix<int16_t, 3, 1> offsets = offsets_.get(ct);
+ Matrix<float, 3, 3> ccm = ccm_.getInterpolated(ct);
+ Matrix<int16_t, 3, 1> offsets = offsets_.getInterpolated(ct);
context.activeState.ccm.ccm = ccm;
frameContext.ccm.ccm = ccm;
- setParameters(params, ccm, offsets);
+ auto config = params->block<BlockType::Ctk>();
+ config.setEnabled(true);
+ setParameters(*config, ccm, offsets);
}
/**
@@ -135,12 +120,7 @@ void Ccm::process([[maybe_unused]] IPAContext &context,
[[maybe_unused]] const rkisp1_stat_buffer *stats,
ControlList &metadata)
{
- float m[9];
- for (unsigned int i = 0; i < 3; i++) {
- for (unsigned int j = 0; j < 3; j++)
- m[i * 3 + j] = frameContext.ccm.ccm[i][j];
- }
- metadata.set(controls::ColourCorrectionMatrix, m);
+ metadata.set(controls::ColourCorrectionMatrix, frameContext.ccm.ccm.data());
}
REGISTER_IPA_ALGORITHM(Ccm, "Ccm")
diff --git a/src/ipa/rkisp1/algorithms/ccm.h b/src/ipa/rkisp1/algorithms/ccm.h
index 30cb8821..a5d9a9a4 100644
--- a/src/ipa/rkisp1/algorithms/ccm.h
+++ b/src/ipa/rkisp1/algorithms/ccm.h
@@ -9,8 +9,9 @@
#include <linux/rkisp1-config.h>
-#include "libipa/matrix.h"
-#include "libipa/matrix_interpolator.h"
+#include "libcamera/internal/matrix.h"
+
+#include "libipa/interpolator.h"
#include "algorithm.h"
@@ -27,7 +28,7 @@ public:
int init(IPAContext &context, const YamlObject &tuningData) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const rkisp1_stat_buffer *stats,
@@ -35,13 +36,13 @@ public:
private:
void parseYaml(const YamlObject &tuningData);
- void setParameters(rkisp1_params_cfg *params,
+ void setParameters(struct rkisp1_cif_isp_ctk_config &config,
const Matrix<float, 3, 3> &matrix,
const Matrix<int16_t, 3, 1> &offsets);
unsigned int ct_;
- MatrixInterpolator<float, 3, 3> ccm_;
- MatrixInterpolator<int16_t, 3, 1> offsets_;
+ Interpolator<Matrix<float, 3, 3>> ccm_;
+ Interpolator<Matrix<int16_t, 3, 1>> offsets_;
};
} /* namespace ipa::rkisp1::algorithms */
diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
index ef0931b2..d1fff699 100644
--- a/src/ipa/rkisp1/algorithms/cproc.cpp
+++ b/src/ipa/rkisp1/algorithms/cproc.cpp
@@ -140,19 +140,17 @@ void ColorProcessing::queueRequest(IPAContext &context,
void ColorProcessing::prepare([[maybe_unused]] IPAContext &context,
[[maybe_unused]] const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
/* Check if the algorithm configuration has been updated. */
if (!frameContext.cproc.update)
return;
- params->others.cproc_config.brightness = frameContext.cproc.brightness;
- params->others.cproc_config.contrast = frameContext.cproc.contrast;
- params->others.cproc_config.sat = frameContext.cproc.saturation;
-
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_CPROC;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_CPROC;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_CPROC;
+ auto config = params->block<BlockType::Cproc>();
+ config.setEnabled(true);
+ config->brightness = frameContext.cproc.brightness;
+ config->contrast = frameContext.cproc.contrast;
+ config->sat = frameContext.cproc.saturation;
}
REGISTER_IPA_ALGORITHM(ColorProcessing, "ColorProcessing")
diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h
index e50e7200..fd38fd17 100644
--- a/src/ipa/rkisp1/algorithms/cproc.h
+++ b/src/ipa/rkisp1/algorithms/cproc.h
@@ -29,7 +29,7 @@ public:
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
};
} /* namespace ipa::rkisp1::algorithms */
diff --git a/src/ipa/rkisp1/algorithms/dpcc.cpp b/src/ipa/rkisp1/algorithms/dpcc.cpp
index b5a339e9..78946281 100644
--- a/src/ipa/rkisp1/algorithms/dpcc.cpp
+++ b/src/ipa/rkisp1/algorithms/dpcc.cpp
@@ -232,16 +232,14 @@ int DefectPixelClusterCorrection::init([[maybe_unused]] IPAContext &context,
void DefectPixelClusterCorrection::prepare([[maybe_unused]] IPAContext &context,
const uint32_t frame,
[[maybe_unused]] IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
if (frame > 0)
return;
- params->others.dpcc_config = config_;
-
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_DPCC;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_DPCC;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_DPCC;
+ auto config = params->block<BlockType::Dpcc>();
+ config.setEnabled(true);
+ *config = config_;
}
REGISTER_IPA_ALGORITHM(DefectPixelClusterCorrection, "DefectPixelClusterCorrection")
diff --git a/src/ipa/rkisp1/algorithms/dpcc.h b/src/ipa/rkisp1/algorithms/dpcc.h
index d39b7bed..b77766c3 100644
--- a/src/ipa/rkisp1/algorithms/dpcc.h
+++ b/src/ipa/rkisp1/algorithms/dpcc.h
@@ -22,7 +22,7 @@ public:
int init(IPAContext &context, const YamlObject &tuningData) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
private:
rkisp1_cif_isp_dpcc_config config_;
diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
index abf95728..cb6095da 100644
--- a/src/ipa/rkisp1/algorithms/dpf.cpp
+++ b/src/ipa/rkisp1/algorithms/dpf.cpp
@@ -7,7 +7,9 @@
#include "dpf.h"
-#include <cmath>
+#include <algorithm>
+#include <string>
+#include <vector>
#include <libcamera/base/log.h>
@@ -215,15 +217,21 @@ void Dpf::queueRequest(IPAContext &context,
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void Dpf::prepare(IPAContext &context, const uint32_t frame,
- IPAFrameContext &frameContext, rkisp1_params_cfg *params)
+ IPAFrameContext &frameContext, RkISP1Params *params)
{
- if (frame == 0) {
- params->others.dpf_config = config_;
- params->others.dpf_strength_config = strengthConfig_;
+ if (!frameContext.dpf.update && frame > 0)
+ return;
+
+ auto config = params->block<BlockType::Dpf>();
+ config.setEnabled(frameContext.dpf.denoise);
+
+ if (frameContext.dpf.denoise) {
+ *config = config_;
const auto &awb = context.configuration.awb;
const auto &lsc = context.configuration.lsc;
- auto &mode = params->others.dpf_config.gain.mode;
+
+ auto &mode = config->gain.mode;
/*
* The DPF needs to take into account the total amount of
@@ -241,15 +249,12 @@ void Dpf::prepare(IPAContext &context, const uint32_t frame,
mode = RKISP1_CIF_ISP_DPF_GAIN_USAGE_LSC_GAINS;
else
mode = RKISP1_CIF_ISP_DPF_GAIN_USAGE_DISABLED;
-
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_DPF |
- RKISP1_CIF_ISP_MODULE_DPF_STRENGTH;
}
- if (frameContext.dpf.update) {
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_DPF;
- if (frameContext.dpf.denoise)
- params->module_ens |= RKISP1_CIF_ISP_MODULE_DPF;
+ if (frame == 0) {
+ auto strengthConfig = params->block<BlockType::DpfStrength>();
+ strengthConfig.setEnabled(true);
+ *strengthConfig = strengthConfig_;
}
}
diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
index da0115ba..2dd8cd36 100644
--- a/src/ipa/rkisp1/algorithms/dpf.h
+++ b/src/ipa/rkisp1/algorithms/dpf.h
@@ -27,7 +27,7 @@ public:
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
private:
struct rkisp1_cif_isp_dpf_config config_;
diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
index 9752248a..7598ef8a 100644
--- a/src/ipa/rkisp1/algorithms/filter.cpp
+++ b/src/ipa/rkisp1/algorithms/filter.cpp
@@ -104,7 +104,7 @@ void Filter::queueRequest(IPAContext &context,
*/
void Filter::prepare([[maybe_unused]] IPAContext &context,
[[maybe_unused]] const uint32_t frame,
- IPAFrameContext &frameContext, rkisp1_params_cfg *params)
+ IPAFrameContext &frameContext, RkISP1Params *params)
{
/* Check if the algorithm configuration has been updated. */
if (!frameContext.filter.update)
@@ -160,23 +160,25 @@ void Filter::prepare([[maybe_unused]] IPAContext &context,
uint8_t denoise = frameContext.filter.denoise;
uint8_t sharpness = frameContext.filter.sharpness;
- auto &flt_config = params->others.flt_config;
-
- flt_config.fac_sh0 = filt_fac_sh0[sharpness];
- flt_config.fac_sh1 = filt_fac_sh1[sharpness];
- flt_config.fac_mid = filt_fac_mid[sharpness];
- flt_config.fac_bl0 = filt_fac_bl0[sharpness];
- flt_config.fac_bl1 = filt_fac_bl1[sharpness];
-
- flt_config.lum_weight = kFiltLumWeightDefault;
- flt_config.mode = kFiltModeDefault;
- flt_config.thresh_sh0 = filt_thresh_sh0[denoise];
- flt_config.thresh_sh1 = filt_thresh_sh1[denoise];
- flt_config.thresh_bl0 = filt_thresh_bl0[denoise];
- flt_config.thresh_bl1 = filt_thresh_bl1[denoise];
- flt_config.grn_stage1 = stage1_select[denoise];
- flt_config.chr_v_mode = filt_chr_v_mode[denoise];
- flt_config.chr_h_mode = filt_chr_h_mode[denoise];
+
+ auto config = params->block<BlockType::Flt>();
+ config.setEnabled(true);
+
+ config->fac_sh0 = filt_fac_sh0[sharpness];
+ config->fac_sh1 = filt_fac_sh1[sharpness];
+ config->fac_mid = filt_fac_mid[sharpness];
+ config->fac_bl0 = filt_fac_bl0[sharpness];
+ config->fac_bl1 = filt_fac_bl1[sharpness];
+
+ config->lum_weight = kFiltLumWeightDefault;
+ config->mode = kFiltModeDefault;
+ config->thresh_sh0 = filt_thresh_sh0[denoise];
+ config->thresh_sh1 = filt_thresh_sh1[denoise];
+ config->thresh_bl0 = filt_thresh_bl0[denoise];
+ config->thresh_bl1 = filt_thresh_bl1[denoise];
+ config->grn_stage1 = stage1_select[denoise];
+ config->chr_v_mode = filt_chr_v_mode[denoise];
+ config->chr_h_mode = filt_chr_h_mode[denoise];
/*
* Combined high denoising and high sharpening requires some
@@ -186,27 +188,23 @@ void Filter::prepare([[maybe_unused]] IPAContext &context,
*/
if (denoise == 9) {
if (sharpness > 3)
- flt_config.grn_stage1 = 2;
+ config->grn_stage1 = 2;
} else if (denoise == 10) {
if (sharpness > 5)
- flt_config.grn_stage1 = 2;
+ config->grn_stage1 = 2;
else if (sharpness > 3)
- flt_config.grn_stage1 = 1;
+ config->grn_stage1 = 1;
}
if (denoise > 7) {
if (sharpness > 7) {
- flt_config.fac_bl0 /= 2;
- flt_config.fac_bl1 /= 4;
+ config->fac_bl0 /= 2;
+ config->fac_bl1 /= 4;
} else if (sharpness > 4) {
- flt_config.fac_bl0 = flt_config.fac_bl0 * 3 / 4;
- flt_config.fac_bl1 /= 2;
+ config->fac_bl0 = config->fac_bl0 * 3 / 4;
+ config->fac_bl1 /= 2;
}
}
-
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_FLT;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_FLT;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_FLT;
}
REGISTER_IPA_ALGORITHM(Filter, "Filter")
diff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h
index d595811d..8f858e57 100644
--- a/src/ipa/rkisp1/algorithms/filter.h
+++ b/src/ipa/rkisp1/algorithms/filter.h
@@ -26,7 +26,7 @@ public:
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
};
} /* namespace ipa::rkisp1::algorithms */
diff --git a/src/ipa/rkisp1/algorithms/goc.cpp b/src/ipa/rkisp1/algorithms/goc.cpp
index a82cee3b..a9493678 100644
--- a/src/ipa/rkisp1/algorithms/goc.cpp
+++ b/src/ipa/rkisp1/algorithms/goc.cpp
@@ -99,11 +99,14 @@ void GammaOutCorrection::queueRequest(IPAContext &context, const uint32_t frame,
void GammaOutCorrection::prepare(IPAContext &context,
[[maybe_unused]] const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
ASSERT(context.hw->numGammaOutSamples ==
RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10);
+ if (!frameContext.goc.update)
+ return;
+
/*
* The logarithmic segments as specified in the reference.
* Plus an additional 0 to make the loop easier
@@ -112,10 +115,11 @@ void GammaOutCorrection::prepare(IPAContext &context,
64, 64, 64, 64, 128, 128, 128, 128, 256,
256, 256, 512, 512, 512, 512, 512, 0
};
- __u16 *gamma_y = params->others.goc_config.gamma_y;
- if (!frameContext.goc.update)
- return;
+ auto config = params->block<BlockType::Goc>();
+ config.setEnabled(true);
+
+ __u16 *gamma_y = config->gamma_y;
unsigned x = 0;
for (const auto [i, size] : utils::enumerate(segments)) {
@@ -123,10 +127,7 @@ void GammaOutCorrection::prepare(IPAContext &context,
x += size;
}
- params->others.goc_config.mode = RKISP1_CIF_ISP_GOC_MODE_LOGARITHMIC;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_GOC;
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_GOC;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_GOC;
+ config->mode = RKISP1_CIF_ISP_GOC_MODE_LOGARITHMIC;
}
/**
diff --git a/src/ipa/rkisp1/algorithms/goc.h b/src/ipa/rkisp1/algorithms/goc.h
index 0e05d7ce..bb2ddfc9 100644
--- a/src/ipa/rkisp1/algorithms/goc.h
+++ b/src/ipa/rkisp1/algorithms/goc.h
@@ -28,7 +28,7 @@ public:
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
const rkisp1_stat_buffer *stats,
diff --git a/src/ipa/rkisp1/algorithms/gsl.cpp b/src/ipa/rkisp1/algorithms/gsl.cpp
index 9b056c6e..9604c0ac 100644
--- a/src/ipa/rkisp1/algorithms/gsl.cpp
+++ b/src/ipa/rkisp1/algorithms/gsl.cpp
@@ -119,24 +119,20 @@ int GammaSensorLinearization::init([[maybe_unused]] IPAContext &context,
void GammaSensorLinearization::prepare([[maybe_unused]] IPAContext &context,
const uint32_t frame,
[[maybe_unused]] IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
if (frame > 0)
return;
- params->others.sdg_config.xa_pnts.gamma_dx0 = gammaDx_[0];
- params->others.sdg_config.xa_pnts.gamma_dx1 = gammaDx_[1];
+ auto config = params->block<BlockType::Sdg>();
+ config.setEnabled(true);
- std::copy(curveYr_.begin(), curveYr_.end(),
- params->others.sdg_config.curve_r.gamma_y);
- std::copy(curveYg_.begin(), curveYg_.end(),
- params->others.sdg_config.curve_g.gamma_y);
- std::copy(curveYb_.begin(), curveYb_.end(),
- params->others.sdg_config.curve_b.gamma_y);
+ config->xa_pnts.gamma_dx0 = gammaDx_[0];
+ config->xa_pnts.gamma_dx1 = gammaDx_[1];
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_SDG;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_SDG;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_SDG;
+ std::copy(curveYr_.begin(), curveYr_.end(), config->curve_r.gamma_y);
+ std::copy(curveYg_.begin(), curveYg_.end(), config->curve_g.gamma_y);
+ std::copy(curveYb_.begin(), curveYb_.end(), config->curve_b.gamma_y);
}
REGISTER_IPA_ALGORITHM(GammaSensorLinearization, "GammaSensorLinearization")
diff --git a/src/ipa/rkisp1/algorithms/gsl.h b/src/ipa/rkisp1/algorithms/gsl.h
index c404105e..91cf6efa 100644
--- a/src/ipa/rkisp1/algorithms/gsl.h
+++ b/src/ipa/rkisp1/algorithms/gsl.h
@@ -22,7 +22,7 @@ public:
int init(IPAContext &context, const YamlObject &tuningData) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
private:
uint32_t gammaDx_[2];
diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
index 161183fc..e47aa2f0 100644
--- a/src/ipa/rkisp1/algorithms/lsc.cpp
+++ b/src/ipa/rkisp1/algorithms/lsc.cpp
@@ -16,6 +16,7 @@
#include "libcamera/internal/yaml_parser.h"
+#include "libipa/lsc_polynomial.h"
#include "linux/rkisp1-config.h"
/**
@@ -24,6 +25,36 @@
namespace libcamera {
+namespace ipa {
+
+constexpr int kColourTemperatureChangeThreshhold = 10;
+
+template<typename T>
+void interpolateVector(const std::vector<T> &a, const std::vector<T> &b,
+ std::vector<T> &dest, double lambda)
+{
+ assert(a.size() == b.size());
+ dest.resize(a.size());
+ for (size_t i = 0; i < a.size(); i++) {
+ dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda;
+ }
+}
+
+template<>
+void Interpolator<rkisp1::algorithms::LensShadingCorrection::Components>::
+ interpolate(const rkisp1::algorithms::LensShadingCorrection::Components &a,
+ const rkisp1::algorithms::LensShadingCorrection::Components &b,
+ rkisp1::algorithms::LensShadingCorrection::Components &dest,
+ double lambda)
+{
+ interpolateVector(a.r, b.r, dest.r, lambda);
+ interpolateVector(a.gr, b.gr, dest.gr, lambda);
+ interpolateVector(a.gb, b.gb, dest.gb, lambda);
+ interpolateVector(a.b, b.b, dest.b, lambda);
+}
+
+} /* namespace ipa */
+
namespace ipa::rkisp1::algorithms {
/**
@@ -40,6 +71,200 @@ namespace ipa::rkisp1::algorithms {
LOG_DEFINE_CATEGORY(RkISP1Lsc)
+class LscPolynomialLoader
+{
+public:
+ LscPolynomialLoader(const Size &sensorSize,
+ const Rectangle &cropRectangle,
+ const std::vector<double> &xSizes,
+ const std::vector<double> &ySizes)
+ : sensorSize_(sensorSize),
+ cropRectangle_(cropRectangle),
+ xSizes_(xSizes),
+ ySizes_(ySizes)
+ {
+ }
+
+ int parseLscData(const YamlObject &yamlSets,
+ std::map<unsigned int, LensShadingCorrection::Components> &lscData)
+ {
+ const auto &sets = yamlSets.asList();
+ for (const auto &yamlSet : sets) {
+ std::optional<LscPolynomial> pr, pgr, pgb, pb;
+ uint32_t ct = yamlSet["ct"].get<uint32_t>(0);
+
+ if (lscData.count(ct)) {
+ LOG(RkISP1Lsc, Error)
+ << "Multiple sets found for "
+ << "color temperature " << ct;
+ return -EINVAL;
+ }
+
+ LensShadingCorrection::Components &set = lscData[ct];
+ pr = yamlSet["r"].get<LscPolynomial>();
+ pgr = yamlSet["gr"].get<LscPolynomial>();
+ pgb = yamlSet["gb"].get<LscPolynomial>();
+ pb = yamlSet["b"].get<LscPolynomial>();
+
+ if (!(pr || pgr || pgb || pb)) {
+ LOG(RkISP1Lsc, Error)
+ << "Failed to parse polynomial for "
+ << "colour temperature " << ct;
+ return -EINVAL;
+ }
+
+ set.ct = ct;
+ pr->setReferenceImageSize(sensorSize_);
+ pgr->setReferenceImageSize(sensorSize_);
+ pgb->setReferenceImageSize(sensorSize_);
+ pb->setReferenceImageSize(sensorSize_);
+ set.r = samplePolynomial(*pr);
+ set.gr = samplePolynomial(*pgr);
+ set.gb = samplePolynomial(*pgb);
+ set.b = samplePolynomial(*pb);
+ }
+
+ if (lscData.empty()) {
+ LOG(RkISP1Lsc, Error) << "Failed to load any sets";
+ return -EINVAL;
+ }
+
+ return 0;
+ }
+
+private:
+ /*
+ * The lsc grid has custom spacing defined on half the range (see
+ * parseSizes() for details). For easier handling this function converts
+ * the spaces vector to positions and mirrors them. E.g.:
+ *
+ * input: | 0.2 | 0.3 |
+ * output: 0.0 0.2 0.5 0.8 1.0
+ */
+ std::vector<double> sizesListToPositions(const std::vector<double> &sizes)
+ {
+ const int half = sizes.size();
+ std::vector<double> res(half * 2 + 1);
+ double x = 0.0;
+
+ res[half] = 0.5;
+ for (int i = 1; i <= half; i++) {
+ x += sizes[half - i];
+ res[half - i] = 0.5 - x;
+ res[half + i] = 0.5 + x;
+ }
+
+ return res;
+ }
+
+ std::vector<uint16_t> samplePolynomial(const LscPolynomial &poly)
+ {
+ constexpr int k = RKISP1_CIF_ISP_LSC_SAMPLES_MAX;
+
+ double m = poly.getM();
+ double x0 = cropRectangle_.x / m;
+ double y0 = cropRectangle_.y / m;
+ double w = cropRectangle_.width / m;
+ double h = cropRectangle_.height / m;
+ std::vector<uint16_t> res;
+
+ assert(xSizes_.size() * 2 + 1 == k);
+ assert(ySizes_.size() * 2 + 1 == k);
+
+ res.reserve(k * k);
+
+ std::vector<double> xPos(sizesListToPositions(xSizes_));
+ std::vector<double> yPos(sizesListToPositions(ySizes_));
+
+ for (int y = 0; y < k; y++) {
+ for (int x = 0; x < k; x++) {
+ double xp = x0 + xPos[x] * w;
+ double yp = y0 + yPos[y] * h;
+ /*
+ * The hardware uses 2.10 fixed point format and
+ * limits the legal values to [1..3.999]. Scale
+ * and clamp the sampled value accordingly.
+ */
+ int v = static_cast<int>(
+ poly.sampleAtNormalizedPixelPos(xp, yp) *
+ 1024);
+ v = std::min(std::max(v, 1024), 4095);
+ res.push_back(v);
+ }
+ }
+ return res;
+ }
+
+ Size sensorSize_;
+ Rectangle cropRectangle_;
+ const std::vector<double> &xSizes_;
+ const std::vector<double> &ySizes_;
+};
+
+class LscTableLoader
+{
+public:
+ int parseLscData(const YamlObject &yamlSets,
+ std::map<unsigned int, LensShadingCorrection::Components> &lscData)
+ {
+ const auto &sets = yamlSets.asList();
+
+ for (const auto &yamlSet : sets) {
+ uint32_t ct = yamlSet["ct"].get<uint32_t>(0);
+
+ if (lscData.count(ct)) {
+ LOG(RkISP1Lsc, Error)
+ << "Multiple sets found for color temperature "
+ << ct;
+ return -EINVAL;
+ }
+
+ LensShadingCorrection::Components &set = lscData[ct];
+
+ set.ct = ct;
+ set.r = parseTable(yamlSet, "r");
+ set.gr = parseTable(yamlSet, "gr");
+ set.gb = parseTable(yamlSet, "gb");
+ set.b = parseTable(yamlSet, "b");
+
+ if (set.r.empty() || set.gr.empty() ||
+ set.gb.empty() || set.b.empty()) {
+ LOG(RkISP1Lsc, Error)
+ << "Set for color temperature " << ct
+ << " is missing tables";
+ return -EINVAL;
+ }
+ }
+
+ if (lscData.empty()) {
+ LOG(RkISP1Lsc, Error) << "Failed to load any sets";
+ return -EINVAL;
+ }
+
+ return 0;
+ }
+
+private:
+ std::vector<uint16_t> parseTable(const YamlObject &tuningData,
+ const char *prop)
+ {
+ static constexpr unsigned int kLscNumSamples =
+ RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX;
+
+ std::vector<uint16_t> table =
+ tuningData[prop].getList<uint16_t>().value_or(std::vector<uint16_t>{});
+ if (table.size() != kLscNumSamples) {
+ LOG(RkISP1Lsc, Error)
+ << "Invalid '" << prop << "' values: expected "
+ << kLscNumSamples
+ << " elements, got " << table.size();
+ return {};
+ }
+
+ return table;
+ }
+};
+
static std::vector<double> parseSizes(const YamlObject &tuningData,
const char *prop)
{
@@ -70,28 +295,10 @@ static std::vector<double> parseSizes(const YamlObject &tuningData,
return sizes;
}
-static std::vector<uint16_t> parseTable(const YamlObject &tuningData,
- const char *prop)
-{
- static constexpr unsigned int kLscNumSamples =
- RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX;
-
- std::vector<uint16_t> table =
- tuningData[prop].getList<uint16_t>().value_or(std::vector<uint16_t>{});
- if (table.size() != kLscNumSamples) {
- LOG(RkISP1Lsc, Error)
- << "Invalid '" << prop << "' values: expected "
- << kLscNumSamples
- << " elements, got " << table.size();
- return {};
- }
-
- return table;
-}
-
LensShadingCorrection::LensShadingCorrection()
- : lastCt_({ 0, 0 })
+ : lastAppliedCt_(0), lastAppliedQuantizedCt_(0)
{
+ sets_.setQuantization(kColourTemperatureChangeThreshhold);
}
/**
@@ -114,38 +321,30 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,
return -EINVAL;
}
- const auto &sets = yamlSets.asList();
- for (const auto &yamlSet : sets) {
- uint32_t ct = yamlSet["ct"].get<uint32_t>(0);
-
- if (sets_.count(ct)) {
- LOG(RkISP1Lsc, Error)
- << "Multiple sets found for color temperature "
- << ct;
- return -EINVAL;
- }
-
- Components &set = sets_[ct];
-
- set.ct = ct;
- set.r = parseTable(yamlSet, "r");
- set.gr = parseTable(yamlSet, "gr");
- set.gb = parseTable(yamlSet, "gb");
- set.b = parseTable(yamlSet, "b");
-
- if (set.r.empty() || set.gr.empty() ||
- set.gb.empty() || set.b.empty()) {
- LOG(RkISP1Lsc, Error)
- << "Set for color temperature " << ct
- << " is missing tables";
- return -EINVAL;
- }
+ std::map<unsigned int, Components> lscData;
+ int res = 0;
+ std::string type = tuningData["type"].get<std::string>("table");
+ if (type == "table") {
+ LOG(RkISP1Lsc, Debug) << "Loading tabular LSC data.";
+ auto loader = LscTableLoader();
+ res = loader.parseLscData(yamlSets, lscData);
+ } else if (type == "polynomial") {
+ LOG(RkISP1Lsc, Debug) << "Loading polynomial LSC data.";
+ auto loader = LscPolynomialLoader(context.sensorInfo.activeAreaSize,
+ context.sensorInfo.analogCrop,
+ xSize_,
+ ySize_);
+ res = loader.parseLscData(yamlSets, lscData);
+ } else {
+ LOG(RkISP1Lsc, Error) << "Unsupported LSC data type '"
+ << type << "'";
+ res = -EINVAL;
}
- if (sets_.empty()) {
- LOG(RkISP1Lsc, Error) << "Failed to load any sets";
- return -EINVAL;
- }
+ if (res)
+ return res;
+
+ sets_.setData(std::move(lscData));
return 0;
}
@@ -185,18 +384,12 @@ int LensShadingCorrection::configure(IPAContext &context,
return 0;
}
-void LensShadingCorrection::setParameters(rkisp1_params_cfg *params)
+void LensShadingCorrection::setParameters(rkisp1_cif_isp_lsc_config &config)
{
- struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
-
memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));
memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));
memcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));
memcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));
-
- params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;
- params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;
- params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;
}
void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,
@@ -208,131 +401,34 @@ void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,
std::copy(set.b.begin(), set.b.end(), &config.b_data_tbl[0][0]);
}
-/*
- * Interpolate LSC parameters based on color temperature value.
- */
-void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,
- const Components &set0,
- const Components &set1,
- const uint32_t ct)
-{
- double coeff0 = (set1.ct - ct) / static_cast<double>(set1.ct - set0.ct);
- double coeff1 = (ct - set0.ct) / static_cast<double>(set1.ct - set0.ct);
-
- for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {
- for (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {
- unsigned int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;
-
- config.r_data_tbl[i][j] =
- set0.r[sample] * coeff0 +
- set1.r[sample] * coeff1;
-
- config.gr_data_tbl[i][j] =
- set0.gr[sample] * coeff0 +
- set1.gr[sample] * coeff1;
-
- config.gb_data_tbl[i][j] =
- set0.gb[sample] * coeff0 +
- set1.gb[sample] * coeff1;
-
- config.b_data_tbl[i][j] =
- set0.b[sample] * coeff0 +
- set1.b[sample] * coeff1;
- }
- }
-}
-
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void LensShadingCorrection::prepare(IPAContext &context,
- const uint32_t frame,
+ [[maybe_unused]] const uint32_t frame,
[[maybe_unused]] IPAFrameContext &frameContext,
- rkisp1_params_cfg *params)
+ RkISP1Params *params)
{
- struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
-
- /*
- * If there is only one set, the configuration has already been done
- * for first frame.
- */
- if (sets_.size() == 1 && frame > 0)
- return;
-
- /*
- * If there is only one set, pick it. We can ignore lastCt_, as it will
- * never be relevant.
- */
- if (sets_.size() == 1) {
- setParameters(params);
- copyTable(config, sets_.cbegin()->second);
- return;
- }
-
uint32_t ct = context.activeState.awb.temperatureK;
- ct = std::clamp(ct, sets_.cbegin()->first, sets_.crbegin()->first);
-
- /*
- * If the original is the same, then it means the same adjustment would
- * be made. If the adjusted is the same, then it means that it's the
- * same as what was actually applied. Thus in these cases we can skip
- * reprogramming the LSC.
- *
- * original == adjusted can only happen if an interpolation
- * happened, or if original has an exact entry in sets_. This means
- * that if original != adjusted, then original was adjusted to
- * the nearest available entry in sets_, resulting in adjusted.
- * Clearly, any ct value that is in between original and adjusted
- * will be adjusted to the same adjusted value, so we can skip
- * reprogramming the LSC table.
- *
- * We also skip updating the original value, as the last one had a
- * larger bound and thus a larger range of ct values that will be
- * adjusted to the same adjusted.
- */
- if ((lastCt_.original <= ct && ct <= lastCt_.adjusted) ||
- (lastCt_.adjusted <= ct && ct <= lastCt_.original))
+ if (std::abs(static_cast<int>(ct) - static_cast<int>(lastAppliedCt_)) <
+ kColourTemperatureChangeThreshhold)
return;
-
- setParameters(params);
-
- /*
- * The color temperature matches exactly one of the available LSC tables.
- */
- if (sets_.count(ct)) {
- copyTable(config, sets_[ct]);
- lastCt_ = { ct, ct };
+ unsigned int quantizedCt;
+ const Components &set = sets_.getInterpolated(ct, &quantizedCt);
+ if (lastAppliedQuantizedCt_ == quantizedCt)
return;
- }
- /* No shortcuts left; we need to round or interpolate */
- auto iter = sets_.upper_bound(ct);
- const Components &set1 = iter->second;
- const Components &set0 = (--iter)->second;
- uint32_t ct0 = set0.ct;
- uint32_t ct1 = set1.ct;
- uint32_t diff0 = ct - ct0;
- uint32_t diff1 = ct1 - ct;
- static constexpr double kThreshold = 0.1;
- float threshold = kThreshold * (ct1 - ct0);
-
- if (diff0 < threshold || diff1 < threshold) {
- const Components &set = diff0 < diff1 ? set0 : set1;
- LOG(RkISP1Lsc, Debug) << "using LSC table for " << set.ct;
- copyTable(config, set);
- lastCt_ = { ct, set.ct };
- return;
- }
+ auto config = params->block<BlockType::Lsc>();
+ config.setEnabled(true);
+ setParameters(*config);
+ copyTable(*config, set);
+
+ lastAppliedCt_ = ct;
+ lastAppliedQuantizedCt_ = quantizedCt;
- /*
- * ct is not within 10% of the difference between the neighbouring
- * color temperatures, so we need to interpolate.
- */
LOG(RkISP1Lsc, Debug)
- << "ct is " << ct << ", interpolating between "
- << ct0 << " and " << ct1;
- interpolateTable(config, set0, set1, ct);
- lastCt_ = { ct, ct };
+ << "ct is " << ct << ", quantized to "
+ << quantizedCt;
}
REGISTER_IPA_ALGORITHM(LensShadingCorrection, "LensShadingCorrection")
diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h
index 5baf5927..5a0824e3 100644
--- a/src/ipa/rkisp1/algorithms/lsc.h
+++ b/src/ipa/rkisp1/algorithms/lsc.h
@@ -9,6 +9,8 @@
#include <map>
+#include "libipa/interpolator.h"
+
#include "algorithm.h"
namespace libcamera {
@@ -25,9 +27,8 @@ public:
int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
- rkisp1_params_cfg *params) override;
+ RkISP1Params *params) override;
-private:
struct Components {
uint32_t ct;
std::vector<uint16_t> r;
@@ -36,23 +37,23 @@ private:
std::vector<uint16_t> b;
};
- void setParameters(rkisp1_params_cfg *params);
+private:
+ void setParameters(rkisp1_cif_isp_lsc_config &config);
void copyTable(rkisp1_cif_isp_lsc_config &config, const Components &set0);
void interpolateTable(rkisp1_cif_isp_lsc_config &config,
const Components &set0, const Components &set1,
const uint32_t ct);
- std::map<uint32_t, Components> sets_;
+ ipa::Interpolator<Components> sets_;
std::vector<double> xSize_;
std::vector<double> ySize_;
uint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
uint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
uint16_t xSizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
uint16_t ySizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
- struct {
- uint32_t original;
- uint32_t adjusted;
- } lastCt_;
+
+ unsigned int lastAppliedCt_;
+ unsigned int lastAppliedQuantizedCt_;
};
} /* namespace ipa::rkisp1::algorithms */
diff --git a/src/ipa/rkisp1/algorithms/lux.cpp b/src/ipa/rkisp1/algorithms/lux.cpp
new file mode 100644
index 00000000..a467767e
--- /dev/null
+++ b/src/ipa/rkisp1/algorithms/lux.cpp
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * lux.cpp - RkISP1 Lux control
+ */
+
+#include "lux.h"
+
+#include <libcamera/base/log.h>
+
+#include <libcamera/control_ids.h>
+
+#include "libipa/histogram.h"
+#include "libipa/lux.h"
+
+/**
+ * \file lux.h
+ */
+
+namespace libcamera {
+
+namespace ipa::rkisp1::algorithms {
+
+/**
+ * \class Lux
+ * \brief RkISP1 Lux control
+ *
+ * The Lux algorithm is responsible for estimating the lux level of the image.
+ * It doesn't take or generate any controls, but it provides a lux level for
+ * other algorithms (such as AGC) to use.
+ */
+
+/**
+ * \brief Construct an rkisp1 Lux algo module
+ */
+Lux::Lux()
+{
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::init
+ */
+int Lux::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData)
+{
+ return lux_.parseTuningData(tuningData);
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::process
+ */
+void Lux::process(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const rkisp1_stat_buffer *stats,
+ ControlList &metadata)
+{
+ utils::Duration exposureTime = context.configuration.sensor.lineDuration
+ * frameContext.sensor.exposure;
+ double gain = frameContext.sensor.gain;
+
+ /* \todo Deduplicate the histogram calculation from AGC */
+ const rkisp1_cif_isp_stat *params = &stats->params;
+ Histogram yHist({ params->hist.hist_bins, context.hw->numHistogramBins },
+ [](uint32_t x) { return x >> 4; });
+
+ double lux = lux_.estimateLux(exposureTime, gain, 1.0, yHist);
+ frameContext.lux.lux = lux;
+ metadata.set(controls::Lux, lux);
+}
+
+REGISTER_IPA_ALGORITHM(Lux, "Lux")
+
+} /* namespace ipa::rkisp1::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/rkisp1/algorithms/lux.h b/src/ipa/rkisp1/algorithms/lux.h
new file mode 100644
index 00000000..8a90de55
--- /dev/null
+++ b/src/ipa/rkisp1/algorithms/lux.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * lux.h - RkISP1 Lux control
+ */
+
+#pragma once
+
+#include <sys/types.h>
+
+#include "libipa/lux.h"
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::rkisp1::algorithms {
+
+class Lux : public Algorithm
+{
+public:
+ Lux();
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const rkisp1_stat_buffer *stats,
+ ControlList &metadata) override;
+
+private:
+ ipa::Lux lux_;
+};
+
+} /* namespace ipa::rkisp1::algorithms */
+} /* namespace libcamera */
diff --git a/src/ipa/rkisp1/algorithms/meson.build b/src/ipa/rkisp1/algorithms/meson.build
index 1734a667..c66b0b70 100644
--- a/src/ipa/rkisp1/algorithms/meson.build
+++ b/src/ipa/rkisp1/algorithms/meson.build
@@ -12,4 +12,5 @@ rkisp1_ipa_algorithms = files([
'goc.cpp',
'gsl.cpp',
'lsc.cpp',
+ 'lux.cpp',
])
diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp
index 9f3f576a..99611bd5 100644
--- a/src/ipa/rkisp1/ipa_context.cpp
+++ b/src/ipa/rkisp1/ipa_context.cpp
@@ -78,11 +78,11 @@ namespace libcamera::ipa::rkisp1 {
* \var IPASessionConfiguration::sensor
* \brief Sensor-specific configuration of the IPA
*
- * \var IPASessionConfiguration::sensor.minShutterSpeed
- * \brief Minimum shutter speed supported with the sensor
+ * \var IPASessionConfiguration::sensor.minExposureTime
+ * \brief Minimum exposure time supported with the sensor
*
- * \var IPASessionConfiguration::sensor.maxShutterSpeed
- * \brief Maximum shutter speed supported with the sensor
+ * \var IPASessionConfiguration::sensor.maxExposureTime
+ * \brief Maximum exposure time supported with the sensor
*
* \var IPASessionConfiguration::sensor.minAnalogueGain
* \brief Minimum analogue gain supported with the sensor
@@ -106,6 +106,11 @@ namespace libcamera::ipa::rkisp1 {
*/
/**
+ * \var IPASessionConfiguration::paramFormat
+ * \brief The fourcc of the parameters buffers format
+ */
+
+/**
* \struct IPAActiveState
* \brief Active state for algorithms
*
@@ -160,8 +165,11 @@ namespace libcamera::ipa::rkisp1 {
* \var IPAActiveState::agc.automatic.gain
* \brief Automatic analogue gain multiplier
*
- * \var IPAActiveState::agc.autoEnabled
- * \brief Manual/automatic AGC state as set by the AeEnable control
+ * \var IPAActiveState::agc.autoExposureEnabled
+ * \brief Manual/automatic AGC state (exposure) as set by the ExposureTimeMode control
+ *
+ * \var IPAActiveState::agc.autoGainEnabled
+ * \brief Manual/automatic AGC state (gain) as set by the AnalogueGainMode control
*
* \var IPAActiveState::agc.constraintMode
* \brief Constraint mode as set by the AeConstraintMode control
@@ -172,6 +180,9 @@ namespace libcamera::ipa::rkisp1 {
* \var IPAActiveState::agc.meteringMode
* \brief Metering mode as set by the AeMeteringMode control
*
+ * \var IPAActiveState::agc.minFrameDuration
+ * \brief Minimum frame duration as set by the FrameDurationLimits control
+ *
* \var IPAActiveState::agc.maxFrameDuration
* \brief Maximum frame duration as set by the FrameDurationLimits control
*/
@@ -183,30 +194,12 @@ namespace libcamera::ipa::rkisp1 {
* \struct IPAActiveState::awb.gains
* \brief White balance gains
*
- * \struct IPAActiveState::awb.gains.manual
+ * \var IPAActiveState::awb.gains.manual
* \brief Manual white balance gains (set through requests)
*
- * \var IPAActiveState::awb.gains.manual.red
- * \brief Manual white balance gain for R channel
- *
- * \var IPAActiveState::awb.gains.manual.green
- * \brief Manual white balance gain for G channel
- *
- * \var IPAActiveState::awb.gains.manual.blue
- * \brief Manual white balance gain for B channel
- *
- * \struct IPAActiveState::awb.gains.automatic
+ * \var IPAActiveState::awb.gains.automatic
* \brief Automatic white balance gains (computed by the algorithm)
*
- * \var IPAActiveState::awb.gains.automatic.red
- * \brief Automatic white balance gain for R channel
- *
- * \var IPAActiveState::awb.gains.automatic.green
- * \brief Automatic white balance gain for G channel
- *
- * \var IPAActiveState::awb.gains.automatic.blue
- * \brief Automatic white balance gain for B channel
- *
* \var IPAActiveState::awb.temperatureK
* \brief Estimated color temperature
*
@@ -292,7 +285,9 @@ namespace libcamera::ipa::rkisp1 {
* \brief Automatic Gain Control parameters for this frame
*
* The exposure and gain are provided by the AGC algorithm, and are to be
- * applied to the sensor in order to take effect for this frame.
+ * applied to the sensor in order to take effect for this frame. Additionally
+ * the vertical blanking period is determined to maintain a consistent frame
+ * rate matched to the FrameDurationLimits as set by the user.
*
* \var IPAFrameContext::agc.exposure
* \brief Exposure time expressed as a number of lines computed by the algorithm
@@ -302,8 +297,14 @@ namespace libcamera::ipa::rkisp1 {
*
* The gain should be adapted to the sensor specific gain code before applying.
*
- * \var IPAFrameContext::agc.autoEnabled
- * \brief Manual/automatic AGC state as set by the AeEnable control
+ * \var IPAFrameContext::agc.vblank
+ * \brief Vertical blanking parameter computed by the algorithm
+ *
+ * \var IPAFrameContext::agc.autoExposureEnabled
+ * \brief Manual/automatic AGC state (exposure) as set by the ExposureTimeMode control
+ *
+ * \var IPAFrameContext::agc.autoGainEnabled
+ * \brief Manual/automatic AGC state (gain) as set by the AnalogueGainMode control
*
* \var IPAFrameContext::agc.constraintMode
* \brief Constraint mode as set by the AeConstraintMode control
@@ -314,11 +315,27 @@ namespace libcamera::ipa::rkisp1 {
* \var IPAFrameContext::agc.meteringMode
* \brief Metering mode as set by the AeMeteringMode control
*
+ * \var IPAFrameContext::agc.minFrameDuration
+ * \brief Minimum frame duration as set by the FrameDurationLimits control
+ *
* \var IPAFrameContext::agc.maxFrameDuration
* \brief Maximum frame duration as set by the FrameDurationLimits control
*
+ * \var IPAFrameContext::agc.frameDuration
+ * \brief The actual FrameDuration used by the algorithm for the frame
+ *
* \var IPAFrameContext::agc.updateMetering
* \brief Indicate if new ISP AGC metering parameters need to be applied
+ *
+ * \var IPAFrameContext::agc.autoExposureModeChange
+ * \brief Indicate if autoExposureEnabled has changed from true in the previous
+ * frame to false in the current frame, and no manual exposure value has been
+ * supplied in the current frame.
+ *
+ * \var IPAFrameContext::agc.autoGainModeChange
+ * \brief Indicate if autoGainEnabled has changed from true in the previous
+ * frame to false in the current frame, and no manual gain value has been
+ * supplied in the current frame.
*/
/**
@@ -328,15 +345,6 @@ namespace libcamera::ipa::rkisp1 {
* \struct IPAFrameContext::awb.gains
* \brief White balance gains
*
- * \var IPAFrameContext::awb.gains.red
- * \brief White balance gain for R channel
- *
- * \var IPAFrameContext::awb.gains.green
- * \brief White balance gain for G channel
- *
- * \var IPAFrameContext::awb.gains.blue
- * \brief White balance gain for B channel
- *
* \var IPAFrameContext::awb.temperatureK
* \brief Estimated color temperature
*
@@ -419,6 +427,9 @@ namespace libcamera::ipa::rkisp1 {
* \var IPAContext::hw
* \brief RkISP1 version-specific hardware parameters
*
+ * \var IPAContext::sensorInfo
+ * \brief The IPA session sensorInfo, immutable during the session
+ *
* \var IPAContext::configuration
* \brief The IPA session configuration, immutable during the session
*
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
index 061efc0c..474f7036 100644
--- a/src/ipa/rkisp1/ipa_context.h
+++ b/src/ipa/rkisp1/ipa_context.h
@@ -18,9 +18,14 @@
#include <libcamera/controls.h>
#include <libcamera/geometry.h>
+#include <libcamera/ipa/core_ipa_interface.h>
+
+#include "libcamera/internal/debug_controls.h"
+#include "libcamera/internal/matrix.h"
+#include "libcamera/internal/vector.h"
+
#include <libipa/camera_sensor_helper.h>
#include <libipa/fc_queue.h>
-#include <libipa/matrix.h>
namespace libcamera {
@@ -31,6 +36,7 @@ struct IPAHwSettings {
unsigned int numHistogramBins;
unsigned int numHistogramWeights;
unsigned int numGammaOutSamples;
+ bool compand;
};
struct IPASessionConfiguration {
@@ -48,8 +54,8 @@ struct IPASessionConfiguration {
} lsc;
struct {
- utils::Duration minShutterSpeed;
- utils::Duration maxShutterSpeed;
+ utils::Duration minExposureTime;
+ utils::Duration maxExposureTime;
double minAnalogueGain;
double maxAnalogueGain;
@@ -59,6 +65,7 @@ struct IPASessionConfiguration {
} sensor;
bool raw;
+ uint32_t paramFormat;
};
struct IPAActiveState {
@@ -72,25 +79,19 @@ struct IPAActiveState {
double gain;
} automatic;
- bool autoEnabled;
+ bool autoExposureEnabled;
+ bool autoGainEnabled;
controls::AeConstraintModeEnum constraintMode;
controls::AeExposureModeEnum exposureMode;
controls::AeMeteringModeEnum meteringMode;
+ utils::Duration minFrameDuration;
utils::Duration maxFrameDuration;
} agc;
struct {
struct {
- struct {
- double red;
- double green;
- double blue;
- } manual;
- struct {
- double red;
- double green;
- double blue;
- } automatic;
+ RGB<double> manual;
+ RGB<double> automatic;
} gains;
unsigned int temperatureK;
@@ -125,22 +126,24 @@ struct IPAFrameContext : public FrameContext {
struct {
uint32_t exposure;
double gain;
- bool autoEnabled;
+ uint32_t vblank;
+ bool autoExposureEnabled;
+ bool autoGainEnabled;
controls::AeConstraintModeEnum constraintMode;
controls::AeExposureModeEnum exposureMode;
controls::AeMeteringModeEnum meteringMode;
+ utils::Duration minFrameDuration;
utils::Duration maxFrameDuration;
+ utils::Duration frameDuration;
bool updateMetering;
+ bool autoExposureModeChange;
+ bool autoGainModeChange;
} agc;
struct {
- struct {
- double red;
- double green;
- double blue;
- } gains;
-
+ RGB<double> gains;
bool autoEnabled;
+ unsigned int temperatureK;
} awb;
struct {
@@ -174,10 +177,20 @@ struct IPAFrameContext : public FrameContext {
struct {
Matrix<float, 3, 3> ccm;
} ccm;
+
+ struct {
+ double lux;
+ } lux;
};
struct IPAContext {
+ IPAContext(unsigned int frameContextSize)
+ : hw(nullptr), frameContexts(frameContextSize)
+ {
+ }
+
const IPAHwSettings *hw;
+ IPACameraSensorInfo sensorInfo;
IPASessionConfiguration configuration;
IPAActiveState activeState;
@@ -185,6 +198,8 @@ struct IPAContext {
ControlInfoMap::Map ctrlMap;
+ DebugMetadata debugMetadata;
+
/* Interface to the Camera Helper */
std::unique_ptr<CameraSensorHelper> camHelper;
};
diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build
index 160ef52d..26a9fa40 100644
--- a/src/ipa/rkisp1/meson.build
+++ b/src/ipa/rkisp1/meson.build
@@ -7,8 +7,8 @@ ipa_name = 'ipa_rkisp1'
rkisp1_ipa_sources = files([
'ipa_context.cpp',
+ 'params.cpp',
'rkisp1.cpp',
- 'utils.cpp',
])
rkisp1_ipa_sources += rkisp1_ipa_algorithms
diff --git a/src/ipa/rkisp1/module.h b/src/ipa/rkisp1/module.h
index 16c3e43e..69e9bc82 100644
--- a/src/ipa/rkisp1/module.h
+++ b/src/ipa/rkisp1/module.h
@@ -14,13 +14,14 @@
#include <libipa/module.h>
#include "ipa_context.h"
+#include "params.h"
namespace libcamera {
namespace ipa::rkisp1 {
using Module = ipa::Module<IPAContext, IPAFrameContext, IPACameraSensorInfo,
- rkisp1_params_cfg, rkisp1_stat_buffer>;
+ RkISP1Params, rkisp1_stat_buffer>;
} /* namespace ipa::rkisp1 */
diff --git a/src/ipa/rkisp1/params.cpp b/src/ipa/rkisp1/params.cpp
new file mode 100644
index 00000000..4c0b051c
--- /dev/null
+++ b/src/ipa/rkisp1/params.cpp
@@ -0,0 +1,222 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * RkISP1 ISP Parameters
+ */
+
+#include "params.h"
+
+#include <map>
+#include <stddef.h>
+#include <string.h>
+
+#include <linux/rkisp1-config.h>
+#include <linux/videodev2.h>
+
+#include <libcamera/base/log.h>
+#include <libcamera/base/utils.h>
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(RkISP1Params)
+
+namespace ipa::rkisp1 {
+
+namespace {
+
+struct BlockTypeInfo {
+ enum rkisp1_ext_params_block_type type;
+ size_t size;
+ size_t offset;
+ uint32_t enableBit;
+};
+
+#define RKISP1_BLOCK_TYPE_ENTRY(block, id, type, category, bit) \
+ { BlockType::block, { \
+ RKISP1_EXT_PARAMS_BLOCK_TYPE_##id, \
+ sizeof(struct rkisp1_cif_isp_##type##_config), \
+ offsetof(struct rkisp1_params_cfg, category.type##_config), \
+ RKISP1_CIF_ISP_MODULE_##bit, \
+ } }
+
+#define RKISP1_BLOCK_TYPE_ENTRY_MEAS(block, id, type) \
+ RKISP1_BLOCK_TYPE_ENTRY(block, id##_MEAS, type, meas, id)
+
+#define RKISP1_BLOCK_TYPE_ENTRY_OTHERS(block, id, type) \
+ RKISP1_BLOCK_TYPE_ENTRY(block, id, type, others, id)
+
+#define RKISP1_BLOCK_TYPE_ENTRY_EXT(block, id, type) \
+ { BlockType::block, { \
+ RKISP1_EXT_PARAMS_BLOCK_TYPE_##id, \
+ sizeof(struct rkisp1_cif_isp_##type##_config), \
+ 0, 0, \
+ } }
+
+const std::map<BlockType, BlockTypeInfo> kBlockTypeInfo = {
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Bls, BLS, bls),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Dpcc, DPCC, dpcc),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Sdg, SDG, sdg),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(AwbGain, AWB_GAIN, awb_gain),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Flt, FLT, flt),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Bdm, BDM, bdm),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Ctk, CTK, ctk),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Goc, GOC, goc),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Dpf, DPF, dpf),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(DpfStrength, DPF_STRENGTH, dpf_strength),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Cproc, CPROC, cproc),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Ie, IE, ie),
+ RKISP1_BLOCK_TYPE_ENTRY_OTHERS(Lsc, LSC, lsc),
+ RKISP1_BLOCK_TYPE_ENTRY_MEAS(Awb, AWB, awb_meas),
+ RKISP1_BLOCK_TYPE_ENTRY_MEAS(Hst, HST, hst),
+ RKISP1_BLOCK_TYPE_ENTRY_MEAS(Aec, AEC, aec),
+ RKISP1_BLOCK_TYPE_ENTRY_MEAS(Afc, AFC, afc),
+ RKISP1_BLOCK_TYPE_ENTRY_EXT(CompandBls, COMPAND_BLS, compand_bls),
+ RKISP1_BLOCK_TYPE_ENTRY_EXT(CompandExpand, COMPAND_EXPAND, compand_curve),
+ RKISP1_BLOCK_TYPE_ENTRY_EXT(CompandCompress, COMPAND_COMPRESS, compand_curve),
+};
+
+} /* namespace */
+
+RkISP1ParamsBlockBase::RkISP1ParamsBlockBase(RkISP1Params *params, BlockType type,
+ const Span<uint8_t> &data)
+ : params_(params), type_(type)
+{
+ if (params_->format() == V4L2_META_FMT_RK_ISP1_EXT_PARAMS) {
+ header_ = data.subspan(0, sizeof(rkisp1_ext_params_block_header));
+ data_ = data.subspan(sizeof(rkisp1_ext_params_block_header));
+ } else {
+ data_ = data;
+ }
+}
+
+void RkISP1ParamsBlockBase::setEnabled(bool enabled)
+{
+ /*
+ * For the legacy fixed format, blocks are enabled in the top-level
+ * header. Delegate to the RkISP1Params class.
+ */
+ if (params_->format() == V4L2_META_FMT_RK_ISP1_PARAMS)
+ return params_->setBlockEnabled(type_, enabled);
+
+ /*
+ * For the extensible format, set the enable and disable flags in the
+ * block header directly.
+ */
+ struct rkisp1_ext_params_block_header *header =
+ reinterpret_cast<struct rkisp1_ext_params_block_header *>(header_.data());
+ header->flags &= ~(RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE |
+ RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE);
+ header->flags |= enabled ? RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE
+ : RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE;
+}
+
+RkISP1Params::RkISP1Params(uint32_t format, Span<uint8_t> data)
+ : format_(format), data_(data), used_(0)
+{
+ if (format_ == V4L2_META_FMT_RK_ISP1_EXT_PARAMS) {
+ struct rkisp1_ext_params_cfg *cfg =
+ reinterpret_cast<struct rkisp1_ext_params_cfg *>(data.data());
+
+ cfg->version = RKISP1_EXT_PARAM_BUFFER_V1;
+ cfg->data_size = 0;
+
+ used_ += offsetof(struct rkisp1_ext_params_cfg, data);
+ } else {
+ memset(data.data(), 0, data.size());
+ used_ = sizeof(struct rkisp1_params_cfg);
+ }
+}
+
+void RkISP1Params::setBlockEnabled(BlockType type, bool enabled)
+{
+ const BlockTypeInfo &info = kBlockTypeInfo.at(type);
+
+ struct rkisp1_params_cfg *cfg =
+ reinterpret_cast<struct rkisp1_params_cfg *>(data_.data());
+ if (enabled)
+ cfg->module_ens |= info.enableBit;
+ else
+ cfg->module_ens &= ~info.enableBit;
+}
+
+Span<uint8_t> RkISP1Params::block(BlockType type)
+{
+ auto infoIt = kBlockTypeInfo.find(type);
+ if (infoIt == kBlockTypeInfo.end()) {
+ LOG(RkISP1Params, Error)
+ << "Invalid parameters block type "
+ << utils::to_underlying(type);
+ return {};
+ }
+
+ const BlockTypeInfo &info = infoIt->second;
+
+ /*
+ * For the legacy format, return a block referencing the fixed location
+ * of the data.
+ */
+ if (format_ == V4L2_META_FMT_RK_ISP1_PARAMS) {
+ /*
+ * Blocks available only in extended parameters have an offset
+ * of 0. Return nullptr in that case.
+ */
+ if (info.offset == 0) {
+ LOG(RkISP1Params, Error)
+ << "Block type " << utils::to_underlying(type)
+ << " unavailable in fixed parameters format";
+ return {};
+ }
+
+ struct rkisp1_params_cfg *cfg =
+ reinterpret_cast<struct rkisp1_params_cfg *>(data_.data());
+
+ cfg->module_cfg_update |= info.enableBit;
+ cfg->module_en_update |= info.enableBit;
+
+ return data_.subspan(info.offset, info.size);
+ }
+
+ /*
+ * For the extensible format, allocate memory for the block, including
+ * the header. Look up the block in the cache first. If an algorithm
+ * requests the same block type twice, it should get the same block.
+ */
+ auto cacheIt = blocks_.find(type);
+ if (cacheIt != blocks_.end())
+ return cacheIt->second;
+
+ /* Make sure we don't run out of space. */
+ size_t size = sizeof(struct rkisp1_ext_params_block_header)
+ + ((info.size + 7) & ~7);
+ if (size > data_.size() - used_) {
+ LOG(RkISP1Params, Error)
+ << "Out of memory to allocate block type "
+ << utils::to_underlying(type);
+ return {};
+ }
+
+ /* Allocate a new block, clear its memory, and initialize its header. */
+ Span<uint8_t> block = data_.subspan(used_, size);
+ used_ += size;
+
+ struct rkisp1_ext_params_cfg *cfg =
+ reinterpret_cast<struct rkisp1_ext_params_cfg *>(data_.data());
+ cfg->data_size += size;
+
+ memset(block.data(), 0, block.size());
+
+ struct rkisp1_ext_params_block_header *header =
+ reinterpret_cast<struct rkisp1_ext_params_block_header *>(block.data());
+ header->type = info.type;
+ header->size = block.size();
+
+ /* Update the cache. */
+ blocks_[type] = block;
+
+ return block;
+}
+
+} /* namespace ipa::rkisp1 */
+
+} /* namespace libcamera */
diff --git a/src/ipa/rkisp1/params.h b/src/ipa/rkisp1/params.h
new file mode 100644
index 00000000..40450e34
--- /dev/null
+++ b/src/ipa/rkisp1/params.h
@@ -0,0 +1,163 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ *
+ * RkISP1 ISP Parameters
+ */
+
+#pragma once
+
+#include <map>
+#include <stdint.h>
+
+#include <linux/rkisp1-config.h>
+
+#include <libcamera/base/class.h>
+#include <libcamera/base/span.h>
+
+namespace libcamera {
+
+namespace ipa::rkisp1 {
+
+enum class BlockType {
+ Bls,
+ Dpcc,
+ Sdg,
+ AwbGain,
+ Flt,
+ Bdm,
+ Ctk,
+ Goc,
+ Dpf,
+ DpfStrength,
+ Cproc,
+ Ie,
+ Lsc,
+ Awb,
+ Hst,
+ Aec,
+ Afc,
+ CompandBls,
+ CompandExpand,
+ CompandCompress,
+};
+
+namespace details {
+
+template<BlockType B>
+struct block_type {
+};
+
+#define RKISP1_DEFINE_BLOCK_TYPE(blockType, blockStruct) \
+template<> \
+struct block_type<BlockType::blockType> { \
+ using type = struct rkisp1_cif_isp_##blockStruct##_config; \
+};
+
+RKISP1_DEFINE_BLOCK_TYPE(Bls, bls)
+RKISP1_DEFINE_BLOCK_TYPE(Dpcc, dpcc)
+RKISP1_DEFINE_BLOCK_TYPE(Sdg, sdg)
+RKISP1_DEFINE_BLOCK_TYPE(AwbGain, awb_gain)
+RKISP1_DEFINE_BLOCK_TYPE(Flt, flt)
+RKISP1_DEFINE_BLOCK_TYPE(Bdm, bdm)
+RKISP1_DEFINE_BLOCK_TYPE(Ctk, ctk)
+RKISP1_DEFINE_BLOCK_TYPE(Goc, goc)
+RKISP1_DEFINE_BLOCK_TYPE(Dpf, dpf)
+RKISP1_DEFINE_BLOCK_TYPE(DpfStrength, dpf_strength)
+RKISP1_DEFINE_BLOCK_TYPE(Cproc, cproc)
+RKISP1_DEFINE_BLOCK_TYPE(Ie, ie)
+RKISP1_DEFINE_BLOCK_TYPE(Lsc, lsc)
+RKISP1_DEFINE_BLOCK_TYPE(Awb, awb_meas)
+RKISP1_DEFINE_BLOCK_TYPE(Hst, hst)
+RKISP1_DEFINE_BLOCK_TYPE(Aec, aec)
+RKISP1_DEFINE_BLOCK_TYPE(Afc, afc)
+RKISP1_DEFINE_BLOCK_TYPE(CompandBls, compand_bls)
+RKISP1_DEFINE_BLOCK_TYPE(CompandExpand, compand_curve)
+RKISP1_DEFINE_BLOCK_TYPE(CompandCompress, compand_curve)
+
+} /* namespace details */
+
+class RkISP1Params;
+
+class RkISP1ParamsBlockBase
+{
+public:
+ RkISP1ParamsBlockBase(RkISP1Params *params, BlockType type,
+ const Span<uint8_t> &data);
+
+ Span<uint8_t> data() const { return data_; }
+
+ void setEnabled(bool enabled);
+
+private:
+ LIBCAMERA_DISABLE_COPY(RkISP1ParamsBlockBase)
+
+ RkISP1Params *params_;
+ BlockType type_;
+ Span<uint8_t> header_;
+ Span<uint8_t> data_;
+};
+
+template<BlockType B>
+class RkISP1ParamsBlock : public RkISP1ParamsBlockBase
+{
+public:
+ using Type = typename details::block_type<B>::type;
+
+ RkISP1ParamsBlock(RkISP1Params *params, const Span<uint8_t> &data)
+ : RkISP1ParamsBlockBase(params, B, data)
+ {
+ }
+
+ const Type *operator->() const
+ {
+ return reinterpret_cast<const Type *>(data().data());
+ }
+
+ Type *operator->()
+ {
+ return reinterpret_cast<Type *>(data().data());
+ }
+
+ const Type &operator*() const &
+ {
+ return *reinterpret_cast<const Type *>(data().data());
+ }
+
+ Type &operator*() &
+ {
+ return *reinterpret_cast<Type *>(data().data());
+ }
+};
+
+class RkISP1Params
+{
+public:
+ RkISP1Params(uint32_t format, Span<uint8_t> data);
+
+ template<BlockType B>
+ RkISP1ParamsBlock<B> block()
+ {
+ return RkISP1ParamsBlock<B>(this, block(B));
+ }
+
+ uint32_t format() const { return format_; }
+ size_t size() const { return used_; }
+
+private:
+ friend class RkISP1ParamsBlockBase;
+
+ Span<uint8_t> block(BlockType type);
+ void setBlockEnabled(BlockType type, bool enabled);
+
+ uint32_t format_;
+
+ Span<uint8_t> data_;
+ size_t used_;
+
+ std::map<BlockType, Span<uint8_t>> blocks_;
+};
+
+} /* namespace ipa::rkisp1 */
+
+} /* namespace libcamera*/
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 23e0826c..70ce0cba 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -6,8 +6,8 @@
*/
#include <algorithm>
-#include <math.h>
-#include <queue>
+#include <array>
+#include <chrono>
#include <stdint.h>
#include <string.h>
@@ -18,11 +18,13 @@
#include <libcamera/base/log.h>
#include <libcamera/control_ids.h>
+#include <libcamera/controls.h>
#include <libcamera/framebuffer.h>
+#include <libcamera/request.h>
+
#include <libcamera/ipa/ipa_interface.h>
#include <libcamera/ipa/ipa_module_info.h>
#include <libcamera/ipa/rkisp1_ipa_interface.h>
-#include <libcamera/request.h>
#include "libcamera/internal/formats.h"
#include "libcamera/internal/mapped_framebuffer.h"
@@ -31,6 +33,7 @@
#include "algorithms/algorithm.h"
#include "ipa_context.h"
+#include "params.h"
namespace libcamera {
@@ -62,9 +65,9 @@ public:
void unmapBuffers(const std::vector<unsigned int> &ids) override;
void queueRequest(const uint32_t frame, const ControlList &controls) override;
- void fillParamsBuffer(const uint32_t frame, const uint32_t bufferId) override;
- void processStatsBuffer(const uint32_t frame, const uint32_t bufferId,
- const ControlList &sensorControls) override;
+ void computeParams(const uint32_t frame, const uint32_t bufferId) override;
+ void processStats(const uint32_t frame, const uint32_t bufferId,
+ const ControlList &sensorControls) override;
protected:
std::string logPrefix() const override;
@@ -91,6 +94,15 @@ const IPAHwSettings ipaHwSettingsV10{
RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,
RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,
RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,
+ false,
+};
+
+const IPAHwSettings ipaHwSettingsIMX8MP{
+ RKISP1_CIF_ISP_AE_MEAN_MAX_V10,
+ RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,
+ RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,
+ RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,
+ true,
};
const IPAHwSettings ipaHwSettingsV12{
@@ -98,12 +110,14 @@ const IPAHwSettings ipaHwSettingsV12{
RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12,
RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12,
RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12,
+ false,
};
/* List of controls handled by the RkISP1 IPA */
const ControlInfoMap::Map rkisp1Controls{
{ &controls::AwbEnable, ControlInfo(false, true) },
{ &controls::ColourGains, ControlInfo(0.0f, 3.996f, 1.0f) },
+ { &controls::DebugMetadataEnable, ControlInfo(false, true, false) },
{ &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) },
{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },
};
@@ -111,7 +125,7 @@ const ControlInfoMap::Map rkisp1Controls{
} /* namespace */
IPARkISP1::IPARkISP1()
- : context_({ {}, {}, {}, { kMaxFrameContexts }, {}, {} })
+ : context_(kMaxFrameContexts)
{
}
@@ -128,9 +142,11 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,
/* \todo Add support for other revisions */
switch (hwRevision) {
case RKISP1_V10:
- case RKISP1_V_IMX8MP:
context_.hw = &ipaHwSettingsV10;
break;
+ case RKISP1_V_IMX8MP:
+ context_.hw = &ipaHwSettingsIMX8MP;
+ break;
case RKISP1_V12:
context_.hw = &ipaHwSettingsV12;
break;
@@ -143,6 +159,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,
LOG(IPARkISP1, Debug) << "Hardware revision is " << hwRevision;
+ context_.sensorInfo = sensorInfo;
+
context_.camHelper = CameraSensorHelperFactoryBase::create(settings.sensorModel);
if (!context_.camHelper) {
LOG(IPARkISP1, Error)
@@ -151,8 +169,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,
return -ENODEV;
}
- context_.configuration.sensor.lineDuration = sensorInfo.minLineLength
- * 1.0s / sensorInfo.pixelRate;
+ context_.configuration.sensor.lineDuration =
+ sensorInfo.minLineLength * 1.0s / sensorInfo.pixelRate;
/* Load the tuning data file. */
File file(settings.configurationFile);
@@ -193,8 +211,7 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,
int IPARkISP1::start()
{
- setControls(0);
-
+ /* \todo Properly handle startup controls. */
return 0;
}
@@ -226,6 +243,8 @@ int IPARkISP1::configure(const IPAConfigInfo &ipaConfig,
context_.activeState = {};
context_.frameContexts.clear();
+ context_.configuration.paramFormat = ipaConfig.paramFormat;
+
const IPACameraSensorInfo &info = ipaConfig.sensorInfo;
const ControlInfo vBlank = sensorControls_.find(V4L2_CID_VBLANK)->second;
context_.configuration.sensor.defVBlank = vBlank.def().get<int32_t>();
@@ -237,14 +256,14 @@ int IPARkISP1::configure(const IPAConfigInfo &ipaConfig,
/*
* When the AGC computes the new exposure values for a frame, it needs
- * to know the limits for shutter speed and analogue gain.
- * As it depends on the sensor, update it with the controls.
+ * to know the limits for exposure time and analogue gain. As it depends
+ * on the sensor, update it with the controls.
*
- * \todo take VBLANK into account for maximum shutter speed
+ * \todo take VBLANK into account for maximum exposure time
*/
- context_.configuration.sensor.minShutterSpeed =
+ context_.configuration.sensor.minExposureTime =
minExposure * context_.configuration.sensor.lineDuration;
- context_.configuration.sensor.maxShutterSpeed =
+ context_.configuration.sensor.maxExposureTime =
maxExposure * context_.configuration.sensor.lineDuration;
context_.configuration.sensor.minAnalogueGain =
context_.camHelper->gain(minGain);
@@ -307,6 +326,7 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
{
IPAFrameContext &frameContext = context_.frameContexts.alloc(frame);
+ context_.debugMetadata.enableByControl(controls);
for (auto const &a : algorithms()) {
Algorithm *algo = static_cast<Algorithm *>(a.get());
@@ -316,25 +336,21 @@ void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
}
}
-void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
+void IPARkISP1::computeParams(const uint32_t frame, const uint32_t bufferId)
{
IPAFrameContext &frameContext = context_.frameContexts.get(frame);
- rkisp1_params_cfg *params =
- reinterpret_cast<rkisp1_params_cfg *>(
- mappedBuffers_.at(bufferId).planes()[0].data());
-
- /* Prepare parameters buffer. */
- memset(params, 0, sizeof(*params));
+ RkISP1Params params(context_.configuration.paramFormat,
+ mappedBuffers_.at(bufferId).planes()[0]);
for (auto const &algo : algorithms())
- algo->prepare(context_, frame, frameContext, params);
+ algo->prepare(context_, frame, frameContext, &params);
- paramsBufferReady.emit(frame);
+ paramsComputed.emit(frame, params.size());
}
-void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,
- const ControlList &sensorControls)
+void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,
+ const ControlList &sensorControls)
{
IPAFrameContext &frameContext = context_.frameContexts.get(frame);
@@ -363,6 +379,7 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId
setControls(frame);
+ context_.debugMetadata.moveEntries(metadata);
metadataReady.emit(frame, metadata);
}
@@ -417,9 +434,9 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,
frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
}
- ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
- frameDurations[1],
- frameDurations[2]);
+ /* \todo Move this (and other agc-related controls) to agc */
+ context_.ctrlMap[&controls::FrameDurationLimits] =
+ ControlInfo(frameDurations[0], frameDurations[1], frameDurations[2]);
ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());
*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
@@ -435,10 +452,16 @@ void IPARkISP1::setControls(unsigned int frame)
IPAFrameContext &frameContext = context_.frameContexts.get(frame);
uint32_t exposure = frameContext.agc.exposure;
uint32_t gain = context_.camHelper->gainCode(frameContext.agc.gain);
+ uint32_t vblank = frameContext.agc.vblank;
+
+ LOG(IPARkISP1, Debug)
+ << "Set controls for frame " << frame << ": exposure " << exposure
+ << ", gain " << frameContext.agc.gain << ", vblank " << vblank;
ControlList ctrls(sensorControls_);
ctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));
ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));
+ ctrls.set(V4L2_CID_VBLANK, static_cast<int32_t>(vblank));
setSensorControls.emit(frame, ctrls);
}
diff --git a/src/ipa/rpi/cam_helper/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp
index ee5d011f..a78db9c1 100644
--- a/src/ipa/rpi/cam_helper/cam_helper.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper.cpp
@@ -156,17 +156,9 @@ void CamHelper::setCameraMode(const CameraMode &mode)
}
}
-void CamHelper::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
+void CamHelper::setHwConfig(const Controller::HardwareConfig &hwConfig)
{
- /*
- * These values are correct for many sensors. Other sensors will
- * need to over-ride this function.
- */
- exposureDelay = 2;
- gainDelay = 1;
- vblankDelay = 2;
- hblankDelay = 2;
+ hwConfig_ = hwConfig;
}
bool CamHelper::sensorEmbeddedDataPresent() const
@@ -241,7 +233,7 @@ void CamHelper::parseEmbeddedData(Span<const uint8_t> buffer,
return;
}
- deviceStatus.shutterSpeed = parsedDeviceStatus.shutterSpeed;
+ deviceStatus.exposureTime = parsedDeviceStatus.exposureTime;
deviceStatus.analogueGain = parsedDeviceStatus.analogueGain;
deviceStatus.frameLength = parsedDeviceStatus.frameLength;
deviceStatus.lineLength = parsedDeviceStatus.lineLength;
diff --git a/src/ipa/rpi/cam_helper/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h
index 4a4ab5e6..4a826690 100644
--- a/src/ipa/rpi/cam_helper/cam_helper.h
+++ b/src/ipa/rpi/cam_helper/cam_helper.h
@@ -36,11 +36,6 @@ namespace RPiController {
* exposure time, and to convert between the sensor's gain codes and actual
* gains.
*
- * A function to return the number of frames of delay between updating exposure,
- * analogue gain and vblanking, and for the changes to take effect. For many
- * sensors these take the values 2, 1 and 2 respectively, but sensors that are
- * different will need to over-ride the default function provided.
- *
* A function to query if the sensor outputs embedded data that can be parsed.
*
* A function to return the sensitivity of a given camera mode.
@@ -76,6 +71,7 @@ public:
CamHelper(std::unique_ptr<MdParser> parser, unsigned int frameIntegrationDiff);
virtual ~CamHelper();
void setCameraMode(const CameraMode &mode);
+ void setHwConfig(const Controller::HardwareConfig &hwConfig);
virtual void prepare(libcamera::Span<const uint8_t> buffer,
Metadata &metadata);
virtual void process(StatisticsPtr &stats, Metadata &metadata);
@@ -91,8 +87,6 @@ public:
libcamera::utils::Duration lineLengthPckToDuration(uint32_t lineLengthPck) const;
virtual uint32_t gainCode(double gain) const = 0;
virtual double gain(uint32_t gainCode) const = 0;
- virtual void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const;
virtual bool sensorEmbeddedDataPresent() const;
virtual double getModeSensitivity(const CameraMode &mode) const;
virtual unsigned int hideFramesStartup() const;
@@ -108,6 +102,7 @@ protected:
std::unique_ptr<MdParser> parser_;
CameraMode mode_;
+ Controller::HardwareConfig hwConfig_;
private:
/*
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
index 91461f7a..ba01153e 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
@@ -99,7 +99,7 @@ void CamHelperImx219::populateMetadata(const MdParser::RegisterMap &registers,
deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
registers.at(lineLengthLoReg));
- deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
+ deviceStatus.exposureTime = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
deviceStatus.lineLength);
deviceStatus.analogueGain = gain(registers.at(gainReg));
deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx283.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx283.cpp
new file mode 100644
index 00000000..efc03193
--- /dev/null
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx283.cpp
@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2024, Raspberry Pi Ltd
+ *
+ * cam_helper_Imx283.cpp - camera information for Imx283 sensor
+ */
+
+#include <assert.h>
+
+#include "cam_helper.h"
+
+using namespace RPiController;
+
+class CamHelperImx283 : public CamHelper
+{
+public:
+ CamHelperImx283();
+ uint32_t gainCode(double gain) const override;
+ double gain(uint32_t gainCode) const override;
+ unsigned int hideFramesModeSwitch() const override;
+
+private:
+ /*
+ * Smallest difference between the frame length and integration time,
+ * in units of lines.
+ */
+ static constexpr int frameIntegrationDiff = 4;
+};
+
+/*
+ * Imx283 doesn't output metadata, so we have to use the delayed controls which
+ * works by counting frames.
+ */
+
+CamHelperImx283::CamHelperImx283()
+ : CamHelper({}, frameIntegrationDiff)
+{
+}
+
+uint32_t CamHelperImx283::gainCode(double gain) const
+{
+ return static_cast<uint32_t>(2048.0 - 2048.0 / gain);
+}
+
+double CamHelperImx283::gain(uint32_t gainCode) const
+{
+ return static_cast<double>(2048.0 / (2048 - gainCode));
+}
+
+unsigned int CamHelperImx283::hideFramesModeSwitch() const
+{
+ /* After a mode switch, we seem to get 1 bad frame. */
+ return 1;
+}
+
+static CamHelper *create()
+{
+ return new CamHelperImx283();
+}
+
+static RegisterCamHelper reg("imx283", &create);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
index 24275e12..c1aa8528 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
@@ -5,7 +5,7 @@
* camera helper for imx290 sensor
*/
-#include <math.h>
+#include <cmath>
#include "cam_helper.h"
@@ -17,8 +17,6 @@ public:
CamHelperImx290();
uint32_t gainCode(double gain) const override;
double gain(uint32_t gainCode) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
unsigned int hideFramesStartup() const override;
unsigned int hideFramesModeSwitch() const override;
@@ -37,22 +35,13 @@ CamHelperImx290::CamHelperImx290()
uint32_t CamHelperImx290::gainCode(double gain) const
{
- int code = 66.6667 * log10(gain);
+ int code = 66.6667 * std::log10(gain);
return std::max(0, std::min(code, 0xf0));
}
double CamHelperImx290::gain(uint32_t gainCode) const
{
- return pow(10, 0.015 * gainCode);
-}
-
-void CamHelperImx290::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 2;
- hblankDelay = 2;
+ return std::pow(10, 0.015 * gainCode);
}
unsigned int CamHelperImx290::hideFramesStartup() const
@@ -73,3 +62,5 @@ static CamHelper *create()
}
static RegisterCamHelper reg("imx290", &create);
+static RegisterCamHelper reg327("imx327", &create);
+static RegisterCamHelper reg462("imx462", &create);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
index d4a4fa79..ac7ee2ea 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
@@ -23,8 +23,6 @@ public:
double gain(uint32_t gainCode) const override;
uint32_t exposureLines(const Duration exposure, const Duration lineLength) const override;
Duration exposure(uint32_t exposureLines, const Duration lineLength) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
private:
static constexpr uint32_t minExposureLines = 1;
@@ -66,15 +64,6 @@ Duration CamHelperImx296::exposure(uint32_t exposureLines,
return std::max<uint32_t>(minExposureLines, exposureLines) * timePerLine + 14.26us;
}
-void CamHelperImx296::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 2;
- hblankDelay = 2;
-}
-
static CamHelper *create()
{
return new CamHelperImx296();
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx415.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx415.cpp
new file mode 100644
index 00000000..c0a09eee
--- /dev/null
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx415.cpp
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2025, Raspberry Pi Ltd
+ *
+ * camera helper for imx415 sensor
+ */
+
+#include <cmath>
+
+#include "cam_helper.h"
+
+using namespace RPiController;
+
+class CamHelperImx415 : public CamHelper
+{
+public:
+ CamHelperImx415();
+ uint32_t gainCode(double gain) const override;
+ double gain(uint32_t gainCode) const override;
+ unsigned int hideFramesStartup() const override;
+ unsigned int hideFramesModeSwitch() const override;
+
+private:
+ /*
+ * Smallest difference between the frame length and integration time,
+ * in units of lines.
+ */
+ static constexpr int frameIntegrationDiff = 8;
+};
+
+CamHelperImx415::CamHelperImx415()
+ : CamHelper({}, frameIntegrationDiff)
+{
+}
+
+uint32_t CamHelperImx415::gainCode(double gain) const
+{
+ int code = 66.6667 * std::log10(gain);
+ return std::max(0, std::min(code, 0xf0));
+}
+
+double CamHelperImx415::gain(uint32_t gainCode) const
+{
+ return std::pow(10, 0.015 * gainCode);
+}
+
+unsigned int CamHelperImx415::hideFramesStartup() const
+{
+ /* On startup, we seem to get 1 bad frame. */
+ return 1;
+}
+
+unsigned int CamHelperImx415::hideFramesModeSwitch() const
+{
+ /* After a mode switch, we seem to get 1 bad frame. */
+ return 1;
+}
+
+static CamHelper *create()
+{
+ return new CamHelperImx415();
+}
+
+static RegisterCamHelper reg("imx415", &create);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
index 6bd89334..a72ac67d 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
@@ -51,8 +51,6 @@ public:
void prepare(libcamera::Span<const uint8_t> buffer, Metadata &metadata) override;
std::pair<uint32_t, uint32_t> getBlanking(Duration &exposure, Duration minFrameDuration,
Duration maxFrameDuration) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
bool sensorEmbeddedDataPresent() const override;
private:
@@ -112,7 +110,7 @@ void CamHelperImx477::prepare(libcamera::Span<const uint8_t> buffer, Metadata &m
DeviceStatus parsedDeviceStatus;
metadata.get("device.status", parsedDeviceStatus);
- parsedDeviceStatus.shutterSpeed = deviceStatus.shutterSpeed;
+ parsedDeviceStatus.exposureTime = deviceStatus.exposureTime;
parsedDeviceStatus.frameLength = deviceStatus.frameLength;
metadata.set("device.status", parsedDeviceStatus);
@@ -159,15 +157,6 @@ std::pair<uint32_t, uint32_t> CamHelperImx477::getBlanking(Duration &exposure,
return { frameLength - mode_.height, hblank };
}
-void CamHelperImx477::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 3;
- hblankDelay = 3;
-}
-
bool CamHelperImx477::sensorEmbeddedDataPresent() const
{
return true;
@@ -180,7 +169,7 @@ void CamHelperImx477::populateMetadata(const MdParser::RegisterMap &registers,
deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
registers.at(lineLengthLoReg));
- deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
+ deviceStatus.exposureTime = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
deviceStatus.lineLength);
deviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));
deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
index c2de3d40..10cbea48 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
@@ -51,8 +51,6 @@ public:
void prepare(libcamera::Span<const uint8_t> buffer, Metadata &metadata) override;
std::pair<uint32_t, uint32_t> getBlanking(Duration &exposure, Duration minFrameDuration,
Duration maxFrameDuration) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
bool sensorEmbeddedDataPresent() const override;
private:
@@ -112,7 +110,7 @@ void CamHelperImx519::prepare(libcamera::Span<const uint8_t> buffer, Metadata &m
DeviceStatus parsedDeviceStatus;
metadata.get("device.status", parsedDeviceStatus);
- parsedDeviceStatus.shutterSpeed = deviceStatus.shutterSpeed;
+ parsedDeviceStatus.exposureTime = deviceStatus.exposureTime;
parsedDeviceStatus.frameLength = deviceStatus.frameLength;
metadata.set("device.status", parsedDeviceStatus);
@@ -159,15 +157,6 @@ std::pair<uint32_t, uint32_t> CamHelperImx519::getBlanking(Duration &exposure,
return { frameLength - mode_.height, hblank };
}
-void CamHelperImx519::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 3;
- hblankDelay = 3;
-}
-
bool CamHelperImx519::sensorEmbeddedDataPresent() const
{
return true;
@@ -180,7 +169,7 @@ void CamHelperImx519::populateMetadata(const MdParser::RegisterMap &registers,
deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
registers.at(lineLengthLoReg));
- deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
+ deviceStatus.exposureTime = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
deviceStatus.lineLength);
deviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));
deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
index 63ddb55e..6150909c 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
@@ -54,8 +54,6 @@ public:
void process(StatisticsPtr &stats, Metadata &metadata) override;
std::pair<uint32_t, uint32_t> getBlanking(Duration &exposure, Duration minFrameDuration,
Duration maxFrameDuration) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
bool sensorEmbeddedDataPresent() const override;
double getModeSensitivity(const CameraMode &mode) const override;
unsigned int hideFramesModeSwitch() const override;
@@ -66,7 +64,7 @@ private:
* Smallest difference between the frame length and integration time,
* in units of lines.
*/
- static constexpr int frameIntegrationDiff = 22;
+ static constexpr int frameIntegrationDiff = 48;
/* Maximum frame length allowable for long exposure calculations. */
static constexpr int frameLengthMax = 0xffdc;
/* Largest long exposure scale factor given as a left shift on the frame length. */
@@ -155,7 +153,7 @@ void CamHelperImx708::prepare(libcamera::Span<const uint8_t> buffer, Metadata &m
DeviceStatus parsedDeviceStatus;
metadata.get("device.status", parsedDeviceStatus);
- parsedDeviceStatus.shutterSpeed = deviceStatus.shutterSpeed;
+ parsedDeviceStatus.exposureTime = deviceStatus.exposureTime;
parsedDeviceStatus.frameLength = deviceStatus.frameLength;
metadata.set("device.status", parsedDeviceStatus);
@@ -208,15 +206,6 @@ std::pair<uint32_t, uint32_t> CamHelperImx708::getBlanking(Duration &exposure,
return { frameLength - mode_.height, hblank };
}
-void CamHelperImx708::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 3;
- hblankDelay = 3;
-}
-
bool CamHelperImx708::sensorEmbeddedDataPresent() const
{
return true;
@@ -255,7 +244,7 @@ void CamHelperImx708::populateMetadata(const MdParser::RegisterMap &registers,
deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
registers.at(lineLengthLoReg));
- deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
+ deviceStatus.exposureTime = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
deviceStatus.lineLength);
deviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));
deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
index c30b017c..40d6b6d7 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
@@ -17,8 +17,6 @@ public:
CamHelperOv5647();
uint32_t gainCode(double gain) const override;
double gain(uint32_t gainCode) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
unsigned int hideFramesStartup() const override;
unsigned int hideFramesModeSwitch() const override;
unsigned int mistrustFramesStartup() const override;
@@ -52,19 +50,6 @@ double CamHelperOv5647::gain(uint32_t gainCode) const
return static_cast<double>(gainCode) / 16.0;
}
-void CamHelperOv5647::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- /*
- * We run this sensor in a mode where the gain delay is bumped up to
- * 2. It seems to be the only way to make the delays "predictable".
- */
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 2;
- hblankDelay = 2;
-}
-
unsigned int CamHelperOv5647::hideFramesStartup() const
{
/*
diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp
index a8efd389..980495a8 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp
@@ -18,8 +18,6 @@ public:
CamHelperOv64a40();
uint32_t gainCode(double gain) const override;
double gain(uint32_t gainCode) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
double getModeSensitivity(const CameraMode &mode) const override;
private:
@@ -45,16 +43,6 @@ double CamHelperOv64a40::gain(uint32_t gainCode) const
return static_cast<double>(gainCode) / 128.0;
}
-void CamHelperOv64a40::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- /* The driver appears to behave as follows: */
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 2;
- hblankDelay = 2;
-}
-
double CamHelperOv64a40::getModeSensitivity(const CameraMode &mode) const
{
if (mode.binX >= 2 && mode.scaleX >= 4) {
diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp
new file mode 100644
index 00000000..fc7b999f
--- /dev/null
+++ b/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2021, Raspberry Pi Ltd
+ *
+ * camera information for ov7251 sensor
+ */
+
+#include <assert.h>
+
+#include "cam_helper.h"
+
+using namespace RPiController;
+
+class CamHelperOv7251 : public CamHelper
+{
+public:
+ CamHelperOv7251();
+ uint32_t gainCode(double gain) const override;
+ double gain(uint32_t gainCode) const override;
+
+private:
+ /*
+ * Smallest difference between the frame length and integration time,
+ * in units of lines.
+ */
+ static constexpr int frameIntegrationDiff = 4;
+};
+
+/*
+ * OV7251 doesn't output metadata, so we have to use the "unicam parser" which
+ * works by counting frames.
+ */
+
+CamHelperOv7251::CamHelperOv7251()
+ : CamHelper({}, frameIntegrationDiff)
+{
+}
+
+uint32_t CamHelperOv7251::gainCode(double gain) const
+{
+ return static_cast<uint32_t>(gain * 16.0);
+}
+
+double CamHelperOv7251::gain(uint32_t gainCode) const
+{
+ return static_cast<double>(gainCode) / 16.0;
+}
+
+static CamHelper *create()
+{
+ return new CamHelperOv7251();
+}
+
+static RegisterCamHelper reg("ov7251", &create);
diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
index a65c8ac0..e93a4691 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
@@ -17,15 +17,13 @@ public:
CamHelperOv9281();
uint32_t gainCode(double gain) const override;
double gain(uint32_t gainCode) const override;
- void getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const override;
private:
/*
* Smallest difference between the frame length and integration time,
* in units of lines.
*/
- static constexpr int frameIntegrationDiff = 4;
+ static constexpr int frameIntegrationDiff = 25;
};
/*
@@ -48,16 +46,6 @@ double CamHelperOv9281::gain(uint32_t gainCode) const
return static_cast<double>(gainCode) / 16.0;
}
-void CamHelperOv9281::getDelays(int &exposureDelay, int &gainDelay,
- int &vblankDelay, int &hblankDelay) const
-{
- /* The driver appears to behave as follows: */
- exposureDelay = 2;
- gainDelay = 2;
- vblankDelay = 2;
- hblankDelay = 2;
-}
-
static CamHelper *create()
{
return new CamHelperOv9281();
diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
index 72625057..abf02147 100644
--- a/src/ipa/rpi/cam_helper/meson.build
+++ b/src/ipa/rpi/cam_helper/meson.build
@@ -4,12 +4,15 @@ rpi_ipa_cam_helper_sources = files([
'cam_helper.cpp',
'cam_helper_ov5647.cpp',
'cam_helper_imx219.cpp',
+ 'cam_helper_imx283.cpp',
'cam_helper_imx290.cpp',
'cam_helper_imx296.cpp',
+ 'cam_helper_imx415.cpp',
'cam_helper_imx477.cpp',
'cam_helper_imx519.cpp',
'cam_helper_imx708.cpp',
'cam_helper_ov64a40.cpp',
+ 'cam_helper_ov7251.cpp',
'cam_helper_ov9281.cpp',
'md_parser_smia.cpp',
])
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp
index ee3848b5..6734c32e 100644
--- a/src/ipa/rpi/common/ipa_base.cpp
+++ b/src/ipa/rpi/common/ipa_base.cpp
@@ -55,9 +55,19 @@ constexpr Duration controllerMinFrameDuration = 1.0s / 30.0;
/* List of controls handled by the Raspberry Pi IPA */
const ControlInfoMap::Map ipaControls{
- { &controls::AeEnable, ControlInfo(false, true) },
- { &controls::ExposureTime, ControlInfo(0, 66666) },
- { &controls::AnalogueGain, ControlInfo(1.0f, 16.0f) },
+ /* \todo Move this to the Camera class */
+ { &controls::AeEnable, ControlInfo(false, true, true) },
+ { &controls::ExposureTimeMode,
+ ControlInfo(static_cast<int32_t>(controls::ExposureTimeModeAuto),
+ static_cast<int32_t>(controls::ExposureTimeModeManual),
+ static_cast<int32_t>(controls::ExposureTimeModeAuto)) },
+ { &controls::ExposureTime,
+ ControlInfo(1, 66666, static_cast<int32_t>(defaultExposureTime.get<std::micro>())) },
+ { &controls::AnalogueGainMode,
+ ControlInfo(static_cast<int32_t>(controls::AnalogueGainModeAuto),
+ static_cast<int32_t>(controls::AnalogueGainModeManual),
+ static_cast<int32_t>(controls::AnalogueGainModeAuto)) },
+ { &controls::AnalogueGain, ControlInfo(1.0f, 16.0f, 1.0f) },
{ &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) },
{ &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) },
{ &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) },
@@ -71,7 +81,9 @@ const ControlInfoMap::Map ipaControls{
{ &controls::HdrMode, ControlInfo(controls::HdrModeValues) },
{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },
{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
- { &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000)) },
+ { &controls::FrameDurationLimits,
+ ControlInfo(INT64_C(33333), INT64_C(120000),
+ static_cast<int64_t>(defaultMinFrameDuration.get<std::micro>())) },
{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },
{ &controls::rpi::StatsOutputEnable, ControlInfo(false, true, false) },
};
@@ -81,6 +93,7 @@ const ControlInfoMap::Map ipaColourControls{
{ &controls::AwbEnable, ControlInfo(false, true) },
{ &controls::AwbMode, ControlInfo(controls::AwbModeValues) },
{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },
+ { &controls::ColourTemperature, ControlInfo(100, 100000) },
{ &controls::Saturation, ControlInfo(0.0f, 32.0f, 1.0f) },
};
@@ -96,6 +109,13 @@ const ControlInfoMap::Map ipaAfControls{
{ &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) }
};
+/* Platform specific controls */
+const std::map<const std::string, ControlInfoMap::Map> platformControls {
+ { "pisp", {
+ { &controls::rpi::ScalerCrops, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) }
+ } },
+};
+
} /* namespace */
LOG_DEFINE_CATEGORY(IPARPI)
@@ -127,18 +147,8 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams &params, Ini
return -EINVAL;
}
- /*
- * Pass out the sensor config to the pipeline handler in order
- * to setup the staggered writer class.
- */
- int gainDelay, exposureDelay, vblankDelay, hblankDelay, sensorMetadata;
- helper_->getDelays(exposureDelay, gainDelay, vblankDelay, hblankDelay);
- sensorMetadata = helper_->sensorEmbeddedDataPresent();
-
- result->sensorConfig.gainDelay = gainDelay;
- result->sensorConfig.exposureDelay = exposureDelay;
- result->sensorConfig.vblankDelay = vblankDelay;
- result->sensorConfig.hblankDelay = hblankDelay;
+ /* Pass out the sensor metadata to the pipeline handler */
+ int sensorMetadata = helper_->sensorEmbeddedDataPresent();
result->sensorConfig.sensorMetadata = sensorMetadata;
/* Load the tuning file for this sensor. */
@@ -153,12 +163,17 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams &params, Ini
lensPresent_ = params.lensPresent;
controller_.initialise();
+ helper_->setHwConfig(controller_.getHardwareConfig());
/* Return the controls handled by the IPA */
ControlInfoMap::Map ctrlMap = ipaControls;
if (lensPresent_)
ctrlMap.merge(ControlInfoMap::Map(ipaAfControls));
+ auto platformCtrlsIt = platformControls.find(controller_.getTarget());
+ if (platformCtrlsIt != platformControls.end())
+ ctrlMap.merge(ControlInfoMap::Map(platformCtrlsIt->second));
+
monoSensor_ = params.sensorInfo.cfaPattern == properties::draft::ColorFilterArrangementEnum::MONO;
if (!monoSensor_)
ctrlMap.merge(ControlInfoMap::Map(ipaColourControls));
@@ -213,7 +228,7 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa
/* Supply initial values for gain and exposure. */
AgcStatus agcStatus;
- agcStatus.shutterTime = defaultExposureTime;
+ agcStatus.exposureTime = defaultExposureTime;
agcStatus.analogueGain = defaultAnalogueGain;
applyAGC(&agcStatus, ctrls);
@@ -247,15 +262,18 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa
ControlInfoMap::Map ctrlMap = ipaControls;
ctrlMap[&controls::FrameDurationLimits] =
ControlInfo(static_cast<int64_t>(mode_.minFrameDuration.get<std::micro>()),
- static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()));
+ static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()),
+ static_cast<int64_t>(defaultMinFrameDuration.get<std::micro>()));
ctrlMap[&controls::AnalogueGain] =
ControlInfo(static_cast<float>(mode_.minAnalogueGain),
- static_cast<float>(mode_.maxAnalogueGain));
+ static_cast<float>(mode_.maxAnalogueGain),
+ static_cast<float>(defaultAnalogueGain));
ctrlMap[&controls::ExposureTime] =
- ControlInfo(static_cast<int32_t>(mode_.minShutter.get<std::micro>()),
- static_cast<int32_t>(mode_.maxShutter.get<std::micro>()));
+ ControlInfo(static_cast<int32_t>(mode_.minExposureTime.get<std::micro>()),
+ static_cast<int32_t>(mode_.maxExposureTime.get<std::micro>()),
+ static_cast<int32_t>(defaultExposureTime.get<std::micro>()));
/* Declare colour processing related controls for non-mono sensors. */
if (!monoSensor_)
@@ -288,11 +306,11 @@ void IpaBase::start(const ControlList &controls, StartResult *result)
/* SwitchMode may supply updated exposure/gain values to use. */
AgcStatus agcStatus;
- agcStatus.shutterTime = 0.0s;
+ agcStatus.exposureTime = 0.0s;
agcStatus.analogueGain = 0.0;
metadata.get("agc.status", agcStatus);
- if (agcStatus.shutterTime && agcStatus.analogueGain) {
+ if (agcStatus.exposureTime && agcStatus.analogueGain) {
ControlList ctrls(sensorCtrls_);
applyAGC(&agcStatus, ctrls);
result->controls = std::move(ctrls);
@@ -588,7 +606,7 @@ void IpaBase::setMode(const IPACameraSensorInfo &sensorInfo)
mode_.sensitivity = helper_->getModeSensitivity(mode_);
const ControlInfo &gainCtrl = sensorCtrls_.at(V4L2_CID_ANALOGUE_GAIN);
- const ControlInfo &shutterCtrl = sensorCtrls_.at(V4L2_CID_EXPOSURE);
+ const ControlInfo &exposureTimeCtrl = sensorCtrls_.at(V4L2_CID_EXPOSURE);
mode_.minAnalogueGain = helper_->gain(gainCtrl.min().get<int32_t>());
mode_.maxAnalogueGain = helper_->gain(gainCtrl.max().get<int32_t>());
@@ -599,11 +617,15 @@ void IpaBase::setMode(const IPACameraSensorInfo &sensorInfo)
*/
helper_->setCameraMode(mode_);
- /* Shutter speed is calculated based on the limits of the frame durations. */
- mode_.minShutter = helper_->exposure(shutterCtrl.min().get<int32_t>(), mode_.minLineLength);
- mode_.maxShutter = Duration::max();
- helper_->getBlanking(mode_.maxShutter,
- mode_.minFrameDuration, mode_.maxFrameDuration);
+ /*
+ * Exposure time is calculated based on the limits of the frame
+ * durations.
+ */
+ mode_.minExposureTime = helper_->exposure(exposureTimeCtrl.min().get<int32_t>(),
+ mode_.minLineLength);
+ mode_.maxExposureTime = Duration::max();
+ helper_->getBlanking(mode_.maxExposureTime, mode_.minFrameDuration,
+ mode_.maxFrameDuration);
}
void IpaBase::setCameraTimeoutValue()
@@ -742,6 +764,42 @@ void IpaBase::applyControls(const ControlList &controls)
af->setMode(mode->second);
}
+ /*
+ * Because some AE controls are mode-specific, handle the AE-related
+ * mode changes first.
+ */
+ const auto analogueGainMode = controls.get(controls::AnalogueGainMode);
+ const auto exposureTimeMode = controls.get(controls::ExposureTimeMode);
+
+ if (analogueGainMode || exposureTimeMode) {
+ RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
+ controller_.getAlgorithm("agc"));
+ if (agc) {
+ if (analogueGainMode) {
+ if (*analogueGainMode == controls::AnalogueGainModeManual)
+ agc->disableAutoGain();
+ else
+ agc->enableAutoGain();
+
+ libcameraMetadata_.set(controls::AnalogueGainMode,
+ *analogueGainMode);
+ }
+
+ if (exposureTimeMode) {
+ if (*exposureTimeMode == controls::ExposureTimeModeManual)
+ agc->disableAutoExposure();
+ else
+ agc->enableAutoExposure();
+
+ libcameraMetadata_.set(controls::ExposureTimeMode,
+ *exposureTimeMode);
+ }
+ } else {
+ LOG(IPARPI, Warning)
+ << "Could not set AnalogueGainMode or ExposureTimeMode - no AGC algorithm";
+ }
+ }
+
/* Iterate over controls */
for (auto const &ctrl : controls) {
LOG(IPARPI, Debug) << "Request ctrl: "
@@ -749,23 +807,8 @@ void IpaBase::applyControls(const ControlList &controls)
<< " = " << ctrl.second.toString();
switch (ctrl.first) {
- case controls::AE_ENABLE: {
- RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
- controller_.getAlgorithm("agc"));
- if (!agc) {
- LOG(IPARPI, Warning)
- << "Could not set AE_ENABLE - no AGC algorithm";
- break;
- }
-
- if (ctrl.second.get<bool>() == false)
- agc->disableAuto();
- else
- agc->enableAuto();
-
- libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>());
- break;
- }
+ case controls::EXPOSURE_TIME_MODE:
+ break; /* We already handled this one above */
case controls::EXPOSURE_TIME: {
RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
@@ -776,13 +819,23 @@ void IpaBase::applyControls(const ControlList &controls)
break;
}
+ /*
+ * Ignore manual exposure time when the auto exposure
+ * algorithm is running.
+ */
+ if (agc->autoExposureEnabled())
+ break;
+
/* The control provides units of microseconds. */
- agc->setFixedShutter(0, ctrl.second.get<int32_t>() * 1.0us);
+ agc->setFixedExposureTime(0, ctrl.second.get<int32_t>() * 1.0us);
libcameraMetadata_.set(controls::ExposureTime, ctrl.second.get<int32_t>());
break;
}
+ case controls::ANALOGUE_GAIN_MODE:
+ break; /* We already handled this one above */
+
case controls::ANALOGUE_GAIN: {
RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
controller_.getAlgorithm("agc"));
@@ -792,6 +845,13 @@ void IpaBase::applyControls(const ControlList &controls)
break;
}
+ /*
+ * Ignore manual analogue gain value when the auto gain
+ * algorithm is running.
+ */
+ if (agc->autoGainEnabled())
+ break;
+
agc->setFixedAnalogueGain(0, ctrl.second.get<float>());
libcameraMetadata_.set(controls::AnalogueGain,
@@ -848,6 +908,13 @@ void IpaBase::applyControls(const ControlList &controls)
break;
}
+ /*
+ * Ignore AE_EXPOSURE_MODE if the shutter or the gain
+ * are in auto mode.
+ */
+ if (agc->autoExposureEnabled() || agc->autoGainEnabled())
+ break;
+
int32_t idx = ctrl.second.get<int32_t>();
if (ExposureModeTable.count(idx)) {
agc->setExposureMode(ExposureModeTable.at(idx));
@@ -1006,6 +1073,25 @@ void IpaBase::applyControls(const ControlList &controls)
break;
}
+ case controls::COLOUR_TEMPERATURE: {
+ /* Silently ignore this control for a mono sensor. */
+ if (monoSensor_)
+ break;
+
+ auto temperatureK = ctrl.second.get<int32_t>();
+ RPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(
+ controller_.getAlgorithm("awb"));
+ if (!awb) {
+ LOG(IPARPI, Warning)
+ << "Could not set COLOUR_TEMPERATURE - no AWB algorithm";
+ break;
+ }
+
+ awb->setColourTemperature(temperatureK);
+ /* This metadata will get reported back automatically. */
+ break;
+ }
+
case controls::BRIGHTNESS: {
RPiController::ContrastAlgorithm *contrast = dynamic_cast<RPiController::ContrastAlgorithm *>(
controller_.getAlgorithm("contrast"));
@@ -1070,6 +1156,7 @@ void IpaBase::applyControls(const ControlList &controls)
break;
}
+ case controls::rpi::SCALER_CROPS:
case controls::SCALER_CROP: {
/* We do nothing with this, but should avoid the warning below. */
break;
@@ -1269,7 +1356,7 @@ void IpaBase::fillDeviceStatus(const ControlList &sensorControls, unsigned int i
int32_t hblank = sensorControls.get(V4L2_CID_HBLANK).get<int32_t>();
deviceStatus.lineLength = helper_->hblankToLineLength(hblank);
- deviceStatus.shutterSpeed = helper_->exposure(exposureLines, deviceStatus.lineLength);
+ deviceStatus.exposureTime = helper_->exposure(exposureLines, deviceStatus.lineLength);
deviceStatus.analogueGain = helper_->gain(gainCode);
deviceStatus.frameLength = mode_.height + vblank;
@@ -1296,7 +1383,7 @@ void IpaBase::reportMetadata(unsigned int ipaContext)
DeviceStatus *deviceStatus = rpiMetadata.getLocked<DeviceStatus>("device.status");
if (deviceStatus) {
libcameraMetadata_.set(controls::ExposureTime,
- deviceStatus->shutterSpeed.get<std::micro>());
+ deviceStatus->exposureTime.get<std::micro>());
libcameraMetadata_.set(controls::AnalogueGain, deviceStatus->analogueGain);
libcameraMetadata_.set(controls::FrameDuration,
helper_->exposure(deviceStatus->frameLength, deviceStatus->lineLength).get<std::micro>());
@@ -1307,9 +1394,19 @@ void IpaBase::reportMetadata(unsigned int ipaContext)
}
AgcPrepareStatus *agcPrepareStatus = rpiMetadata.getLocked<AgcPrepareStatus>("agc.prepare_status");
- if (agcPrepareStatus) {
- libcameraMetadata_.set(controls::AeLocked, agcPrepareStatus->locked);
+ if (agcPrepareStatus)
libcameraMetadata_.set(controls::DigitalGain, agcPrepareStatus->digitalGain);
+
+ RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
+ controller_.getAlgorithm("agc"));
+ if (agc) {
+ if (!agc->autoExposureEnabled() && !agc->autoGainEnabled())
+ libcameraMetadata_.set(controls::AeState, controls::AeStateIdle);
+ else if (agcPrepareStatus)
+ libcameraMetadata_.set(controls::AeState,
+ agcPrepareStatus->locked
+ ? controls::AeStateConverged
+ : controls::AeStateSearching);
}
LuxStatus *luxStatus = rpiMetadata.getLocked<LuxStatus>("lux.status");
@@ -1447,15 +1544,15 @@ void IpaBase::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDu
/*
* Calculate the maximum exposure time possible for the AGC to use.
- * getBlanking() will update maxShutter with the largest exposure
+ * getBlanking() will update maxExposureTime with the largest exposure
* value possible.
*/
- Duration maxShutter = Duration::max();
- helper_->getBlanking(maxShutter, minFrameDuration_, maxFrameDuration_);
+ Duration maxExposureTime = Duration::max();
+ helper_->getBlanking(maxExposureTime, minFrameDuration_, maxFrameDuration_);
RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
controller_.getAlgorithm("agc"));
- agc->setMaxShutter(maxShutter);
+ agc->setMaxExposureTime(maxExposureTime);
}
void IpaBase::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)
@@ -1472,14 +1569,14 @@ void IpaBase::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)
gainCode = std::clamp<int32_t>(gainCode, minGainCode, maxGainCode);
/* getBlanking might clip exposure time to the fps limits. */
- Duration exposure = agcStatus->shutterTime;
+ Duration exposure = agcStatus->exposureTime;
auto [vblank, hblank] = helper_->getBlanking(exposure, minFrameDuration_, maxFrameDuration_);
int32_t exposureLines = helper_->exposureLines(exposure,
helper_->hblankToLineLength(hblank));
LOG(IPARPI, Debug) << "Applying AGC Exposure: " << exposure
- << " (Shutter lines: " << exposureLines << ", AGC requested "
- << agcStatus->shutterTime << ") Gain: "
+ << " (Exposure lines: " << exposureLines << ", AGC requested "
+ << agcStatus->exposureTime << ") Gain: "
<< agcStatus->analogueGain << " (Gain Code: "
<< gainCode << ")";
diff --git a/src/ipa/rpi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h
index 1132de7e..fdaa10e6 100644
--- a/src/ipa/rpi/controller/agc_algorithm.h
+++ b/src/ipa/rpi/controller/agc_algorithm.h
@@ -23,15 +23,19 @@ public:
virtual std::vector<double> const &getWeights() const = 0;
virtual void setEv(unsigned int channel, double ev) = 0;
virtual void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) = 0;
- virtual void setFixedShutter(unsigned int channel,
- libcamera::utils::Duration fixedShutter) = 0;
- virtual void setMaxShutter(libcamera::utils::Duration maxShutter) = 0;
+ virtual void setFixedExposureTime(unsigned int channel,
+ libcamera::utils::Duration fixedExposureTime) = 0;
+ virtual void setMaxExposureTime(libcamera::utils::Duration maxExposureTime) = 0;
virtual void setFixedAnalogueGain(unsigned int channel, double fixedAnalogueGain) = 0;
virtual void setMeteringMode(std::string const &meteringModeName) = 0;
virtual void setExposureMode(std::string const &exposureModeName) = 0;
virtual void setConstraintMode(std::string const &contraintModeName) = 0;
- virtual void enableAuto() = 0;
- virtual void disableAuto() = 0;
+ virtual void enableAutoExposure() = 0;
+ virtual void disableAutoExposure() = 0;
+ virtual bool autoExposureEnabled() const = 0;
+ virtual void enableAutoGain() = 0;
+ virtual void disableAutoGain() = 0;
+ virtual bool autoGainEnabled() const = 0;
virtual void setActiveChannels(const std::vector<unsigned int> &activeChannels) = 0;
};
diff --git a/src/ipa/rpi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h
index c7c87b83..9308b156 100644
--- a/src/ipa/rpi/controller/agc_status.h
+++ b/src/ipa/rpi/controller/agc_status.h
@@ -28,7 +28,7 @@
struct AgcStatus {
libcamera::utils::Duration totalExposureValue; /* value for all exposure and gain for this image */
libcamera::utils::Duration targetExposureValue; /* (unfiltered) target total exposure AGC is aiming for */
- libcamera::utils::Duration shutterTime;
+ libcamera::utils::Duration exposureTime;
double analogueGain;
std::string exposureMode;
std::string constraintMode;
@@ -36,7 +36,7 @@ struct AgcStatus {
double ev;
libcamera::utils::Duration flickerPeriod;
int floatingRegionEnable;
- libcamera::utils::Duration fixedShutter;
+ libcamera::utils::Duration fixedExposureTime;
double fixedAnalogueGain;
unsigned int channel;
HdrStatus hdr;
diff --git a/src/ipa/rpi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h
index 1779b050..d941ed4e 100644
--- a/src/ipa/rpi/controller/awb_algorithm.h
+++ b/src/ipa/rpi/controller/awb_algorithm.h
@@ -19,6 +19,7 @@ public:
virtual void initialValues(double &gainR, double &gainB) = 0;
virtual void setMode(std::string const &modeName) = 0;
virtual void setManualGains(double manualR, double manualB) = 0;
+ virtual void setColourTemperature(double temperatureK) = 0;
virtual void enableAuto() = 0;
virtual void disableAuto() = 0;
};
diff --git a/src/ipa/rpi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h
index 4fdb5b85..61162b32 100644
--- a/src/ipa/rpi/controller/camera_mode.h
+++ b/src/ipa/rpi/controller/camera_mode.h
@@ -50,9 +50,9 @@ struct CameraMode {
double sensitivity;
/* pixel clock rate */
uint64_t pixelRate;
- /* Mode specific shutter speed limits */
- libcamera::utils::Duration minShutter;
- libcamera::utils::Duration maxShutter;
+ /* Mode specific exposure time limits */
+ libcamera::utils::Duration minExposureTime;
+ libcamera::utils::Duration maxExposureTime;
/* Mode specific analogue gain limits */
double minAnalogueGain;
double maxAnalogueGain;
diff --git a/src/ipa/rpi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp
index e0131018..651fff63 100644
--- a/src/ipa/rpi/controller/controller.cpp
+++ b/src/ipa/rpi/controller/controller.cpp
@@ -39,6 +39,7 @@ static const std::map<std::string, Controller::HardwareConfig> HardwareConfigMap
.pipelineWidth = 13,
.statsInline = false,
.minPixelProcessingTime = 0s,
+ .dataBufferStrided = true,
}
},
{
@@ -71,6 +72,7 @@ static const std::map<std::string, Controller::HardwareConfig> HardwareConfigMap
* frames wider than ~16,000 pixels.
*/
.minPixelProcessingTime = 1.0us / 380,
+ .dataBufferStrided = false,
}
},
};
diff --git a/src/ipa/rpi/controller/controller.h b/src/ipa/rpi/controller/controller.h
index eff520bd..fdb46557 100644
--- a/src/ipa/rpi/controller/controller.h
+++ b/src/ipa/rpi/controller/controller.h
@@ -49,6 +49,7 @@ public:
unsigned int pipelineWidth;
bool statsInline;
libcamera::utils::Duration minPixelProcessingTime;
+ bool dataBufferStrided;
};
Controller();
diff --git a/src/ipa/rpi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp
index 68100137..1695764d 100644
--- a/src/ipa/rpi/controller/device_status.cpp
+++ b/src/ipa/rpi/controller/device_status.cpp
@@ -10,7 +10,7 @@ using namespace libcamera; /* for the Duration operator<< overload */
std::ostream &operator<<(std::ostream &out, const DeviceStatus &d)
{
- out << "Exposure: " << d.shutterSpeed
+ out << "Exposure time: " << d.exposureTime
<< " Frame length: " << d.frameLength
<< " Line length: " << d.lineLength
<< " Gain: " << d.analogueGain;
diff --git a/src/ipa/rpi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h
index 518f15b5..b1792035 100644
--- a/src/ipa/rpi/controller/device_status.h
+++ b/src/ipa/rpi/controller/device_status.h
@@ -12,21 +12,21 @@
#include <libcamera/base/utils.h>
/*
- * Definition of "device metadata" which stores things like shutter time and
+ * Definition of "device metadata" which stores things like exposure time and
* analogue gain that downstream control algorithms will want to know.
*/
struct DeviceStatus {
DeviceStatus()
- : shutterSpeed(std::chrono::seconds(0)), frameLength(0),
+ : exposureTime(std::chrono::seconds(0)), frameLength(0),
lineLength(std::chrono::seconds(0)), analogueGain(0.0)
{
}
friend std::ostream &operator<<(std::ostream &out, const DeviceStatus &d);
- /* time shutter is open */
- libcamera::utils::Duration shutterSpeed;
+ /* time the image is exposed */
+ libcamera::utils::Duration exposureTime;
/* frame length given in number of lines */
uint32_t frameLength;
/* line length for the current frame */
diff --git a/src/ipa/rpi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp
index ba5b25dd..13089839 100644
--- a/src/ipa/rpi/controller/histogram.cpp
+++ b/src/ipa/rpi/controller/histogram.cpp
@@ -4,7 +4,7 @@
*
* histogram calculations
*/
-#include <math.h>
+#include <cmath>
#include <stdio.h>
#include "histogram.h"
@@ -49,9 +49,9 @@ double Histogram::interBinMean(double binLo, double binHi) const
{
assert(binHi >= binLo);
double sumBinFreq = 0, cumulFreq = 0;
- for (double binNext = floor(binLo) + 1.0; binNext <= ceil(binHi);
+ for (double binNext = std::floor(binLo) + 1.0; binNext <= std::ceil(binHi);
binLo = binNext, binNext += 1.0) {
- int bin = floor(binLo);
+ int bin = std::floor(binLo);
double freq = (cumulative_[bin + 1] - cumulative_[bin]) *
(std::min(binNext, binHi) - binLo);
sumBinFreq += bin * freq;
diff --git a/src/ipa/rpi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h
index b4650d25..77d3b074 100644
--- a/src/ipa/rpi/controller/metadata.h
+++ b/src/ipa/rpi/controller/metadata.h
@@ -12,6 +12,7 @@
#include <map>
#include <mutex>
#include <string>
+#include <utility>
#include <libcamera/base/thread_annotations.h>
@@ -36,10 +37,10 @@ public:
}
template<typename T>
- void set(std::string const &tag, T const &value)
+ void set(std::string const &tag, T &&value)
{
std::scoped_lock lock(mutex_);
- data_[tag] = value;
+ data_[tag] = std::forward<T>(value);
}
template<typename T>
@@ -90,6 +91,12 @@ public:
data_.insert(other.data_.begin(), other.data_.end());
}
+ void erase(std::string const &tag)
+ {
+ std::scoped_lock lock(mutex_);
+ eraseLocked(tag);
+ }
+
template<typename T>
T *getLocked(std::string const &tag)
{
@@ -104,10 +111,18 @@ public:
}
template<typename T>
- void setLocked(std::string const &tag, T const &value)
+ void setLocked(std::string const &tag, T &&value)
{
/* Use this only if you're holding the lock yourself. */
- data_[tag] = value;
+ data_[tag] = std::forward<T>(value);
+ }
+
+ void eraseLocked(std::string const &tag)
+ {
+ auto it = data_.find(tag);
+ if (it == data_.end())
+ return;
+ data_.erase(it);
}
/*
diff --git a/src/ipa/rpi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp
index 5ca76dd9..2157eb94 100644
--- a/src/ipa/rpi/controller/rpi/af.cpp
+++ b/src/ipa/rpi/controller/rpi/af.cpp
@@ -7,8 +7,8 @@
#include "af.h"
+#include <cmath>
#include <iomanip>
-#include <math.h>
#include <stdlib.h>
#include <libcamera/base/log.h>
diff --git a/src/ipa/rpi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
index fcf7aec9..02bfdb4a 100644
--- a/src/ipa/rpi/controller/rpi/agc.cpp
+++ b/src/ipa/rpi/controller/rpi/agc.cpp
@@ -74,22 +74,62 @@ int Agc::checkChannel(unsigned int channelIndex) const
return 0;
}
-void Agc::disableAuto()
+void Agc::disableAutoExposure()
{
- LOG(RPiAgc, Debug) << "disableAuto";
+ LOG(RPiAgc, Debug) << "disableAutoExposure";
/* All channels are enabled/disabled together. */
for (auto &data : channelData_)
- data.channel.disableAuto();
+ data.channel.disableAutoExposure();
}
-void Agc::enableAuto()
+void Agc::enableAutoExposure()
{
- LOG(RPiAgc, Debug) << "enableAuto";
+ LOG(RPiAgc, Debug) << "enableAutoExposure";
/* All channels are enabled/disabled together. */
for (auto &data : channelData_)
- data.channel.enableAuto();
+ data.channel.enableAutoExposure();
+}
+
+bool Agc::autoExposureEnabled() const
+{
+ LOG(RPiAgc, Debug) << "autoExposureEnabled";
+
+ /*
+ * We always have at least one channel, and since all channels are
+ * enabled and disabled together we can simply check the first one.
+ */
+ return channelData_[0].channel.autoExposureEnabled();
+}
+
+void Agc::disableAutoGain()
+{
+ LOG(RPiAgc, Debug) << "disableAutoGain";
+
+ /* All channels are enabled/disabled together. */
+ for (auto &data : channelData_)
+ data.channel.disableAutoGain();
+}
+
+void Agc::enableAutoGain()
+{
+ LOG(RPiAgc, Debug) << "enableAutoGain";
+
+ /* All channels are enabled/disabled together. */
+ for (auto &data : channelData_)
+ data.channel.enableAutoGain();
+}
+
+bool Agc::autoGainEnabled() const
+{
+ LOG(RPiAgc, Debug) << "autoGainEnabled";
+
+ /*
+ * We always have at least one channel, and since all channels are
+ * enabled and disabled together we can simply check the first one.
+ */
+ return channelData_[0].channel.autoGainEnabled();
}
unsigned int Agc::getConvergenceFrames() const
@@ -127,21 +167,21 @@ void Agc::setFlickerPeriod(Duration flickerPeriod)
data.channel.setFlickerPeriod(flickerPeriod);
}
-void Agc::setMaxShutter(Duration maxShutter)
+void Agc::setMaxExposureTime(Duration maxExposureTime)
{
/* Frame durations will be the same across all channels too. */
for (auto &data : channelData_)
- data.channel.setMaxShutter(maxShutter);
+ data.channel.setMaxExposureTime(maxExposureTime);
}
-void Agc::setFixedShutter(unsigned int channelIndex, Duration fixedShutter)
+void Agc::setFixedExposureTime(unsigned int channelIndex, Duration fixedExposureTime)
{
if (checkChannel(channelIndex))
return;
- LOG(RPiAgc, Debug) << "setFixedShutter " << fixedShutter
+ LOG(RPiAgc, Debug) << "setFixedExposureTime " << fixedExposureTime
<< " for channel " << channelIndex;
- channelData_[channelIndex].channel.setFixedShutter(fixedShutter);
+ channelData_[channelIndex].channel.setFixedExposureTime(fixedExposureTime);
}
void Agc::setFixedAnalogueGain(unsigned int channelIndex, double fixedAnalogueGain)
diff --git a/src/ipa/rpi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h
index 5d056f02..c3a940bf 100644
--- a/src/ipa/rpi/controller/rpi/agc.h
+++ b/src/ipa/rpi/controller/rpi/agc.h
@@ -32,16 +32,20 @@ public:
std::vector<double> const &getWeights() const override;
void setEv(unsigned int channel, double ev) override;
void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;
- void setMaxShutter(libcamera::utils::Duration maxShutter) override;
- void setFixedShutter(unsigned int channelIndex,
- libcamera::utils::Duration fixedShutter) override;
+ void setMaxExposureTime(libcamera::utils::Duration maxExposureTime) override;
+ void setFixedExposureTime(unsigned int channelIndex,
+ libcamera::utils::Duration fixedExposureTime) override;
void setFixedAnalogueGain(unsigned int channelIndex,
double fixedAnalogueGain) override;
void setMeteringMode(std::string const &meteringModeName) override;
void setExposureMode(std::string const &exposureModeName) override;
void setConstraintMode(std::string const &contraintModeName) override;
- void enableAuto() override;
- void disableAuto() override;
+ void enableAutoExposure() override;
+ void disableAutoExposure() override;
+ bool autoExposureEnabled() const override;
+ void enableAutoGain() override;
+ void disableAutoGain() override;
+ bool autoGainEnabled() const override;
void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;
void prepare(Metadata *imageMetadata) override;
void process(StatisticsPtr &stats, Metadata *imageMetadata) override;
diff --git a/src/ipa/rpi/controller/rpi/agc_channel.cpp b/src/ipa/rpi/controller/rpi/agc_channel.cpp
index cf2565a8..a5562760 100644
--- a/src/ipa/rpi/controller/rpi/agc_channel.cpp
+++ b/src/ipa/rpi/controller/rpi/agc_channel.cpp
@@ -12,6 +12,10 @@
#include <libcamera/base/log.h>
+#include "libcamera/internal/vector.h"
+
+#include "libipa/colours.h"
+
#include "../awb_status.h"
#include "../device_status.h"
#include "../histogram.h"
@@ -65,7 +69,7 @@ int AgcExposureMode::read(const libcamera::YamlObject &params)
auto value = params["shutter"].getList<double>();
if (!value)
return -EINVAL;
- std::transform(value->begin(), value->end(), std::back_inserter(shutter),
+ std::transform(value->begin(), value->end(), std::back_inserter(exposureTime),
[](double v) { return v * 1us; });
value = params["gain"].getList<double>();
@@ -73,13 +77,13 @@ int AgcExposureMode::read(const libcamera::YamlObject &params)
return -EINVAL;
gain = std::move(*value);
- if (shutter.size() < 2 || gain.size() < 2) {
+ if (exposureTime.size() < 2 || gain.size() < 2) {
LOG(RPiAgc, Error)
<< "AgcExposureMode: must have at least two entries in exposure profile";
return -EINVAL;
}
- if (shutter.size() != gain.size()) {
+ if (exposureTime.size() != gain.size()) {
LOG(RPiAgc, Error)
<< "AgcExposureMode: expect same number of exposure and gain entries in exposure profile";
return -EINVAL;
@@ -260,7 +264,7 @@ int AgcConfig::read(const libcamera::YamlObject &params)
}
AgcChannel::ExposureValues::ExposureValues()
- : shutter(0s), analogueGain(0),
+ : exposureTime(0s), analogueGain(0),
totalExposure(0s), totalExposureNoDG(0s)
{
}
@@ -269,7 +273,7 @@ AgcChannel::AgcChannel()
: meteringMode_(nullptr), exposureMode_(nullptr), constraintMode_(nullptr),
frameCount_(0), lockCount_(0),
lastTargetExposure_(0s), ev_(1.0), flickerPeriod_(0s),
- maxShutter_(0s), fixedShutter_(0s), fixedAnalogueGain_(0.0)
+ maxExposureTime_(0s), fixedExposureTime_(0s), fixedAnalogueGain_(0.0)
{
/* Set AWB default values in case early frames have no updates in metadata. */
awb_.gainR = 1.0;
@@ -310,31 +314,49 @@ int AgcChannel::read(const libcamera::YamlObject &params,
exposureMode_ = &config_.exposureModes[exposureModeName_];
constraintModeName_ = config_.defaultConstraintMode;
constraintMode_ = &config_.constraintModes[constraintModeName_];
- /* Set up the "last shutter/gain" values, in case AGC starts "disabled". */
- status_.shutterTime = config_.defaultExposureTime;
+ /* Set up the "last exposure time/gain" values, in case AGC starts "disabled". */
+ status_.exposureTime = config_.defaultExposureTime;
status_.analogueGain = config_.defaultAnalogueGain;
return 0;
}
-void AgcChannel::disableAuto()
+void AgcChannel::disableAutoExposure()
+{
+ fixedExposureTime_ = status_.exposureTime;
+}
+
+void AgcChannel::enableAutoExposure()
+{
+ fixedExposureTime_ = 0s;
+}
+
+bool AgcChannel::autoExposureEnabled() const
+{
+ return fixedExposureTime_ == 0s;
+}
+
+void AgcChannel::disableAutoGain()
{
- fixedShutter_ = status_.shutterTime;
fixedAnalogueGain_ = status_.analogueGain;
}
-void AgcChannel::enableAuto()
+void AgcChannel::enableAutoGain()
{
- fixedShutter_ = 0s;
fixedAnalogueGain_ = 0;
}
+bool AgcChannel::autoGainEnabled() const
+{
+ return fixedAnalogueGain_ == 0;
+}
+
unsigned int AgcChannel::getConvergenceFrames() const
{
/*
- * If shutter and gain have been explicitly set, there is no
+ * If exposure time and gain have been explicitly set, there is no
* convergence to happen, so no need to drop any frames - return zero.
*/
- if (fixedShutter_ && fixedAnalogueGain_)
+ if (fixedExposureTime_ && fixedAnalogueGain_)
return 0;
else
return config_.convergenceFrames;
@@ -362,16 +384,16 @@ void AgcChannel::setFlickerPeriod(Duration flickerPeriod)
flickerPeriod_ = flickerPeriod;
}
-void AgcChannel::setMaxShutter(Duration maxShutter)
+void AgcChannel::setMaxExposureTime(Duration maxExposureTime)
{
- maxShutter_ = maxShutter;
+ maxExposureTime_ = maxExposureTime;
}
-void AgcChannel::setFixedShutter(Duration fixedShutter)
+void AgcChannel::setFixedExposureTime(Duration fixedExposureTime)
{
- fixedShutter_ = fixedShutter;
+ fixedExposureTime_ = fixedExposureTime;
/* Set this in case someone calls disableAuto() straight after. */
- status_.shutterTime = limitShutter(fixedShutter_);
+ status_.exposureTime = limitExposureTime(fixedExposureTime_);
}
void AgcChannel::setFixedAnalogueGain(double fixedAnalogueGain)
@@ -411,22 +433,22 @@ void AgcChannel::switchMode(CameraMode const &cameraMode,
double lastSensitivity = mode_.sensitivity;
mode_ = cameraMode;
- Duration fixedShutter = limitShutter(fixedShutter_);
- if (fixedShutter && fixedAnalogueGain_) {
+ Duration fixedExposureTime = limitExposureTime(fixedExposureTime_);
+ if (fixedExposureTime && fixedAnalogueGain_) {
/* We're going to reset the algorithm here with these fixed values. */
fetchAwbStatus(metadata);
double minColourGain = std::min({ awb_.gainR, awb_.gainG, awb_.gainB, 1.0 });
ASSERT(minColourGain != 0.0);
/* This is the equivalent of computeTargetExposure and applyDigitalGain. */
- target_.totalExposureNoDG = fixedShutter_ * fixedAnalogueGain_;
+ target_.totalExposureNoDG = fixedExposureTime_ * fixedAnalogueGain_;
target_.totalExposure = target_.totalExposureNoDG / minColourGain;
/* Equivalent of filterExposure. This resets any "history". */
filtered_ = target_;
/* Equivalent of divideUpExposure. */
- filtered_.shutter = fixedShutter;
+ filtered_.exposureTime = fixedExposureTime;
filtered_.analogueGain = fixedAnalogueGain_;
} else if (status_.totalExposureValue) {
/*
@@ -448,14 +470,15 @@ void AgcChannel::switchMode(CameraMode const &cameraMode,
divideUpExposure();
} else {
/*
- * We come through here on startup, when at least one of the shutter
- * or gain has not been fixed. We must still write those values out so
- * that they will be applied immediately. We supply some arbitrary defaults
- * for any that weren't set.
+ * We come through here on startup, when at least one of the
+ * exposure time or gain has not been fixed. We must still
+ * write those values out so that they will be applied
+ * immediately. We supply some arbitrary defaults for any that
+ * weren't set.
*/
/* Equivalent of divideUpExposure. */
- filtered_.shutter = fixedShutter ? fixedShutter : config_.defaultExposureTime;
+ filtered_.exposureTime = fixedExposureTime ? fixedExposureTime : config_.defaultExposureTime;
filtered_.analogueGain = fixedAnalogueGain_ ? fixedAnalogueGain_ : config_.defaultAnalogueGain;
}
@@ -481,7 +504,7 @@ void AgcChannel::prepare(Metadata *imageMetadata)
/* Process has run, so we have meaningful values. */
DeviceStatus deviceStatus;
if (imageMetadata->get("device.status", deviceStatus) == 0) {
- Duration actualExposure = deviceStatus.shutterSpeed *
+ Duration actualExposure = deviceStatus.exposureTime *
deviceStatus.analogueGain;
if (actualExposure) {
double digitalGain = totalExposureValue / actualExposure;
@@ -535,7 +558,7 @@ void AgcChannel::process(StatisticsPtr &stats, DeviceStatus const &deviceStatus,
*/
bool desaturate = applyDigitalGain(gain, targetY, channelBound);
/*
- * The last thing is to divide up the exposure value into a shutter time
+ * The last thing is to divide up the exposure value into a exposure time
* and analogue gain, according to the current exposure mode.
*/
divideUpExposure();
@@ -551,7 +574,7 @@ bool AgcChannel::updateLockStatus(DeviceStatus const &deviceStatus)
const double resetMargin = 1.5;
/* Add 200us to the exposure time error to allow for line quantisation. */
- Duration exposureError = lastDeviceStatus_.shutterSpeed * errorFactor + 200us;
+ Duration exposureError = lastDeviceStatus_.exposureTime * errorFactor + 200us;
double gainError = lastDeviceStatus_.analogueGain * errorFactor;
Duration targetError = lastTargetExposure_ * errorFactor;
@@ -560,15 +583,15 @@ bool AgcChannel::updateLockStatus(DeviceStatus const &deviceStatus)
* the values we keep requesting may be unachievable. For this reason
* we only insist that we're close to values in the past few frames.
*/
- if (deviceStatus.shutterSpeed > lastDeviceStatus_.shutterSpeed - exposureError &&
- deviceStatus.shutterSpeed < lastDeviceStatus_.shutterSpeed + exposureError &&
+ if (deviceStatus.exposureTime > lastDeviceStatus_.exposureTime - exposureError &&
+ deviceStatus.exposureTime < lastDeviceStatus_.exposureTime + exposureError &&
deviceStatus.analogueGain > lastDeviceStatus_.analogueGain - gainError &&
deviceStatus.analogueGain < lastDeviceStatus_.analogueGain + gainError &&
status_.targetExposureValue > lastTargetExposure_ - targetError &&
status_.targetExposureValue < lastTargetExposure_ + targetError)
lockCount_ = std::min(lockCount_ + 1, maxLockCount);
- else if (deviceStatus.shutterSpeed < lastDeviceStatus_.shutterSpeed - resetMargin * exposureError ||
- deviceStatus.shutterSpeed > lastDeviceStatus_.shutterSpeed + resetMargin * exposureError ||
+ else if (deviceStatus.exposureTime < lastDeviceStatus_.exposureTime - resetMargin * exposureError ||
+ deviceStatus.exposureTime > lastDeviceStatus_.exposureTime + resetMargin * exposureError ||
deviceStatus.analogueGain < lastDeviceStatus_.analogueGain - resetMargin * gainError ||
deviceStatus.analogueGain > lastDeviceStatus_.analogueGain + resetMargin * gainError ||
status_.targetExposureValue < lastTargetExposure_ - resetMargin * targetError ||
@@ -586,11 +609,11 @@ void AgcChannel::housekeepConfig()
{
/* First fetch all the up-to-date settings, so no one else has to do it. */
status_.ev = ev_;
- status_.fixedShutter = limitShutter(fixedShutter_);
+ status_.fixedExposureTime = limitExposureTime(fixedExposureTime_);
status_.fixedAnalogueGain = fixedAnalogueGain_;
status_.flickerPeriod = flickerPeriod_;
- LOG(RPiAgc, Debug) << "ev " << status_.ev << " fixedShutter "
- << status_.fixedShutter << " fixedAnalogueGain "
+ LOG(RPiAgc, Debug) << "ev " << status_.ev << " fixedExposureTime "
+ << status_.fixedExposureTime << " fixedAnalogueGain "
<< status_.fixedAnalogueGain;
/*
* Make sure the "mode" pointers point to the up-to-date things, if
@@ -634,10 +657,10 @@ void AgcChannel::housekeepConfig()
void AgcChannel::fetchCurrentExposure(DeviceStatus const &deviceStatus)
{
- current_.shutter = deviceStatus.shutterSpeed;
+ current_.exposureTime = deviceStatus.exposureTime;
current_.analogueGain = deviceStatus.analogueGain;
current_.totalExposure = 0s; /* this value is unused */
- current_.totalExposureNoDG = current_.shutter * current_.analogueGain;
+ current_.totalExposureNoDG = current_.exposureTime * current_.analogueGain;
}
void AgcChannel::fetchAwbStatus(Metadata *imageMetadata)
@@ -678,12 +701,13 @@ static double computeInitialY(StatisticsPtr &stats, AwbStatus const &awb,
* Note that the weights are applied by the IPA to the statistics directly,
* before they are given to us here.
*/
- double rSum = 0, gSum = 0, bSum = 0, pixelSum = 0;
+ RGB<double> sum{ 0.0 };
+ double pixelSum = 0;
for (unsigned int i = 0; i < stats->agcRegions.numRegions(); i++) {
auto &region = stats->agcRegions.get(i);
- rSum += std::min<double>(region.val.rSum * gain, (maxVal - 1) * region.counted);
- gSum += std::min<double>(region.val.gSum * gain, (maxVal - 1) * region.counted);
- bSum += std::min<double>(region.val.bSum * gain, (maxVal - 1) * region.counted);
+ sum.r() += std::min<double>(region.val.rSum * gain, (maxVal - 1) * region.counted);
+ sum.g() += std::min<double>(region.val.gSum * gain, (maxVal - 1) * region.counted);
+ sum.b() += std::min<double>(region.val.bSum * gain, (maxVal - 1) * region.counted);
pixelSum += region.counted;
}
if (pixelSum == 0.0) {
@@ -691,14 +715,11 @@ static double computeInitialY(StatisticsPtr &stats, AwbStatus const &awb,
return 0;
}
- double ySum;
/* Factor in the AWB correction if needed. */
- if (stats->agcStatsPos == Statistics::AgcStatsPos::PreWb) {
- ySum = rSum * awb.gainR * .299 +
- gSum * awb.gainG * .587 +
- bSum * awb.gainB * .114;
- } else
- ySum = rSum * .299 + gSum * .587 + bSum * .114;
+ if (stats->agcStatsPos == Statistics::AgcStatsPos::PreWb)
+ sum *= RGB<double>{ { awb.gainR, awb.gainR, awb.gainB } };
+
+ double ySum = ipa::rec601LuminanceFromRGB(sum);
return ySum / pixelSum / (1 << 16);
}
@@ -775,17 +796,17 @@ void AgcChannel::computeGain(StatisticsPtr &statistics, Metadata *imageMetadata,
void AgcChannel::computeTargetExposure(double gain)
{
- if (status_.fixedShutter && status_.fixedAnalogueGain) {
+ if (status_.fixedExposureTime && status_.fixedAnalogueGain) {
/*
- * When ag and shutter are both fixed, we need to drive the
- * total exposure so that we end up with a digital gain of at least
- * 1/minColourGain. Otherwise we'd desaturate channels causing
- * white to go cyan or magenta.
+ * When analogue gain and exposure time are both fixed, we need
+ * to drive the total exposure so that we end up with a digital
+ * gain of at least 1/minColourGain. Otherwise we'd desaturate
+ * channels causing white to go cyan or magenta.
*/
double minColourGain = std::min({ awb_.gainR, awb_.gainG, awb_.gainB, 1.0 });
ASSERT(minColourGain != 0.0);
target_.totalExposure =
- status_.fixedShutter * status_.fixedAnalogueGain / minColourGain;
+ status_.fixedExposureTime * status_.fixedAnalogueGain / minColourGain;
} else {
/*
* The statistics reflect the image without digital gain, so the final
@@ -793,12 +814,12 @@ void AgcChannel::computeTargetExposure(double gain)
*/
target_.totalExposure = current_.totalExposureNoDG * gain;
/* The final target exposure is also limited to what the exposure mode allows. */
- Duration maxShutter = status_.fixedShutter
- ? status_.fixedShutter
- : exposureMode_->shutter.back();
- maxShutter = limitShutter(maxShutter);
+ Duration maxExposureTime = status_.fixedExposureTime
+ ? status_.fixedExposureTime
+ : exposureMode_->exposureTime.back();
+ maxExposureTime = limitExposureTime(maxExposureTime);
Duration maxTotalExposure =
- maxShutter *
+ maxExposureTime *
(status_.fixedAnalogueGain != 0.0
? status_.fixedAnalogueGain
: exposureMode_->gain.back());
@@ -882,12 +903,16 @@ void AgcChannel::filterExposure()
double stableRegion = config_.stableRegion;
/*
- * AGC adapts instantly if both shutter and gain are directly specified
- * or we're in the startup phase.
+ * AGC adapts instantly if both exposure time and gain are directly
+ * specified or we're in the startup phase. Also disable the stable
+ * region, because we want to reflect any user exposure/gain updates,
+ * however small.
*/
- if ((status_.fixedShutter && status_.fixedAnalogueGain) ||
- frameCount_ <= config_.startupFrames)
+ if ((status_.fixedExposureTime && status_.fixedAnalogueGain) ||
+ frameCount_ <= config_.startupFrames) {
speed = 1.0;
+ stableRegion = 0.0;
+ }
if (!filtered_.totalExposure) {
filtered_.totalExposure = target_.totalExposure;
} else if (filtered_.totalExposure * (1.0 - stableRegion) < target_.totalExposure &&
@@ -911,34 +936,34 @@ void AgcChannel::filterExposure()
void AgcChannel::divideUpExposure()
{
/*
- * Sending the fixed shutter/gain cases through the same code may seem
- * unnecessary, but it will make more sense when extend this to cover
- * variable aperture.
+ * Sending the fixed exposure time/gain cases through the same code may
+ * seem unnecessary, but it will make more sense when extend this to
+ * cover variable aperture.
*/
Duration exposureValue = filtered_.totalExposureNoDG;
- Duration shutterTime;
+ Duration exposureTime;
double analogueGain;
- shutterTime = status_.fixedShutter ? status_.fixedShutter
- : exposureMode_->shutter[0];
- shutterTime = limitShutter(shutterTime);
+ exposureTime = status_.fixedExposureTime ? status_.fixedExposureTime
+ : exposureMode_->exposureTime[0];
+ exposureTime = limitExposureTime(exposureTime);
analogueGain = status_.fixedAnalogueGain != 0.0 ? status_.fixedAnalogueGain
: exposureMode_->gain[0];
analogueGain = limitGain(analogueGain);
- if (shutterTime * analogueGain < exposureValue) {
+ if (exposureTime * analogueGain < exposureValue) {
for (unsigned int stage = 1;
stage < exposureMode_->gain.size(); stage++) {
- if (!status_.fixedShutter) {
- Duration stageShutter =
- limitShutter(exposureMode_->shutter[stage]);
- if (stageShutter * analogueGain >= exposureValue) {
- shutterTime = exposureValue / analogueGain;
+ if (!status_.fixedExposureTime) {
+ Duration stageExposureTime =
+ limitExposureTime(exposureMode_->exposureTime[stage]);
+ if (stageExposureTime * analogueGain >= exposureValue) {
+ exposureTime = exposureValue / analogueGain;
break;
}
- shutterTime = stageShutter;
+ exposureTime = stageExposureTime;
}
if (status_.fixedAnalogueGain == 0.0) {
- if (exposureMode_->gain[stage] * shutterTime >= exposureValue) {
- analogueGain = exposureValue / shutterTime;
+ if (exposureMode_->gain[stage] * exposureTime >= exposureValue) {
+ analogueGain = exposureValue / exposureTime;
break;
}
analogueGain = exposureMode_->gain[stage];
@@ -946,18 +971,19 @@ void AgcChannel::divideUpExposure()
}
}
}
- LOG(RPiAgc, Debug) << "Divided up shutter and gain are " << shutterTime << " and "
- << analogueGain;
+ LOG(RPiAgc, Debug)
+ << "Divided up exposure time and gain are " << exposureTime
+ << " and " << analogueGain;
/*
- * Finally adjust shutter time for flicker avoidance (require both
- * shutter and gain not to be fixed).
+ * Finally adjust exposure time for flicker avoidance (require both
+ * exposure time and gain not to be fixed).
*/
- if (!status_.fixedShutter && !status_.fixedAnalogueGain &&
+ if (!status_.fixedExposureTime && !status_.fixedAnalogueGain &&
status_.flickerPeriod) {
- int flickerPeriods = shutterTime / status_.flickerPeriod;
+ int flickerPeriods = exposureTime / status_.flickerPeriod;
if (flickerPeriods) {
- Duration newShutterTime = flickerPeriods * status_.flickerPeriod;
- analogueGain *= shutterTime / newShutterTime;
+ Duration newExposureTime = flickerPeriods * status_.flickerPeriod;
+ analogueGain *= exposureTime / newExposureTime;
/*
* We should still not allow the ag to go over the
* largest value in the exposure mode. Note that this
@@ -966,12 +992,12 @@ void AgcChannel::divideUpExposure()
*/
analogueGain = std::min(analogueGain, exposureMode_->gain.back());
analogueGain = limitGain(analogueGain);
- shutterTime = newShutterTime;
+ exposureTime = newExposureTime;
}
- LOG(RPiAgc, Debug) << "After flicker avoidance, shutter "
- << shutterTime << " gain " << analogueGain;
+ LOG(RPiAgc, Debug) << "After flicker avoidance, exposure time "
+ << exposureTime << " gain " << analogueGain;
}
- filtered_.shutter = shutterTime;
+ filtered_.exposureTime = exposureTime;
filtered_.analogueGain = analogueGain;
}
@@ -979,7 +1005,7 @@ void AgcChannel::writeAndFinish(Metadata *imageMetadata, bool desaturate)
{
status_.totalExposureValue = filtered_.totalExposure;
status_.targetExposureValue = desaturate ? 0s : target_.totalExposure;
- status_.shutterTime = filtered_.shutter;
+ status_.exposureTime = filtered_.exposureTime;
status_.analogueGain = filtered_.analogueGain;
/*
* Write to metadata as well, in case anyone wants to update the camera
@@ -988,32 +1014,32 @@ void AgcChannel::writeAndFinish(Metadata *imageMetadata, bool desaturate)
imageMetadata->set("agc.status", status_);
LOG(RPiAgc, Debug) << "Output written, total exposure requested is "
<< filtered_.totalExposure;
- LOG(RPiAgc, Debug) << "Camera exposure update: shutter time " << filtered_.shutter
+ LOG(RPiAgc, Debug) << "Camera exposure update: exposure time " << filtered_.exposureTime
<< " analogue gain " << filtered_.analogueGain;
}
-Duration AgcChannel::limitShutter(Duration shutter)
+Duration AgcChannel::limitExposureTime(Duration exposureTime)
{
/*
- * shutter == 0 is a special case for fixed shutter values, and must pass
- * through unchanged
+ * exposureTime == 0 is a special case for fixed exposure time values,
+ * and must pass through unchanged.
*/
- if (!shutter)
- return shutter;
+ if (!exposureTime)
+ return exposureTime;
- shutter = std::clamp(shutter, mode_.minShutter, maxShutter_);
- return shutter;
+ exposureTime = std::clamp(exposureTime, mode_.minExposureTime, maxExposureTime_);
+ return exposureTime;
}
double AgcChannel::limitGain(double gain) const
{
/*
- * Only limit the lower bounds of the gain value to what the sensor limits.
- * The upper bound on analogue gain will be made up with additional digital
- * gain applied by the ISP.
+ * Only limit the lower bounds of the gain value to what the sensor
+ * limits. The upper bound on analogue gain will be made up with
+ * additional digital gain applied by the ISP.
*
- * gain == 0.0 is a special case for fixed shutter values, and must pass
- * through unchanged
+ * gain == 0.0 is a special case for fixed exposure time values, and
+ * must pass through unchanged.
*/
if (!gain)
return gain;
diff --git a/src/ipa/rpi/controller/rpi/agc_channel.h b/src/ipa/rpi/controller/rpi/agc_channel.h
index 58368889..fa697e6f 100644
--- a/src/ipa/rpi/controller/rpi/agc_channel.h
+++ b/src/ipa/rpi/controller/rpi/agc_channel.h
@@ -30,7 +30,7 @@ struct AgcMeteringMode {
};
struct AgcExposureMode {
- std::vector<libcamera::utils::Duration> shutter;
+ std::vector<libcamera::utils::Duration> exposureTime;
std::vector<double> gain;
int read(const libcamera::YamlObject &params);
};
@@ -90,14 +90,18 @@ public:
std::vector<double> const &getWeights() const;
void setEv(double ev);
void setFlickerPeriod(libcamera::utils::Duration flickerPeriod);
- void setMaxShutter(libcamera::utils::Duration maxShutter);
- void setFixedShutter(libcamera::utils::Duration fixedShutter);
+ void setMaxExposureTime(libcamera::utils::Duration maxExposureTime);
+ void setFixedExposureTime(libcamera::utils::Duration fixedExposureTime);
void setFixedAnalogueGain(double fixedAnalogueGain);
void setMeteringMode(std::string const &meteringModeName);
void setExposureMode(std::string const &exposureModeName);
void setConstraintMode(std::string const &contraintModeName);
- void enableAuto();
- void disableAuto();
+ void enableAutoExposure();
+ void disableAutoExposure();
+ bool autoExposureEnabled() const;
+ void enableAutoGain();
+ void disableAutoGain();
+ bool autoGainEnabled() const;
void switchMode(CameraMode const &cameraMode, Metadata *metadata);
void prepare(Metadata *imageMetadata);
void process(StatisticsPtr &stats, DeviceStatus const &deviceStatus, Metadata *imageMetadata,
@@ -117,7 +121,7 @@ private:
bool applyDigitalGain(double gain, double targetY, bool channelBound);
void divideUpExposure();
void writeAndFinish(Metadata *imageMetadata, bool desaturate);
- libcamera::utils::Duration limitShutter(libcamera::utils::Duration shutter);
+ libcamera::utils::Duration limitExposureTime(libcamera::utils::Duration exposureTime);
double limitGain(double gain) const;
AgcMeteringMode *meteringMode_;
AgcExposureMode *exposureMode_;
@@ -128,7 +132,7 @@ private:
struct ExposureValues {
ExposureValues();
- libcamera::utils::Duration shutter;
+ libcamera::utils::Duration exposureTime;
double analogueGain;
libcamera::utils::Duration totalExposure;
libcamera::utils::Duration totalExposureNoDG; /* without digital gain */
@@ -146,8 +150,8 @@ private:
std::string constraintModeName_;
double ev_;
libcamera::utils::Duration flickerPeriod_;
- libcamera::utils::Duration maxShutter_;
- libcamera::utils::Duration fixedShutter_;
+ libcamera::utils::Duration maxExposureTime_;
+ libcamera::utils::Duration fixedExposureTime_;
double fixedAnalogueGain_;
};
diff --git a/src/ipa/rpi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp
index 161fd455..21edb819 100644
--- a/src/ipa/rpi/controller/rpi/alsc.cpp
+++ b/src/ipa/rpi/controller/rpi/alsc.cpp
@@ -6,8 +6,8 @@
*/
#include <algorithm>
+#include <cmath>
#include <functional>
-#include <math.h>
#include <numeric>
#include <vector>
@@ -252,12 +252,12 @@ static bool compareModes(CameraMode const &cm0, CameraMode const &cm1)
*/
if (cm0.transform != cm1.transform)
return true;
- int leftDiff = abs(cm0.cropX - cm1.cropX);
- int topDiff = abs(cm0.cropY - cm1.cropY);
- int rightDiff = fabs(cm0.cropX + cm0.scaleX * cm0.width -
- cm1.cropX - cm1.scaleX * cm1.width);
- int bottomDiff = fabs(cm0.cropY + cm0.scaleY * cm0.height -
- cm1.cropY - cm1.scaleY * cm1.height);
+ int leftDiff = std::abs(cm0.cropX - cm1.cropX);
+ int topDiff = std::abs(cm0.cropY - cm1.cropY);
+ int rightDiff = std::abs(cm0.cropX + cm0.scaleX * cm0.width -
+ cm1.cropX - cm1.scaleX * cm1.width);
+ int bottomDiff = std::abs(cm0.cropY + cm0.scaleY * cm0.height -
+ cm1.cropY - cm1.scaleY * cm1.height);
/*
* These thresholds are a rather arbitrary amount chosen to trigger
* when carrying on with the previously calculated tables might be
@@ -732,7 +732,7 @@ static double gaussSeidel2Sor(const SparseArray<double> &M, double omega,
double maxDiff = 0;
for (i = 0; i < XY; i++) {
lambda[i] = oldLambda[i] + (lambda[i] - oldLambda[i]) * omega;
- if (fabs(lambda[i] - oldLambda[i]) > fabs(maxDiff))
+ if (std::abs(lambda[i] - oldLambda[i]) > std::abs(maxDiff))
maxDiff = lambda[i] - oldLambda[i];
}
return maxDiff;
@@ -764,7 +764,7 @@ static void runMatrixIterations(const Array2D<double> &C,
constructM(C, W, M);
double lastMaxDiff = std::numeric_limits<double>::max();
for (unsigned int i = 0; i < nIter; i++) {
- double maxDiff = fabs(gaussSeidel2Sor(M, omega, lambda, lambdaBound));
+ double maxDiff = std::abs(gaussSeidel2Sor(M, omega, lambda, lambdaBound));
if (maxDiff < threshold) {
LOG(RPiAlsc, Debug)
<< "Stop after " << i + 1 << " iterations";
diff --git a/src/ipa/rpi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp
index f45525bc..8479ae40 100644
--- a/src/ipa/rpi/controller/rpi/awb.cpp
+++ b/src/ipa/rpi/controller/rpi/awb.cpp
@@ -6,6 +6,7 @@
*/
#include <assert.h>
+#include <cmath>
#include <functional>
#include <libcamera/base/log.h>
@@ -20,6 +21,8 @@ using namespace libcamera;
LOG_DEFINE_CATEGORY(RPiAwb)
+constexpr double kDefaultCT = 4500.0;
+
#define NAME "rpi.awb"
/*
@@ -167,6 +170,14 @@ int AwbConfig::read(const libcamera::YamlObject &params)
whitepointB = params["whitepoint_b"].get<double>(0.0);
if (bayes == false)
sensitivityR = sensitivityB = 1.0; /* nor do sensitivities make any sense */
+ /*
+ * The biasProportion parameter adds a small proportion of the counted
+ * pixles to a region biased to the biasCT colour temperature.
+ *
+ * A typical value for biasProportion would be between 0.05 to 0.1.
+ */
+ biasProportion = params["bias_proportion"].get<double>(0.0);
+ biasCT = params["bias_ct"].get<double>(kDefaultCT);
return 0;
}
@@ -214,7 +225,7 @@ void Awb::initialise()
syncResults_.gainB = 1.0 / config_.ctB.eval(syncResults_.temperatureK);
} else {
/* random values just to stop the world blowing up */
- syncResults_.temperatureK = 4500;
+ syncResults_.temperatureK = kDefaultCT;
syncResults_.gainR = syncResults_.gainG = syncResults_.gainB = 1.0;
}
prevSyncResults_ = syncResults_;
@@ -282,6 +293,24 @@ void Awb::setManualGains(double manualR, double manualB)
}
}
+void Awb::setColourTemperature(double temperatureK)
+{
+ if (!config_.bayes) {
+ LOG(RPiAwb, Warning) << "AWB uncalibrated - cannot set colour temperature";
+ return;
+ }
+
+ temperatureK = config_.ctR.domain().clamp(temperatureK);
+ manualR_ = 1 / config_.ctR.eval(temperatureK);
+ manualB_ = 1 / config_.ctB.eval(temperatureK);
+
+ syncResults_.temperatureK = temperatureK;
+ syncResults_.gainR = manualR_;
+ syncResults_.gainG = 1.0;
+ syncResults_.gainB = manualB_;
+ prevSyncResults_ = syncResults_;
+}
+
void Awb::switchMode([[maybe_unused]] CameraMode const &cameraMode,
Metadata *metadata)
{
@@ -407,7 +436,8 @@ void Awb::asyncFunc()
static void generateStats(std::vector<Awb::RGB> &zones,
StatisticsPtr &stats, double minPixels,
- double minG, Metadata &globalMetadata)
+ double minG, Metadata &globalMetadata,
+ double biasProportion, double biasCtR, double biasCtB)
{
std::scoped_lock<RPiController::Metadata> l(globalMetadata);
@@ -420,6 +450,14 @@ static void generateStats(std::vector<Awb::RGB> &zones,
continue;
zone.R = region.val.rSum / region.counted;
zone.B = region.val.bSum / region.counted;
+ /*
+ * Add some bias samples to allow the search to tend to a
+ * bias CT in failure cases.
+ */
+ const unsigned int proportion = biasProportion * region.counted;
+ zone.R += proportion * biasCtR;
+ zone.B += proportion * biasCtB;
+ zone.G += proportion * 1.0;
/* Factor in the ALSC applied colour shading correction if required. */
const AlscStatus *alscStatus = globalMetadata.getLocked<AlscStatus>("alsc.status");
if (stats->colourStatsPos == Statistics::ColourStatsPos::PreLsc && alscStatus) {
@@ -439,8 +477,11 @@ void Awb::prepareStats()
* LSC has already been applied to the stats in this pipeline, so stop
* any LSC compensation. We also ignore config_.fast in this version.
*/
+ const double biasCtR = config_.bayes ? config_.ctR.eval(config_.biasCT) : 0;
+ const double biasCtB = config_.bayes ? config_.ctB.eval(config_.biasCT) : 0;
generateStats(zones_, statistics_, config_.minPixels,
- config_.minG, getGlobalMetadata());
+ config_.minG, getGlobalMetadata(),
+ config_.biasProportion, biasCtR, biasCtB);
/*
* apply sensitivities, so values appear to come from our "canonical"
* sensor.
@@ -505,7 +546,7 @@ static double interpolateQuadatric(ipa::Pwl::Point const &a, ipa::Pwl::Point con
const double eps = 1e-3;
ipa::Pwl::Point ca = c - a, ba = b - a;
double denominator = 2 * (ba.y() * ca.x() - ca.y() * ba.x());
- if (abs(denominator) > eps) {
+ if (std::abs(denominator) > eps) {
double numerator = ba.y() * ca.x() * ca.x() - ca.y() * ba.x() * ba.x();
double result = numerator / denominator + a.x();
return std::max(a.x(), std::min(c.x(), result));
@@ -716,7 +757,11 @@ void Awb::awbGrey()
sumR += *ri, sumB += *bi;
double gainR = sumR.G / (sumR.R + 1),
gainB = sumB.G / (sumB.B + 1);
- asyncResults_.temperatureK = 4500; /* don't know what it is */
+ /*
+ * The grey world model can't estimate the colour temperature, use a
+ * default value.
+ */
+ asyncResults_.temperatureK = kDefaultCT;
asyncResults_.gainR = gainR;
asyncResults_.gainG = 1.0;
asyncResults_.gainB = gainB;
diff --git a/src/ipa/rpi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h
index ab30f4fa..86640f8f 100644
--- a/src/ipa/rpi/controller/rpi/awb.h
+++ b/src/ipa/rpi/controller/rpi/awb.h
@@ -87,6 +87,10 @@ struct AwbConfig {
double whitepointR;
double whitepointB;
bool bayes; /* use Bayesian algorithm */
+ /* proportion of counted samples to add for the search bias */
+ double biasProportion;
+ /* CT target for the search bias */
+ double biasCT;
};
class Awb : public AwbAlgorithm
@@ -101,6 +105,7 @@ public:
void initialValues(double &gainR, double &gainB) override;
void setMode(std::string const &name) override;
void setManualGains(double manualR, double manualB) override;
+ void setColourTemperature(double temperatureK) override;
void enableAuto() override;
void disableAuto() override;
void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;
diff --git a/src/ipa/rpi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp
index ea991df9..4c968f14 100644
--- a/src/ipa/rpi/controller/rpi/black_level.cpp
+++ b/src/ipa/rpi/controller/rpi/black_level.cpp
@@ -5,7 +5,6 @@
* black level control algorithm
*/
-#include <math.h>
#include <stdint.h>
#include <libcamera/base/log.h>
diff --git a/src/ipa/rpi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp
index aefa580c..8607f152 100644
--- a/src/ipa/rpi/controller/rpi/ccm.cpp
+++ b/src/ipa/rpi/controller/rpi/ccm.cpp
@@ -29,34 +29,7 @@ LOG_DEFINE_CATEGORY(RPiCcm)
#define NAME "rpi.ccm"
-Matrix::Matrix()
-{
- memset(m, 0, sizeof(m));
-}
-Matrix::Matrix(double m0, double m1, double m2, double m3, double m4, double m5,
- double m6, double m7, double m8)
-{
- m[0][0] = m0, m[0][1] = m1, m[0][2] = m2, m[1][0] = m3, m[1][1] = m4,
- m[1][2] = m5, m[2][0] = m6, m[2][1] = m7, m[2][2] = m8;
-}
-int Matrix::read(const libcamera::YamlObject &params)
-{
- double *ptr = (double *)m;
-
- if (params.size() != 9) {
- LOG(RPiCcm, Error) << "Wrong number of values in CCM";
- return -EINVAL;
- }
-
- for (const auto &param : params.asList()) {
- auto value = param.get<double>();
- if (!value)
- return -EINVAL;
- *ptr++ = *value;
- }
-
- return 0;
-}
+using Matrix3x3 = Matrix<double, 3, 3>;
Ccm::Ccm(Controller *controller)
: CcmAlgorithm(controller), saturation_(1.0) {}
@@ -68,8 +41,6 @@ char const *Ccm::name() const
int Ccm::read(const libcamera::YamlObject &params)
{
- int ret;
-
if (params.contains("saturation")) {
config_.saturation = params["saturation"].get<ipa::Pwl>(ipa::Pwl{});
if (config_.saturation.empty())
@@ -83,9 +54,12 @@ int Ccm::read(const libcamera::YamlObject &params)
CtCcm ctCcm;
ctCcm.ct = *value;
- ret = ctCcm.ccm.read(p["ccm"]);
- if (ret)
- return ret;
+
+ auto ccm = p["ccm"].get<Matrix3x3>();
+ if (!ccm)
+ return -EINVAL;
+
+ ctCcm.ccm = *ccm;
if (!config_.ccms.empty() && ctCcm.ct <= config_.ccms.back().ct) {
LOG(RPiCcm, Error)
@@ -125,7 +99,7 @@ bool getLocked(Metadata *metadata, std::string const &tag, T &value)
return true;
}
-Matrix calculateCcm(std::vector<CtCcm> const &ccms, double ct)
+Matrix3x3 calculateCcm(std::vector<CtCcm> const &ccms, double ct)
{
if (ct <= ccms.front().ct)
return ccms.front().ccm;
@@ -141,13 +115,20 @@ Matrix calculateCcm(std::vector<CtCcm> const &ccms, double ct)
}
}
-Matrix applySaturation(Matrix const &ccm, double saturation)
+Matrix3x3 applySaturation(Matrix3x3 const &ccm, double saturation)
{
- Matrix RGB2Y(0.299, 0.587, 0.114, -0.169, -0.331, 0.500, 0.500, -0.419,
- -0.081);
- Matrix Y2RGB(1.000, 0.000, 1.402, 1.000, -0.345, -0.714, 1.000, 1.771,
- 0.000);
- Matrix S(1, 0, 0, 0, saturation, 0, 0, 0, saturation);
+ static const Matrix3x3 RGB2Y({ 0.299, 0.587, 0.114,
+ -0.169, -0.331, 0.500,
+ 0.500, -0.419, -0.081 });
+
+ static const Matrix3x3 Y2RGB({ 1.000, 0.000, 1.402,
+ 1.000, -0.345, -0.714,
+ 1.000, 1.771, 0.000 });
+
+ Matrix3x3 S({ 1, 0, 0,
+ 0, saturation, 0,
+ 0, 0, saturation });
+
return Y2RGB * S * RGB2Y * ccm;
}
@@ -170,7 +151,7 @@ void Ccm::prepare(Metadata *imageMetadata)
LOG(RPiCcm, Warning) << "no colour temperature found";
if (!luxOk)
LOG(RPiCcm, Warning) << "no lux value found";
- Matrix ccm = calculateCcm(config_.ccms, awb.temperatureK);
+ Matrix3x3 ccm = calculateCcm(config_.ccms, awb.temperatureK);
double saturation = saturation_;
struct CcmStatus ccmStatus;
ccmStatus.saturation = saturation;
@@ -181,7 +162,7 @@ void Ccm::prepare(Metadata *imageMetadata)
for (int j = 0; j < 3; j++)
for (int i = 0; i < 3; i++)
ccmStatus.matrix[j * 3 + i] =
- std::max(-8.0, std::min(7.9999, ccm.m[j][i]));
+ std::max(-8.0, std::min(7.9999, ccm[j][i]));
LOG(RPiCcm, Debug)
<< "colour temperature " << awb.temperatureK << "K";
LOG(RPiCcm, Debug)
diff --git a/src/ipa/rpi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h
index 4e5b33fe..c05dbb17 100644
--- a/src/ipa/rpi/controller/rpi/ccm.h
+++ b/src/ipa/rpi/controller/rpi/ccm.h
@@ -8,6 +8,7 @@
#include <vector>
+#include "libcamera/internal/matrix.h"
#include <libipa/pwl.h>
#include "../ccm_algorithm.h"
@@ -16,41 +17,9 @@ namespace RPiController {
/* Algorithm to calculate colour matrix. Should be placed after AWB. */
-struct Matrix {
- Matrix(double m0, double m1, double m2, double m3, double m4, double m5,
- double m6, double m7, double m8);
- Matrix();
- double m[3][3];
- int read(const libcamera::YamlObject &params);
-};
-static inline Matrix operator*(double d, Matrix const &m)
-{
- return Matrix(m.m[0][0] * d, m.m[0][1] * d, m.m[0][2] * d,
- m.m[1][0] * d, m.m[1][1] * d, m.m[1][2] * d,
- m.m[2][0] * d, m.m[2][1] * d, m.m[2][2] * d);
-}
-static inline Matrix operator*(Matrix const &m1, Matrix const &m2)
-{
- Matrix m;
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- m.m[i][j] = m1.m[i][0] * m2.m[0][j] +
- m1.m[i][1] * m2.m[1][j] +
- m1.m[i][2] * m2.m[2][j];
- return m;
-}
-static inline Matrix operator+(Matrix const &m1, Matrix const &m2)
-{
- Matrix m;
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- m.m[i][j] = m1.m[i][j] + m2.m[i][j];
- return m;
-}
-
struct CtCcm {
double ct;
- Matrix ccm;
+ libcamera::Matrix<double, 3, 3> ccm;
};
struct CcmConfig {
diff --git a/src/ipa/rpi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp
index 7b31faab..27b89a8f 100644
--- a/src/ipa/rpi/controller/rpi/lux.cpp
+++ b/src/ipa/rpi/controller/rpi/lux.cpp
@@ -4,7 +4,6 @@
*
* Lux control algorithm
*/
-#include <math.h>
#include <libcamera/base/log.h>
@@ -41,7 +40,7 @@ int Lux::read(const libcamera::YamlObject &params)
auto value = params["reference_shutter_speed"].get<double>();
if (!value)
return -EINVAL;
- referenceShutterSpeed_ = *value * 1.0us;
+ referenceExposureTime_ = *value * 1.0us;
value = params["reference_gain"].get<double>();
if (!value)
@@ -83,11 +82,11 @@ void Lux::process(StatisticsPtr &stats, Metadata *imageMetadata)
double currentAperture = deviceStatus.aperture.value_or(currentAperture_);
double currentY = stats->yHist.interQuantileMean(0, 1);
double gainRatio = referenceGain_ / currentGain;
- double shutterSpeedRatio =
- referenceShutterSpeed_ / deviceStatus.shutterSpeed;
+ double exposureTimeRatio =
+ referenceExposureTime_ / deviceStatus.exposureTime;
double apertureRatio = referenceAperture_ / currentAperture;
double yRatio = currentY * (65536 / stats->yHist.bins()) / referenceY_;
- double estimatedLux = shutterSpeedRatio * gainRatio *
+ double estimatedLux = exposureTimeRatio * gainRatio *
apertureRatio * apertureRatio *
yRatio * referenceLux_;
LuxStatus status;
diff --git a/src/ipa/rpi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h
index 89f441fc..da007fe9 100644
--- a/src/ipa/rpi/controller/rpi/lux.h
+++ b/src/ipa/rpi/controller/rpi/lux.h
@@ -32,7 +32,7 @@ private:
* These values define the conditions of the reference image, against
* which we compare the new image.
*/
- libcamera::utils::Duration referenceShutterSpeed_;
+ libcamera::utils::Duration referenceExposureTime_;
double referenceGain_;
double referenceAperture_; /* units of 1/f */
double referenceY_; /* out of 65536 */
diff --git a/src/ipa/rpi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp
index 3f1c62cf..145175fb 100644
--- a/src/ipa/rpi/controller/rpi/noise.cpp
+++ b/src/ipa/rpi/controller/rpi/noise.cpp
@@ -5,7 +5,7 @@
* Noise control algorithm
*/
-#include <math.h>
+#include <cmath>
#include <libcamera/base/log.h>
@@ -69,7 +69,7 @@ void Noise::prepare(Metadata *imageMetadata)
* make some adjustments based on the camera mode (such as
* binning), if we knew how to discover it...
*/
- double factor = sqrt(deviceStatus.analogueGain) / modeFactor_;
+ double factor = std::sqrt(deviceStatus.analogueGain) / modeFactor_;
struct NoiseStatus status;
status.noiseConstant = referenceConstant_ * factor;
status.noiseSlope = referenceSlope_ * factor;
diff --git a/src/ipa/rpi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp
index 39537f4a..1d143ff5 100644
--- a/src/ipa/rpi/controller/rpi/sharpen.cpp
+++ b/src/ipa/rpi/controller/rpi/sharpen.cpp
@@ -5,7 +5,7 @@
* sharpening control algorithm
*/
-#include <math.h>
+#include <cmath>
#include <libcamera/base/log.h>
@@ -68,7 +68,7 @@ void Sharpen::prepare(Metadata *imageMetadata)
* we adjust the limit and threshold less aggressively. Using a sqrt
* function is an arbitrary but gentle way of accomplishing this.
*/
- double userStrengthSqrt = sqrt(userStrength_);
+ double userStrengthSqrt = std::sqrt(userStrength_);
struct SharpenStatus status;
/*
* Binned modes seem to need the sharpening toned down with this
diff --git a/src/ipa/rpi/pisp/data/imx219.json b/src/ipa/rpi/pisp/data/imx219.json
new file mode 100644
index 00000000..5254e60d
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx219.json
@@ -0,0 +1,1187 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 21965,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 800,
+ "reference_Y": 11460
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 3.661
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 239,
+ "slope": 0.00766
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2860.0, 0.9514, 0.4156,
+ 2960.0, 0.9289, 0.4372,
+ 3603.0, 0.8305, 0.5251,
+ 4650.0, 0.6756, 0.6433,
+ 5858.0, 0.6193, 0.6807,
+ 7580.0, 0.5019, 0.7495
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.03392,
+ "transverse_neg": 0.034
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ],
+ "sigma": 0.00463,
+ "sigma_Cb": 0.00149
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "lo_max": 1000,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2860,
+ "ccm":
+ [
+ 2.12089, -0.52461, -0.59629,
+ -0.85342, 2.80445, -0.95103,
+ -0.26897, -1.14788, 2.41685
+ ]
+ },
+ {
+ "ct": 2960,
+ "ccm":
+ [
+ 2.26962, -0.54174, -0.72789,
+ -0.77008, 2.60271, -0.83262,
+ -0.26036, -1.51254, 2.77289
+ ]
+ },
+ {
+ "ct": 3603,
+ "ccm":
+ [
+ 2.18644, -0.66148, -0.52496,
+ -0.77828, 2.69474, -0.91645,
+ -0.25239, -0.83059, 2.08298
+ ]
+ },
+ {
+ "ct": 4650,
+ "ccm":
+ [
+ 2.18174, -0.70887, -0.47287,
+ -0.70196, 2.76426, -1.06231,
+ -0.25157, -0.71978, 1.97135
+ ]
+ },
+ {
+ "ct": 5858,
+ "ccm":
+ [
+ 2.32392, -0.88421, -0.43971,
+ -0.63821, 2.58348, -0.94527,
+ -0.28541, -0.54112, 1.82653
+ ]
+ },
+ {
+ "ct": 7580,
+ "ccm":
+ [
+ 2.21175, -0.53242, -0.67933,
+ -0.57875, 3.07922, -1.50047,
+ -0.27709, -0.73338, 2.01048
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx219_noir.json b/src/ipa/rpi/pisp/data/imx219_noir.json
new file mode 100644
index 00000000..8a8ad330
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx219_noir.json
@@ -0,0 +1,1112 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 21965,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 800,
+ "reference_Y": 11460
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 3.661
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 239,
+ "slope": 0.00766
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 10.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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
+ ],
+ "sigma": 0.00463,
+ "sigma_Cb": 0.00149
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "lo_max": 1000,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2498,
+ "ccm":
+ [
+ 1.58731, -0.18011, -0.40721,
+ -0.60639, 2.03422, -0.42782,
+ -0.19612, -1.69203, 2.88815
+ ]
+ },
+ {
+ "ct": 2811,
+ "ccm":
+ [
+ 1.61593, -0.33164, -0.28429,
+ -0.55048, 1.97779, -0.42731,
+ -0.12042, -1.42847, 2.54889
+ ]
+ },
+ {
+ "ct": 2911,
+ "ccm":
+ [
+ 1.62771, -0.41282, -0.21489,
+ -0.57991, 2.04176, -0.46186,
+ -0.07613, -1.13359, 2.20972
+ ]
+ },
+ {
+ "ct": 2919,
+ "ccm":
+ [
+ 1.62661, -0.37736, -0.24925,
+ -0.52519, 1.95233, -0.42714,
+ -0.10842, -1.34929, 2.45771
+ ]
+ },
+ {
+ "ct": 3627,
+ "ccm":
+ [
+ 1.70385, -0.57231, -0.13154,
+ -0.47763, 1.85998, -0.38235,
+ -0.07467, -0.82678, 1.90145
+ ]
+ },
+ {
+ "ct": 4600,
+ "ccm":
+ [
+ 1.68486, -0.61085, -0.07402,
+ -0.41927, 2.04016, -0.62089,
+ -0.08633, -0.67672, 1.76305
+ ]
+ },
+ {
+ "ct": 5716,
+ "ccm":
+ [
+ 1.80439, -0.73699, -0.06739,
+ -0.36073, 1.83327, -0.47255,
+ -0.08378, -0.56403, 1.64781
+ ]
+ },
+ {
+ "ct": 8575,
+ "ccm":
+ [
+ 1.89357, -0.76427, -0.12931,
+ -0.27399, 2.15605, -0.88206,
+ -0.12035, -0.68256, 1.80292
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx290.json b/src/ipa/rpi/pisp/data/imx290.json
new file mode 100644
index 00000000..37421e85
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx290.json
@@ -0,0 +1,341 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 6813,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 890,
+ "reference_Y": 12900
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.67
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 187,
+ "slope": 0.00842
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "speed": 0.2,
+ "metering_modes":
+ {
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ },
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 10, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 10, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.16
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.7,
+ "luminance_lut":
+ [
+ 2.844, 2.604, 2.365, 2.2, 2.039, 1.916, 1.799, 1.707, 1.622, 1.552, 1.487, 1.435, 1.389, 1.356, 1.332, 1.317, 1.31, 1.308, 1.313, 1.324, 1.344, 1.37, 1.41, 1.454, 1.508, 1.567, 1.641, 1.719, 1.82, 1.925, 2.073, 2.221,
+ 2.749, 2.521, 2.294, 2.134, 1.979, 1.861, 1.749, 1.661, 1.578, 1.511, 1.448, 1.398, 1.354, 1.322, 1.3, 1.285, 1.278, 1.277, 1.281, 1.292, 1.311, 1.336, 1.374, 1.416, 1.469, 1.526, 1.596, 1.671, 1.77, 1.872, 2.019, 2.166,
+ 2.654, 2.438, 2.223, 2.069, 1.919, 1.807, 1.7, 1.614, 1.534, 1.469, 1.409, 1.361, 1.318, 1.288, 1.267, 1.254, 1.247, 1.245, 1.25, 1.259, 1.277, 1.302, 1.338, 1.379, 1.43, 1.485, 1.552, 1.623, 1.719, 1.819, 1.965, 2.112,
+ 2.563, 2.359, 2.155, 2.007, 1.863, 1.755, 1.653, 1.571, 1.493, 1.43, 1.372, 1.325, 1.284, 1.256, 1.236, 1.223, 1.217, 1.216, 1.219, 1.229, 1.246, 1.269, 1.305, 1.344, 1.393, 1.446, 1.51, 1.578, 1.672, 1.77, 1.914, 2.059,
+ 2.494, 2.299, 2.103, 1.961, 1.822, 1.718, 1.619, 1.538, 1.461, 1.399, 1.343, 1.298, 1.259, 1.232, 1.213, 1.2, 1.194, 1.193, 1.196, 1.205, 1.222, 1.245, 1.279, 1.318, 1.365, 1.416, 1.481, 1.549, 1.641, 1.735, 1.875, 2.015,
+ 2.425, 2.238, 2.05, 1.914, 1.782, 1.681, 1.585, 1.505, 1.429, 1.369, 1.314, 1.271, 1.234, 1.208, 1.189, 1.177, 1.171, 1.169, 1.173, 1.182, 1.198, 1.221, 1.254, 1.292, 1.338, 1.387, 1.452, 1.519, 1.609, 1.701, 1.836, 1.971,
+ 2.363, 2.183, 2.003, 1.873, 1.746, 1.648, 1.555, 1.477, 1.401, 1.342, 1.289, 1.247, 1.212, 1.187, 1.168, 1.156, 1.149, 1.148, 1.152, 1.16, 1.177, 1.198, 1.231, 1.267, 1.312, 1.36, 1.425, 1.492, 1.58, 1.671, 1.802, 1.932,
+ 2.314, 2.14, 1.965, 1.839, 1.716, 1.622, 1.532, 1.454, 1.38, 1.322, 1.27, 1.229, 1.195, 1.169, 1.149, 1.137, 1.129, 1.128, 1.132, 1.142, 1.158, 1.18, 1.21, 1.245, 1.289, 1.336, 1.401, 1.469, 1.557, 1.649, 1.776, 1.903,
+ 2.264, 2.096, 1.927, 1.805, 1.687, 1.596, 1.509, 1.432, 1.358, 1.301, 1.251, 1.211, 1.177, 1.151, 1.131, 1.117, 1.109, 1.108, 1.113, 1.123, 1.14, 1.161, 1.19, 1.222, 1.265, 1.313, 1.378, 1.445, 1.534, 1.626, 1.75, 1.874,
+ 2.225, 2.061, 1.897, 1.778, 1.663, 1.574, 1.489, 1.414, 1.341, 1.285, 1.235, 1.196, 1.163, 1.136, 1.115, 1.1, 1.091, 1.089, 1.095, 1.106, 1.124, 1.145, 1.174, 1.205, 1.248, 1.294, 1.359, 1.427, 1.516, 1.606, 1.728, 1.849,
+ 2.193, 2.033, 1.872, 1.756, 1.642, 1.556, 1.473, 1.399, 1.327, 1.272, 1.224, 1.185, 1.15, 1.123, 1.1, 1.084, 1.074, 1.072, 1.078, 1.09, 1.11, 1.133, 1.161, 1.193, 1.234, 1.28, 1.345, 1.413, 1.501, 1.59, 1.709, 1.828,
+ 2.161, 2.004, 1.848, 1.734, 1.622, 1.537, 1.457, 1.384, 1.313, 1.26, 1.212, 1.173, 1.138, 1.11, 1.085, 1.068, 1.057, 1.055, 1.062, 1.075, 1.096, 1.12, 1.148, 1.18, 1.221, 1.266, 1.331, 1.399, 1.486, 1.574, 1.69, 1.807,
+ 2.14, 1.986, 1.832, 1.719, 1.609, 1.525, 1.445, 1.373, 1.304, 1.251, 1.204, 1.165, 1.129, 1.1, 1.074, 1.055, 1.043, 1.041, 1.049, 1.063, 1.086, 1.11, 1.14, 1.172, 1.212, 1.258, 1.323, 1.39, 1.477, 1.566, 1.679, 1.792,
+ 2.123, 1.971, 1.819, 1.707, 1.598, 1.514, 1.434, 1.364, 1.296, 1.243, 1.197, 1.158, 1.122, 1.091, 1.064, 1.044, 1.031, 1.027, 1.036, 1.052, 1.076, 1.102, 1.132, 1.165, 1.206, 1.251, 1.316, 1.383, 1.471, 1.56, 1.67, 1.78,
+ 2.106, 1.956, 1.806, 1.695, 1.587, 1.504, 1.424, 1.354, 1.288, 1.236, 1.19, 1.15, 1.114, 1.083, 1.055, 1.033, 1.018, 1.014, 1.024, 1.04, 1.066, 1.094, 1.124, 1.158, 1.199, 1.245, 1.309, 1.376, 1.465, 1.555, 1.661, 1.767,
+ 2.104, 1.955, 1.805, 1.694, 1.586, 1.502, 1.422, 1.352, 1.285, 1.234, 1.188, 1.149, 1.113, 1.081, 1.053, 1.031, 1.014, 1.011, 1.021, 1.038, 1.064, 1.091, 1.122, 1.156, 1.198, 1.244, 1.308, 1.376, 1.465, 1.555, 1.66, 1.766,
+ 2.104, 1.955, 1.806, 1.695, 1.586, 1.502, 1.421, 1.351, 1.284, 1.232, 1.187, 1.148, 1.112, 1.08, 1.051, 1.029, 1.012, 1.008, 1.02, 1.036, 1.062, 1.089, 1.12, 1.155, 1.197, 1.244, 1.308, 1.375, 1.465, 1.555, 1.661, 1.766,
+ 2.105, 1.956, 1.807, 1.696, 1.587, 1.502, 1.42, 1.35, 1.282, 1.231, 1.186, 1.148, 1.112, 1.08, 1.051, 1.028, 1.011, 1.007, 1.019, 1.036, 1.061, 1.088, 1.119, 1.154, 1.197, 1.244, 1.308, 1.376, 1.466, 1.557, 1.662, 1.767,
+ 2.121, 1.97, 1.818, 1.705, 1.595, 1.508, 1.424, 1.353, 1.286, 1.236, 1.191, 1.153, 1.118, 1.087, 1.059, 1.038, 1.022, 1.018, 1.028, 1.044, 1.067, 1.093, 1.124, 1.158, 1.201, 1.248, 1.314, 1.383, 1.474, 1.567, 1.672, 1.777,
+ 2.137, 1.983, 1.829, 1.715, 1.603, 1.514, 1.428, 1.357, 1.291, 1.24, 1.196, 1.158, 1.123, 1.094, 1.068, 1.047, 1.033, 1.029, 1.038, 1.052, 1.074, 1.098, 1.128, 1.162, 1.205, 1.253, 1.32, 1.39, 1.483, 1.577, 1.682, 1.788,
+ 2.154, 1.998, 1.843, 1.726, 1.613, 1.522, 1.435, 1.364, 1.297, 1.246, 1.202, 1.164, 1.131, 1.102, 1.078, 1.059, 1.045, 1.041, 1.048, 1.061, 1.082, 1.105, 1.134, 1.167, 1.211, 1.259, 1.327, 1.399, 1.494, 1.588, 1.694, 1.8,
+ 2.176, 2.019, 1.862, 1.744, 1.628, 1.537, 1.449, 1.377, 1.309, 1.258, 1.213, 1.176, 1.143, 1.116, 1.092, 1.074, 1.061, 1.057, 1.063, 1.075, 1.094, 1.117, 1.146, 1.178, 1.222, 1.27, 1.34, 1.414, 1.509, 1.604, 1.711, 1.818,
+ 2.199, 2.04, 1.881, 1.761, 1.644, 1.552, 1.464, 1.391, 1.321, 1.269, 1.223, 1.187, 1.155, 1.129, 1.106, 1.09, 1.078, 1.074, 1.078, 1.088, 1.107, 1.128, 1.157, 1.189, 1.233, 1.281, 1.353, 1.428, 1.524, 1.62, 1.728, 1.836,
+ 2.228, 2.066, 1.904, 1.782, 1.662, 1.57, 1.482, 1.408, 1.337, 1.284, 1.237, 1.201, 1.17, 1.145, 1.123, 1.107, 1.096, 1.092, 1.095, 1.104, 1.121, 1.142, 1.17, 1.203, 1.247, 1.297, 1.37, 1.446, 1.542, 1.639, 1.75, 1.86,
+ 2.267, 2.099, 1.932, 1.807, 1.684, 1.592, 1.504, 1.428, 1.356, 1.302, 1.255, 1.219, 1.189, 1.164, 1.141, 1.125, 1.115, 1.111, 1.114, 1.123, 1.138, 1.158, 1.186, 1.22, 1.266, 1.318, 1.391, 1.467, 1.563, 1.661, 1.776, 1.891,
+ 2.305, 2.132, 1.96, 1.832, 1.707, 1.614, 1.526, 1.449, 1.375, 1.32, 1.272, 1.237, 1.208, 1.182, 1.16, 1.144, 1.135, 1.131, 1.134, 1.141, 1.155, 1.174, 1.203, 1.236, 1.285, 1.338, 1.412, 1.489, 1.585, 1.682, 1.802, 1.922,
+ 2.351, 2.173, 1.996, 1.864, 1.736, 1.641, 1.552, 1.474, 1.4, 1.344, 1.294, 1.258, 1.228, 1.203, 1.181, 1.165, 1.156, 1.152, 1.155, 1.162, 1.176, 1.195, 1.224, 1.259, 1.309, 1.365, 1.439, 1.516, 1.613, 1.711, 1.835, 1.96,
+ 2.4, 2.218, 2.036, 1.901, 1.768, 1.671, 1.58, 1.502, 1.428, 1.37, 1.319, 1.281, 1.249, 1.224, 1.203, 1.188, 1.178, 1.174, 1.177, 1.184, 1.197, 1.217, 1.248, 1.285, 1.337, 1.394, 1.469, 1.547, 1.644, 1.743, 1.873, 2.002,
+ 2.45, 2.264, 2.077, 1.938, 1.801, 1.702, 1.608, 1.53, 1.456, 1.397, 1.344, 1.304, 1.271, 1.245, 1.224, 1.21, 1.2, 1.196, 1.199, 1.206, 1.219, 1.239, 1.272, 1.311, 1.365, 1.424, 1.5, 1.578, 1.676, 1.776, 1.91, 2.044,
+ 2.513, 2.318, 2.124, 1.984, 1.848, 1.747, 1.652, 1.572, 1.496, 1.436, 1.383, 1.341, 1.303, 1.274, 1.253, 1.238, 1.228, 1.225, 1.228, 1.235, 1.248, 1.269, 1.303, 1.343, 1.4, 1.46, 1.537, 1.617, 1.718, 1.82, 1.962, 2.103,
+ 2.579, 2.376, 2.172, 2.032, 1.897, 1.796, 1.7, 1.617, 1.538, 1.479, 1.426, 1.38, 1.337, 1.306, 1.283, 1.267, 1.258, 1.254, 1.257, 1.265, 1.279, 1.3, 1.336, 1.377, 1.435, 1.497, 1.576, 1.658, 1.761, 1.867, 2.016, 2.165,
+ 2.645, 2.433, 2.22, 2.08, 1.946, 1.844, 1.747, 1.663, 1.581, 1.521, 1.468, 1.419, 1.371, 1.337, 1.313, 1.296, 1.287, 1.284, 1.287, 1.295, 1.309, 1.331, 1.368, 1.411, 1.471, 1.535, 1.615, 1.699, 1.805, 1.914, 2.071, 2.227
+ ],
+ "sigma": 0.005,
+ "sigma_Cb": 0.005
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 3900,
+ "ccm":
+ [
+ 1.54659, -0.17707, -0.36953,
+ -0.51471, 1.72733, -0.21262,
+ 0.06667, -0.92279, 1.85612
+ ]
+ }
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx296.json b/src/ipa/rpi/pisp/data/imx296.json
new file mode 100644
index 00000000..d9dde898
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx296.json
@@ -0,0 +1,1194 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 4724,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 860,
+ "reference_Y": 14551
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.751
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 226,
+ "slope": 0.01032
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2875.0, 0.4699, 0.3209,
+ 3610.0, 0.4089, 0.4265,
+ 4640.0, 0.3281, 0.5417,
+ 5912.0, 0.2992, 0.5771,
+ 7630.0, 0.2285, 0.6524
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01783,
+ "transverse_neg": 0.02154
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.084, 2.084, 2.085, 2.085, 2.085, 2.087, 2.088, 2.087, 2.086, 2.082, 2.082, 2.084, 2.086, 2.088, 2.088, 2.088, 2.087, 2.088, 2.088, 2.091, 2.092, 2.093, 2.093, 2.093, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.091, 2.088,
+ 2.086, 2.086, 2.087, 2.088, 2.089, 2.089, 2.091, 2.089, 2.087, 2.086, 2.087, 2.088, 2.091, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.093, 2.093, 2.094, 2.095, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.093,
+ 2.087, 2.087, 2.088, 2.091, 2.091, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.096,
+ 2.089, 2.088, 2.089, 2.091, 2.091, 2.092, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.092, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.095, 2.096, 2.096, 2.097, 2.099, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.099, 2.098, 2.097,
+ 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.094, 2.095, 2.096, 2.097, 2.098, 2.098, 2.098, 2.101, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.089, 2.091, 2.092, 2.092, 2.092, 2.092, 2.094, 2.096, 2.096, 2.097, 2.098, 2.099, 2.099, 2.099, 2.099, 2.099, 2.097,
+ 2.093, 2.094, 2.094, 2.094, 2.095, 2.093, 2.092, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.096, 2.096, 2.097, 2.098, 2.098, 2.101, 2.101, 2.099, 2.099, 2.099,
+ 2.094, 2.094, 2.094, 2.095, 2.095, 2.095, 2.091, 2.089, 2.091, 2.089, 2.089, 2.089, 2.091, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.093, 2.095, 2.096, 2.097, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.099,
+ 2.095, 2.094, 2.094, 2.095, 2.096, 2.095, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.093, 2.094, 2.096, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.101, 2.099,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.095, 2.092, 2.089, 2.089, 2.088, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.093, 2.093, 2.095, 2.096, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.101,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.092, 2.092, 2.094, 2.094, 2.094, 2.096, 2.096, 2.098, 2.099, 2.102, 2.103, 2.103, 2.102, 2.102,
+ 2.095, 2.095, 2.095, 2.096, 2.096, 2.094, 2.093, 2.091, 2.091, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.093, 2.094, 2.094, 2.095, 2.096, 2.097, 2.098, 2.099, 2.103, 2.103, 2.103, 2.101, 2.101,
+ 2.095, 2.096, 2.096, 2.097, 2.096, 2.095, 2.093, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.096, 2.097, 2.099, 2.101, 2.103, 2.103, 2.103, 2.101, 2.099,
+ 2.096, 2.096, 2.097, 2.096, 2.097, 2.096, 2.094, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.099, 2.101, 2.103, 2.103, 2.102, 2.101, 2.101,
+ 2.096, 2.096, 2.097, 2.097, 2.097, 2.096, 2.094, 2.093, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.097, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101,
+ 2.097, 2.096, 2.097, 2.097, 2.097, 2.097, 2.095, 2.093, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.092, 2.092, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.101,
+ 2.098, 2.097, 2.096, 2.097, 2.097, 2.097, 2.095, 2.094, 2.094, 2.094, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.095, 2.095, 2.094, 2.093, 2.095, 2.096, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.102,
+ 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.095, 2.094, 2.095, 2.093, 2.093, 2.092, 2.092, 2.092, 2.094, 2.094, 2.096, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.102, 2.101, 2.102,
+ 2.098, 2.097, 2.097, 2.098, 2.097, 2.096, 2.095, 2.095, 2.095, 2.094, 2.093, 2.093, 2.094, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.095, 2.097, 2.097, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.104, 2.103, 2.102, 2.101,
+ 2.099, 2.098, 2.098, 2.098, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.094, 2.094, 2.094, 2.096, 2.097, 2.097, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.101, 2.101, 2.104, 2.105, 2.105, 2.103, 2.102,
+ 2.101, 2.099, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.098, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.103, 2.104, 2.105, 2.105, 2.104, 2.103,
+ 2.102, 2.102, 2.099, 2.098, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.104, 2.105, 2.106, 2.106, 2.106, 2.104, 2.104, 2.104,
+ 2.102, 2.101, 2.099, 2.099, 2.099, 2.101, 2.101, 2.101, 2.099, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.099, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.103, 2.105, 2.106, 2.106, 2.106, 2.106, 2.105, 2.104, 2.104,
+ 2.099, 2.099, 2.099, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.098, 2.097, 2.098, 2.098, 2.099, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.105, 2.105, 2.106, 2.106, 2.104, 2.104, 2.103,
+ 2.096, 2.097, 2.097, 2.097, 2.097, 2.099, 2.099, 2.099, 2.099, 2.097, 2.097, 2.098, 2.098, 2.099, 2.098, 2.097, 2.097, 2.099, 2.101, 2.101, 2.101, 2.101, 2.101, 2.103, 2.105, 2.105, 2.105, 2.104, 2.104, 2.103, 2.101, 2.101,
+ 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.098, 2.099, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.097, 2.097, 2.096, 2.098, 2.098, 2.099, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.104, 2.104, 2.103, 2.101, 2.099, 2.098,
+ 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.097, 2.098, 2.097, 2.097, 2.096, 2.096, 2.098, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.103, 2.104, 2.104, 2.102, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.096, 2.098, 2.098, 2.098, 2.098, 2.097, 2.098, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.099, 2.099, 2.099, 2.101, 2.102, 2.103, 2.104, 2.104, 2.104, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.097, 2.099, 2.099, 2.099, 2.099, 2.099, 2.099, 2.098, 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.098, 2.097, 2.099, 2.101, 2.099, 2.099, 2.099, 2.102, 2.102, 2.104, 2.105, 2.105, 2.102, 2.099, 2.098
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.431, 3.437, 3.439, 3.439, 3.436, 3.438, 3.441, 3.441, 3.441, 3.441, 3.442, 3.443, 3.443, 3.444, 3.446, 3.448, 3.451, 3.451, 3.452, 3.451, 3.449, 3.449, 3.452, 3.453, 3.454, 3.454, 3.453, 3.456, 3.456, 3.456, 3.451, 3.448,
+ 3.445, 3.446, 3.445, 3.449, 3.453, 3.451, 3.451, 3.446, 3.447, 3.446, 3.447, 3.451, 3.453, 3.455, 3.454, 3.453, 3.453, 3.454, 3.455, 3.456, 3.457, 3.459, 3.461, 3.462, 3.463, 3.463, 3.465, 3.466, 3.467, 3.465, 3.459, 3.457,
+ 3.449, 3.449, 3.449, 3.454, 3.455, 3.454, 3.453, 3.451, 3.451, 3.448, 3.451, 3.451, 3.455, 3.456, 3.457, 3.456, 3.456, 3.458, 3.457, 3.459, 3.459, 3.461, 3.464, 3.467, 3.467, 3.466, 3.468, 3.469, 3.471, 3.468, 3.465, 3.462,
+ 3.451, 3.448, 3.451, 3.453, 3.457, 3.455, 3.454, 3.449, 3.449, 3.448, 3.449, 3.449, 3.455, 3.455, 3.456, 3.455, 3.454, 3.455, 3.455, 3.457, 3.458, 3.458, 3.461, 3.464, 3.466, 3.468, 3.469, 3.469, 3.469, 3.468, 3.465, 3.463,
+ 3.449, 3.449, 3.451, 3.453, 3.456, 3.455, 3.452, 3.449, 3.448, 3.447, 3.446, 3.448, 3.451, 3.452, 3.454, 3.455, 3.455, 3.454, 3.457, 3.458, 3.458, 3.459, 3.461, 3.464, 3.464, 3.466, 3.467, 3.469, 3.469, 3.467, 3.463, 3.459,
+ 3.449, 3.451, 3.452, 3.454, 3.455, 3.454, 3.452, 3.449, 3.447, 3.447, 3.446, 3.449, 3.449, 3.451, 3.452, 3.452, 3.452, 3.452, 3.454, 3.455, 3.457, 3.459, 3.461, 3.464, 3.464, 3.466, 3.465, 3.468, 3.468, 3.469, 3.465, 3.462,
+ 3.451, 3.451, 3.452, 3.453, 3.453, 3.453, 3.451, 3.449, 3.449, 3.447, 3.446, 3.447, 3.448, 3.451, 3.451, 3.451, 3.453, 3.452, 3.452, 3.452, 3.457, 3.458, 3.461, 3.463, 3.464, 3.465, 3.464, 3.466, 3.468, 3.469, 3.466, 3.463,
+ 3.451, 3.451, 3.451, 3.454, 3.453, 3.453, 3.451, 3.448, 3.448, 3.444, 3.444, 3.444, 3.448, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.452, 3.454, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.467, 3.468, 3.469, 3.466, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.454, 3.453, 3.449, 3.448, 3.447, 3.447, 3.444, 3.446, 3.446, 3.446, 3.446, 3.447, 3.449, 3.449, 3.451, 3.452, 3.455, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.468, 3.469, 3.468, 3.465, 3.462,
+ 3.453, 3.452, 3.454, 3.456, 3.455, 3.453, 3.449, 3.447, 3.446, 3.446, 3.445, 3.448, 3.447, 3.446, 3.445, 3.446, 3.448, 3.448, 3.449, 3.453, 3.455, 3.457, 3.459, 3.461, 3.464, 3.466, 3.467, 3.468, 3.468, 3.467, 3.465, 3.463,
+ 3.453, 3.453, 3.454, 3.456, 3.456, 3.451, 3.448, 3.447, 3.447, 3.446, 3.445, 3.446, 3.446, 3.446, 3.446, 3.446, 3.448, 3.448, 3.449, 3.452, 3.454, 3.456, 3.459, 3.459, 3.461, 3.465, 3.466, 3.468, 3.468, 3.468, 3.467, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.456, 3.452, 3.448, 3.446, 3.446, 3.444, 3.446, 3.445, 3.446, 3.446, 3.447, 3.448, 3.449, 3.449, 3.449, 3.452, 3.453, 3.454, 3.458, 3.458, 3.461, 3.461, 3.464, 3.469, 3.469, 3.468, 3.466, 3.466,
+ 3.452, 3.452, 3.453, 3.454, 3.454, 3.453, 3.447, 3.446, 3.444, 3.444, 3.444, 3.444, 3.445, 3.446, 3.448, 3.451, 3.452, 3.453, 3.451, 3.453, 3.453, 3.455, 3.458, 3.459, 3.461, 3.462, 3.463, 3.468, 3.471, 3.469, 3.467, 3.467,
+ 3.454, 3.455, 3.457, 3.458, 3.458, 3.455, 3.449, 3.446, 3.445, 3.445, 3.445, 3.445, 3.447, 3.447, 3.448, 3.451, 3.452, 3.453, 3.452, 3.452, 3.452, 3.454, 3.457, 3.459, 3.459, 3.462, 3.464, 3.468, 3.469, 3.467, 3.465, 3.465,
+ 3.457, 3.455, 3.455, 3.459, 3.458, 3.454, 3.451, 3.448, 3.445, 3.445, 3.445, 3.446, 3.448, 3.449, 3.451, 3.452, 3.451, 3.453, 3.452, 3.452, 3.453, 3.457, 3.457, 3.461, 3.461, 3.463, 3.465, 3.468, 3.471, 3.468, 3.465, 3.463,
+ 3.458, 3.456, 3.456, 3.459, 3.457, 3.454, 3.452, 3.449, 3.447, 3.445, 3.446, 3.447, 3.447, 3.448, 3.449, 3.448, 3.449, 3.451, 3.451, 3.451, 3.451, 3.455, 3.456, 3.458, 3.462, 3.463, 3.464, 3.465, 3.467, 3.466, 3.464, 3.462,
+ 3.457, 3.456, 3.455, 3.457, 3.457, 3.454, 3.449, 3.447, 3.445, 3.445, 3.446, 3.446, 3.448, 3.446, 3.448, 3.449, 3.449, 3.451, 3.451, 3.451, 3.453, 3.455, 3.457, 3.459, 3.462, 3.464, 3.464, 3.465, 3.467, 3.464, 3.464, 3.463,
+ 3.458, 3.457, 3.455, 3.456, 3.456, 3.456, 3.453, 3.449, 3.447, 3.448, 3.447, 3.447, 3.447, 3.447, 3.447, 3.448, 3.449, 3.451, 3.451, 3.452, 3.453, 3.455, 3.458, 3.459, 3.459, 3.463, 3.464, 3.463, 3.464, 3.463, 3.464, 3.464,
+ 3.457, 3.456, 3.456, 3.456, 3.456, 3.456, 3.455, 3.449, 3.447, 3.448, 3.451, 3.449, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.451, 3.452, 3.453, 3.456, 3.458, 3.459, 3.461, 3.462, 3.464, 3.464, 3.465, 3.464, 3.464, 3.463,
+ 3.457, 3.456, 3.455, 3.455, 3.455, 3.455, 3.453, 3.451, 3.449, 3.448, 3.448, 3.449, 3.449, 3.449, 3.448, 3.449, 3.451, 3.452, 3.452, 3.453, 3.454, 3.457, 3.458, 3.459, 3.462, 3.464, 3.465, 3.464, 3.465, 3.464, 3.463, 3.463,
+ 3.456, 3.456, 3.454, 3.453, 3.454, 3.453, 3.452, 3.451, 3.449, 3.448, 3.448, 3.449, 3.451, 3.451, 3.448, 3.449, 3.451, 3.454, 3.454, 3.454, 3.455, 3.457, 3.458, 3.461, 3.461, 3.462, 3.464, 3.464, 3.466, 3.465, 3.464, 3.464,
+ 3.459, 3.457, 3.456, 3.455, 3.454, 3.453, 3.453, 3.452, 3.452, 3.451, 3.449, 3.449, 3.449, 3.448, 3.447, 3.449, 3.451, 3.454, 3.455, 3.455, 3.456, 3.458, 3.459, 3.461, 3.461, 3.462, 3.463, 3.466, 3.469, 3.465, 3.465, 3.464,
+ 3.463, 3.461, 3.458, 3.458, 3.457, 3.456, 3.456, 3.454, 3.454, 3.452, 3.452, 3.451, 3.451, 3.449, 3.448, 3.448, 3.452, 3.454, 3.456, 3.455, 3.457, 3.458, 3.461, 3.464, 3.462, 3.461, 3.463, 3.466, 3.469, 3.469, 3.467, 3.467,
+ 3.466, 3.462, 3.461, 3.461, 3.459, 3.457, 3.457, 3.457, 3.456, 3.454, 3.455, 3.455, 3.455, 3.451, 3.452, 3.453, 3.454, 3.455, 3.456, 3.456, 3.459, 3.462, 3.463, 3.466, 3.466, 3.467, 3.466, 3.469, 3.471, 3.469, 3.468, 3.466,
+ 3.467, 3.463, 3.463, 3.459, 3.461, 3.459, 3.461, 3.459, 3.458, 3.456, 3.457, 3.456, 3.457, 3.455, 3.456, 3.455, 3.456, 3.457, 3.459, 3.461, 3.461, 3.464, 3.465, 3.468, 3.469, 3.469, 3.469, 3.469, 3.471, 3.468, 3.467, 3.468,
+ 3.467, 3.464, 3.459, 3.459, 3.462, 3.462, 3.462, 3.461, 3.461, 3.462, 3.461, 3.459, 3.461, 3.459, 3.458, 3.457, 3.459, 3.461, 3.462, 3.463, 3.464, 3.466, 3.468, 3.469, 3.471, 3.469, 3.471, 3.472, 3.471, 3.467, 3.466, 3.464,
+ 3.464, 3.462, 3.458, 3.457, 3.458, 3.461, 3.461, 3.461, 3.461, 3.462, 3.462, 3.461, 3.461, 3.459, 3.459, 3.459, 3.461, 3.461, 3.464, 3.465, 3.465, 3.468, 3.468, 3.469, 3.471, 3.469, 3.469, 3.469, 3.469, 3.464, 3.462, 3.459,
+ 3.457, 3.458, 3.455, 3.456, 3.456, 3.457, 3.459, 3.459, 3.459, 3.459, 3.458, 3.456, 3.458, 3.457, 3.458, 3.458, 3.458, 3.459, 3.461, 3.463, 3.465, 3.466, 3.468, 3.469, 3.471, 3.468, 3.466, 3.466, 3.465, 3.461, 3.459, 3.457,
+ 3.456, 3.455, 3.454, 3.454, 3.455, 3.456, 3.458, 3.459, 3.459, 3.456, 3.456, 3.456, 3.455, 3.456, 3.455, 3.455, 3.455, 3.454, 3.457, 3.461, 3.462, 3.464, 3.465, 3.467, 3.467, 3.466, 3.464, 3.464, 3.463, 3.461, 3.457, 3.456,
+ 3.456, 3.454, 3.453, 3.454, 3.454, 3.455, 3.458, 3.459, 3.459, 3.456, 3.455, 3.455, 3.455, 3.451, 3.453, 3.454, 3.454, 3.455, 3.455, 3.458, 3.461, 3.462, 3.461, 3.463, 3.465, 3.464, 3.463, 3.463, 3.462, 3.459, 3.456, 3.451,
+ 3.455, 3.452, 3.452, 3.452, 3.455, 3.457, 3.459, 3.459, 3.459, 3.458, 3.456, 3.456, 3.455, 3.453, 3.453, 3.455, 3.457, 3.457, 3.457, 3.461, 3.461, 3.461, 3.459, 3.462, 3.464, 3.464, 3.464, 3.463, 3.463, 3.459, 3.454, 3.451,
+ 3.452, 3.452, 3.452, 3.453, 3.457, 3.458, 3.458, 3.459, 3.459, 3.458, 3.457, 3.457, 3.455, 3.455, 3.458, 3.459, 3.458, 3.459, 3.459, 3.461, 3.461, 3.461, 3.459, 3.461, 3.463, 3.464, 3.466, 3.463, 3.461, 3.458, 3.453, 3.449
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.403, 3.399, 3.395, 3.391, 3.392, 3.394, 3.401, 3.403, 3.404, 3.404, 3.403, 3.399, 3.398, 3.396, 3.395, 3.396, 3.399, 3.403, 3.404, 3.401, 3.399, 3.398, 3.397, 3.401, 3.401, 3.401, 3.396, 3.394, 3.397, 3.396, 3.388, 3.364,
+ 3.403, 3.399, 3.393, 3.389, 3.391, 3.395, 3.401, 3.404, 3.406, 3.404, 3.403, 3.399, 3.399, 3.397, 3.397, 3.397, 3.401, 3.404, 3.404, 3.402, 3.398, 3.396, 3.397, 3.401, 3.401, 3.401, 3.395, 3.394, 3.396, 3.393, 3.387, 3.364,
+ 3.399, 3.398, 3.391, 3.385, 3.386, 3.395, 3.402, 3.405, 3.405, 3.404, 3.402, 3.399, 3.399, 3.398, 3.398, 3.398, 3.401, 3.404, 3.405, 3.403, 3.399, 3.396, 3.396, 3.398, 3.401, 3.401, 3.398, 3.394, 3.392, 3.389, 3.386, 3.364,
+ 3.398, 3.393, 3.386, 3.382, 3.385, 3.392, 3.399, 3.403, 3.405, 3.404, 3.402, 3.398, 3.398, 3.397, 3.397, 3.398, 3.401, 3.404, 3.405, 3.403, 3.398, 3.394, 3.394, 3.398, 3.401, 3.401, 3.396, 3.392, 3.391, 3.388, 3.383, 3.362,
+ 3.396, 3.391, 3.384, 3.381, 3.384, 3.389, 3.398, 3.402, 3.402, 3.401, 3.399, 3.395, 3.395, 3.395, 3.397, 3.397, 3.401, 3.402, 3.404, 3.403, 3.399, 3.394, 3.393, 3.395, 3.399, 3.399, 3.397, 3.391, 3.388, 3.384, 3.381, 3.363,
+ 3.391, 3.386, 3.382, 3.381, 3.385, 3.389, 3.396, 3.398, 3.399, 3.399, 3.398, 3.395, 3.394, 3.394, 3.395, 3.397, 3.399, 3.401, 3.403, 3.401, 3.398, 3.394, 3.393, 3.393, 3.394, 3.396, 3.395, 3.392, 3.387, 3.382, 3.378, 3.361,
+ 3.389, 3.386, 3.379, 3.379, 3.383, 3.388, 3.394, 3.397, 3.397, 3.397, 3.395, 3.393, 3.393, 3.393, 3.395, 3.395, 3.397, 3.398, 3.401, 3.399, 3.397, 3.395, 3.394, 3.391, 3.393, 3.393, 3.393, 3.389, 3.387, 3.381, 3.374, 3.357,
+ 3.386, 3.383, 3.376, 3.375, 3.381, 3.386, 3.394, 3.396, 3.396, 3.394, 3.392, 3.392, 3.394, 3.394, 3.395, 3.394, 3.396, 3.398, 3.399, 3.397, 3.397, 3.394, 3.393, 3.391, 3.389, 3.391, 3.392, 3.388, 3.386, 3.379, 3.372, 3.355,
+ 3.386, 3.379, 3.373, 3.373, 3.378, 3.384, 3.391, 3.396, 3.395, 3.393, 3.389, 3.391, 3.391, 3.393, 3.394, 3.393, 3.394, 3.396, 3.397, 3.396, 3.393, 3.394, 3.393, 3.392, 3.389, 3.389, 3.389, 3.389, 3.386, 3.378, 3.371, 3.351,
+ 3.379, 3.375, 3.371, 3.371, 3.376, 3.381, 3.388, 3.393, 3.394, 3.391, 3.386, 3.386, 3.388, 3.393, 3.392, 3.392, 3.393, 3.395, 3.394, 3.392, 3.389, 3.391, 3.391, 3.392, 3.389, 3.388, 3.389, 3.389, 3.383, 3.377, 3.369, 3.351,
+ 3.373, 3.371, 3.367, 3.368, 3.373, 3.381, 3.387, 3.389, 3.391, 3.389, 3.385, 3.386, 3.383, 3.389, 3.389, 3.392, 3.392, 3.394, 3.393, 3.389, 3.387, 3.387, 3.388, 3.389, 3.389, 3.388, 3.386, 3.386, 3.382, 3.374, 3.367, 3.345,
+ 3.371, 3.369, 3.365, 3.366, 3.373, 3.379, 3.386, 3.389, 3.391, 3.389, 3.385, 3.384, 3.382, 3.386, 3.387, 3.389, 3.391, 3.392, 3.391, 3.387, 3.385, 3.385, 3.386, 3.388, 3.388, 3.388, 3.386, 3.385, 3.381, 3.373, 3.367, 3.345,
+ 3.367, 3.365, 3.365, 3.366, 3.374, 3.379, 3.384, 3.388, 3.389, 3.387, 3.384, 3.383, 3.383, 3.385, 3.385, 3.386, 3.388, 3.389, 3.388, 3.386, 3.383, 3.382, 3.384, 3.386, 3.387, 3.386, 3.381, 3.381, 3.379, 3.372, 3.364, 3.344,
+ 3.365, 3.363, 3.362, 3.367, 3.375, 3.379, 3.383, 3.384, 3.386, 3.384, 3.381, 3.379, 3.379, 3.383, 3.383, 3.384, 3.385, 3.387, 3.387, 3.385, 3.381, 3.381, 3.382, 3.384, 3.384, 3.385, 3.382, 3.379, 3.374, 3.369, 3.359, 3.343,
+ 3.359, 3.358, 3.361, 3.364, 3.373, 3.381, 3.384, 3.384, 3.385, 3.384, 3.381, 3.377, 3.379, 3.379, 3.382, 3.383, 3.384, 3.386, 3.386, 3.385, 3.381, 3.379, 3.381, 3.382, 3.382, 3.383, 3.379, 3.377, 3.371, 3.364, 3.357, 3.339,
+ 3.357, 3.356, 3.356, 3.362, 3.372, 3.379, 3.384, 3.384, 3.383, 3.381, 3.378, 3.376, 3.377, 3.379, 3.381, 3.382, 3.383, 3.385, 3.385, 3.383, 3.379, 3.379, 3.379, 3.381, 3.381, 3.382, 3.379, 3.372, 3.367, 3.362, 3.354, 3.334,
+ 3.357, 3.354, 3.357, 3.361, 3.372, 3.381, 3.385, 3.385, 3.384, 3.379, 3.376, 3.376, 3.376, 3.379, 3.381, 3.383, 3.383, 3.384, 3.383, 3.379, 3.378, 3.381, 3.379, 3.379, 3.379, 3.379, 3.378, 3.371, 3.363, 3.358, 3.354, 3.332,
+ 3.354, 3.351, 3.354, 3.359, 3.371, 3.379, 3.382, 3.384, 3.381, 3.378, 3.375, 3.374, 3.376, 3.378, 3.381, 3.383, 3.384, 3.382, 3.377, 3.377, 3.376, 3.377, 3.378, 3.378, 3.379, 3.379, 3.376, 3.367, 3.361, 3.357, 3.352, 3.333,
+ 3.352, 3.349, 3.351, 3.357, 3.372, 3.381, 3.383, 3.383, 3.381, 3.376, 3.372, 3.373, 3.375, 3.377, 3.382, 3.384, 3.384, 3.379, 3.376, 3.374, 3.374, 3.375, 3.375, 3.376, 3.377, 3.376, 3.373, 3.366, 3.361, 3.356, 3.347, 3.332,
+ 3.347, 3.346, 3.346, 3.355, 3.371, 3.377, 3.382, 3.381, 3.379, 3.372, 3.371, 3.371, 3.372, 3.375, 3.379, 3.383, 3.384, 3.379, 3.374, 3.373, 3.371, 3.373, 3.374, 3.375, 3.374, 3.374, 3.371, 3.365, 3.359, 3.352, 3.343, 3.331,
+ 3.345, 3.344, 3.345, 3.353, 3.367, 3.374, 3.382, 3.382, 3.376, 3.371, 3.369, 3.368, 3.369, 3.373, 3.377, 3.381, 3.379, 3.376, 3.373, 3.369, 3.368, 3.371, 3.372, 3.373, 3.371, 3.371, 3.369, 3.363, 3.357, 3.349, 3.341, 3.326,
+ 3.343, 3.341, 3.344, 3.351, 3.362, 3.371, 3.376, 3.376, 3.372, 3.369, 3.367, 3.366, 3.367, 3.369, 3.376, 3.378, 3.378, 3.375, 3.371, 3.367, 3.367, 3.368, 3.369, 3.369, 3.369, 3.368, 3.365, 3.361, 3.354, 3.347, 3.338, 3.321,
+ 3.341, 3.339, 3.342, 3.349, 3.359, 3.367, 3.371, 3.372, 3.371, 3.368, 3.366, 3.363, 3.365, 3.368, 3.371, 3.374, 3.376, 3.374, 3.368, 3.365, 3.365, 3.366, 3.368, 3.367, 3.367, 3.363, 3.361, 3.356, 3.352, 3.346, 3.336, 3.317,
+ 3.338, 3.336, 3.338, 3.346, 3.359, 3.364, 3.368, 3.369, 3.367, 3.366, 3.363, 3.362, 3.364, 3.364, 3.367, 3.371, 3.372, 3.369, 3.365, 3.362, 3.362, 3.365, 3.367, 3.367, 3.366, 3.362, 3.357, 3.353, 3.349, 3.342, 3.335, 3.317,
+ 3.334, 3.334, 3.336, 3.346, 3.354, 3.361, 3.365, 3.365, 3.365, 3.362, 3.361, 3.361, 3.362, 3.362, 3.364, 3.366, 3.368, 3.366, 3.361, 3.357, 3.357, 3.359, 3.363, 3.365, 3.363, 3.361, 3.355, 3.351, 3.346, 3.339, 3.336, 3.317,
+ 3.332, 3.332, 3.334, 3.344, 3.354, 3.359, 3.363, 3.365, 3.363, 3.361, 3.359, 3.359, 3.363, 3.363, 3.365, 3.365, 3.367, 3.366, 3.358, 3.356, 3.356, 3.358, 3.362, 3.364, 3.363, 3.359, 3.353, 3.348, 3.345, 3.339, 3.336, 3.315,
+ 3.332, 3.328, 3.331, 3.343, 3.351, 3.357, 3.358, 3.362, 3.361, 3.359, 3.357, 3.357, 3.361, 3.362, 3.364, 3.363, 3.363, 3.359, 3.356, 3.354, 3.354, 3.355, 3.358, 3.359, 3.361, 3.359, 3.351, 3.346, 3.344, 3.339, 3.336, 3.313,
+ 3.324, 3.324, 3.327, 3.334, 3.345, 3.351, 3.354, 3.356, 3.356, 3.354, 3.353, 3.354, 3.357, 3.358, 3.361, 3.358, 3.359, 3.355, 3.352, 3.348, 3.347, 3.351, 3.354, 3.358, 3.359, 3.355, 3.346, 3.343, 3.341, 3.336, 3.331, 3.312,
+ 3.318, 3.319, 3.321, 3.328, 3.337, 3.339, 3.345, 3.348, 3.346, 3.345, 3.347, 3.348, 3.351, 3.354, 3.356, 3.353, 3.354, 3.344, 3.343, 3.343, 3.343, 3.344, 3.347, 3.349, 3.353, 3.346, 3.341, 3.339, 3.331, 3.329, 3.325, 3.311,
+ 3.309, 3.313, 3.317, 3.325, 3.329, 3.332, 3.338, 3.339, 3.341, 3.339, 3.339, 3.342, 3.346, 3.346, 3.351, 3.351, 3.343, 3.338, 3.338, 3.339, 3.339, 3.339, 3.341, 3.341, 3.346, 3.343, 3.339, 3.332, 3.327, 3.326, 3.322, 3.309,
+ 3.305, 3.309, 3.317, 3.325, 3.328, 3.331, 3.334, 3.336, 3.337, 3.336, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.341, 3.336, 3.335, 3.337, 3.339, 3.341, 3.339, 3.339, 3.342, 3.341, 3.337, 3.329, 3.326, 3.325, 3.321, 3.314,
+ 3.302, 3.306, 3.319, 3.325, 3.329, 3.331, 3.334, 3.335, 3.337, 3.337, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.342, 3.336, 3.336, 3.338, 3.339, 3.341, 3.341, 3.341, 3.339, 3.338, 3.336, 3.331, 3.327, 3.324, 3.321, 3.314
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.726, 1.725, 1.723, 1.721, 1.723, 1.724, 1.724, 1.726, 1.727, 1.728, 1.729, 1.728, 1.725, 1.724, 1.726, 1.726, 1.727, 1.729, 1.727, 1.727, 1.724, 1.725, 1.724, 1.726, 1.725, 1.725, 1.724, 1.724, 1.722, 1.721, 1.719, 1.714,
+ 1.726, 1.724, 1.722, 1.721, 1.722, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.727, 1.725, 1.724, 1.724, 1.725, 1.726, 1.725, 1.724, 1.723, 1.722, 1.721, 1.719, 1.714,
+ 1.724, 1.722, 1.719, 1.719, 1.721, 1.723, 1.726, 1.726, 1.727, 1.727, 1.727, 1.725, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.725, 1.724, 1.724, 1.724, 1.726, 1.725, 1.724, 1.722, 1.722, 1.721, 1.719, 1.712,
+ 1.723, 1.721, 1.719, 1.719, 1.719, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.726, 1.728, 1.729, 1.728, 1.725, 1.723, 1.723, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.718, 1.711,
+ 1.722, 1.719, 1.719, 1.718, 1.719, 1.722, 1.725, 1.726, 1.726, 1.727, 1.727, 1.726, 1.725, 1.726, 1.726, 1.726, 1.727, 1.727, 1.728, 1.727, 1.726, 1.725, 1.724, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.715, 1.711,
+ 1.721, 1.717, 1.717, 1.716, 1.719, 1.722, 1.724, 1.726, 1.726, 1.727, 1.726, 1.726, 1.726, 1.726, 1.726, 1.727, 1.727, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.722, 1.721, 1.718, 1.715, 1.707,
+ 1.718, 1.717, 1.716, 1.716, 1.718, 1.721, 1.725, 1.726, 1.726, 1.726, 1.725, 1.725, 1.725, 1.725, 1.726, 1.727, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.718, 1.715, 1.709,
+ 1.718, 1.716, 1.716, 1.715, 1.717, 1.721, 1.724, 1.725, 1.726, 1.725, 1.725, 1.724, 1.724, 1.725, 1.726, 1.726, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.723, 1.723, 1.723, 1.722, 1.722, 1.719, 1.718, 1.714, 1.709,
+ 1.718, 1.716, 1.715, 1.715, 1.717, 1.721, 1.723, 1.725, 1.726, 1.725, 1.724, 1.723, 1.724, 1.725, 1.725, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.723, 1.722, 1.722, 1.721, 1.717, 1.714, 1.707,
+ 1.717, 1.716, 1.714, 1.714, 1.716, 1.721, 1.723, 1.725, 1.725, 1.725, 1.723, 1.723, 1.724, 1.726, 1.726, 1.726, 1.726, 1.725, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.706,
+ 1.715, 1.714, 1.714, 1.714, 1.716, 1.719, 1.722, 1.724, 1.725, 1.725, 1.723, 1.723, 1.724, 1.725, 1.725, 1.725, 1.726, 1.725, 1.725, 1.725, 1.724, 1.724, 1.724, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.713, 1.705,
+ 1.714, 1.714, 1.713, 1.714, 1.717, 1.719, 1.722, 1.724, 1.724, 1.724, 1.723, 1.722, 1.723, 1.724, 1.724, 1.724, 1.726, 1.725, 1.726, 1.725, 1.723, 1.723, 1.724, 1.724, 1.724, 1.723, 1.721, 1.719, 1.717, 1.715, 1.713, 1.706,
+ 1.712, 1.712, 1.712, 1.713, 1.718, 1.719, 1.721, 1.723, 1.724, 1.724, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.725, 1.725, 1.725, 1.725, 1.723, 1.722, 1.724, 1.723, 1.723, 1.722, 1.721, 1.719, 1.717, 1.714, 1.711, 1.706,
+ 1.712, 1.711, 1.711, 1.713, 1.717, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.724, 1.725, 1.725, 1.724, 1.723, 1.722, 1.722, 1.722, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.711, 1.706,
+ 1.711, 1.709, 1.711, 1.713, 1.716, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.721, 1.722, 1.724, 1.724, 1.724, 1.723, 1.724, 1.724, 1.724, 1.722, 1.722, 1.722, 1.722, 1.722, 1.721, 1.719, 1.718, 1.714, 1.712, 1.709, 1.702,
+ 1.709, 1.709, 1.709, 1.712, 1.717, 1.719, 1.721, 1.723, 1.723, 1.723, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.724, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.716, 1.713, 1.711, 1.709, 1.701,
+ 1.708, 1.707, 1.709, 1.712, 1.716, 1.719, 1.722, 1.723, 1.723, 1.723, 1.721, 1.721, 1.721, 1.722, 1.723, 1.723, 1.723, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.714, 1.712, 1.709, 1.708, 1.702,
+ 1.707, 1.707, 1.708, 1.711, 1.716, 1.721, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.722, 1.722, 1.723, 1.723, 1.723, 1.722, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.721, 1.717, 1.714, 1.711, 1.709, 1.707, 1.702,
+ 1.706, 1.706, 1.707, 1.711, 1.714, 1.719, 1.722, 1.722, 1.722, 1.721, 1.719, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.719, 1.719, 1.721, 1.721, 1.719, 1.719, 1.716, 1.713, 1.711, 1.709, 1.706, 1.701,
+ 1.705, 1.704, 1.706, 1.709, 1.713, 1.718, 1.721, 1.722, 1.721, 1.719, 1.718, 1.719, 1.721, 1.722, 1.723, 1.724, 1.724, 1.721, 1.721, 1.721, 1.719, 1.719, 1.719, 1.719, 1.719, 1.717, 1.715, 1.713, 1.711, 1.707, 1.704, 1.699,
+ 1.703, 1.703, 1.704, 1.709, 1.712, 1.717, 1.719, 1.721, 1.719, 1.718, 1.717, 1.718, 1.719, 1.721, 1.722, 1.723, 1.723, 1.722, 1.719, 1.719, 1.718, 1.719, 1.719, 1.718, 1.717, 1.716, 1.714, 1.712, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.703, 1.704, 1.708, 1.712, 1.715, 1.718, 1.719, 1.719, 1.717, 1.717, 1.717, 1.717, 1.718, 1.721, 1.722, 1.722, 1.721, 1.719, 1.718, 1.717, 1.718, 1.718, 1.717, 1.716, 1.714, 1.714, 1.711, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.702, 1.703, 1.706, 1.709, 1.715, 1.717, 1.718, 1.717, 1.717, 1.716, 1.716, 1.717, 1.717, 1.719, 1.721, 1.721, 1.721, 1.719, 1.717, 1.716, 1.717, 1.717, 1.716, 1.714, 1.713, 1.712, 1.711, 1.708, 1.706, 1.702, 1.696,
+ 1.701, 1.701, 1.702, 1.706, 1.709, 1.714, 1.716, 1.717, 1.716, 1.716, 1.716, 1.715, 1.716, 1.716, 1.717, 1.718, 1.719, 1.719, 1.716, 1.715, 1.715, 1.715, 1.715, 1.715, 1.714, 1.713, 1.711, 1.709, 1.708, 1.704, 1.701, 1.695,
+ 1.699, 1.699, 1.702, 1.706, 1.708, 1.712, 1.714, 1.715, 1.715, 1.715, 1.714, 1.715, 1.714, 1.715, 1.716, 1.716, 1.716, 1.716, 1.714, 1.713, 1.713, 1.714, 1.715, 1.714, 1.714, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.695,
+ 1.698, 1.699, 1.701, 1.705, 1.708, 1.711, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.715, 1.715, 1.716, 1.716, 1.715, 1.713, 1.713, 1.713, 1.714, 1.714, 1.714, 1.713, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.696,
+ 1.698, 1.699, 1.701, 1.705, 1.707, 1.711, 1.712, 1.713, 1.713, 1.713, 1.713, 1.714, 1.714, 1.715, 1.715, 1.716, 1.715, 1.714, 1.713, 1.712, 1.712, 1.712, 1.713, 1.713, 1.713, 1.711, 1.709, 1.707, 1.705, 1.703, 1.701, 1.696,
+ 1.698, 1.697, 1.699, 1.702, 1.705, 1.707, 1.711, 1.711, 1.711, 1.711, 1.711, 1.712, 1.712, 1.713, 1.714, 1.714, 1.713, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.708, 1.706, 1.704, 1.703, 1.699, 1.696,
+ 1.694, 1.695, 1.697, 1.699, 1.702, 1.705, 1.706, 1.707, 1.707, 1.708, 1.708, 1.708, 1.709, 1.711, 1.711, 1.711, 1.708, 1.708, 1.708, 1.707, 1.707, 1.707, 1.708, 1.708, 1.709, 1.708, 1.706, 1.703, 1.702, 1.701, 1.698, 1.696,
+ 1.692, 1.692, 1.695, 1.698, 1.699, 1.701, 1.704, 1.704, 1.704, 1.704, 1.705, 1.706, 1.707, 1.709, 1.709, 1.707, 1.706, 1.704, 1.704, 1.705, 1.705, 1.706, 1.706, 1.706, 1.706, 1.706, 1.703, 1.702, 1.701, 1.699, 1.696, 1.694,
+ 1.691, 1.692, 1.695, 1.697, 1.699, 1.699, 1.702, 1.703, 1.703, 1.702, 1.703, 1.704, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.704, 1.705, 1.705, 1.705, 1.705, 1.704, 1.703, 1.701, 1.699, 1.698, 1.696, 1.695,
+ 1.689, 1.691, 1.696, 1.698, 1.699, 1.699, 1.701, 1.702, 1.702, 1.702, 1.703, 1.703, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.703, 1.704, 1.704, 1.705, 1.704, 1.704, 1.702, 1.701, 1.698, 1.698, 1.696, 1.696
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.425, 1.393, 1.341, 1.295, 1.258, 1.226, 1.201, 1.181, 1.162, 1.146, 1.133, 1.123, 1.115, 1.111, 1.107, 1.106, 1.106, 1.107, 1.108, 1.111, 1.114, 1.122, 1.133, 1.148, 1.164, 1.184, 1.208, 1.236, 1.271, 1.309, 1.359, 1.381,
+ 1.397, 1.367, 1.317, 1.274, 1.237, 1.207, 1.183, 1.163, 1.146, 1.133, 1.123, 1.114, 1.107, 1.101, 1.098, 1.096, 1.096, 1.096, 1.097, 1.102, 1.106, 1.112, 1.122, 1.133, 1.148, 1.166, 1.187, 1.215, 1.249, 1.288, 1.335, 1.359,
+ 1.374, 1.341, 1.292, 1.251, 1.215, 1.186, 1.166, 1.146, 1.131, 1.117, 1.108, 1.099, 1.091, 1.088, 1.084, 1.082, 1.081, 1.082, 1.084, 1.088, 1.093, 1.098, 1.107, 1.118, 1.133, 1.149, 1.169, 1.195, 1.228, 1.267, 1.313, 1.335,
+ 1.352, 1.318, 1.271, 1.231, 1.196, 1.169, 1.149, 1.131, 1.115, 1.103, 1.093, 1.086, 1.079, 1.074, 1.071, 1.069, 1.069, 1.069, 1.071, 1.076, 1.079, 1.085, 1.094, 1.102, 1.117, 1.133, 1.152, 1.176, 1.208, 1.246, 1.289, 1.313,
+ 1.333, 1.298, 1.253, 1.212, 1.179, 1.153, 1.134, 1.116, 1.102, 1.089, 1.079, 1.072, 1.066, 1.062, 1.059, 1.058, 1.057, 1.057, 1.059, 1.064, 1.068, 1.072, 1.081, 1.091, 1.102, 1.119, 1.137, 1.161, 1.191, 1.227, 1.271, 1.293,
+ 1.317, 1.281, 1.235, 1.196, 1.165, 1.139, 1.119, 1.104, 1.089, 1.078, 1.068, 1.062, 1.055, 1.051, 1.048, 1.047, 1.047, 1.047, 1.048, 1.053, 1.056, 1.061, 1.069, 1.079, 1.091, 1.105, 1.126, 1.147, 1.177, 1.212, 1.253, 1.278,
+ 1.301, 1.265, 1.221, 1.181, 1.151, 1.127, 1.108, 1.091, 1.078, 1.068, 1.059, 1.051, 1.045, 1.041, 1.038, 1.037, 1.036, 1.037, 1.038, 1.042, 1.046, 1.051, 1.059, 1.069, 1.081, 1.096, 1.113, 1.135, 1.164, 1.198, 1.238, 1.264,
+ 1.286, 1.251, 1.207, 1.169, 1.141, 1.116, 1.098, 1.081, 1.068, 1.058, 1.049, 1.042, 1.037, 1.033, 1.031, 1.029, 1.028, 1.028, 1.029, 1.033, 1.037, 1.043, 1.051, 1.059, 1.071, 1.086, 1.104, 1.124, 1.152, 1.185, 1.225, 1.252,
+ 1.275, 1.239, 1.196, 1.161, 1.132, 1.107, 1.089, 1.073, 1.059, 1.049, 1.041, 1.035, 1.028, 1.024, 1.023, 1.021, 1.021, 1.021, 1.022, 1.024, 1.029, 1.036, 1.043, 1.051, 1.063, 1.078, 1.095, 1.115, 1.143, 1.175, 1.214, 1.243,
+ 1.267, 1.227, 1.187, 1.152, 1.122, 1.101, 1.081, 1.067, 1.054, 1.042, 1.035, 1.028, 1.023, 1.018, 1.015, 1.014, 1.014, 1.014, 1.016, 1.019, 1.024, 1.029, 1.036, 1.045, 1.056, 1.071, 1.088, 1.107, 1.134, 1.167, 1.204, 1.234,
+ 1.261, 1.219, 1.179, 1.145, 1.116, 1.095, 1.076, 1.061, 1.047, 1.037, 1.031, 1.023, 1.018, 1.014, 1.011, 1.009, 1.009, 1.009, 1.011, 1.013, 1.018, 1.024, 1.031, 1.039, 1.049, 1.065, 1.083, 1.102, 1.128, 1.161, 1.196, 1.228,
+ 1.256, 1.213, 1.173, 1.139, 1.111, 1.091, 1.071, 1.056, 1.043, 1.033, 1.026, 1.019, 1.014, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.009, 1.013, 1.018, 1.026, 1.035, 1.046, 1.061, 1.078, 1.097, 1.123, 1.154, 1.191, 1.222,
+ 1.251, 1.208, 1.169, 1.137, 1.108, 1.088, 1.069, 1.053, 1.039, 1.029, 1.023, 1.015, 1.011, 1.006, 1.004, 1.003, 1.001, 1.002, 1.003, 1.006, 1.009, 1.015, 1.022, 1.032, 1.044, 1.057, 1.076, 1.094, 1.119, 1.149, 1.186, 1.218,
+ 1.249, 1.205, 1.167, 1.133, 1.107, 1.085, 1.067, 1.052, 1.038, 1.029, 1.021, 1.013, 1.008, 1.004, 1.003, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.013, 1.021, 1.031, 1.042, 1.055, 1.073, 1.093, 1.116, 1.147, 1.182, 1.218,
+ 1.249, 1.204, 1.165, 1.132, 1.106, 1.085, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.007, 1.003, 1.002, 1.001, 1.001, 1.001, 1.001, 1.004, 1.007, 1.013, 1.021, 1.029, 1.042, 1.055, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.249, 1.204, 1.165, 1.132, 1.107, 1.086, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.008, 1.004, 1.002, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.014, 1.021, 1.029, 1.042, 1.056, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.251, 1.205, 1.166, 1.133, 1.108, 1.087, 1.068, 1.052, 1.039, 1.031, 1.021, 1.014, 1.009, 1.006, 1.003, 1.002, 1.001, 1.001, 1.003, 1.006, 1.009, 1.014, 1.022, 1.031, 1.043, 1.056, 1.073, 1.093, 1.116, 1.145, 1.182, 1.218,
+ 1.252, 1.208, 1.168, 1.137, 1.111, 1.089, 1.071, 1.055, 1.043, 1.033, 1.023, 1.016, 1.012, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.008, 1.012, 1.017, 1.024, 1.034, 1.045, 1.059, 1.075, 1.095, 1.119, 1.149, 1.185, 1.218,
+ 1.256, 1.213, 1.173, 1.142, 1.115, 1.093, 1.075, 1.059, 1.047, 1.036, 1.027, 1.021, 1.016, 1.012, 1.011, 1.009, 1.008, 1.008, 1.009, 1.012, 1.016, 1.021, 1.028, 1.038, 1.049, 1.064, 1.081, 1.099, 1.126, 1.155, 1.192, 1.223,
+ 1.261, 1.221, 1.179, 1.148, 1.121, 1.099, 1.081, 1.065, 1.052, 1.042, 1.032, 1.026, 1.021, 1.017, 1.015, 1.014, 1.014, 1.013, 1.013, 1.016, 1.021, 1.026, 1.033, 1.043, 1.054, 1.068, 1.085, 1.106, 1.132, 1.161, 1.199, 1.228,
+ 1.267, 1.228, 1.188, 1.155, 1.128, 1.105, 1.086, 1.071, 1.059, 1.047, 1.038, 1.031, 1.027, 1.022, 1.021, 1.019, 1.019, 1.019, 1.019, 1.022, 1.026, 1.032, 1.038, 1.049, 1.061, 1.075, 1.092, 1.112, 1.138, 1.169, 1.207, 1.236,
+ 1.278, 1.241, 1.199, 1.164, 1.137, 1.114, 1.094, 1.078, 1.066, 1.055, 1.046, 1.038, 1.032, 1.029, 1.027, 1.027, 1.027, 1.027, 1.027, 1.029, 1.032, 1.038, 1.047, 1.056, 1.067, 1.083, 1.099, 1.121, 1.146, 1.178, 1.217, 1.244,
+ 1.291, 1.252, 1.211, 1.175, 1.147, 1.124, 1.103, 1.088, 1.075, 1.063, 1.054, 1.046, 1.041, 1.036, 1.035, 1.035, 1.035, 1.035, 1.036, 1.038, 1.041, 1.047, 1.055, 1.065, 1.075, 1.092, 1.111, 1.132, 1.157, 1.189, 1.231, 1.255,
+ 1.303, 1.265, 1.222, 1.187, 1.158, 1.133, 1.112, 1.097, 1.083, 1.072, 1.063, 1.054, 1.048, 1.043, 1.043, 1.043, 1.043, 1.043, 1.043, 1.046, 1.049, 1.055, 1.065, 1.074, 1.086, 1.102, 1.119, 1.144, 1.171, 1.203, 1.243, 1.268,
+ 1.317, 1.282, 1.236, 1.201, 1.171, 1.146, 1.125, 1.109, 1.095, 1.083, 1.072, 1.064, 1.058, 1.054, 1.052, 1.051, 1.051, 1.053, 1.054, 1.057, 1.061, 1.065, 1.074, 1.086, 1.099, 1.113, 1.133, 1.156, 1.183, 1.217, 1.259, 1.282,
+ 1.335, 1.301, 1.254, 1.218, 1.186, 1.159, 1.138, 1.121, 1.108, 1.095, 1.085, 1.076, 1.069, 1.066, 1.065, 1.063, 1.062, 1.063, 1.065, 1.068, 1.073, 1.078, 1.087, 1.098, 1.113, 1.126, 1.146, 1.171, 1.199, 1.235, 1.277, 1.299,
+ 1.356, 1.321, 1.274, 1.235, 1.202, 1.175, 1.153, 1.137, 1.121, 1.108, 1.097, 1.089, 1.084, 1.081, 1.077, 1.075, 1.075, 1.075, 1.077, 1.081, 1.086, 1.091, 1.099, 1.113, 1.126, 1.144, 1.162, 1.187, 1.218, 1.255, 1.297, 1.321,
+ 1.376, 1.344, 1.296, 1.257, 1.223, 1.194, 1.171, 1.153, 1.137, 1.124, 1.112, 1.104, 1.099, 1.095, 1.093, 1.091, 1.089, 1.091, 1.092, 1.095, 1.101, 1.108, 1.116, 1.128, 1.144, 1.161, 1.181, 1.206, 1.237, 1.275, 1.321, 1.347,
+ 1.403, 1.369, 1.319, 1.279, 1.244, 1.214, 1.191, 1.171, 1.154, 1.139, 1.129, 1.121, 1.115, 1.111, 1.109, 1.106, 1.105, 1.105, 1.108, 1.112, 1.117, 1.124, 1.135, 1.147, 1.162, 1.181, 1.203, 1.228, 1.262, 1.301, 1.347, 1.377,
+ 1.429, 1.398, 1.348, 1.306, 1.269, 1.237, 1.214, 1.191, 1.173, 1.158, 1.146, 1.138, 1.132, 1.128, 1.125, 1.123, 1.122, 1.123, 1.125, 1.129, 1.136, 1.142, 1.154, 1.166, 1.182, 1.203, 1.226, 1.253, 1.288, 1.329, 1.377, 1.406,
+ 1.465, 1.429, 1.377, 1.335, 1.295, 1.262, 1.236, 1.214, 1.194, 1.179, 1.167, 1.157, 1.151, 1.146, 1.144, 1.142, 1.142, 1.142, 1.144, 1.149, 1.154, 1.163, 1.174, 1.187, 1.205, 1.226, 1.251, 1.279, 1.315, 1.357, 1.406, 1.437,
+ 1.493, 1.465, 1.409, 1.364, 1.323, 1.289, 1.261, 1.235, 1.214, 1.194, 1.179, 1.171, 1.166, 1.163, 1.161, 1.161, 1.161, 1.161, 1.162, 1.164, 1.168, 1.175, 1.187, 1.205, 1.225, 1.251, 1.276, 1.306, 1.344, 1.387, 1.437, 1.455
+ ],
+ "sigma": 0.0007,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2500,
+ "ccm":
+ [
+ 1.95054, -0.57435, -0.37619,
+ -0.46945, 1.86661, -0.39716,
+ 0.07977, -1.14072, 2.06095
+ ]
+ },
+ {
+ "ct": 2800,
+ "ccm":
+ [
+ 1.94104, -0.60261, -0.33844,
+ -0.43162, 1.85422, -0.42261,
+ 0.03799, -0.95022, 1.91222
+ ]
+ },
+ {
+ "ct": 2900,
+ "ccm":
+ [
+ 1.91828, -0.59569, -0.32258,
+ -0.51902, 2.09091, -0.57189,
+ -0.03324, -0.73462, 1.76785
+ ]
+ },
+ {
+ "ct": 3620,
+ "ccm":
+ [
+ 1.97199, -0.66403, -0.30797,
+ -0.46411, 2.02612, -0.56201,
+ -0.07764, -0.61178, 1.68942
+ ]
+ },
+ {
+ "ct": 4560,
+ "ccm":
+ [
+ 2.15256, -0.84787, -0.30469,
+ -0.48422, 2.28962, -0.80541,
+ -0.15113, -0.53014, 1.68127
+ ]
+ },
+ {
+ "ct": 5600,
+ "ccm":
+ [
+ 2.04576, -0.74771, -0.29805,
+ -0.36332, 1.98993, -0.62662,
+ -0.09328, -0.46543, 1.55871
+ ]
+ },
+ {
+ "ct": 7400,
+ "ccm":
+ [
+ 2.37532, -0.83069, -0.54462,
+ -0.48279, 2.84309, -1.36031,
+ -0.21178, -0.66532, 1.87709
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.06,
+ "strength": 0.5,
+ "limit": 0.5
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx296_16mm.json b/src/ipa/rpi/pisp/data/imx296_16mm.json
new file mode 100644
index 00000000..87443745
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx296_16mm.json
@@ -0,0 +1,1247 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 4724,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 860,
+ "reference_Y": 14551
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.751
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 226,
+ "slope": 0.01032
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2875.0, 0.4699, 0.3209,
+ 3610.0, 0.4089, 0.4265,
+ 4640.0, 0.3281, 0.5417,
+ 5912.0, 0.2992, 0.5771,
+ 7630.0, 0.2285, 0.6524
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01783,
+ "transverse_neg": 0.02154
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.084, 2.084, 2.085, 2.085, 2.085, 2.087, 2.088, 2.087, 2.086, 2.082, 2.082, 2.084, 2.086, 2.088, 2.088, 2.088, 2.087, 2.088, 2.088, 2.091, 2.092, 2.093, 2.093, 2.093, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.091, 2.088,
+ 2.086, 2.086, 2.087, 2.088, 2.089, 2.089, 2.091, 2.089, 2.087, 2.086, 2.087, 2.088, 2.091, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.093, 2.093, 2.094, 2.095, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.093,
+ 2.087, 2.087, 2.088, 2.091, 2.091, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.096,
+ 2.089, 2.088, 2.089, 2.091, 2.091, 2.092, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.092, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.095, 2.096, 2.096, 2.097, 2.099, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.099, 2.098, 2.097,
+ 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.094, 2.095, 2.096, 2.097, 2.098, 2.098, 2.098, 2.101, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.089, 2.091, 2.092, 2.092, 2.092, 2.092, 2.094, 2.096, 2.096, 2.097, 2.098, 2.099, 2.099, 2.099, 2.099, 2.099, 2.097,
+ 2.093, 2.094, 2.094, 2.094, 2.095, 2.093, 2.092, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.096, 2.096, 2.097, 2.098, 2.098, 2.101, 2.101, 2.099, 2.099, 2.099,
+ 2.094, 2.094, 2.094, 2.095, 2.095, 2.095, 2.091, 2.089, 2.091, 2.089, 2.089, 2.089, 2.091, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.093, 2.095, 2.096, 2.097, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.099,
+ 2.095, 2.094, 2.094, 2.095, 2.096, 2.095, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.093, 2.094, 2.096, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.101, 2.099,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.095, 2.092, 2.089, 2.089, 2.088, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.093, 2.093, 2.095, 2.096, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.101,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.092, 2.092, 2.094, 2.094, 2.094, 2.096, 2.096, 2.098, 2.099, 2.102, 2.103, 2.103, 2.102, 2.102,
+ 2.095, 2.095, 2.095, 2.096, 2.096, 2.094, 2.093, 2.091, 2.091, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.093, 2.094, 2.094, 2.095, 2.096, 2.097, 2.098, 2.099, 2.103, 2.103, 2.103, 2.101, 2.101,
+ 2.095, 2.096, 2.096, 2.097, 2.096, 2.095, 2.093, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.096, 2.097, 2.099, 2.101, 2.103, 2.103, 2.103, 2.101, 2.099,
+ 2.096, 2.096, 2.097, 2.096, 2.097, 2.096, 2.094, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.099, 2.101, 2.103, 2.103, 2.102, 2.101, 2.101,
+ 2.096, 2.096, 2.097, 2.097, 2.097, 2.096, 2.094, 2.093, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.097, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101,
+ 2.097, 2.096, 2.097, 2.097, 2.097, 2.097, 2.095, 2.093, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.092, 2.092, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.101,
+ 2.098, 2.097, 2.096, 2.097, 2.097, 2.097, 2.095, 2.094, 2.094, 2.094, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.095, 2.095, 2.094, 2.093, 2.095, 2.096, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.102,
+ 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.095, 2.094, 2.095, 2.093, 2.093, 2.092, 2.092, 2.092, 2.094, 2.094, 2.096, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.102, 2.101, 2.102,
+ 2.098, 2.097, 2.097, 2.098, 2.097, 2.096, 2.095, 2.095, 2.095, 2.094, 2.093, 2.093, 2.094, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.095, 2.097, 2.097, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.104, 2.103, 2.102, 2.101,
+ 2.099, 2.098, 2.098, 2.098, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.094, 2.094, 2.094, 2.096, 2.097, 2.097, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.101, 2.101, 2.104, 2.105, 2.105, 2.103, 2.102,
+ 2.101, 2.099, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.098, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.103, 2.104, 2.105, 2.105, 2.104, 2.103,
+ 2.102, 2.102, 2.099, 2.098, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.104, 2.105, 2.106, 2.106, 2.106, 2.104, 2.104, 2.104,
+ 2.102, 2.101, 2.099, 2.099, 2.099, 2.101, 2.101, 2.101, 2.099, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.099, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.103, 2.105, 2.106, 2.106, 2.106, 2.106, 2.105, 2.104, 2.104,
+ 2.099, 2.099, 2.099, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.098, 2.097, 2.098, 2.098, 2.099, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.105, 2.105, 2.106, 2.106, 2.104, 2.104, 2.103,
+ 2.096, 2.097, 2.097, 2.097, 2.097, 2.099, 2.099, 2.099, 2.099, 2.097, 2.097, 2.098, 2.098, 2.099, 2.098, 2.097, 2.097, 2.099, 2.101, 2.101, 2.101, 2.101, 2.101, 2.103, 2.105, 2.105, 2.105, 2.104, 2.104, 2.103, 2.101, 2.101,
+ 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.098, 2.099, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.097, 2.097, 2.096, 2.098, 2.098, 2.099, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.104, 2.104, 2.103, 2.101, 2.099, 2.098,
+ 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.097, 2.098, 2.097, 2.097, 2.096, 2.096, 2.098, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.103, 2.104, 2.104, 2.102, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.096, 2.098, 2.098, 2.098, 2.098, 2.097, 2.098, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.099, 2.099, 2.099, 2.101, 2.102, 2.103, 2.104, 2.104, 2.104, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.097, 2.099, 2.099, 2.099, 2.099, 2.099, 2.099, 2.098, 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.098, 2.097, 2.099, 2.101, 2.099, 2.099, 2.099, 2.102, 2.102, 2.104, 2.105, 2.105, 2.102, 2.099, 2.098
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.431, 3.437, 3.439, 3.439, 3.436, 3.438, 3.441, 3.441, 3.441, 3.441, 3.442, 3.443, 3.443, 3.444, 3.446, 3.448, 3.451, 3.451, 3.452, 3.451, 3.449, 3.449, 3.452, 3.453, 3.454, 3.454, 3.453, 3.456, 3.456, 3.456, 3.451, 3.448,
+ 3.445, 3.446, 3.445, 3.449, 3.453, 3.451, 3.451, 3.446, 3.447, 3.446, 3.447, 3.451, 3.453, 3.455, 3.454, 3.453, 3.453, 3.454, 3.455, 3.456, 3.457, 3.459, 3.461, 3.462, 3.463, 3.463, 3.465, 3.466, 3.467, 3.465, 3.459, 3.457,
+ 3.449, 3.449, 3.449, 3.454, 3.455, 3.454, 3.453, 3.451, 3.451, 3.448, 3.451, 3.451, 3.455, 3.456, 3.457, 3.456, 3.456, 3.458, 3.457, 3.459, 3.459, 3.461, 3.464, 3.467, 3.467, 3.466, 3.468, 3.469, 3.471, 3.468, 3.465, 3.462,
+ 3.451, 3.448, 3.451, 3.453, 3.457, 3.455, 3.454, 3.449, 3.449, 3.448, 3.449, 3.449, 3.455, 3.455, 3.456, 3.455, 3.454, 3.455, 3.455, 3.457, 3.458, 3.458, 3.461, 3.464, 3.466, 3.468, 3.469, 3.469, 3.469, 3.468, 3.465, 3.463,
+ 3.449, 3.449, 3.451, 3.453, 3.456, 3.455, 3.452, 3.449, 3.448, 3.447, 3.446, 3.448, 3.451, 3.452, 3.454, 3.455, 3.455, 3.454, 3.457, 3.458, 3.458, 3.459, 3.461, 3.464, 3.464, 3.466, 3.467, 3.469, 3.469, 3.467, 3.463, 3.459,
+ 3.449, 3.451, 3.452, 3.454, 3.455, 3.454, 3.452, 3.449, 3.447, 3.447, 3.446, 3.449, 3.449, 3.451, 3.452, 3.452, 3.452, 3.452, 3.454, 3.455, 3.457, 3.459, 3.461, 3.464, 3.464, 3.466, 3.465, 3.468, 3.468, 3.469, 3.465, 3.462,
+ 3.451, 3.451, 3.452, 3.453, 3.453, 3.453, 3.451, 3.449, 3.449, 3.447, 3.446, 3.447, 3.448, 3.451, 3.451, 3.451, 3.453, 3.452, 3.452, 3.452, 3.457, 3.458, 3.461, 3.463, 3.464, 3.465, 3.464, 3.466, 3.468, 3.469, 3.466, 3.463,
+ 3.451, 3.451, 3.451, 3.454, 3.453, 3.453, 3.451, 3.448, 3.448, 3.444, 3.444, 3.444, 3.448, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.452, 3.454, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.467, 3.468, 3.469, 3.466, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.454, 3.453, 3.449, 3.448, 3.447, 3.447, 3.444, 3.446, 3.446, 3.446, 3.446, 3.447, 3.449, 3.449, 3.451, 3.452, 3.455, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.468, 3.469, 3.468, 3.465, 3.462,
+ 3.453, 3.452, 3.454, 3.456, 3.455, 3.453, 3.449, 3.447, 3.446, 3.446, 3.445, 3.448, 3.447, 3.446, 3.445, 3.446, 3.448, 3.448, 3.449, 3.453, 3.455, 3.457, 3.459, 3.461, 3.464, 3.466, 3.467, 3.468, 3.468, 3.467, 3.465, 3.463,
+ 3.453, 3.453, 3.454, 3.456, 3.456, 3.451, 3.448, 3.447, 3.447, 3.446, 3.445, 3.446, 3.446, 3.446, 3.446, 3.446, 3.448, 3.448, 3.449, 3.452, 3.454, 3.456, 3.459, 3.459, 3.461, 3.465, 3.466, 3.468, 3.468, 3.468, 3.467, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.456, 3.452, 3.448, 3.446, 3.446, 3.444, 3.446, 3.445, 3.446, 3.446, 3.447, 3.448, 3.449, 3.449, 3.449, 3.452, 3.453, 3.454, 3.458, 3.458, 3.461, 3.461, 3.464, 3.469, 3.469, 3.468, 3.466, 3.466,
+ 3.452, 3.452, 3.453, 3.454, 3.454, 3.453, 3.447, 3.446, 3.444, 3.444, 3.444, 3.444, 3.445, 3.446, 3.448, 3.451, 3.452, 3.453, 3.451, 3.453, 3.453, 3.455, 3.458, 3.459, 3.461, 3.462, 3.463, 3.468, 3.471, 3.469, 3.467, 3.467,
+ 3.454, 3.455, 3.457, 3.458, 3.458, 3.455, 3.449, 3.446, 3.445, 3.445, 3.445, 3.445, 3.447, 3.447, 3.448, 3.451, 3.452, 3.453, 3.452, 3.452, 3.452, 3.454, 3.457, 3.459, 3.459, 3.462, 3.464, 3.468, 3.469, 3.467, 3.465, 3.465,
+ 3.457, 3.455, 3.455, 3.459, 3.458, 3.454, 3.451, 3.448, 3.445, 3.445, 3.445, 3.446, 3.448, 3.449, 3.451, 3.452, 3.451, 3.453, 3.452, 3.452, 3.453, 3.457, 3.457, 3.461, 3.461, 3.463, 3.465, 3.468, 3.471, 3.468, 3.465, 3.463,
+ 3.458, 3.456, 3.456, 3.459, 3.457, 3.454, 3.452, 3.449, 3.447, 3.445, 3.446, 3.447, 3.447, 3.448, 3.449, 3.448, 3.449, 3.451, 3.451, 3.451, 3.451, 3.455, 3.456, 3.458, 3.462, 3.463, 3.464, 3.465, 3.467, 3.466, 3.464, 3.462,
+ 3.457, 3.456, 3.455, 3.457, 3.457, 3.454, 3.449, 3.447, 3.445, 3.445, 3.446, 3.446, 3.448, 3.446, 3.448, 3.449, 3.449, 3.451, 3.451, 3.451, 3.453, 3.455, 3.457, 3.459, 3.462, 3.464, 3.464, 3.465, 3.467, 3.464, 3.464, 3.463,
+ 3.458, 3.457, 3.455, 3.456, 3.456, 3.456, 3.453, 3.449, 3.447, 3.448, 3.447, 3.447, 3.447, 3.447, 3.447, 3.448, 3.449, 3.451, 3.451, 3.452, 3.453, 3.455, 3.458, 3.459, 3.459, 3.463, 3.464, 3.463, 3.464, 3.463, 3.464, 3.464,
+ 3.457, 3.456, 3.456, 3.456, 3.456, 3.456, 3.455, 3.449, 3.447, 3.448, 3.451, 3.449, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.451, 3.452, 3.453, 3.456, 3.458, 3.459, 3.461, 3.462, 3.464, 3.464, 3.465, 3.464, 3.464, 3.463,
+ 3.457, 3.456, 3.455, 3.455, 3.455, 3.455, 3.453, 3.451, 3.449, 3.448, 3.448, 3.449, 3.449, 3.449, 3.448, 3.449, 3.451, 3.452, 3.452, 3.453, 3.454, 3.457, 3.458, 3.459, 3.462, 3.464, 3.465, 3.464, 3.465, 3.464, 3.463, 3.463,
+ 3.456, 3.456, 3.454, 3.453, 3.454, 3.453, 3.452, 3.451, 3.449, 3.448, 3.448, 3.449, 3.451, 3.451, 3.448, 3.449, 3.451, 3.454, 3.454, 3.454, 3.455, 3.457, 3.458, 3.461, 3.461, 3.462, 3.464, 3.464, 3.466, 3.465, 3.464, 3.464,
+ 3.459, 3.457, 3.456, 3.455, 3.454, 3.453, 3.453, 3.452, 3.452, 3.451, 3.449, 3.449, 3.449, 3.448, 3.447, 3.449, 3.451, 3.454, 3.455, 3.455, 3.456, 3.458, 3.459, 3.461, 3.461, 3.462, 3.463, 3.466, 3.469, 3.465, 3.465, 3.464,
+ 3.463, 3.461, 3.458, 3.458, 3.457, 3.456, 3.456, 3.454, 3.454, 3.452, 3.452, 3.451, 3.451, 3.449, 3.448, 3.448, 3.452, 3.454, 3.456, 3.455, 3.457, 3.458, 3.461, 3.464, 3.462, 3.461, 3.463, 3.466, 3.469, 3.469, 3.467, 3.467,
+ 3.466, 3.462, 3.461, 3.461, 3.459, 3.457, 3.457, 3.457, 3.456, 3.454, 3.455, 3.455, 3.455, 3.451, 3.452, 3.453, 3.454, 3.455, 3.456, 3.456, 3.459, 3.462, 3.463, 3.466, 3.466, 3.467, 3.466, 3.469, 3.471, 3.469, 3.468, 3.466,
+ 3.467, 3.463, 3.463, 3.459, 3.461, 3.459, 3.461, 3.459, 3.458, 3.456, 3.457, 3.456, 3.457, 3.455, 3.456, 3.455, 3.456, 3.457, 3.459, 3.461, 3.461, 3.464, 3.465, 3.468, 3.469, 3.469, 3.469, 3.469, 3.471, 3.468, 3.467, 3.468,
+ 3.467, 3.464, 3.459, 3.459, 3.462, 3.462, 3.462, 3.461, 3.461, 3.462, 3.461, 3.459, 3.461, 3.459, 3.458, 3.457, 3.459, 3.461, 3.462, 3.463, 3.464, 3.466, 3.468, 3.469, 3.471, 3.469, 3.471, 3.472, 3.471, 3.467, 3.466, 3.464,
+ 3.464, 3.462, 3.458, 3.457, 3.458, 3.461, 3.461, 3.461, 3.461, 3.462, 3.462, 3.461, 3.461, 3.459, 3.459, 3.459, 3.461, 3.461, 3.464, 3.465, 3.465, 3.468, 3.468, 3.469, 3.471, 3.469, 3.469, 3.469, 3.469, 3.464, 3.462, 3.459,
+ 3.457, 3.458, 3.455, 3.456, 3.456, 3.457, 3.459, 3.459, 3.459, 3.459, 3.458, 3.456, 3.458, 3.457, 3.458, 3.458, 3.458, 3.459, 3.461, 3.463, 3.465, 3.466, 3.468, 3.469, 3.471, 3.468, 3.466, 3.466, 3.465, 3.461, 3.459, 3.457,
+ 3.456, 3.455, 3.454, 3.454, 3.455, 3.456, 3.458, 3.459, 3.459, 3.456, 3.456, 3.456, 3.455, 3.456, 3.455, 3.455, 3.455, 3.454, 3.457, 3.461, 3.462, 3.464, 3.465, 3.467, 3.467, 3.466, 3.464, 3.464, 3.463, 3.461, 3.457, 3.456,
+ 3.456, 3.454, 3.453, 3.454, 3.454, 3.455, 3.458, 3.459, 3.459, 3.456, 3.455, 3.455, 3.455, 3.451, 3.453, 3.454, 3.454, 3.455, 3.455, 3.458, 3.461, 3.462, 3.461, 3.463, 3.465, 3.464, 3.463, 3.463, 3.462, 3.459, 3.456, 3.451,
+ 3.455, 3.452, 3.452, 3.452, 3.455, 3.457, 3.459, 3.459, 3.459, 3.458, 3.456, 3.456, 3.455, 3.453, 3.453, 3.455, 3.457, 3.457, 3.457, 3.461, 3.461, 3.461, 3.459, 3.462, 3.464, 3.464, 3.464, 3.463, 3.463, 3.459, 3.454, 3.451,
+ 3.452, 3.452, 3.452, 3.453, 3.457, 3.458, 3.458, 3.459, 3.459, 3.458, 3.457, 3.457, 3.455, 3.455, 3.458, 3.459, 3.458, 3.459, 3.459, 3.461, 3.461, 3.461, 3.459, 3.461, 3.463, 3.464, 3.466, 3.463, 3.461, 3.458, 3.453, 3.449
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.403, 3.399, 3.395, 3.391, 3.392, 3.394, 3.401, 3.403, 3.404, 3.404, 3.403, 3.399, 3.398, 3.396, 3.395, 3.396, 3.399, 3.403, 3.404, 3.401, 3.399, 3.398, 3.397, 3.401, 3.401, 3.401, 3.396, 3.394, 3.397, 3.396, 3.388, 3.364,
+ 3.403, 3.399, 3.393, 3.389, 3.391, 3.395, 3.401, 3.404, 3.406, 3.404, 3.403, 3.399, 3.399, 3.397, 3.397, 3.397, 3.401, 3.404, 3.404, 3.402, 3.398, 3.396, 3.397, 3.401, 3.401, 3.401, 3.395, 3.394, 3.396, 3.393, 3.387, 3.364,
+ 3.399, 3.398, 3.391, 3.385, 3.386, 3.395, 3.402, 3.405, 3.405, 3.404, 3.402, 3.399, 3.399, 3.398, 3.398, 3.398, 3.401, 3.404, 3.405, 3.403, 3.399, 3.396, 3.396, 3.398, 3.401, 3.401, 3.398, 3.394, 3.392, 3.389, 3.386, 3.364,
+ 3.398, 3.393, 3.386, 3.382, 3.385, 3.392, 3.399, 3.403, 3.405, 3.404, 3.402, 3.398, 3.398, 3.397, 3.397, 3.398, 3.401, 3.404, 3.405, 3.403, 3.398, 3.394, 3.394, 3.398, 3.401, 3.401, 3.396, 3.392, 3.391, 3.388, 3.383, 3.362,
+ 3.396, 3.391, 3.384, 3.381, 3.384, 3.389, 3.398, 3.402, 3.402, 3.401, 3.399, 3.395, 3.395, 3.395, 3.397, 3.397, 3.401, 3.402, 3.404, 3.403, 3.399, 3.394, 3.393, 3.395, 3.399, 3.399, 3.397, 3.391, 3.388, 3.384, 3.381, 3.363,
+ 3.391, 3.386, 3.382, 3.381, 3.385, 3.389, 3.396, 3.398, 3.399, 3.399, 3.398, 3.395, 3.394, 3.394, 3.395, 3.397, 3.399, 3.401, 3.403, 3.401, 3.398, 3.394, 3.393, 3.393, 3.394, 3.396, 3.395, 3.392, 3.387, 3.382, 3.378, 3.361,
+ 3.389, 3.386, 3.379, 3.379, 3.383, 3.388, 3.394, 3.397, 3.397, 3.397, 3.395, 3.393, 3.393, 3.393, 3.395, 3.395, 3.397, 3.398, 3.401, 3.399, 3.397, 3.395, 3.394, 3.391, 3.393, 3.393, 3.393, 3.389, 3.387, 3.381, 3.374, 3.357,
+ 3.386, 3.383, 3.376, 3.375, 3.381, 3.386, 3.394, 3.396, 3.396, 3.394, 3.392, 3.392, 3.394, 3.394, 3.395, 3.394, 3.396, 3.398, 3.399, 3.397, 3.397, 3.394, 3.393, 3.391, 3.389, 3.391, 3.392, 3.388, 3.386, 3.379, 3.372, 3.355,
+ 3.386, 3.379, 3.373, 3.373, 3.378, 3.384, 3.391, 3.396, 3.395, 3.393, 3.389, 3.391, 3.391, 3.393, 3.394, 3.393, 3.394, 3.396, 3.397, 3.396, 3.393, 3.394, 3.393, 3.392, 3.389, 3.389, 3.389, 3.389, 3.386, 3.378, 3.371, 3.351,
+ 3.379, 3.375, 3.371, 3.371, 3.376, 3.381, 3.388, 3.393, 3.394, 3.391, 3.386, 3.386, 3.388, 3.393, 3.392, 3.392, 3.393, 3.395, 3.394, 3.392, 3.389, 3.391, 3.391, 3.392, 3.389, 3.388, 3.389, 3.389, 3.383, 3.377, 3.369, 3.351,
+ 3.373, 3.371, 3.367, 3.368, 3.373, 3.381, 3.387, 3.389, 3.391, 3.389, 3.385, 3.386, 3.383, 3.389, 3.389, 3.392, 3.392, 3.394, 3.393, 3.389, 3.387, 3.387, 3.388, 3.389, 3.389, 3.388, 3.386, 3.386, 3.382, 3.374, 3.367, 3.345,
+ 3.371, 3.369, 3.365, 3.366, 3.373, 3.379, 3.386, 3.389, 3.391, 3.389, 3.385, 3.384, 3.382, 3.386, 3.387, 3.389, 3.391, 3.392, 3.391, 3.387, 3.385, 3.385, 3.386, 3.388, 3.388, 3.388, 3.386, 3.385, 3.381, 3.373, 3.367, 3.345,
+ 3.367, 3.365, 3.365, 3.366, 3.374, 3.379, 3.384, 3.388, 3.389, 3.387, 3.384, 3.383, 3.383, 3.385, 3.385, 3.386, 3.388, 3.389, 3.388, 3.386, 3.383, 3.382, 3.384, 3.386, 3.387, 3.386, 3.381, 3.381, 3.379, 3.372, 3.364, 3.344,
+ 3.365, 3.363, 3.362, 3.367, 3.375, 3.379, 3.383, 3.384, 3.386, 3.384, 3.381, 3.379, 3.379, 3.383, 3.383, 3.384, 3.385, 3.387, 3.387, 3.385, 3.381, 3.381, 3.382, 3.384, 3.384, 3.385, 3.382, 3.379, 3.374, 3.369, 3.359, 3.343,
+ 3.359, 3.358, 3.361, 3.364, 3.373, 3.381, 3.384, 3.384, 3.385, 3.384, 3.381, 3.377, 3.379, 3.379, 3.382, 3.383, 3.384, 3.386, 3.386, 3.385, 3.381, 3.379, 3.381, 3.382, 3.382, 3.383, 3.379, 3.377, 3.371, 3.364, 3.357, 3.339,
+ 3.357, 3.356, 3.356, 3.362, 3.372, 3.379, 3.384, 3.384, 3.383, 3.381, 3.378, 3.376, 3.377, 3.379, 3.381, 3.382, 3.383, 3.385, 3.385, 3.383, 3.379, 3.379, 3.379, 3.381, 3.381, 3.382, 3.379, 3.372, 3.367, 3.362, 3.354, 3.334,
+ 3.357, 3.354, 3.357, 3.361, 3.372, 3.381, 3.385, 3.385, 3.384, 3.379, 3.376, 3.376, 3.376, 3.379, 3.381, 3.383, 3.383, 3.384, 3.383, 3.379, 3.378, 3.381, 3.379, 3.379, 3.379, 3.379, 3.378, 3.371, 3.363, 3.358, 3.354, 3.332,
+ 3.354, 3.351, 3.354, 3.359, 3.371, 3.379, 3.382, 3.384, 3.381, 3.378, 3.375, 3.374, 3.376, 3.378, 3.381, 3.383, 3.384, 3.382, 3.377, 3.377, 3.376, 3.377, 3.378, 3.378, 3.379, 3.379, 3.376, 3.367, 3.361, 3.357, 3.352, 3.333,
+ 3.352, 3.349, 3.351, 3.357, 3.372, 3.381, 3.383, 3.383, 3.381, 3.376, 3.372, 3.373, 3.375, 3.377, 3.382, 3.384, 3.384, 3.379, 3.376, 3.374, 3.374, 3.375, 3.375, 3.376, 3.377, 3.376, 3.373, 3.366, 3.361, 3.356, 3.347, 3.332,
+ 3.347, 3.346, 3.346, 3.355, 3.371, 3.377, 3.382, 3.381, 3.379, 3.372, 3.371, 3.371, 3.372, 3.375, 3.379, 3.383, 3.384, 3.379, 3.374, 3.373, 3.371, 3.373, 3.374, 3.375, 3.374, 3.374, 3.371, 3.365, 3.359, 3.352, 3.343, 3.331,
+ 3.345, 3.344, 3.345, 3.353, 3.367, 3.374, 3.382, 3.382, 3.376, 3.371, 3.369, 3.368, 3.369, 3.373, 3.377, 3.381, 3.379, 3.376, 3.373, 3.369, 3.368, 3.371, 3.372, 3.373, 3.371, 3.371, 3.369, 3.363, 3.357, 3.349, 3.341, 3.326,
+ 3.343, 3.341, 3.344, 3.351, 3.362, 3.371, 3.376, 3.376, 3.372, 3.369, 3.367, 3.366, 3.367, 3.369, 3.376, 3.378, 3.378, 3.375, 3.371, 3.367, 3.367, 3.368, 3.369, 3.369, 3.369, 3.368, 3.365, 3.361, 3.354, 3.347, 3.338, 3.321,
+ 3.341, 3.339, 3.342, 3.349, 3.359, 3.367, 3.371, 3.372, 3.371, 3.368, 3.366, 3.363, 3.365, 3.368, 3.371, 3.374, 3.376, 3.374, 3.368, 3.365, 3.365, 3.366, 3.368, 3.367, 3.367, 3.363, 3.361, 3.356, 3.352, 3.346, 3.336, 3.317,
+ 3.338, 3.336, 3.338, 3.346, 3.359, 3.364, 3.368, 3.369, 3.367, 3.366, 3.363, 3.362, 3.364, 3.364, 3.367, 3.371, 3.372, 3.369, 3.365, 3.362, 3.362, 3.365, 3.367, 3.367, 3.366, 3.362, 3.357, 3.353, 3.349, 3.342, 3.335, 3.317,
+ 3.334, 3.334, 3.336, 3.346, 3.354, 3.361, 3.365, 3.365, 3.365, 3.362, 3.361, 3.361, 3.362, 3.362, 3.364, 3.366, 3.368, 3.366, 3.361, 3.357, 3.357, 3.359, 3.363, 3.365, 3.363, 3.361, 3.355, 3.351, 3.346, 3.339, 3.336, 3.317,
+ 3.332, 3.332, 3.334, 3.344, 3.354, 3.359, 3.363, 3.365, 3.363, 3.361, 3.359, 3.359, 3.363, 3.363, 3.365, 3.365, 3.367, 3.366, 3.358, 3.356, 3.356, 3.358, 3.362, 3.364, 3.363, 3.359, 3.353, 3.348, 3.345, 3.339, 3.336, 3.315,
+ 3.332, 3.328, 3.331, 3.343, 3.351, 3.357, 3.358, 3.362, 3.361, 3.359, 3.357, 3.357, 3.361, 3.362, 3.364, 3.363, 3.363, 3.359, 3.356, 3.354, 3.354, 3.355, 3.358, 3.359, 3.361, 3.359, 3.351, 3.346, 3.344, 3.339, 3.336, 3.313,
+ 3.324, 3.324, 3.327, 3.334, 3.345, 3.351, 3.354, 3.356, 3.356, 3.354, 3.353, 3.354, 3.357, 3.358, 3.361, 3.358, 3.359, 3.355, 3.352, 3.348, 3.347, 3.351, 3.354, 3.358, 3.359, 3.355, 3.346, 3.343, 3.341, 3.336, 3.331, 3.312,
+ 3.318, 3.319, 3.321, 3.328, 3.337, 3.339, 3.345, 3.348, 3.346, 3.345, 3.347, 3.348, 3.351, 3.354, 3.356, 3.353, 3.354, 3.344, 3.343, 3.343, 3.343, 3.344, 3.347, 3.349, 3.353, 3.346, 3.341, 3.339, 3.331, 3.329, 3.325, 3.311,
+ 3.309, 3.313, 3.317, 3.325, 3.329, 3.332, 3.338, 3.339, 3.341, 3.339, 3.339, 3.342, 3.346, 3.346, 3.351, 3.351, 3.343, 3.338, 3.338, 3.339, 3.339, 3.339, 3.341, 3.341, 3.346, 3.343, 3.339, 3.332, 3.327, 3.326, 3.322, 3.309,
+ 3.305, 3.309, 3.317, 3.325, 3.328, 3.331, 3.334, 3.336, 3.337, 3.336, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.341, 3.336, 3.335, 3.337, 3.339, 3.341, 3.339, 3.339, 3.342, 3.341, 3.337, 3.329, 3.326, 3.325, 3.321, 3.314,
+ 3.302, 3.306, 3.319, 3.325, 3.329, 3.331, 3.334, 3.335, 3.337, 3.337, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.342, 3.336, 3.336, 3.338, 3.339, 3.341, 3.341, 3.341, 3.339, 3.338, 3.336, 3.331, 3.327, 3.324, 3.321, 3.314
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.726, 1.725, 1.723, 1.721, 1.723, 1.724, 1.724, 1.726, 1.727, 1.728, 1.729, 1.728, 1.725, 1.724, 1.726, 1.726, 1.727, 1.729, 1.727, 1.727, 1.724, 1.725, 1.724, 1.726, 1.725, 1.725, 1.724, 1.724, 1.722, 1.721, 1.719, 1.714,
+ 1.726, 1.724, 1.722, 1.721, 1.722, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.727, 1.725, 1.724, 1.724, 1.725, 1.726, 1.725, 1.724, 1.723, 1.722, 1.721, 1.719, 1.714,
+ 1.724, 1.722, 1.719, 1.719, 1.721, 1.723, 1.726, 1.726, 1.727, 1.727, 1.727, 1.725, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.725, 1.724, 1.724, 1.724, 1.726, 1.725, 1.724, 1.722, 1.722, 1.721, 1.719, 1.712,
+ 1.723, 1.721, 1.719, 1.719, 1.719, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.726, 1.728, 1.729, 1.728, 1.725, 1.723, 1.723, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.718, 1.711,
+ 1.722, 1.719, 1.719, 1.718, 1.719, 1.722, 1.725, 1.726, 1.726, 1.727, 1.727, 1.726, 1.725, 1.726, 1.726, 1.726, 1.727, 1.727, 1.728, 1.727, 1.726, 1.725, 1.724, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.715, 1.711,
+ 1.721, 1.717, 1.717, 1.716, 1.719, 1.722, 1.724, 1.726, 1.726, 1.727, 1.726, 1.726, 1.726, 1.726, 1.726, 1.727, 1.727, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.722, 1.721, 1.718, 1.715, 1.707,
+ 1.718, 1.717, 1.716, 1.716, 1.718, 1.721, 1.725, 1.726, 1.726, 1.726, 1.725, 1.725, 1.725, 1.725, 1.726, 1.727, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.718, 1.715, 1.709,
+ 1.718, 1.716, 1.716, 1.715, 1.717, 1.721, 1.724, 1.725, 1.726, 1.725, 1.725, 1.724, 1.724, 1.725, 1.726, 1.726, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.723, 1.723, 1.723, 1.722, 1.722, 1.719, 1.718, 1.714, 1.709,
+ 1.718, 1.716, 1.715, 1.715, 1.717, 1.721, 1.723, 1.725, 1.726, 1.725, 1.724, 1.723, 1.724, 1.725, 1.725, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.723, 1.722, 1.722, 1.721, 1.717, 1.714, 1.707,
+ 1.717, 1.716, 1.714, 1.714, 1.716, 1.721, 1.723, 1.725, 1.725, 1.725, 1.723, 1.723, 1.724, 1.726, 1.726, 1.726, 1.726, 1.725, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.706,
+ 1.715, 1.714, 1.714, 1.714, 1.716, 1.719, 1.722, 1.724, 1.725, 1.725, 1.723, 1.723, 1.724, 1.725, 1.725, 1.725, 1.726, 1.725, 1.725, 1.725, 1.724, 1.724, 1.724, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.713, 1.705,
+ 1.714, 1.714, 1.713, 1.714, 1.717, 1.719, 1.722, 1.724, 1.724, 1.724, 1.723, 1.722, 1.723, 1.724, 1.724, 1.724, 1.726, 1.725, 1.726, 1.725, 1.723, 1.723, 1.724, 1.724, 1.724, 1.723, 1.721, 1.719, 1.717, 1.715, 1.713, 1.706,
+ 1.712, 1.712, 1.712, 1.713, 1.718, 1.719, 1.721, 1.723, 1.724, 1.724, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.725, 1.725, 1.725, 1.725, 1.723, 1.722, 1.724, 1.723, 1.723, 1.722, 1.721, 1.719, 1.717, 1.714, 1.711, 1.706,
+ 1.712, 1.711, 1.711, 1.713, 1.717, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.724, 1.725, 1.725, 1.724, 1.723, 1.722, 1.722, 1.722, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.711, 1.706,
+ 1.711, 1.709, 1.711, 1.713, 1.716, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.721, 1.722, 1.724, 1.724, 1.724, 1.723, 1.724, 1.724, 1.724, 1.722, 1.722, 1.722, 1.722, 1.722, 1.721, 1.719, 1.718, 1.714, 1.712, 1.709, 1.702,
+ 1.709, 1.709, 1.709, 1.712, 1.717, 1.719, 1.721, 1.723, 1.723, 1.723, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.724, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.716, 1.713, 1.711, 1.709, 1.701,
+ 1.708, 1.707, 1.709, 1.712, 1.716, 1.719, 1.722, 1.723, 1.723, 1.723, 1.721, 1.721, 1.721, 1.722, 1.723, 1.723, 1.723, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.714, 1.712, 1.709, 1.708, 1.702,
+ 1.707, 1.707, 1.708, 1.711, 1.716, 1.721, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.722, 1.722, 1.723, 1.723, 1.723, 1.722, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.721, 1.717, 1.714, 1.711, 1.709, 1.707, 1.702,
+ 1.706, 1.706, 1.707, 1.711, 1.714, 1.719, 1.722, 1.722, 1.722, 1.721, 1.719, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.719, 1.719, 1.721, 1.721, 1.719, 1.719, 1.716, 1.713, 1.711, 1.709, 1.706, 1.701,
+ 1.705, 1.704, 1.706, 1.709, 1.713, 1.718, 1.721, 1.722, 1.721, 1.719, 1.718, 1.719, 1.721, 1.722, 1.723, 1.724, 1.724, 1.721, 1.721, 1.721, 1.719, 1.719, 1.719, 1.719, 1.719, 1.717, 1.715, 1.713, 1.711, 1.707, 1.704, 1.699,
+ 1.703, 1.703, 1.704, 1.709, 1.712, 1.717, 1.719, 1.721, 1.719, 1.718, 1.717, 1.718, 1.719, 1.721, 1.722, 1.723, 1.723, 1.722, 1.719, 1.719, 1.718, 1.719, 1.719, 1.718, 1.717, 1.716, 1.714, 1.712, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.703, 1.704, 1.708, 1.712, 1.715, 1.718, 1.719, 1.719, 1.717, 1.717, 1.717, 1.717, 1.718, 1.721, 1.722, 1.722, 1.721, 1.719, 1.718, 1.717, 1.718, 1.718, 1.717, 1.716, 1.714, 1.714, 1.711, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.702, 1.703, 1.706, 1.709, 1.715, 1.717, 1.718, 1.717, 1.717, 1.716, 1.716, 1.717, 1.717, 1.719, 1.721, 1.721, 1.721, 1.719, 1.717, 1.716, 1.717, 1.717, 1.716, 1.714, 1.713, 1.712, 1.711, 1.708, 1.706, 1.702, 1.696,
+ 1.701, 1.701, 1.702, 1.706, 1.709, 1.714, 1.716, 1.717, 1.716, 1.716, 1.716, 1.715, 1.716, 1.716, 1.717, 1.718, 1.719, 1.719, 1.716, 1.715, 1.715, 1.715, 1.715, 1.715, 1.714, 1.713, 1.711, 1.709, 1.708, 1.704, 1.701, 1.695,
+ 1.699, 1.699, 1.702, 1.706, 1.708, 1.712, 1.714, 1.715, 1.715, 1.715, 1.714, 1.715, 1.714, 1.715, 1.716, 1.716, 1.716, 1.716, 1.714, 1.713, 1.713, 1.714, 1.715, 1.714, 1.714, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.695,
+ 1.698, 1.699, 1.701, 1.705, 1.708, 1.711, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.715, 1.715, 1.716, 1.716, 1.715, 1.713, 1.713, 1.713, 1.714, 1.714, 1.714, 1.713, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.696,
+ 1.698, 1.699, 1.701, 1.705, 1.707, 1.711, 1.712, 1.713, 1.713, 1.713, 1.713, 1.714, 1.714, 1.715, 1.715, 1.716, 1.715, 1.714, 1.713, 1.712, 1.712, 1.712, 1.713, 1.713, 1.713, 1.711, 1.709, 1.707, 1.705, 1.703, 1.701, 1.696,
+ 1.698, 1.697, 1.699, 1.702, 1.705, 1.707, 1.711, 1.711, 1.711, 1.711, 1.711, 1.712, 1.712, 1.713, 1.714, 1.714, 1.713, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.708, 1.706, 1.704, 1.703, 1.699, 1.696,
+ 1.694, 1.695, 1.697, 1.699, 1.702, 1.705, 1.706, 1.707, 1.707, 1.708, 1.708, 1.708, 1.709, 1.711, 1.711, 1.711, 1.708, 1.708, 1.708, 1.707, 1.707, 1.707, 1.708, 1.708, 1.709, 1.708, 1.706, 1.703, 1.702, 1.701, 1.698, 1.696,
+ 1.692, 1.692, 1.695, 1.698, 1.699, 1.701, 1.704, 1.704, 1.704, 1.704, 1.705, 1.706, 1.707, 1.709, 1.709, 1.707, 1.706, 1.704, 1.704, 1.705, 1.705, 1.706, 1.706, 1.706, 1.706, 1.706, 1.703, 1.702, 1.701, 1.699, 1.696, 1.694,
+ 1.691, 1.692, 1.695, 1.697, 1.699, 1.699, 1.702, 1.703, 1.703, 1.702, 1.703, 1.704, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.704, 1.705, 1.705, 1.705, 1.705, 1.704, 1.703, 1.701, 1.699, 1.698, 1.696, 1.695,
+ 1.689, 1.691, 1.696, 1.698, 1.699, 1.699, 1.701, 1.702, 1.702, 1.702, 1.703, 1.703, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.703, 1.704, 1.704, 1.705, 1.704, 1.704, 1.702, 1.701, 1.698, 1.698, 1.696, 1.696
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.425, 1.393, 1.341, 1.295, 1.258, 1.226, 1.201, 1.181, 1.162, 1.146, 1.133, 1.123, 1.115, 1.111, 1.107, 1.106, 1.106, 1.107, 1.108, 1.111, 1.114, 1.122, 1.133, 1.148, 1.164, 1.184, 1.208, 1.236, 1.271, 1.309, 1.359, 1.381,
+ 1.397, 1.367, 1.317, 1.274, 1.237, 1.207, 1.183, 1.163, 1.146, 1.133, 1.123, 1.114, 1.107, 1.101, 1.098, 1.096, 1.096, 1.096, 1.097, 1.102, 1.106, 1.112, 1.122, 1.133, 1.148, 1.166, 1.187, 1.215, 1.249, 1.288, 1.335, 1.359,
+ 1.374, 1.341, 1.292, 1.251, 1.215, 1.186, 1.166, 1.146, 1.131, 1.117, 1.108, 1.099, 1.091, 1.088, 1.084, 1.082, 1.081, 1.082, 1.084, 1.088, 1.093, 1.098, 1.107, 1.118, 1.133, 1.149, 1.169, 1.195, 1.228, 1.267, 1.313, 1.335,
+ 1.352, 1.318, 1.271, 1.231, 1.196, 1.169, 1.149, 1.131, 1.115, 1.103, 1.093, 1.086, 1.079, 1.074, 1.071, 1.069, 1.069, 1.069, 1.071, 1.076, 1.079, 1.085, 1.094, 1.102, 1.117, 1.133, 1.152, 1.176, 1.208, 1.246, 1.289, 1.313,
+ 1.333, 1.298, 1.253, 1.212, 1.179, 1.153, 1.134, 1.116, 1.102, 1.089, 1.079, 1.072, 1.066, 1.062, 1.059, 1.058, 1.057, 1.057, 1.059, 1.064, 1.068, 1.072, 1.081, 1.091, 1.102, 1.119, 1.137, 1.161, 1.191, 1.227, 1.271, 1.293,
+ 1.317, 1.281, 1.235, 1.196, 1.165, 1.139, 1.119, 1.104, 1.089, 1.078, 1.068, 1.062, 1.055, 1.051, 1.048, 1.047, 1.047, 1.047, 1.048, 1.053, 1.056, 1.061, 1.069, 1.079, 1.091, 1.105, 1.126, 1.147, 1.177, 1.212, 1.253, 1.278,
+ 1.301, 1.265, 1.221, 1.181, 1.151, 1.127, 1.108, 1.091, 1.078, 1.068, 1.059, 1.051, 1.045, 1.041, 1.038, 1.037, 1.036, 1.037, 1.038, 1.042, 1.046, 1.051, 1.059, 1.069, 1.081, 1.096, 1.113, 1.135, 1.164, 1.198, 1.238, 1.264,
+ 1.286, 1.251, 1.207, 1.169, 1.141, 1.116, 1.098, 1.081, 1.068, 1.058, 1.049, 1.042, 1.037, 1.033, 1.031, 1.029, 1.028, 1.028, 1.029, 1.033, 1.037, 1.043, 1.051, 1.059, 1.071, 1.086, 1.104, 1.124, 1.152, 1.185, 1.225, 1.252,
+ 1.275, 1.239, 1.196, 1.161, 1.132, 1.107, 1.089, 1.073, 1.059, 1.049, 1.041, 1.035, 1.028, 1.024, 1.023, 1.021, 1.021, 1.021, 1.022, 1.024, 1.029, 1.036, 1.043, 1.051, 1.063, 1.078, 1.095, 1.115, 1.143, 1.175, 1.214, 1.243,
+ 1.267, 1.227, 1.187, 1.152, 1.122, 1.101, 1.081, 1.067, 1.054, 1.042, 1.035, 1.028, 1.023, 1.018, 1.015, 1.014, 1.014, 1.014, 1.016, 1.019, 1.024, 1.029, 1.036, 1.045, 1.056, 1.071, 1.088, 1.107, 1.134, 1.167, 1.204, 1.234,
+ 1.261, 1.219, 1.179, 1.145, 1.116, 1.095, 1.076, 1.061, 1.047, 1.037, 1.031, 1.023, 1.018, 1.014, 1.011, 1.009, 1.009, 1.009, 1.011, 1.013, 1.018, 1.024, 1.031, 1.039, 1.049, 1.065, 1.083, 1.102, 1.128, 1.161, 1.196, 1.228,
+ 1.256, 1.213, 1.173, 1.139, 1.111, 1.091, 1.071, 1.056, 1.043, 1.033, 1.026, 1.019, 1.014, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.009, 1.013, 1.018, 1.026, 1.035, 1.046, 1.061, 1.078, 1.097, 1.123, 1.154, 1.191, 1.222,
+ 1.251, 1.208, 1.169, 1.137, 1.108, 1.088, 1.069, 1.053, 1.039, 1.029, 1.023, 1.015, 1.011, 1.006, 1.004, 1.003, 1.001, 1.002, 1.003, 1.006, 1.009, 1.015, 1.022, 1.032, 1.044, 1.057, 1.076, 1.094, 1.119, 1.149, 1.186, 1.218,
+ 1.249, 1.205, 1.167, 1.133, 1.107, 1.085, 1.067, 1.052, 1.038, 1.029, 1.021, 1.013, 1.008, 1.004, 1.003, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.013, 1.021, 1.031, 1.042, 1.055, 1.073, 1.093, 1.116, 1.147, 1.182, 1.218,
+ 1.249, 1.204, 1.165, 1.132, 1.106, 1.085, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.007, 1.003, 1.002, 1.001, 1.001, 1.001, 1.001, 1.004, 1.007, 1.013, 1.021, 1.029, 1.042, 1.055, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.249, 1.204, 1.165, 1.132, 1.107, 1.086, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.008, 1.004, 1.002, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.014, 1.021, 1.029, 1.042, 1.056, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.251, 1.205, 1.166, 1.133, 1.108, 1.087, 1.068, 1.052, 1.039, 1.031, 1.021, 1.014, 1.009, 1.006, 1.003, 1.002, 1.001, 1.001, 1.003, 1.006, 1.009, 1.014, 1.022, 1.031, 1.043, 1.056, 1.073, 1.093, 1.116, 1.145, 1.182, 1.218,
+ 1.252, 1.208, 1.168, 1.137, 1.111, 1.089, 1.071, 1.055, 1.043, 1.033, 1.023, 1.016, 1.012, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.008, 1.012, 1.017, 1.024, 1.034, 1.045, 1.059, 1.075, 1.095, 1.119, 1.149, 1.185, 1.218,
+ 1.256, 1.213, 1.173, 1.142, 1.115, 1.093, 1.075, 1.059, 1.047, 1.036, 1.027, 1.021, 1.016, 1.012, 1.011, 1.009, 1.008, 1.008, 1.009, 1.012, 1.016, 1.021, 1.028, 1.038, 1.049, 1.064, 1.081, 1.099, 1.126, 1.155, 1.192, 1.223,
+ 1.261, 1.221, 1.179, 1.148, 1.121, 1.099, 1.081, 1.065, 1.052, 1.042, 1.032, 1.026, 1.021, 1.017, 1.015, 1.014, 1.014, 1.013, 1.013, 1.016, 1.021, 1.026, 1.033, 1.043, 1.054, 1.068, 1.085, 1.106, 1.132, 1.161, 1.199, 1.228,
+ 1.267, 1.228, 1.188, 1.155, 1.128, 1.105, 1.086, 1.071, 1.059, 1.047, 1.038, 1.031, 1.027, 1.022, 1.021, 1.019, 1.019, 1.019, 1.019, 1.022, 1.026, 1.032, 1.038, 1.049, 1.061, 1.075, 1.092, 1.112, 1.138, 1.169, 1.207, 1.236,
+ 1.278, 1.241, 1.199, 1.164, 1.137, 1.114, 1.094, 1.078, 1.066, 1.055, 1.046, 1.038, 1.032, 1.029, 1.027, 1.027, 1.027, 1.027, 1.027, 1.029, 1.032, 1.038, 1.047, 1.056, 1.067, 1.083, 1.099, 1.121, 1.146, 1.178, 1.217, 1.244,
+ 1.291, 1.252, 1.211, 1.175, 1.147, 1.124, 1.103, 1.088, 1.075, 1.063, 1.054, 1.046, 1.041, 1.036, 1.035, 1.035, 1.035, 1.035, 1.036, 1.038, 1.041, 1.047, 1.055, 1.065, 1.075, 1.092, 1.111, 1.132, 1.157, 1.189, 1.231, 1.255,
+ 1.303, 1.265, 1.222, 1.187, 1.158, 1.133, 1.112, 1.097, 1.083, 1.072, 1.063, 1.054, 1.048, 1.043, 1.043, 1.043, 1.043, 1.043, 1.043, 1.046, 1.049, 1.055, 1.065, 1.074, 1.086, 1.102, 1.119, 1.144, 1.171, 1.203, 1.243, 1.268,
+ 1.317, 1.282, 1.236, 1.201, 1.171, 1.146, 1.125, 1.109, 1.095, 1.083, 1.072, 1.064, 1.058, 1.054, 1.052, 1.051, 1.051, 1.053, 1.054, 1.057, 1.061, 1.065, 1.074, 1.086, 1.099, 1.113, 1.133, 1.156, 1.183, 1.217, 1.259, 1.282,
+ 1.335, 1.301, 1.254, 1.218, 1.186, 1.159, 1.138, 1.121, 1.108, 1.095, 1.085, 1.076, 1.069, 1.066, 1.065, 1.063, 1.062, 1.063, 1.065, 1.068, 1.073, 1.078, 1.087, 1.098, 1.113, 1.126, 1.146, 1.171, 1.199, 1.235, 1.277, 1.299,
+ 1.356, 1.321, 1.274, 1.235, 1.202, 1.175, 1.153, 1.137, 1.121, 1.108, 1.097, 1.089, 1.084, 1.081, 1.077, 1.075, 1.075, 1.075, 1.077, 1.081, 1.086, 1.091, 1.099, 1.113, 1.126, 1.144, 1.162, 1.187, 1.218, 1.255, 1.297, 1.321,
+ 1.376, 1.344, 1.296, 1.257, 1.223, 1.194, 1.171, 1.153, 1.137, 1.124, 1.112, 1.104, 1.099, 1.095, 1.093, 1.091, 1.089, 1.091, 1.092, 1.095, 1.101, 1.108, 1.116, 1.128, 1.144, 1.161, 1.181, 1.206, 1.237, 1.275, 1.321, 1.347,
+ 1.403, 1.369, 1.319, 1.279, 1.244, 1.214, 1.191, 1.171, 1.154, 1.139, 1.129, 1.121, 1.115, 1.111, 1.109, 1.106, 1.105, 1.105, 1.108, 1.112, 1.117, 1.124, 1.135, 1.147, 1.162, 1.181, 1.203, 1.228, 1.262, 1.301, 1.347, 1.377,
+ 1.429, 1.398, 1.348, 1.306, 1.269, 1.237, 1.214, 1.191, 1.173, 1.158, 1.146, 1.138, 1.132, 1.128, 1.125, 1.123, 1.122, 1.123, 1.125, 1.129, 1.136, 1.142, 1.154, 1.166, 1.182, 1.203, 1.226, 1.253, 1.288, 1.329, 1.377, 1.406,
+ 1.465, 1.429, 1.377, 1.335, 1.295, 1.262, 1.236, 1.214, 1.194, 1.179, 1.167, 1.157, 1.151, 1.146, 1.144, 1.142, 1.142, 1.142, 1.144, 1.149, 1.154, 1.163, 1.174, 1.187, 1.205, 1.226, 1.251, 1.279, 1.315, 1.357, 1.406, 1.437,
+ 1.493, 1.465, 1.409, 1.364, 1.323, 1.289, 1.261, 1.235, 1.214, 1.194, 1.179, 1.171, 1.166, 1.163, 1.161, 1.161, 1.161, 1.161, 1.162, 1.164, 1.168, 1.175, 1.187, 1.205, 1.225, 1.251, 1.276, 1.306, 1.344, 1.387, 1.437, 1.455
+ ],
+ "sigma": 0.0007,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2500,
+ "ccm":
+ [
+ 1.95054, -0.57435, -0.37619,
+ -0.46945, 1.86661, -0.39716,
+ 0.07977, -1.14072, 2.06095
+ ]
+ },
+ {
+ "ct": 2800,
+ "ccm":
+ [
+ 1.94104, -0.60261, -0.33844,
+ -0.43162, 1.85422, -0.42261,
+ 0.03799, -0.95022, 1.91222
+ ]
+ },
+ {
+ "ct": 2900,
+ "ccm":
+ [
+ 1.91828, -0.59569, -0.32258,
+ -0.51902, 2.09091, -0.57189,
+ -0.03324, -0.73462, 1.76785
+ ]
+ },
+ {
+ "ct": 3620,
+ "ccm":
+ [
+ 1.97199, -0.66403, -0.30797,
+ -0.46411, 2.02612, -0.56201,
+ -0.07764, -0.61178, 1.68942
+ ]
+ },
+ {
+ "ct": 4560,
+ "ccm":
+ [
+ 2.15256, -0.84787, -0.30469,
+ -0.48422, 2.28962, -0.80541,
+ -0.15113, -0.53014, 1.68127
+ ]
+ },
+ {
+ "ct": 5600,
+ "ccm":
+ [
+ 2.04576, -0.74771, -0.29805,
+ -0.36332, 1.98993, -0.62662,
+ -0.09328, -0.46543, 1.55871
+ ]
+ },
+ {
+ "ct": 7400,
+ "ccm":
+ [
+ 2.37532, -0.83069, -0.54462,
+ -0.48279, 2.84309, -1.36031,
+ -0.21178, -0.66532, 1.87709
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.06,
+ "strength": 0.5,
+ "limit": 0.5
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "lut_rx":
+ [
+ -0.15, -0.12, -0.08, -0.03, 0.02, 0.06, 0.11, 0.14, 0.22,
+ -0.15, -0.12, -0.08, -0.04, 0.01, 0.05, 0.1, 0.14, 0.21,
+ -0.15, -0.12, -0.08, -0.04, 0.01, 0.06, 0.1, 0.14, 0.21,
+ -0.14, -0.11, -0.08, -0.04, 0.01, 0.05, 0.1, 0.13, 0.2,
+ -0.13, -0.11, -0.08, -0.03, 0.01, 0.05, 0.09, 0.13, 0.2,
+ -0.14, -0.11, -0.07, -0.03, 0.01, 0.06, 0.09, 0.14, 0.21,
+ -0.14, -0.11, -0.07, -0.03, 0.01, 0.05, 0.09, 0.13, 0.21,
+ -0.14, -0.11, -0.07, -0.03, 0.01, 0.05, 0.09, 0.13, 0.2,
+ -0.14, -0.1, -0.07, -0.03, 0.01, 0.06, 0.09, 0.13, 0.2
+ ],
+ "lut_ry":
+ [
+ -0.13, -0.13, -0.12, -0.13, -0.13, -0.14, -0.14, -0.13, -0.13,
+ -0.1, -0.1, -0.1, -0.1, -0.11, -0.11, -0.11, -0.11, -0.1,
+ -0.08, -0.08, -0.09, -0.09, -0.1, -0.09, -0.09, -0.1, -0.09,
+ -0.07, -0.06, -0.06, -0.07, -0.07, -0.07, -0.07, -0.07, -0.09,
+ -0.04, -0.03, -0.04, -0.04, -0.04, -0.04, -0.05, -0.04, -0.06,
+ -0.02, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.03,
+ -0.0, 0.01, 0.0, -0.0, -0.01, -0.01, -0.0, 0.0, -0.0,
+ 0.02, 0.02, 0.02, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02,
+ 0.04, 0.05, 0.04, 0.03, 0.03, 0.03, 0.03, 0.04, 0.04
+ ],
+ "lut_bx":
+ [
+ -0.35, -0.28, -0.22, -0.13, -0.05, 0.02, 0.1, 0.16, 0.28,
+ -0.32, -0.25, -0.19, -0.12, -0.05, 0.02, 0.09, 0.16, 0.28,
+ -0.32, -0.26, -0.19, -0.12, -0.05, 0.02, 0.09, 0.15, 0.28,
+ -0.32, -0.25, -0.19, -0.11, -0.05, 0.02, 0.09, 0.16, 0.28,
+ -0.3, -0.25, -0.19, -0.11, -0.04, 0.02, 0.09, 0.16, 0.28,
+ -0.3, -0.25, -0.18, -0.11, -0.05, 0.02, 0.09, 0.15, 0.28,
+ -0.3, -0.25, -0.19, -0.11, -0.05, 0.02, 0.09, 0.15, 0.27,
+ -0.3, -0.24, -0.17, -0.11, -0.04, 0.02, 0.09, 0.15, 0.27,
+ -0.27, -0.21, -0.15, -0.09, -0.03, 0.03, 0.09, 0.15, 0.27
+ ],
+ "lut_by":
+ [
+ -0.23, -0.22, -0.22, -0.21, -0.21, -0.21, -0.21, -0.21, -0.23,
+ -0.19, -0.17, -0.17, -0.17, -0.17, -0.17, -0.17, -0.17, -0.19,
+ -0.16, -0.13, -0.13, -0.13, -0.12, -0.13, -0.12, -0.13, -0.15,
+ -0.11, -0.08, -0.08, -0.08, -0.07, -0.08, -0.08, -0.08, -0.1,
+ -0.07, -0.04, -0.04, -0.04, -0.03, -0.03, -0.04, -0.04, -0.07,
+ -0.02, 0.01, 0.01, 0.01, 0.02, 0.02, 0.01, 0.01, -0.02,
+ 0.03, 0.07, 0.07, 0.07, 0.07, 0.07, 0.06, 0.06, 0.05,
+ 0.09, 0.1, 0.1, 0.1, 0.12, 0.12, 0.11, 0.11, 0.09,
+ 0.13, 0.13, 0.13, 0.14, 0.18, 0.2, 0.19, 0.18, 0.16
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx296_6mm.json b/src/ipa/rpi/pisp/data/imx296_6mm.json
new file mode 100644
index 00000000..abbcaa83
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx296_6mm.json
@@ -0,0 +1,1247 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 4724,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 860,
+ "reference_Y": 14551
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.751
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 226,
+ "slope": 0.01032
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2875.0, 0.4699, 0.3209,
+ 3610.0, 0.4089, 0.4265,
+ 4640.0, 0.3281, 0.5417,
+ 5912.0, 0.2992, 0.5771,
+ 7630.0, 0.2285, 0.6524
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01783,
+ "transverse_neg": 0.02154
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.084, 2.084, 2.085, 2.085, 2.085, 2.087, 2.088, 2.087, 2.086, 2.082, 2.082, 2.084, 2.086, 2.088, 2.088, 2.088, 2.087, 2.088, 2.088, 2.091, 2.092, 2.093, 2.093, 2.093, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.091, 2.088,
+ 2.086, 2.086, 2.087, 2.088, 2.089, 2.089, 2.091, 2.089, 2.087, 2.086, 2.087, 2.088, 2.091, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.093, 2.093, 2.094, 2.095, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.093,
+ 2.087, 2.087, 2.088, 2.091, 2.091, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.096,
+ 2.089, 2.088, 2.089, 2.091, 2.091, 2.092, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.092, 2.092, 2.092, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.096, 2.096, 2.096, 2.096, 2.097, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.091, 2.091, 2.089, 2.088, 2.088, 2.089, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.094, 2.095, 2.095, 2.096, 2.096, 2.097, 2.099, 2.098, 2.097, 2.097, 2.097,
+ 2.091, 2.091, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.099, 2.098, 2.097,
+ 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.095, 2.096, 2.096, 2.097, 2.097, 2.099, 2.099, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.094, 2.095, 2.096, 2.097, 2.098, 2.098, 2.098, 2.101, 2.101, 2.099, 2.098,
+ 2.092, 2.092, 2.093, 2.093, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.089, 2.089, 2.091, 2.092, 2.092, 2.092, 2.092, 2.094, 2.096, 2.096, 2.097, 2.098, 2.099, 2.099, 2.099, 2.099, 2.099, 2.097,
+ 2.093, 2.094, 2.094, 2.094, 2.095, 2.093, 2.092, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.094, 2.096, 2.096, 2.097, 2.098, 2.098, 2.101, 2.101, 2.099, 2.099, 2.099,
+ 2.094, 2.094, 2.094, 2.095, 2.095, 2.095, 2.091, 2.089, 2.091, 2.089, 2.089, 2.089, 2.091, 2.091, 2.089, 2.091, 2.091, 2.091, 2.092, 2.092, 2.093, 2.093, 2.095, 2.096, 2.097, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.099,
+ 2.095, 2.094, 2.094, 2.095, 2.096, 2.095, 2.091, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.093, 2.094, 2.096, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.101, 2.099,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.095, 2.092, 2.089, 2.089, 2.088, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.093, 2.093, 2.095, 2.096, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.101,
+ 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.092, 2.091, 2.089, 2.089, 2.089, 2.089, 2.091, 2.091, 2.091, 2.093, 2.093, 2.093, 2.092, 2.092, 2.094, 2.094, 2.094, 2.096, 2.096, 2.098, 2.099, 2.102, 2.103, 2.103, 2.102, 2.102,
+ 2.095, 2.095, 2.095, 2.096, 2.096, 2.094, 2.093, 2.091, 2.091, 2.089, 2.089, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.092, 2.093, 2.094, 2.094, 2.095, 2.096, 2.097, 2.098, 2.099, 2.103, 2.103, 2.103, 2.101, 2.101,
+ 2.095, 2.096, 2.096, 2.097, 2.096, 2.095, 2.093, 2.092, 2.091, 2.091, 2.091, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.096, 2.097, 2.099, 2.101, 2.103, 2.103, 2.103, 2.101, 2.099,
+ 2.096, 2.096, 2.097, 2.096, 2.097, 2.096, 2.094, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.099, 2.101, 2.103, 2.103, 2.102, 2.101, 2.101,
+ 2.096, 2.096, 2.097, 2.097, 2.097, 2.096, 2.094, 2.093, 2.092, 2.092, 2.091, 2.091, 2.092, 2.092, 2.092, 2.093, 2.093, 2.094, 2.093, 2.093, 2.094, 2.095, 2.096, 2.097, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101,
+ 2.097, 2.096, 2.097, 2.097, 2.097, 2.097, 2.095, 2.093, 2.093, 2.093, 2.093, 2.092, 2.091, 2.091, 2.092, 2.092, 2.093, 2.094, 2.093, 2.093, 2.093, 2.095, 2.096, 2.097, 2.099, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.101,
+ 2.098, 2.097, 2.096, 2.097, 2.097, 2.097, 2.095, 2.094, 2.094, 2.094, 2.092, 2.092, 2.092, 2.092, 2.092, 2.092, 2.094, 2.095, 2.095, 2.094, 2.093, 2.095, 2.096, 2.099, 2.101, 2.101, 2.102, 2.102, 2.102, 2.101, 2.101, 2.102,
+ 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.095, 2.094, 2.095, 2.093, 2.093, 2.092, 2.092, 2.092, 2.094, 2.094, 2.096, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.099, 2.099, 2.101, 2.102, 2.103, 2.102, 2.102, 2.101, 2.102,
+ 2.098, 2.097, 2.097, 2.098, 2.097, 2.096, 2.095, 2.095, 2.095, 2.094, 2.093, 2.093, 2.094, 2.094, 2.094, 2.095, 2.096, 2.096, 2.096, 2.095, 2.097, 2.097, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.104, 2.103, 2.102, 2.101,
+ 2.099, 2.098, 2.098, 2.098, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.094, 2.094, 2.094, 2.094, 2.096, 2.097, 2.097, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.101, 2.101, 2.104, 2.105, 2.105, 2.103, 2.102,
+ 2.101, 2.099, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.096, 2.096, 2.095, 2.095, 2.095, 2.095, 2.095, 2.096, 2.098, 2.098, 2.097, 2.097, 2.098, 2.099, 2.101, 2.101, 2.102, 2.103, 2.104, 2.105, 2.105, 2.104, 2.103,
+ 2.102, 2.102, 2.099, 2.098, 2.099, 2.099, 2.099, 2.098, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.104, 2.105, 2.106, 2.106, 2.106, 2.104, 2.104, 2.104,
+ 2.102, 2.101, 2.099, 2.099, 2.099, 2.101, 2.101, 2.101, 2.099, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.098, 2.099, 2.099, 2.099, 2.099, 2.101, 2.101, 2.102, 2.103, 2.105, 2.106, 2.106, 2.106, 2.106, 2.105, 2.104, 2.104,
+ 2.099, 2.099, 2.099, 2.098, 2.098, 2.099, 2.101, 2.101, 2.099, 2.098, 2.097, 2.098, 2.098, 2.099, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.105, 2.105, 2.106, 2.106, 2.104, 2.104, 2.103,
+ 2.096, 2.097, 2.097, 2.097, 2.097, 2.099, 2.099, 2.099, 2.099, 2.097, 2.097, 2.098, 2.098, 2.099, 2.098, 2.097, 2.097, 2.099, 2.101, 2.101, 2.101, 2.101, 2.101, 2.103, 2.105, 2.105, 2.105, 2.104, 2.104, 2.103, 2.101, 2.101,
+ 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.098, 2.099, 2.097, 2.096, 2.096, 2.097, 2.098, 2.098, 2.097, 2.097, 2.096, 2.098, 2.098, 2.099, 2.101, 2.101, 2.101, 2.102, 2.104, 2.105, 2.104, 2.104, 2.103, 2.101, 2.099, 2.098,
+ 2.096, 2.096, 2.096, 2.096, 2.097, 2.097, 2.097, 2.097, 2.097, 2.097, 2.096, 2.097, 2.098, 2.097, 2.097, 2.096, 2.096, 2.098, 2.098, 2.098, 2.099, 2.099, 2.101, 2.101, 2.103, 2.103, 2.104, 2.104, 2.102, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.096, 2.098, 2.098, 2.098, 2.098, 2.097, 2.098, 2.097, 2.097, 2.097, 2.097, 2.096, 2.096, 2.096, 2.097, 2.097, 2.098, 2.099, 2.099, 2.099, 2.101, 2.102, 2.103, 2.104, 2.104, 2.104, 2.101, 2.099, 2.098,
+ 2.097, 2.096, 2.095, 2.097, 2.099, 2.099, 2.099, 2.099, 2.099, 2.099, 2.098, 2.098, 2.097, 2.096, 2.096, 2.097, 2.097, 2.098, 2.097, 2.099, 2.101, 2.099, 2.099, 2.099, 2.102, 2.102, 2.104, 2.105, 2.105, 2.102, 2.099, 2.098
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.431, 3.437, 3.439, 3.439, 3.436, 3.438, 3.441, 3.441, 3.441, 3.441, 3.442, 3.443, 3.443, 3.444, 3.446, 3.448, 3.451, 3.451, 3.452, 3.451, 3.449, 3.449, 3.452, 3.453, 3.454, 3.454, 3.453, 3.456, 3.456, 3.456, 3.451, 3.448,
+ 3.445, 3.446, 3.445, 3.449, 3.453, 3.451, 3.451, 3.446, 3.447, 3.446, 3.447, 3.451, 3.453, 3.455, 3.454, 3.453, 3.453, 3.454, 3.455, 3.456, 3.457, 3.459, 3.461, 3.462, 3.463, 3.463, 3.465, 3.466, 3.467, 3.465, 3.459, 3.457,
+ 3.449, 3.449, 3.449, 3.454, 3.455, 3.454, 3.453, 3.451, 3.451, 3.448, 3.451, 3.451, 3.455, 3.456, 3.457, 3.456, 3.456, 3.458, 3.457, 3.459, 3.459, 3.461, 3.464, 3.467, 3.467, 3.466, 3.468, 3.469, 3.471, 3.468, 3.465, 3.462,
+ 3.451, 3.448, 3.451, 3.453, 3.457, 3.455, 3.454, 3.449, 3.449, 3.448, 3.449, 3.449, 3.455, 3.455, 3.456, 3.455, 3.454, 3.455, 3.455, 3.457, 3.458, 3.458, 3.461, 3.464, 3.466, 3.468, 3.469, 3.469, 3.469, 3.468, 3.465, 3.463,
+ 3.449, 3.449, 3.451, 3.453, 3.456, 3.455, 3.452, 3.449, 3.448, 3.447, 3.446, 3.448, 3.451, 3.452, 3.454, 3.455, 3.455, 3.454, 3.457, 3.458, 3.458, 3.459, 3.461, 3.464, 3.464, 3.466, 3.467, 3.469, 3.469, 3.467, 3.463, 3.459,
+ 3.449, 3.451, 3.452, 3.454, 3.455, 3.454, 3.452, 3.449, 3.447, 3.447, 3.446, 3.449, 3.449, 3.451, 3.452, 3.452, 3.452, 3.452, 3.454, 3.455, 3.457, 3.459, 3.461, 3.464, 3.464, 3.466, 3.465, 3.468, 3.468, 3.469, 3.465, 3.462,
+ 3.451, 3.451, 3.452, 3.453, 3.453, 3.453, 3.451, 3.449, 3.449, 3.447, 3.446, 3.447, 3.448, 3.451, 3.451, 3.451, 3.453, 3.452, 3.452, 3.452, 3.457, 3.458, 3.461, 3.463, 3.464, 3.465, 3.464, 3.466, 3.468, 3.469, 3.466, 3.463,
+ 3.451, 3.451, 3.451, 3.454, 3.453, 3.453, 3.451, 3.448, 3.448, 3.444, 3.444, 3.444, 3.448, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.452, 3.454, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.467, 3.468, 3.469, 3.466, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.454, 3.453, 3.449, 3.448, 3.447, 3.447, 3.444, 3.446, 3.446, 3.446, 3.446, 3.447, 3.449, 3.449, 3.451, 3.452, 3.455, 3.457, 3.461, 3.462, 3.464, 3.466, 3.466, 3.468, 3.469, 3.468, 3.465, 3.462,
+ 3.453, 3.452, 3.454, 3.456, 3.455, 3.453, 3.449, 3.447, 3.446, 3.446, 3.445, 3.448, 3.447, 3.446, 3.445, 3.446, 3.448, 3.448, 3.449, 3.453, 3.455, 3.457, 3.459, 3.461, 3.464, 3.466, 3.467, 3.468, 3.468, 3.467, 3.465, 3.463,
+ 3.453, 3.453, 3.454, 3.456, 3.456, 3.451, 3.448, 3.447, 3.447, 3.446, 3.445, 3.446, 3.446, 3.446, 3.446, 3.446, 3.448, 3.448, 3.449, 3.452, 3.454, 3.456, 3.459, 3.459, 3.461, 3.465, 3.466, 3.468, 3.468, 3.468, 3.467, 3.465,
+ 3.451, 3.451, 3.452, 3.455, 3.456, 3.452, 3.448, 3.446, 3.446, 3.444, 3.446, 3.445, 3.446, 3.446, 3.447, 3.448, 3.449, 3.449, 3.449, 3.452, 3.453, 3.454, 3.458, 3.458, 3.461, 3.461, 3.464, 3.469, 3.469, 3.468, 3.466, 3.466,
+ 3.452, 3.452, 3.453, 3.454, 3.454, 3.453, 3.447, 3.446, 3.444, 3.444, 3.444, 3.444, 3.445, 3.446, 3.448, 3.451, 3.452, 3.453, 3.451, 3.453, 3.453, 3.455, 3.458, 3.459, 3.461, 3.462, 3.463, 3.468, 3.471, 3.469, 3.467, 3.467,
+ 3.454, 3.455, 3.457, 3.458, 3.458, 3.455, 3.449, 3.446, 3.445, 3.445, 3.445, 3.445, 3.447, 3.447, 3.448, 3.451, 3.452, 3.453, 3.452, 3.452, 3.452, 3.454, 3.457, 3.459, 3.459, 3.462, 3.464, 3.468, 3.469, 3.467, 3.465, 3.465,
+ 3.457, 3.455, 3.455, 3.459, 3.458, 3.454, 3.451, 3.448, 3.445, 3.445, 3.445, 3.446, 3.448, 3.449, 3.451, 3.452, 3.451, 3.453, 3.452, 3.452, 3.453, 3.457, 3.457, 3.461, 3.461, 3.463, 3.465, 3.468, 3.471, 3.468, 3.465, 3.463,
+ 3.458, 3.456, 3.456, 3.459, 3.457, 3.454, 3.452, 3.449, 3.447, 3.445, 3.446, 3.447, 3.447, 3.448, 3.449, 3.448, 3.449, 3.451, 3.451, 3.451, 3.451, 3.455, 3.456, 3.458, 3.462, 3.463, 3.464, 3.465, 3.467, 3.466, 3.464, 3.462,
+ 3.457, 3.456, 3.455, 3.457, 3.457, 3.454, 3.449, 3.447, 3.445, 3.445, 3.446, 3.446, 3.448, 3.446, 3.448, 3.449, 3.449, 3.451, 3.451, 3.451, 3.453, 3.455, 3.457, 3.459, 3.462, 3.464, 3.464, 3.465, 3.467, 3.464, 3.464, 3.463,
+ 3.458, 3.457, 3.455, 3.456, 3.456, 3.456, 3.453, 3.449, 3.447, 3.448, 3.447, 3.447, 3.447, 3.447, 3.447, 3.448, 3.449, 3.451, 3.451, 3.452, 3.453, 3.455, 3.458, 3.459, 3.459, 3.463, 3.464, 3.463, 3.464, 3.463, 3.464, 3.464,
+ 3.457, 3.456, 3.456, 3.456, 3.456, 3.456, 3.455, 3.449, 3.447, 3.448, 3.451, 3.449, 3.449, 3.449, 3.448, 3.449, 3.449, 3.451, 3.451, 3.452, 3.453, 3.456, 3.458, 3.459, 3.461, 3.462, 3.464, 3.464, 3.465, 3.464, 3.464, 3.463,
+ 3.457, 3.456, 3.455, 3.455, 3.455, 3.455, 3.453, 3.451, 3.449, 3.448, 3.448, 3.449, 3.449, 3.449, 3.448, 3.449, 3.451, 3.452, 3.452, 3.453, 3.454, 3.457, 3.458, 3.459, 3.462, 3.464, 3.465, 3.464, 3.465, 3.464, 3.463, 3.463,
+ 3.456, 3.456, 3.454, 3.453, 3.454, 3.453, 3.452, 3.451, 3.449, 3.448, 3.448, 3.449, 3.451, 3.451, 3.448, 3.449, 3.451, 3.454, 3.454, 3.454, 3.455, 3.457, 3.458, 3.461, 3.461, 3.462, 3.464, 3.464, 3.466, 3.465, 3.464, 3.464,
+ 3.459, 3.457, 3.456, 3.455, 3.454, 3.453, 3.453, 3.452, 3.452, 3.451, 3.449, 3.449, 3.449, 3.448, 3.447, 3.449, 3.451, 3.454, 3.455, 3.455, 3.456, 3.458, 3.459, 3.461, 3.461, 3.462, 3.463, 3.466, 3.469, 3.465, 3.465, 3.464,
+ 3.463, 3.461, 3.458, 3.458, 3.457, 3.456, 3.456, 3.454, 3.454, 3.452, 3.452, 3.451, 3.451, 3.449, 3.448, 3.448, 3.452, 3.454, 3.456, 3.455, 3.457, 3.458, 3.461, 3.464, 3.462, 3.461, 3.463, 3.466, 3.469, 3.469, 3.467, 3.467,
+ 3.466, 3.462, 3.461, 3.461, 3.459, 3.457, 3.457, 3.457, 3.456, 3.454, 3.455, 3.455, 3.455, 3.451, 3.452, 3.453, 3.454, 3.455, 3.456, 3.456, 3.459, 3.462, 3.463, 3.466, 3.466, 3.467, 3.466, 3.469, 3.471, 3.469, 3.468, 3.466,
+ 3.467, 3.463, 3.463, 3.459, 3.461, 3.459, 3.461, 3.459, 3.458, 3.456, 3.457, 3.456, 3.457, 3.455, 3.456, 3.455, 3.456, 3.457, 3.459, 3.461, 3.461, 3.464, 3.465, 3.468, 3.469, 3.469, 3.469, 3.469, 3.471, 3.468, 3.467, 3.468,
+ 3.467, 3.464, 3.459, 3.459, 3.462, 3.462, 3.462, 3.461, 3.461, 3.462, 3.461, 3.459, 3.461, 3.459, 3.458, 3.457, 3.459, 3.461, 3.462, 3.463, 3.464, 3.466, 3.468, 3.469, 3.471, 3.469, 3.471, 3.472, 3.471, 3.467, 3.466, 3.464,
+ 3.464, 3.462, 3.458, 3.457, 3.458, 3.461, 3.461, 3.461, 3.461, 3.462, 3.462, 3.461, 3.461, 3.459, 3.459, 3.459, 3.461, 3.461, 3.464, 3.465, 3.465, 3.468, 3.468, 3.469, 3.471, 3.469, 3.469, 3.469, 3.469, 3.464, 3.462, 3.459,
+ 3.457, 3.458, 3.455, 3.456, 3.456, 3.457, 3.459, 3.459, 3.459, 3.459, 3.458, 3.456, 3.458, 3.457, 3.458, 3.458, 3.458, 3.459, 3.461, 3.463, 3.465, 3.466, 3.468, 3.469, 3.471, 3.468, 3.466, 3.466, 3.465, 3.461, 3.459, 3.457,
+ 3.456, 3.455, 3.454, 3.454, 3.455, 3.456, 3.458, 3.459, 3.459, 3.456, 3.456, 3.456, 3.455, 3.456, 3.455, 3.455, 3.455, 3.454, 3.457, 3.461, 3.462, 3.464, 3.465, 3.467, 3.467, 3.466, 3.464, 3.464, 3.463, 3.461, 3.457, 3.456,
+ 3.456, 3.454, 3.453, 3.454, 3.454, 3.455, 3.458, 3.459, 3.459, 3.456, 3.455, 3.455, 3.455, 3.451, 3.453, 3.454, 3.454, 3.455, 3.455, 3.458, 3.461, 3.462, 3.461, 3.463, 3.465, 3.464, 3.463, 3.463, 3.462, 3.459, 3.456, 3.451,
+ 3.455, 3.452, 3.452, 3.452, 3.455, 3.457, 3.459, 3.459, 3.459, 3.458, 3.456, 3.456, 3.455, 3.453, 3.453, 3.455, 3.457, 3.457, 3.457, 3.461, 3.461, 3.461, 3.459, 3.462, 3.464, 3.464, 3.464, 3.463, 3.463, 3.459, 3.454, 3.451,
+ 3.452, 3.452, 3.452, 3.453, 3.457, 3.458, 3.458, 3.459, 3.459, 3.458, 3.457, 3.457, 3.455, 3.455, 3.458, 3.459, 3.458, 3.459, 3.459, 3.461, 3.461, 3.461, 3.459, 3.461, 3.463, 3.464, 3.466, 3.463, 3.461, 3.458, 3.453, 3.449
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.403, 3.399, 3.395, 3.391, 3.392, 3.394, 3.401, 3.403, 3.404, 3.404, 3.403, 3.399, 3.398, 3.396, 3.395, 3.396, 3.399, 3.403, 3.404, 3.401, 3.399, 3.398, 3.397, 3.401, 3.401, 3.401, 3.396, 3.394, 3.397, 3.396, 3.388, 3.364,
+ 3.403, 3.399, 3.393, 3.389, 3.391, 3.395, 3.401, 3.404, 3.406, 3.404, 3.403, 3.399, 3.399, 3.397, 3.397, 3.397, 3.401, 3.404, 3.404, 3.402, 3.398, 3.396, 3.397, 3.401, 3.401, 3.401, 3.395, 3.394, 3.396, 3.393, 3.387, 3.364,
+ 3.399, 3.398, 3.391, 3.385, 3.386, 3.395, 3.402, 3.405, 3.405, 3.404, 3.402, 3.399, 3.399, 3.398, 3.398, 3.398, 3.401, 3.404, 3.405, 3.403, 3.399, 3.396, 3.396, 3.398, 3.401, 3.401, 3.398, 3.394, 3.392, 3.389, 3.386, 3.364,
+ 3.398, 3.393, 3.386, 3.382, 3.385, 3.392, 3.399, 3.403, 3.405, 3.404, 3.402, 3.398, 3.398, 3.397, 3.397, 3.398, 3.401, 3.404, 3.405, 3.403, 3.398, 3.394, 3.394, 3.398, 3.401, 3.401, 3.396, 3.392, 3.391, 3.388, 3.383, 3.362,
+ 3.396, 3.391, 3.384, 3.381, 3.384, 3.389, 3.398, 3.402, 3.402, 3.401, 3.399, 3.395, 3.395, 3.395, 3.397, 3.397, 3.401, 3.402, 3.404, 3.403, 3.399, 3.394, 3.393, 3.395, 3.399, 3.399, 3.397, 3.391, 3.388, 3.384, 3.381, 3.363,
+ 3.391, 3.386, 3.382, 3.381, 3.385, 3.389, 3.396, 3.398, 3.399, 3.399, 3.398, 3.395, 3.394, 3.394, 3.395, 3.397, 3.399, 3.401, 3.403, 3.401, 3.398, 3.394, 3.393, 3.393, 3.394, 3.396, 3.395, 3.392, 3.387, 3.382, 3.378, 3.361,
+ 3.389, 3.386, 3.379, 3.379, 3.383, 3.388, 3.394, 3.397, 3.397, 3.397, 3.395, 3.393, 3.393, 3.393, 3.395, 3.395, 3.397, 3.398, 3.401, 3.399, 3.397, 3.395, 3.394, 3.391, 3.393, 3.393, 3.393, 3.389, 3.387, 3.381, 3.374, 3.357,
+ 3.386, 3.383, 3.376, 3.375, 3.381, 3.386, 3.394, 3.396, 3.396, 3.394, 3.392, 3.392, 3.394, 3.394, 3.395, 3.394, 3.396, 3.398, 3.399, 3.397, 3.397, 3.394, 3.393, 3.391, 3.389, 3.391, 3.392, 3.388, 3.386, 3.379, 3.372, 3.355,
+ 3.386, 3.379, 3.373, 3.373, 3.378, 3.384, 3.391, 3.396, 3.395, 3.393, 3.389, 3.391, 3.391, 3.393, 3.394, 3.393, 3.394, 3.396, 3.397, 3.396, 3.393, 3.394, 3.393, 3.392, 3.389, 3.389, 3.389, 3.389, 3.386, 3.378, 3.371, 3.351,
+ 3.379, 3.375, 3.371, 3.371, 3.376, 3.381, 3.388, 3.393, 3.394, 3.391, 3.386, 3.386, 3.388, 3.393, 3.392, 3.392, 3.393, 3.395, 3.394, 3.392, 3.389, 3.391, 3.391, 3.392, 3.389, 3.388, 3.389, 3.389, 3.383, 3.377, 3.369, 3.351,
+ 3.373, 3.371, 3.367, 3.368, 3.373, 3.381, 3.387, 3.389, 3.391, 3.389, 3.385, 3.386, 3.383, 3.389, 3.389, 3.392, 3.392, 3.394, 3.393, 3.389, 3.387, 3.387, 3.388, 3.389, 3.389, 3.388, 3.386, 3.386, 3.382, 3.374, 3.367, 3.345,
+ 3.371, 3.369, 3.365, 3.366, 3.373, 3.379, 3.386, 3.389, 3.391, 3.389, 3.385, 3.384, 3.382, 3.386, 3.387, 3.389, 3.391, 3.392, 3.391, 3.387, 3.385, 3.385, 3.386, 3.388, 3.388, 3.388, 3.386, 3.385, 3.381, 3.373, 3.367, 3.345,
+ 3.367, 3.365, 3.365, 3.366, 3.374, 3.379, 3.384, 3.388, 3.389, 3.387, 3.384, 3.383, 3.383, 3.385, 3.385, 3.386, 3.388, 3.389, 3.388, 3.386, 3.383, 3.382, 3.384, 3.386, 3.387, 3.386, 3.381, 3.381, 3.379, 3.372, 3.364, 3.344,
+ 3.365, 3.363, 3.362, 3.367, 3.375, 3.379, 3.383, 3.384, 3.386, 3.384, 3.381, 3.379, 3.379, 3.383, 3.383, 3.384, 3.385, 3.387, 3.387, 3.385, 3.381, 3.381, 3.382, 3.384, 3.384, 3.385, 3.382, 3.379, 3.374, 3.369, 3.359, 3.343,
+ 3.359, 3.358, 3.361, 3.364, 3.373, 3.381, 3.384, 3.384, 3.385, 3.384, 3.381, 3.377, 3.379, 3.379, 3.382, 3.383, 3.384, 3.386, 3.386, 3.385, 3.381, 3.379, 3.381, 3.382, 3.382, 3.383, 3.379, 3.377, 3.371, 3.364, 3.357, 3.339,
+ 3.357, 3.356, 3.356, 3.362, 3.372, 3.379, 3.384, 3.384, 3.383, 3.381, 3.378, 3.376, 3.377, 3.379, 3.381, 3.382, 3.383, 3.385, 3.385, 3.383, 3.379, 3.379, 3.379, 3.381, 3.381, 3.382, 3.379, 3.372, 3.367, 3.362, 3.354, 3.334,
+ 3.357, 3.354, 3.357, 3.361, 3.372, 3.381, 3.385, 3.385, 3.384, 3.379, 3.376, 3.376, 3.376, 3.379, 3.381, 3.383, 3.383, 3.384, 3.383, 3.379, 3.378, 3.381, 3.379, 3.379, 3.379, 3.379, 3.378, 3.371, 3.363, 3.358, 3.354, 3.332,
+ 3.354, 3.351, 3.354, 3.359, 3.371, 3.379, 3.382, 3.384, 3.381, 3.378, 3.375, 3.374, 3.376, 3.378, 3.381, 3.383, 3.384, 3.382, 3.377, 3.377, 3.376, 3.377, 3.378, 3.378, 3.379, 3.379, 3.376, 3.367, 3.361, 3.357, 3.352, 3.333,
+ 3.352, 3.349, 3.351, 3.357, 3.372, 3.381, 3.383, 3.383, 3.381, 3.376, 3.372, 3.373, 3.375, 3.377, 3.382, 3.384, 3.384, 3.379, 3.376, 3.374, 3.374, 3.375, 3.375, 3.376, 3.377, 3.376, 3.373, 3.366, 3.361, 3.356, 3.347, 3.332,
+ 3.347, 3.346, 3.346, 3.355, 3.371, 3.377, 3.382, 3.381, 3.379, 3.372, 3.371, 3.371, 3.372, 3.375, 3.379, 3.383, 3.384, 3.379, 3.374, 3.373, 3.371, 3.373, 3.374, 3.375, 3.374, 3.374, 3.371, 3.365, 3.359, 3.352, 3.343, 3.331,
+ 3.345, 3.344, 3.345, 3.353, 3.367, 3.374, 3.382, 3.382, 3.376, 3.371, 3.369, 3.368, 3.369, 3.373, 3.377, 3.381, 3.379, 3.376, 3.373, 3.369, 3.368, 3.371, 3.372, 3.373, 3.371, 3.371, 3.369, 3.363, 3.357, 3.349, 3.341, 3.326,
+ 3.343, 3.341, 3.344, 3.351, 3.362, 3.371, 3.376, 3.376, 3.372, 3.369, 3.367, 3.366, 3.367, 3.369, 3.376, 3.378, 3.378, 3.375, 3.371, 3.367, 3.367, 3.368, 3.369, 3.369, 3.369, 3.368, 3.365, 3.361, 3.354, 3.347, 3.338, 3.321,
+ 3.341, 3.339, 3.342, 3.349, 3.359, 3.367, 3.371, 3.372, 3.371, 3.368, 3.366, 3.363, 3.365, 3.368, 3.371, 3.374, 3.376, 3.374, 3.368, 3.365, 3.365, 3.366, 3.368, 3.367, 3.367, 3.363, 3.361, 3.356, 3.352, 3.346, 3.336, 3.317,
+ 3.338, 3.336, 3.338, 3.346, 3.359, 3.364, 3.368, 3.369, 3.367, 3.366, 3.363, 3.362, 3.364, 3.364, 3.367, 3.371, 3.372, 3.369, 3.365, 3.362, 3.362, 3.365, 3.367, 3.367, 3.366, 3.362, 3.357, 3.353, 3.349, 3.342, 3.335, 3.317,
+ 3.334, 3.334, 3.336, 3.346, 3.354, 3.361, 3.365, 3.365, 3.365, 3.362, 3.361, 3.361, 3.362, 3.362, 3.364, 3.366, 3.368, 3.366, 3.361, 3.357, 3.357, 3.359, 3.363, 3.365, 3.363, 3.361, 3.355, 3.351, 3.346, 3.339, 3.336, 3.317,
+ 3.332, 3.332, 3.334, 3.344, 3.354, 3.359, 3.363, 3.365, 3.363, 3.361, 3.359, 3.359, 3.363, 3.363, 3.365, 3.365, 3.367, 3.366, 3.358, 3.356, 3.356, 3.358, 3.362, 3.364, 3.363, 3.359, 3.353, 3.348, 3.345, 3.339, 3.336, 3.315,
+ 3.332, 3.328, 3.331, 3.343, 3.351, 3.357, 3.358, 3.362, 3.361, 3.359, 3.357, 3.357, 3.361, 3.362, 3.364, 3.363, 3.363, 3.359, 3.356, 3.354, 3.354, 3.355, 3.358, 3.359, 3.361, 3.359, 3.351, 3.346, 3.344, 3.339, 3.336, 3.313,
+ 3.324, 3.324, 3.327, 3.334, 3.345, 3.351, 3.354, 3.356, 3.356, 3.354, 3.353, 3.354, 3.357, 3.358, 3.361, 3.358, 3.359, 3.355, 3.352, 3.348, 3.347, 3.351, 3.354, 3.358, 3.359, 3.355, 3.346, 3.343, 3.341, 3.336, 3.331, 3.312,
+ 3.318, 3.319, 3.321, 3.328, 3.337, 3.339, 3.345, 3.348, 3.346, 3.345, 3.347, 3.348, 3.351, 3.354, 3.356, 3.353, 3.354, 3.344, 3.343, 3.343, 3.343, 3.344, 3.347, 3.349, 3.353, 3.346, 3.341, 3.339, 3.331, 3.329, 3.325, 3.311,
+ 3.309, 3.313, 3.317, 3.325, 3.329, 3.332, 3.338, 3.339, 3.341, 3.339, 3.339, 3.342, 3.346, 3.346, 3.351, 3.351, 3.343, 3.338, 3.338, 3.339, 3.339, 3.339, 3.341, 3.341, 3.346, 3.343, 3.339, 3.332, 3.327, 3.326, 3.322, 3.309,
+ 3.305, 3.309, 3.317, 3.325, 3.328, 3.331, 3.334, 3.336, 3.337, 3.336, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.341, 3.336, 3.335, 3.337, 3.339, 3.341, 3.339, 3.339, 3.342, 3.341, 3.337, 3.329, 3.326, 3.325, 3.321, 3.314,
+ 3.302, 3.306, 3.319, 3.325, 3.329, 3.331, 3.334, 3.335, 3.337, 3.337, 3.339, 3.341, 3.344, 3.346, 3.348, 3.347, 3.342, 3.336, 3.336, 3.338, 3.339, 3.341, 3.341, 3.341, 3.339, 3.338, 3.336, 3.331, 3.327, 3.324, 3.321, 3.314
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.726, 1.725, 1.723, 1.721, 1.723, 1.724, 1.724, 1.726, 1.727, 1.728, 1.729, 1.728, 1.725, 1.724, 1.726, 1.726, 1.727, 1.729, 1.727, 1.727, 1.724, 1.725, 1.724, 1.726, 1.725, 1.725, 1.724, 1.724, 1.722, 1.721, 1.719, 1.714,
+ 1.726, 1.724, 1.722, 1.721, 1.722, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.727, 1.725, 1.724, 1.724, 1.725, 1.726, 1.725, 1.724, 1.723, 1.722, 1.721, 1.719, 1.714,
+ 1.724, 1.722, 1.719, 1.719, 1.721, 1.723, 1.726, 1.726, 1.727, 1.727, 1.727, 1.725, 1.726, 1.725, 1.725, 1.725, 1.726, 1.727, 1.728, 1.728, 1.725, 1.724, 1.724, 1.724, 1.726, 1.725, 1.724, 1.722, 1.722, 1.721, 1.719, 1.712,
+ 1.723, 1.721, 1.719, 1.719, 1.719, 1.723, 1.725, 1.726, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.726, 1.726, 1.728, 1.729, 1.728, 1.725, 1.723, 1.723, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.718, 1.711,
+ 1.722, 1.719, 1.719, 1.718, 1.719, 1.722, 1.725, 1.726, 1.726, 1.727, 1.727, 1.726, 1.725, 1.726, 1.726, 1.726, 1.727, 1.727, 1.728, 1.727, 1.726, 1.725, 1.724, 1.725, 1.726, 1.725, 1.724, 1.722, 1.721, 1.719, 1.715, 1.711,
+ 1.721, 1.717, 1.717, 1.716, 1.719, 1.722, 1.724, 1.726, 1.726, 1.727, 1.726, 1.726, 1.726, 1.726, 1.726, 1.727, 1.727, 1.727, 1.727, 1.727, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.722, 1.721, 1.718, 1.715, 1.707,
+ 1.718, 1.717, 1.716, 1.716, 1.718, 1.721, 1.725, 1.726, 1.726, 1.726, 1.725, 1.725, 1.725, 1.725, 1.726, 1.727, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.718, 1.715, 1.709,
+ 1.718, 1.716, 1.716, 1.715, 1.717, 1.721, 1.724, 1.725, 1.726, 1.725, 1.725, 1.724, 1.724, 1.725, 1.726, 1.726, 1.727, 1.727, 1.727, 1.726, 1.726, 1.726, 1.725, 1.723, 1.723, 1.723, 1.722, 1.722, 1.719, 1.718, 1.714, 1.709,
+ 1.718, 1.716, 1.715, 1.715, 1.717, 1.721, 1.723, 1.725, 1.726, 1.725, 1.724, 1.723, 1.724, 1.725, 1.725, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.726, 1.725, 1.724, 1.724, 1.723, 1.722, 1.722, 1.721, 1.717, 1.714, 1.707,
+ 1.717, 1.716, 1.714, 1.714, 1.716, 1.721, 1.723, 1.725, 1.725, 1.725, 1.723, 1.723, 1.724, 1.726, 1.726, 1.726, 1.726, 1.725, 1.726, 1.725, 1.725, 1.725, 1.725, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.706,
+ 1.715, 1.714, 1.714, 1.714, 1.716, 1.719, 1.722, 1.724, 1.725, 1.725, 1.723, 1.723, 1.724, 1.725, 1.725, 1.725, 1.726, 1.725, 1.725, 1.725, 1.724, 1.724, 1.724, 1.725, 1.724, 1.723, 1.722, 1.721, 1.718, 1.716, 1.713, 1.705,
+ 1.714, 1.714, 1.713, 1.714, 1.717, 1.719, 1.722, 1.724, 1.724, 1.724, 1.723, 1.722, 1.723, 1.724, 1.724, 1.724, 1.726, 1.725, 1.726, 1.725, 1.723, 1.723, 1.724, 1.724, 1.724, 1.723, 1.721, 1.719, 1.717, 1.715, 1.713, 1.706,
+ 1.712, 1.712, 1.712, 1.713, 1.718, 1.719, 1.721, 1.723, 1.724, 1.724, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.725, 1.725, 1.725, 1.725, 1.723, 1.722, 1.724, 1.723, 1.723, 1.722, 1.721, 1.719, 1.717, 1.714, 1.711, 1.706,
+ 1.712, 1.711, 1.711, 1.713, 1.717, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.722, 1.723, 1.724, 1.724, 1.724, 1.724, 1.725, 1.725, 1.724, 1.723, 1.722, 1.722, 1.722, 1.723, 1.722, 1.721, 1.718, 1.716, 1.714, 1.711, 1.706,
+ 1.711, 1.709, 1.711, 1.713, 1.716, 1.719, 1.722, 1.724, 1.724, 1.723, 1.722, 1.721, 1.722, 1.724, 1.724, 1.724, 1.723, 1.724, 1.724, 1.724, 1.722, 1.722, 1.722, 1.722, 1.722, 1.721, 1.719, 1.718, 1.714, 1.712, 1.709, 1.702,
+ 1.709, 1.709, 1.709, 1.712, 1.717, 1.719, 1.721, 1.723, 1.723, 1.723, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.724, 1.724, 1.724, 1.724, 1.723, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.716, 1.713, 1.711, 1.709, 1.701,
+ 1.708, 1.707, 1.709, 1.712, 1.716, 1.719, 1.722, 1.723, 1.723, 1.723, 1.721, 1.721, 1.721, 1.722, 1.723, 1.723, 1.723, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.719, 1.714, 1.712, 1.709, 1.708, 1.702,
+ 1.707, 1.707, 1.708, 1.711, 1.716, 1.721, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.722, 1.722, 1.723, 1.723, 1.723, 1.722, 1.722, 1.722, 1.722, 1.721, 1.721, 1.721, 1.721, 1.721, 1.717, 1.714, 1.711, 1.709, 1.707, 1.702,
+ 1.706, 1.706, 1.707, 1.711, 1.714, 1.719, 1.722, 1.722, 1.722, 1.721, 1.719, 1.721, 1.721, 1.722, 1.723, 1.724, 1.723, 1.722, 1.722, 1.721, 1.719, 1.719, 1.721, 1.721, 1.719, 1.719, 1.716, 1.713, 1.711, 1.709, 1.706, 1.701,
+ 1.705, 1.704, 1.706, 1.709, 1.713, 1.718, 1.721, 1.722, 1.721, 1.719, 1.718, 1.719, 1.721, 1.722, 1.723, 1.724, 1.724, 1.721, 1.721, 1.721, 1.719, 1.719, 1.719, 1.719, 1.719, 1.717, 1.715, 1.713, 1.711, 1.707, 1.704, 1.699,
+ 1.703, 1.703, 1.704, 1.709, 1.712, 1.717, 1.719, 1.721, 1.719, 1.718, 1.717, 1.718, 1.719, 1.721, 1.722, 1.723, 1.723, 1.722, 1.719, 1.719, 1.718, 1.719, 1.719, 1.718, 1.717, 1.716, 1.714, 1.712, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.703, 1.704, 1.708, 1.712, 1.715, 1.718, 1.719, 1.719, 1.717, 1.717, 1.717, 1.717, 1.718, 1.721, 1.722, 1.722, 1.721, 1.719, 1.718, 1.717, 1.718, 1.718, 1.717, 1.716, 1.714, 1.714, 1.711, 1.709, 1.706, 1.703, 1.697,
+ 1.702, 1.702, 1.703, 1.706, 1.709, 1.715, 1.717, 1.718, 1.717, 1.717, 1.716, 1.716, 1.717, 1.717, 1.719, 1.721, 1.721, 1.721, 1.719, 1.717, 1.716, 1.717, 1.717, 1.716, 1.714, 1.713, 1.712, 1.711, 1.708, 1.706, 1.702, 1.696,
+ 1.701, 1.701, 1.702, 1.706, 1.709, 1.714, 1.716, 1.717, 1.716, 1.716, 1.716, 1.715, 1.716, 1.716, 1.717, 1.718, 1.719, 1.719, 1.716, 1.715, 1.715, 1.715, 1.715, 1.715, 1.714, 1.713, 1.711, 1.709, 1.708, 1.704, 1.701, 1.695,
+ 1.699, 1.699, 1.702, 1.706, 1.708, 1.712, 1.714, 1.715, 1.715, 1.715, 1.714, 1.715, 1.714, 1.715, 1.716, 1.716, 1.716, 1.716, 1.714, 1.713, 1.713, 1.714, 1.715, 1.714, 1.714, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.695,
+ 1.698, 1.699, 1.701, 1.705, 1.708, 1.711, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.714, 1.715, 1.715, 1.716, 1.716, 1.715, 1.713, 1.713, 1.713, 1.714, 1.714, 1.714, 1.713, 1.712, 1.709, 1.707, 1.706, 1.703, 1.701, 1.696,
+ 1.698, 1.699, 1.701, 1.705, 1.707, 1.711, 1.712, 1.713, 1.713, 1.713, 1.713, 1.714, 1.714, 1.715, 1.715, 1.716, 1.715, 1.714, 1.713, 1.712, 1.712, 1.712, 1.713, 1.713, 1.713, 1.711, 1.709, 1.707, 1.705, 1.703, 1.701, 1.696,
+ 1.698, 1.697, 1.699, 1.702, 1.705, 1.707, 1.711, 1.711, 1.711, 1.711, 1.711, 1.712, 1.712, 1.713, 1.714, 1.714, 1.713, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.711, 1.708, 1.706, 1.704, 1.703, 1.699, 1.696,
+ 1.694, 1.695, 1.697, 1.699, 1.702, 1.705, 1.706, 1.707, 1.707, 1.708, 1.708, 1.708, 1.709, 1.711, 1.711, 1.711, 1.708, 1.708, 1.708, 1.707, 1.707, 1.707, 1.708, 1.708, 1.709, 1.708, 1.706, 1.703, 1.702, 1.701, 1.698, 1.696,
+ 1.692, 1.692, 1.695, 1.698, 1.699, 1.701, 1.704, 1.704, 1.704, 1.704, 1.705, 1.706, 1.707, 1.709, 1.709, 1.707, 1.706, 1.704, 1.704, 1.705, 1.705, 1.706, 1.706, 1.706, 1.706, 1.706, 1.703, 1.702, 1.701, 1.699, 1.696, 1.694,
+ 1.691, 1.692, 1.695, 1.697, 1.699, 1.699, 1.702, 1.703, 1.703, 1.702, 1.703, 1.704, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.704, 1.705, 1.705, 1.705, 1.705, 1.704, 1.703, 1.701, 1.699, 1.698, 1.696, 1.695,
+ 1.689, 1.691, 1.696, 1.698, 1.699, 1.699, 1.701, 1.702, 1.702, 1.702, 1.703, 1.703, 1.706, 1.707, 1.708, 1.706, 1.705, 1.703, 1.703, 1.703, 1.703, 1.704, 1.704, 1.705, 1.704, 1.704, 1.702, 1.701, 1.698, 1.698, 1.696, 1.696
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.425, 1.393, 1.341, 1.295, 1.258, 1.226, 1.201, 1.181, 1.162, 1.146, 1.133, 1.123, 1.115, 1.111, 1.107, 1.106, 1.106, 1.107, 1.108, 1.111, 1.114, 1.122, 1.133, 1.148, 1.164, 1.184, 1.208, 1.236, 1.271, 1.309, 1.359, 1.381,
+ 1.397, 1.367, 1.317, 1.274, 1.237, 1.207, 1.183, 1.163, 1.146, 1.133, 1.123, 1.114, 1.107, 1.101, 1.098, 1.096, 1.096, 1.096, 1.097, 1.102, 1.106, 1.112, 1.122, 1.133, 1.148, 1.166, 1.187, 1.215, 1.249, 1.288, 1.335, 1.359,
+ 1.374, 1.341, 1.292, 1.251, 1.215, 1.186, 1.166, 1.146, 1.131, 1.117, 1.108, 1.099, 1.091, 1.088, 1.084, 1.082, 1.081, 1.082, 1.084, 1.088, 1.093, 1.098, 1.107, 1.118, 1.133, 1.149, 1.169, 1.195, 1.228, 1.267, 1.313, 1.335,
+ 1.352, 1.318, 1.271, 1.231, 1.196, 1.169, 1.149, 1.131, 1.115, 1.103, 1.093, 1.086, 1.079, 1.074, 1.071, 1.069, 1.069, 1.069, 1.071, 1.076, 1.079, 1.085, 1.094, 1.102, 1.117, 1.133, 1.152, 1.176, 1.208, 1.246, 1.289, 1.313,
+ 1.333, 1.298, 1.253, 1.212, 1.179, 1.153, 1.134, 1.116, 1.102, 1.089, 1.079, 1.072, 1.066, 1.062, 1.059, 1.058, 1.057, 1.057, 1.059, 1.064, 1.068, 1.072, 1.081, 1.091, 1.102, 1.119, 1.137, 1.161, 1.191, 1.227, 1.271, 1.293,
+ 1.317, 1.281, 1.235, 1.196, 1.165, 1.139, 1.119, 1.104, 1.089, 1.078, 1.068, 1.062, 1.055, 1.051, 1.048, 1.047, 1.047, 1.047, 1.048, 1.053, 1.056, 1.061, 1.069, 1.079, 1.091, 1.105, 1.126, 1.147, 1.177, 1.212, 1.253, 1.278,
+ 1.301, 1.265, 1.221, 1.181, 1.151, 1.127, 1.108, 1.091, 1.078, 1.068, 1.059, 1.051, 1.045, 1.041, 1.038, 1.037, 1.036, 1.037, 1.038, 1.042, 1.046, 1.051, 1.059, 1.069, 1.081, 1.096, 1.113, 1.135, 1.164, 1.198, 1.238, 1.264,
+ 1.286, 1.251, 1.207, 1.169, 1.141, 1.116, 1.098, 1.081, 1.068, 1.058, 1.049, 1.042, 1.037, 1.033, 1.031, 1.029, 1.028, 1.028, 1.029, 1.033, 1.037, 1.043, 1.051, 1.059, 1.071, 1.086, 1.104, 1.124, 1.152, 1.185, 1.225, 1.252,
+ 1.275, 1.239, 1.196, 1.161, 1.132, 1.107, 1.089, 1.073, 1.059, 1.049, 1.041, 1.035, 1.028, 1.024, 1.023, 1.021, 1.021, 1.021, 1.022, 1.024, 1.029, 1.036, 1.043, 1.051, 1.063, 1.078, 1.095, 1.115, 1.143, 1.175, 1.214, 1.243,
+ 1.267, 1.227, 1.187, 1.152, 1.122, 1.101, 1.081, 1.067, 1.054, 1.042, 1.035, 1.028, 1.023, 1.018, 1.015, 1.014, 1.014, 1.014, 1.016, 1.019, 1.024, 1.029, 1.036, 1.045, 1.056, 1.071, 1.088, 1.107, 1.134, 1.167, 1.204, 1.234,
+ 1.261, 1.219, 1.179, 1.145, 1.116, 1.095, 1.076, 1.061, 1.047, 1.037, 1.031, 1.023, 1.018, 1.014, 1.011, 1.009, 1.009, 1.009, 1.011, 1.013, 1.018, 1.024, 1.031, 1.039, 1.049, 1.065, 1.083, 1.102, 1.128, 1.161, 1.196, 1.228,
+ 1.256, 1.213, 1.173, 1.139, 1.111, 1.091, 1.071, 1.056, 1.043, 1.033, 1.026, 1.019, 1.014, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.009, 1.013, 1.018, 1.026, 1.035, 1.046, 1.061, 1.078, 1.097, 1.123, 1.154, 1.191, 1.222,
+ 1.251, 1.208, 1.169, 1.137, 1.108, 1.088, 1.069, 1.053, 1.039, 1.029, 1.023, 1.015, 1.011, 1.006, 1.004, 1.003, 1.001, 1.002, 1.003, 1.006, 1.009, 1.015, 1.022, 1.032, 1.044, 1.057, 1.076, 1.094, 1.119, 1.149, 1.186, 1.218,
+ 1.249, 1.205, 1.167, 1.133, 1.107, 1.085, 1.067, 1.052, 1.038, 1.029, 1.021, 1.013, 1.008, 1.004, 1.003, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.013, 1.021, 1.031, 1.042, 1.055, 1.073, 1.093, 1.116, 1.147, 1.182, 1.218,
+ 1.249, 1.204, 1.165, 1.132, 1.106, 1.085, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.007, 1.003, 1.002, 1.001, 1.001, 1.001, 1.001, 1.004, 1.007, 1.013, 1.021, 1.029, 1.042, 1.055, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.249, 1.204, 1.165, 1.132, 1.107, 1.086, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.008, 1.004, 1.002, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.014, 1.021, 1.029, 1.042, 1.056, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.251, 1.205, 1.166, 1.133, 1.108, 1.087, 1.068, 1.052, 1.039, 1.031, 1.021, 1.014, 1.009, 1.006, 1.003, 1.002, 1.001, 1.001, 1.003, 1.006, 1.009, 1.014, 1.022, 1.031, 1.043, 1.056, 1.073, 1.093, 1.116, 1.145, 1.182, 1.218,
+ 1.252, 1.208, 1.168, 1.137, 1.111, 1.089, 1.071, 1.055, 1.043, 1.033, 1.023, 1.016, 1.012, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.008, 1.012, 1.017, 1.024, 1.034, 1.045, 1.059, 1.075, 1.095, 1.119, 1.149, 1.185, 1.218,
+ 1.256, 1.213, 1.173, 1.142, 1.115, 1.093, 1.075, 1.059, 1.047, 1.036, 1.027, 1.021, 1.016, 1.012, 1.011, 1.009, 1.008, 1.008, 1.009, 1.012, 1.016, 1.021, 1.028, 1.038, 1.049, 1.064, 1.081, 1.099, 1.126, 1.155, 1.192, 1.223,
+ 1.261, 1.221, 1.179, 1.148, 1.121, 1.099, 1.081, 1.065, 1.052, 1.042, 1.032, 1.026, 1.021, 1.017, 1.015, 1.014, 1.014, 1.013, 1.013, 1.016, 1.021, 1.026, 1.033, 1.043, 1.054, 1.068, 1.085, 1.106, 1.132, 1.161, 1.199, 1.228,
+ 1.267, 1.228, 1.188, 1.155, 1.128, 1.105, 1.086, 1.071, 1.059, 1.047, 1.038, 1.031, 1.027, 1.022, 1.021, 1.019, 1.019, 1.019, 1.019, 1.022, 1.026, 1.032, 1.038, 1.049, 1.061, 1.075, 1.092, 1.112, 1.138, 1.169, 1.207, 1.236,
+ 1.278, 1.241, 1.199, 1.164, 1.137, 1.114, 1.094, 1.078, 1.066, 1.055, 1.046, 1.038, 1.032, 1.029, 1.027, 1.027, 1.027, 1.027, 1.027, 1.029, 1.032, 1.038, 1.047, 1.056, 1.067, 1.083, 1.099, 1.121, 1.146, 1.178, 1.217, 1.244,
+ 1.291, 1.252, 1.211, 1.175, 1.147, 1.124, 1.103, 1.088, 1.075, 1.063, 1.054, 1.046, 1.041, 1.036, 1.035, 1.035, 1.035, 1.035, 1.036, 1.038, 1.041, 1.047, 1.055, 1.065, 1.075, 1.092, 1.111, 1.132, 1.157, 1.189, 1.231, 1.255,
+ 1.303, 1.265, 1.222, 1.187, 1.158, 1.133, 1.112, 1.097, 1.083, 1.072, 1.063, 1.054, 1.048, 1.043, 1.043, 1.043, 1.043, 1.043, 1.043, 1.046, 1.049, 1.055, 1.065, 1.074, 1.086, 1.102, 1.119, 1.144, 1.171, 1.203, 1.243, 1.268,
+ 1.317, 1.282, 1.236, 1.201, 1.171, 1.146, 1.125, 1.109, 1.095, 1.083, 1.072, 1.064, 1.058, 1.054, 1.052, 1.051, 1.051, 1.053, 1.054, 1.057, 1.061, 1.065, 1.074, 1.086, 1.099, 1.113, 1.133, 1.156, 1.183, 1.217, 1.259, 1.282,
+ 1.335, 1.301, 1.254, 1.218, 1.186, 1.159, 1.138, 1.121, 1.108, 1.095, 1.085, 1.076, 1.069, 1.066, 1.065, 1.063, 1.062, 1.063, 1.065, 1.068, 1.073, 1.078, 1.087, 1.098, 1.113, 1.126, 1.146, 1.171, 1.199, 1.235, 1.277, 1.299,
+ 1.356, 1.321, 1.274, 1.235, 1.202, 1.175, 1.153, 1.137, 1.121, 1.108, 1.097, 1.089, 1.084, 1.081, 1.077, 1.075, 1.075, 1.075, 1.077, 1.081, 1.086, 1.091, 1.099, 1.113, 1.126, 1.144, 1.162, 1.187, 1.218, 1.255, 1.297, 1.321,
+ 1.376, 1.344, 1.296, 1.257, 1.223, 1.194, 1.171, 1.153, 1.137, 1.124, 1.112, 1.104, 1.099, 1.095, 1.093, 1.091, 1.089, 1.091, 1.092, 1.095, 1.101, 1.108, 1.116, 1.128, 1.144, 1.161, 1.181, 1.206, 1.237, 1.275, 1.321, 1.347,
+ 1.403, 1.369, 1.319, 1.279, 1.244, 1.214, 1.191, 1.171, 1.154, 1.139, 1.129, 1.121, 1.115, 1.111, 1.109, 1.106, 1.105, 1.105, 1.108, 1.112, 1.117, 1.124, 1.135, 1.147, 1.162, 1.181, 1.203, 1.228, 1.262, 1.301, 1.347, 1.377,
+ 1.429, 1.398, 1.348, 1.306, 1.269, 1.237, 1.214, 1.191, 1.173, 1.158, 1.146, 1.138, 1.132, 1.128, 1.125, 1.123, 1.122, 1.123, 1.125, 1.129, 1.136, 1.142, 1.154, 1.166, 1.182, 1.203, 1.226, 1.253, 1.288, 1.329, 1.377, 1.406,
+ 1.465, 1.429, 1.377, 1.335, 1.295, 1.262, 1.236, 1.214, 1.194, 1.179, 1.167, 1.157, 1.151, 1.146, 1.144, 1.142, 1.142, 1.142, 1.144, 1.149, 1.154, 1.163, 1.174, 1.187, 1.205, 1.226, 1.251, 1.279, 1.315, 1.357, 1.406, 1.437,
+ 1.493, 1.465, 1.409, 1.364, 1.323, 1.289, 1.261, 1.235, 1.214, 1.194, 1.179, 1.171, 1.166, 1.163, 1.161, 1.161, 1.161, 1.161, 1.162, 1.164, 1.168, 1.175, 1.187, 1.205, 1.225, 1.251, 1.276, 1.306, 1.344, 1.387, 1.437, 1.455
+ ],
+ "sigma": 0.0007,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2500,
+ "ccm":
+ [
+ 1.95054, -0.57435, -0.37619,
+ -0.46945, 1.86661, -0.39716,
+ 0.07977, -1.14072, 2.06095
+ ]
+ },
+ {
+ "ct": 2800,
+ "ccm":
+ [
+ 1.94104, -0.60261, -0.33844,
+ -0.43162, 1.85422, -0.42261,
+ 0.03799, -0.95022, 1.91222
+ ]
+ },
+ {
+ "ct": 2900,
+ "ccm":
+ [
+ 1.91828, -0.59569, -0.32258,
+ -0.51902, 2.09091, -0.57189,
+ -0.03324, -0.73462, 1.76785
+ ]
+ },
+ {
+ "ct": 3620,
+ "ccm":
+ [
+ 1.97199, -0.66403, -0.30797,
+ -0.46411, 2.02612, -0.56201,
+ -0.07764, -0.61178, 1.68942
+ ]
+ },
+ {
+ "ct": 4560,
+ "ccm":
+ [
+ 2.15256, -0.84787, -0.30469,
+ -0.48422, 2.28962, -0.80541,
+ -0.15113, -0.53014, 1.68127
+ ]
+ },
+ {
+ "ct": 5600,
+ "ccm":
+ [
+ 2.04576, -0.74771, -0.29805,
+ -0.36332, 1.98993, -0.62662,
+ -0.09328, -0.46543, 1.55871
+ ]
+ },
+ {
+ "ct": 7400,
+ "ccm":
+ [
+ 2.37532, -0.83069, -0.54462,
+ -0.48279, 2.84309, -1.36031,
+ -0.21178, -0.66532, 1.87709
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.06,
+ "strength": 0.5,
+ "limit": 0.5
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "lut_rx":
+ [
+ -0.28, -0.22, -0.16, -0.09, -0.02, 0.04, 0.11, 0.17, 0.29,
+ -0.28, -0.22, -0.16, -0.09, -0.02, 0.04, 0.11, 0.18, 0.3,
+ -0.28, -0.22, -0.16, -0.09, -0.02, 0.05, 0.11, 0.18, 0.31,
+ -0.28, -0.22, -0.16, -0.09, -0.02, 0.05, 0.12, 0.18, 0.31,
+ -0.27, -0.22, -0.16, -0.09, -0.02, 0.05, 0.12, 0.19, 0.31,
+ -0.27, -0.21, -0.15, -0.08, -0.02, 0.05, 0.12, 0.18, 0.31,
+ -0.27, -0.21, -0.15, -0.08, -0.02, 0.05, 0.11, 0.18, 0.3,
+ -0.25, -0.2, -0.15, -0.09, -0.02, 0.05, 0.11, 0.17, 0.29,
+ -0.24, -0.19, -0.14, -0.08, -0.02, 0.04, 0.11, 0.17, 0.29
+ ],
+ "lut_ry":
+ [
+ -0.19, -0.18, -0.19, -0.19, -0.19, -0.18, -0.19, -0.19, -0.2,
+ -0.14, -0.14, -0.15, -0.16, -0.16, -0.16, -0.16, -0.16, -0.17,
+ -0.11, -0.1, -0.11, -0.12, -0.12, -0.12, -0.12, -0.12, -0.14,
+ -0.06, -0.05, -0.05, -0.06, -0.07, -0.07, -0.06, -0.06, -0.08,
+ -0.01, 0.0, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.02,
+ 0.04, 0.05, 0.04, 0.03, 0.03, 0.03, 0.03, 0.04, 0.03,
+ 0.07, 0.08, 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.07,
+ 0.1, 0.11, 0.1, 0.1, 0.1, 0.1, 0.1, 0.11, 0.1,
+ 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.15, 0.15, 0.14
+ ],
+ "lut_bx":
+ [
+ -0.21, -0.17, -0.13, -0.06, 0.01, 0.07, 0.13, 0.18, 0.27,
+ -0.21, -0.17, -0.13, -0.06, 0.01, 0.08, 0.14, 0.2, 0.28,
+ -0.22, -0.18, -0.13, -0.06, 0.01, 0.08, 0.15, 0.21, 0.3,
+ -0.22, -0.18, -0.13, -0.06, 0.01, 0.08, 0.15, 0.21, 0.31,
+ -0.21, -0.17, -0.13, -0.07, 0.01, 0.08, 0.15, 0.2, 0.31,
+ -0.2, -0.16, -0.12, -0.06, 0.0, 0.07, 0.14, 0.18, 0.28,
+ -0.19, -0.15, -0.11, -0.06, 0.01, 0.07, 0.13, 0.18, 0.26,
+ -0.17, -0.14, -0.1, -0.05, 0.01, 0.07, 0.12, 0.16, 0.25,
+ -0.15, -0.12, -0.08, -0.04, 0.01, 0.07, 0.1, 0.13, 0.22
+ ],
+ "lut_by":
+ [
+ -0.15, -0.15, -0.17, -0.18, -0.18, -0.18, -0.17, -0.16, -0.14,
+ -0.12, -0.12, -0.13, -0.14, -0.14, -0.14, -0.13, -0.12, -0.11,
+ -0.09, -0.08, -0.09, -0.1, -0.1, -0.09, -0.09, -0.08, -0.09,
+ -0.06, -0.04, -0.04, -0.05, -0.04, -0.04, -0.04, -0.04, -0.06,
+ -0.02, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.01, -0.02,
+ 0.02, 0.05, 0.07, 0.08, 0.09, 0.09, 0.08, 0.06, 0.02,
+ 0.05, 0.08, 0.1, 0.12, 0.13, 0.13, 0.12, 0.1, 0.06,
+ 0.07, 0.09, 0.11, 0.14, 0.16, 0.16, 0.14, 0.12, 0.07,
+ 0.09, 0.11, 0.14, 0.17, 0.19, 0.19, 0.18, 0.15, 0.1
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx296_mono.json b/src/ipa/rpi/pisp/data/imx296_mono.json
new file mode 100644
index 00000000..153f86a0
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx296_mono.json
@@ -0,0 +1,960 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 4724,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 860,
+ "reference_Y": 14551
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.751
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 226,
+ "slope": 0.01032
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 4000,
+ "table":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 4000,
+ "table":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.425, 1.393, 1.341, 1.295, 1.258, 1.226, 1.201, 1.181, 1.162, 1.146, 1.133, 1.123, 1.115, 1.111, 1.107, 1.106, 1.106, 1.107, 1.108, 1.111, 1.114, 1.122, 1.133, 1.148, 1.164, 1.184, 1.208, 1.236, 1.271, 1.309, 1.359, 1.381,
+ 1.397, 1.367, 1.317, 1.274, 1.237, 1.207, 1.183, 1.163, 1.146, 1.133, 1.123, 1.114, 1.107, 1.101, 1.098, 1.096, 1.096, 1.096, 1.097, 1.102, 1.106, 1.112, 1.122, 1.133, 1.148, 1.166, 1.187, 1.215, 1.249, 1.288, 1.335, 1.359,
+ 1.374, 1.341, 1.292, 1.251, 1.215, 1.186, 1.166, 1.146, 1.131, 1.117, 1.108, 1.099, 1.091, 1.088, 1.084, 1.082, 1.081, 1.082, 1.084, 1.088, 1.093, 1.098, 1.107, 1.118, 1.133, 1.149, 1.169, 1.195, 1.228, 1.267, 1.313, 1.335,
+ 1.352, 1.318, 1.271, 1.231, 1.196, 1.169, 1.149, 1.131, 1.115, 1.103, 1.093, 1.086, 1.079, 1.074, 1.071, 1.069, 1.069, 1.069, 1.071, 1.076, 1.079, 1.085, 1.094, 1.102, 1.117, 1.133, 1.152, 1.176, 1.208, 1.246, 1.289, 1.313,
+ 1.333, 1.298, 1.253, 1.212, 1.179, 1.153, 1.134, 1.116, 1.102, 1.089, 1.079, 1.072, 1.066, 1.062, 1.059, 1.058, 1.057, 1.057, 1.059, 1.064, 1.068, 1.072, 1.081, 1.091, 1.102, 1.119, 1.137, 1.161, 1.191, 1.227, 1.271, 1.293,
+ 1.317, 1.281, 1.235, 1.196, 1.165, 1.139, 1.119, 1.104, 1.089, 1.078, 1.068, 1.062, 1.055, 1.051, 1.048, 1.047, 1.047, 1.047, 1.048, 1.053, 1.056, 1.061, 1.069, 1.079, 1.091, 1.105, 1.126, 1.147, 1.177, 1.212, 1.253, 1.278,
+ 1.301, 1.265, 1.221, 1.181, 1.151, 1.127, 1.108, 1.091, 1.078, 1.068, 1.059, 1.051, 1.045, 1.041, 1.038, 1.037, 1.036, 1.037, 1.038, 1.042, 1.046, 1.051, 1.059, 1.069, 1.081, 1.096, 1.113, 1.135, 1.164, 1.198, 1.238, 1.264,
+ 1.286, 1.251, 1.207, 1.169, 1.141, 1.116, 1.098, 1.081, 1.068, 1.058, 1.049, 1.042, 1.037, 1.033, 1.031, 1.029, 1.028, 1.028, 1.029, 1.033, 1.037, 1.043, 1.051, 1.059, 1.071, 1.086, 1.104, 1.124, 1.152, 1.185, 1.225, 1.252,
+ 1.275, 1.239, 1.196, 1.161, 1.132, 1.107, 1.089, 1.073, 1.059, 1.049, 1.041, 1.035, 1.028, 1.024, 1.023, 1.021, 1.021, 1.021, 1.022, 1.024, 1.029, 1.036, 1.043, 1.051, 1.063, 1.078, 1.095, 1.115, 1.143, 1.175, 1.214, 1.243,
+ 1.267, 1.227, 1.187, 1.152, 1.122, 1.101, 1.081, 1.067, 1.054, 1.042, 1.035, 1.028, 1.023, 1.018, 1.015, 1.014, 1.014, 1.014, 1.016, 1.019, 1.024, 1.029, 1.036, 1.045, 1.056, 1.071, 1.088, 1.107, 1.134, 1.167, 1.204, 1.234,
+ 1.261, 1.219, 1.179, 1.145, 1.116, 1.095, 1.076, 1.061, 1.047, 1.037, 1.031, 1.023, 1.018, 1.014, 1.011, 1.009, 1.009, 1.009, 1.011, 1.013, 1.018, 1.024, 1.031, 1.039, 1.049, 1.065, 1.083, 1.102, 1.128, 1.161, 1.196, 1.228,
+ 1.256, 1.213, 1.173, 1.139, 1.111, 1.091, 1.071, 1.056, 1.043, 1.033, 1.026, 1.019, 1.014, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.009, 1.013, 1.018, 1.026, 1.035, 1.046, 1.061, 1.078, 1.097, 1.123, 1.154, 1.191, 1.222,
+ 1.251, 1.208, 1.169, 1.137, 1.108, 1.088, 1.069, 1.053, 1.039, 1.029, 1.023, 1.015, 1.011, 1.006, 1.004, 1.003, 1.001, 1.002, 1.003, 1.006, 1.009, 1.015, 1.022, 1.032, 1.044, 1.057, 1.076, 1.094, 1.119, 1.149, 1.186, 1.218,
+ 1.249, 1.205, 1.167, 1.133, 1.107, 1.085, 1.067, 1.052, 1.038, 1.029, 1.021, 1.013, 1.008, 1.004, 1.003, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.013, 1.021, 1.031, 1.042, 1.055, 1.073, 1.093, 1.116, 1.147, 1.182, 1.218,
+ 1.249, 1.204, 1.165, 1.132, 1.106, 1.085, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.007, 1.003, 1.002, 1.001, 1.001, 1.001, 1.001, 1.004, 1.007, 1.013, 1.021, 1.029, 1.042, 1.055, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.249, 1.204, 1.165, 1.132, 1.107, 1.086, 1.067, 1.051, 1.038, 1.029, 1.019, 1.013, 1.008, 1.004, 1.002, 1.001, 1.001, 1.001, 1.002, 1.004, 1.007, 1.014, 1.021, 1.029, 1.042, 1.056, 1.072, 1.091, 1.115, 1.145, 1.181, 1.217,
+ 1.251, 1.205, 1.166, 1.133, 1.108, 1.087, 1.068, 1.052, 1.039, 1.031, 1.021, 1.014, 1.009, 1.006, 1.003, 1.002, 1.001, 1.001, 1.003, 1.006, 1.009, 1.014, 1.022, 1.031, 1.043, 1.056, 1.073, 1.093, 1.116, 1.145, 1.182, 1.218,
+ 1.252, 1.208, 1.168, 1.137, 1.111, 1.089, 1.071, 1.055, 1.043, 1.033, 1.023, 1.016, 1.012, 1.009, 1.006, 1.005, 1.004, 1.004, 1.006, 1.008, 1.012, 1.017, 1.024, 1.034, 1.045, 1.059, 1.075, 1.095, 1.119, 1.149, 1.185, 1.218,
+ 1.256, 1.213, 1.173, 1.142, 1.115, 1.093, 1.075, 1.059, 1.047, 1.036, 1.027, 1.021, 1.016, 1.012, 1.011, 1.009, 1.008, 1.008, 1.009, 1.012, 1.016, 1.021, 1.028, 1.038, 1.049, 1.064, 1.081, 1.099, 1.126, 1.155, 1.192, 1.223,
+ 1.261, 1.221, 1.179, 1.148, 1.121, 1.099, 1.081, 1.065, 1.052, 1.042, 1.032, 1.026, 1.021, 1.017, 1.015, 1.014, 1.014, 1.013, 1.013, 1.016, 1.021, 1.026, 1.033, 1.043, 1.054, 1.068, 1.085, 1.106, 1.132, 1.161, 1.199, 1.228,
+ 1.267, 1.228, 1.188, 1.155, 1.128, 1.105, 1.086, 1.071, 1.059, 1.047, 1.038, 1.031, 1.027, 1.022, 1.021, 1.019, 1.019, 1.019, 1.019, 1.022, 1.026, 1.032, 1.038, 1.049, 1.061, 1.075, 1.092, 1.112, 1.138, 1.169, 1.207, 1.236,
+ 1.278, 1.241, 1.199, 1.164, 1.137, 1.114, 1.094, 1.078, 1.066, 1.055, 1.046, 1.038, 1.032, 1.029, 1.027, 1.027, 1.027, 1.027, 1.027, 1.029, 1.032, 1.038, 1.047, 1.056, 1.067, 1.083, 1.099, 1.121, 1.146, 1.178, 1.217, 1.244,
+ 1.291, 1.252, 1.211, 1.175, 1.147, 1.124, 1.103, 1.088, 1.075, 1.063, 1.054, 1.046, 1.041, 1.036, 1.035, 1.035, 1.035, 1.035, 1.036, 1.038, 1.041, 1.047, 1.055, 1.065, 1.075, 1.092, 1.111, 1.132, 1.157, 1.189, 1.231, 1.255,
+ 1.303, 1.265, 1.222, 1.187, 1.158, 1.133, 1.112, 1.097, 1.083, 1.072, 1.063, 1.054, 1.048, 1.043, 1.043, 1.043, 1.043, 1.043, 1.043, 1.046, 1.049, 1.055, 1.065, 1.074, 1.086, 1.102, 1.119, 1.144, 1.171, 1.203, 1.243, 1.268,
+ 1.317, 1.282, 1.236, 1.201, 1.171, 1.146, 1.125, 1.109, 1.095, 1.083, 1.072, 1.064, 1.058, 1.054, 1.052, 1.051, 1.051, 1.053, 1.054, 1.057, 1.061, 1.065, 1.074, 1.086, 1.099, 1.113, 1.133, 1.156, 1.183, 1.217, 1.259, 1.282,
+ 1.335, 1.301, 1.254, 1.218, 1.186, 1.159, 1.138, 1.121, 1.108, 1.095, 1.085, 1.076, 1.069, 1.066, 1.065, 1.063, 1.062, 1.063, 1.065, 1.068, 1.073, 1.078, 1.087, 1.098, 1.113, 1.126, 1.146, 1.171, 1.199, 1.235, 1.277, 1.299,
+ 1.356, 1.321, 1.274, 1.235, 1.202, 1.175, 1.153, 1.137, 1.121, 1.108, 1.097, 1.089, 1.084, 1.081, 1.077, 1.075, 1.075, 1.075, 1.077, 1.081, 1.086, 1.091, 1.099, 1.113, 1.126, 1.144, 1.162, 1.187, 1.218, 1.255, 1.297, 1.321,
+ 1.376, 1.344, 1.296, 1.257, 1.223, 1.194, 1.171, 1.153, 1.137, 1.124, 1.112, 1.104, 1.099, 1.095, 1.093, 1.091, 1.089, 1.091, 1.092, 1.095, 1.101, 1.108, 1.116, 1.128, 1.144, 1.161, 1.181, 1.206, 1.237, 1.275, 1.321, 1.347,
+ 1.403, 1.369, 1.319, 1.279, 1.244, 1.214, 1.191, 1.171, 1.154, 1.139, 1.129, 1.121, 1.115, 1.111, 1.109, 1.106, 1.105, 1.105, 1.108, 1.112, 1.117, 1.124, 1.135, 1.147, 1.162, 1.181, 1.203, 1.228, 1.262, 1.301, 1.347, 1.377,
+ 1.429, 1.398, 1.348, 1.306, 1.269, 1.237, 1.214, 1.191, 1.173, 1.158, 1.146, 1.138, 1.132, 1.128, 1.125, 1.123, 1.122, 1.123, 1.125, 1.129, 1.136, 1.142, 1.154, 1.166, 1.182, 1.203, 1.226, 1.253, 1.288, 1.329, 1.377, 1.406,
+ 1.465, 1.429, 1.377, 1.335, 1.295, 1.262, 1.236, 1.214, 1.194, 1.179, 1.167, 1.157, 1.151, 1.146, 1.144, 1.142, 1.142, 1.142, 1.144, 1.149, 1.154, 1.163, 1.174, 1.187, 1.205, 1.226, 1.251, 1.279, 1.315, 1.357, 1.406, 1.437,
+ 1.493, 1.465, 1.409, 1.364, 1.323, 1.289, 1.261, 1.235, 1.214, 1.194, 1.179, 1.171, 1.166, 1.163, 1.161, 1.161, 1.161, 1.161, 1.162, 1.164, 1.168, 1.175, 1.187, 1.205, 1.225, 1.251, 1.276, 1.306, 1.344, 1.387, 1.437, 1.455
+ ],
+ "sigma": 0.0007,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.06,
+ "strength": 0.5,
+ "limit": 0.5
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": [ 0.0, 2.5, 0.01, 2.5, 0.06, 1.0, 1.0, 1.0 ],
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": [ 0.0, 2.5, 0.01, 2.5, 0.06, 1.0, 1.0, 1.0 ],
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx378.json b/src/ipa/rpi/pisp/data/imx378.json
new file mode 100644
index 00000000..ac760f79
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx378.json
@@ -0,0 +1,634 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 9999,
+ "reference_gain": 1.95,
+ "reference_aperture": 1.0,
+ "reference_lux": 1000,
+ "reference_Y": 12996
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.641
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 235,
+ "slope": 0.00902
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 8000
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8100
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2850.0, 0.6361, 0.3911,
+ 3550.0, 0.5386, 0.5077,
+ 4500.0, 0.4472, 0.6171,
+ 5600.0, 0.3906, 0.6848,
+ 8000.0, 0.3412, 0.7441
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01667,
+ "transverse_neg": 0.01195
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.5,
+ "calibrations_Cr": [
+ {
+ "ct": 2800,
+ "table":
+ [
+ 1.604, 1.603, 1.601, 1.597, 1.594, 1.588, 1.582, 1.576, 1.57, 1.566, 1.562, 1.561, 1.561, 1.561, 1.561, 1.561, 1.561, 1.562, 1.565, 1.57, 1.577, 1.584, 1.591, 1.598, 1.604, 1.61, 1.617, 1.623, 1.627, 1.632, 1.634, 1.636,
+ 1.603, 1.601, 1.599, 1.595, 1.591, 1.585, 1.579, 1.572, 1.565, 1.561, 1.557, 1.555, 1.555, 1.555, 1.555, 1.555, 1.556, 1.558, 1.561, 1.566, 1.573, 1.581, 1.587, 1.594, 1.6, 1.607, 1.613, 1.62, 1.625, 1.63, 1.632, 1.635,
+ 1.602, 1.599, 1.596, 1.592, 1.589, 1.582, 1.575, 1.568, 1.561, 1.556, 1.552, 1.55, 1.549, 1.548, 1.548, 1.549, 1.55, 1.553, 1.556, 1.562, 1.57, 1.577, 1.583, 1.589, 1.596, 1.603, 1.61, 1.617, 1.622, 1.627, 1.63, 1.633,
+ 1.601, 1.597, 1.594, 1.59, 1.586, 1.579, 1.571, 1.564, 1.556, 1.551, 1.546, 1.544, 1.542, 1.541, 1.541, 1.542, 1.544, 1.547, 1.551, 1.557, 1.565, 1.573, 1.579, 1.585, 1.592, 1.6, 1.607, 1.614, 1.62, 1.625, 1.628, 1.632,
+ 1.6, 1.596, 1.591, 1.586, 1.58, 1.573, 1.566, 1.559, 1.551, 1.546, 1.54, 1.537, 1.534, 1.533, 1.533, 1.534, 1.536, 1.539, 1.544, 1.551, 1.559, 1.567, 1.574, 1.581, 1.589, 1.596, 1.604, 1.612, 1.618, 1.624, 1.627, 1.631,
+ 1.599, 1.594, 1.588, 1.582, 1.575, 1.568, 1.56, 1.553, 1.547, 1.54, 1.534, 1.529, 1.525, 1.524, 1.524, 1.525, 1.527, 1.531, 1.537, 1.545, 1.553, 1.561, 1.569, 1.577, 1.585, 1.593, 1.601, 1.609, 1.616, 1.623, 1.626, 1.63,
+ 1.599, 1.592, 1.586, 1.578, 1.571, 1.563, 1.555, 1.548, 1.542, 1.535, 1.528, 1.522, 1.517, 1.515, 1.515, 1.516, 1.519, 1.523, 1.531, 1.539, 1.547, 1.556, 1.564, 1.573, 1.581, 1.59, 1.599, 1.607, 1.615, 1.622, 1.625, 1.629,
+ 1.598, 1.591, 1.583, 1.575, 1.567, 1.559, 1.55, 1.543, 1.537, 1.53, 1.523, 1.516, 1.509, 1.506, 1.506, 1.507, 1.51, 1.516, 1.525, 1.533, 1.541, 1.55, 1.56, 1.57, 1.579, 1.587, 1.596, 1.605, 1.613, 1.621, 1.625, 1.629,
+ 1.597, 1.589, 1.581, 1.572, 1.564, 1.555, 1.546, 1.539, 1.532, 1.525, 1.517, 1.509, 1.5, 1.497, 1.497, 1.499, 1.501, 1.508, 1.519, 1.528, 1.535, 1.544, 1.556, 1.567, 1.576, 1.585, 1.594, 1.603, 1.612, 1.62, 1.624, 1.629,
+ 1.597, 1.588, 1.579, 1.57, 1.561, 1.552, 1.543, 1.535, 1.527, 1.519, 1.511, 1.503, 1.494, 1.491, 1.49, 1.492, 1.496, 1.502, 1.512, 1.521, 1.529, 1.539, 1.552, 1.564, 1.574, 1.583, 1.592, 1.602, 1.611, 1.619, 1.624, 1.629,
+ 1.597, 1.588, 1.579, 1.569, 1.56, 1.55, 1.54, 1.531, 1.522, 1.513, 1.504, 1.497, 1.489, 1.486, 1.486, 1.488, 1.493, 1.498, 1.506, 1.514, 1.523, 1.535, 1.548, 1.561, 1.572, 1.582, 1.591, 1.601, 1.61, 1.619, 1.624, 1.629,
+ 1.597, 1.587, 1.578, 1.568, 1.559, 1.548, 1.538, 1.527, 1.516, 1.507, 1.498, 1.491, 1.485, 1.482, 1.481, 1.484, 1.489, 1.495, 1.499, 1.506, 1.518, 1.53, 1.545, 1.559, 1.57, 1.58, 1.59, 1.6, 1.61, 1.619, 1.624, 1.629,
+ 1.597, 1.587, 1.578, 1.568, 1.558, 1.548, 1.537, 1.526, 1.514, 1.504, 1.494, 1.487, 1.482, 1.479, 1.479, 1.481, 1.486, 1.491, 1.496, 1.503, 1.515, 1.529, 1.544, 1.558, 1.569, 1.58, 1.59, 1.6, 1.61, 1.619, 1.624, 1.629,
+ 1.597, 1.587, 1.578, 1.568, 1.558, 1.548, 1.537, 1.525, 1.513, 1.502, 1.491, 1.484, 1.48, 1.478, 1.477, 1.479, 1.483, 1.488, 1.494, 1.502, 1.515, 1.528, 1.543, 1.557, 1.569, 1.58, 1.59, 1.6, 1.61, 1.619, 1.624, 1.629,
+ 1.597, 1.587, 1.578, 1.568, 1.558, 1.547, 1.536, 1.524, 1.511, 1.499, 1.487, 1.481, 1.478, 1.476, 1.476, 1.477, 1.48, 1.485, 1.492, 1.501, 1.514, 1.527, 1.543, 1.557, 1.569, 1.58, 1.59, 1.6, 1.61, 1.619, 1.624, 1.629,
+ 1.597, 1.587, 1.578, 1.568, 1.558, 1.547, 1.536, 1.524, 1.511, 1.499, 1.487, 1.481, 1.479, 1.477, 1.477, 1.478, 1.48, 1.484, 1.492, 1.501, 1.514, 1.527, 1.543, 1.557, 1.569, 1.58, 1.591, 1.601, 1.61, 1.619, 1.624, 1.63,
+ 1.597, 1.588, 1.578, 1.568, 1.558, 1.547, 1.536, 1.524, 1.511, 1.499, 1.487, 1.482, 1.48, 1.479, 1.478, 1.479, 1.48, 1.484, 1.492, 1.501, 1.514, 1.527, 1.543, 1.557, 1.569, 1.581, 1.591, 1.602, 1.611, 1.619, 1.625, 1.63,
+ 1.597, 1.588, 1.579, 1.569, 1.559, 1.548, 1.536, 1.524, 1.512, 1.5, 1.488, 1.483, 1.482, 1.48, 1.48, 1.48, 1.481, 1.485, 1.492, 1.501, 1.514, 1.527, 1.543, 1.557, 1.57, 1.581, 1.592, 1.602, 1.611, 1.62, 1.625, 1.631,
+ 1.597, 1.588, 1.58, 1.57, 1.56, 1.549, 1.538, 1.526, 1.515, 1.504, 1.494, 1.488, 1.484, 1.481, 1.48, 1.482, 1.485, 1.49, 1.497, 1.506, 1.518, 1.531, 1.546, 1.56, 1.572, 1.583, 1.594, 1.604, 1.613, 1.621, 1.626, 1.631,
+ 1.597, 1.589, 1.581, 1.571, 1.562, 1.551, 1.54, 1.529, 1.518, 1.509, 1.501, 1.493, 1.486, 1.482, 1.481, 1.483, 1.489, 1.496, 1.503, 1.511, 1.522, 1.534, 1.548, 1.562, 1.574, 1.586, 1.596, 1.607, 1.615, 1.622, 1.627, 1.632,
+ 1.597, 1.59, 1.582, 1.573, 1.564, 1.553, 1.543, 1.532, 1.522, 1.514, 1.507, 1.499, 1.489, 1.485, 1.484, 1.487, 1.494, 1.501, 1.508, 1.517, 1.527, 1.538, 1.552, 1.565, 1.577, 1.588, 1.599, 1.609, 1.616, 1.624, 1.628, 1.632,
+ 1.599, 1.592, 1.585, 1.576, 1.566, 1.557, 1.548, 1.538, 1.529, 1.521, 1.513, 1.504, 1.496, 1.492, 1.492, 1.494, 1.5, 1.507, 1.515, 1.524, 1.534, 1.545, 1.557, 1.569, 1.581, 1.592, 1.602, 1.611, 1.619, 1.626, 1.63, 1.634,
+ 1.6, 1.594, 1.588, 1.579, 1.569, 1.561, 1.553, 1.545, 1.537, 1.528, 1.518, 1.51, 1.503, 1.5, 1.5, 1.502, 1.506, 1.512, 1.522, 1.531, 1.542, 1.552, 1.563, 1.574, 1.585, 1.596, 1.605, 1.614, 1.621, 1.628, 1.632, 1.635,
+ 1.602, 1.597, 1.591, 1.582, 1.573, 1.565, 1.558, 1.551, 1.543, 1.534, 1.524, 1.517, 1.511, 1.509, 1.509, 1.511, 1.514, 1.52, 1.529, 1.539, 1.549, 1.559, 1.569, 1.579, 1.589, 1.6, 1.608, 1.617, 1.624, 1.631, 1.634, 1.637,
+ 1.605, 1.6, 1.596, 1.587, 1.579, 1.571, 1.563, 1.556, 1.549, 1.541, 1.533, 1.527, 1.522, 1.52, 1.52, 1.522, 1.525, 1.53, 1.538, 1.546, 1.557, 1.566, 1.576, 1.585, 1.595, 1.604, 1.612, 1.621, 1.627, 1.633, 1.637, 1.641,
+ 1.608, 1.604, 1.6, 1.592, 1.585, 1.577, 1.569, 1.561, 1.554, 1.547, 1.541, 1.536, 1.533, 1.531, 1.531, 1.533, 1.536, 1.54, 1.546, 1.554, 1.564, 1.574, 1.583, 1.592, 1.6, 1.608, 1.616, 1.624, 1.63, 1.636, 1.64, 1.644,
+ 1.611, 1.607, 1.604, 1.597, 1.59, 1.582, 1.574, 1.567, 1.56, 1.554, 1.549, 1.545, 1.543, 1.542, 1.542, 1.543, 1.546, 1.55, 1.556, 1.562, 1.571, 1.58, 1.589, 1.598, 1.605, 1.613, 1.621, 1.628, 1.634, 1.639, 1.643, 1.647,
+ 1.614, 1.61, 1.607, 1.601, 1.595, 1.588, 1.58, 1.574, 1.567, 1.562, 1.557, 1.554, 1.553, 1.552, 1.552, 1.554, 1.557, 1.561, 1.565, 1.571, 1.579, 1.587, 1.595, 1.603, 1.61, 1.618, 1.625, 1.633, 1.638, 1.642, 1.646, 1.65,
+ 1.616, 1.614, 1.611, 1.606, 1.601, 1.594, 1.586, 1.58, 1.574, 1.569, 1.565, 1.563, 1.562, 1.562, 1.562, 1.564, 1.567, 1.571, 1.575, 1.58, 1.586, 1.593, 1.601, 1.609, 1.616, 1.623, 1.63, 1.637, 1.641, 1.646, 1.65, 1.653,
+ 1.618, 1.615, 1.613, 1.609, 1.604, 1.598, 1.592, 1.586, 1.58, 1.575, 1.572, 1.571, 1.57, 1.57, 1.57, 1.572, 1.574, 1.577, 1.581, 1.585, 1.592, 1.599, 1.606, 1.614, 1.621, 1.628, 1.634, 1.64, 1.644, 1.649, 1.651, 1.654,
+ 1.618, 1.617, 1.615, 1.612, 1.608, 1.603, 1.597, 1.591, 1.585, 1.581, 1.579, 1.578, 1.578, 1.578, 1.578, 1.579, 1.581, 1.583, 1.586, 1.59, 1.597, 1.604, 1.612, 1.619, 1.626, 1.633, 1.638, 1.643, 1.647, 1.651, 1.653, 1.655,
+ 1.619, 1.618, 1.617, 1.614, 1.611, 1.607, 1.602, 1.596, 1.59, 1.587, 1.585, 1.585, 1.585, 1.585, 1.585, 1.586, 1.587, 1.589, 1.591, 1.595, 1.602, 1.609, 1.617, 1.624, 1.631, 1.638, 1.642, 1.646, 1.65, 1.654, 1.655, 1.655
+ ]
+ },
+ {
+ "ct": 5500,
+ "table":
+ [
+ 2.664, 2.661, 2.658, 2.652, 2.646, 2.638, 2.631, 2.619, 2.605, 2.602, 2.602, 2.602, 2.602, 2.603, 2.605, 2.609, 2.614, 2.619, 2.625, 2.632, 2.642, 2.654, 2.667, 2.68, 2.69, 2.701, 2.712, 2.723, 2.73, 2.736, 2.742, 2.747,
+ 2.662, 2.659, 2.656, 2.649, 2.64, 2.631, 2.622, 2.61, 2.596, 2.593, 2.592, 2.593, 2.593, 2.595, 2.599, 2.604, 2.61, 2.616, 2.621, 2.628, 2.636, 2.646, 2.659, 2.671, 2.682, 2.694, 2.706, 2.718, 2.726, 2.733, 2.739, 2.745,
+ 2.66, 2.657, 2.655, 2.645, 2.635, 2.625, 2.614, 2.601, 2.587, 2.583, 2.583, 2.583, 2.584, 2.588, 2.593, 2.599, 2.606, 2.612, 2.618, 2.624, 2.63, 2.639, 2.65, 2.662, 2.674, 2.687, 2.7, 2.713, 2.721, 2.73, 2.736, 2.743,
+ 2.657, 2.655, 2.652, 2.641, 2.629, 2.617, 2.605, 2.592, 2.579, 2.575, 2.574, 2.574, 2.575, 2.58, 2.587, 2.593, 2.6, 2.607, 2.613, 2.619, 2.625, 2.632, 2.643, 2.654, 2.667, 2.68, 2.694, 2.708, 2.717, 2.727, 2.734, 2.741,
+ 2.654, 2.649, 2.644, 2.633, 2.621, 2.608, 2.595, 2.584, 2.573, 2.569, 2.566, 2.566, 2.566, 2.57, 2.575, 2.582, 2.59, 2.598, 2.607, 2.615, 2.621, 2.628, 2.639, 2.65, 2.664, 2.677, 2.691, 2.705, 2.715, 2.725, 2.733, 2.741,
+ 2.651, 2.644, 2.636, 2.624, 2.612, 2.599, 2.585, 2.576, 2.568, 2.563, 2.559, 2.557, 2.558, 2.56, 2.563, 2.57, 2.579, 2.589, 2.6, 2.61, 2.617, 2.625, 2.635, 2.647, 2.66, 2.674, 2.688, 2.701, 2.712, 2.723, 2.732, 2.741,
+ 2.648, 2.639, 2.629, 2.617, 2.604, 2.59, 2.577, 2.569, 2.563, 2.557, 2.551, 2.549, 2.549, 2.55, 2.552, 2.558, 2.568, 2.58, 2.593, 2.604, 2.612, 2.621, 2.632, 2.644, 2.658, 2.671, 2.685, 2.699, 2.71, 2.722, 2.731, 2.741,
+ 2.646, 2.635, 2.623, 2.61, 2.596, 2.584, 2.572, 2.565, 2.559, 2.552, 2.544, 2.541, 2.54, 2.541, 2.542, 2.548, 2.559, 2.57, 2.583, 2.595, 2.605, 2.616, 2.63, 2.643, 2.656, 2.67, 2.684, 2.698, 2.71, 2.722, 2.731, 2.741,
+ 2.644, 2.63, 2.617, 2.603, 2.588, 2.578, 2.567, 2.561, 2.555, 2.547, 2.538, 2.533, 2.532, 2.531, 2.532, 2.538, 2.549, 2.561, 2.574, 2.586, 2.598, 2.612, 2.627, 2.642, 2.655, 2.668, 2.682, 2.696, 2.709, 2.722, 2.731, 2.741,
+ 2.643, 2.628, 2.613, 2.598, 2.583, 2.573, 2.564, 2.557, 2.55, 2.541, 2.531, 2.526, 2.524, 2.523, 2.524, 2.53, 2.541, 2.552, 2.565, 2.578, 2.593, 2.608, 2.625, 2.641, 2.654, 2.668, 2.682, 2.696, 2.709, 2.722, 2.731, 2.741,
+ 2.643, 2.627, 2.61, 2.595, 2.581, 2.571, 2.562, 2.553, 2.543, 2.534, 2.526, 2.52, 2.516, 2.516, 2.519, 2.525, 2.533, 2.543, 2.556, 2.57, 2.588, 2.606, 2.623, 2.64, 2.654, 2.668, 2.682, 2.696, 2.709, 2.722, 2.731, 2.741,
+ 2.643, 2.625, 2.608, 2.593, 2.578, 2.569, 2.56, 2.549, 2.536, 2.528, 2.52, 2.514, 2.508, 2.509, 2.515, 2.52, 2.526, 2.535, 2.546, 2.562, 2.583, 2.603, 2.622, 2.639, 2.653, 2.668, 2.682, 2.696, 2.709, 2.722, 2.731, 2.741,
+ 2.643, 2.625, 2.607, 2.592, 2.577, 2.568, 2.56, 2.548, 2.534, 2.524, 2.516, 2.51, 2.505, 2.506, 2.51, 2.516, 2.522, 2.531, 2.544, 2.56, 2.581, 2.601, 2.621, 2.639, 2.654, 2.669, 2.683, 2.696, 2.71, 2.723, 2.732, 2.742,
+ 2.643, 2.625, 2.607, 2.592, 2.577, 2.568, 2.56, 2.548, 2.534, 2.523, 2.512, 2.506, 2.503, 2.504, 2.506, 2.512, 2.52, 2.53, 2.543, 2.559, 2.58, 2.6, 2.62, 2.639, 2.655, 2.67, 2.684, 2.697, 2.711, 2.725, 2.734, 2.743,
+ 2.643, 2.625, 2.607, 2.592, 2.577, 2.568, 2.56, 2.548, 2.534, 2.521, 2.508, 2.503, 2.502, 2.501, 2.502, 2.508, 2.517, 2.529, 2.543, 2.559, 2.579, 2.599, 2.62, 2.639, 2.656, 2.671, 2.685, 2.698, 2.713, 2.727, 2.736, 2.744,
+ 2.645, 2.627, 2.609, 2.593, 2.578, 2.569, 2.56, 2.548, 2.535, 2.522, 2.51, 2.504, 2.502, 2.502, 2.504, 2.509, 2.518, 2.529, 2.543, 2.559, 2.579, 2.599, 2.621, 2.642, 2.658, 2.673, 2.686, 2.7, 2.715, 2.729, 2.738, 2.747,
+ 2.646, 2.628, 2.611, 2.595, 2.58, 2.569, 2.56, 2.548, 2.535, 2.523, 2.512, 2.506, 2.503, 2.504, 2.507, 2.512, 2.518, 2.529, 2.543, 2.559, 2.579, 2.6, 2.623, 2.644, 2.659, 2.674, 2.688, 2.702, 2.716, 2.73, 2.74, 2.749,
+ 2.648, 2.63, 2.612, 2.597, 2.581, 2.571, 2.56, 2.548, 2.536, 2.525, 2.515, 2.509, 2.504, 2.505, 2.509, 2.514, 2.52, 2.53, 2.544, 2.56, 2.58, 2.6, 2.625, 2.646, 2.661, 2.676, 2.69, 2.704, 2.718, 2.732, 2.742, 2.752,
+ 2.648, 2.632, 2.615, 2.6, 2.585, 2.575, 2.565, 2.555, 2.544, 2.533, 2.523, 2.516, 2.511, 2.511, 2.514, 2.52, 2.529, 2.539, 2.551, 2.566, 2.585, 2.605, 2.628, 2.649, 2.664, 2.68, 2.694, 2.709, 2.723, 2.736, 2.745, 2.754,
+ 2.648, 2.633, 2.618, 2.603, 2.588, 2.579, 2.569, 2.561, 2.552, 2.542, 2.53, 2.523, 2.517, 2.516, 2.518, 2.526, 2.538, 2.549, 2.558, 2.571, 2.589, 2.609, 2.631, 2.651, 2.667, 2.683, 2.699, 2.713, 2.727, 2.74, 2.748, 2.756,
+ 2.649, 2.635, 2.622, 2.607, 2.593, 2.584, 2.575, 2.567, 2.559, 2.549, 2.538, 2.531, 2.525, 2.523, 2.525, 2.533, 2.546, 2.558, 2.566, 2.579, 2.597, 2.615, 2.635, 2.655, 2.671, 2.688, 2.703, 2.718, 2.732, 2.745, 2.752, 2.76,
+ 2.653, 2.64, 2.628, 2.615, 2.602, 2.591, 2.581, 2.573, 2.565, 2.556, 2.546, 2.54, 2.537, 2.536, 2.537, 2.543, 2.553, 2.565, 2.577, 2.592, 2.609, 2.627, 2.645, 2.662, 2.678, 2.693, 2.708, 2.723, 2.737, 2.75, 2.758, 2.766,
+ 2.657, 2.646, 2.634, 2.622, 2.61, 2.599, 2.588, 2.579, 2.57, 2.562, 2.554, 2.55, 2.549, 2.548, 2.548, 2.553, 2.561, 2.572, 2.588, 2.605, 2.622, 2.639, 2.655, 2.67, 2.685, 2.699, 2.714, 2.728, 2.742, 2.756, 2.764, 2.773,
+ 2.662, 2.652, 2.642, 2.63, 2.618, 2.607, 2.595, 2.586, 2.578, 2.571, 2.565, 2.563, 2.562, 2.562, 2.563, 2.567, 2.573, 2.584, 2.601, 2.618, 2.635, 2.651, 2.665, 2.679, 2.692, 2.706, 2.72, 2.735, 2.748, 2.761, 2.77, 2.778,
+ 2.669, 2.661, 2.652, 2.64, 2.627, 2.615, 2.604, 2.596, 2.589, 2.584, 2.58, 2.578, 2.578, 2.579, 2.581, 2.585, 2.591, 2.601, 2.615, 2.63, 2.646, 2.661, 2.675, 2.688, 2.701, 2.714, 2.729, 2.744, 2.756, 2.768, 2.775, 2.782,
+ 2.676, 2.669, 2.662, 2.649, 2.636, 2.624, 2.612, 2.605, 2.6, 2.596, 2.594, 2.593, 2.593, 2.595, 2.598, 2.603, 2.609, 2.618, 2.629, 2.642, 2.657, 2.672, 2.685, 2.698, 2.71, 2.723, 2.738, 2.752, 2.763, 2.774, 2.78, 2.786,
+ 2.683, 2.676, 2.67, 2.658, 2.646, 2.635, 2.623, 2.616, 2.611, 2.609, 2.608, 2.608, 2.608, 2.611, 2.614, 2.619, 2.625, 2.633, 2.644, 2.655, 2.668, 2.681, 2.694, 2.707, 2.719, 2.732, 2.747, 2.76, 2.77, 2.779, 2.785, 2.791,
+ 2.688, 2.682, 2.676, 2.667, 2.658, 2.646, 2.635, 2.628, 2.623, 2.621, 2.621, 2.621, 2.623, 2.625, 2.629, 2.634, 2.64, 2.648, 2.658, 2.669, 2.679, 2.691, 2.703, 2.716, 2.729, 2.742, 2.755, 2.768, 2.776, 2.783, 2.79, 2.796,
+ 2.694, 2.689, 2.683, 2.676, 2.67, 2.658, 2.646, 2.64, 2.635, 2.634, 2.634, 2.635, 2.637, 2.64, 2.644, 2.649, 2.655, 2.663, 2.673, 2.682, 2.691, 2.7, 2.712, 2.725, 2.738, 2.752, 2.764, 2.775, 2.782, 2.788, 2.795, 2.802,
+ 2.697, 2.693, 2.689, 2.682, 2.676, 2.666, 2.655, 2.65, 2.645, 2.644, 2.644, 2.645, 2.647, 2.649, 2.652, 2.657, 2.663, 2.671, 2.68, 2.69, 2.699, 2.709, 2.722, 2.735, 2.747, 2.76, 2.77, 2.78, 2.787, 2.793, 2.798, 2.804,
+ 2.7, 2.697, 2.694, 2.687, 2.68, 2.672, 2.664, 2.659, 2.655, 2.654, 2.654, 2.655, 2.655, 2.657, 2.66, 2.664, 2.671, 2.678, 2.687, 2.696, 2.707, 2.718, 2.732, 2.744, 2.756, 2.767, 2.776, 2.785, 2.791, 2.798, 2.801, 2.804,
+ 2.702, 2.701, 2.699, 2.692, 2.685, 2.679, 2.672, 2.668, 2.665, 2.664, 2.664, 2.664, 2.664, 2.665, 2.667, 2.671, 2.678, 2.685, 2.693, 2.703, 2.715, 2.728, 2.741, 2.754, 2.764, 2.774, 2.782, 2.789, 2.796, 2.803, 2.804, 2.805
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 2800,
+ "table":
+ [
+ 2.876, 2.872, 2.868, 2.866, 2.863, 2.858, 2.852, 2.849, 2.847, 2.846, 2.846, 2.846, 2.847, 2.848, 2.85, 2.851, 2.851, 2.852, 2.855, 2.859, 2.864, 2.868, 2.872, 2.877, 2.884, 2.89, 2.895, 2.9, 2.907, 2.913, 2.92, 2.926,
+ 2.871, 2.869, 2.866, 2.863, 2.861, 2.856, 2.85, 2.848, 2.846, 2.846, 2.846, 2.847, 2.847, 2.848, 2.85, 2.852, 2.853, 2.854, 2.856, 2.86, 2.866, 2.871, 2.875, 2.879, 2.884, 2.889, 2.894, 2.899, 2.905, 2.912, 2.917, 2.923,
+ 2.867, 2.865, 2.863, 2.861, 2.858, 2.854, 2.848, 2.847, 2.846, 2.846, 2.847, 2.847, 2.848, 2.849, 2.85, 2.852, 2.854, 2.856, 2.858, 2.861, 2.868, 2.874, 2.877, 2.881, 2.884, 2.888, 2.893, 2.898, 2.904, 2.91, 2.915, 2.92,
+ 2.863, 2.862, 2.861, 2.858, 2.856, 2.851, 2.847, 2.846, 2.846, 2.846, 2.847, 2.848, 2.849, 2.85, 2.852, 2.854, 2.857, 2.859, 2.86, 2.864, 2.871, 2.877, 2.88, 2.883, 2.884, 2.887, 2.892, 2.896, 2.903, 2.909, 2.913, 2.917,
+ 2.862, 2.861, 2.859, 2.856, 2.852, 2.848, 2.845, 2.844, 2.844, 2.846, 2.849, 2.852, 2.855, 2.857, 2.86, 2.863, 2.868, 2.87, 2.871, 2.873, 2.877, 2.88, 2.881, 2.883, 2.885, 2.887, 2.89, 2.894, 2.9, 2.906, 2.911, 2.915,
+ 2.861, 2.859, 2.857, 2.853, 2.849, 2.846, 2.843, 2.842, 2.842, 2.846, 2.851, 2.856, 2.861, 2.865, 2.868, 2.873, 2.878, 2.881, 2.881, 2.882, 2.882, 2.883, 2.883, 2.883, 2.885, 2.886, 2.889, 2.891, 2.897, 2.903, 2.909, 2.914,
+ 2.861, 2.858, 2.856, 2.851, 2.847, 2.844, 2.842, 2.842, 2.843, 2.848, 2.854, 2.861, 2.867, 2.872, 2.876, 2.881, 2.887, 2.89, 2.89, 2.889, 2.888, 2.887, 2.885, 2.884, 2.886, 2.887, 2.888, 2.89, 2.896, 2.901, 2.907, 2.912,
+ 2.86, 2.857, 2.854, 2.85, 2.846, 2.845, 2.844, 2.845, 2.847, 2.852, 2.859, 2.865, 2.872, 2.878, 2.883, 2.887, 2.892, 2.895, 2.895, 2.894, 2.893, 2.892, 2.889, 2.887, 2.888, 2.889, 2.89, 2.892, 2.897, 2.901, 2.906, 2.911,
+ 2.858, 2.855, 2.852, 2.849, 2.846, 2.846, 2.845, 2.848, 2.852, 2.857, 2.863, 2.87, 2.878, 2.884, 2.889, 2.894, 2.898, 2.9, 2.9, 2.899, 2.899, 2.897, 2.893, 2.89, 2.89, 2.89, 2.892, 2.894, 2.897, 2.901, 2.905, 2.91,
+ 2.858, 2.855, 2.851, 2.849, 2.846, 2.846, 2.846, 2.85, 2.856, 2.862, 2.868, 2.875, 2.883, 2.889, 2.894, 2.898, 2.902, 2.904, 2.904, 2.904, 2.903, 2.901, 2.896, 2.893, 2.892, 2.892, 2.894, 2.895, 2.899, 2.902, 2.905, 2.909,
+ 2.858, 2.855, 2.851, 2.849, 2.846, 2.846, 2.846, 2.852, 2.86, 2.867, 2.874, 2.881, 2.887, 2.893, 2.897, 2.901, 2.904, 2.907, 2.908, 2.909, 2.907, 2.905, 2.9, 2.896, 2.894, 2.893, 2.895, 2.897, 2.9, 2.903, 2.906, 2.909,
+ 2.858, 2.855, 2.851, 2.849, 2.846, 2.846, 2.846, 2.854, 2.863, 2.872, 2.88, 2.886, 2.892, 2.896, 2.9, 2.903, 2.907, 2.91, 2.912, 2.913, 2.911, 2.908, 2.904, 2.899, 2.897, 2.895, 2.896, 2.898, 2.901, 2.904, 2.906, 2.909,
+ 2.858, 2.855, 2.851, 2.849, 2.847, 2.847, 2.848, 2.856, 2.866, 2.875, 2.882, 2.889, 2.894, 2.899, 2.902, 2.906, 2.909, 2.912, 2.915, 2.916, 2.914, 2.911, 2.907, 2.903, 2.899, 2.897, 2.898, 2.899, 2.902, 2.904, 2.907, 2.909,
+ 2.858, 2.855, 2.851, 2.85, 2.848, 2.849, 2.85, 2.858, 2.869, 2.877, 2.884, 2.89, 2.896, 2.901, 2.905, 2.908, 2.912, 2.915, 2.918, 2.918, 2.916, 2.913, 2.91, 2.906, 2.902, 2.899, 2.899, 2.899, 2.902, 2.905, 2.907, 2.908,
+ 2.858, 2.855, 2.851, 2.85, 2.849, 2.851, 2.852, 2.861, 2.871, 2.879, 2.886, 2.892, 2.898, 2.903, 2.907, 2.911, 2.915, 2.918, 2.92, 2.921, 2.918, 2.916, 2.913, 2.909, 2.905, 2.901, 2.9, 2.899, 2.902, 2.905, 2.907, 2.908,
+ 2.859, 2.856, 2.853, 2.851, 2.85, 2.852, 2.853, 2.862, 2.871, 2.879, 2.886, 2.892, 2.898, 2.904, 2.908, 2.912, 2.916, 2.918, 2.921, 2.921, 2.919, 2.917, 2.914, 2.91, 2.905, 2.901, 2.9, 2.9, 2.903, 2.906, 2.907, 2.908,
+ 2.86, 2.857, 2.854, 2.853, 2.852, 2.853, 2.854, 2.862, 2.871, 2.879, 2.886, 2.892, 2.898, 2.904, 2.909, 2.913, 2.916, 2.919, 2.921, 2.922, 2.92, 2.918, 2.914, 2.91, 2.905, 2.901, 2.901, 2.901, 2.904, 2.906, 2.907, 2.908,
+ 2.861, 2.858, 2.855, 2.854, 2.853, 2.854, 2.855, 2.862, 2.871, 2.879, 2.886, 2.892, 2.898, 2.904, 2.91, 2.914, 2.917, 2.919, 2.921, 2.922, 2.921, 2.919, 2.914, 2.91, 2.905, 2.901, 2.901, 2.902, 2.904, 2.907, 2.908, 2.908,
+ 2.861, 2.859, 2.857, 2.855, 2.854, 2.854, 2.855, 2.862, 2.871, 2.878, 2.885, 2.891, 2.898, 2.903, 2.908, 2.912, 2.915, 2.918, 2.919, 2.919, 2.918, 2.916, 2.912, 2.909, 2.906, 2.903, 2.903, 2.904, 2.906, 2.907, 2.908, 2.908,
+ 2.862, 2.86, 2.858, 2.856, 2.855, 2.855, 2.856, 2.862, 2.87, 2.877, 2.884, 2.89, 2.897, 2.902, 2.906, 2.91, 2.914, 2.916, 2.918, 2.917, 2.915, 2.913, 2.91, 2.908, 2.906, 2.905, 2.905, 2.906, 2.907, 2.908, 2.908, 2.909,
+ 2.862, 2.861, 2.859, 2.858, 2.856, 2.856, 2.857, 2.863, 2.87, 2.876, 2.883, 2.889, 2.895, 2.9, 2.904, 2.908, 2.912, 2.914, 2.915, 2.915, 2.912, 2.91, 2.908, 2.907, 2.907, 2.907, 2.907, 2.907, 2.908, 2.909, 2.909, 2.909,
+ 2.862, 2.862, 2.861, 2.859, 2.857, 2.858, 2.859, 2.864, 2.87, 2.876, 2.881, 2.886, 2.891, 2.896, 2.901, 2.905, 2.909, 2.911, 2.911, 2.911, 2.909, 2.907, 2.906, 2.906, 2.906, 2.907, 2.908, 2.908, 2.909, 2.91, 2.911, 2.911,
+ 2.863, 2.863, 2.862, 2.86, 2.858, 2.86, 2.862, 2.866, 2.87, 2.875, 2.88, 2.884, 2.887, 2.891, 2.897, 2.902, 2.905, 2.907, 2.907, 2.907, 2.906, 2.905, 2.905, 2.905, 2.906, 2.907, 2.908, 2.909, 2.91, 2.912, 2.912, 2.912,
+ 2.863, 2.863, 2.863, 2.862, 2.86, 2.862, 2.864, 2.867, 2.87, 2.874, 2.878, 2.881, 2.883, 2.888, 2.894, 2.898, 2.901, 2.903, 2.903, 2.903, 2.903, 2.903, 2.903, 2.904, 2.906, 2.907, 2.908, 2.91, 2.912, 2.913, 2.913, 2.914,
+ 2.865, 2.864, 2.864, 2.863, 2.862, 2.864, 2.865, 2.867, 2.869, 2.872, 2.875, 2.878, 2.882, 2.886, 2.89, 2.893, 2.895, 2.897, 2.899, 2.899, 2.899, 2.9, 2.902, 2.903, 2.905, 2.907, 2.909, 2.911, 2.912, 2.914, 2.914, 2.915,
+ 2.866, 2.865, 2.865, 2.865, 2.864, 2.865, 2.866, 2.867, 2.868, 2.87, 2.872, 2.876, 2.88, 2.883, 2.886, 2.888, 2.89, 2.892, 2.894, 2.896, 2.896, 2.897, 2.9, 2.903, 2.905, 2.907, 2.91, 2.913, 2.913, 2.914, 2.915, 2.916,
+ 2.868, 2.868, 2.867, 2.867, 2.866, 2.867, 2.868, 2.868, 2.869, 2.87, 2.871, 2.874, 2.877, 2.879, 2.881, 2.883, 2.885, 2.888, 2.891, 2.893, 2.894, 2.896, 2.898, 2.901, 2.904, 2.907, 2.91, 2.913, 2.914, 2.915, 2.916, 2.918,
+ 2.871, 2.871, 2.871, 2.87, 2.869, 2.869, 2.869, 2.869, 2.87, 2.87, 2.871, 2.872, 2.874, 2.875, 2.875, 2.877, 2.881, 2.885, 2.889, 2.892, 2.893, 2.895, 2.897, 2.899, 2.903, 2.907, 2.91, 2.914, 2.915, 2.916, 2.918, 2.919,
+ 2.874, 2.874, 2.874, 2.873, 2.871, 2.871, 2.871, 2.871, 2.871, 2.871, 2.871, 2.871, 2.87, 2.87, 2.87, 2.872, 2.876, 2.881, 2.886, 2.89, 2.893, 2.894, 2.895, 2.897, 2.902, 2.907, 2.911, 2.914, 2.916, 2.917, 2.919, 2.921,
+ 2.877, 2.877, 2.876, 2.874, 2.873, 2.872, 2.872, 2.872, 2.871, 2.871, 2.871, 2.87, 2.869, 2.869, 2.869, 2.871, 2.874, 2.878, 2.883, 2.887, 2.891, 2.893, 2.894, 2.896, 2.901, 2.907, 2.911, 2.914, 2.916, 2.918, 2.919, 2.921,
+ 2.88, 2.879, 2.878, 2.876, 2.874, 2.874, 2.873, 2.872, 2.871, 2.871, 2.871, 2.87, 2.869, 2.869, 2.869, 2.87, 2.871, 2.874, 2.879, 2.884, 2.889, 2.892, 2.894, 2.896, 2.901, 2.906, 2.91, 2.914, 2.916, 2.918, 2.92, 2.921,
+ 2.882, 2.881, 2.879, 2.878, 2.876, 2.875, 2.874, 2.873, 2.871, 2.871, 2.871, 2.87, 2.869, 2.869, 2.869, 2.869, 2.869, 2.871, 2.875, 2.881, 2.887, 2.891, 2.893, 2.895, 2.901, 2.906, 2.91, 2.914, 2.917, 2.919, 2.92, 2.921
+ ]
+ },
+ {
+ "ct": 5500,
+ "table":
+ [
+ 1.488, 1.488, 1.488, 1.488, 1.488, 1.488, 1.488, 1.489, 1.491, 1.491, 1.492, 1.492, 1.492, 1.492, 1.491, 1.491, 1.491, 1.491, 1.491, 1.491, 1.492, 1.492, 1.494, 1.495, 1.496, 1.497, 1.498, 1.499, 1.499, 1.499, 1.501, 1.503,
+ 1.486, 1.486, 1.487, 1.487, 1.487, 1.487, 1.488, 1.489, 1.49, 1.491, 1.492, 1.492, 1.492, 1.492, 1.492, 1.491, 1.491, 1.491, 1.491, 1.492, 1.492, 1.493, 1.494, 1.495, 1.495, 1.495, 1.496, 1.496, 1.497, 1.497, 1.498, 1.5,
+ 1.484, 1.485, 1.486, 1.486, 1.486, 1.486, 1.487, 1.488, 1.489, 1.49, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.493, 1.494, 1.494, 1.494, 1.494, 1.493, 1.493, 1.493, 1.494, 1.495, 1.496, 1.497,
+ 1.482, 1.483, 1.485, 1.485, 1.485, 1.486, 1.487, 1.488, 1.489, 1.49, 1.491, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.492, 1.493, 1.493, 1.494, 1.494, 1.494, 1.493, 1.492, 1.491, 1.491, 1.492, 1.493, 1.493, 1.494,
+ 1.482, 1.483, 1.484, 1.484, 1.485, 1.485, 1.486, 1.487, 1.488, 1.49, 1.491, 1.493, 1.493, 1.494, 1.494, 1.495, 1.495, 1.495, 1.495, 1.494, 1.494, 1.494, 1.493, 1.493, 1.492, 1.492, 1.491, 1.491, 1.492, 1.492, 1.492, 1.493,
+ 1.482, 1.482, 1.483, 1.483, 1.484, 1.485, 1.485, 1.486, 1.487, 1.489, 1.491, 1.493, 1.494, 1.496, 1.496, 1.497, 1.497, 1.497, 1.497, 1.496, 1.495, 1.494, 1.493, 1.492, 1.492, 1.491, 1.491, 1.491, 1.491, 1.491, 1.492, 1.492,
+ 1.482, 1.482, 1.482, 1.483, 1.484, 1.484, 1.485, 1.486, 1.487, 1.489, 1.492, 1.494, 1.496, 1.497, 1.498, 1.498, 1.499, 1.499, 1.498, 1.497, 1.496, 1.494, 1.493, 1.492, 1.491, 1.491, 1.491, 1.491, 1.491, 1.491, 1.491, 1.491,
+ 1.482, 1.482, 1.482, 1.482, 1.483, 1.484, 1.485, 1.487, 1.488, 1.491, 1.493, 1.495, 1.496, 1.497, 1.498, 1.499, 1.5, 1.5, 1.499, 1.498, 1.497, 1.495, 1.494, 1.492, 1.492, 1.491, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49,
+ 1.481, 1.481, 1.481, 1.482, 1.482, 1.483, 1.485, 1.487, 1.49, 1.492, 1.495, 1.496, 1.497, 1.498, 1.499, 1.499, 1.5, 1.5, 1.499, 1.499, 1.498, 1.497, 1.494, 1.493, 1.492, 1.491, 1.49, 1.488, 1.488, 1.488, 1.488, 1.488,
+ 1.481, 1.481, 1.481, 1.481, 1.482, 1.483, 1.484, 1.487, 1.49, 1.493, 1.495, 1.497, 1.498, 1.498, 1.499, 1.5, 1.5, 1.501, 1.5, 1.499, 1.498, 1.497, 1.495, 1.492, 1.491, 1.49, 1.489, 1.487, 1.487, 1.487, 1.487, 1.487,
+ 1.481, 1.481, 1.481, 1.481, 1.481, 1.482, 1.484, 1.487, 1.49, 1.493, 1.496, 1.497, 1.498, 1.498, 1.499, 1.5, 1.5, 1.501, 1.5, 1.499, 1.498, 1.497, 1.494, 1.492, 1.491, 1.489, 1.488, 1.486, 1.486, 1.485, 1.485, 1.485,
+ 1.481, 1.481, 1.481, 1.481, 1.481, 1.482, 1.483, 1.486, 1.49, 1.493, 1.496, 1.497, 1.498, 1.498, 1.499, 1.5, 1.5, 1.501, 1.5, 1.499, 1.498, 1.497, 1.494, 1.492, 1.49, 1.488, 1.487, 1.485, 1.484, 1.483, 1.483, 1.483,
+ 1.48, 1.48, 1.48, 1.481, 1.481, 1.482, 1.483, 1.486, 1.489, 1.493, 1.496, 1.497, 1.497, 1.498, 1.499, 1.499, 1.5, 1.5, 1.499, 1.499, 1.498, 1.496, 1.494, 1.491, 1.489, 1.487, 1.485, 1.484, 1.483, 1.483, 1.483, 1.482,
+ 1.48, 1.48, 1.48, 1.48, 1.481, 1.482, 1.482, 1.485, 1.489, 1.492, 1.495, 1.496, 1.497, 1.498, 1.498, 1.499, 1.499, 1.5, 1.499, 1.498, 1.497, 1.495, 1.493, 1.491, 1.488, 1.486, 1.484, 1.483, 1.483, 1.482, 1.482, 1.482,
+ 1.479, 1.479, 1.479, 1.48, 1.481, 1.481, 1.482, 1.485, 1.488, 1.491, 1.494, 1.496, 1.497, 1.497, 1.498, 1.498, 1.499, 1.499, 1.499, 1.498, 1.496, 1.495, 1.493, 1.491, 1.488, 1.485, 1.483, 1.482, 1.482, 1.482, 1.482, 1.481,
+ 1.479, 1.479, 1.479, 1.48, 1.48, 1.481, 1.482, 1.485, 1.488, 1.491, 1.494, 1.495, 1.496, 1.497, 1.497, 1.498, 1.498, 1.498, 1.498, 1.497, 1.496, 1.494, 1.492, 1.49, 1.487, 1.484, 1.483, 1.482, 1.481, 1.481, 1.48, 1.48,
+ 1.479, 1.479, 1.479, 1.479, 1.48, 1.48, 1.481, 1.484, 1.488, 1.491, 1.493, 1.495, 1.496, 1.497, 1.497, 1.497, 1.498, 1.497, 1.497, 1.497, 1.496, 1.494, 1.492, 1.489, 1.486, 1.483, 1.482, 1.481, 1.481, 1.48, 1.479, 1.478,
+ 1.479, 1.479, 1.479, 1.479, 1.479, 1.48, 1.481, 1.484, 1.488, 1.491, 1.493, 1.495, 1.496, 1.496, 1.497, 1.497, 1.497, 1.497, 1.496, 1.496, 1.495, 1.494, 1.491, 1.488, 1.485, 1.482, 1.481, 1.481, 1.48, 1.479, 1.478, 1.477,
+ 1.479, 1.479, 1.479, 1.479, 1.479, 1.48, 1.481, 1.484, 1.487, 1.49, 1.492, 1.494, 1.495, 1.496, 1.496, 1.497, 1.497, 1.496, 1.496, 1.495, 1.494, 1.493, 1.49, 1.487, 1.484, 1.482, 1.481, 1.48, 1.479, 1.479, 1.478, 1.477,
+ 1.478, 1.478, 1.478, 1.479, 1.479, 1.48, 1.481, 1.484, 1.487, 1.489, 1.491, 1.493, 1.494, 1.495, 1.496, 1.496, 1.496, 1.496, 1.496, 1.495, 1.494, 1.492, 1.489, 1.487, 1.484, 1.482, 1.481, 1.479, 1.479, 1.478, 1.477, 1.476,
+ 1.478, 1.478, 1.478, 1.478, 1.479, 1.48, 1.481, 1.483, 1.486, 1.488, 1.49, 1.492, 1.493, 1.494, 1.495, 1.496, 1.496, 1.495, 1.495, 1.494, 1.493, 1.491, 1.488, 1.486, 1.484, 1.482, 1.48, 1.479, 1.478, 1.478, 1.477, 1.476,
+ 1.478, 1.478, 1.478, 1.478, 1.479, 1.48, 1.481, 1.483, 1.486, 1.488, 1.489, 1.491, 1.492, 1.493, 1.494, 1.495, 1.495, 1.494, 1.494, 1.493, 1.491, 1.489, 1.487, 1.485, 1.483, 1.481, 1.48, 1.479, 1.478, 1.477, 1.477, 1.476,
+ 1.478, 1.478, 1.478, 1.478, 1.479, 1.48, 1.482, 1.484, 1.486, 1.487, 1.488, 1.49, 1.491, 1.492, 1.493, 1.494, 1.494, 1.493, 1.493, 1.492, 1.489, 1.487, 1.486, 1.484, 1.483, 1.481, 1.48, 1.479, 1.478, 1.476, 1.476, 1.476,
+ 1.478, 1.478, 1.478, 1.479, 1.479, 1.481, 1.482, 1.484, 1.485, 1.486, 1.487, 1.489, 1.49, 1.491, 1.492, 1.492, 1.492, 1.492, 1.491, 1.49, 1.488, 1.486, 1.485, 1.483, 1.482, 1.481, 1.48, 1.479, 1.477, 1.476, 1.476, 1.476,
+ 1.477, 1.478, 1.478, 1.479, 1.48, 1.481, 1.482, 1.484, 1.485, 1.486, 1.487, 1.488, 1.489, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.489, 1.487, 1.485, 1.484, 1.483, 1.482, 1.481, 1.48, 1.479, 1.477, 1.476, 1.476, 1.476,
+ 1.477, 1.478, 1.479, 1.48, 1.481, 1.482, 1.483, 1.484, 1.485, 1.486, 1.486, 1.487, 1.488, 1.488, 1.489, 1.488, 1.488, 1.488, 1.488, 1.487, 1.485, 1.484, 1.484, 1.483, 1.482, 1.481, 1.48, 1.479, 1.477, 1.476, 1.476, 1.476,
+ 1.477, 1.478, 1.479, 1.48, 1.481, 1.482, 1.483, 1.484, 1.485, 1.485, 1.486, 1.486, 1.487, 1.487, 1.487, 1.486, 1.486, 1.486, 1.486, 1.486, 1.485, 1.484, 1.483, 1.483, 1.482, 1.481, 1.48, 1.479, 1.477, 1.476, 1.476, 1.476,
+ 1.477, 1.478, 1.479, 1.48, 1.481, 1.482, 1.483, 1.484, 1.484, 1.485, 1.485, 1.486, 1.486, 1.485, 1.485, 1.484, 1.484, 1.484, 1.485, 1.485, 1.484, 1.483, 1.483, 1.482, 1.482, 1.481, 1.48, 1.479, 1.478, 1.477, 1.476, 1.476,
+ 1.477, 1.478, 1.479, 1.48, 1.482, 1.482, 1.483, 1.483, 1.484, 1.484, 1.485, 1.485, 1.484, 1.484, 1.483, 1.482, 1.482, 1.483, 1.484, 1.484, 1.483, 1.483, 1.482, 1.482, 1.481, 1.481, 1.48, 1.479, 1.478, 1.477, 1.476, 1.476,
+ 1.477, 1.478, 1.479, 1.48, 1.482, 1.482, 1.483, 1.483, 1.484, 1.484, 1.485, 1.484, 1.484, 1.483, 1.482, 1.482, 1.482, 1.482, 1.483, 1.483, 1.483, 1.483, 1.482, 1.482, 1.481, 1.48, 1.48, 1.479, 1.478, 1.478, 1.477, 1.477,
+ 1.477, 1.478, 1.479, 1.48, 1.482, 1.482, 1.483, 1.483, 1.484, 1.484, 1.484, 1.484, 1.483, 1.483, 1.482, 1.482, 1.482, 1.482, 1.483, 1.483, 1.482, 1.482, 1.482, 1.481, 1.48, 1.48, 1.479, 1.479, 1.479, 1.478, 1.478, 1.478,
+ 1.477, 1.478, 1.479, 1.48, 1.482, 1.482, 1.483, 1.483, 1.484, 1.484, 1.484, 1.483, 1.482, 1.482, 1.482, 1.482, 1.482, 1.482, 1.482, 1.482, 1.482, 1.482, 1.481, 1.481, 1.48, 1.479, 1.479, 1.479, 1.479, 1.479, 1.479, 1.479
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.764, 2.711, 2.658, 2.504, 2.342, 2.204, 2.07, 1.937, 1.803, 1.706, 1.622, 1.582, 1.565, 1.558, 1.558, 1.558, 1.558, 1.56, 1.565, 1.586, 1.631, 1.7, 1.818, 1.941, 2.081, 2.222, 2.37, 2.522, 2.711, 2.893, 2.968, 3.043,
+ 2.725, 2.642, 2.56, 2.405, 2.246, 2.115, 1.989, 1.86, 1.732, 1.642, 1.567, 1.527, 1.504, 1.493, 1.488, 1.486, 1.486, 1.492, 1.503, 1.528, 1.574, 1.64, 1.746, 1.86, 1.995, 2.131, 2.274, 2.423, 2.608, 2.788, 2.888, 2.988,
+ 2.686, 2.574, 2.462, 2.307, 2.149, 2.026, 1.908, 1.784, 1.66, 1.578, 1.511, 1.471, 1.443, 1.427, 1.419, 1.415, 1.415, 1.423, 1.44, 1.47, 1.516, 1.579, 1.674, 1.779, 1.909, 2.04, 2.179, 2.323, 2.504, 2.682, 2.808, 2.933,
+ 2.636, 2.502, 2.368, 2.212, 2.055, 1.937, 1.825, 1.709, 1.592, 1.517, 1.457, 1.416, 1.385, 1.365, 1.353, 1.347, 1.347, 1.358, 1.38, 1.413, 1.46, 1.52, 1.605, 1.7, 1.824, 1.949, 2.085, 2.227, 2.405, 2.581, 2.725, 2.87,
+ 2.537, 2.413, 2.289, 2.133, 1.974, 1.853, 1.737, 1.637, 1.54, 1.468, 1.406, 1.366, 1.336, 1.317, 1.306, 1.301, 1.301, 1.311, 1.332, 1.362, 1.407, 1.464, 1.545, 1.633, 1.743, 1.858, 1.999, 2.144, 2.323, 2.5, 2.635, 2.771,
+ 2.439, 2.325, 2.211, 2.053, 1.892, 1.768, 1.649, 1.564, 1.488, 1.42, 1.355, 1.315, 1.288, 1.27, 1.259, 1.254, 1.254, 1.263, 1.283, 1.312, 1.355, 1.409, 1.485, 1.567, 1.662, 1.767, 1.912, 2.062, 2.242, 2.419, 2.545, 2.672,
+ 2.362, 2.251, 2.14, 1.982, 1.82, 1.695, 1.576, 1.501, 1.437, 1.375, 1.313, 1.273, 1.243, 1.225, 1.214, 1.209, 1.209, 1.218, 1.238, 1.267, 1.31, 1.361, 1.43, 1.504, 1.591, 1.689, 1.835, 1.986, 2.167, 2.345, 2.469, 2.594,
+ 2.323, 2.202, 2.081, 1.924, 1.764, 1.643, 1.529, 1.454, 1.389, 1.335, 1.286, 1.244, 1.206, 1.184, 1.172, 1.166, 1.166, 1.177, 1.201, 1.233, 1.278, 1.327, 1.385, 1.45, 1.537, 1.634, 1.776, 1.924, 2.105, 2.283, 2.418, 2.552,
+ 2.285, 2.154, 2.023, 1.866, 1.708, 1.592, 1.481, 1.406, 1.341, 1.296, 1.258, 1.215, 1.169, 1.143, 1.13, 1.124, 1.124, 1.137, 1.164, 1.199, 1.246, 1.292, 1.339, 1.397, 1.483, 1.58, 1.717, 1.861, 2.043, 2.222, 2.366, 2.51,
+ 2.258, 2.116, 1.975, 1.82, 1.665, 1.552, 1.446, 1.372, 1.306, 1.262, 1.227, 1.185, 1.141, 1.113, 1.097, 1.089, 1.089, 1.103, 1.134, 1.17, 1.214, 1.259, 1.303, 1.358, 1.443, 1.537, 1.671, 1.81, 1.992, 2.171, 2.325, 2.479,
+ 2.24, 2.088, 1.936, 1.784, 1.631, 1.522, 1.42, 1.347, 1.282, 1.234, 1.192, 1.156, 1.121, 1.093, 1.07, 1.06, 1.06, 1.076, 1.11, 1.146, 1.184, 1.225, 1.274, 1.332, 1.414, 1.505, 1.634, 1.77, 1.951, 2.13, 2.294, 2.457,
+ 2.223, 2.06, 1.898, 1.747, 1.597, 1.492, 1.394, 1.323, 1.258, 1.206, 1.158, 1.126, 1.101, 1.074, 1.044, 1.03, 1.031, 1.049, 1.087, 1.122, 1.153, 1.192, 1.245, 1.306, 1.385, 1.473, 1.598, 1.73, 1.91, 2.089, 2.262, 2.435,
+ 2.218, 2.047, 1.876, 1.727, 1.579, 1.476, 1.38, 1.309, 1.245, 1.19, 1.138, 1.104, 1.078, 1.053, 1.028, 1.018, 1.019, 1.035, 1.065, 1.097, 1.131, 1.172, 1.228, 1.29, 1.367, 1.453, 1.575, 1.705, 1.884, 2.062, 2.245, 2.428,
+ 2.218, 2.039, 1.861, 1.712, 1.566, 1.465, 1.37, 1.299, 1.234, 1.178, 1.124, 1.085, 1.054, 1.032, 1.017, 1.012, 1.015, 1.026, 1.045, 1.072, 1.112, 1.158, 1.216, 1.279, 1.354, 1.438, 1.559, 1.686, 1.863, 2.041, 2.234, 2.427,
+ 2.218, 2.032, 1.846, 1.698, 1.553, 1.453, 1.36, 1.29, 1.224, 1.166, 1.109, 1.066, 1.03, 1.012, 1.006, 1.005, 1.011, 1.017, 1.024, 1.047, 1.093, 1.143, 1.203, 1.267, 1.341, 1.424, 1.542, 1.667, 1.842, 2.02, 2.223, 2.426,
+ 2.218, 2.031, 1.844, 1.697, 1.552, 1.452, 1.36, 1.289, 1.223, 1.164, 1.108, 1.064, 1.027, 1.009, 1.004, 1.004, 1.009, 1.015, 1.022, 1.045, 1.091, 1.142, 1.202, 1.266, 1.34, 1.423, 1.54, 1.665, 1.841, 2.018, 2.222, 2.426,
+ 2.218, 2.031, 1.844, 1.697, 1.552, 1.452, 1.36, 1.289, 1.223, 1.164, 1.108, 1.064, 1.027, 1.009, 1.004, 1.004, 1.008, 1.014, 1.021, 1.045, 1.091, 1.142, 1.202, 1.266, 1.34, 1.423, 1.54, 1.665, 1.841, 2.018, 2.222, 2.426,
+ 2.218, 2.032, 1.846, 1.699, 1.554, 1.454, 1.361, 1.29, 1.225, 1.166, 1.11, 1.066, 1.028, 1.01, 1.004, 1.004, 1.007, 1.014, 1.023, 1.047, 1.093, 1.143, 1.203, 1.267, 1.341, 1.424, 1.542, 1.667, 1.842, 2.02, 2.223, 2.426,
+ 2.22, 2.044, 1.869, 1.719, 1.572, 1.471, 1.376, 1.305, 1.24, 1.183, 1.129, 1.089, 1.054, 1.031, 1.014, 1.009, 1.013, 1.026, 1.048, 1.077, 1.115, 1.159, 1.218, 1.28, 1.356, 1.44, 1.56, 1.687, 1.863, 2.041, 2.234, 2.427,
+ 2.222, 2.056, 1.891, 1.74, 1.591, 1.487, 1.391, 1.319, 1.254, 1.2, 1.149, 1.111, 1.08, 1.052, 1.025, 1.015, 1.019, 1.038, 1.073, 1.106, 1.136, 1.175, 1.232, 1.294, 1.371, 1.457, 1.578, 1.706, 1.884, 2.062, 2.245, 2.427,
+ 2.231, 2.074, 1.918, 1.766, 1.614, 1.508, 1.41, 1.338, 1.273, 1.22, 1.173, 1.136, 1.106, 1.074, 1.041, 1.028, 1.033, 1.055, 1.097, 1.134, 1.16, 1.196, 1.251, 1.311, 1.39, 1.477, 1.601, 1.732, 1.911, 2.089, 2.262, 2.434,
+ 2.255, 2.108, 1.961, 1.807, 1.652, 1.542, 1.439, 1.365, 1.299, 1.25, 1.207, 1.167, 1.13, 1.099, 1.074, 1.063, 1.066, 1.084, 1.119, 1.155, 1.192, 1.233, 1.281, 1.338, 1.419, 1.509, 1.637, 1.772, 1.953, 2.132, 2.294, 2.456,
+ 2.279, 2.142, 2.004, 1.848, 1.69, 1.576, 1.468, 1.393, 1.326, 1.279, 1.241, 1.198, 1.153, 1.125, 1.107, 1.099, 1.1, 1.113, 1.141, 1.177, 1.223, 1.269, 1.312, 1.366, 1.449, 1.541, 1.673, 1.812, 1.995, 2.175, 2.327, 2.479,
+ 2.317, 2.187, 2.057, 1.898, 1.737, 1.619, 1.508, 1.431, 1.363, 1.314, 1.273, 1.229, 1.183, 1.157, 1.143, 1.137, 1.137, 1.148, 1.171, 1.205, 1.255, 1.304, 1.35, 1.406, 1.49, 1.584, 1.72, 1.863, 2.047, 2.228, 2.37, 2.512,
+ 2.37, 2.247, 2.123, 1.961, 1.797, 1.675, 1.559, 1.481, 1.413, 1.356, 1.303, 1.259, 1.22, 1.196, 1.184, 1.178, 1.178, 1.188, 1.21, 1.242, 1.287, 1.337, 1.396, 1.462, 1.545, 1.64, 1.781, 1.928, 2.112, 2.292, 2.425, 2.559,
+ 2.424, 2.306, 2.188, 2.024, 1.857, 1.731, 1.611, 1.532, 1.462, 1.397, 1.334, 1.29, 1.256, 1.236, 1.224, 1.219, 1.219, 1.229, 1.249, 1.278, 1.32, 1.371, 1.443, 1.518, 1.6, 1.695, 1.842, 1.994, 2.177, 2.356, 2.48, 2.605,
+ 2.513, 2.39, 2.266, 2.102, 1.935, 1.808, 1.687, 1.597, 1.516, 1.446, 1.379, 1.335, 1.302, 1.282, 1.271, 1.266, 1.266, 1.276, 1.296, 1.325, 1.366, 1.42, 1.497, 1.58, 1.674, 1.779, 1.923, 2.073, 2.255, 2.434, 2.563, 2.693,
+ 2.621, 2.486, 2.352, 2.189, 2.024, 1.897, 1.775, 1.672, 1.572, 1.498, 1.433, 1.388, 1.353, 1.333, 1.322, 1.316, 1.316, 1.326, 1.348, 1.378, 1.421, 1.476, 1.556, 1.645, 1.759, 1.877, 2.016, 2.159, 2.341, 2.52, 2.662, 2.804,
+ 2.728, 2.583, 2.438, 2.276, 2.113, 1.986, 1.864, 1.746, 1.628, 1.55, 1.487, 1.441, 1.405, 1.383, 1.372, 1.367, 1.367, 1.377, 1.399, 1.431, 1.476, 1.533, 1.615, 1.71, 1.843, 1.976, 2.108, 2.246, 2.427, 2.606, 2.76, 2.915,
+ 2.781, 2.661, 2.54, 2.378, 2.213, 2.08, 1.952, 1.826, 1.699, 1.613, 1.542, 1.497, 1.465, 1.447, 1.439, 1.436, 1.436, 1.444, 1.461, 1.489, 1.533, 1.594, 1.686, 1.791, 1.93, 2.069, 2.206, 2.349, 2.533, 2.714, 2.845, 2.977,
+ 2.822, 2.734, 2.646, 2.483, 2.316, 2.176, 2.04, 1.907, 1.774, 1.678, 1.597, 1.553, 1.527, 1.515, 1.511, 1.509, 1.509, 1.514, 1.525, 1.549, 1.591, 1.655, 1.76, 1.875, 2.018, 2.161, 2.305, 2.454, 2.643, 2.827, 2.927, 3.027,
+ 2.862, 2.807, 2.752, 2.589, 2.418, 2.271, 2.128, 1.988, 1.848, 1.744, 1.652, 1.608, 1.59, 1.582, 1.582, 1.582, 1.582, 1.584, 1.589, 1.608, 1.65, 1.716, 1.833, 1.958, 2.105, 2.253, 2.404, 2.56, 2.754, 2.94, 3.009, 3.078
+ ],
+ "sigma": 0.00428,
+ "sigma_Cb": 0.00363
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2850,
+ "ccm":
+ [
+ 1.42601, -0.20537, -0.22063,
+ -0.47682, 1.81987, -0.34305,
+ 0.01854, -0.86036, 1.84181
+ ]
+ },
+ {
+ "ct": 2900,
+ "ccm":
+ [
+ 1.29755, 0.04602, -0.34356,
+ -0.41491, 1.73477, -0.31987,
+ -0.01345, -0.97115, 1.98459
+ ]
+ },
+ {
+ "ct": 3550,
+ "ccm":
+ [
+ 1.49811, -0.33412, -0.16398,
+ -0.40869, 1.72995, -0.32127,
+ -0.01924, -0.62181, 1.64105
+ ]
+ },
+ {
+ "ct": 4500,
+ "ccm":
+ [
+ 1.47015, -0.29229, -0.17786,
+ -0.36561, 1.88919, -0.52358,
+ -0.03552, -0.56717, 1.60269
+ ]
+ },
+ {
+ "ct": 5600,
+ "ccm":
+ [
+ 1.60962, -0.47434, -0.13528,
+ -0.32701, 1.73797, -0.41096,
+ -0.07626, -0.40171, 1.47796
+ ]
+ },
+ {
+ "ct": 8000,
+ "ccm":
+ [
+ 1.54642, -0.20396, -0.34246,
+ -0.31748, 2.22559, -0.90811,
+ -0.10035, -0.65877, 1.75912
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx415.json b/src/ipa/rpi/pisp/data/imx415.json
new file mode 100755
index 00000000..824a5371
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx415.json
@@ -0,0 +1,1159 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 19230,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 1198,
+ "reference_Y": 14876
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 17,
+ "reference_slope": 3.439
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 193,
+ "slope": 0.00902
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2698.0, 0.7746, 0.2063,
+ 2930.0, 0.7579, 0.2155,
+ 3643.0, 0.6412, 0.2905,
+ 4605.0, 0.5038, 0.4099,
+ 5658.0, 0.4541, 0.4634
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01128,
+ "transverse_neg": 0.01437
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.027, 1.027, 1.022, 1.018, 1.014, 1.012, 1.009, 1.009, 1.007, 1.006, 1.004, 1.002, 1.002, 1.001, 1.001, 1.001, 1.001, 1.002, 1.003, 1.004, 1.006, 1.008, 1.009, 1.011, 1.014, 1.018, 1.019, 1.026, 1.029, 1.033, 1.039, 1.039,
+ 1.039, 1.034, 1.031, 1.028, 1.027, 1.025, 1.023, 1.021, 1.019, 1.019, 1.017, 1.016, 1.016, 1.016, 1.016, 1.016, 1.016, 1.016, 1.017, 1.018, 1.019, 1.021, 1.024, 1.025, 1.027, 1.029, 1.032, 1.035, 1.037, 1.042, 1.046, 1.049,
+ 1.041, 1.038, 1.033, 1.029, 1.027, 1.026, 1.024, 1.023, 1.021, 1.019, 1.018, 1.017, 1.016, 1.016, 1.016, 1.017, 1.017, 1.017, 1.018, 1.019, 1.021, 1.022, 1.024, 1.026, 1.029, 1.031, 1.034, 1.037, 1.042, 1.044, 1.049, 1.052,
+ 1.041, 1.037, 1.032, 1.028, 1.027, 1.025, 1.023, 1.022, 1.021, 1.019, 1.018, 1.017, 1.016, 1.016, 1.016, 1.016, 1.016, 1.017, 1.018, 1.019, 1.021, 1.022, 1.024, 1.026, 1.028, 1.031, 1.033, 1.037, 1.039, 1.044, 1.047, 1.051,
+ 1.039, 1.036, 1.031, 1.027, 1.026, 1.024, 1.022, 1.021, 1.019, 1.018, 1.017, 1.016, 1.015, 1.015, 1.015, 1.015, 1.015, 1.016, 1.017, 1.018, 1.019, 1.021, 1.023, 1.025, 1.028, 1.031, 1.033, 1.036, 1.039, 1.043, 1.046, 1.049,
+ 1.037, 1.034, 1.029, 1.026, 1.024, 1.023, 1.021, 1.019, 1.018, 1.017, 1.016, 1.015, 1.015, 1.013, 1.014, 1.014, 1.014, 1.014, 1.016, 1.017, 1.019, 1.019, 1.022, 1.025, 1.027, 1.029, 1.033, 1.036, 1.039, 1.042, 1.045, 1.049,
+ 1.036, 1.031, 1.029, 1.025, 1.023, 1.021, 1.019, 1.018, 1.017, 1.016, 1.015, 1.014, 1.013, 1.013, 1.012, 1.013, 1.013, 1.014, 1.015, 1.016, 1.018, 1.019, 1.021, 1.023, 1.026, 1.029, 1.032, 1.035, 1.039, 1.041, 1.044, 1.048,
+ 1.034, 1.031, 1.028, 1.024, 1.022, 1.021, 1.018, 1.017, 1.016, 1.015, 1.014, 1.013, 1.012, 1.011, 1.011, 1.012, 1.012, 1.013, 1.014, 1.015, 1.017, 1.018, 1.021, 1.022, 1.025, 1.028, 1.032, 1.035, 1.038, 1.041, 1.044, 1.048,
+ 1.032, 1.031, 1.027, 1.023, 1.021, 1.019, 1.017, 1.016, 1.015, 1.014, 1.013, 1.012, 1.011, 1.011, 1.011, 1.011, 1.012, 1.012, 1.013, 1.014, 1.016, 1.018, 1.019, 1.021, 1.024, 1.027, 1.031, 1.033, 1.037, 1.041, 1.043, 1.048,
+ 1.031, 1.029, 1.025, 1.023, 1.021, 1.019, 1.017, 1.015, 1.014, 1.013, 1.012, 1.011, 1.011, 1.009, 1.009, 1.009, 1.011, 1.012, 1.012, 1.013, 1.015, 1.017, 1.019, 1.021, 1.023, 1.027, 1.031, 1.033, 1.036, 1.041, 1.043, 1.048,
+ 1.031, 1.029, 1.025, 1.023, 1.021, 1.018, 1.016, 1.015, 1.014, 1.012, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.011, 1.011, 1.012, 1.014, 1.015, 1.017, 1.019, 1.021, 1.023, 1.027, 1.031, 1.032, 1.036, 1.041, 1.043, 1.047,
+ 1.029, 1.027, 1.025, 1.022, 1.021, 1.018, 1.015, 1.014, 1.013, 1.012, 1.012, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.012, 1.014, 1.015, 1.017, 1.019, 1.021, 1.024, 1.028, 1.031, 1.033, 1.036, 1.041, 1.045, 1.048,
+ 1.029, 1.027, 1.024, 1.022, 1.021, 1.018, 1.016, 1.014, 1.013, 1.012, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.013, 1.014, 1.015, 1.016, 1.018, 1.021, 1.024, 1.027, 1.031, 1.033, 1.037, 1.041, 1.045, 1.047,
+ 1.029, 1.027, 1.024, 1.022, 1.021, 1.018, 1.016, 1.014, 1.013, 1.012, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.013, 1.013, 1.015, 1.016, 1.018, 1.021, 1.024, 1.027, 1.031, 1.034, 1.037, 1.041, 1.045, 1.048,
+ 1.029, 1.027, 1.024, 1.021, 1.021, 1.018, 1.016, 1.014, 1.013, 1.012, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.012, 1.013, 1.015, 1.016, 1.018, 1.019, 1.023, 1.027, 1.031, 1.033, 1.037, 1.039, 1.044, 1.049,
+ 1.029, 1.027, 1.023, 1.022, 1.021, 1.019, 1.016, 1.014, 1.013, 1.012, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.012, 1.013, 1.015, 1.016, 1.018, 1.021, 1.023, 1.028, 1.031, 1.034, 1.037, 1.039, 1.044, 1.049,
+ 1.029, 1.027, 1.024, 1.022, 1.021, 1.019, 1.017, 1.015, 1.013, 1.012, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.009, 1.011, 1.012, 1.014, 1.015, 1.017, 1.018, 1.021, 1.024, 1.028, 1.031, 1.034, 1.038, 1.041, 1.045, 1.049,
+ 1.031, 1.027, 1.025, 1.023, 1.022, 1.019, 1.018, 1.015, 1.014, 1.013, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.011, 1.011, 1.013, 1.014, 1.016, 1.017, 1.019, 1.021, 1.023, 1.028, 1.031, 1.034, 1.038, 1.041, 1.046, 1.051,
+ 1.031, 1.027, 1.025, 1.023, 1.022, 1.021, 1.018, 1.016, 1.014, 1.013, 1.012, 1.011, 1.011, 1.009, 1.011, 1.011, 1.011, 1.012, 1.013, 1.015, 1.016, 1.018, 1.019, 1.021, 1.024, 1.028, 1.032, 1.035, 1.039, 1.041, 1.046, 1.051,
+ 1.031, 1.028, 1.025, 1.023, 1.023, 1.019, 1.018, 1.016, 1.014, 1.014, 1.013, 1.012, 1.011, 1.011, 1.011, 1.011, 1.011, 1.012, 1.013, 1.015, 1.017, 1.018, 1.021, 1.022, 1.025, 1.028, 1.032, 1.035, 1.039, 1.043, 1.047, 1.051,
+ 1.031, 1.028, 1.025, 1.024, 1.023, 1.021, 1.018, 1.017, 1.015, 1.014, 1.013, 1.012, 1.011, 1.011, 1.011, 1.012, 1.012, 1.012, 1.014, 1.015, 1.018, 1.019, 1.021, 1.023, 1.026, 1.029, 1.033, 1.037, 1.041, 1.044, 1.048, 1.052,
+ 1.031, 1.028, 1.025, 1.024, 1.023, 1.022, 1.019, 1.017, 1.015, 1.015, 1.013, 1.012, 1.012, 1.012, 1.012, 1.013, 1.013, 1.014, 1.014, 1.017, 1.019, 1.019, 1.022, 1.024, 1.027, 1.031, 1.034, 1.038, 1.041, 1.046, 1.051, 1.055,
+ 1.031, 1.029, 1.026, 1.025, 1.023, 1.022, 1.019, 1.017, 1.016, 1.015, 1.014, 1.013, 1.012, 1.012, 1.013, 1.013, 1.014, 1.015, 1.016, 1.018, 1.019, 1.021, 1.023, 1.025, 1.028, 1.032, 1.035, 1.038, 1.042, 1.047, 1.052, 1.056,
+ 1.033, 1.031, 1.027, 1.025, 1.024, 1.023, 1.021, 1.019, 1.017, 1.016, 1.015, 1.014, 1.014, 1.013, 1.014, 1.014, 1.015, 1.016, 1.017, 1.019, 1.021, 1.022, 1.025, 1.027, 1.029, 1.033, 1.036, 1.039, 1.044, 1.048, 1.053, 1.056,
+ 1.036, 1.032, 1.029, 1.027, 1.026, 1.025, 1.022, 1.021, 1.019, 1.018, 1.017, 1.016, 1.015, 1.014, 1.015, 1.016, 1.017, 1.017, 1.018, 1.021, 1.022, 1.024, 1.027, 1.029, 1.031, 1.035, 1.038, 1.041, 1.046, 1.049, 1.054, 1.058,
+ 1.038, 1.035, 1.031, 1.029, 1.028, 1.026, 1.025, 1.022, 1.021, 1.019, 1.019, 1.018, 1.017, 1.016, 1.016, 1.017, 1.018, 1.019, 1.021, 1.022, 1.024, 1.025, 1.028, 1.031, 1.034, 1.036, 1.041, 1.043, 1.049, 1.052, 1.057, 1.059,
+ 1.041, 1.037, 1.034, 1.031, 1.029, 1.028, 1.027, 1.024, 1.022, 1.021, 1.021, 1.019, 1.019, 1.018, 1.018, 1.019, 1.019, 1.021, 1.022, 1.024, 1.025, 1.028, 1.031, 1.033, 1.035, 1.038, 1.041, 1.045, 1.051, 1.055, 1.059, 1.063,
+ 1.043, 1.039, 1.036, 1.033, 1.031, 1.029, 1.028, 1.027, 1.024, 1.023, 1.022, 1.021, 1.021, 1.021, 1.021, 1.021, 1.021, 1.022, 1.024, 1.026, 1.028, 1.029, 1.032, 1.035, 1.037, 1.039, 1.044, 1.049, 1.054, 1.058, 1.063, 1.066,
+ 1.045, 1.043, 1.038, 1.034, 1.032, 1.031, 1.029, 1.029, 1.027, 1.026, 1.024, 1.023, 1.022, 1.021, 1.021, 1.022, 1.022, 1.024, 1.026, 1.028, 1.029, 1.032, 1.034, 1.036, 1.039, 1.042, 1.047, 1.049, 1.056, 1.061, 1.064, 1.067,
+ 1.048, 1.043, 1.039, 1.035, 1.033, 1.031, 1.031, 1.029, 1.028, 1.027, 1.026, 1.026, 1.024, 1.023, 1.023, 1.023, 1.024, 1.025, 1.027, 1.029, 1.031, 1.033, 1.035, 1.038, 1.039, 1.044, 1.047, 1.053, 1.058, 1.063, 1.066, 1.071,
+ 1.049, 1.045, 1.041, 1.038, 1.034, 1.032, 1.031, 1.031, 1.029, 1.028, 1.027, 1.027, 1.026, 1.024, 1.024, 1.024, 1.025, 1.027, 1.028, 1.029, 1.032, 1.034, 1.036, 1.039, 1.042, 1.046, 1.051, 1.055, 1.061, 1.064, 1.069, 1.072,
+ 1.051, 1.049, 1.044, 1.041, 1.036, 1.033, 1.032, 1.031, 1.031, 1.029, 1.028, 1.028, 1.027, 1.027, 1.025, 1.025, 1.026, 1.028, 1.029, 1.031, 1.033, 1.034, 1.038, 1.039, 1.043, 1.048, 1.053, 1.058, 1.062, 1.064, 1.071, 1.074
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.028, 1.028, 1.022, 1.014, 1.008, 1.006, 1.006, 1.005, 1.004, 1.003, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.002, 1.003, 1.004, 1.006, 1.008, 1.009, 1.011, 1.015, 1.018, 1.021, 1.028, 1.034, 1.039, 1.044, 1.044,
+ 1.038, 1.031, 1.025, 1.023, 1.022, 1.021, 1.021, 1.021, 1.019, 1.019, 1.017, 1.016, 1.015, 1.015, 1.015, 1.016, 1.017, 1.018, 1.019, 1.019, 1.021, 1.023, 1.024, 1.027, 1.028, 1.031, 1.034, 1.038, 1.042, 1.047, 1.054, 1.058,
+ 1.043, 1.038, 1.031, 1.024, 1.023, 1.022, 1.021, 1.021, 1.021, 1.019, 1.018, 1.017, 1.016, 1.016, 1.017, 1.017, 1.018, 1.018, 1.019, 1.021, 1.022, 1.024, 1.026, 1.028, 1.031, 1.033, 1.037, 1.041, 1.047, 1.053, 1.058, 1.062,
+ 1.043, 1.037, 1.029, 1.024, 1.022, 1.021, 1.021, 1.019, 1.019, 1.019, 1.017, 1.016, 1.016, 1.016, 1.016, 1.017, 1.018, 1.018, 1.019, 1.021, 1.022, 1.024, 1.026, 1.029, 1.031, 1.034, 1.038, 1.042, 1.046, 1.052, 1.058, 1.062,
+ 1.041, 1.036, 1.029, 1.024, 1.022, 1.021, 1.019, 1.019, 1.018, 1.017, 1.016, 1.015, 1.015, 1.015, 1.016, 1.016, 1.016, 1.017, 1.018, 1.021, 1.022, 1.024, 1.026, 1.028, 1.031, 1.033, 1.037, 1.042, 1.047, 1.051, 1.058, 1.062,
+ 1.039, 1.034, 1.028, 1.023, 1.021, 1.019, 1.018, 1.018, 1.017, 1.016, 1.015, 1.015, 1.014, 1.014, 1.014, 1.015, 1.016, 1.016, 1.017, 1.019, 1.022, 1.024, 1.025, 1.028, 1.031, 1.033, 1.037, 1.041, 1.047, 1.051, 1.058, 1.062,
+ 1.039, 1.033, 1.027, 1.022, 1.019, 1.018, 1.017, 1.017, 1.016, 1.015, 1.014, 1.014, 1.013, 1.013, 1.013, 1.013, 1.015, 1.015, 1.016, 1.019, 1.021, 1.023, 1.025, 1.027, 1.031, 1.033, 1.037, 1.041, 1.048, 1.051, 1.057, 1.062,
+ 1.038, 1.032, 1.026, 1.021, 1.018, 1.017, 1.016, 1.015, 1.014, 1.014, 1.013, 1.012, 1.012, 1.012, 1.012, 1.012, 1.013, 1.014, 1.016, 1.017, 1.019, 1.022, 1.023, 1.026, 1.029, 1.033, 1.037, 1.041, 1.048, 1.052, 1.058, 1.063,
+ 1.037, 1.031, 1.026, 1.021, 1.018, 1.016, 1.015, 1.014, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.011, 1.011, 1.012, 1.014, 1.015, 1.016, 1.018, 1.021, 1.023, 1.026, 1.028, 1.032, 1.037, 1.042, 1.048, 1.053, 1.059, 1.066,
+ 1.037, 1.029, 1.025, 1.021, 1.018, 1.016, 1.014, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.009, 1.011, 1.011, 1.012, 1.013, 1.014, 1.016, 1.018, 1.021, 1.023, 1.026, 1.028, 1.033, 1.037, 1.042, 1.049, 1.053, 1.061, 1.066,
+ 1.035, 1.029, 1.024, 1.019, 1.017, 1.015, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.009, 1.009, 1.009, 1.011, 1.012, 1.013, 1.014, 1.016, 1.018, 1.021, 1.023, 1.026, 1.028, 1.034, 1.037, 1.042, 1.049, 1.054, 1.061, 1.067,
+ 1.034, 1.029, 1.023, 1.019, 1.017, 1.014, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.009, 1.009, 1.009, 1.011, 1.011, 1.012, 1.014, 1.016, 1.019, 1.021, 1.024, 1.027, 1.029, 1.034, 1.039, 1.042, 1.049, 1.054, 1.062, 1.067,
+ 1.034, 1.029, 1.023, 1.019, 1.017, 1.014, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.009, 1.009, 1.009, 1.009, 1.011, 1.012, 1.015, 1.016, 1.018, 1.021, 1.024, 1.027, 1.029, 1.034, 1.038, 1.043, 1.049, 1.055, 1.062, 1.067,
+ 1.035, 1.029, 1.023, 1.019, 1.018, 1.015, 1.013, 1.013, 1.012, 1.012, 1.011, 1.011, 1.011, 1.009, 1.009, 1.011, 1.012, 1.013, 1.015, 1.017, 1.019, 1.021, 1.024, 1.028, 1.031, 1.034, 1.039, 1.043, 1.051, 1.056, 1.064, 1.069,
+ 1.035, 1.031, 1.023, 1.019, 1.018, 1.017, 1.014, 1.013, 1.012, 1.012, 1.012, 1.011, 1.009, 1.009, 1.009, 1.011, 1.012, 1.013, 1.015, 1.017, 1.019, 1.021, 1.024, 1.027, 1.031, 1.035, 1.041, 1.044, 1.051, 1.057, 1.064, 1.071,
+ 1.036, 1.032, 1.023, 1.021, 1.019, 1.017, 1.015, 1.014, 1.013, 1.013, 1.012, 1.011, 1.011, 1.011, 1.011, 1.011, 1.012, 1.013, 1.016, 1.017, 1.019, 1.021, 1.023, 1.027, 1.031, 1.036, 1.041, 1.045, 1.051, 1.057, 1.066, 1.072,
+ 1.037, 1.032, 1.025, 1.021, 1.019, 1.018, 1.017, 1.014, 1.013, 1.013, 1.013, 1.012, 1.011, 1.011, 1.011, 1.012, 1.013, 1.014, 1.016, 1.017, 1.019, 1.022, 1.024, 1.027, 1.031, 1.036, 1.041, 1.045, 1.051, 1.057, 1.066, 1.073,
+ 1.038, 1.032, 1.025, 1.023, 1.021, 1.019, 1.017, 1.015, 1.014, 1.014, 1.013, 1.013, 1.012, 1.011, 1.012, 1.012, 1.014, 1.014, 1.016, 1.019, 1.021, 1.022, 1.025, 1.027, 1.031, 1.036, 1.041, 1.047, 1.052, 1.058, 1.066, 1.074,
+ 1.039, 1.033, 1.026, 1.024, 1.022, 1.021, 1.018, 1.016, 1.015, 1.015, 1.014, 1.014, 1.013, 1.013, 1.013, 1.014, 1.014, 1.015, 1.017, 1.021, 1.022, 1.023, 1.026, 1.028, 1.032, 1.036, 1.041, 1.047, 1.053, 1.059, 1.067, 1.076,
+ 1.041, 1.034, 1.026, 1.025, 1.023, 1.021, 1.019, 1.017, 1.016, 1.015, 1.015, 1.014, 1.014, 1.014, 1.014, 1.014, 1.015, 1.016, 1.018, 1.021, 1.023, 1.026, 1.027, 1.029, 1.033, 1.038, 1.041, 1.048, 1.054, 1.061, 1.069, 1.077,
+ 1.041, 1.034, 1.027, 1.025, 1.024, 1.022, 1.021, 1.018, 1.016, 1.016, 1.015, 1.015, 1.014, 1.015, 1.015, 1.016, 1.017, 1.017, 1.021, 1.021, 1.024, 1.027, 1.029, 1.032, 1.034, 1.039, 1.043, 1.049, 1.056, 1.062, 1.071, 1.077,
+ 1.041, 1.034, 1.028, 1.025, 1.024, 1.022, 1.021, 1.019, 1.018, 1.017, 1.017, 1.016, 1.016, 1.016, 1.016, 1.017, 1.018, 1.019, 1.021, 1.023, 1.026, 1.029, 1.031, 1.034, 1.036, 1.041, 1.046, 1.051, 1.058, 1.063, 1.071, 1.078,
+ 1.042, 1.034, 1.029, 1.026, 1.025, 1.024, 1.021, 1.019, 1.019, 1.018, 1.018, 1.017, 1.017, 1.017, 1.018, 1.019, 1.019, 1.021, 1.022, 1.024, 1.027, 1.029, 1.033, 1.035, 1.038, 1.042, 1.047, 1.054, 1.061, 1.067, 1.074, 1.079,
+ 1.043, 1.036, 1.031, 1.027, 1.026, 1.025, 1.023, 1.022, 1.021, 1.021, 1.019, 1.019, 1.019, 1.018, 1.019, 1.021, 1.021, 1.022, 1.024, 1.026, 1.029, 1.033, 1.035, 1.037, 1.041, 1.044, 1.049, 1.056, 1.062, 1.067, 1.077, 1.081,
+ 1.045, 1.038, 1.034, 1.029, 1.028, 1.026, 1.025, 1.023, 1.023, 1.022, 1.021, 1.021, 1.019, 1.019, 1.021, 1.022, 1.023, 1.024, 1.026, 1.028, 1.032, 1.035, 1.037, 1.039, 1.042, 1.047, 1.052, 1.057, 1.064, 1.069, 1.078, 1.083,
+ 1.047, 1.041, 1.036, 1.032, 1.029, 1.028, 1.028, 1.026, 1.026, 1.025, 1.024, 1.023, 1.022, 1.022, 1.023, 1.023, 1.026, 1.027, 1.028, 1.031, 1.035, 1.037, 1.039, 1.043, 1.046, 1.051, 1.055, 1.062, 1.067, 1.074, 1.082, 1.085,
+ 1.049, 1.043, 1.038, 1.035, 1.032, 1.031, 1.029, 1.028, 1.027, 1.027, 1.027, 1.026, 1.026, 1.026, 1.026, 1.027, 1.028, 1.029, 1.032, 1.034, 1.037, 1.039, 1.042, 1.046, 1.048, 1.053, 1.059, 1.064, 1.071, 1.078, 1.085, 1.088,
+ 1.052, 1.048, 1.041, 1.037, 1.035, 1.033, 1.033, 1.032, 1.031, 1.031, 1.029, 1.028, 1.028, 1.028, 1.029, 1.029, 1.031, 1.032, 1.035, 1.036, 1.039, 1.042, 1.046, 1.048, 1.052, 1.055, 1.061, 1.067, 1.075, 1.082, 1.088, 1.091,
+ 1.056, 1.051, 1.043, 1.038, 1.037, 1.035, 1.034, 1.034, 1.034, 1.033, 1.032, 1.031, 1.029, 1.031, 1.031, 1.031, 1.033, 1.035, 1.036, 1.039, 1.042, 1.045, 1.048, 1.051, 1.054, 1.059, 1.065, 1.069, 1.081, 1.085, 1.092, 1.097,
+ 1.059, 1.053, 1.047, 1.041, 1.038, 1.036, 1.035, 1.035, 1.035, 1.035, 1.034, 1.033, 1.032, 1.032, 1.032, 1.033, 1.035, 1.037, 1.039, 1.042, 1.043, 1.047, 1.049, 1.053, 1.056, 1.061, 1.067, 1.072, 1.083, 1.088, 1.095, 1.101,
+ 1.062, 1.056, 1.048, 1.043, 1.039, 1.037, 1.037, 1.037, 1.037, 1.037, 1.036, 1.035, 1.034, 1.034, 1.035, 1.036, 1.038, 1.039, 1.041, 1.043, 1.046, 1.049, 1.051, 1.054, 1.059, 1.065, 1.071, 1.076, 1.085, 1.091, 1.097, 1.105,
+ 1.064, 1.062, 1.053, 1.046, 1.041, 1.039, 1.038, 1.038, 1.039, 1.039, 1.038, 1.037, 1.038, 1.036, 1.036, 1.038, 1.039, 1.041, 1.042, 1.044, 1.048, 1.049, 1.053, 1.057, 1.061, 1.065, 1.073, 1.081, 1.087, 1.093, 1.101, 1.106
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.006, 1.006, 1.001, 1.001, 1.007, 1.014, 1.021, 1.026, 1.029, 1.031, 1.035, 1.038, 1.042, 1.043, 1.043, 1.045, 1.045, 1.046, 1.046, 1.048, 1.048, 1.048, 1.047, 1.046, 1.045, 1.044, 1.043, 1.042, 1.044, 1.053, 1.065, 1.071,
+ 1.026, 1.019, 1.018, 1.018, 1.021, 1.025, 1.033, 1.039, 1.046, 1.051, 1.053, 1.056, 1.059, 1.061, 1.063, 1.065, 1.067, 1.068, 1.069, 1.069, 1.069, 1.069, 1.068, 1.067, 1.066, 1.065, 1.062, 1.062, 1.063, 1.065, 1.072, 1.079,
+ 1.029, 1.026, 1.023, 1.023, 1.026, 1.033, 1.039, 1.046, 1.051, 1.054, 1.056, 1.059, 1.061, 1.064, 1.066, 1.068, 1.071, 1.071, 1.072, 1.073, 1.074, 1.074, 1.072, 1.071, 1.069, 1.068, 1.067, 1.065, 1.066, 1.069, 1.078, 1.089,
+ 1.032, 1.029, 1.026, 1.026, 1.029, 1.037, 1.042, 1.049, 1.053, 1.055, 1.059, 1.061, 1.062, 1.065, 1.067, 1.069, 1.072, 1.074, 1.075, 1.076, 1.077, 1.078, 1.078, 1.076, 1.074, 1.072, 1.069, 1.068, 1.068, 1.071, 1.079, 1.089,
+ 1.035, 1.032, 1.029, 1.029, 1.033, 1.039, 1.046, 1.052, 1.055, 1.057, 1.061, 1.062, 1.064, 1.066, 1.068, 1.071, 1.075, 1.075, 1.077, 1.079, 1.081, 1.082, 1.082, 1.081, 1.077, 1.075, 1.073, 1.071, 1.069, 1.072, 1.081, 1.092,
+ 1.035, 1.033, 1.029, 1.029, 1.035, 1.039, 1.047, 1.053, 1.056, 1.059, 1.062, 1.064, 1.065, 1.067, 1.069, 1.072, 1.075, 1.077, 1.079, 1.081, 1.082, 1.084, 1.084, 1.083, 1.081, 1.077, 1.075, 1.074, 1.073, 1.075, 1.081, 1.093,
+ 1.033, 1.032, 1.031, 1.032, 1.036, 1.041, 1.049, 1.053, 1.058, 1.059, 1.062, 1.064, 1.066, 1.068, 1.071, 1.072, 1.074, 1.077, 1.079, 1.082, 1.084, 1.085, 1.086, 1.085, 1.084, 1.081, 1.077, 1.076, 1.075, 1.077, 1.082, 1.093,
+ 1.034, 1.033, 1.032, 1.034, 1.038, 1.043, 1.048, 1.054, 1.058, 1.061, 1.063, 1.065, 1.067, 1.069, 1.071, 1.073, 1.074, 1.077, 1.079, 1.082, 1.084, 1.087, 1.087, 1.087, 1.086, 1.083, 1.081, 1.079, 1.078, 1.079, 1.084, 1.095,
+ 1.034, 1.033, 1.033, 1.034, 1.039, 1.044, 1.049, 1.053, 1.058, 1.061, 1.063, 1.065, 1.067, 1.069, 1.071, 1.073, 1.074, 1.076, 1.079, 1.083, 1.086, 1.088, 1.089, 1.089, 1.087, 1.085, 1.083, 1.081, 1.081, 1.082, 1.088, 1.096,
+ 1.035, 1.035, 1.034, 1.035, 1.039, 1.045, 1.049, 1.053, 1.058, 1.061, 1.062, 1.065, 1.067, 1.069, 1.071, 1.072, 1.074, 1.076, 1.079, 1.083, 1.087, 1.089, 1.091, 1.089, 1.089, 1.086, 1.084, 1.083, 1.082, 1.084, 1.089, 1.098,
+ 1.036, 1.034, 1.034, 1.036, 1.039, 1.046, 1.051, 1.054, 1.058, 1.061, 1.063, 1.065, 1.067, 1.069, 1.071, 1.073, 1.075, 1.077, 1.079, 1.085, 1.089, 1.092, 1.092, 1.091, 1.091, 1.087, 1.085, 1.083, 1.083, 1.085, 1.089, 1.099,
+ 1.039, 1.035, 1.034, 1.036, 1.041, 1.047, 1.049, 1.054, 1.059, 1.062, 1.063, 1.065, 1.067, 1.069, 1.072, 1.074, 1.076, 1.079, 1.081, 1.086, 1.091, 1.093, 1.093, 1.092, 1.091, 1.089, 1.087, 1.085, 1.085, 1.086, 1.091, 1.101,
+ 1.039, 1.037, 1.035, 1.035, 1.042, 1.047, 1.049, 1.055, 1.059, 1.063, 1.065, 1.066, 1.067, 1.069, 1.074, 1.076, 1.078, 1.079, 1.083, 1.086, 1.091, 1.094, 1.095, 1.095, 1.092, 1.091, 1.089, 1.087, 1.086, 1.087, 1.091, 1.103,
+ 1.041, 1.038, 1.036, 1.036, 1.044, 1.049, 1.052, 1.055, 1.059, 1.064, 1.066, 1.067, 1.069, 1.072, 1.074, 1.077, 1.079, 1.081, 1.083, 1.087, 1.091, 1.095, 1.097, 1.097, 1.095, 1.092, 1.091, 1.088, 1.087, 1.089, 1.094, 1.104,
+ 1.044, 1.039, 1.039, 1.039, 1.046, 1.049, 1.053, 1.056, 1.061, 1.065, 1.067, 1.068, 1.071, 1.074, 1.076, 1.078, 1.079, 1.081, 1.083, 1.087, 1.092, 1.096, 1.098, 1.099, 1.097, 1.095, 1.093, 1.091, 1.088, 1.089, 1.097, 1.106,
+ 1.046, 1.043, 1.039, 1.041, 1.046, 1.052, 1.053, 1.056, 1.061, 1.065, 1.068, 1.069, 1.072, 1.075, 1.077, 1.079, 1.079, 1.081, 1.083, 1.088, 1.092, 1.097, 1.099, 1.099, 1.098, 1.096, 1.094, 1.092, 1.089, 1.091, 1.099, 1.107,
+ 1.048, 1.045, 1.042, 1.042, 1.046, 1.052, 1.055, 1.058, 1.061, 1.065, 1.069, 1.071, 1.073, 1.076, 1.078, 1.079, 1.082, 1.083, 1.085, 1.089, 1.093, 1.098, 1.099, 1.099, 1.098, 1.097, 1.095, 1.092, 1.091, 1.092, 1.101, 1.109,
+ 1.049, 1.046, 1.043, 1.044, 1.047, 1.053, 1.055, 1.059, 1.063, 1.065, 1.069, 1.071, 1.073, 1.077, 1.079, 1.082, 1.083, 1.085, 1.086, 1.091, 1.094, 1.098, 1.101, 1.101, 1.098, 1.097, 1.095, 1.093, 1.093, 1.095, 1.102, 1.111,
+ 1.054, 1.048, 1.046, 1.046, 1.047, 1.054, 1.058, 1.062, 1.064, 1.066, 1.071, 1.073, 1.075, 1.078, 1.082, 1.084, 1.085, 1.086, 1.089, 1.092, 1.096, 1.099, 1.101, 1.102, 1.101, 1.099, 1.096, 1.094, 1.094, 1.097, 1.104, 1.115,
+ 1.053, 1.049, 1.047, 1.046, 1.049, 1.056, 1.061, 1.065, 1.066, 1.069, 1.072, 1.075, 1.077, 1.081, 1.083, 1.084, 1.086, 1.088, 1.091, 1.094, 1.098, 1.101, 1.103, 1.103, 1.103, 1.101, 1.099, 1.096, 1.096, 1.099, 1.106, 1.117,
+ 1.053, 1.051, 1.047, 1.047, 1.051, 1.058, 1.065, 1.066, 1.069, 1.071, 1.074, 1.076, 1.078, 1.082, 1.084, 1.085, 1.088, 1.091, 1.094, 1.097, 1.101, 1.102, 1.104, 1.104, 1.103, 1.102, 1.101, 1.098, 1.098, 1.099, 1.108, 1.118,
+ 1.053, 1.051, 1.048, 1.048, 1.051, 1.058, 1.065, 1.068, 1.071, 1.073, 1.075, 1.076, 1.079, 1.083, 1.084, 1.087, 1.089, 1.092, 1.096, 1.099, 1.102, 1.104, 1.105, 1.106, 1.105, 1.104, 1.101, 1.099, 1.099, 1.103, 1.109, 1.118,
+ 1.055, 1.051, 1.049, 1.048, 1.051, 1.057, 1.065, 1.069, 1.071, 1.074, 1.076, 1.078, 1.081, 1.084, 1.087, 1.088, 1.092, 1.095, 1.098, 1.101, 1.104, 1.106, 1.107, 1.108, 1.107, 1.106, 1.104, 1.103, 1.103, 1.106, 1.113, 1.121,
+ 1.058, 1.051, 1.049, 1.049, 1.051, 1.057, 1.064, 1.069, 1.073, 1.076, 1.078, 1.081, 1.084, 1.086, 1.088, 1.092, 1.095, 1.098, 1.099, 1.103, 1.106, 1.108, 1.111, 1.111, 1.111, 1.109, 1.107, 1.106, 1.106, 1.111, 1.115, 1.125,
+ 1.061, 1.053, 1.051, 1.051, 1.053, 1.059, 1.065, 1.071, 1.074, 1.078, 1.081, 1.084, 1.086, 1.088, 1.092, 1.096, 1.098, 1.099, 1.102, 1.105, 1.107, 1.109, 1.111, 1.112, 1.113, 1.112, 1.109, 1.109, 1.109, 1.112, 1.121, 1.134,
+ 1.064, 1.055, 1.052, 1.052, 1.054, 1.061, 1.065, 1.072, 1.077, 1.081, 1.084, 1.086, 1.088, 1.091, 1.096, 1.097, 1.099, 1.102, 1.104, 1.107, 1.109, 1.111, 1.112, 1.113, 1.114, 1.114, 1.114, 1.113, 1.112, 1.116, 1.125, 1.137,
+ 1.064, 1.059, 1.054, 1.054, 1.057, 1.062, 1.067, 1.073, 1.079, 1.081, 1.085, 1.087, 1.089, 1.093, 1.097, 1.099, 1.103, 1.104, 1.106, 1.109, 1.111, 1.113, 1.113, 1.114, 1.114, 1.116, 1.116, 1.116, 1.117, 1.122, 1.133, 1.143,
+ 1.069, 1.062, 1.057, 1.057, 1.059, 1.063, 1.068, 1.074, 1.079, 1.082, 1.086, 1.089, 1.091, 1.095, 1.098, 1.102, 1.104, 1.106, 1.109, 1.111, 1.113, 1.114, 1.114, 1.115, 1.116, 1.118, 1.119, 1.121, 1.123, 1.129, 1.142, 1.151,
+ 1.071, 1.065, 1.059, 1.058, 1.061, 1.065, 1.069, 1.074, 1.079, 1.083, 1.087, 1.091, 1.092, 1.095, 1.099, 1.103, 1.105, 1.108, 1.109, 1.111, 1.113, 1.114, 1.115, 1.116, 1.118, 1.119, 1.122, 1.124, 1.129, 1.134, 1.148, 1.161,
+ 1.075, 1.066, 1.059, 1.059, 1.061, 1.065, 1.069, 1.073, 1.081, 1.085, 1.089, 1.092, 1.094, 1.097, 1.101, 1.104, 1.106, 1.109, 1.111, 1.112, 1.113, 1.115, 1.117, 1.118, 1.119, 1.121, 1.124, 1.127, 1.132, 1.138, 1.156, 1.171,
+ 1.076, 1.069, 1.061, 1.059, 1.061, 1.066, 1.069, 1.073, 1.081, 1.085, 1.089, 1.094, 1.095, 1.098, 1.102, 1.105, 1.108, 1.109, 1.111, 1.112, 1.115, 1.116, 1.118, 1.119, 1.121, 1.123, 1.126, 1.129, 1.135, 1.144, 1.161, 1.173,
+ 1.082, 1.075, 1.064, 1.059, 1.061, 1.066, 1.069, 1.074, 1.079, 1.087, 1.092, 1.094, 1.096, 1.099, 1.103, 1.105, 1.108, 1.109, 1.112, 1.114, 1.115, 1.117, 1.119, 1.119, 1.121, 1.124, 1.129, 1.131, 1.137, 1.148, 1.165, 1.182
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.002, 1.002, 1.001, 1.002, 1.004, 1.007, 1.009, 1.013, 1.014, 1.015, 1.017, 1.019, 1.021, 1.021, 1.022, 1.022, 1.022, 1.022, 1.022, 1.022, 1.022, 1.022, 1.022, 1.021, 1.019, 1.018, 1.017, 1.014, 1.015, 1.015, 1.015, 1.014,
+ 1.021, 1.018, 1.018, 1.017, 1.019, 1.021, 1.024, 1.026, 1.029, 1.031, 1.033, 1.035, 1.037, 1.038, 1.039, 1.039, 1.041, 1.041, 1.041, 1.041, 1.041, 1.041, 1.039, 1.038, 1.037, 1.036, 1.034, 1.033, 1.032, 1.033, 1.033, 1.034,
+ 1.022, 1.021, 1.019, 1.019, 1.021, 1.024, 1.026, 1.028, 1.032, 1.033, 1.035, 1.037, 1.038, 1.039, 1.041, 1.041, 1.042, 1.042, 1.042, 1.043, 1.042, 1.042, 1.042, 1.041, 1.039, 1.038, 1.037, 1.035, 1.034, 1.034, 1.035, 1.037,
+ 1.023, 1.022, 1.021, 1.021, 1.023, 1.026, 1.028, 1.031, 1.033, 1.035, 1.037, 1.038, 1.039, 1.041, 1.042, 1.043, 1.044, 1.044, 1.045, 1.044, 1.044, 1.044, 1.044, 1.043, 1.041, 1.039, 1.039, 1.036, 1.035, 1.035, 1.035, 1.038,
+ 1.024, 1.023, 1.023, 1.023, 1.025, 1.027, 1.029, 1.033, 1.034, 1.037, 1.039, 1.039, 1.041, 1.042, 1.044, 1.045, 1.045, 1.045, 1.046, 1.047, 1.047, 1.047, 1.046, 1.045, 1.043, 1.041, 1.039, 1.037, 1.035, 1.035, 1.037, 1.039,
+ 1.025, 1.024, 1.024, 1.025, 1.027, 1.028, 1.031, 1.033, 1.036, 1.038, 1.039, 1.041, 1.043, 1.044, 1.046, 1.046, 1.046, 1.047, 1.048, 1.049, 1.049, 1.049, 1.048, 1.047, 1.046, 1.043, 1.041, 1.038, 1.036, 1.036, 1.037, 1.041,
+ 1.024, 1.025, 1.025, 1.026, 1.027, 1.029, 1.031, 1.033, 1.036, 1.039, 1.041, 1.043, 1.044, 1.045, 1.047, 1.048, 1.048, 1.049, 1.049, 1.051, 1.051, 1.049, 1.049, 1.049, 1.047, 1.045, 1.042, 1.039, 1.038, 1.037, 1.038, 1.039,
+ 1.025, 1.025, 1.026, 1.027, 1.028, 1.029, 1.031, 1.033, 1.037, 1.039, 1.042, 1.043, 1.045, 1.046, 1.048, 1.048, 1.049, 1.049, 1.051, 1.051, 1.051, 1.051, 1.051, 1.049, 1.048, 1.046, 1.043, 1.041, 1.038, 1.037, 1.038, 1.041,
+ 1.024, 1.025, 1.027, 1.027, 1.028, 1.029, 1.032, 1.034, 1.036, 1.039, 1.042, 1.044, 1.045, 1.047, 1.048, 1.049, 1.049, 1.051, 1.051, 1.051, 1.052, 1.052, 1.052, 1.049, 1.048, 1.046, 1.044, 1.042, 1.041, 1.038, 1.038, 1.041,
+ 1.024, 1.025, 1.027, 1.028, 1.029, 1.031, 1.032, 1.034, 1.038, 1.041, 1.043, 1.045, 1.046, 1.047, 1.049, 1.049, 1.049, 1.051, 1.051, 1.052, 1.054, 1.053, 1.053, 1.051, 1.049, 1.047, 1.044, 1.042, 1.041, 1.039, 1.039, 1.042,
+ 1.025, 1.025, 1.027, 1.028, 1.029, 1.031, 1.032, 1.035, 1.039, 1.041, 1.044, 1.045, 1.046, 1.048, 1.049, 1.051, 1.051, 1.051, 1.052, 1.054, 1.054, 1.055, 1.053, 1.052, 1.049, 1.047, 1.044, 1.042, 1.041, 1.039, 1.041, 1.042,
+ 1.026, 1.026, 1.026, 1.028, 1.029, 1.031, 1.033, 1.036, 1.039, 1.042, 1.044, 1.045, 1.047, 1.048, 1.051, 1.051, 1.052, 1.052, 1.053, 1.054, 1.055, 1.055, 1.054, 1.052, 1.051, 1.049, 1.045, 1.042, 1.039, 1.039, 1.041, 1.042,
+ 1.027, 1.026, 1.026, 1.028, 1.029, 1.032, 1.033, 1.036, 1.039, 1.042, 1.045, 1.046, 1.047, 1.049, 1.052, 1.053, 1.053, 1.054, 1.054, 1.054, 1.055, 1.055, 1.055, 1.053, 1.051, 1.049, 1.046, 1.043, 1.039, 1.039, 1.041, 1.043,
+ 1.027, 1.027, 1.027, 1.028, 1.029, 1.032, 1.034, 1.036, 1.039, 1.043, 1.045, 1.047, 1.048, 1.051, 1.052, 1.053, 1.054, 1.054, 1.054, 1.055, 1.055, 1.056, 1.056, 1.055, 1.052, 1.051, 1.047, 1.044, 1.041, 1.039, 1.041, 1.043,
+ 1.028, 1.028, 1.028, 1.028, 1.029, 1.032, 1.033, 1.036, 1.038, 1.044, 1.046, 1.048, 1.049, 1.052, 1.053, 1.053, 1.054, 1.054, 1.055, 1.055, 1.056, 1.056, 1.057, 1.056, 1.053, 1.051, 1.048, 1.044, 1.042, 1.041, 1.042, 1.043,
+ 1.028, 1.028, 1.028, 1.028, 1.031, 1.032, 1.033, 1.035, 1.038, 1.043, 1.046, 1.048, 1.051, 1.053, 1.053, 1.054, 1.055, 1.055, 1.055, 1.055, 1.056, 1.057, 1.058, 1.056, 1.054, 1.052, 1.049, 1.045, 1.043, 1.042, 1.042, 1.044,
+ 1.029, 1.028, 1.027, 1.028, 1.031, 1.032, 1.033, 1.036, 1.038, 1.043, 1.046, 1.049, 1.051, 1.053, 1.054, 1.055, 1.055, 1.055, 1.055, 1.055, 1.056, 1.057, 1.057, 1.056, 1.053, 1.052, 1.049, 1.045, 1.042, 1.042, 1.043, 1.045,
+ 1.029, 1.028, 1.028, 1.029, 1.031, 1.033, 1.034, 1.036, 1.039, 1.042, 1.047, 1.048, 1.051, 1.053, 1.055, 1.056, 1.056, 1.055, 1.055, 1.055, 1.057, 1.057, 1.057, 1.057, 1.055, 1.052, 1.049, 1.046, 1.043, 1.043, 1.044, 1.045,
+ 1.031, 1.029, 1.028, 1.029, 1.031, 1.033, 1.035, 1.037, 1.039, 1.042, 1.046, 1.048, 1.051, 1.052, 1.055, 1.056, 1.056, 1.056, 1.056, 1.056, 1.057, 1.057, 1.057, 1.057, 1.055, 1.053, 1.049, 1.046, 1.044, 1.043, 1.044, 1.047,
+ 1.031, 1.029, 1.029, 1.029, 1.031, 1.033, 1.036, 1.037, 1.039, 1.042, 1.046, 1.048, 1.051, 1.052, 1.054, 1.055, 1.056, 1.056, 1.056, 1.057, 1.058, 1.058, 1.058, 1.057, 1.056, 1.054, 1.051, 1.047, 1.045, 1.044, 1.045, 1.047,
+ 1.031, 1.029, 1.029, 1.029, 1.031, 1.033, 1.036, 1.037, 1.039, 1.042, 1.045, 1.047, 1.051, 1.052, 1.054, 1.055, 1.056, 1.056, 1.057, 1.057, 1.058, 1.057, 1.058, 1.056, 1.055, 1.053, 1.051, 1.047, 1.045, 1.044, 1.044, 1.047,
+ 1.031, 1.029, 1.029, 1.031, 1.031, 1.032, 1.035, 1.038, 1.039, 1.042, 1.045, 1.048, 1.051, 1.052, 1.053, 1.055, 1.056, 1.056, 1.057, 1.057, 1.058, 1.058, 1.057, 1.056, 1.055, 1.053, 1.051, 1.048, 1.045, 1.044, 1.045, 1.048,
+ 1.031, 1.029, 1.029, 1.029, 1.031, 1.032, 1.034, 1.039, 1.041, 1.042, 1.045, 1.047, 1.049, 1.052, 1.053, 1.055, 1.055, 1.056, 1.057, 1.057, 1.058, 1.058, 1.057, 1.056, 1.055, 1.054, 1.051, 1.048, 1.047, 1.045, 1.046, 1.048,
+ 1.031, 1.029, 1.028, 1.029, 1.031, 1.032, 1.034, 1.037, 1.041, 1.043, 1.045, 1.047, 1.049, 1.052, 1.054, 1.055, 1.056, 1.056, 1.057, 1.057, 1.058, 1.058, 1.058, 1.057, 1.056, 1.054, 1.051, 1.049, 1.047, 1.046, 1.047, 1.048,
+ 1.029, 1.029, 1.028, 1.029, 1.031, 1.032, 1.035, 1.037, 1.039, 1.042, 1.045, 1.048, 1.049, 1.052, 1.054, 1.055, 1.055, 1.056, 1.056, 1.057, 1.058, 1.058, 1.058, 1.057, 1.056, 1.055, 1.052, 1.049, 1.047, 1.047, 1.047, 1.048,
+ 1.031, 1.029, 1.028, 1.029, 1.031, 1.032, 1.035, 1.037, 1.039, 1.042, 1.045, 1.047, 1.049, 1.052, 1.054, 1.055, 1.056, 1.056, 1.056, 1.057, 1.058, 1.058, 1.058, 1.058, 1.057, 1.055, 1.054, 1.051, 1.049, 1.048, 1.049, 1.051,
+ 1.031, 1.029, 1.029, 1.029, 1.031, 1.032, 1.035, 1.037, 1.041, 1.042, 1.045, 1.047, 1.049, 1.051, 1.053, 1.055, 1.056, 1.056, 1.056, 1.057, 1.057, 1.058, 1.058, 1.057, 1.056, 1.055, 1.054, 1.052, 1.051, 1.049, 1.051, 1.051,
+ 1.032, 1.031, 1.029, 1.029, 1.031, 1.032, 1.035, 1.037, 1.041, 1.042, 1.044, 1.046, 1.048, 1.051, 1.053, 1.054, 1.055, 1.056, 1.056, 1.056, 1.056, 1.056, 1.057, 1.056, 1.056, 1.055, 1.054, 1.052, 1.052, 1.051, 1.052, 1.054,
+ 1.034, 1.031, 1.031, 1.029, 1.031, 1.032, 1.034, 1.036, 1.041, 1.042, 1.043, 1.045, 1.047, 1.049, 1.052, 1.053, 1.055, 1.055, 1.056, 1.056, 1.056, 1.056, 1.056, 1.056, 1.056, 1.055, 1.054, 1.053, 1.053, 1.053, 1.053, 1.054,
+ 1.034, 1.033, 1.029, 1.029, 1.031, 1.032, 1.034, 1.036, 1.039, 1.042, 1.044, 1.045, 1.047, 1.049, 1.051, 1.052, 1.054, 1.055, 1.055, 1.055, 1.056, 1.056, 1.056, 1.056, 1.055, 1.055, 1.055, 1.055, 1.054, 1.054, 1.055, 1.056,
+ 1.034, 1.033, 1.029, 1.029, 1.031, 1.032, 1.033, 1.036, 1.039, 1.042, 1.044, 1.046, 1.047, 1.049, 1.051, 1.053, 1.054, 1.055, 1.055, 1.056, 1.056, 1.056, 1.056, 1.056, 1.055, 1.055, 1.054, 1.055, 1.055, 1.054, 1.055, 1.057,
+ 1.034, 1.032, 1.031, 1.029, 1.029, 1.032, 1.034, 1.037, 1.039, 1.042, 1.045, 1.046, 1.047, 1.049, 1.052, 1.054, 1.054, 1.055, 1.056, 1.056, 1.056, 1.056, 1.056, 1.055, 1.054, 1.054, 1.054, 1.055, 1.054, 1.055, 1.056, 1.057
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.367, 2.251, 2.061, 1.909, 1.781, 1.674, 1.582, 1.506, 1.441, 1.382, 1.329, 1.287, 1.266, 1.256, 1.255, 1.255, 1.255, 1.259, 1.273, 1.309, 1.355, 1.411, 1.469, 1.541, 1.625, 1.723, 1.838, 1.975, 2.139, 2.338, 2.589, 2.717,
+ 2.305, 2.152, 1.974, 1.831, 1.706, 1.604, 1.518, 1.443, 1.387, 1.343, 1.296, 1.255, 1.231, 1.213, 1.203, 1.203, 1.206, 1.221, 1.244, 1.279, 1.325, 1.364, 1.411, 1.481, 1.559, 1.653, 1.763, 1.895, 2.051, 2.238, 2.473, 2.641,
+ 2.249, 2.099, 1.925, 1.784, 1.665, 1.564, 1.479, 1.407, 1.347, 1.296, 1.255, 1.225, 1.199, 1.182, 1.172, 1.172, 1.178, 1.191, 1.215, 1.244, 1.279, 1.325, 1.378, 1.445, 1.522, 1.614, 1.719, 1.847, 1.998, 2.181, 2.406, 2.573,
+ 2.201, 2.048, 1.881, 1.743, 1.628, 1.529, 1.446, 1.376, 1.316, 1.266, 1.225, 1.198, 1.171, 1.152, 1.143, 1.143, 1.153, 1.165, 1.191, 1.215, 1.252, 1.297, 1.351, 1.413, 1.489, 1.577, 1.682, 1.804, 1.951, 2.129, 2.347, 2.513,
+ 2.156, 2.004, 1.842, 1.706, 1.594, 1.497, 1.416, 1.346, 1.287, 1.238, 1.199, 1.171, 1.143, 1.125, 1.117, 1.117, 1.127, 1.139, 1.165, 1.191, 1.227, 1.272, 1.324, 1.387, 1.459, 1.545, 1.646, 1.766, 1.909, 2.081, 2.294, 2.461,
+ 2.116, 1.963, 1.807, 1.674, 1.562, 1.467, 1.388, 1.321, 1.262, 1.214, 1.174, 1.143, 1.119, 1.099, 1.092, 1.092, 1.103, 1.116, 1.139, 1.167, 1.205, 1.249, 1.301, 1.362, 1.432, 1.515, 1.614, 1.731, 1.869, 2.039, 2.246, 2.413,
+ 2.082, 1.929, 1.774, 1.644, 1.535, 1.442, 1.364, 1.298, 1.241, 1.192, 1.152, 1.119, 1.099, 1.078, 1.069, 1.069, 1.078, 1.098, 1.116, 1.146, 1.184, 1.229, 1.281, 1.341, 1.409, 1.489, 1.585, 1.699, 1.834, 2.001, 2.205, 2.374,
+ 2.054, 1.898, 1.745, 1.619, 1.513, 1.422, 1.344, 1.277, 1.221, 1.172, 1.132, 1.099, 1.078, 1.059, 1.051, 1.051, 1.058, 1.078, 1.098, 1.128, 1.167, 1.212, 1.264, 1.323, 1.389, 1.467, 1.562, 1.674, 1.805, 1.969, 2.171, 2.339,
+ 2.031, 1.872, 1.722, 1.598, 1.493, 1.403, 1.327, 1.261, 1.203, 1.156, 1.114, 1.082, 1.059, 1.044, 1.034, 1.034, 1.044, 1.058, 1.081, 1.113, 1.151, 1.198, 1.249, 1.308, 1.373, 1.449, 1.543, 1.655, 1.799, 1.942, 2.141, 2.312,
+ 2.011, 1.849, 1.704, 1.581, 1.476, 1.387, 1.311, 1.245, 1.189, 1.141, 1.101, 1.068, 1.044, 1.031, 1.019, 1.019, 1.032, 1.044, 1.068, 1.099, 1.138, 1.184, 1.238, 1.295, 1.359, 1.435, 1.526, 1.639, 1.782, 1.924, 2.115, 2.287,
+ 1.996, 1.833, 1.687, 1.565, 1.462, 1.374, 1.299, 1.233, 1.177, 1.128, 1.087, 1.055, 1.031, 1.019, 1.008, 1.009, 1.019, 1.033, 1.057, 1.089, 1.128, 1.174, 1.227, 1.283, 1.347, 1.422, 1.512, 1.621, 1.764, 1.905, 2.091, 2.269,
+ 1.985, 1.819, 1.675, 1.553, 1.451, 1.363, 1.289, 1.223, 1.167, 1.119, 1.078, 1.046, 1.022, 1.007, 1.003, 1.007, 1.009, 1.024, 1.049, 1.081, 1.119, 1.166, 1.218, 1.275, 1.339, 1.413, 1.502, 1.606, 1.742, 1.885, 2.075, 2.258,
+ 1.979, 1.809, 1.666, 1.546, 1.442, 1.356, 1.281, 1.215, 1.159, 1.112, 1.071, 1.039, 1.015, 1.001, 1.001, 1.003, 1.009, 1.019, 1.043, 1.075, 1.114, 1.159, 1.212, 1.268, 1.332, 1.407, 1.496, 1.599, 1.722, 1.875, 2.064, 2.249,
+ 1.976, 1.803, 1.661, 1.541, 1.437, 1.351, 1.276, 1.211, 1.156, 1.107, 1.067, 1.035, 1.011, 1.001, 1.001, 1.003, 1.009, 1.018, 1.039, 1.071, 1.111, 1.156, 1.207, 1.265, 1.329, 1.404, 1.492, 1.594, 1.717, 1.869, 2.059, 2.247,
+ 1.976, 1.801, 1.659, 1.538, 1.436, 1.348, 1.274, 1.209, 1.153, 1.106, 1.066, 1.034, 1.011, 1.001, 1.001, 1.004, 1.011, 1.018, 1.039, 1.071, 1.109, 1.155, 1.207, 1.264, 1.329, 1.404, 1.492, 1.593, 1.716, 1.868, 2.059, 2.247,
+ 1.976, 1.801, 1.659, 1.538, 1.436, 1.348, 1.274, 1.209, 1.153, 1.106, 1.066, 1.034, 1.011, 1.003, 1.003, 1.005, 1.011, 1.019, 1.041, 1.071, 1.109, 1.155, 1.207, 1.264, 1.329, 1.404, 1.493, 1.594, 1.716, 1.869, 2.059, 2.247,
+ 1.989, 1.809, 1.663, 1.542, 1.439, 1.351, 1.277, 1.212, 1.156, 1.108, 1.069, 1.038, 1.014, 1.006, 1.005, 1.008, 1.014, 1.023, 1.044, 1.075, 1.113, 1.158, 1.209, 1.267, 1.333, 1.408, 1.497, 1.599, 1.722, 1.875, 2.066, 2.251,
+ 1.997, 1.818, 1.669, 1.547, 1.444, 1.356, 1.282, 1.215, 1.161, 1.113, 1.075, 1.043, 1.019, 1.009, 1.008, 1.011, 1.016, 1.027, 1.049, 1.079, 1.117, 1.163, 1.215, 1.273, 1.338, 1.414, 1.503, 1.607, 1.731, 1.884, 2.073, 2.258,
+ 2.003, 1.827, 1.681, 1.558, 1.453, 1.365, 1.289, 1.225, 1.169, 1.122, 1.083, 1.051, 1.028, 1.018, 1.013, 1.016, 1.021, 1.035, 1.057, 1.087, 1.126, 1.171, 1.224, 1.281, 1.347, 1.424, 1.514, 1.617, 1.743, 1.896, 2.087, 2.268,
+ 2.011, 1.843, 1.696, 1.571, 1.465, 1.377, 1.302, 1.236, 1.179, 1.132, 1.093, 1.062, 1.039, 1.028, 1.021, 1.021, 1.032, 1.044, 1.067, 1.098, 1.136, 1.181, 1.233, 1.291, 1.359, 1.436, 1.526, 1.632, 1.758, 1.913, 2.104, 2.283,
+ 2.021, 1.863, 1.715, 1.588, 1.481, 1.392, 1.316, 1.249, 1.193, 1.145, 1.106, 1.075, 1.053, 1.039, 1.032, 1.032, 1.044, 1.057, 1.081, 1.111, 1.149, 1.194, 1.245, 1.304, 1.372, 1.452, 1.541, 1.649, 1.777, 1.932, 2.126, 2.299,
+ 2.042, 1.887, 1.736, 1.608, 1.501, 1.409, 1.333, 1.266, 1.209, 1.162, 1.123, 1.091, 1.071, 1.053, 1.049, 1.049, 1.057, 1.075, 1.095, 1.125, 1.163, 1.209, 1.259, 1.319, 1.389, 1.469, 1.561, 1.671, 1.799, 1.957, 2.156, 2.324,
+ 2.072, 1.916, 1.762, 1.631, 1.522, 1.429, 1.352, 1.285, 1.228, 1.179, 1.141, 1.109, 1.091, 1.071, 1.067, 1.067, 1.075, 1.095, 1.112, 1.143, 1.181, 1.227, 1.276, 1.338, 1.408, 1.489, 1.583, 1.694, 1.827, 1.987, 2.187, 2.354,
+ 2.104, 1.949, 1.791, 1.659, 1.548, 1.453, 1.375, 1.308, 1.248, 1.201, 1.162, 1.132, 1.109, 1.092, 1.088, 1.088, 1.096, 1.112, 1.134, 1.164, 1.202, 1.247, 1.297, 1.359, 1.432, 1.515, 1.611, 1.724, 1.858, 2.022, 2.225, 2.391,
+ 2.138, 1.985, 1.824, 1.689, 1.577, 1.482, 1.401, 1.332, 1.274, 1.225, 1.185, 1.158, 1.132, 1.116, 1.112, 1.112, 1.119, 1.134, 1.161, 1.186, 1.225, 1.271, 1.319, 1.384, 1.458, 1.542, 1.641, 1.757, 1.896, 2.064, 2.271, 2.436,
+ 2.179, 2.028, 1.862, 1.724, 1.611, 1.512, 1.429, 1.361, 1.301, 1.251, 1.212, 1.185, 1.158, 1.143, 1.138, 1.138, 1.145, 1.161, 1.186, 1.212, 1.251, 1.295, 1.346, 1.411, 1.487, 1.574, 1.675, 1.793, 1.936, 2.109, 2.321, 2.488,
+ 2.229, 2.075, 1.904, 1.764, 1.646, 1.547, 1.462, 1.391, 1.331, 1.281, 1.241, 1.212, 1.186, 1.172, 1.167, 1.167, 1.174, 1.189, 1.212, 1.242, 1.278, 1.323, 1.375, 1.443, 1.521, 1.609, 1.713, 1.836, 1.982, 2.159, 2.379, 2.546,
+ 2.283, 2.131, 1.954, 1.808, 1.687, 1.584, 1.499, 1.425, 1.364, 1.313, 1.276, 1.241, 1.218, 1.202, 1.197, 1.197, 1.205, 1.221, 1.242, 1.276, 1.308, 1.354, 1.408, 1.478, 1.558, 1.649, 1.756, 1.884, 2.034, 2.216, 2.446, 2.612,
+ 2.346, 2.191, 2.011, 1.859, 1.733, 1.628, 1.539, 1.465, 1.401, 1.349, 1.313, 1.276, 1.253, 1.237, 1.232, 1.232, 1.239, 1.254, 1.276, 1.308, 1.344, 1.389, 1.447, 1.517, 1.598, 1.695, 1.805, 1.937, 2.094, 2.282, 2.521, 2.688,
+ 2.417, 2.263, 2.071, 1.915, 1.785, 1.676, 1.584, 1.508, 1.443, 1.391, 1.349, 1.314, 1.291, 1.275, 1.269, 1.269, 1.276, 1.291, 1.313, 1.344, 1.384, 1.429, 1.489, 1.562, 1.646, 1.743, 1.859, 1.996, 2.157, 2.355, 2.607, 2.772,
+ 2.497, 2.338, 2.139, 1.976, 1.842, 1.729, 1.635, 1.555, 1.488, 1.433, 1.389, 1.355, 1.331, 1.316, 1.309, 1.309, 1.316, 1.331, 1.353, 1.383, 1.424, 1.473, 1.535, 1.609, 1.696, 1.798, 1.918, 2.061, 2.228, 2.436, 2.699, 2.868,
+ 2.585, 2.391, 2.186, 2.019, 1.881, 1.765, 1.669, 1.588, 1.519, 1.464, 1.421, 1.385, 1.355, 1.336, 1.335, 1.335, 1.336, 1.353, 1.382, 1.413, 1.454, 1.504, 1.567, 1.644, 1.733, 1.836, 1.958, 2.106, 2.278, 2.496, 2.765, 2.979
+ ],
+ "sigma": 0.00094,
+ "sigma_Cb": 0.00164
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2698,
+ "ccm":
+ [
+ 1.57242, -0.32752, -0.24489,
+ -0.61284, 1.70498, -0.09215,
+ -0.43411, 0.48072, 0.95338
+ ]
+ },
+ {
+ "ct": 2930,
+ "ccm":
+ [
+ 1.69569, -0.52958, -0.16612,
+ -0.67108, 1.78452, -0.11343,
+ -0.41759, 0.54607, 0.87152
+ ]
+ },
+ {
+ "ct": 3643,
+ "ccm":
+ [
+ 1.72576, -0.72422, -0.00153,
+ -0.45949, 1.40534, 0.05415,
+ -0.14492, -0.79825, 1.94317
+ ]
+ },
+ {
+ "ct": 4605,
+ "ccm":
+ [
+ 1.49944, -0.41939, -0.08005,
+ -0.39248, 1.69456, -0.30208,
+ 0.01559, -0.88541, 1.86981
+ ]
+ },
+ {
+ "ct": 5658,
+ "ccm":
+ [
+ 1.38807, -0.23217, -0.15589,
+ -0.37464, 1.70299, -0.32835,
+ -0.01316, -0.72039, 1.73355
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.cac": { }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "night": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+}
diff --git a/src/ipa/rpi/pisp/data/imx462.json b/src/ipa/rpi/pisp/data/imx462.json
new file mode 100644
index 00000000..20ca1a66
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx462.json
@@ -0,0 +1,342 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "description": "This is an interim tuning only. Please consider doing a more formal tuning for your application.",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 6813,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 890,
+ "reference_Y": 12900
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.67
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 187,
+ "slope": 0.00842
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "speed": 0.2,
+ "metering_modes":
+ {
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ },
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 10, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 10, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.16
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.7,
+ "luminance_lut":
+ [
+ 2.844, 2.604, 2.365, 2.2, 2.039, 1.916, 1.799, 1.707, 1.622, 1.552, 1.487, 1.435, 1.389, 1.356, 1.332, 1.317, 1.31, 1.308, 1.313, 1.324, 1.344, 1.37, 1.41, 1.454, 1.508, 1.567, 1.641, 1.719, 1.82, 1.925, 2.073, 2.221,
+ 2.749, 2.521, 2.294, 2.134, 1.979, 1.861, 1.749, 1.661, 1.578, 1.511, 1.448, 1.398, 1.354, 1.322, 1.3, 1.285, 1.278, 1.277, 1.281, 1.292, 1.311, 1.336, 1.374, 1.416, 1.469, 1.526, 1.596, 1.671, 1.77, 1.872, 2.019, 2.166,
+ 2.654, 2.438, 2.223, 2.069, 1.919, 1.807, 1.7, 1.614, 1.534, 1.469, 1.409, 1.361, 1.318, 1.288, 1.267, 1.254, 1.247, 1.245, 1.25, 1.259, 1.277, 1.302, 1.338, 1.379, 1.43, 1.485, 1.552, 1.623, 1.719, 1.819, 1.965, 2.112,
+ 2.563, 2.359, 2.155, 2.007, 1.863, 1.755, 1.653, 1.571, 1.493, 1.43, 1.372, 1.325, 1.284, 1.256, 1.236, 1.223, 1.217, 1.216, 1.219, 1.229, 1.246, 1.269, 1.305, 1.344, 1.393, 1.446, 1.51, 1.578, 1.672, 1.77, 1.914, 2.059,
+ 2.494, 2.299, 2.103, 1.961, 1.822, 1.718, 1.619, 1.538, 1.461, 1.399, 1.343, 1.298, 1.259, 1.232, 1.213, 1.2, 1.194, 1.193, 1.196, 1.205, 1.222, 1.245, 1.279, 1.318, 1.365, 1.416, 1.481, 1.549, 1.641, 1.735, 1.875, 2.015,
+ 2.425, 2.238, 2.05, 1.914, 1.782, 1.681, 1.585, 1.505, 1.429, 1.369, 1.314, 1.271, 1.234, 1.208, 1.189, 1.177, 1.171, 1.169, 1.173, 1.182, 1.198, 1.221, 1.254, 1.292, 1.338, 1.387, 1.452, 1.519, 1.609, 1.701, 1.836, 1.971,
+ 2.363, 2.183, 2.003, 1.873, 1.746, 1.648, 1.555, 1.477, 1.401, 1.342, 1.289, 1.247, 1.212, 1.187, 1.168, 1.156, 1.149, 1.148, 1.152, 1.16, 1.177, 1.198, 1.231, 1.267, 1.312, 1.36, 1.425, 1.492, 1.58, 1.671, 1.802, 1.932,
+ 2.314, 2.14, 1.965, 1.839, 1.716, 1.622, 1.532, 1.454, 1.38, 1.322, 1.27, 1.229, 1.195, 1.169, 1.149, 1.137, 1.129, 1.128, 1.132, 1.142, 1.158, 1.18, 1.21, 1.245, 1.289, 1.336, 1.401, 1.469, 1.557, 1.649, 1.776, 1.903,
+ 2.264, 2.096, 1.927, 1.805, 1.687, 1.596, 1.509, 1.432, 1.358, 1.301, 1.251, 1.211, 1.177, 1.151, 1.131, 1.117, 1.109, 1.108, 1.113, 1.123, 1.14, 1.161, 1.19, 1.222, 1.265, 1.313, 1.378, 1.445, 1.534, 1.626, 1.75, 1.874,
+ 2.225, 2.061, 1.897, 1.778, 1.663, 1.574, 1.489, 1.414, 1.341, 1.285, 1.235, 1.196, 1.163, 1.136, 1.115, 1.1, 1.091, 1.089, 1.095, 1.106, 1.124, 1.145, 1.174, 1.205, 1.248, 1.294, 1.359, 1.427, 1.516, 1.606, 1.728, 1.849,
+ 2.193, 2.033, 1.872, 1.756, 1.642, 1.556, 1.473, 1.399, 1.327, 1.272, 1.224, 1.185, 1.15, 1.123, 1.1, 1.084, 1.074, 1.072, 1.078, 1.09, 1.11, 1.133, 1.161, 1.193, 1.234, 1.28, 1.345, 1.413, 1.501, 1.59, 1.709, 1.828,
+ 2.161, 2.004, 1.848, 1.734, 1.622, 1.537, 1.457, 1.384, 1.313, 1.26, 1.212, 1.173, 1.138, 1.11, 1.085, 1.068, 1.057, 1.055, 1.062, 1.075, 1.096, 1.12, 1.148, 1.18, 1.221, 1.266, 1.331, 1.399, 1.486, 1.574, 1.69, 1.807,
+ 2.14, 1.986, 1.832, 1.719, 1.609, 1.525, 1.445, 1.373, 1.304, 1.251, 1.204, 1.165, 1.129, 1.1, 1.074, 1.055, 1.043, 1.041, 1.049, 1.063, 1.086, 1.11, 1.14, 1.172, 1.212, 1.258, 1.323, 1.39, 1.477, 1.566, 1.679, 1.792,
+ 2.123, 1.971, 1.819, 1.707, 1.598, 1.514, 1.434, 1.364, 1.296, 1.243, 1.197, 1.158, 1.122, 1.091, 1.064, 1.044, 1.031, 1.027, 1.036, 1.052, 1.076, 1.102, 1.132, 1.165, 1.206, 1.251, 1.316, 1.383, 1.471, 1.56, 1.67, 1.78,
+ 2.106, 1.956, 1.806, 1.695, 1.587, 1.504, 1.424, 1.354, 1.288, 1.236, 1.19, 1.15, 1.114, 1.083, 1.055, 1.033, 1.018, 1.014, 1.024, 1.04, 1.066, 1.094, 1.124, 1.158, 1.199, 1.245, 1.309, 1.376, 1.465, 1.555, 1.661, 1.767,
+ 2.104, 1.955, 1.805, 1.694, 1.586, 1.502, 1.422, 1.352, 1.285, 1.234, 1.188, 1.149, 1.113, 1.081, 1.053, 1.031, 1.014, 1.011, 1.021, 1.038, 1.064, 1.091, 1.122, 1.156, 1.198, 1.244, 1.308, 1.376, 1.465, 1.555, 1.66, 1.766,
+ 2.104, 1.955, 1.806, 1.695, 1.586, 1.502, 1.421, 1.351, 1.284, 1.232, 1.187, 1.148, 1.112, 1.08, 1.051, 1.029, 1.012, 1.008, 1.02, 1.036, 1.062, 1.089, 1.12, 1.155, 1.197, 1.244, 1.308, 1.375, 1.465, 1.555, 1.661, 1.766,
+ 2.105, 1.956, 1.807, 1.696, 1.587, 1.502, 1.42, 1.35, 1.282, 1.231, 1.186, 1.148, 1.112, 1.08, 1.051, 1.028, 1.011, 1.007, 1.019, 1.036, 1.061, 1.088, 1.119, 1.154, 1.197, 1.244, 1.308, 1.376, 1.466, 1.557, 1.662, 1.767,
+ 2.121, 1.97, 1.818, 1.705, 1.595, 1.508, 1.424, 1.353, 1.286, 1.236, 1.191, 1.153, 1.118, 1.087, 1.059, 1.038, 1.022, 1.018, 1.028, 1.044, 1.067, 1.093, 1.124, 1.158, 1.201, 1.248, 1.314, 1.383, 1.474, 1.567, 1.672, 1.777,
+ 2.137, 1.983, 1.829, 1.715, 1.603, 1.514, 1.428, 1.357, 1.291, 1.24, 1.196, 1.158, 1.123, 1.094, 1.068, 1.047, 1.033, 1.029, 1.038, 1.052, 1.074, 1.098, 1.128, 1.162, 1.205, 1.253, 1.32, 1.39, 1.483, 1.577, 1.682, 1.788,
+ 2.154, 1.998, 1.843, 1.726, 1.613, 1.522, 1.435, 1.364, 1.297, 1.246, 1.202, 1.164, 1.131, 1.102, 1.078, 1.059, 1.045, 1.041, 1.048, 1.061, 1.082, 1.105, 1.134, 1.167, 1.211, 1.259, 1.327, 1.399, 1.494, 1.588, 1.694, 1.8,
+ 2.176, 2.019, 1.862, 1.744, 1.628, 1.537, 1.449, 1.377, 1.309, 1.258, 1.213, 1.176, 1.143, 1.116, 1.092, 1.074, 1.061, 1.057, 1.063, 1.075, 1.094, 1.117, 1.146, 1.178, 1.222, 1.27, 1.34, 1.414, 1.509, 1.604, 1.711, 1.818,
+ 2.199, 2.04, 1.881, 1.761, 1.644, 1.552, 1.464, 1.391, 1.321, 1.269, 1.223, 1.187, 1.155, 1.129, 1.106, 1.09, 1.078, 1.074, 1.078, 1.088, 1.107, 1.128, 1.157, 1.189, 1.233, 1.281, 1.353, 1.428, 1.524, 1.62, 1.728, 1.836,
+ 2.228, 2.066, 1.904, 1.782, 1.662, 1.57, 1.482, 1.408, 1.337, 1.284, 1.237, 1.201, 1.17, 1.145, 1.123, 1.107, 1.096, 1.092, 1.095, 1.104, 1.121, 1.142, 1.17, 1.203, 1.247, 1.297, 1.37, 1.446, 1.542, 1.639, 1.75, 1.86,
+ 2.267, 2.099, 1.932, 1.807, 1.684, 1.592, 1.504, 1.428, 1.356, 1.302, 1.255, 1.219, 1.189, 1.164, 1.141, 1.125, 1.115, 1.111, 1.114, 1.123, 1.138, 1.158, 1.186, 1.22, 1.266, 1.318, 1.391, 1.467, 1.563, 1.661, 1.776, 1.891,
+ 2.305, 2.132, 1.96, 1.832, 1.707, 1.614, 1.526, 1.449, 1.375, 1.32, 1.272, 1.237, 1.208, 1.182, 1.16, 1.144, 1.135, 1.131, 1.134, 1.141, 1.155, 1.174, 1.203, 1.236, 1.285, 1.338, 1.412, 1.489, 1.585, 1.682, 1.802, 1.922,
+ 2.351, 2.173, 1.996, 1.864, 1.736, 1.641, 1.552, 1.474, 1.4, 1.344, 1.294, 1.258, 1.228, 1.203, 1.181, 1.165, 1.156, 1.152, 1.155, 1.162, 1.176, 1.195, 1.224, 1.259, 1.309, 1.365, 1.439, 1.516, 1.613, 1.711, 1.835, 1.96,
+ 2.4, 2.218, 2.036, 1.901, 1.768, 1.671, 1.58, 1.502, 1.428, 1.37, 1.319, 1.281, 1.249, 1.224, 1.203, 1.188, 1.178, 1.174, 1.177, 1.184, 1.197, 1.217, 1.248, 1.285, 1.337, 1.394, 1.469, 1.547, 1.644, 1.743, 1.873, 2.002,
+ 2.45, 2.264, 2.077, 1.938, 1.801, 1.702, 1.608, 1.53, 1.456, 1.397, 1.344, 1.304, 1.271, 1.245, 1.224, 1.21, 1.2, 1.196, 1.199, 1.206, 1.219, 1.239, 1.272, 1.311, 1.365, 1.424, 1.5, 1.578, 1.676, 1.776, 1.91, 2.044,
+ 2.513, 2.318, 2.124, 1.984, 1.848, 1.747, 1.652, 1.572, 1.496, 1.436, 1.383, 1.341, 1.303, 1.274, 1.253, 1.238, 1.228, 1.225, 1.228, 1.235, 1.248, 1.269, 1.303, 1.343, 1.4, 1.46, 1.537, 1.617, 1.718, 1.82, 1.962, 2.103,
+ 2.579, 2.376, 2.172, 2.032, 1.897, 1.796, 1.7, 1.617, 1.538, 1.479, 1.426, 1.38, 1.337, 1.306, 1.283, 1.267, 1.258, 1.254, 1.257, 1.265, 1.279, 1.3, 1.336, 1.377, 1.435, 1.497, 1.576, 1.658, 1.761, 1.867, 2.016, 2.165,
+ 2.645, 2.433, 2.22, 2.08, 1.946, 1.844, 1.747, 1.663, 1.581, 1.521, 1.468, 1.419, 1.371, 1.337, 1.313, 1.296, 1.287, 1.284, 1.287, 1.295, 1.309, 1.331, 1.368, 1.411, 1.471, 1.535, 1.615, 1.699, 1.805, 1.914, 2.071, 2.227
+ ],
+ "sigma": 0.005,
+ "sigma_Cb": 0.005
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 3900,
+ "ccm":
+ [
+ 1.54659, -0.17707, -0.36953,
+ -0.51471, 1.72733, -0.21262,
+ 0.06667, -0.92279, 1.85612
+ ]
+ }
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx477.json b/src/ipa/rpi/pisp/data/imx477.json
new file mode 100644
index 00000000..2fe04c21
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx477.json
@@ -0,0 +1,1186 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 12000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 740,
+ "reference_Y": 15051
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.809
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 204,
+ "slope": 0.0061
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2850.0, 0.4307, 0.3957,
+ 2960.0, 0.4159, 0.4313,
+ 3580.0, 0.3771, 0.5176,
+ 4559.0, 0.3031, 0.6573,
+ 5881.0, 0.2809, 0.6942,
+ 7600.0, 0.2263, 0.7762
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.02634,
+ "transverse_neg": 0.02255
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.359, 2.354, 2.351, 2.351, 2.343, 2.337, 2.331, 2.325, 2.323, 2.321, 2.317, 2.315, 2.313, 2.313, 2.311, 2.312, 2.312, 2.313, 2.315, 2.315, 2.316, 2.317, 2.319, 2.323, 2.326, 2.329, 2.332, 2.332, 2.335, 2.337, 2.352, 2.363,
+ 2.352, 2.351, 2.349, 2.346, 2.342, 2.334, 2.328, 2.324, 2.321, 2.317, 2.315, 2.314, 2.312, 2.311, 2.311, 2.311, 2.311, 2.311, 2.312, 2.314, 2.315, 2.316, 2.317, 2.319, 2.324, 2.326, 2.328, 2.329, 2.331, 2.337, 2.348, 2.355,
+ 2.346, 2.346, 2.345, 2.344, 2.338, 2.329, 2.325, 2.319, 2.316, 2.314, 2.311, 2.309, 2.308, 2.306, 2.304, 2.304, 2.305, 2.307, 2.308, 2.309, 2.311, 2.311, 2.313, 2.316, 2.319, 2.322, 2.325, 2.326, 2.328, 2.335, 2.343, 2.349,
+ 2.342, 2.342, 2.341, 2.338, 2.332, 2.326, 2.319, 2.316, 2.312, 2.309, 2.308, 2.305, 2.303, 2.302, 2.301, 2.301, 2.302, 2.303, 2.304, 2.305, 2.305, 2.307, 2.311, 2.313, 2.315, 2.319, 2.321, 2.325, 2.328, 2.333, 2.338, 2.348,
+ 2.337, 2.337, 2.337, 2.336, 2.331, 2.322, 2.317, 2.312, 2.309, 2.307, 2.304, 2.302, 2.299, 2.299, 2.298, 2.298, 2.299, 2.299, 2.301, 2.302, 2.302, 2.304, 2.305, 2.309, 2.314, 2.316, 2.321, 2.324, 2.326, 2.329, 2.335, 2.343,
+ 2.335, 2.334, 2.333, 2.333, 2.326, 2.318, 2.313, 2.309, 2.306, 2.302, 2.299, 2.297, 2.297, 2.296, 2.295, 2.295, 2.294, 2.295, 2.296, 2.298, 2.298, 2.301, 2.303, 2.305, 2.311, 2.315, 2.319, 2.323, 2.325, 2.329, 2.333, 2.339,
+ 2.329, 2.331, 2.329, 2.329, 2.325, 2.315, 2.309, 2.306, 2.302, 2.299, 2.297, 2.295, 2.293, 2.292, 2.291, 2.291, 2.291, 2.291, 2.293, 2.294, 2.296, 2.298, 2.301, 2.304, 2.307, 2.313, 2.317, 2.319, 2.323, 2.327, 2.331, 2.339,
+ 2.329, 2.328, 2.328, 2.328, 2.321, 2.313, 2.307, 2.303, 2.299, 2.295, 2.294, 2.292, 2.289, 2.289, 2.288, 2.288, 2.288, 2.289, 2.289, 2.292, 2.294, 2.295, 2.297, 2.301, 2.306, 2.311, 2.315, 2.318, 2.319, 2.323, 2.329, 2.335,
+ 2.326, 2.327, 2.325, 2.325, 2.319, 2.311, 2.305, 2.299, 2.296, 2.293, 2.291, 2.289, 2.288, 2.287, 2.285, 2.285, 2.286, 2.288, 2.288, 2.289, 2.291, 2.294, 2.295, 2.298, 2.304, 2.308, 2.313, 2.315, 2.317, 2.319, 2.327, 2.335,
+ 2.325, 2.325, 2.323, 2.323, 2.317, 2.309, 2.303, 2.298, 2.294, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.284, 2.284, 2.285, 2.287, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.305, 2.309, 2.313, 2.315, 2.317, 2.325, 2.334,
+ 2.322, 2.324, 2.322, 2.322, 2.316, 2.306, 2.301, 2.296, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.283, 2.283, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.293, 2.296, 2.301, 2.304, 2.308, 2.311, 2.312, 2.315, 2.323, 2.333,
+ 2.321, 2.323, 2.322, 2.322, 2.314, 2.306, 2.299, 2.294, 2.291, 2.288, 2.286, 2.285, 2.284, 2.282, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.306, 2.308, 2.311, 2.312, 2.322, 2.332,
+ 2.319, 2.321, 2.321, 2.321, 2.314, 2.305, 2.297, 2.293, 2.289, 2.287, 2.285, 2.284, 2.283, 2.281, 2.281, 2.281, 2.282, 2.283, 2.283, 2.285, 2.287, 2.289, 2.291, 2.292, 2.297, 2.301, 2.305, 2.307, 2.309, 2.312, 2.321, 2.333,
+ 2.319, 2.321, 2.319, 2.319, 2.314, 2.303, 2.296, 2.293, 2.289, 2.286, 2.285, 2.283, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.296, 2.301, 2.305, 2.307, 2.308, 2.312, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.296, 2.291, 2.289, 2.286, 2.284, 2.282, 2.281, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.287, 2.288, 2.291, 2.295, 2.299, 2.304, 2.306, 2.307, 2.311, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.287, 2.285, 2.282, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.284, 2.285, 2.286, 2.288, 2.291, 2.295, 2.299, 2.303, 2.306, 2.307, 2.312, 2.321, 2.331,
+ 2.318, 2.319, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.286, 2.285, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.285, 2.286, 2.287, 2.291, 2.294, 2.298, 2.303, 2.306, 2.307, 2.311, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.302, 2.297, 2.292, 2.289, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.287, 2.289, 2.294, 2.297, 2.303, 2.305, 2.308, 2.313, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.303, 2.299, 2.293, 2.291, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.288, 2.291, 2.294, 2.298, 2.304, 2.306, 2.308, 2.312, 2.322, 2.331,
+ 2.319, 2.321, 2.321, 2.321, 2.315, 2.305, 2.301, 2.295, 2.292, 2.289, 2.286, 2.285, 2.283, 2.282, 2.282, 2.282, 2.284, 2.283, 2.284, 2.284, 2.285, 2.287, 2.288, 2.291, 2.294, 2.299, 2.304, 2.306, 2.309, 2.313, 2.322, 2.334,
+ 2.321, 2.322, 2.322, 2.322, 2.317, 2.307, 2.301, 2.296, 2.292, 2.291, 2.288, 2.286, 2.285, 2.284, 2.283, 2.284, 2.285, 2.284, 2.285, 2.285, 2.287, 2.288, 2.289, 2.293, 2.297, 2.301, 2.305, 2.308, 2.311, 2.314, 2.323, 2.335,
+ 2.322, 2.324, 2.324, 2.324, 2.319, 2.309, 2.303, 2.297, 2.295, 2.292, 2.291, 2.288, 2.286, 2.286, 2.285, 2.286, 2.286, 2.286, 2.287, 2.288, 2.289, 2.289, 2.291, 2.294, 2.299, 2.302, 2.307, 2.311, 2.312, 2.316, 2.325, 2.335,
+ 2.324, 2.326, 2.325, 2.326, 2.321, 2.311, 2.305, 2.301, 2.297, 2.295, 2.293, 2.291, 2.289, 2.289, 2.288, 2.288, 2.287, 2.288, 2.289, 2.291, 2.292, 2.292, 2.295, 2.299, 2.301, 2.304, 2.309, 2.312, 2.315, 2.319, 2.327, 2.337,
+ 2.329, 2.329, 2.328, 2.328, 2.323, 2.315, 2.308, 2.304, 2.301, 2.298, 2.296, 2.294, 2.291, 2.291, 2.289, 2.291, 2.291, 2.291, 2.292, 2.293, 2.294, 2.295, 2.297, 2.299, 2.303, 2.308, 2.312, 2.315, 2.318, 2.321, 2.329, 2.339,
+ 2.329, 2.331, 2.332, 2.332, 2.326, 2.318, 2.311, 2.306, 2.304, 2.301, 2.299, 2.297, 2.295, 2.293, 2.292, 2.292, 2.292, 2.293, 2.294, 2.294, 2.296, 2.297, 2.299, 2.302, 2.306, 2.311, 2.315, 2.318, 2.319, 2.324, 2.332, 2.342,
+ 2.331, 2.333, 2.334, 2.334, 2.328, 2.321, 2.313, 2.308, 2.305, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.295, 2.294, 2.296, 2.296, 2.297, 2.298, 2.299, 2.302, 2.305, 2.308, 2.314, 2.317, 2.321, 2.323, 2.327, 2.334, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.309, 2.306, 2.304, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.309, 2.315, 2.319, 2.321, 2.324, 2.328, 2.337, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.311, 2.306, 2.304, 2.303, 2.302, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.311, 2.314, 2.319, 2.323, 2.325, 2.329, 2.339, 2.348,
+ 2.329, 2.329, 2.329, 2.331, 2.326, 2.319, 2.312, 2.309, 2.304, 2.303, 2.302, 2.301, 2.298, 2.295, 2.294, 2.294, 2.295, 2.295, 2.296, 2.297, 2.299, 2.301, 2.302, 2.304, 2.308, 2.313, 2.319, 2.322, 2.325, 2.329, 2.339, 2.351,
+ 2.329, 2.329, 2.329, 2.329, 2.326, 2.317, 2.311, 2.308, 2.303, 2.302, 2.301, 2.298, 2.296, 2.295, 2.294, 2.294, 2.294, 2.294, 2.296, 2.297, 2.298, 2.299, 2.301, 2.304, 2.307, 2.312, 2.318, 2.322, 2.326, 2.331, 2.341, 2.355,
+ 2.339, 2.332, 2.331, 2.331, 2.327, 2.323, 2.316, 2.309, 2.306, 2.302, 2.301, 2.299, 2.297, 2.296, 2.295, 2.294, 2.294, 2.296, 2.297, 2.297, 2.299, 2.301, 2.303, 2.306, 2.308, 2.317, 2.322, 2.325, 2.329, 2.341, 2.353, 2.361,
+ 2.347, 2.347, 2.345, 2.343, 2.338, 2.332, 2.326, 2.322, 2.321, 2.318, 2.316, 2.315, 2.313, 2.312, 2.311, 2.311, 2.311, 2.311, 2.312, 2.315, 2.317, 2.318, 2.319, 2.323, 2.324, 2.329, 2.334, 2.337, 2.344, 2.347, 2.361, 2.364
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.869, 3.852, 3.844, 3.842, 3.836, 3.821, 3.807, 3.796, 3.789, 3.784, 3.778, 3.775, 3.769, 3.768, 3.765, 3.765, 3.767, 3.769, 3.772, 3.774, 3.773, 3.775, 3.779, 3.787, 3.793, 3.801, 3.806, 3.804, 3.813, 3.819, 3.855, 3.879,
+ 3.854, 3.844, 3.837, 3.836, 3.824, 3.811, 3.797, 3.789, 3.784, 3.777, 3.774, 3.769, 3.764, 3.758, 3.757, 3.758, 3.758, 3.761, 3.763, 3.764, 3.765, 3.766, 3.772, 3.778, 3.787, 3.792, 3.794, 3.798, 3.802, 3.815, 3.839, 3.873,
+ 3.838, 3.831, 3.826, 3.823, 3.813, 3.799, 3.787, 3.781, 3.773, 3.768, 3.763, 3.759, 3.753, 3.749, 3.745, 3.745, 3.745, 3.752, 3.754, 3.757, 3.757, 3.759, 3.763, 3.769, 3.773, 3.781, 3.786, 3.792, 3.798, 3.811, 3.831, 3.861,
+ 3.833, 3.822, 3.817, 3.816, 3.804, 3.788, 3.779, 3.772, 3.766, 3.759, 3.755, 3.749, 3.744, 3.741, 3.738, 3.739, 3.739, 3.741, 3.743, 3.747, 3.749, 3.751, 3.756, 3.764, 3.769, 3.776, 3.783, 3.789, 3.798, 3.809, 3.821, 3.855,
+ 3.824, 3.818, 3.808, 3.808, 3.797, 3.781, 3.772, 3.764, 3.757, 3.752, 3.747, 3.743, 3.737, 3.735, 3.733, 3.733, 3.733, 3.735, 3.737, 3.738, 3.741, 3.746, 3.749, 3.755, 3.766, 3.771, 3.781, 3.789, 3.794, 3.806, 3.818, 3.849,
+ 3.815, 3.808, 3.799, 3.801, 3.787, 3.775, 3.767, 3.757, 3.751, 3.745, 3.738, 3.734, 3.732, 3.727, 3.725, 3.723, 3.722, 3.722, 3.726, 3.729, 3.734, 3.738, 3.744, 3.749, 3.759, 3.769, 3.781, 3.788, 3.792, 3.799, 3.811, 3.841,
+ 3.804, 3.799, 3.793, 3.793, 3.783, 3.771, 3.759, 3.751, 3.744, 3.735, 3.732, 3.727, 3.723, 3.721, 3.719, 3.716, 3.716, 3.716, 3.718, 3.722, 3.727, 3.731, 3.737, 3.746, 3.756, 3.767, 3.776, 3.782, 3.788, 3.795, 3.808, 3.831,
+ 3.802, 3.797, 3.787, 3.787, 3.779, 3.762, 3.753, 3.744, 3.734, 3.727, 3.725, 3.721, 3.716, 3.714, 3.709, 3.709, 3.711, 3.711, 3.712, 3.717, 3.722, 3.725, 3.731, 3.739, 3.752, 3.762, 3.772, 3.778, 3.779, 3.789, 3.798, 3.826,
+ 3.791, 3.789, 3.784, 3.784, 3.775, 3.759, 3.746, 3.735, 3.729, 3.724, 3.718, 3.714, 3.712, 3.707, 3.704, 3.704, 3.706, 3.708, 3.709, 3.711, 3.716, 3.722, 3.726, 3.735, 3.746, 3.754, 3.767, 3.774, 3.777, 3.781, 3.794, 3.824,
+ 3.789, 3.784, 3.779, 3.781, 3.771, 3.753, 3.741, 3.732, 3.725, 3.719, 3.715, 3.711, 3.707, 3.704, 3.701, 3.701, 3.702, 3.704, 3.708, 3.709, 3.713, 3.718, 3.724, 3.731, 3.742, 3.749, 3.761, 3.768, 3.772, 3.778, 3.791, 3.822,
+ 3.789, 3.781, 3.777, 3.777, 3.764, 3.749, 3.739, 3.729, 3.722, 3.718, 3.711, 3.708, 3.705, 3.701, 3.699, 3.699, 3.699, 3.701, 3.705, 3.707, 3.711, 3.715, 3.721, 3.727, 3.738, 3.746, 3.757, 3.763, 3.765, 3.773, 3.788, 3.821,
+ 3.785, 3.779, 3.774, 3.774, 3.764, 3.747, 3.736, 3.726, 3.719, 3.711, 3.709, 3.706, 3.701, 3.698, 3.696, 3.695, 3.695, 3.698, 3.702, 3.704, 3.707, 3.712, 3.718, 3.725, 3.734, 3.741, 3.753, 3.756, 3.759, 3.764, 3.784, 3.818,
+ 3.779, 3.776, 3.773, 3.773, 3.759, 3.744, 3.733, 3.724, 3.714, 3.709, 3.706, 3.704, 3.699, 3.696, 3.694, 3.694, 3.694, 3.697, 3.701, 3.703, 3.706, 3.709, 3.714, 3.721, 3.731, 3.737, 3.749, 3.753, 3.758, 3.762, 3.783, 3.819,
+ 3.779, 3.776, 3.769, 3.769, 3.757, 3.741, 3.729, 3.721, 3.712, 3.708, 3.705, 3.701, 3.697, 3.695, 3.694, 3.694, 3.695, 3.696, 3.698, 3.702, 3.705, 3.709, 3.712, 3.717, 3.728, 3.736, 3.749, 3.752, 3.756, 3.761, 3.781, 3.815,
+ 3.779, 3.773, 3.768, 3.768, 3.756, 3.738, 3.731, 3.719, 3.711, 3.707, 3.703, 3.698, 3.695, 3.694, 3.694, 3.695, 3.695, 3.695, 3.696, 3.702, 3.705, 3.708, 3.712, 3.717, 3.728, 3.736, 3.747, 3.751, 3.754, 3.761, 3.781, 3.815,
+ 3.782, 3.773, 3.767, 3.767, 3.755, 3.738, 3.728, 3.721, 3.711, 3.707, 3.701, 3.698, 3.695, 3.693, 3.694, 3.696, 3.695, 3.695, 3.695, 3.701, 3.703, 3.706, 3.711, 3.715, 3.726, 3.735, 3.745, 3.751, 3.754, 3.763, 3.779, 3.815,
+ 3.781, 3.771, 3.767, 3.767, 3.754, 3.739, 3.726, 3.721, 3.712, 3.706, 3.701, 3.698, 3.695, 3.693, 3.693, 3.695, 3.695, 3.695, 3.696, 3.698, 3.703, 3.705, 3.709, 3.715, 3.725, 3.734, 3.745, 3.751, 3.755, 3.762, 3.783, 3.818,
+ 3.781, 3.774, 3.767, 3.767, 3.755, 3.741, 3.729, 3.722, 3.712, 3.708, 3.701, 3.699, 3.695, 3.693, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.725, 3.732, 3.746, 3.751, 3.756, 3.763, 3.783, 3.821,
+ 3.781, 3.774, 3.769, 3.769, 3.756, 3.741, 3.731, 3.724, 3.713, 3.711, 3.707, 3.699, 3.697, 3.694, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.724, 3.734, 3.747, 3.751, 3.756, 3.765, 3.784, 3.821,
+ 3.784, 3.776, 3.773, 3.773, 3.759, 3.742, 3.733, 3.726, 3.719, 3.711, 3.709, 3.703, 3.698, 3.695, 3.694, 3.695, 3.697, 3.696, 3.698, 3.699, 3.703, 3.706, 3.711, 3.714, 3.727, 3.735, 3.746, 3.751, 3.757, 3.766, 3.787, 3.822,
+ 3.786, 3.783, 3.774, 3.774, 3.766, 3.747, 3.737, 3.727, 3.722, 3.716, 3.711, 3.706, 3.702, 3.698, 3.697, 3.698, 3.699, 3.699, 3.701, 3.703, 3.706, 3.711, 3.713, 3.719, 3.731, 3.739, 3.748, 3.753, 3.761, 3.769, 3.789, 3.826,
+ 3.786, 3.784, 3.779, 3.779, 3.769, 3.751, 3.742, 3.732, 3.725, 3.719, 3.715, 3.711, 3.706, 3.704, 3.701, 3.701, 3.702, 3.702, 3.705, 3.707, 3.712, 3.714, 3.717, 3.724, 3.733, 3.743, 3.749, 3.758, 3.764, 3.769, 3.791, 3.826,
+ 3.793, 3.787, 3.782, 3.782, 3.774, 3.756, 3.747, 3.737, 3.729, 3.725, 3.719, 3.715, 3.712, 3.708, 3.707, 3.706, 3.707, 3.708, 3.709, 3.713, 3.714, 3.717, 3.723, 3.729, 3.736, 3.747, 3.757, 3.764, 3.768, 3.774, 3.794, 3.829,
+ 3.794, 3.791, 3.786, 3.786, 3.779, 3.762, 3.751, 3.742, 3.735, 3.729, 3.725, 3.719, 3.716, 3.711, 3.709, 3.709, 3.709, 3.711, 3.716, 3.717, 3.721, 3.723, 3.726, 3.732, 3.741, 3.752, 3.761, 3.767, 3.773, 3.779, 3.801, 3.829,
+ 3.802, 3.798, 3.793, 3.793, 3.779, 3.766, 3.754, 3.746, 3.741, 3.736, 3.731, 3.726, 3.719, 3.717, 3.716, 3.715, 3.716, 3.717, 3.719, 3.721, 3.724, 3.726, 3.731, 3.737, 3.744, 3.756, 3.766, 3.772, 3.776, 3.784, 3.807, 3.839,
+ 3.805, 3.799, 3.795, 3.795, 3.784, 3.767, 3.757, 3.749, 3.744, 3.739, 3.736, 3.731, 3.726, 3.722, 3.719, 3.719, 3.719, 3.721, 3.723, 3.725, 3.727, 3.732, 3.738, 3.742, 3.751, 3.761, 3.771, 3.775, 3.782, 3.789, 3.811, 3.841,
+ 3.804, 3.801, 3.799, 3.799, 3.787, 3.772, 3.761, 3.752, 3.746, 3.742, 3.739, 3.735, 3.729, 3.726, 3.723, 3.724, 3.725, 3.726, 3.727, 3.728, 3.732, 3.736, 3.739, 3.745, 3.754, 3.765, 3.775, 3.779, 3.785, 3.795, 3.816, 3.844,
+ 3.801, 3.799, 3.796, 3.796, 3.787, 3.773, 3.761, 3.753, 3.746, 3.743, 3.739, 3.735, 3.731, 3.726, 3.725, 3.725, 3.725, 3.726, 3.727, 3.729, 3.733, 3.736, 3.741, 3.745, 3.755, 3.766, 3.776, 3.783, 3.786, 3.797, 3.819, 3.851,
+ 3.799, 3.795, 3.788, 3.788, 3.783, 3.772, 3.759, 3.749, 3.744, 3.738, 3.735, 3.733, 3.726, 3.724, 3.722, 3.722, 3.723, 3.724, 3.725, 3.727, 3.729, 3.733, 3.736, 3.742, 3.754, 3.762, 3.772, 3.779, 3.784, 3.796, 3.821, 3.859,
+ 3.799, 3.789, 3.787, 3.788, 3.779, 3.766, 3.755, 3.749, 3.742, 3.736, 3.733, 3.727, 3.723, 3.722, 3.721, 3.719, 3.719, 3.721, 3.725, 3.726, 3.728, 3.732, 3.734, 3.741, 3.747, 3.758, 3.771, 3.778, 3.785, 3.796, 3.825, 3.862,
+ 3.824, 3.799, 3.789, 3.789, 3.788, 3.777, 3.761, 3.751, 3.743, 3.739, 3.736, 3.728, 3.726, 3.725, 3.721, 3.719, 3.721, 3.723, 3.727, 3.728, 3.729, 3.733, 3.737, 3.744, 3.755, 3.769, 3.776, 3.784, 3.793, 3.819, 3.863, 3.877,
+ 3.833, 3.833, 3.833, 3.842, 3.825, 3.815, 3.807, 3.799, 3.792, 3.788, 3.785, 3.782, 3.778, 3.777, 3.773, 3.772, 3.772, 3.774, 3.778, 3.779, 3.779, 3.785, 3.792, 3.798, 3.803, 3.811, 3.822, 3.834, 3.843, 3.846, 3.877, 3.886
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.616, 2.616, 2.618, 2.621, 2.619, 2.618, 2.615, 2.615, 2.613, 2.611, 2.609, 2.609, 2.609, 2.611, 2.611, 2.611, 2.611, 2.609, 2.608, 2.608, 2.611, 2.613, 2.613, 2.614, 2.614, 2.615, 2.615, 2.622, 2.624, 2.621, 2.624, 2.641,
+ 2.616, 2.618, 2.621, 2.623, 2.623, 2.619, 2.618, 2.616, 2.616, 2.613, 2.611, 2.611, 2.611, 2.611, 2.612, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.612, 2.613, 2.612, 2.613, 2.615, 2.617, 2.621, 2.621, 2.619, 2.621, 2.641,
+ 2.621, 2.624, 2.627, 2.627, 2.625, 2.623, 2.621, 2.619, 2.618, 2.618, 2.618, 2.617, 2.616, 2.616, 2.615, 2.613, 2.612, 2.613, 2.613, 2.614, 2.614, 2.613, 2.614, 2.613, 2.614, 2.617, 2.619, 2.621, 2.621, 2.619, 2.623, 2.643,
+ 2.626, 2.627, 2.628, 2.629, 2.628, 2.625, 2.622, 2.621, 2.621, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.616, 2.616, 2.616, 2.618, 2.618, 2.617, 2.617, 2.618, 2.619, 2.621, 2.623, 2.624, 2.626, 2.625, 2.624, 2.625, 2.654,
+ 2.627, 2.628, 2.628, 2.628, 2.626, 2.623, 2.622, 2.622, 2.622, 2.622, 2.621, 2.621, 2.619, 2.617, 2.617, 2.616, 2.617, 2.617, 2.618, 2.619, 2.618, 2.618, 2.618, 2.621, 2.622, 2.624, 2.626, 2.627, 2.627, 2.626, 2.628, 2.655,
+ 2.625, 2.626, 2.627, 2.626, 2.625, 2.623, 2.622, 2.621, 2.622, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.616, 2.616, 2.616, 2.616, 2.616, 2.617, 2.618, 2.619, 2.621, 2.622, 2.624, 2.626, 2.628, 2.628, 2.629, 2.629, 2.655,
+ 2.626, 2.625, 2.626, 2.625, 2.625, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.616, 2.614, 2.613, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.618, 2.619, 2.621, 2.623, 2.624, 2.627, 2.629, 2.631, 2.629, 2.631, 2.651,
+ 2.625, 2.625, 2.625, 2.624, 2.623, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.614, 2.613, 2.612, 2.611, 2.611, 2.612, 2.612, 2.613, 2.616, 2.618, 2.619, 2.622, 2.624, 2.626, 2.628, 2.631, 2.631, 2.631, 2.631, 2.651,
+ 2.625, 2.625, 2.624, 2.623, 2.622, 2.622, 2.622, 2.622, 2.622, 2.621, 2.617, 2.615, 2.613, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.613, 2.615, 2.618, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.624, 2.624, 2.622, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.618, 2.616, 2.614, 2.612, 2.611, 2.609, 2.609, 2.608, 2.609, 2.611, 2.611, 2.615, 2.617, 2.619, 2.621, 2.625, 2.628, 2.631, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.622, 2.623, 2.622, 2.622, 2.621, 2.619, 2.619, 2.619, 2.618, 2.616, 2.614, 2.613, 2.611, 2.609, 2.608, 2.606, 2.607, 2.607, 2.609, 2.611, 2.615, 2.617, 2.619, 2.622, 2.626, 2.629, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.622, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.614, 2.613, 2.611, 2.611, 2.607, 2.606, 2.605, 2.604, 2.605, 2.607, 2.609, 2.613, 2.616, 2.619, 2.622, 2.627, 2.631, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.613, 2.609, 2.607, 2.604, 2.602, 2.601, 2.602, 2.603, 2.605, 2.609, 2.612, 2.616, 2.619, 2.624, 2.628, 2.631, 2.632, 2.633, 2.629, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.615, 2.614, 2.612, 2.608, 2.603, 2.601, 2.598, 2.597, 2.599, 2.602, 2.605, 2.608, 2.611, 2.615, 2.622, 2.625, 2.629, 2.631, 2.631, 2.633, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.616, 2.614, 2.611, 2.606, 2.601, 2.598, 2.595, 2.595, 2.597, 2.601, 2.604, 2.608, 2.612, 2.615, 2.623, 2.627, 2.629, 2.631, 2.631, 2.632, 2.631, 2.628, 2.628, 2.651,
+ 2.622, 2.623, 2.624, 2.624, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.609, 2.606, 2.601, 2.596, 2.594, 2.594, 2.596, 2.599, 2.603, 2.609, 2.613, 2.617, 2.623, 2.627, 2.629, 2.631, 2.632, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.623, 2.625, 2.625, 2.624, 2.621, 2.621, 2.619, 2.617, 2.616, 2.613, 2.608, 2.605, 2.601, 2.595, 2.593, 2.593, 2.595, 2.598, 2.604, 2.609, 2.615, 2.619, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.632, 2.629, 2.631, 2.651,
+ 2.624, 2.626, 2.626, 2.623, 2.621, 2.619, 2.618, 2.617, 2.615, 2.612, 2.608, 2.605, 2.601, 2.597, 2.595, 2.595, 2.596, 2.598, 2.605, 2.609, 2.616, 2.621, 2.626, 2.627, 2.629, 2.631, 2.633, 2.633, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.618, 2.617, 2.614, 2.612, 2.609, 2.606, 2.602, 2.599, 2.598, 2.597, 2.598, 2.602, 2.607, 2.612, 2.619, 2.621, 2.626, 2.628, 2.629, 2.632, 2.633, 2.634, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.621, 2.618, 2.617, 2.614, 2.612, 2.611, 2.608, 2.604, 2.602, 2.599, 2.599, 2.603, 2.606, 2.611, 2.616, 2.621, 2.624, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.634, 2.633, 2.633, 2.656,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.611, 2.611, 2.607, 2.604, 2.604, 2.604, 2.606, 2.609, 2.613, 2.619, 2.622, 2.625, 2.628, 2.631, 2.632, 2.633, 2.633, 2.636, 2.636, 2.634, 2.634, 2.658,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.619, 2.618, 2.616, 2.614, 2.613, 2.612, 2.611, 2.609, 2.608, 2.607, 2.608, 2.609, 2.613, 2.617, 2.621, 2.623, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.635, 2.636, 2.636, 2.636, 2.661,
+ 2.623, 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.616, 2.615, 2.614, 2.613, 2.612, 2.612, 2.611, 2.611, 2.611, 2.614, 2.615, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.633, 2.635, 2.635, 2.637, 2.637, 2.636, 2.637, 2.661,
+ 2.623, 2.624, 2.625, 2.626, 2.624, 2.621, 2.619, 2.617, 2.616, 2.615, 2.615, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.619, 2.621, 2.623, 2.626, 2.628, 2.631, 2.632, 2.634, 2.635, 2.636, 2.637, 2.638, 2.637, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.627, 2.626, 2.623, 2.619, 2.619, 2.618, 2.618, 2.618, 2.617, 2.617, 2.616, 2.616, 2.616, 2.619, 2.622, 2.623, 2.625, 2.628, 2.628, 2.631, 2.632, 2.634, 2.636, 2.638, 2.639, 2.639, 2.638, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.628, 2.626, 2.623, 2.621, 2.619, 2.619, 2.619, 2.619, 2.619, 2.619, 2.618, 2.618, 2.619, 2.623, 2.624, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.635, 2.638, 2.639, 2.639, 2.639, 2.636, 2.636, 2.662,
+ 2.625, 2.627, 2.628, 2.628, 2.626, 2.624, 2.623, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.624, 2.624, 2.625, 2.627, 2.628, 2.631, 2.631, 2.632, 2.634, 2.636, 2.639, 2.639, 2.641, 2.639, 2.635, 2.635, 2.663,
+ 2.625, 2.626, 2.628, 2.628, 2.627, 2.625, 2.624, 2.623, 2.623, 2.622, 2.623, 2.624, 2.624, 2.625, 2.625, 2.625, 2.625, 2.626, 2.627, 2.629, 2.631, 2.632, 2.633, 2.635, 2.638, 2.641, 2.642, 2.643, 2.642, 2.636, 2.636, 2.665,
+ 2.624, 2.626, 2.628, 2.628, 2.628, 2.626, 2.624, 2.624, 2.623, 2.623, 2.623, 2.625, 2.627, 2.627, 2.626, 2.626, 2.626, 2.627, 2.628, 2.629, 2.632, 2.633, 2.635, 2.637, 2.639, 2.642, 2.644, 2.644, 2.642, 2.638, 2.638, 2.665,
+ 2.623, 2.625, 2.626, 2.627, 2.626, 2.626, 2.624, 2.623, 2.623, 2.623, 2.623, 2.623, 2.626, 2.627, 2.626, 2.626, 2.626, 2.626, 2.628, 2.628, 2.629, 2.631, 2.634, 2.636, 2.639, 2.642, 2.644, 2.643, 2.641, 2.637, 2.638, 2.659,
+ 2.623, 2.627, 2.627, 2.627, 2.627, 2.628, 2.627, 2.624, 2.624, 2.623, 2.624, 2.624, 2.628, 2.628, 2.627, 2.628, 2.628, 2.628, 2.629, 2.629, 2.631, 2.635, 2.637, 2.639, 2.641, 2.643, 2.646, 2.645, 2.643, 2.641, 2.654, 2.659,
+ 2.642, 2.641, 2.643, 2.645, 2.645, 2.644, 2.644, 2.643, 2.643, 2.642, 2.642, 2.642, 2.643, 2.644, 2.644, 2.644, 2.646, 2.646, 2.647, 2.649, 2.651, 2.652, 2.654, 2.656, 2.658, 2.661, 2.661, 2.661, 2.659, 2.654, 2.659, 2.659
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.391, 1.394, 1.395, 1.396, 1.398, 1.398, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.398, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.399, 1.397, 1.399, 1.402,
+ 1.393, 1.395, 1.396, 1.398, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.401, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.399, 1.401, 1.401, 1.399, 1.398, 1.399, 1.402,
+ 1.398, 1.401, 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.401, 1.401, 1.399, 1.399, 1.401, 1.401, 1.401, 1.401, 1.399, 1.401, 1.406,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.402, 1.403, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.405, 1.404, 1.404, 1.404, 1.404, 1.405, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.406, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.408, 1.408, 1.407, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.403, 1.402, 1.402, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.408, 1.407, 1.405, 1.405, 1.414,
+ 1.402, 1.402, 1.402, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.403, 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.407, 1.409, 1.409, 1.409, 1.409, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.403, 1.404, 1.405, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.408, 1.405, 1.405, 1.413,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.402, 1.401, 1.399, 1.398, 1.398, 1.399, 1.399, 1.401, 1.403, 1.404, 1.405, 1.407, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.403, 1.404, 1.405, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.399, 1.401, 1.403, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.398, 1.401, 1.403, 1.406, 1.407, 1.409, 1.409, 1.411, 1.409, 1.409, 1.409, 1.408, 1.407, 1.407, 1.413,
+ 1.403, 1.404, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.404, 1.404, 1.403, 1.402, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.402, 1.404, 1.406, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.414,
+ 1.403, 1.403, 1.404, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.402, 1.401, 1.399, 1.398, 1.398, 1.398, 1.401, 1.403, 1.404, 1.408, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.402, 1.404, 1.406, 1.407, 1.408, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.409, 1.408, 1.408, 1.415,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.406, 1.408, 1.408, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.405, 1.406, 1.407, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.407, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.416,
+ 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.406, 1.407, 1.407, 1.407, 1.408, 1.409, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.417,
+ 1.402, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.415,
+ 1.402, 1.402, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.405, 1.406, 1.406, 1.406, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.412, 1.412, 1.413, 1.413, 1.411, 1.408, 1.411, 1.413,
+ 1.406, 1.406, 1.408, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.414, 1.414, 1.414, 1.414, 1.415, 1.415, 1.415, 1.415, 1.416, 1.416, 1.416, 1.417, 1.418, 1.418, 1.417, 1.417, 1.414, 1.411, 1.413, 1.413
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.554, 1.522, 1.466, 1.422, 1.385, 1.351, 1.322, 1.294, 1.269, 1.246, 1.228, 1.214, 1.207, 1.202, 1.199, 1.199, 1.199, 1.199, 1.202, 1.207, 1.218, 1.235, 1.255, 1.279, 1.305, 1.333, 1.365, 1.402, 1.447, 1.508, 1.602, 1.638,
+ 1.522, 1.478, 1.431, 1.391, 1.355, 1.323, 1.298, 1.271, 1.247, 1.228, 1.212, 1.199, 1.187, 1.179, 1.173, 1.172, 1.172, 1.174, 1.179, 1.189, 1.201, 1.216, 1.235, 1.256, 1.282, 1.308, 1.335, 1.368, 1.411, 1.461, 1.535, 1.602,
+ 1.479, 1.449, 1.407, 1.367, 1.332, 1.301, 1.271, 1.247, 1.226, 1.208, 1.191, 1.178, 1.166, 1.158, 1.153, 1.151, 1.151, 1.153, 1.159, 1.168, 1.179, 1.194, 1.212, 1.234, 1.256, 1.282, 1.311, 1.343, 1.382, 1.427, 1.489, 1.535,
+ 1.454, 1.423, 1.383, 1.345, 1.309, 1.278, 1.249, 1.226, 1.206, 1.187, 1.171, 1.158, 1.146, 1.138, 1.132, 1.129, 1.129, 1.133, 1.139, 1.147, 1.159, 1.173, 1.191, 1.212, 1.234, 1.261, 1.288, 1.321, 1.357, 1.401, 1.455, 1.489,
+ 1.433, 1.401, 1.362, 1.325, 1.289, 1.258, 1.231, 1.206, 1.187, 1.169, 1.153, 1.138, 1.129, 1.121, 1.115, 1.112, 1.112, 1.114, 1.121, 1.129, 1.141, 1.155, 1.172, 1.191, 1.214, 1.241, 1.269, 1.301, 1.337, 1.377, 1.428, 1.457,
+ 1.415, 1.382, 1.343, 1.306, 1.273, 1.241, 1.213, 1.189, 1.169, 1.153, 1.137, 1.123, 1.112, 1.105, 1.097, 1.095, 1.095, 1.098, 1.103, 1.112, 1.124, 1.139, 1.155, 1.173, 1.197, 1.222, 1.252, 1.282, 1.317, 1.356, 1.405, 1.434,
+ 1.398, 1.363, 1.325, 1.289, 1.256, 1.224, 1.198, 1.175, 1.155, 1.137, 1.123, 1.108, 1.097, 1.089, 1.083, 1.079, 1.079, 1.083, 1.088, 1.097, 1.109, 1.124, 1.139, 1.158, 1.181, 1.206, 1.234, 1.266, 1.299, 1.339, 1.384, 1.415,
+ 1.382, 1.347, 1.309, 1.274, 1.242, 1.211, 1.185, 1.162, 1.142, 1.124, 1.108, 1.095, 1.083, 1.075, 1.069, 1.066, 1.066, 1.068, 1.074, 1.083, 1.096, 1.109, 1.125, 1.145, 1.166, 1.191, 1.219, 1.251, 1.285, 1.324, 1.367, 1.399,
+ 1.369, 1.334, 1.296, 1.261, 1.228, 1.199, 1.173, 1.151, 1.131, 1.112, 1.095, 1.083, 1.071, 1.062, 1.056, 1.053, 1.053, 1.055, 1.061, 1.069, 1.083, 1.096, 1.112, 1.132, 1.153, 1.178, 1.206, 1.237, 1.271, 1.309, 1.353, 1.385,
+ 1.359, 1.321, 1.284, 1.251, 1.217, 1.189, 1.164, 1.141, 1.121, 1.102, 1.086, 1.071, 1.061, 1.049, 1.045, 1.042, 1.042, 1.043, 1.051, 1.061, 1.069, 1.085, 1.101, 1.121, 1.143, 1.167, 1.195, 1.225, 1.259, 1.298, 1.341, 1.375,
+ 1.351, 1.312, 1.275, 1.241, 1.209, 1.181, 1.155, 1.133, 1.112, 1.092, 1.076, 1.061, 1.049, 1.041, 1.034, 1.032, 1.032, 1.035, 1.041, 1.051, 1.061, 1.075, 1.092, 1.112, 1.133, 1.158, 1.185, 1.216, 1.249, 1.288, 1.331, 1.364,
+ 1.344, 1.303, 1.267, 1.233, 1.201, 1.173, 1.147, 1.124, 1.104, 1.085, 1.067, 1.053, 1.041, 1.033, 1.024, 1.022, 1.022, 1.025, 1.034, 1.041, 1.053, 1.066, 1.083, 1.103, 1.126, 1.149, 1.177, 1.207, 1.241, 1.279, 1.321, 1.357,
+ 1.339, 1.297, 1.261, 1.226, 1.194, 1.166, 1.142, 1.119, 1.098, 1.078, 1.061, 1.046, 1.034, 1.024, 1.017, 1.014, 1.014, 1.017, 1.025, 1.034, 1.046, 1.059, 1.077, 1.096, 1.118, 1.143, 1.169, 1.201, 1.235, 1.273, 1.314, 1.352,
+ 1.337, 1.293, 1.256, 1.223, 1.191, 1.163, 1.136, 1.114, 1.093, 1.074, 1.056, 1.041, 1.027, 1.017, 1.012, 1.006, 1.006, 1.013, 1.017, 1.028, 1.041, 1.055, 1.072, 1.092, 1.114, 1.138, 1.165, 1.195, 1.229, 1.268, 1.309, 1.348,
+ 1.337, 1.291, 1.253, 1.219, 1.187, 1.159, 1.133, 1.109, 1.089, 1.071, 1.053, 1.037, 1.023, 1.012, 1.006, 1.002, 1.003, 1.006, 1.013, 1.023, 1.038, 1.052, 1.069, 1.089, 1.111, 1.135, 1.161, 1.192, 1.226, 1.264, 1.306, 1.348,
+ 1.337, 1.291, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.035, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.341, 1.292, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.034, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.348, 1.298, 1.255, 1.219, 1.188, 1.159, 1.134, 1.111, 1.088, 1.069, 1.051, 1.035, 1.021, 1.009, 1.003, 1.001, 1.002, 1.004, 1.011, 1.022, 1.036, 1.053, 1.071, 1.089, 1.111, 1.135, 1.162, 1.191, 1.226, 1.264, 1.306, 1.347,
+ 1.354, 1.306, 1.258, 1.222, 1.191, 1.162, 1.135, 1.113, 1.092, 1.073, 1.054, 1.038, 1.024, 1.014, 1.008, 1.003, 1.004, 1.008, 1.014, 1.026, 1.039, 1.056, 1.073, 1.093, 1.115, 1.139, 1.165, 1.195, 1.229, 1.267, 1.309, 1.349,
+ 1.358, 1.312, 1.263, 1.227, 1.195, 1.167, 1.141, 1.117, 1.097, 1.078, 1.061, 1.043, 1.029, 1.021, 1.014, 1.008, 1.008, 1.014, 1.021, 1.032, 1.045, 1.061, 1.078, 1.097, 1.119, 1.144, 1.169, 1.201, 1.234, 1.272, 1.315, 1.353,
+ 1.364, 1.319, 1.269, 1.234, 1.201, 1.174, 1.148, 1.124, 1.103, 1.084, 1.067, 1.052, 1.038, 1.029, 1.021, 1.016, 1.016, 1.021, 1.029, 1.038, 1.051, 1.067, 1.084, 1.103, 1.126, 1.151, 1.176, 1.207, 1.241, 1.279, 1.321, 1.358,
+ 1.371, 1.326, 1.277, 1.242, 1.209, 1.181, 1.155, 1.132, 1.111, 1.092, 1.075, 1.061, 1.049, 1.038, 1.029, 1.027, 1.027, 1.029, 1.038, 1.047, 1.061, 1.075, 1.092, 1.111, 1.133, 1.157, 1.185, 1.213, 1.247, 1.286, 1.329, 1.365,
+ 1.379, 1.334, 1.287, 1.251, 1.219, 1.191, 1.164, 1.141, 1.119, 1.101, 1.085, 1.071, 1.061, 1.049, 1.041, 1.038, 1.038, 1.041, 1.047, 1.059, 1.071, 1.084, 1.101, 1.119, 1.141, 1.165, 1.193, 1.223, 1.257, 1.295, 1.338, 1.374,
+ 1.389, 1.343, 1.298, 1.262, 1.231, 1.201, 1.174, 1.151, 1.131, 1.111, 1.095, 1.083, 1.071, 1.061, 1.054, 1.051, 1.051, 1.054, 1.059, 1.071, 1.081, 1.094, 1.111, 1.129, 1.152, 1.176, 1.203, 1.235, 1.269, 1.307, 1.351, 1.384,
+ 1.401, 1.351, 1.311, 1.274, 1.242, 1.214, 1.187, 1.164, 1.142, 1.124, 1.108, 1.095, 1.083, 1.074, 1.068, 1.066, 1.066, 1.068, 1.073, 1.081, 1.094, 1.108, 1.123, 1.141, 1.164, 1.188, 1.215, 1.247, 1.281, 1.321, 1.364, 1.396,
+ 1.412, 1.366, 1.327, 1.289, 1.257, 1.227, 1.201, 1.176, 1.156, 1.137, 1.122, 1.108, 1.096, 1.088, 1.083, 1.081, 1.081, 1.082, 1.087, 1.095, 1.108, 1.122, 1.136, 1.154, 1.177, 1.201, 1.229, 1.261, 1.296, 1.337, 1.382, 1.409,
+ 1.421, 1.383, 1.343, 1.306, 1.273, 1.243, 1.216, 1.192, 1.169, 1.152, 1.137, 1.122, 1.111, 1.103, 1.098, 1.095, 1.095, 1.097, 1.102, 1.111, 1.123, 1.136, 1.152, 1.169, 1.191, 1.217, 1.246, 1.278, 1.314, 1.354, 1.399, 1.429,
+ 1.434, 1.402, 1.362, 1.324, 1.291, 1.261, 1.232, 1.208, 1.187, 1.168, 1.152, 1.138, 1.127, 1.119, 1.114, 1.112, 1.112, 1.115, 1.121, 1.128, 1.139, 1.152, 1.169, 1.186, 1.209, 1.234, 1.262, 1.295, 1.332, 1.372, 1.419, 1.451,
+ 1.453, 1.422, 1.382, 1.344, 1.309, 1.278, 1.249, 1.226, 1.204, 1.187, 1.168, 1.155, 1.144, 1.135, 1.131, 1.131, 1.131, 1.133, 1.138, 1.146, 1.157, 1.171, 1.186, 1.206, 1.227, 1.252, 1.281, 1.314, 1.351, 1.393, 1.442, 1.473,
+ 1.475, 1.446, 1.404, 1.366, 1.329, 1.298, 1.269, 1.245, 1.224, 1.204, 1.188, 1.174, 1.163, 1.154, 1.149, 1.148, 1.148, 1.152, 1.156, 1.164, 1.176, 1.189, 1.206, 1.226, 1.247, 1.274, 1.303, 1.336, 1.374, 1.417, 1.471, 1.505,
+ 1.503, 1.472, 1.428, 1.389, 1.353, 1.321, 1.291, 1.266, 1.245, 1.224, 1.207, 1.192, 1.183, 1.174, 1.169, 1.167, 1.168, 1.169, 1.175, 1.183, 1.195, 1.209, 1.226, 1.247, 1.267, 1.294, 1.325, 1.359, 1.397, 1.445, 1.505, 1.548,
+ 1.534, 1.503, 1.455, 1.413, 1.378, 1.344, 1.315, 1.289, 1.265, 1.243, 1.224, 1.207, 1.196, 1.192, 1.189, 1.189, 1.189, 1.189, 1.192, 1.198, 1.209, 1.226, 1.244, 1.266, 1.291, 1.318, 1.349, 1.383, 1.425, 1.475, 1.548, 1.591
+ ],
+ "sigma": 0.00095,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2850,
+ "ccm":
+ [
+ 1.97469, -0.71439, -0.26031,
+ -0.43521, 2.09769, -0.66248,
+ -0.04826, -0.84642, 1.89468
+ ]
+ },
+ {
+ "ct": 2960,
+ "ccm":
+ [
+ 2.12952, -0.91185, -0.21768,
+ -0.38018, 1.90789, -0.52771,
+ 0.03988, -1.10079, 2.06092
+ ]
+ },
+ {
+ "ct": 3580,
+ "ccm":
+ [
+ 2.03422, -0.80048, -0.23374,
+ -0.39089, 1.97221, -0.58132,
+ -0.08969, -0.61439, 1.70408
+ ]
+ },
+ {
+ "ct": 4559,
+ "ccm":
+ [
+ 2.15423, -0.98143, -0.17279,
+ -0.38131, 2.14763, -0.76632,
+ -0.10069, -0.54383, 1.64452
+ ]
+ },
+ {
+ "ct": 5881,
+ "ccm":
+ [
+ 2.18464, -0.95493, -0.22971,
+ -0.36826, 2.00298, -0.63471,
+ -0.15219, -0.38055, 1.53274
+ ]
+ },
+ {
+ "ct": 7600,
+ "ccm":
+ [
+ 2.30687, -0.97295, -0.33392,
+ -0.30872, 2.32779, -1.01908,
+ -0.17761, -0.55891, 1.73651
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx477_16mm.json b/src/ipa/rpi/pisp/data/imx477_16mm.json
new file mode 100644
index 00000000..f4e65c92
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx477_16mm.json
@@ -0,0 +1,1240 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 12000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 740,
+ "reference_Y": 15051
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.809
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 204,
+ "slope": 0.0061
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2850.0, 0.4307, 0.3957,
+ 2960.0, 0.4159, 0.4313,
+ 3580.0, 0.3771, 0.5176,
+ 4559.0, 0.3031, 0.6573,
+ 5881.0, 0.2809, 0.6942,
+ 7600.0, 0.2263, 0.7762
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.02634,
+ "transverse_neg": 0.02255
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.359, 2.354, 2.351, 2.351, 2.343, 2.337, 2.331, 2.325, 2.323, 2.321, 2.317, 2.315, 2.313, 2.313, 2.311, 2.312, 2.312, 2.313, 2.315, 2.315, 2.316, 2.317, 2.319, 2.323, 2.326, 2.329, 2.332, 2.332, 2.335, 2.337, 2.352, 2.363,
+ 2.352, 2.351, 2.349, 2.346, 2.342, 2.334, 2.328, 2.324, 2.321, 2.317, 2.315, 2.314, 2.312, 2.311, 2.311, 2.311, 2.311, 2.311, 2.312, 2.314, 2.315, 2.316, 2.317, 2.319, 2.324, 2.326, 2.328, 2.329, 2.331, 2.337, 2.348, 2.355,
+ 2.346, 2.346, 2.345, 2.344, 2.338, 2.329, 2.325, 2.319, 2.316, 2.314, 2.311, 2.309, 2.308, 2.306, 2.304, 2.304, 2.305, 2.307, 2.308, 2.309, 2.311, 2.311, 2.313, 2.316, 2.319, 2.322, 2.325, 2.326, 2.328, 2.335, 2.343, 2.349,
+ 2.342, 2.342, 2.341, 2.338, 2.332, 2.326, 2.319, 2.316, 2.312, 2.309, 2.308, 2.305, 2.303, 2.302, 2.301, 2.301, 2.302, 2.303, 2.304, 2.305, 2.305, 2.307, 2.311, 2.313, 2.315, 2.319, 2.321, 2.325, 2.328, 2.333, 2.338, 2.348,
+ 2.337, 2.337, 2.337, 2.336, 2.331, 2.322, 2.317, 2.312, 2.309, 2.307, 2.304, 2.302, 2.299, 2.299, 2.298, 2.298, 2.299, 2.299, 2.301, 2.302, 2.302, 2.304, 2.305, 2.309, 2.314, 2.316, 2.321, 2.324, 2.326, 2.329, 2.335, 2.343,
+ 2.335, 2.334, 2.333, 2.333, 2.326, 2.318, 2.313, 2.309, 2.306, 2.302, 2.299, 2.297, 2.297, 2.296, 2.295, 2.295, 2.294, 2.295, 2.296, 2.298, 2.298, 2.301, 2.303, 2.305, 2.311, 2.315, 2.319, 2.323, 2.325, 2.329, 2.333, 2.339,
+ 2.329, 2.331, 2.329, 2.329, 2.325, 2.315, 2.309, 2.306, 2.302, 2.299, 2.297, 2.295, 2.293, 2.292, 2.291, 2.291, 2.291, 2.291, 2.293, 2.294, 2.296, 2.298, 2.301, 2.304, 2.307, 2.313, 2.317, 2.319, 2.323, 2.327, 2.331, 2.339,
+ 2.329, 2.328, 2.328, 2.328, 2.321, 2.313, 2.307, 2.303, 2.299, 2.295, 2.294, 2.292, 2.289, 2.289, 2.288, 2.288, 2.288, 2.289, 2.289, 2.292, 2.294, 2.295, 2.297, 2.301, 2.306, 2.311, 2.315, 2.318, 2.319, 2.323, 2.329, 2.335,
+ 2.326, 2.327, 2.325, 2.325, 2.319, 2.311, 2.305, 2.299, 2.296, 2.293, 2.291, 2.289, 2.288, 2.287, 2.285, 2.285, 2.286, 2.288, 2.288, 2.289, 2.291, 2.294, 2.295, 2.298, 2.304, 2.308, 2.313, 2.315, 2.317, 2.319, 2.327, 2.335,
+ 2.325, 2.325, 2.323, 2.323, 2.317, 2.309, 2.303, 2.298, 2.294, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.284, 2.284, 2.285, 2.287, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.305, 2.309, 2.313, 2.315, 2.317, 2.325, 2.334,
+ 2.322, 2.324, 2.322, 2.322, 2.316, 2.306, 2.301, 2.296, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.283, 2.283, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.293, 2.296, 2.301, 2.304, 2.308, 2.311, 2.312, 2.315, 2.323, 2.333,
+ 2.321, 2.323, 2.322, 2.322, 2.314, 2.306, 2.299, 2.294, 2.291, 2.288, 2.286, 2.285, 2.284, 2.282, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.306, 2.308, 2.311, 2.312, 2.322, 2.332,
+ 2.319, 2.321, 2.321, 2.321, 2.314, 2.305, 2.297, 2.293, 2.289, 2.287, 2.285, 2.284, 2.283, 2.281, 2.281, 2.281, 2.282, 2.283, 2.283, 2.285, 2.287, 2.289, 2.291, 2.292, 2.297, 2.301, 2.305, 2.307, 2.309, 2.312, 2.321, 2.333,
+ 2.319, 2.321, 2.319, 2.319, 2.314, 2.303, 2.296, 2.293, 2.289, 2.286, 2.285, 2.283, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.296, 2.301, 2.305, 2.307, 2.308, 2.312, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.296, 2.291, 2.289, 2.286, 2.284, 2.282, 2.281, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.287, 2.288, 2.291, 2.295, 2.299, 2.304, 2.306, 2.307, 2.311, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.287, 2.285, 2.282, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.284, 2.285, 2.286, 2.288, 2.291, 2.295, 2.299, 2.303, 2.306, 2.307, 2.312, 2.321, 2.331,
+ 2.318, 2.319, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.286, 2.285, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.285, 2.286, 2.287, 2.291, 2.294, 2.298, 2.303, 2.306, 2.307, 2.311, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.302, 2.297, 2.292, 2.289, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.287, 2.289, 2.294, 2.297, 2.303, 2.305, 2.308, 2.313, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.303, 2.299, 2.293, 2.291, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.288, 2.291, 2.294, 2.298, 2.304, 2.306, 2.308, 2.312, 2.322, 2.331,
+ 2.319, 2.321, 2.321, 2.321, 2.315, 2.305, 2.301, 2.295, 2.292, 2.289, 2.286, 2.285, 2.283, 2.282, 2.282, 2.282, 2.284, 2.283, 2.284, 2.284, 2.285, 2.287, 2.288, 2.291, 2.294, 2.299, 2.304, 2.306, 2.309, 2.313, 2.322, 2.334,
+ 2.321, 2.322, 2.322, 2.322, 2.317, 2.307, 2.301, 2.296, 2.292, 2.291, 2.288, 2.286, 2.285, 2.284, 2.283, 2.284, 2.285, 2.284, 2.285, 2.285, 2.287, 2.288, 2.289, 2.293, 2.297, 2.301, 2.305, 2.308, 2.311, 2.314, 2.323, 2.335,
+ 2.322, 2.324, 2.324, 2.324, 2.319, 2.309, 2.303, 2.297, 2.295, 2.292, 2.291, 2.288, 2.286, 2.286, 2.285, 2.286, 2.286, 2.286, 2.287, 2.288, 2.289, 2.289, 2.291, 2.294, 2.299, 2.302, 2.307, 2.311, 2.312, 2.316, 2.325, 2.335,
+ 2.324, 2.326, 2.325, 2.326, 2.321, 2.311, 2.305, 2.301, 2.297, 2.295, 2.293, 2.291, 2.289, 2.289, 2.288, 2.288, 2.287, 2.288, 2.289, 2.291, 2.292, 2.292, 2.295, 2.299, 2.301, 2.304, 2.309, 2.312, 2.315, 2.319, 2.327, 2.337,
+ 2.329, 2.329, 2.328, 2.328, 2.323, 2.315, 2.308, 2.304, 2.301, 2.298, 2.296, 2.294, 2.291, 2.291, 2.289, 2.291, 2.291, 2.291, 2.292, 2.293, 2.294, 2.295, 2.297, 2.299, 2.303, 2.308, 2.312, 2.315, 2.318, 2.321, 2.329, 2.339,
+ 2.329, 2.331, 2.332, 2.332, 2.326, 2.318, 2.311, 2.306, 2.304, 2.301, 2.299, 2.297, 2.295, 2.293, 2.292, 2.292, 2.292, 2.293, 2.294, 2.294, 2.296, 2.297, 2.299, 2.302, 2.306, 2.311, 2.315, 2.318, 2.319, 2.324, 2.332, 2.342,
+ 2.331, 2.333, 2.334, 2.334, 2.328, 2.321, 2.313, 2.308, 2.305, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.295, 2.294, 2.296, 2.296, 2.297, 2.298, 2.299, 2.302, 2.305, 2.308, 2.314, 2.317, 2.321, 2.323, 2.327, 2.334, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.309, 2.306, 2.304, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.309, 2.315, 2.319, 2.321, 2.324, 2.328, 2.337, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.311, 2.306, 2.304, 2.303, 2.302, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.311, 2.314, 2.319, 2.323, 2.325, 2.329, 2.339, 2.348,
+ 2.329, 2.329, 2.329, 2.331, 2.326, 2.319, 2.312, 2.309, 2.304, 2.303, 2.302, 2.301, 2.298, 2.295, 2.294, 2.294, 2.295, 2.295, 2.296, 2.297, 2.299, 2.301, 2.302, 2.304, 2.308, 2.313, 2.319, 2.322, 2.325, 2.329, 2.339, 2.351,
+ 2.329, 2.329, 2.329, 2.329, 2.326, 2.317, 2.311, 2.308, 2.303, 2.302, 2.301, 2.298, 2.296, 2.295, 2.294, 2.294, 2.294, 2.294, 2.296, 2.297, 2.298, 2.299, 2.301, 2.304, 2.307, 2.312, 2.318, 2.322, 2.326, 2.331, 2.341, 2.355,
+ 2.339, 2.332, 2.331, 2.331, 2.327, 2.323, 2.316, 2.309, 2.306, 2.302, 2.301, 2.299, 2.297, 2.296, 2.295, 2.294, 2.294, 2.296, 2.297, 2.297, 2.299, 2.301, 2.303, 2.306, 2.308, 2.317, 2.322, 2.325, 2.329, 2.341, 2.353, 2.361,
+ 2.347, 2.347, 2.345, 2.343, 2.338, 2.332, 2.326, 2.322, 2.321, 2.318, 2.316, 2.315, 2.313, 2.312, 2.311, 2.311, 2.311, 2.311, 2.312, 2.315, 2.317, 2.318, 2.319, 2.323, 2.324, 2.329, 2.334, 2.337, 2.344, 2.347, 2.361, 2.364
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.869, 3.852, 3.844, 3.842, 3.836, 3.821, 3.807, 3.796, 3.789, 3.784, 3.778, 3.775, 3.769, 3.768, 3.765, 3.765, 3.767, 3.769, 3.772, 3.774, 3.773, 3.775, 3.779, 3.787, 3.793, 3.801, 3.806, 3.804, 3.813, 3.819, 3.855, 3.879,
+ 3.854, 3.844, 3.837, 3.836, 3.824, 3.811, 3.797, 3.789, 3.784, 3.777, 3.774, 3.769, 3.764, 3.758, 3.757, 3.758, 3.758, 3.761, 3.763, 3.764, 3.765, 3.766, 3.772, 3.778, 3.787, 3.792, 3.794, 3.798, 3.802, 3.815, 3.839, 3.873,
+ 3.838, 3.831, 3.826, 3.823, 3.813, 3.799, 3.787, 3.781, 3.773, 3.768, 3.763, 3.759, 3.753, 3.749, 3.745, 3.745, 3.745, 3.752, 3.754, 3.757, 3.757, 3.759, 3.763, 3.769, 3.773, 3.781, 3.786, 3.792, 3.798, 3.811, 3.831, 3.861,
+ 3.833, 3.822, 3.817, 3.816, 3.804, 3.788, 3.779, 3.772, 3.766, 3.759, 3.755, 3.749, 3.744, 3.741, 3.738, 3.739, 3.739, 3.741, 3.743, 3.747, 3.749, 3.751, 3.756, 3.764, 3.769, 3.776, 3.783, 3.789, 3.798, 3.809, 3.821, 3.855,
+ 3.824, 3.818, 3.808, 3.808, 3.797, 3.781, 3.772, 3.764, 3.757, 3.752, 3.747, 3.743, 3.737, 3.735, 3.733, 3.733, 3.733, 3.735, 3.737, 3.738, 3.741, 3.746, 3.749, 3.755, 3.766, 3.771, 3.781, 3.789, 3.794, 3.806, 3.818, 3.849,
+ 3.815, 3.808, 3.799, 3.801, 3.787, 3.775, 3.767, 3.757, 3.751, 3.745, 3.738, 3.734, 3.732, 3.727, 3.725, 3.723, 3.722, 3.722, 3.726, 3.729, 3.734, 3.738, 3.744, 3.749, 3.759, 3.769, 3.781, 3.788, 3.792, 3.799, 3.811, 3.841,
+ 3.804, 3.799, 3.793, 3.793, 3.783, 3.771, 3.759, 3.751, 3.744, 3.735, 3.732, 3.727, 3.723, 3.721, 3.719, 3.716, 3.716, 3.716, 3.718, 3.722, 3.727, 3.731, 3.737, 3.746, 3.756, 3.767, 3.776, 3.782, 3.788, 3.795, 3.808, 3.831,
+ 3.802, 3.797, 3.787, 3.787, 3.779, 3.762, 3.753, 3.744, 3.734, 3.727, 3.725, 3.721, 3.716, 3.714, 3.709, 3.709, 3.711, 3.711, 3.712, 3.717, 3.722, 3.725, 3.731, 3.739, 3.752, 3.762, 3.772, 3.778, 3.779, 3.789, 3.798, 3.826,
+ 3.791, 3.789, 3.784, 3.784, 3.775, 3.759, 3.746, 3.735, 3.729, 3.724, 3.718, 3.714, 3.712, 3.707, 3.704, 3.704, 3.706, 3.708, 3.709, 3.711, 3.716, 3.722, 3.726, 3.735, 3.746, 3.754, 3.767, 3.774, 3.777, 3.781, 3.794, 3.824,
+ 3.789, 3.784, 3.779, 3.781, 3.771, 3.753, 3.741, 3.732, 3.725, 3.719, 3.715, 3.711, 3.707, 3.704, 3.701, 3.701, 3.702, 3.704, 3.708, 3.709, 3.713, 3.718, 3.724, 3.731, 3.742, 3.749, 3.761, 3.768, 3.772, 3.778, 3.791, 3.822,
+ 3.789, 3.781, 3.777, 3.777, 3.764, 3.749, 3.739, 3.729, 3.722, 3.718, 3.711, 3.708, 3.705, 3.701, 3.699, 3.699, 3.699, 3.701, 3.705, 3.707, 3.711, 3.715, 3.721, 3.727, 3.738, 3.746, 3.757, 3.763, 3.765, 3.773, 3.788, 3.821,
+ 3.785, 3.779, 3.774, 3.774, 3.764, 3.747, 3.736, 3.726, 3.719, 3.711, 3.709, 3.706, 3.701, 3.698, 3.696, 3.695, 3.695, 3.698, 3.702, 3.704, 3.707, 3.712, 3.718, 3.725, 3.734, 3.741, 3.753, 3.756, 3.759, 3.764, 3.784, 3.818,
+ 3.779, 3.776, 3.773, 3.773, 3.759, 3.744, 3.733, 3.724, 3.714, 3.709, 3.706, 3.704, 3.699, 3.696, 3.694, 3.694, 3.694, 3.697, 3.701, 3.703, 3.706, 3.709, 3.714, 3.721, 3.731, 3.737, 3.749, 3.753, 3.758, 3.762, 3.783, 3.819,
+ 3.779, 3.776, 3.769, 3.769, 3.757, 3.741, 3.729, 3.721, 3.712, 3.708, 3.705, 3.701, 3.697, 3.695, 3.694, 3.694, 3.695, 3.696, 3.698, 3.702, 3.705, 3.709, 3.712, 3.717, 3.728, 3.736, 3.749, 3.752, 3.756, 3.761, 3.781, 3.815,
+ 3.779, 3.773, 3.768, 3.768, 3.756, 3.738, 3.731, 3.719, 3.711, 3.707, 3.703, 3.698, 3.695, 3.694, 3.694, 3.695, 3.695, 3.695, 3.696, 3.702, 3.705, 3.708, 3.712, 3.717, 3.728, 3.736, 3.747, 3.751, 3.754, 3.761, 3.781, 3.815,
+ 3.782, 3.773, 3.767, 3.767, 3.755, 3.738, 3.728, 3.721, 3.711, 3.707, 3.701, 3.698, 3.695, 3.693, 3.694, 3.696, 3.695, 3.695, 3.695, 3.701, 3.703, 3.706, 3.711, 3.715, 3.726, 3.735, 3.745, 3.751, 3.754, 3.763, 3.779, 3.815,
+ 3.781, 3.771, 3.767, 3.767, 3.754, 3.739, 3.726, 3.721, 3.712, 3.706, 3.701, 3.698, 3.695, 3.693, 3.693, 3.695, 3.695, 3.695, 3.696, 3.698, 3.703, 3.705, 3.709, 3.715, 3.725, 3.734, 3.745, 3.751, 3.755, 3.762, 3.783, 3.818,
+ 3.781, 3.774, 3.767, 3.767, 3.755, 3.741, 3.729, 3.722, 3.712, 3.708, 3.701, 3.699, 3.695, 3.693, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.725, 3.732, 3.746, 3.751, 3.756, 3.763, 3.783, 3.821,
+ 3.781, 3.774, 3.769, 3.769, 3.756, 3.741, 3.731, 3.724, 3.713, 3.711, 3.707, 3.699, 3.697, 3.694, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.724, 3.734, 3.747, 3.751, 3.756, 3.765, 3.784, 3.821,
+ 3.784, 3.776, 3.773, 3.773, 3.759, 3.742, 3.733, 3.726, 3.719, 3.711, 3.709, 3.703, 3.698, 3.695, 3.694, 3.695, 3.697, 3.696, 3.698, 3.699, 3.703, 3.706, 3.711, 3.714, 3.727, 3.735, 3.746, 3.751, 3.757, 3.766, 3.787, 3.822,
+ 3.786, 3.783, 3.774, 3.774, 3.766, 3.747, 3.737, 3.727, 3.722, 3.716, 3.711, 3.706, 3.702, 3.698, 3.697, 3.698, 3.699, 3.699, 3.701, 3.703, 3.706, 3.711, 3.713, 3.719, 3.731, 3.739, 3.748, 3.753, 3.761, 3.769, 3.789, 3.826,
+ 3.786, 3.784, 3.779, 3.779, 3.769, 3.751, 3.742, 3.732, 3.725, 3.719, 3.715, 3.711, 3.706, 3.704, 3.701, 3.701, 3.702, 3.702, 3.705, 3.707, 3.712, 3.714, 3.717, 3.724, 3.733, 3.743, 3.749, 3.758, 3.764, 3.769, 3.791, 3.826,
+ 3.793, 3.787, 3.782, 3.782, 3.774, 3.756, 3.747, 3.737, 3.729, 3.725, 3.719, 3.715, 3.712, 3.708, 3.707, 3.706, 3.707, 3.708, 3.709, 3.713, 3.714, 3.717, 3.723, 3.729, 3.736, 3.747, 3.757, 3.764, 3.768, 3.774, 3.794, 3.829,
+ 3.794, 3.791, 3.786, 3.786, 3.779, 3.762, 3.751, 3.742, 3.735, 3.729, 3.725, 3.719, 3.716, 3.711, 3.709, 3.709, 3.709, 3.711, 3.716, 3.717, 3.721, 3.723, 3.726, 3.732, 3.741, 3.752, 3.761, 3.767, 3.773, 3.779, 3.801, 3.829,
+ 3.802, 3.798, 3.793, 3.793, 3.779, 3.766, 3.754, 3.746, 3.741, 3.736, 3.731, 3.726, 3.719, 3.717, 3.716, 3.715, 3.716, 3.717, 3.719, 3.721, 3.724, 3.726, 3.731, 3.737, 3.744, 3.756, 3.766, 3.772, 3.776, 3.784, 3.807, 3.839,
+ 3.805, 3.799, 3.795, 3.795, 3.784, 3.767, 3.757, 3.749, 3.744, 3.739, 3.736, 3.731, 3.726, 3.722, 3.719, 3.719, 3.719, 3.721, 3.723, 3.725, 3.727, 3.732, 3.738, 3.742, 3.751, 3.761, 3.771, 3.775, 3.782, 3.789, 3.811, 3.841,
+ 3.804, 3.801, 3.799, 3.799, 3.787, 3.772, 3.761, 3.752, 3.746, 3.742, 3.739, 3.735, 3.729, 3.726, 3.723, 3.724, 3.725, 3.726, 3.727, 3.728, 3.732, 3.736, 3.739, 3.745, 3.754, 3.765, 3.775, 3.779, 3.785, 3.795, 3.816, 3.844,
+ 3.801, 3.799, 3.796, 3.796, 3.787, 3.773, 3.761, 3.753, 3.746, 3.743, 3.739, 3.735, 3.731, 3.726, 3.725, 3.725, 3.725, 3.726, 3.727, 3.729, 3.733, 3.736, 3.741, 3.745, 3.755, 3.766, 3.776, 3.783, 3.786, 3.797, 3.819, 3.851,
+ 3.799, 3.795, 3.788, 3.788, 3.783, 3.772, 3.759, 3.749, 3.744, 3.738, 3.735, 3.733, 3.726, 3.724, 3.722, 3.722, 3.723, 3.724, 3.725, 3.727, 3.729, 3.733, 3.736, 3.742, 3.754, 3.762, 3.772, 3.779, 3.784, 3.796, 3.821, 3.859,
+ 3.799, 3.789, 3.787, 3.788, 3.779, 3.766, 3.755, 3.749, 3.742, 3.736, 3.733, 3.727, 3.723, 3.722, 3.721, 3.719, 3.719, 3.721, 3.725, 3.726, 3.728, 3.732, 3.734, 3.741, 3.747, 3.758, 3.771, 3.778, 3.785, 3.796, 3.825, 3.862,
+ 3.824, 3.799, 3.789, 3.789, 3.788, 3.777, 3.761, 3.751, 3.743, 3.739, 3.736, 3.728, 3.726, 3.725, 3.721, 3.719, 3.721, 3.723, 3.727, 3.728, 3.729, 3.733, 3.737, 3.744, 3.755, 3.769, 3.776, 3.784, 3.793, 3.819, 3.863, 3.877,
+ 3.833, 3.833, 3.833, 3.842, 3.825, 3.815, 3.807, 3.799, 3.792, 3.788, 3.785, 3.782, 3.778, 3.777, 3.773, 3.772, 3.772, 3.774, 3.778, 3.779, 3.779, 3.785, 3.792, 3.798, 3.803, 3.811, 3.822, 3.834, 3.843, 3.846, 3.877, 3.886
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.616, 2.616, 2.618, 2.621, 2.619, 2.618, 2.615, 2.615, 2.613, 2.611, 2.609, 2.609, 2.609, 2.611, 2.611, 2.611, 2.611, 2.609, 2.608, 2.608, 2.611, 2.613, 2.613, 2.614, 2.614, 2.615, 2.615, 2.622, 2.624, 2.621, 2.624, 2.641,
+ 2.616, 2.618, 2.621, 2.623, 2.623, 2.619, 2.618, 2.616, 2.616, 2.613, 2.611, 2.611, 2.611, 2.611, 2.612, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.612, 2.613, 2.612, 2.613, 2.615, 2.617, 2.621, 2.621, 2.619, 2.621, 2.641,
+ 2.621, 2.624, 2.627, 2.627, 2.625, 2.623, 2.621, 2.619, 2.618, 2.618, 2.618, 2.617, 2.616, 2.616, 2.615, 2.613, 2.612, 2.613, 2.613, 2.614, 2.614, 2.613, 2.614, 2.613, 2.614, 2.617, 2.619, 2.621, 2.621, 2.619, 2.623, 2.643,
+ 2.626, 2.627, 2.628, 2.629, 2.628, 2.625, 2.622, 2.621, 2.621, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.616, 2.616, 2.616, 2.618, 2.618, 2.617, 2.617, 2.618, 2.619, 2.621, 2.623, 2.624, 2.626, 2.625, 2.624, 2.625, 2.654,
+ 2.627, 2.628, 2.628, 2.628, 2.626, 2.623, 2.622, 2.622, 2.622, 2.622, 2.621, 2.621, 2.619, 2.617, 2.617, 2.616, 2.617, 2.617, 2.618, 2.619, 2.618, 2.618, 2.618, 2.621, 2.622, 2.624, 2.626, 2.627, 2.627, 2.626, 2.628, 2.655,
+ 2.625, 2.626, 2.627, 2.626, 2.625, 2.623, 2.622, 2.621, 2.622, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.616, 2.616, 2.616, 2.616, 2.616, 2.617, 2.618, 2.619, 2.621, 2.622, 2.624, 2.626, 2.628, 2.628, 2.629, 2.629, 2.655,
+ 2.626, 2.625, 2.626, 2.625, 2.625, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.616, 2.614, 2.613, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.618, 2.619, 2.621, 2.623, 2.624, 2.627, 2.629, 2.631, 2.629, 2.631, 2.651,
+ 2.625, 2.625, 2.625, 2.624, 2.623, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.614, 2.613, 2.612, 2.611, 2.611, 2.612, 2.612, 2.613, 2.616, 2.618, 2.619, 2.622, 2.624, 2.626, 2.628, 2.631, 2.631, 2.631, 2.631, 2.651,
+ 2.625, 2.625, 2.624, 2.623, 2.622, 2.622, 2.622, 2.622, 2.622, 2.621, 2.617, 2.615, 2.613, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.613, 2.615, 2.618, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.624, 2.624, 2.622, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.618, 2.616, 2.614, 2.612, 2.611, 2.609, 2.609, 2.608, 2.609, 2.611, 2.611, 2.615, 2.617, 2.619, 2.621, 2.625, 2.628, 2.631, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.622, 2.623, 2.622, 2.622, 2.621, 2.619, 2.619, 2.619, 2.618, 2.616, 2.614, 2.613, 2.611, 2.609, 2.608, 2.606, 2.607, 2.607, 2.609, 2.611, 2.615, 2.617, 2.619, 2.622, 2.626, 2.629, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.622, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.614, 2.613, 2.611, 2.611, 2.607, 2.606, 2.605, 2.604, 2.605, 2.607, 2.609, 2.613, 2.616, 2.619, 2.622, 2.627, 2.631, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.613, 2.609, 2.607, 2.604, 2.602, 2.601, 2.602, 2.603, 2.605, 2.609, 2.612, 2.616, 2.619, 2.624, 2.628, 2.631, 2.632, 2.633, 2.629, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.615, 2.614, 2.612, 2.608, 2.603, 2.601, 2.598, 2.597, 2.599, 2.602, 2.605, 2.608, 2.611, 2.615, 2.622, 2.625, 2.629, 2.631, 2.631, 2.633, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.616, 2.614, 2.611, 2.606, 2.601, 2.598, 2.595, 2.595, 2.597, 2.601, 2.604, 2.608, 2.612, 2.615, 2.623, 2.627, 2.629, 2.631, 2.631, 2.632, 2.631, 2.628, 2.628, 2.651,
+ 2.622, 2.623, 2.624, 2.624, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.609, 2.606, 2.601, 2.596, 2.594, 2.594, 2.596, 2.599, 2.603, 2.609, 2.613, 2.617, 2.623, 2.627, 2.629, 2.631, 2.632, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.623, 2.625, 2.625, 2.624, 2.621, 2.621, 2.619, 2.617, 2.616, 2.613, 2.608, 2.605, 2.601, 2.595, 2.593, 2.593, 2.595, 2.598, 2.604, 2.609, 2.615, 2.619, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.632, 2.629, 2.631, 2.651,
+ 2.624, 2.626, 2.626, 2.623, 2.621, 2.619, 2.618, 2.617, 2.615, 2.612, 2.608, 2.605, 2.601, 2.597, 2.595, 2.595, 2.596, 2.598, 2.605, 2.609, 2.616, 2.621, 2.626, 2.627, 2.629, 2.631, 2.633, 2.633, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.618, 2.617, 2.614, 2.612, 2.609, 2.606, 2.602, 2.599, 2.598, 2.597, 2.598, 2.602, 2.607, 2.612, 2.619, 2.621, 2.626, 2.628, 2.629, 2.632, 2.633, 2.634, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.621, 2.618, 2.617, 2.614, 2.612, 2.611, 2.608, 2.604, 2.602, 2.599, 2.599, 2.603, 2.606, 2.611, 2.616, 2.621, 2.624, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.634, 2.633, 2.633, 2.656,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.611, 2.611, 2.607, 2.604, 2.604, 2.604, 2.606, 2.609, 2.613, 2.619, 2.622, 2.625, 2.628, 2.631, 2.632, 2.633, 2.633, 2.636, 2.636, 2.634, 2.634, 2.658,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.619, 2.618, 2.616, 2.614, 2.613, 2.612, 2.611, 2.609, 2.608, 2.607, 2.608, 2.609, 2.613, 2.617, 2.621, 2.623, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.635, 2.636, 2.636, 2.636, 2.661,
+ 2.623, 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.616, 2.615, 2.614, 2.613, 2.612, 2.612, 2.611, 2.611, 2.611, 2.614, 2.615, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.633, 2.635, 2.635, 2.637, 2.637, 2.636, 2.637, 2.661,
+ 2.623, 2.624, 2.625, 2.626, 2.624, 2.621, 2.619, 2.617, 2.616, 2.615, 2.615, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.619, 2.621, 2.623, 2.626, 2.628, 2.631, 2.632, 2.634, 2.635, 2.636, 2.637, 2.638, 2.637, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.627, 2.626, 2.623, 2.619, 2.619, 2.618, 2.618, 2.618, 2.617, 2.617, 2.616, 2.616, 2.616, 2.619, 2.622, 2.623, 2.625, 2.628, 2.628, 2.631, 2.632, 2.634, 2.636, 2.638, 2.639, 2.639, 2.638, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.628, 2.626, 2.623, 2.621, 2.619, 2.619, 2.619, 2.619, 2.619, 2.619, 2.618, 2.618, 2.619, 2.623, 2.624, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.635, 2.638, 2.639, 2.639, 2.639, 2.636, 2.636, 2.662,
+ 2.625, 2.627, 2.628, 2.628, 2.626, 2.624, 2.623, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.624, 2.624, 2.625, 2.627, 2.628, 2.631, 2.631, 2.632, 2.634, 2.636, 2.639, 2.639, 2.641, 2.639, 2.635, 2.635, 2.663,
+ 2.625, 2.626, 2.628, 2.628, 2.627, 2.625, 2.624, 2.623, 2.623, 2.622, 2.623, 2.624, 2.624, 2.625, 2.625, 2.625, 2.625, 2.626, 2.627, 2.629, 2.631, 2.632, 2.633, 2.635, 2.638, 2.641, 2.642, 2.643, 2.642, 2.636, 2.636, 2.665,
+ 2.624, 2.626, 2.628, 2.628, 2.628, 2.626, 2.624, 2.624, 2.623, 2.623, 2.623, 2.625, 2.627, 2.627, 2.626, 2.626, 2.626, 2.627, 2.628, 2.629, 2.632, 2.633, 2.635, 2.637, 2.639, 2.642, 2.644, 2.644, 2.642, 2.638, 2.638, 2.665,
+ 2.623, 2.625, 2.626, 2.627, 2.626, 2.626, 2.624, 2.623, 2.623, 2.623, 2.623, 2.623, 2.626, 2.627, 2.626, 2.626, 2.626, 2.626, 2.628, 2.628, 2.629, 2.631, 2.634, 2.636, 2.639, 2.642, 2.644, 2.643, 2.641, 2.637, 2.638, 2.659,
+ 2.623, 2.627, 2.627, 2.627, 2.627, 2.628, 2.627, 2.624, 2.624, 2.623, 2.624, 2.624, 2.628, 2.628, 2.627, 2.628, 2.628, 2.628, 2.629, 2.629, 2.631, 2.635, 2.637, 2.639, 2.641, 2.643, 2.646, 2.645, 2.643, 2.641, 2.654, 2.659,
+ 2.642, 2.641, 2.643, 2.645, 2.645, 2.644, 2.644, 2.643, 2.643, 2.642, 2.642, 2.642, 2.643, 2.644, 2.644, 2.644, 2.646, 2.646, 2.647, 2.649, 2.651, 2.652, 2.654, 2.656, 2.658, 2.661, 2.661, 2.661, 2.659, 2.654, 2.659, 2.659
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.391, 1.394, 1.395, 1.396, 1.398, 1.398, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.398, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.399, 1.397, 1.399, 1.402,
+ 1.393, 1.395, 1.396, 1.398, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.401, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.399, 1.401, 1.401, 1.399, 1.398, 1.399, 1.402,
+ 1.398, 1.401, 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.401, 1.401, 1.399, 1.399, 1.401, 1.401, 1.401, 1.401, 1.399, 1.401, 1.406,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.402, 1.403, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.405, 1.404, 1.404, 1.404, 1.404, 1.405, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.406, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.408, 1.408, 1.407, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.403, 1.402, 1.402, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.408, 1.407, 1.405, 1.405, 1.414,
+ 1.402, 1.402, 1.402, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.403, 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.407, 1.409, 1.409, 1.409, 1.409, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.403, 1.404, 1.405, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.408, 1.405, 1.405, 1.413,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.402, 1.401, 1.399, 1.398, 1.398, 1.399, 1.399, 1.401, 1.403, 1.404, 1.405, 1.407, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.403, 1.404, 1.405, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.399, 1.401, 1.403, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.398, 1.401, 1.403, 1.406, 1.407, 1.409, 1.409, 1.411, 1.409, 1.409, 1.409, 1.408, 1.407, 1.407, 1.413,
+ 1.403, 1.404, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.404, 1.404, 1.403, 1.402, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.402, 1.404, 1.406, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.414,
+ 1.403, 1.403, 1.404, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.402, 1.401, 1.399, 1.398, 1.398, 1.398, 1.401, 1.403, 1.404, 1.408, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.402, 1.404, 1.406, 1.407, 1.408, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.409, 1.408, 1.408, 1.415,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.406, 1.408, 1.408, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.405, 1.406, 1.407, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.407, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.416,
+ 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.406, 1.407, 1.407, 1.407, 1.408, 1.409, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.417,
+ 1.402, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.415,
+ 1.402, 1.402, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.405, 1.406, 1.406, 1.406, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.412, 1.412, 1.413, 1.413, 1.411, 1.408, 1.411, 1.413,
+ 1.406, 1.406, 1.408, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.414, 1.414, 1.414, 1.414, 1.415, 1.415, 1.415, 1.415, 1.416, 1.416, 1.416, 1.417, 1.418, 1.418, 1.417, 1.417, 1.414, 1.411, 1.413, 1.413
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.554, 1.522, 1.466, 1.422, 1.385, 1.351, 1.322, 1.294, 1.269, 1.246, 1.228, 1.214, 1.207, 1.202, 1.199, 1.199, 1.199, 1.199, 1.202, 1.207, 1.218, 1.235, 1.255, 1.279, 1.305, 1.333, 1.365, 1.402, 1.447, 1.508, 1.602, 1.638,
+ 1.522, 1.478, 1.431, 1.391, 1.355, 1.323, 1.298, 1.271, 1.247, 1.228, 1.212, 1.199, 1.187, 1.179, 1.173, 1.172, 1.172, 1.174, 1.179, 1.189, 1.201, 1.216, 1.235, 1.256, 1.282, 1.308, 1.335, 1.368, 1.411, 1.461, 1.535, 1.602,
+ 1.479, 1.449, 1.407, 1.367, 1.332, 1.301, 1.271, 1.247, 1.226, 1.208, 1.191, 1.178, 1.166, 1.158, 1.153, 1.151, 1.151, 1.153, 1.159, 1.168, 1.179, 1.194, 1.212, 1.234, 1.256, 1.282, 1.311, 1.343, 1.382, 1.427, 1.489, 1.535,
+ 1.454, 1.423, 1.383, 1.345, 1.309, 1.278, 1.249, 1.226, 1.206, 1.187, 1.171, 1.158, 1.146, 1.138, 1.132, 1.129, 1.129, 1.133, 1.139, 1.147, 1.159, 1.173, 1.191, 1.212, 1.234, 1.261, 1.288, 1.321, 1.357, 1.401, 1.455, 1.489,
+ 1.433, 1.401, 1.362, 1.325, 1.289, 1.258, 1.231, 1.206, 1.187, 1.169, 1.153, 1.138, 1.129, 1.121, 1.115, 1.112, 1.112, 1.114, 1.121, 1.129, 1.141, 1.155, 1.172, 1.191, 1.214, 1.241, 1.269, 1.301, 1.337, 1.377, 1.428, 1.457,
+ 1.415, 1.382, 1.343, 1.306, 1.273, 1.241, 1.213, 1.189, 1.169, 1.153, 1.137, 1.123, 1.112, 1.105, 1.097, 1.095, 1.095, 1.098, 1.103, 1.112, 1.124, 1.139, 1.155, 1.173, 1.197, 1.222, 1.252, 1.282, 1.317, 1.356, 1.405, 1.434,
+ 1.398, 1.363, 1.325, 1.289, 1.256, 1.224, 1.198, 1.175, 1.155, 1.137, 1.123, 1.108, 1.097, 1.089, 1.083, 1.079, 1.079, 1.083, 1.088, 1.097, 1.109, 1.124, 1.139, 1.158, 1.181, 1.206, 1.234, 1.266, 1.299, 1.339, 1.384, 1.415,
+ 1.382, 1.347, 1.309, 1.274, 1.242, 1.211, 1.185, 1.162, 1.142, 1.124, 1.108, 1.095, 1.083, 1.075, 1.069, 1.066, 1.066, 1.068, 1.074, 1.083, 1.096, 1.109, 1.125, 1.145, 1.166, 1.191, 1.219, 1.251, 1.285, 1.324, 1.367, 1.399,
+ 1.369, 1.334, 1.296, 1.261, 1.228, 1.199, 1.173, 1.151, 1.131, 1.112, 1.095, 1.083, 1.071, 1.062, 1.056, 1.053, 1.053, 1.055, 1.061, 1.069, 1.083, 1.096, 1.112, 1.132, 1.153, 1.178, 1.206, 1.237, 1.271, 1.309, 1.353, 1.385,
+ 1.359, 1.321, 1.284, 1.251, 1.217, 1.189, 1.164, 1.141, 1.121, 1.102, 1.086, 1.071, 1.061, 1.049, 1.045, 1.042, 1.042, 1.043, 1.051, 1.061, 1.069, 1.085, 1.101, 1.121, 1.143, 1.167, 1.195, 1.225, 1.259, 1.298, 1.341, 1.375,
+ 1.351, 1.312, 1.275, 1.241, 1.209, 1.181, 1.155, 1.133, 1.112, 1.092, 1.076, 1.061, 1.049, 1.041, 1.034, 1.032, 1.032, 1.035, 1.041, 1.051, 1.061, 1.075, 1.092, 1.112, 1.133, 1.158, 1.185, 1.216, 1.249, 1.288, 1.331, 1.364,
+ 1.344, 1.303, 1.267, 1.233, 1.201, 1.173, 1.147, 1.124, 1.104, 1.085, 1.067, 1.053, 1.041, 1.033, 1.024, 1.022, 1.022, 1.025, 1.034, 1.041, 1.053, 1.066, 1.083, 1.103, 1.126, 1.149, 1.177, 1.207, 1.241, 1.279, 1.321, 1.357,
+ 1.339, 1.297, 1.261, 1.226, 1.194, 1.166, 1.142, 1.119, 1.098, 1.078, 1.061, 1.046, 1.034, 1.024, 1.017, 1.014, 1.014, 1.017, 1.025, 1.034, 1.046, 1.059, 1.077, 1.096, 1.118, 1.143, 1.169, 1.201, 1.235, 1.273, 1.314, 1.352,
+ 1.337, 1.293, 1.256, 1.223, 1.191, 1.163, 1.136, 1.114, 1.093, 1.074, 1.056, 1.041, 1.027, 1.017, 1.012, 1.006, 1.006, 1.013, 1.017, 1.028, 1.041, 1.055, 1.072, 1.092, 1.114, 1.138, 1.165, 1.195, 1.229, 1.268, 1.309, 1.348,
+ 1.337, 1.291, 1.253, 1.219, 1.187, 1.159, 1.133, 1.109, 1.089, 1.071, 1.053, 1.037, 1.023, 1.012, 1.006, 1.002, 1.003, 1.006, 1.013, 1.023, 1.038, 1.052, 1.069, 1.089, 1.111, 1.135, 1.161, 1.192, 1.226, 1.264, 1.306, 1.348,
+ 1.337, 1.291, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.035, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.341, 1.292, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.034, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.348, 1.298, 1.255, 1.219, 1.188, 1.159, 1.134, 1.111, 1.088, 1.069, 1.051, 1.035, 1.021, 1.009, 1.003, 1.001, 1.002, 1.004, 1.011, 1.022, 1.036, 1.053, 1.071, 1.089, 1.111, 1.135, 1.162, 1.191, 1.226, 1.264, 1.306, 1.347,
+ 1.354, 1.306, 1.258, 1.222, 1.191, 1.162, 1.135, 1.113, 1.092, 1.073, 1.054, 1.038, 1.024, 1.014, 1.008, 1.003, 1.004, 1.008, 1.014, 1.026, 1.039, 1.056, 1.073, 1.093, 1.115, 1.139, 1.165, 1.195, 1.229, 1.267, 1.309, 1.349,
+ 1.358, 1.312, 1.263, 1.227, 1.195, 1.167, 1.141, 1.117, 1.097, 1.078, 1.061, 1.043, 1.029, 1.021, 1.014, 1.008, 1.008, 1.014, 1.021, 1.032, 1.045, 1.061, 1.078, 1.097, 1.119, 1.144, 1.169, 1.201, 1.234, 1.272, 1.315, 1.353,
+ 1.364, 1.319, 1.269, 1.234, 1.201, 1.174, 1.148, 1.124, 1.103, 1.084, 1.067, 1.052, 1.038, 1.029, 1.021, 1.016, 1.016, 1.021, 1.029, 1.038, 1.051, 1.067, 1.084, 1.103, 1.126, 1.151, 1.176, 1.207, 1.241, 1.279, 1.321, 1.358,
+ 1.371, 1.326, 1.277, 1.242, 1.209, 1.181, 1.155, 1.132, 1.111, 1.092, 1.075, 1.061, 1.049, 1.038, 1.029, 1.027, 1.027, 1.029, 1.038, 1.047, 1.061, 1.075, 1.092, 1.111, 1.133, 1.157, 1.185, 1.213, 1.247, 1.286, 1.329, 1.365,
+ 1.379, 1.334, 1.287, 1.251, 1.219, 1.191, 1.164, 1.141, 1.119, 1.101, 1.085, 1.071, 1.061, 1.049, 1.041, 1.038, 1.038, 1.041, 1.047, 1.059, 1.071, 1.084, 1.101, 1.119, 1.141, 1.165, 1.193, 1.223, 1.257, 1.295, 1.338, 1.374,
+ 1.389, 1.343, 1.298, 1.262, 1.231, 1.201, 1.174, 1.151, 1.131, 1.111, 1.095, 1.083, 1.071, 1.061, 1.054, 1.051, 1.051, 1.054, 1.059, 1.071, 1.081, 1.094, 1.111, 1.129, 1.152, 1.176, 1.203, 1.235, 1.269, 1.307, 1.351, 1.384,
+ 1.401, 1.351, 1.311, 1.274, 1.242, 1.214, 1.187, 1.164, 1.142, 1.124, 1.108, 1.095, 1.083, 1.074, 1.068, 1.066, 1.066, 1.068, 1.073, 1.081, 1.094, 1.108, 1.123, 1.141, 1.164, 1.188, 1.215, 1.247, 1.281, 1.321, 1.364, 1.396,
+ 1.412, 1.366, 1.327, 1.289, 1.257, 1.227, 1.201, 1.176, 1.156, 1.137, 1.122, 1.108, 1.096, 1.088, 1.083, 1.081, 1.081, 1.082, 1.087, 1.095, 1.108, 1.122, 1.136, 1.154, 1.177, 1.201, 1.229, 1.261, 1.296, 1.337, 1.382, 1.409,
+ 1.421, 1.383, 1.343, 1.306, 1.273, 1.243, 1.216, 1.192, 1.169, 1.152, 1.137, 1.122, 1.111, 1.103, 1.098, 1.095, 1.095, 1.097, 1.102, 1.111, 1.123, 1.136, 1.152, 1.169, 1.191, 1.217, 1.246, 1.278, 1.314, 1.354, 1.399, 1.429,
+ 1.434, 1.402, 1.362, 1.324, 1.291, 1.261, 1.232, 1.208, 1.187, 1.168, 1.152, 1.138, 1.127, 1.119, 1.114, 1.112, 1.112, 1.115, 1.121, 1.128, 1.139, 1.152, 1.169, 1.186, 1.209, 1.234, 1.262, 1.295, 1.332, 1.372, 1.419, 1.451,
+ 1.453, 1.422, 1.382, 1.344, 1.309, 1.278, 1.249, 1.226, 1.204, 1.187, 1.168, 1.155, 1.144, 1.135, 1.131, 1.131, 1.131, 1.133, 1.138, 1.146, 1.157, 1.171, 1.186, 1.206, 1.227, 1.252, 1.281, 1.314, 1.351, 1.393, 1.442, 1.473,
+ 1.475, 1.446, 1.404, 1.366, 1.329, 1.298, 1.269, 1.245, 1.224, 1.204, 1.188, 1.174, 1.163, 1.154, 1.149, 1.148, 1.148, 1.152, 1.156, 1.164, 1.176, 1.189, 1.206, 1.226, 1.247, 1.274, 1.303, 1.336, 1.374, 1.417, 1.471, 1.505,
+ 1.503, 1.472, 1.428, 1.389, 1.353, 1.321, 1.291, 1.266, 1.245, 1.224, 1.207, 1.192, 1.183, 1.174, 1.169, 1.167, 1.168, 1.169, 1.175, 1.183, 1.195, 1.209, 1.226, 1.247, 1.267, 1.294, 1.325, 1.359, 1.397, 1.445, 1.505, 1.548,
+ 1.534, 1.503, 1.455, 1.413, 1.378, 1.344, 1.315, 1.289, 1.265, 1.243, 1.224, 1.207, 1.196, 1.192, 1.189, 1.189, 1.189, 1.189, 1.192, 1.198, 1.209, 1.226, 1.244, 1.266, 1.291, 1.318, 1.349, 1.383, 1.425, 1.475, 1.548, 1.591
+ ],
+ "sigma": 0.00095,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2850,
+ "ccm":
+ [
+ 1.97469, -0.71439, -0.26031,
+ -0.43521, 2.09769, -0.66248,
+ -0.04826, -0.84642, 1.89468
+ ]
+ },
+ {
+ "ct": 2960,
+ "ccm":
+ [
+ 2.12952, -0.91185, -0.21768,
+ -0.38018, 1.90789, -0.52771,
+ 0.03988, -1.10079, 2.06092
+ ]
+ },
+ {
+ "ct": 3580,
+ "ccm":
+ [
+ 2.03422, -0.80048, -0.23374,
+ -0.39089, 1.97221, -0.58132,
+ -0.08969, -0.61439, 1.70408
+ ]
+ },
+ {
+ "ct": 4559,
+ "ccm":
+ [
+ 2.15423, -0.98143, -0.17279,
+ -0.38131, 2.14763, -0.76632,
+ -0.10069, -0.54383, 1.64452
+ ]
+ },
+ {
+ "ct": 5881,
+ "ccm":
+ [
+ 2.18464, -0.95493, -0.22971,
+ -0.36826, 2.00298, -0.63471,
+ -0.15219, -0.38055, 1.53274
+ ]
+ },
+ {
+ "ct": 7600,
+ "ccm":
+ [
+ 2.30687, -0.97295, -0.33392,
+ -0.30872, 2.32779, -1.01908,
+ -0.17761, -0.55891, 1.73651
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "strength": 1.0,
+ "lut_rx":
+ [
+ -0.34, -0.26, -0.18, -0.1, -0.02, 0.06, 0.13, 0.22, 0.37,
+ -0.36, -0.28, -0.19, -0.1, -0.02, 0.06, 0.13, 0.21, 0.36,
+ -0.37, -0.29, -0.19, -0.1, -0.02, 0.06, 0.13, 0.21, 0.36,
+ -0.38, -0.27, -0.18, -0.09, -0.01, 0.07, 0.14, 0.22, 0.36,
+ -0.36, -0.27, -0.18, -0.09, -0.01, 0.07, 0.15, 0.23, 0.38,
+ -0.35, -0.27, -0.18, -0.09, -0.01, 0.08, 0.15, 0.23, 0.39,
+ -0.34, -0.26, -0.18, -0.1, -0.01, 0.07, 0.15, 0.22, 0.39,
+ -0.33, -0.24, -0.17, -0.09, -0.01, 0.08, 0.15, 0.22, 0.37,
+ -0.3, -0.21, -0.14, -0.07, 0.0, 0.09, 0.16, 0.22, 0.36
+ ],
+ "lut_ry":
+ [
+ -0.22, -0.23, -0.26, -0.27, -0.27, -0.26, -0.24, -0.23, -0.22,
+ -0.18, -0.19, -0.21, -0.21, -0.22, -0.21, -0.19, -0.18, -0.16,
+ -0.15, -0.14, -0.16, -0.17, -0.18, -0.17, -0.16, -0.14, -0.11,
+ -0.09, -0.07, -0.08, -0.09, -0.1, -0.09, -0.08, -0.06, -0.06,
+ -0.02, 0.0, -0.01, -0.02, -0.03, -0.03, -0.01, 0.01, 0.01,
+ 0.05, 0.06, 0.04, 0.03, 0.03, 0.03, 0.04, 0.06, 0.07,
+ 0.09, 0.1, 0.09, 0.08, 0.07, 0.07, 0.09, 0.1, 0.12,
+ 0.14, 0.16, 0.15, 0.15, 0.15, 0.14, 0.15, 0.16, 0.16,
+ 0.24, 0.26, 0.25, 0.25, 0.26, 0.26, 0.26, 0.26, 0.25
+ ],
+ "lut_bx":
+ [
+ -0.03, -0.02, -0.0, 0.0, 0.02, 0.03, 0.04, 0.06, 0.11,
+ -0.03, -0.01, -0.0, -0.0, 0.01, 0.02, 0.04, 0.06, 0.11,
+ -0.03, -0.01, 0.0, 0.01, 0.01, 0.02, 0.04, 0.06, 0.1,
+ -0.03, -0.01, 0.0, 0.01, 0.01, 0.02, 0.04, 0.07, 0.12,
+ -0.03, -0.01, -0.0, 0.01, 0.01, 0.02, 0.04, 0.07, 0.13,
+ -0.03, -0.01, 0.0, 0.01, 0.02, 0.02, 0.04, 0.07, 0.14,
+ -0.03, -0.01, 0.0, 0.01, 0.02, 0.02, 0.04, 0.08, 0.15,
+ -0.03, -0.01, 0.0, 0.0, 0.01, 0.02, 0.04, 0.08, 0.16,
+ -0.02, -0.0, 0.0, -0.0, -0.01, 0.0, 0.03, 0.08, 0.16
+ ],
+ "lut_by":
+ [
+ -0.1, -0.07, -0.05, -0.04, -0.04, -0.04, -0.05, -0.08, -0.13,
+ -0.08, -0.06, -0.05, -0.04, -0.04, -0.04, -0.04, -0.06, -0.11,
+ -0.07, -0.04, -0.03, -0.03, -0.02, -0.02, -0.03, -0.04, -0.08,
+ -0.06, -0.04, -0.02, -0.02, -0.02, -0.02, -0.02, -0.04, -0.06,
+ -0.04, -0.01, 0.0, 0.02, 0.02, 0.01, 0.0, -0.01, -0.06,
+ -0.02, 0.01, 0.02, 0.03, 0.04, 0.04, 0.03, 0.01, -0.04,
+ -0.0, 0.02, 0.04, 0.05, 0.05, 0.05, 0.05, 0.03, -0.02,
+ 0.0, 0.02, 0.04, 0.05, 0.06, 0.05, 0.04, 0.04, 0.01,
+ -0.0, 0.02, 0.03, 0.04, 0.05, 0.04, 0.02, 0.03, 0.01
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": [ 0.0, 2.5, 0.01, 2.5, 0.06, 1.0, 1.0, 1.0 ],
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": [ 0.0, 2.5, 0.01, 2.5, 0.06, 1.0, 1.0, 1.0 ],
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx477_6mm.json b/src/ipa/rpi/pisp/data/imx477_6mm.json
new file mode 100644
index 00000000..27268c23
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx477_6mm.json
@@ -0,0 +1,1240 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 12000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 740,
+ "reference_Y": 15051
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.809
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 204,
+ "slope": 0.0061
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2850.0, 0.4307, 0.3957,
+ 2960.0, 0.4159, 0.4313,
+ 3580.0, 0.3771, 0.5176,
+ 4559.0, 0.3031, 0.6573,
+ 5881.0, 0.2809, 0.6942,
+ 7600.0, 0.2263, 0.7762
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.02634,
+ "transverse_neg": 0.02255
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.359, 2.354, 2.351, 2.351, 2.343, 2.337, 2.331, 2.325, 2.323, 2.321, 2.317, 2.315, 2.313, 2.313, 2.311, 2.312, 2.312, 2.313, 2.315, 2.315, 2.316, 2.317, 2.319, 2.323, 2.326, 2.329, 2.332, 2.332, 2.335, 2.337, 2.352, 2.363,
+ 2.352, 2.351, 2.349, 2.346, 2.342, 2.334, 2.328, 2.324, 2.321, 2.317, 2.315, 2.314, 2.312, 2.311, 2.311, 2.311, 2.311, 2.311, 2.312, 2.314, 2.315, 2.316, 2.317, 2.319, 2.324, 2.326, 2.328, 2.329, 2.331, 2.337, 2.348, 2.355,
+ 2.346, 2.346, 2.345, 2.344, 2.338, 2.329, 2.325, 2.319, 2.316, 2.314, 2.311, 2.309, 2.308, 2.306, 2.304, 2.304, 2.305, 2.307, 2.308, 2.309, 2.311, 2.311, 2.313, 2.316, 2.319, 2.322, 2.325, 2.326, 2.328, 2.335, 2.343, 2.349,
+ 2.342, 2.342, 2.341, 2.338, 2.332, 2.326, 2.319, 2.316, 2.312, 2.309, 2.308, 2.305, 2.303, 2.302, 2.301, 2.301, 2.302, 2.303, 2.304, 2.305, 2.305, 2.307, 2.311, 2.313, 2.315, 2.319, 2.321, 2.325, 2.328, 2.333, 2.338, 2.348,
+ 2.337, 2.337, 2.337, 2.336, 2.331, 2.322, 2.317, 2.312, 2.309, 2.307, 2.304, 2.302, 2.299, 2.299, 2.298, 2.298, 2.299, 2.299, 2.301, 2.302, 2.302, 2.304, 2.305, 2.309, 2.314, 2.316, 2.321, 2.324, 2.326, 2.329, 2.335, 2.343,
+ 2.335, 2.334, 2.333, 2.333, 2.326, 2.318, 2.313, 2.309, 2.306, 2.302, 2.299, 2.297, 2.297, 2.296, 2.295, 2.295, 2.294, 2.295, 2.296, 2.298, 2.298, 2.301, 2.303, 2.305, 2.311, 2.315, 2.319, 2.323, 2.325, 2.329, 2.333, 2.339,
+ 2.329, 2.331, 2.329, 2.329, 2.325, 2.315, 2.309, 2.306, 2.302, 2.299, 2.297, 2.295, 2.293, 2.292, 2.291, 2.291, 2.291, 2.291, 2.293, 2.294, 2.296, 2.298, 2.301, 2.304, 2.307, 2.313, 2.317, 2.319, 2.323, 2.327, 2.331, 2.339,
+ 2.329, 2.328, 2.328, 2.328, 2.321, 2.313, 2.307, 2.303, 2.299, 2.295, 2.294, 2.292, 2.289, 2.289, 2.288, 2.288, 2.288, 2.289, 2.289, 2.292, 2.294, 2.295, 2.297, 2.301, 2.306, 2.311, 2.315, 2.318, 2.319, 2.323, 2.329, 2.335,
+ 2.326, 2.327, 2.325, 2.325, 2.319, 2.311, 2.305, 2.299, 2.296, 2.293, 2.291, 2.289, 2.288, 2.287, 2.285, 2.285, 2.286, 2.288, 2.288, 2.289, 2.291, 2.294, 2.295, 2.298, 2.304, 2.308, 2.313, 2.315, 2.317, 2.319, 2.327, 2.335,
+ 2.325, 2.325, 2.323, 2.323, 2.317, 2.309, 2.303, 2.298, 2.294, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.284, 2.284, 2.285, 2.287, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.305, 2.309, 2.313, 2.315, 2.317, 2.325, 2.334,
+ 2.322, 2.324, 2.322, 2.322, 2.316, 2.306, 2.301, 2.296, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.283, 2.283, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.293, 2.296, 2.301, 2.304, 2.308, 2.311, 2.312, 2.315, 2.323, 2.333,
+ 2.321, 2.323, 2.322, 2.322, 2.314, 2.306, 2.299, 2.294, 2.291, 2.288, 2.286, 2.285, 2.284, 2.282, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.306, 2.308, 2.311, 2.312, 2.322, 2.332,
+ 2.319, 2.321, 2.321, 2.321, 2.314, 2.305, 2.297, 2.293, 2.289, 2.287, 2.285, 2.284, 2.283, 2.281, 2.281, 2.281, 2.282, 2.283, 2.283, 2.285, 2.287, 2.289, 2.291, 2.292, 2.297, 2.301, 2.305, 2.307, 2.309, 2.312, 2.321, 2.333,
+ 2.319, 2.321, 2.319, 2.319, 2.314, 2.303, 2.296, 2.293, 2.289, 2.286, 2.285, 2.283, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.296, 2.301, 2.305, 2.307, 2.308, 2.312, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.296, 2.291, 2.289, 2.286, 2.284, 2.282, 2.281, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.287, 2.288, 2.291, 2.295, 2.299, 2.304, 2.306, 2.307, 2.311, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.287, 2.285, 2.282, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.284, 2.285, 2.286, 2.288, 2.291, 2.295, 2.299, 2.303, 2.306, 2.307, 2.312, 2.321, 2.331,
+ 2.318, 2.319, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.286, 2.285, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.285, 2.286, 2.287, 2.291, 2.294, 2.298, 2.303, 2.306, 2.307, 2.311, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.302, 2.297, 2.292, 2.289, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.287, 2.289, 2.294, 2.297, 2.303, 2.305, 2.308, 2.313, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.303, 2.299, 2.293, 2.291, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.288, 2.291, 2.294, 2.298, 2.304, 2.306, 2.308, 2.312, 2.322, 2.331,
+ 2.319, 2.321, 2.321, 2.321, 2.315, 2.305, 2.301, 2.295, 2.292, 2.289, 2.286, 2.285, 2.283, 2.282, 2.282, 2.282, 2.284, 2.283, 2.284, 2.284, 2.285, 2.287, 2.288, 2.291, 2.294, 2.299, 2.304, 2.306, 2.309, 2.313, 2.322, 2.334,
+ 2.321, 2.322, 2.322, 2.322, 2.317, 2.307, 2.301, 2.296, 2.292, 2.291, 2.288, 2.286, 2.285, 2.284, 2.283, 2.284, 2.285, 2.284, 2.285, 2.285, 2.287, 2.288, 2.289, 2.293, 2.297, 2.301, 2.305, 2.308, 2.311, 2.314, 2.323, 2.335,
+ 2.322, 2.324, 2.324, 2.324, 2.319, 2.309, 2.303, 2.297, 2.295, 2.292, 2.291, 2.288, 2.286, 2.286, 2.285, 2.286, 2.286, 2.286, 2.287, 2.288, 2.289, 2.289, 2.291, 2.294, 2.299, 2.302, 2.307, 2.311, 2.312, 2.316, 2.325, 2.335,
+ 2.324, 2.326, 2.325, 2.326, 2.321, 2.311, 2.305, 2.301, 2.297, 2.295, 2.293, 2.291, 2.289, 2.289, 2.288, 2.288, 2.287, 2.288, 2.289, 2.291, 2.292, 2.292, 2.295, 2.299, 2.301, 2.304, 2.309, 2.312, 2.315, 2.319, 2.327, 2.337,
+ 2.329, 2.329, 2.328, 2.328, 2.323, 2.315, 2.308, 2.304, 2.301, 2.298, 2.296, 2.294, 2.291, 2.291, 2.289, 2.291, 2.291, 2.291, 2.292, 2.293, 2.294, 2.295, 2.297, 2.299, 2.303, 2.308, 2.312, 2.315, 2.318, 2.321, 2.329, 2.339,
+ 2.329, 2.331, 2.332, 2.332, 2.326, 2.318, 2.311, 2.306, 2.304, 2.301, 2.299, 2.297, 2.295, 2.293, 2.292, 2.292, 2.292, 2.293, 2.294, 2.294, 2.296, 2.297, 2.299, 2.302, 2.306, 2.311, 2.315, 2.318, 2.319, 2.324, 2.332, 2.342,
+ 2.331, 2.333, 2.334, 2.334, 2.328, 2.321, 2.313, 2.308, 2.305, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.295, 2.294, 2.296, 2.296, 2.297, 2.298, 2.299, 2.302, 2.305, 2.308, 2.314, 2.317, 2.321, 2.323, 2.327, 2.334, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.309, 2.306, 2.304, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.309, 2.315, 2.319, 2.321, 2.324, 2.328, 2.337, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.311, 2.306, 2.304, 2.303, 2.302, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.311, 2.314, 2.319, 2.323, 2.325, 2.329, 2.339, 2.348,
+ 2.329, 2.329, 2.329, 2.331, 2.326, 2.319, 2.312, 2.309, 2.304, 2.303, 2.302, 2.301, 2.298, 2.295, 2.294, 2.294, 2.295, 2.295, 2.296, 2.297, 2.299, 2.301, 2.302, 2.304, 2.308, 2.313, 2.319, 2.322, 2.325, 2.329, 2.339, 2.351,
+ 2.329, 2.329, 2.329, 2.329, 2.326, 2.317, 2.311, 2.308, 2.303, 2.302, 2.301, 2.298, 2.296, 2.295, 2.294, 2.294, 2.294, 2.294, 2.296, 2.297, 2.298, 2.299, 2.301, 2.304, 2.307, 2.312, 2.318, 2.322, 2.326, 2.331, 2.341, 2.355,
+ 2.339, 2.332, 2.331, 2.331, 2.327, 2.323, 2.316, 2.309, 2.306, 2.302, 2.301, 2.299, 2.297, 2.296, 2.295, 2.294, 2.294, 2.296, 2.297, 2.297, 2.299, 2.301, 2.303, 2.306, 2.308, 2.317, 2.322, 2.325, 2.329, 2.341, 2.353, 2.361,
+ 2.347, 2.347, 2.345, 2.343, 2.338, 2.332, 2.326, 2.322, 2.321, 2.318, 2.316, 2.315, 2.313, 2.312, 2.311, 2.311, 2.311, 2.311, 2.312, 2.315, 2.317, 2.318, 2.319, 2.323, 2.324, 2.329, 2.334, 2.337, 2.344, 2.347, 2.361, 2.364
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.869, 3.852, 3.844, 3.842, 3.836, 3.821, 3.807, 3.796, 3.789, 3.784, 3.778, 3.775, 3.769, 3.768, 3.765, 3.765, 3.767, 3.769, 3.772, 3.774, 3.773, 3.775, 3.779, 3.787, 3.793, 3.801, 3.806, 3.804, 3.813, 3.819, 3.855, 3.879,
+ 3.854, 3.844, 3.837, 3.836, 3.824, 3.811, 3.797, 3.789, 3.784, 3.777, 3.774, 3.769, 3.764, 3.758, 3.757, 3.758, 3.758, 3.761, 3.763, 3.764, 3.765, 3.766, 3.772, 3.778, 3.787, 3.792, 3.794, 3.798, 3.802, 3.815, 3.839, 3.873,
+ 3.838, 3.831, 3.826, 3.823, 3.813, 3.799, 3.787, 3.781, 3.773, 3.768, 3.763, 3.759, 3.753, 3.749, 3.745, 3.745, 3.745, 3.752, 3.754, 3.757, 3.757, 3.759, 3.763, 3.769, 3.773, 3.781, 3.786, 3.792, 3.798, 3.811, 3.831, 3.861,
+ 3.833, 3.822, 3.817, 3.816, 3.804, 3.788, 3.779, 3.772, 3.766, 3.759, 3.755, 3.749, 3.744, 3.741, 3.738, 3.739, 3.739, 3.741, 3.743, 3.747, 3.749, 3.751, 3.756, 3.764, 3.769, 3.776, 3.783, 3.789, 3.798, 3.809, 3.821, 3.855,
+ 3.824, 3.818, 3.808, 3.808, 3.797, 3.781, 3.772, 3.764, 3.757, 3.752, 3.747, 3.743, 3.737, 3.735, 3.733, 3.733, 3.733, 3.735, 3.737, 3.738, 3.741, 3.746, 3.749, 3.755, 3.766, 3.771, 3.781, 3.789, 3.794, 3.806, 3.818, 3.849,
+ 3.815, 3.808, 3.799, 3.801, 3.787, 3.775, 3.767, 3.757, 3.751, 3.745, 3.738, 3.734, 3.732, 3.727, 3.725, 3.723, 3.722, 3.722, 3.726, 3.729, 3.734, 3.738, 3.744, 3.749, 3.759, 3.769, 3.781, 3.788, 3.792, 3.799, 3.811, 3.841,
+ 3.804, 3.799, 3.793, 3.793, 3.783, 3.771, 3.759, 3.751, 3.744, 3.735, 3.732, 3.727, 3.723, 3.721, 3.719, 3.716, 3.716, 3.716, 3.718, 3.722, 3.727, 3.731, 3.737, 3.746, 3.756, 3.767, 3.776, 3.782, 3.788, 3.795, 3.808, 3.831,
+ 3.802, 3.797, 3.787, 3.787, 3.779, 3.762, 3.753, 3.744, 3.734, 3.727, 3.725, 3.721, 3.716, 3.714, 3.709, 3.709, 3.711, 3.711, 3.712, 3.717, 3.722, 3.725, 3.731, 3.739, 3.752, 3.762, 3.772, 3.778, 3.779, 3.789, 3.798, 3.826,
+ 3.791, 3.789, 3.784, 3.784, 3.775, 3.759, 3.746, 3.735, 3.729, 3.724, 3.718, 3.714, 3.712, 3.707, 3.704, 3.704, 3.706, 3.708, 3.709, 3.711, 3.716, 3.722, 3.726, 3.735, 3.746, 3.754, 3.767, 3.774, 3.777, 3.781, 3.794, 3.824,
+ 3.789, 3.784, 3.779, 3.781, 3.771, 3.753, 3.741, 3.732, 3.725, 3.719, 3.715, 3.711, 3.707, 3.704, 3.701, 3.701, 3.702, 3.704, 3.708, 3.709, 3.713, 3.718, 3.724, 3.731, 3.742, 3.749, 3.761, 3.768, 3.772, 3.778, 3.791, 3.822,
+ 3.789, 3.781, 3.777, 3.777, 3.764, 3.749, 3.739, 3.729, 3.722, 3.718, 3.711, 3.708, 3.705, 3.701, 3.699, 3.699, 3.699, 3.701, 3.705, 3.707, 3.711, 3.715, 3.721, 3.727, 3.738, 3.746, 3.757, 3.763, 3.765, 3.773, 3.788, 3.821,
+ 3.785, 3.779, 3.774, 3.774, 3.764, 3.747, 3.736, 3.726, 3.719, 3.711, 3.709, 3.706, 3.701, 3.698, 3.696, 3.695, 3.695, 3.698, 3.702, 3.704, 3.707, 3.712, 3.718, 3.725, 3.734, 3.741, 3.753, 3.756, 3.759, 3.764, 3.784, 3.818,
+ 3.779, 3.776, 3.773, 3.773, 3.759, 3.744, 3.733, 3.724, 3.714, 3.709, 3.706, 3.704, 3.699, 3.696, 3.694, 3.694, 3.694, 3.697, 3.701, 3.703, 3.706, 3.709, 3.714, 3.721, 3.731, 3.737, 3.749, 3.753, 3.758, 3.762, 3.783, 3.819,
+ 3.779, 3.776, 3.769, 3.769, 3.757, 3.741, 3.729, 3.721, 3.712, 3.708, 3.705, 3.701, 3.697, 3.695, 3.694, 3.694, 3.695, 3.696, 3.698, 3.702, 3.705, 3.709, 3.712, 3.717, 3.728, 3.736, 3.749, 3.752, 3.756, 3.761, 3.781, 3.815,
+ 3.779, 3.773, 3.768, 3.768, 3.756, 3.738, 3.731, 3.719, 3.711, 3.707, 3.703, 3.698, 3.695, 3.694, 3.694, 3.695, 3.695, 3.695, 3.696, 3.702, 3.705, 3.708, 3.712, 3.717, 3.728, 3.736, 3.747, 3.751, 3.754, 3.761, 3.781, 3.815,
+ 3.782, 3.773, 3.767, 3.767, 3.755, 3.738, 3.728, 3.721, 3.711, 3.707, 3.701, 3.698, 3.695, 3.693, 3.694, 3.696, 3.695, 3.695, 3.695, 3.701, 3.703, 3.706, 3.711, 3.715, 3.726, 3.735, 3.745, 3.751, 3.754, 3.763, 3.779, 3.815,
+ 3.781, 3.771, 3.767, 3.767, 3.754, 3.739, 3.726, 3.721, 3.712, 3.706, 3.701, 3.698, 3.695, 3.693, 3.693, 3.695, 3.695, 3.695, 3.696, 3.698, 3.703, 3.705, 3.709, 3.715, 3.725, 3.734, 3.745, 3.751, 3.755, 3.762, 3.783, 3.818,
+ 3.781, 3.774, 3.767, 3.767, 3.755, 3.741, 3.729, 3.722, 3.712, 3.708, 3.701, 3.699, 3.695, 3.693, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.725, 3.732, 3.746, 3.751, 3.756, 3.763, 3.783, 3.821,
+ 3.781, 3.774, 3.769, 3.769, 3.756, 3.741, 3.731, 3.724, 3.713, 3.711, 3.707, 3.699, 3.697, 3.694, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.724, 3.734, 3.747, 3.751, 3.756, 3.765, 3.784, 3.821,
+ 3.784, 3.776, 3.773, 3.773, 3.759, 3.742, 3.733, 3.726, 3.719, 3.711, 3.709, 3.703, 3.698, 3.695, 3.694, 3.695, 3.697, 3.696, 3.698, 3.699, 3.703, 3.706, 3.711, 3.714, 3.727, 3.735, 3.746, 3.751, 3.757, 3.766, 3.787, 3.822,
+ 3.786, 3.783, 3.774, 3.774, 3.766, 3.747, 3.737, 3.727, 3.722, 3.716, 3.711, 3.706, 3.702, 3.698, 3.697, 3.698, 3.699, 3.699, 3.701, 3.703, 3.706, 3.711, 3.713, 3.719, 3.731, 3.739, 3.748, 3.753, 3.761, 3.769, 3.789, 3.826,
+ 3.786, 3.784, 3.779, 3.779, 3.769, 3.751, 3.742, 3.732, 3.725, 3.719, 3.715, 3.711, 3.706, 3.704, 3.701, 3.701, 3.702, 3.702, 3.705, 3.707, 3.712, 3.714, 3.717, 3.724, 3.733, 3.743, 3.749, 3.758, 3.764, 3.769, 3.791, 3.826,
+ 3.793, 3.787, 3.782, 3.782, 3.774, 3.756, 3.747, 3.737, 3.729, 3.725, 3.719, 3.715, 3.712, 3.708, 3.707, 3.706, 3.707, 3.708, 3.709, 3.713, 3.714, 3.717, 3.723, 3.729, 3.736, 3.747, 3.757, 3.764, 3.768, 3.774, 3.794, 3.829,
+ 3.794, 3.791, 3.786, 3.786, 3.779, 3.762, 3.751, 3.742, 3.735, 3.729, 3.725, 3.719, 3.716, 3.711, 3.709, 3.709, 3.709, 3.711, 3.716, 3.717, 3.721, 3.723, 3.726, 3.732, 3.741, 3.752, 3.761, 3.767, 3.773, 3.779, 3.801, 3.829,
+ 3.802, 3.798, 3.793, 3.793, 3.779, 3.766, 3.754, 3.746, 3.741, 3.736, 3.731, 3.726, 3.719, 3.717, 3.716, 3.715, 3.716, 3.717, 3.719, 3.721, 3.724, 3.726, 3.731, 3.737, 3.744, 3.756, 3.766, 3.772, 3.776, 3.784, 3.807, 3.839,
+ 3.805, 3.799, 3.795, 3.795, 3.784, 3.767, 3.757, 3.749, 3.744, 3.739, 3.736, 3.731, 3.726, 3.722, 3.719, 3.719, 3.719, 3.721, 3.723, 3.725, 3.727, 3.732, 3.738, 3.742, 3.751, 3.761, 3.771, 3.775, 3.782, 3.789, 3.811, 3.841,
+ 3.804, 3.801, 3.799, 3.799, 3.787, 3.772, 3.761, 3.752, 3.746, 3.742, 3.739, 3.735, 3.729, 3.726, 3.723, 3.724, 3.725, 3.726, 3.727, 3.728, 3.732, 3.736, 3.739, 3.745, 3.754, 3.765, 3.775, 3.779, 3.785, 3.795, 3.816, 3.844,
+ 3.801, 3.799, 3.796, 3.796, 3.787, 3.773, 3.761, 3.753, 3.746, 3.743, 3.739, 3.735, 3.731, 3.726, 3.725, 3.725, 3.725, 3.726, 3.727, 3.729, 3.733, 3.736, 3.741, 3.745, 3.755, 3.766, 3.776, 3.783, 3.786, 3.797, 3.819, 3.851,
+ 3.799, 3.795, 3.788, 3.788, 3.783, 3.772, 3.759, 3.749, 3.744, 3.738, 3.735, 3.733, 3.726, 3.724, 3.722, 3.722, 3.723, 3.724, 3.725, 3.727, 3.729, 3.733, 3.736, 3.742, 3.754, 3.762, 3.772, 3.779, 3.784, 3.796, 3.821, 3.859,
+ 3.799, 3.789, 3.787, 3.788, 3.779, 3.766, 3.755, 3.749, 3.742, 3.736, 3.733, 3.727, 3.723, 3.722, 3.721, 3.719, 3.719, 3.721, 3.725, 3.726, 3.728, 3.732, 3.734, 3.741, 3.747, 3.758, 3.771, 3.778, 3.785, 3.796, 3.825, 3.862,
+ 3.824, 3.799, 3.789, 3.789, 3.788, 3.777, 3.761, 3.751, 3.743, 3.739, 3.736, 3.728, 3.726, 3.725, 3.721, 3.719, 3.721, 3.723, 3.727, 3.728, 3.729, 3.733, 3.737, 3.744, 3.755, 3.769, 3.776, 3.784, 3.793, 3.819, 3.863, 3.877,
+ 3.833, 3.833, 3.833, 3.842, 3.825, 3.815, 3.807, 3.799, 3.792, 3.788, 3.785, 3.782, 3.778, 3.777, 3.773, 3.772, 3.772, 3.774, 3.778, 3.779, 3.779, 3.785, 3.792, 3.798, 3.803, 3.811, 3.822, 3.834, 3.843, 3.846, 3.877, 3.886
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.616, 2.616, 2.618, 2.621, 2.619, 2.618, 2.615, 2.615, 2.613, 2.611, 2.609, 2.609, 2.609, 2.611, 2.611, 2.611, 2.611, 2.609, 2.608, 2.608, 2.611, 2.613, 2.613, 2.614, 2.614, 2.615, 2.615, 2.622, 2.624, 2.621, 2.624, 2.641,
+ 2.616, 2.618, 2.621, 2.623, 2.623, 2.619, 2.618, 2.616, 2.616, 2.613, 2.611, 2.611, 2.611, 2.611, 2.612, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.612, 2.613, 2.612, 2.613, 2.615, 2.617, 2.621, 2.621, 2.619, 2.621, 2.641,
+ 2.621, 2.624, 2.627, 2.627, 2.625, 2.623, 2.621, 2.619, 2.618, 2.618, 2.618, 2.617, 2.616, 2.616, 2.615, 2.613, 2.612, 2.613, 2.613, 2.614, 2.614, 2.613, 2.614, 2.613, 2.614, 2.617, 2.619, 2.621, 2.621, 2.619, 2.623, 2.643,
+ 2.626, 2.627, 2.628, 2.629, 2.628, 2.625, 2.622, 2.621, 2.621, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.616, 2.616, 2.616, 2.618, 2.618, 2.617, 2.617, 2.618, 2.619, 2.621, 2.623, 2.624, 2.626, 2.625, 2.624, 2.625, 2.654,
+ 2.627, 2.628, 2.628, 2.628, 2.626, 2.623, 2.622, 2.622, 2.622, 2.622, 2.621, 2.621, 2.619, 2.617, 2.617, 2.616, 2.617, 2.617, 2.618, 2.619, 2.618, 2.618, 2.618, 2.621, 2.622, 2.624, 2.626, 2.627, 2.627, 2.626, 2.628, 2.655,
+ 2.625, 2.626, 2.627, 2.626, 2.625, 2.623, 2.622, 2.621, 2.622, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.616, 2.616, 2.616, 2.616, 2.616, 2.617, 2.618, 2.619, 2.621, 2.622, 2.624, 2.626, 2.628, 2.628, 2.629, 2.629, 2.655,
+ 2.626, 2.625, 2.626, 2.625, 2.625, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.616, 2.614, 2.613, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.618, 2.619, 2.621, 2.623, 2.624, 2.627, 2.629, 2.631, 2.629, 2.631, 2.651,
+ 2.625, 2.625, 2.625, 2.624, 2.623, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.614, 2.613, 2.612, 2.611, 2.611, 2.612, 2.612, 2.613, 2.616, 2.618, 2.619, 2.622, 2.624, 2.626, 2.628, 2.631, 2.631, 2.631, 2.631, 2.651,
+ 2.625, 2.625, 2.624, 2.623, 2.622, 2.622, 2.622, 2.622, 2.622, 2.621, 2.617, 2.615, 2.613, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.613, 2.615, 2.618, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.624, 2.624, 2.622, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.618, 2.616, 2.614, 2.612, 2.611, 2.609, 2.609, 2.608, 2.609, 2.611, 2.611, 2.615, 2.617, 2.619, 2.621, 2.625, 2.628, 2.631, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.622, 2.623, 2.622, 2.622, 2.621, 2.619, 2.619, 2.619, 2.618, 2.616, 2.614, 2.613, 2.611, 2.609, 2.608, 2.606, 2.607, 2.607, 2.609, 2.611, 2.615, 2.617, 2.619, 2.622, 2.626, 2.629, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.622, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.614, 2.613, 2.611, 2.611, 2.607, 2.606, 2.605, 2.604, 2.605, 2.607, 2.609, 2.613, 2.616, 2.619, 2.622, 2.627, 2.631, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.613, 2.609, 2.607, 2.604, 2.602, 2.601, 2.602, 2.603, 2.605, 2.609, 2.612, 2.616, 2.619, 2.624, 2.628, 2.631, 2.632, 2.633, 2.629, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.615, 2.614, 2.612, 2.608, 2.603, 2.601, 2.598, 2.597, 2.599, 2.602, 2.605, 2.608, 2.611, 2.615, 2.622, 2.625, 2.629, 2.631, 2.631, 2.633, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.616, 2.614, 2.611, 2.606, 2.601, 2.598, 2.595, 2.595, 2.597, 2.601, 2.604, 2.608, 2.612, 2.615, 2.623, 2.627, 2.629, 2.631, 2.631, 2.632, 2.631, 2.628, 2.628, 2.651,
+ 2.622, 2.623, 2.624, 2.624, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.609, 2.606, 2.601, 2.596, 2.594, 2.594, 2.596, 2.599, 2.603, 2.609, 2.613, 2.617, 2.623, 2.627, 2.629, 2.631, 2.632, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.623, 2.625, 2.625, 2.624, 2.621, 2.621, 2.619, 2.617, 2.616, 2.613, 2.608, 2.605, 2.601, 2.595, 2.593, 2.593, 2.595, 2.598, 2.604, 2.609, 2.615, 2.619, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.632, 2.629, 2.631, 2.651,
+ 2.624, 2.626, 2.626, 2.623, 2.621, 2.619, 2.618, 2.617, 2.615, 2.612, 2.608, 2.605, 2.601, 2.597, 2.595, 2.595, 2.596, 2.598, 2.605, 2.609, 2.616, 2.621, 2.626, 2.627, 2.629, 2.631, 2.633, 2.633, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.618, 2.617, 2.614, 2.612, 2.609, 2.606, 2.602, 2.599, 2.598, 2.597, 2.598, 2.602, 2.607, 2.612, 2.619, 2.621, 2.626, 2.628, 2.629, 2.632, 2.633, 2.634, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.621, 2.618, 2.617, 2.614, 2.612, 2.611, 2.608, 2.604, 2.602, 2.599, 2.599, 2.603, 2.606, 2.611, 2.616, 2.621, 2.624, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.634, 2.633, 2.633, 2.656,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.611, 2.611, 2.607, 2.604, 2.604, 2.604, 2.606, 2.609, 2.613, 2.619, 2.622, 2.625, 2.628, 2.631, 2.632, 2.633, 2.633, 2.636, 2.636, 2.634, 2.634, 2.658,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.619, 2.618, 2.616, 2.614, 2.613, 2.612, 2.611, 2.609, 2.608, 2.607, 2.608, 2.609, 2.613, 2.617, 2.621, 2.623, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.635, 2.636, 2.636, 2.636, 2.661,
+ 2.623, 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.616, 2.615, 2.614, 2.613, 2.612, 2.612, 2.611, 2.611, 2.611, 2.614, 2.615, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.633, 2.635, 2.635, 2.637, 2.637, 2.636, 2.637, 2.661,
+ 2.623, 2.624, 2.625, 2.626, 2.624, 2.621, 2.619, 2.617, 2.616, 2.615, 2.615, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.619, 2.621, 2.623, 2.626, 2.628, 2.631, 2.632, 2.634, 2.635, 2.636, 2.637, 2.638, 2.637, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.627, 2.626, 2.623, 2.619, 2.619, 2.618, 2.618, 2.618, 2.617, 2.617, 2.616, 2.616, 2.616, 2.619, 2.622, 2.623, 2.625, 2.628, 2.628, 2.631, 2.632, 2.634, 2.636, 2.638, 2.639, 2.639, 2.638, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.628, 2.626, 2.623, 2.621, 2.619, 2.619, 2.619, 2.619, 2.619, 2.619, 2.618, 2.618, 2.619, 2.623, 2.624, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.635, 2.638, 2.639, 2.639, 2.639, 2.636, 2.636, 2.662,
+ 2.625, 2.627, 2.628, 2.628, 2.626, 2.624, 2.623, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.624, 2.624, 2.625, 2.627, 2.628, 2.631, 2.631, 2.632, 2.634, 2.636, 2.639, 2.639, 2.641, 2.639, 2.635, 2.635, 2.663,
+ 2.625, 2.626, 2.628, 2.628, 2.627, 2.625, 2.624, 2.623, 2.623, 2.622, 2.623, 2.624, 2.624, 2.625, 2.625, 2.625, 2.625, 2.626, 2.627, 2.629, 2.631, 2.632, 2.633, 2.635, 2.638, 2.641, 2.642, 2.643, 2.642, 2.636, 2.636, 2.665,
+ 2.624, 2.626, 2.628, 2.628, 2.628, 2.626, 2.624, 2.624, 2.623, 2.623, 2.623, 2.625, 2.627, 2.627, 2.626, 2.626, 2.626, 2.627, 2.628, 2.629, 2.632, 2.633, 2.635, 2.637, 2.639, 2.642, 2.644, 2.644, 2.642, 2.638, 2.638, 2.665,
+ 2.623, 2.625, 2.626, 2.627, 2.626, 2.626, 2.624, 2.623, 2.623, 2.623, 2.623, 2.623, 2.626, 2.627, 2.626, 2.626, 2.626, 2.626, 2.628, 2.628, 2.629, 2.631, 2.634, 2.636, 2.639, 2.642, 2.644, 2.643, 2.641, 2.637, 2.638, 2.659,
+ 2.623, 2.627, 2.627, 2.627, 2.627, 2.628, 2.627, 2.624, 2.624, 2.623, 2.624, 2.624, 2.628, 2.628, 2.627, 2.628, 2.628, 2.628, 2.629, 2.629, 2.631, 2.635, 2.637, 2.639, 2.641, 2.643, 2.646, 2.645, 2.643, 2.641, 2.654, 2.659,
+ 2.642, 2.641, 2.643, 2.645, 2.645, 2.644, 2.644, 2.643, 2.643, 2.642, 2.642, 2.642, 2.643, 2.644, 2.644, 2.644, 2.646, 2.646, 2.647, 2.649, 2.651, 2.652, 2.654, 2.656, 2.658, 2.661, 2.661, 2.661, 2.659, 2.654, 2.659, 2.659
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.391, 1.394, 1.395, 1.396, 1.398, 1.398, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.398, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.399, 1.397, 1.399, 1.402,
+ 1.393, 1.395, 1.396, 1.398, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.401, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.399, 1.401, 1.401, 1.399, 1.398, 1.399, 1.402,
+ 1.398, 1.401, 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.401, 1.401, 1.399, 1.399, 1.401, 1.401, 1.401, 1.401, 1.399, 1.401, 1.406,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.402, 1.403, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.405, 1.404, 1.404, 1.404, 1.404, 1.405, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.406, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.408, 1.408, 1.407, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.403, 1.402, 1.402, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.408, 1.407, 1.405, 1.405, 1.414,
+ 1.402, 1.402, 1.402, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.403, 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.407, 1.409, 1.409, 1.409, 1.409, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.403, 1.404, 1.405, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.408, 1.405, 1.405, 1.413,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.402, 1.401, 1.399, 1.398, 1.398, 1.399, 1.399, 1.401, 1.403, 1.404, 1.405, 1.407, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.403, 1.404, 1.405, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.399, 1.401, 1.403, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.398, 1.401, 1.403, 1.406, 1.407, 1.409, 1.409, 1.411, 1.409, 1.409, 1.409, 1.408, 1.407, 1.407, 1.413,
+ 1.403, 1.404, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.404, 1.404, 1.403, 1.402, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.402, 1.404, 1.406, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.414,
+ 1.403, 1.403, 1.404, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.402, 1.401, 1.399, 1.398, 1.398, 1.398, 1.401, 1.403, 1.404, 1.408, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.402, 1.404, 1.406, 1.407, 1.408, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.409, 1.408, 1.408, 1.415,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.406, 1.408, 1.408, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.405, 1.406, 1.407, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.407, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.416,
+ 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.406, 1.407, 1.407, 1.407, 1.408, 1.409, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.417,
+ 1.402, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.415,
+ 1.402, 1.402, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.405, 1.406, 1.406, 1.406, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.412, 1.412, 1.413, 1.413, 1.411, 1.408, 1.411, 1.413,
+ 1.406, 1.406, 1.408, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.414, 1.414, 1.414, 1.414, 1.415, 1.415, 1.415, 1.415, 1.416, 1.416, 1.416, 1.417, 1.418, 1.418, 1.417, 1.417, 1.414, 1.411, 1.413, 1.413
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.554, 1.522, 1.466, 1.422, 1.385, 1.351, 1.322, 1.294, 1.269, 1.246, 1.228, 1.214, 1.207, 1.202, 1.199, 1.199, 1.199, 1.199, 1.202, 1.207, 1.218, 1.235, 1.255, 1.279, 1.305, 1.333, 1.365, 1.402, 1.447, 1.508, 1.602, 1.638,
+ 1.522, 1.478, 1.431, 1.391, 1.355, 1.323, 1.298, 1.271, 1.247, 1.228, 1.212, 1.199, 1.187, 1.179, 1.173, 1.172, 1.172, 1.174, 1.179, 1.189, 1.201, 1.216, 1.235, 1.256, 1.282, 1.308, 1.335, 1.368, 1.411, 1.461, 1.535, 1.602,
+ 1.479, 1.449, 1.407, 1.367, 1.332, 1.301, 1.271, 1.247, 1.226, 1.208, 1.191, 1.178, 1.166, 1.158, 1.153, 1.151, 1.151, 1.153, 1.159, 1.168, 1.179, 1.194, 1.212, 1.234, 1.256, 1.282, 1.311, 1.343, 1.382, 1.427, 1.489, 1.535,
+ 1.454, 1.423, 1.383, 1.345, 1.309, 1.278, 1.249, 1.226, 1.206, 1.187, 1.171, 1.158, 1.146, 1.138, 1.132, 1.129, 1.129, 1.133, 1.139, 1.147, 1.159, 1.173, 1.191, 1.212, 1.234, 1.261, 1.288, 1.321, 1.357, 1.401, 1.455, 1.489,
+ 1.433, 1.401, 1.362, 1.325, 1.289, 1.258, 1.231, 1.206, 1.187, 1.169, 1.153, 1.138, 1.129, 1.121, 1.115, 1.112, 1.112, 1.114, 1.121, 1.129, 1.141, 1.155, 1.172, 1.191, 1.214, 1.241, 1.269, 1.301, 1.337, 1.377, 1.428, 1.457,
+ 1.415, 1.382, 1.343, 1.306, 1.273, 1.241, 1.213, 1.189, 1.169, 1.153, 1.137, 1.123, 1.112, 1.105, 1.097, 1.095, 1.095, 1.098, 1.103, 1.112, 1.124, 1.139, 1.155, 1.173, 1.197, 1.222, 1.252, 1.282, 1.317, 1.356, 1.405, 1.434,
+ 1.398, 1.363, 1.325, 1.289, 1.256, 1.224, 1.198, 1.175, 1.155, 1.137, 1.123, 1.108, 1.097, 1.089, 1.083, 1.079, 1.079, 1.083, 1.088, 1.097, 1.109, 1.124, 1.139, 1.158, 1.181, 1.206, 1.234, 1.266, 1.299, 1.339, 1.384, 1.415,
+ 1.382, 1.347, 1.309, 1.274, 1.242, 1.211, 1.185, 1.162, 1.142, 1.124, 1.108, 1.095, 1.083, 1.075, 1.069, 1.066, 1.066, 1.068, 1.074, 1.083, 1.096, 1.109, 1.125, 1.145, 1.166, 1.191, 1.219, 1.251, 1.285, 1.324, 1.367, 1.399,
+ 1.369, 1.334, 1.296, 1.261, 1.228, 1.199, 1.173, 1.151, 1.131, 1.112, 1.095, 1.083, 1.071, 1.062, 1.056, 1.053, 1.053, 1.055, 1.061, 1.069, 1.083, 1.096, 1.112, 1.132, 1.153, 1.178, 1.206, 1.237, 1.271, 1.309, 1.353, 1.385,
+ 1.359, 1.321, 1.284, 1.251, 1.217, 1.189, 1.164, 1.141, 1.121, 1.102, 1.086, 1.071, 1.061, 1.049, 1.045, 1.042, 1.042, 1.043, 1.051, 1.061, 1.069, 1.085, 1.101, 1.121, 1.143, 1.167, 1.195, 1.225, 1.259, 1.298, 1.341, 1.375,
+ 1.351, 1.312, 1.275, 1.241, 1.209, 1.181, 1.155, 1.133, 1.112, 1.092, 1.076, 1.061, 1.049, 1.041, 1.034, 1.032, 1.032, 1.035, 1.041, 1.051, 1.061, 1.075, 1.092, 1.112, 1.133, 1.158, 1.185, 1.216, 1.249, 1.288, 1.331, 1.364,
+ 1.344, 1.303, 1.267, 1.233, 1.201, 1.173, 1.147, 1.124, 1.104, 1.085, 1.067, 1.053, 1.041, 1.033, 1.024, 1.022, 1.022, 1.025, 1.034, 1.041, 1.053, 1.066, 1.083, 1.103, 1.126, 1.149, 1.177, 1.207, 1.241, 1.279, 1.321, 1.357,
+ 1.339, 1.297, 1.261, 1.226, 1.194, 1.166, 1.142, 1.119, 1.098, 1.078, 1.061, 1.046, 1.034, 1.024, 1.017, 1.014, 1.014, 1.017, 1.025, 1.034, 1.046, 1.059, 1.077, 1.096, 1.118, 1.143, 1.169, 1.201, 1.235, 1.273, 1.314, 1.352,
+ 1.337, 1.293, 1.256, 1.223, 1.191, 1.163, 1.136, 1.114, 1.093, 1.074, 1.056, 1.041, 1.027, 1.017, 1.012, 1.006, 1.006, 1.013, 1.017, 1.028, 1.041, 1.055, 1.072, 1.092, 1.114, 1.138, 1.165, 1.195, 1.229, 1.268, 1.309, 1.348,
+ 1.337, 1.291, 1.253, 1.219, 1.187, 1.159, 1.133, 1.109, 1.089, 1.071, 1.053, 1.037, 1.023, 1.012, 1.006, 1.002, 1.003, 1.006, 1.013, 1.023, 1.038, 1.052, 1.069, 1.089, 1.111, 1.135, 1.161, 1.192, 1.226, 1.264, 1.306, 1.348,
+ 1.337, 1.291, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.035, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.341, 1.292, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.034, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.348, 1.298, 1.255, 1.219, 1.188, 1.159, 1.134, 1.111, 1.088, 1.069, 1.051, 1.035, 1.021, 1.009, 1.003, 1.001, 1.002, 1.004, 1.011, 1.022, 1.036, 1.053, 1.071, 1.089, 1.111, 1.135, 1.162, 1.191, 1.226, 1.264, 1.306, 1.347,
+ 1.354, 1.306, 1.258, 1.222, 1.191, 1.162, 1.135, 1.113, 1.092, 1.073, 1.054, 1.038, 1.024, 1.014, 1.008, 1.003, 1.004, 1.008, 1.014, 1.026, 1.039, 1.056, 1.073, 1.093, 1.115, 1.139, 1.165, 1.195, 1.229, 1.267, 1.309, 1.349,
+ 1.358, 1.312, 1.263, 1.227, 1.195, 1.167, 1.141, 1.117, 1.097, 1.078, 1.061, 1.043, 1.029, 1.021, 1.014, 1.008, 1.008, 1.014, 1.021, 1.032, 1.045, 1.061, 1.078, 1.097, 1.119, 1.144, 1.169, 1.201, 1.234, 1.272, 1.315, 1.353,
+ 1.364, 1.319, 1.269, 1.234, 1.201, 1.174, 1.148, 1.124, 1.103, 1.084, 1.067, 1.052, 1.038, 1.029, 1.021, 1.016, 1.016, 1.021, 1.029, 1.038, 1.051, 1.067, 1.084, 1.103, 1.126, 1.151, 1.176, 1.207, 1.241, 1.279, 1.321, 1.358,
+ 1.371, 1.326, 1.277, 1.242, 1.209, 1.181, 1.155, 1.132, 1.111, 1.092, 1.075, 1.061, 1.049, 1.038, 1.029, 1.027, 1.027, 1.029, 1.038, 1.047, 1.061, 1.075, 1.092, 1.111, 1.133, 1.157, 1.185, 1.213, 1.247, 1.286, 1.329, 1.365,
+ 1.379, 1.334, 1.287, 1.251, 1.219, 1.191, 1.164, 1.141, 1.119, 1.101, 1.085, 1.071, 1.061, 1.049, 1.041, 1.038, 1.038, 1.041, 1.047, 1.059, 1.071, 1.084, 1.101, 1.119, 1.141, 1.165, 1.193, 1.223, 1.257, 1.295, 1.338, 1.374,
+ 1.389, 1.343, 1.298, 1.262, 1.231, 1.201, 1.174, 1.151, 1.131, 1.111, 1.095, 1.083, 1.071, 1.061, 1.054, 1.051, 1.051, 1.054, 1.059, 1.071, 1.081, 1.094, 1.111, 1.129, 1.152, 1.176, 1.203, 1.235, 1.269, 1.307, 1.351, 1.384,
+ 1.401, 1.351, 1.311, 1.274, 1.242, 1.214, 1.187, 1.164, 1.142, 1.124, 1.108, 1.095, 1.083, 1.074, 1.068, 1.066, 1.066, 1.068, 1.073, 1.081, 1.094, 1.108, 1.123, 1.141, 1.164, 1.188, 1.215, 1.247, 1.281, 1.321, 1.364, 1.396,
+ 1.412, 1.366, 1.327, 1.289, 1.257, 1.227, 1.201, 1.176, 1.156, 1.137, 1.122, 1.108, 1.096, 1.088, 1.083, 1.081, 1.081, 1.082, 1.087, 1.095, 1.108, 1.122, 1.136, 1.154, 1.177, 1.201, 1.229, 1.261, 1.296, 1.337, 1.382, 1.409,
+ 1.421, 1.383, 1.343, 1.306, 1.273, 1.243, 1.216, 1.192, 1.169, 1.152, 1.137, 1.122, 1.111, 1.103, 1.098, 1.095, 1.095, 1.097, 1.102, 1.111, 1.123, 1.136, 1.152, 1.169, 1.191, 1.217, 1.246, 1.278, 1.314, 1.354, 1.399, 1.429,
+ 1.434, 1.402, 1.362, 1.324, 1.291, 1.261, 1.232, 1.208, 1.187, 1.168, 1.152, 1.138, 1.127, 1.119, 1.114, 1.112, 1.112, 1.115, 1.121, 1.128, 1.139, 1.152, 1.169, 1.186, 1.209, 1.234, 1.262, 1.295, 1.332, 1.372, 1.419, 1.451,
+ 1.453, 1.422, 1.382, 1.344, 1.309, 1.278, 1.249, 1.226, 1.204, 1.187, 1.168, 1.155, 1.144, 1.135, 1.131, 1.131, 1.131, 1.133, 1.138, 1.146, 1.157, 1.171, 1.186, 1.206, 1.227, 1.252, 1.281, 1.314, 1.351, 1.393, 1.442, 1.473,
+ 1.475, 1.446, 1.404, 1.366, 1.329, 1.298, 1.269, 1.245, 1.224, 1.204, 1.188, 1.174, 1.163, 1.154, 1.149, 1.148, 1.148, 1.152, 1.156, 1.164, 1.176, 1.189, 1.206, 1.226, 1.247, 1.274, 1.303, 1.336, 1.374, 1.417, 1.471, 1.505,
+ 1.503, 1.472, 1.428, 1.389, 1.353, 1.321, 1.291, 1.266, 1.245, 1.224, 1.207, 1.192, 1.183, 1.174, 1.169, 1.167, 1.168, 1.169, 1.175, 1.183, 1.195, 1.209, 1.226, 1.247, 1.267, 1.294, 1.325, 1.359, 1.397, 1.445, 1.505, 1.548,
+ 1.534, 1.503, 1.455, 1.413, 1.378, 1.344, 1.315, 1.289, 1.265, 1.243, 1.224, 1.207, 1.196, 1.192, 1.189, 1.189, 1.189, 1.189, 1.192, 1.198, 1.209, 1.226, 1.244, 1.266, 1.291, 1.318, 1.349, 1.383, 1.425, 1.475, 1.548, 1.591
+ ],
+ "sigma": 0.00095,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2850,
+ "ccm":
+ [
+ 1.97469, -0.71439, -0.26031,
+ -0.43521, 2.09769, -0.66248,
+ -0.04826, -0.84642, 1.89468
+ ]
+ },
+ {
+ "ct": 2960,
+ "ccm":
+ [
+ 2.12952, -0.91185, -0.21768,
+ -0.38018, 1.90789, -0.52771,
+ 0.03988, -1.10079, 2.06092
+ ]
+ },
+ {
+ "ct": 3580,
+ "ccm":
+ [
+ 2.03422, -0.80048, -0.23374,
+ -0.39089, 1.97221, -0.58132,
+ -0.08969, -0.61439, 1.70408
+ ]
+ },
+ {
+ "ct": 4559,
+ "ccm":
+ [
+ 2.15423, -0.98143, -0.17279,
+ -0.38131, 2.14763, -0.76632,
+ -0.10069, -0.54383, 1.64452
+ ]
+ },
+ {
+ "ct": 5881,
+ "ccm":
+ [
+ 2.18464, -0.95493, -0.22971,
+ -0.36826, 2.00298, -0.63471,
+ -0.15219, -0.38055, 1.53274
+ ]
+ },
+ {
+ "ct": 7600,
+ "ccm":
+ [
+ 2.30687, -0.97295, -0.33392,
+ -0.30872, 2.32779, -1.01908,
+ -0.17761, -0.55891, 1.73651
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "strength": 1.0,
+ "lut_rx":
+ [
+ -0.46, -0.31, -0.17, -0.05, 0.04, 0.14, 0.28, 0.36, 0.58,
+ -0.43, -0.28, -0.16, -0.05, 0.05, 0.14, 0.24, 0.36, 0.58,
+ -0.42, -0.27, -0.15, -0.05, 0.05, 0.14, 0.23, 0.34, 0.58,
+ -0.39, -0.25, -0.14, -0.04, 0.05, 0.15, 0.24, 0.35, 0.56,
+ -0.35, -0.24, -0.14, -0.04, 0.05, 0.14, 0.25, 0.35, 0.56,
+ -0.33, -0.22, -0.13, -0.04, 0.04, 0.13, 0.24, 0.33, 0.54,
+ -0.33, -0.22, -0.13, -0.04, 0.04, 0.13, 0.23, 0.31, 0.5,
+ -0.32, -0.23, -0.13, -0.04, 0.04, 0.12, 0.21, 0.29, 0.46,
+ -0.33, -0.24, -0.15, -0.05, 0.03, 0.11, 0.19, 0.26, 0.43
+ ],
+ "lut_ry":
+ [
+ -0.39, -0.34, -0.31, -0.29, -0.27, -0.29, -0.32, -0.31, -0.32,
+ -0.29, -0.24, -0.22, -0.21, -0.22, -0.21, -0.21, -0.22, -0.23,
+ -0.22, -0.17, -0.17, -0.17, -0.17, -0.17, -0.16, -0.16, -0.18,
+ -0.13, -0.09, -0.09, -0.1, -0.1, -0.1, -0.09, -0.08, -0.11,
+ -0.04, -0.02, -0.03, -0.03, -0.03, -0.03, -0.02, -0.01, -0.02,
+ 0.03, 0.05, 0.03, 0.03, 0.02, 0.03, 0.04, 0.06, 0.05,
+ 0.11, 0.11, 0.09, 0.08, 0.09, 0.09, 0.1, 0.11, 0.11,
+ 0.17, 0.16, 0.14, 0.13, 0.13, 0.13, 0.14, 0.15, 0.15,
+ 0.24, 0.23, 0.21, 0.19, 0.18, 0.2, 0.2, 0.2, 0.21
+ ],
+ "lut_bx":
+ [
+ -0.33, -0.22, -0.13, -0.05, 0.01, 0.09, 0.19, 0.25, 0.39,
+ -0.3, -0.19, -0.12, -0.04, 0.01, 0.06, 0.15, 0.23, 0.38,
+ -0.28, -0.18, -0.1, -0.04, 0.01, 0.06, 0.14, 0.22, 0.38,
+ -0.25, -0.16, -0.09, -0.04, 0.01, 0.06, 0.14, 0.23, 0.39,
+ -0.22, -0.15, -0.09, -0.03, 0.01, 0.06, 0.14, 0.23, 0.42,
+ -0.21, -0.14, -0.09, -0.04, 0.0, 0.06, 0.13, 0.21, 0.39,
+ -0.21, -0.14, -0.08, -0.04, 0.0, 0.06, 0.13, 0.2, 0.34,
+ -0.21, -0.14, -0.08, -0.04, 0.0, 0.06, 0.12, 0.19, 0.31,
+ -0.21, -0.15, -0.08, -0.03, 0.0, 0.06, 0.12, 0.17, 0.29
+ ],
+ "lut_by":
+ [
+ -0.3, -0.24, -0.21, -0.19, -0.19, -0.19, -0.23, -0.23, -0.27,
+ -0.23, -0.17, -0.14, -0.12, -0.12, -0.13, -0.15, -0.17, -0.21,
+ -0.17, -0.11, -0.09, -0.08, -0.08, -0.08, -0.1, -0.11, -0.16,
+ -0.09, -0.05, -0.04, -0.03, -0.03, -0.03, -0.04, -0.06, -0.11,
+ -0.03, -0.01, 0.0, 0.01, 0.01, 0.01, 0.0, -0.0, -0.05,
+ 0.02, 0.04, 0.04, 0.04, 0.05, 0.05, 0.05, 0.05, 0.01,
+ 0.07, 0.08, 0.09, 0.09, 0.1, 0.1, 0.1, 0.09, 0.06,
+ 0.11, 0.12, 0.11, 0.12, 0.12, 0.13, 0.13, 0.13, 0.1,
+ 0.16, 0.17, 0.16, 0.16, 0.16, 0.17, 0.17, 0.17, 0.15
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx477_noir.json b/src/ipa/rpi/pisp/data/imx477_noir.json
new file mode 100644
index 00000000..defc4f4d
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx477_noir.json
@@ -0,0 +1,1148 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 12000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 740,
+ "reference_Y": 15051
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.809
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 204,
+ "slope": 0.0061
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.359, 2.354, 2.351, 2.351, 2.343, 2.337, 2.331, 2.325, 2.323, 2.321, 2.317, 2.315, 2.313, 2.313, 2.311, 2.312, 2.312, 2.313, 2.315, 2.315, 2.316, 2.317, 2.319, 2.323, 2.326, 2.329, 2.332, 2.332, 2.335, 2.337, 2.352, 2.363,
+ 2.352, 2.351, 2.349, 2.346, 2.342, 2.334, 2.328, 2.324, 2.321, 2.317, 2.315, 2.314, 2.312, 2.311, 2.311, 2.311, 2.311, 2.311, 2.312, 2.314, 2.315, 2.316, 2.317, 2.319, 2.324, 2.326, 2.328, 2.329, 2.331, 2.337, 2.348, 2.355,
+ 2.346, 2.346, 2.345, 2.344, 2.338, 2.329, 2.325, 2.319, 2.316, 2.314, 2.311, 2.309, 2.308, 2.306, 2.304, 2.304, 2.305, 2.307, 2.308, 2.309, 2.311, 2.311, 2.313, 2.316, 2.319, 2.322, 2.325, 2.326, 2.328, 2.335, 2.343, 2.349,
+ 2.342, 2.342, 2.341, 2.338, 2.332, 2.326, 2.319, 2.316, 2.312, 2.309, 2.308, 2.305, 2.303, 2.302, 2.301, 2.301, 2.302, 2.303, 2.304, 2.305, 2.305, 2.307, 2.311, 2.313, 2.315, 2.319, 2.321, 2.325, 2.328, 2.333, 2.338, 2.348,
+ 2.337, 2.337, 2.337, 2.336, 2.331, 2.322, 2.317, 2.312, 2.309, 2.307, 2.304, 2.302, 2.299, 2.299, 2.298, 2.298, 2.299, 2.299, 2.301, 2.302, 2.302, 2.304, 2.305, 2.309, 2.314, 2.316, 2.321, 2.324, 2.326, 2.329, 2.335, 2.343,
+ 2.335, 2.334, 2.333, 2.333, 2.326, 2.318, 2.313, 2.309, 2.306, 2.302, 2.299, 2.297, 2.297, 2.296, 2.295, 2.295, 2.294, 2.295, 2.296, 2.298, 2.298, 2.301, 2.303, 2.305, 2.311, 2.315, 2.319, 2.323, 2.325, 2.329, 2.333, 2.339,
+ 2.329, 2.331, 2.329, 2.329, 2.325, 2.315, 2.309, 2.306, 2.302, 2.299, 2.297, 2.295, 2.293, 2.292, 2.291, 2.291, 2.291, 2.291, 2.293, 2.294, 2.296, 2.298, 2.301, 2.304, 2.307, 2.313, 2.317, 2.319, 2.323, 2.327, 2.331, 2.339,
+ 2.329, 2.328, 2.328, 2.328, 2.321, 2.313, 2.307, 2.303, 2.299, 2.295, 2.294, 2.292, 2.289, 2.289, 2.288, 2.288, 2.288, 2.289, 2.289, 2.292, 2.294, 2.295, 2.297, 2.301, 2.306, 2.311, 2.315, 2.318, 2.319, 2.323, 2.329, 2.335,
+ 2.326, 2.327, 2.325, 2.325, 2.319, 2.311, 2.305, 2.299, 2.296, 2.293, 2.291, 2.289, 2.288, 2.287, 2.285, 2.285, 2.286, 2.288, 2.288, 2.289, 2.291, 2.294, 2.295, 2.298, 2.304, 2.308, 2.313, 2.315, 2.317, 2.319, 2.327, 2.335,
+ 2.325, 2.325, 2.323, 2.323, 2.317, 2.309, 2.303, 2.298, 2.294, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.284, 2.284, 2.285, 2.287, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.305, 2.309, 2.313, 2.315, 2.317, 2.325, 2.334,
+ 2.322, 2.324, 2.322, 2.322, 2.316, 2.306, 2.301, 2.296, 2.292, 2.289, 2.287, 2.286, 2.285, 2.284, 2.283, 2.283, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.293, 2.296, 2.301, 2.304, 2.308, 2.311, 2.312, 2.315, 2.323, 2.333,
+ 2.321, 2.323, 2.322, 2.322, 2.314, 2.306, 2.299, 2.294, 2.291, 2.288, 2.286, 2.285, 2.284, 2.282, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.289, 2.291, 2.291, 2.294, 2.297, 2.302, 2.306, 2.308, 2.311, 2.312, 2.322, 2.332,
+ 2.319, 2.321, 2.321, 2.321, 2.314, 2.305, 2.297, 2.293, 2.289, 2.287, 2.285, 2.284, 2.283, 2.281, 2.281, 2.281, 2.282, 2.283, 2.283, 2.285, 2.287, 2.289, 2.291, 2.292, 2.297, 2.301, 2.305, 2.307, 2.309, 2.312, 2.321, 2.333,
+ 2.319, 2.321, 2.319, 2.319, 2.314, 2.303, 2.296, 2.293, 2.289, 2.286, 2.285, 2.283, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.288, 2.289, 2.291, 2.296, 2.301, 2.305, 2.307, 2.308, 2.312, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.296, 2.291, 2.289, 2.286, 2.284, 2.282, 2.281, 2.281, 2.281, 2.281, 2.282, 2.282, 2.283, 2.284, 2.286, 2.287, 2.288, 2.291, 2.295, 2.299, 2.304, 2.306, 2.307, 2.311, 2.321, 2.332,
+ 2.319, 2.321, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.287, 2.285, 2.282, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.284, 2.285, 2.286, 2.288, 2.291, 2.295, 2.299, 2.303, 2.306, 2.307, 2.312, 2.321, 2.331,
+ 2.318, 2.319, 2.319, 2.319, 2.313, 2.303, 2.297, 2.292, 2.289, 2.286, 2.285, 2.282, 2.281, 2.281, 2.281, 2.282, 2.282, 2.282, 2.282, 2.283, 2.285, 2.286, 2.287, 2.291, 2.294, 2.298, 2.303, 2.306, 2.307, 2.311, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.302, 2.297, 2.292, 2.289, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.287, 2.289, 2.294, 2.297, 2.303, 2.305, 2.308, 2.313, 2.321, 2.331,
+ 2.319, 2.319, 2.319, 2.319, 2.313, 2.303, 2.299, 2.293, 2.291, 2.287, 2.285, 2.283, 2.282, 2.281, 2.281, 2.282, 2.283, 2.283, 2.283, 2.283, 2.285, 2.286, 2.288, 2.291, 2.294, 2.298, 2.304, 2.306, 2.308, 2.312, 2.322, 2.331,
+ 2.319, 2.321, 2.321, 2.321, 2.315, 2.305, 2.301, 2.295, 2.292, 2.289, 2.286, 2.285, 2.283, 2.282, 2.282, 2.282, 2.284, 2.283, 2.284, 2.284, 2.285, 2.287, 2.288, 2.291, 2.294, 2.299, 2.304, 2.306, 2.309, 2.313, 2.322, 2.334,
+ 2.321, 2.322, 2.322, 2.322, 2.317, 2.307, 2.301, 2.296, 2.292, 2.291, 2.288, 2.286, 2.285, 2.284, 2.283, 2.284, 2.285, 2.284, 2.285, 2.285, 2.287, 2.288, 2.289, 2.293, 2.297, 2.301, 2.305, 2.308, 2.311, 2.314, 2.323, 2.335,
+ 2.322, 2.324, 2.324, 2.324, 2.319, 2.309, 2.303, 2.297, 2.295, 2.292, 2.291, 2.288, 2.286, 2.286, 2.285, 2.286, 2.286, 2.286, 2.287, 2.288, 2.289, 2.289, 2.291, 2.294, 2.299, 2.302, 2.307, 2.311, 2.312, 2.316, 2.325, 2.335,
+ 2.324, 2.326, 2.325, 2.326, 2.321, 2.311, 2.305, 2.301, 2.297, 2.295, 2.293, 2.291, 2.289, 2.289, 2.288, 2.288, 2.287, 2.288, 2.289, 2.291, 2.292, 2.292, 2.295, 2.299, 2.301, 2.304, 2.309, 2.312, 2.315, 2.319, 2.327, 2.337,
+ 2.329, 2.329, 2.328, 2.328, 2.323, 2.315, 2.308, 2.304, 2.301, 2.298, 2.296, 2.294, 2.291, 2.291, 2.289, 2.291, 2.291, 2.291, 2.292, 2.293, 2.294, 2.295, 2.297, 2.299, 2.303, 2.308, 2.312, 2.315, 2.318, 2.321, 2.329, 2.339,
+ 2.329, 2.331, 2.332, 2.332, 2.326, 2.318, 2.311, 2.306, 2.304, 2.301, 2.299, 2.297, 2.295, 2.293, 2.292, 2.292, 2.292, 2.293, 2.294, 2.294, 2.296, 2.297, 2.299, 2.302, 2.306, 2.311, 2.315, 2.318, 2.319, 2.324, 2.332, 2.342,
+ 2.331, 2.333, 2.334, 2.334, 2.328, 2.321, 2.313, 2.308, 2.305, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.295, 2.294, 2.296, 2.296, 2.297, 2.298, 2.299, 2.302, 2.305, 2.308, 2.314, 2.317, 2.321, 2.323, 2.327, 2.334, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.309, 2.306, 2.304, 2.303, 2.301, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.309, 2.315, 2.319, 2.321, 2.324, 2.328, 2.337, 2.346,
+ 2.331, 2.332, 2.334, 2.334, 2.329, 2.321, 2.314, 2.311, 2.306, 2.304, 2.303, 2.302, 2.299, 2.297, 2.295, 2.295, 2.296, 2.297, 2.298, 2.298, 2.299, 2.301, 2.303, 2.306, 2.311, 2.314, 2.319, 2.323, 2.325, 2.329, 2.339, 2.348,
+ 2.329, 2.329, 2.329, 2.331, 2.326, 2.319, 2.312, 2.309, 2.304, 2.303, 2.302, 2.301, 2.298, 2.295, 2.294, 2.294, 2.295, 2.295, 2.296, 2.297, 2.299, 2.301, 2.302, 2.304, 2.308, 2.313, 2.319, 2.322, 2.325, 2.329, 2.339, 2.351,
+ 2.329, 2.329, 2.329, 2.329, 2.326, 2.317, 2.311, 2.308, 2.303, 2.302, 2.301, 2.298, 2.296, 2.295, 2.294, 2.294, 2.294, 2.294, 2.296, 2.297, 2.298, 2.299, 2.301, 2.304, 2.307, 2.312, 2.318, 2.322, 2.326, 2.331, 2.341, 2.355,
+ 2.339, 2.332, 2.331, 2.331, 2.327, 2.323, 2.316, 2.309, 2.306, 2.302, 2.301, 2.299, 2.297, 2.296, 2.295, 2.294, 2.294, 2.296, 2.297, 2.297, 2.299, 2.301, 2.303, 2.306, 2.308, 2.317, 2.322, 2.325, 2.329, 2.341, 2.353, 2.361,
+ 2.347, 2.347, 2.345, 2.343, 2.338, 2.332, 2.326, 2.322, 2.321, 2.318, 2.316, 2.315, 2.313, 2.312, 2.311, 2.311, 2.311, 2.311, 2.312, 2.315, 2.317, 2.318, 2.319, 2.323, 2.324, 2.329, 2.334, 2.337, 2.344, 2.347, 2.361, 2.364
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 3.869, 3.852, 3.844, 3.842, 3.836, 3.821, 3.807, 3.796, 3.789, 3.784, 3.778, 3.775, 3.769, 3.768, 3.765, 3.765, 3.767, 3.769, 3.772, 3.774, 3.773, 3.775, 3.779, 3.787, 3.793, 3.801, 3.806, 3.804, 3.813, 3.819, 3.855, 3.879,
+ 3.854, 3.844, 3.837, 3.836, 3.824, 3.811, 3.797, 3.789, 3.784, 3.777, 3.774, 3.769, 3.764, 3.758, 3.757, 3.758, 3.758, 3.761, 3.763, 3.764, 3.765, 3.766, 3.772, 3.778, 3.787, 3.792, 3.794, 3.798, 3.802, 3.815, 3.839, 3.873,
+ 3.838, 3.831, 3.826, 3.823, 3.813, 3.799, 3.787, 3.781, 3.773, 3.768, 3.763, 3.759, 3.753, 3.749, 3.745, 3.745, 3.745, 3.752, 3.754, 3.757, 3.757, 3.759, 3.763, 3.769, 3.773, 3.781, 3.786, 3.792, 3.798, 3.811, 3.831, 3.861,
+ 3.833, 3.822, 3.817, 3.816, 3.804, 3.788, 3.779, 3.772, 3.766, 3.759, 3.755, 3.749, 3.744, 3.741, 3.738, 3.739, 3.739, 3.741, 3.743, 3.747, 3.749, 3.751, 3.756, 3.764, 3.769, 3.776, 3.783, 3.789, 3.798, 3.809, 3.821, 3.855,
+ 3.824, 3.818, 3.808, 3.808, 3.797, 3.781, 3.772, 3.764, 3.757, 3.752, 3.747, 3.743, 3.737, 3.735, 3.733, 3.733, 3.733, 3.735, 3.737, 3.738, 3.741, 3.746, 3.749, 3.755, 3.766, 3.771, 3.781, 3.789, 3.794, 3.806, 3.818, 3.849,
+ 3.815, 3.808, 3.799, 3.801, 3.787, 3.775, 3.767, 3.757, 3.751, 3.745, 3.738, 3.734, 3.732, 3.727, 3.725, 3.723, 3.722, 3.722, 3.726, 3.729, 3.734, 3.738, 3.744, 3.749, 3.759, 3.769, 3.781, 3.788, 3.792, 3.799, 3.811, 3.841,
+ 3.804, 3.799, 3.793, 3.793, 3.783, 3.771, 3.759, 3.751, 3.744, 3.735, 3.732, 3.727, 3.723, 3.721, 3.719, 3.716, 3.716, 3.716, 3.718, 3.722, 3.727, 3.731, 3.737, 3.746, 3.756, 3.767, 3.776, 3.782, 3.788, 3.795, 3.808, 3.831,
+ 3.802, 3.797, 3.787, 3.787, 3.779, 3.762, 3.753, 3.744, 3.734, 3.727, 3.725, 3.721, 3.716, 3.714, 3.709, 3.709, 3.711, 3.711, 3.712, 3.717, 3.722, 3.725, 3.731, 3.739, 3.752, 3.762, 3.772, 3.778, 3.779, 3.789, 3.798, 3.826,
+ 3.791, 3.789, 3.784, 3.784, 3.775, 3.759, 3.746, 3.735, 3.729, 3.724, 3.718, 3.714, 3.712, 3.707, 3.704, 3.704, 3.706, 3.708, 3.709, 3.711, 3.716, 3.722, 3.726, 3.735, 3.746, 3.754, 3.767, 3.774, 3.777, 3.781, 3.794, 3.824,
+ 3.789, 3.784, 3.779, 3.781, 3.771, 3.753, 3.741, 3.732, 3.725, 3.719, 3.715, 3.711, 3.707, 3.704, 3.701, 3.701, 3.702, 3.704, 3.708, 3.709, 3.713, 3.718, 3.724, 3.731, 3.742, 3.749, 3.761, 3.768, 3.772, 3.778, 3.791, 3.822,
+ 3.789, 3.781, 3.777, 3.777, 3.764, 3.749, 3.739, 3.729, 3.722, 3.718, 3.711, 3.708, 3.705, 3.701, 3.699, 3.699, 3.699, 3.701, 3.705, 3.707, 3.711, 3.715, 3.721, 3.727, 3.738, 3.746, 3.757, 3.763, 3.765, 3.773, 3.788, 3.821,
+ 3.785, 3.779, 3.774, 3.774, 3.764, 3.747, 3.736, 3.726, 3.719, 3.711, 3.709, 3.706, 3.701, 3.698, 3.696, 3.695, 3.695, 3.698, 3.702, 3.704, 3.707, 3.712, 3.718, 3.725, 3.734, 3.741, 3.753, 3.756, 3.759, 3.764, 3.784, 3.818,
+ 3.779, 3.776, 3.773, 3.773, 3.759, 3.744, 3.733, 3.724, 3.714, 3.709, 3.706, 3.704, 3.699, 3.696, 3.694, 3.694, 3.694, 3.697, 3.701, 3.703, 3.706, 3.709, 3.714, 3.721, 3.731, 3.737, 3.749, 3.753, 3.758, 3.762, 3.783, 3.819,
+ 3.779, 3.776, 3.769, 3.769, 3.757, 3.741, 3.729, 3.721, 3.712, 3.708, 3.705, 3.701, 3.697, 3.695, 3.694, 3.694, 3.695, 3.696, 3.698, 3.702, 3.705, 3.709, 3.712, 3.717, 3.728, 3.736, 3.749, 3.752, 3.756, 3.761, 3.781, 3.815,
+ 3.779, 3.773, 3.768, 3.768, 3.756, 3.738, 3.731, 3.719, 3.711, 3.707, 3.703, 3.698, 3.695, 3.694, 3.694, 3.695, 3.695, 3.695, 3.696, 3.702, 3.705, 3.708, 3.712, 3.717, 3.728, 3.736, 3.747, 3.751, 3.754, 3.761, 3.781, 3.815,
+ 3.782, 3.773, 3.767, 3.767, 3.755, 3.738, 3.728, 3.721, 3.711, 3.707, 3.701, 3.698, 3.695, 3.693, 3.694, 3.696, 3.695, 3.695, 3.695, 3.701, 3.703, 3.706, 3.711, 3.715, 3.726, 3.735, 3.745, 3.751, 3.754, 3.763, 3.779, 3.815,
+ 3.781, 3.771, 3.767, 3.767, 3.754, 3.739, 3.726, 3.721, 3.712, 3.706, 3.701, 3.698, 3.695, 3.693, 3.693, 3.695, 3.695, 3.695, 3.696, 3.698, 3.703, 3.705, 3.709, 3.715, 3.725, 3.734, 3.745, 3.751, 3.755, 3.762, 3.783, 3.818,
+ 3.781, 3.774, 3.767, 3.767, 3.755, 3.741, 3.729, 3.722, 3.712, 3.708, 3.701, 3.699, 3.695, 3.693, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.725, 3.732, 3.746, 3.751, 3.756, 3.763, 3.783, 3.821,
+ 3.781, 3.774, 3.769, 3.769, 3.756, 3.741, 3.731, 3.724, 3.713, 3.711, 3.707, 3.699, 3.697, 3.694, 3.693, 3.694, 3.695, 3.695, 3.697, 3.698, 3.702, 3.704, 3.709, 3.713, 3.724, 3.734, 3.747, 3.751, 3.756, 3.765, 3.784, 3.821,
+ 3.784, 3.776, 3.773, 3.773, 3.759, 3.742, 3.733, 3.726, 3.719, 3.711, 3.709, 3.703, 3.698, 3.695, 3.694, 3.695, 3.697, 3.696, 3.698, 3.699, 3.703, 3.706, 3.711, 3.714, 3.727, 3.735, 3.746, 3.751, 3.757, 3.766, 3.787, 3.822,
+ 3.786, 3.783, 3.774, 3.774, 3.766, 3.747, 3.737, 3.727, 3.722, 3.716, 3.711, 3.706, 3.702, 3.698, 3.697, 3.698, 3.699, 3.699, 3.701, 3.703, 3.706, 3.711, 3.713, 3.719, 3.731, 3.739, 3.748, 3.753, 3.761, 3.769, 3.789, 3.826,
+ 3.786, 3.784, 3.779, 3.779, 3.769, 3.751, 3.742, 3.732, 3.725, 3.719, 3.715, 3.711, 3.706, 3.704, 3.701, 3.701, 3.702, 3.702, 3.705, 3.707, 3.712, 3.714, 3.717, 3.724, 3.733, 3.743, 3.749, 3.758, 3.764, 3.769, 3.791, 3.826,
+ 3.793, 3.787, 3.782, 3.782, 3.774, 3.756, 3.747, 3.737, 3.729, 3.725, 3.719, 3.715, 3.712, 3.708, 3.707, 3.706, 3.707, 3.708, 3.709, 3.713, 3.714, 3.717, 3.723, 3.729, 3.736, 3.747, 3.757, 3.764, 3.768, 3.774, 3.794, 3.829,
+ 3.794, 3.791, 3.786, 3.786, 3.779, 3.762, 3.751, 3.742, 3.735, 3.729, 3.725, 3.719, 3.716, 3.711, 3.709, 3.709, 3.709, 3.711, 3.716, 3.717, 3.721, 3.723, 3.726, 3.732, 3.741, 3.752, 3.761, 3.767, 3.773, 3.779, 3.801, 3.829,
+ 3.802, 3.798, 3.793, 3.793, 3.779, 3.766, 3.754, 3.746, 3.741, 3.736, 3.731, 3.726, 3.719, 3.717, 3.716, 3.715, 3.716, 3.717, 3.719, 3.721, 3.724, 3.726, 3.731, 3.737, 3.744, 3.756, 3.766, 3.772, 3.776, 3.784, 3.807, 3.839,
+ 3.805, 3.799, 3.795, 3.795, 3.784, 3.767, 3.757, 3.749, 3.744, 3.739, 3.736, 3.731, 3.726, 3.722, 3.719, 3.719, 3.719, 3.721, 3.723, 3.725, 3.727, 3.732, 3.738, 3.742, 3.751, 3.761, 3.771, 3.775, 3.782, 3.789, 3.811, 3.841,
+ 3.804, 3.801, 3.799, 3.799, 3.787, 3.772, 3.761, 3.752, 3.746, 3.742, 3.739, 3.735, 3.729, 3.726, 3.723, 3.724, 3.725, 3.726, 3.727, 3.728, 3.732, 3.736, 3.739, 3.745, 3.754, 3.765, 3.775, 3.779, 3.785, 3.795, 3.816, 3.844,
+ 3.801, 3.799, 3.796, 3.796, 3.787, 3.773, 3.761, 3.753, 3.746, 3.743, 3.739, 3.735, 3.731, 3.726, 3.725, 3.725, 3.725, 3.726, 3.727, 3.729, 3.733, 3.736, 3.741, 3.745, 3.755, 3.766, 3.776, 3.783, 3.786, 3.797, 3.819, 3.851,
+ 3.799, 3.795, 3.788, 3.788, 3.783, 3.772, 3.759, 3.749, 3.744, 3.738, 3.735, 3.733, 3.726, 3.724, 3.722, 3.722, 3.723, 3.724, 3.725, 3.727, 3.729, 3.733, 3.736, 3.742, 3.754, 3.762, 3.772, 3.779, 3.784, 3.796, 3.821, 3.859,
+ 3.799, 3.789, 3.787, 3.788, 3.779, 3.766, 3.755, 3.749, 3.742, 3.736, 3.733, 3.727, 3.723, 3.722, 3.721, 3.719, 3.719, 3.721, 3.725, 3.726, 3.728, 3.732, 3.734, 3.741, 3.747, 3.758, 3.771, 3.778, 3.785, 3.796, 3.825, 3.862,
+ 3.824, 3.799, 3.789, 3.789, 3.788, 3.777, 3.761, 3.751, 3.743, 3.739, 3.736, 3.728, 3.726, 3.725, 3.721, 3.719, 3.721, 3.723, 3.727, 3.728, 3.729, 3.733, 3.737, 3.744, 3.755, 3.769, 3.776, 3.784, 3.793, 3.819, 3.863, 3.877,
+ 3.833, 3.833, 3.833, 3.842, 3.825, 3.815, 3.807, 3.799, 3.792, 3.788, 3.785, 3.782, 3.778, 3.777, 3.773, 3.772, 3.772, 3.774, 3.778, 3.779, 3.779, 3.785, 3.792, 3.798, 3.803, 3.811, 3.822, 3.834, 3.843, 3.846, 3.877, 3.886
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.616, 2.616, 2.618, 2.621, 2.619, 2.618, 2.615, 2.615, 2.613, 2.611, 2.609, 2.609, 2.609, 2.611, 2.611, 2.611, 2.611, 2.609, 2.608, 2.608, 2.611, 2.613, 2.613, 2.614, 2.614, 2.615, 2.615, 2.622, 2.624, 2.621, 2.624, 2.641,
+ 2.616, 2.618, 2.621, 2.623, 2.623, 2.619, 2.618, 2.616, 2.616, 2.613, 2.611, 2.611, 2.611, 2.611, 2.612, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.612, 2.613, 2.612, 2.613, 2.615, 2.617, 2.621, 2.621, 2.619, 2.621, 2.641,
+ 2.621, 2.624, 2.627, 2.627, 2.625, 2.623, 2.621, 2.619, 2.618, 2.618, 2.618, 2.617, 2.616, 2.616, 2.615, 2.613, 2.612, 2.613, 2.613, 2.614, 2.614, 2.613, 2.614, 2.613, 2.614, 2.617, 2.619, 2.621, 2.621, 2.619, 2.623, 2.643,
+ 2.626, 2.627, 2.628, 2.629, 2.628, 2.625, 2.622, 2.621, 2.621, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.616, 2.616, 2.616, 2.618, 2.618, 2.617, 2.617, 2.618, 2.619, 2.621, 2.623, 2.624, 2.626, 2.625, 2.624, 2.625, 2.654,
+ 2.627, 2.628, 2.628, 2.628, 2.626, 2.623, 2.622, 2.622, 2.622, 2.622, 2.621, 2.621, 2.619, 2.617, 2.617, 2.616, 2.617, 2.617, 2.618, 2.619, 2.618, 2.618, 2.618, 2.621, 2.622, 2.624, 2.626, 2.627, 2.627, 2.626, 2.628, 2.655,
+ 2.625, 2.626, 2.627, 2.626, 2.625, 2.623, 2.622, 2.621, 2.622, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.616, 2.616, 2.616, 2.616, 2.616, 2.617, 2.618, 2.619, 2.621, 2.622, 2.624, 2.626, 2.628, 2.628, 2.629, 2.629, 2.655,
+ 2.626, 2.625, 2.626, 2.625, 2.625, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.616, 2.614, 2.613, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.618, 2.619, 2.621, 2.623, 2.624, 2.627, 2.629, 2.631, 2.629, 2.631, 2.651,
+ 2.625, 2.625, 2.625, 2.624, 2.623, 2.623, 2.622, 2.622, 2.622, 2.621, 2.619, 2.617, 2.614, 2.613, 2.612, 2.611, 2.611, 2.612, 2.612, 2.613, 2.616, 2.618, 2.619, 2.622, 2.624, 2.626, 2.628, 2.631, 2.631, 2.631, 2.631, 2.651,
+ 2.625, 2.625, 2.624, 2.623, 2.622, 2.622, 2.622, 2.622, 2.622, 2.621, 2.617, 2.615, 2.613, 2.612, 2.611, 2.611, 2.611, 2.611, 2.611, 2.613, 2.615, 2.618, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.624, 2.624, 2.622, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.618, 2.616, 2.614, 2.612, 2.611, 2.609, 2.609, 2.608, 2.609, 2.611, 2.611, 2.615, 2.617, 2.619, 2.621, 2.625, 2.628, 2.631, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.622, 2.623, 2.622, 2.622, 2.621, 2.619, 2.619, 2.619, 2.618, 2.616, 2.614, 2.613, 2.611, 2.609, 2.608, 2.606, 2.607, 2.607, 2.609, 2.611, 2.615, 2.617, 2.619, 2.622, 2.626, 2.629, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.622, 2.622, 2.621, 2.619, 2.619, 2.618, 2.617, 2.614, 2.613, 2.611, 2.611, 2.607, 2.606, 2.605, 2.604, 2.605, 2.607, 2.609, 2.613, 2.616, 2.619, 2.622, 2.627, 2.631, 2.632, 2.632, 2.631, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.621, 2.621, 2.619, 2.617, 2.616, 2.615, 2.613, 2.609, 2.607, 2.604, 2.602, 2.601, 2.602, 2.603, 2.605, 2.609, 2.612, 2.616, 2.619, 2.624, 2.628, 2.631, 2.632, 2.633, 2.629, 2.627, 2.627, 2.651,
+ 2.619, 2.621, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.615, 2.614, 2.612, 2.608, 2.603, 2.601, 2.598, 2.597, 2.599, 2.602, 2.605, 2.608, 2.611, 2.615, 2.622, 2.625, 2.629, 2.631, 2.631, 2.633, 2.631, 2.627, 2.627, 2.651,
+ 2.621, 2.622, 2.623, 2.623, 2.622, 2.621, 2.618, 2.617, 2.616, 2.614, 2.611, 2.606, 2.601, 2.598, 2.595, 2.595, 2.597, 2.601, 2.604, 2.608, 2.612, 2.615, 2.623, 2.627, 2.629, 2.631, 2.631, 2.632, 2.631, 2.628, 2.628, 2.651,
+ 2.622, 2.623, 2.624, 2.624, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.609, 2.606, 2.601, 2.596, 2.594, 2.594, 2.596, 2.599, 2.603, 2.609, 2.613, 2.617, 2.623, 2.627, 2.629, 2.631, 2.632, 2.632, 2.631, 2.629, 2.631, 2.651,
+ 2.623, 2.625, 2.625, 2.624, 2.621, 2.621, 2.619, 2.617, 2.616, 2.613, 2.608, 2.605, 2.601, 2.595, 2.593, 2.593, 2.595, 2.598, 2.604, 2.609, 2.615, 2.619, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.632, 2.629, 2.631, 2.651,
+ 2.624, 2.626, 2.626, 2.623, 2.621, 2.619, 2.618, 2.617, 2.615, 2.612, 2.608, 2.605, 2.601, 2.597, 2.595, 2.595, 2.596, 2.598, 2.605, 2.609, 2.616, 2.621, 2.626, 2.627, 2.629, 2.631, 2.633, 2.633, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.618, 2.617, 2.614, 2.612, 2.609, 2.606, 2.602, 2.599, 2.598, 2.597, 2.598, 2.602, 2.607, 2.612, 2.619, 2.621, 2.626, 2.628, 2.629, 2.632, 2.633, 2.634, 2.633, 2.631, 2.631, 2.655,
+ 2.624, 2.625, 2.625, 2.623, 2.621, 2.621, 2.618, 2.617, 2.614, 2.612, 2.611, 2.608, 2.604, 2.602, 2.599, 2.599, 2.603, 2.606, 2.611, 2.616, 2.621, 2.624, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.634, 2.633, 2.633, 2.656,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.621, 2.619, 2.617, 2.615, 2.613, 2.611, 2.611, 2.607, 2.604, 2.604, 2.604, 2.606, 2.609, 2.613, 2.619, 2.622, 2.625, 2.628, 2.631, 2.632, 2.633, 2.633, 2.636, 2.636, 2.634, 2.634, 2.658,
+ 2.623, 2.624, 2.625, 2.623, 2.622, 2.619, 2.618, 2.616, 2.614, 2.613, 2.612, 2.611, 2.609, 2.608, 2.607, 2.608, 2.609, 2.613, 2.617, 2.621, 2.623, 2.626, 2.629, 2.631, 2.632, 2.633, 2.634, 2.635, 2.636, 2.636, 2.636, 2.661,
+ 2.623, 2.624, 2.625, 2.625, 2.623, 2.621, 2.619, 2.616, 2.615, 2.614, 2.613, 2.612, 2.612, 2.611, 2.611, 2.611, 2.614, 2.615, 2.619, 2.622, 2.625, 2.627, 2.631, 2.632, 2.633, 2.635, 2.635, 2.637, 2.637, 2.636, 2.637, 2.661,
+ 2.623, 2.624, 2.625, 2.626, 2.624, 2.621, 2.619, 2.617, 2.616, 2.615, 2.615, 2.614, 2.614, 2.614, 2.614, 2.614, 2.616, 2.619, 2.621, 2.623, 2.626, 2.628, 2.631, 2.632, 2.634, 2.635, 2.636, 2.637, 2.638, 2.637, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.627, 2.626, 2.623, 2.619, 2.619, 2.618, 2.618, 2.618, 2.617, 2.617, 2.616, 2.616, 2.616, 2.619, 2.622, 2.623, 2.625, 2.628, 2.628, 2.631, 2.632, 2.634, 2.636, 2.638, 2.639, 2.639, 2.638, 2.638, 2.661,
+ 2.625, 2.626, 2.627, 2.628, 2.626, 2.623, 2.621, 2.619, 2.619, 2.619, 2.619, 2.619, 2.619, 2.618, 2.618, 2.619, 2.623, 2.624, 2.625, 2.627, 2.629, 2.629, 2.632, 2.633, 2.635, 2.638, 2.639, 2.639, 2.639, 2.636, 2.636, 2.662,
+ 2.625, 2.627, 2.628, 2.628, 2.626, 2.624, 2.623, 2.622, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.621, 2.624, 2.624, 2.625, 2.627, 2.628, 2.631, 2.631, 2.632, 2.634, 2.636, 2.639, 2.639, 2.641, 2.639, 2.635, 2.635, 2.663,
+ 2.625, 2.626, 2.628, 2.628, 2.627, 2.625, 2.624, 2.623, 2.623, 2.622, 2.623, 2.624, 2.624, 2.625, 2.625, 2.625, 2.625, 2.626, 2.627, 2.629, 2.631, 2.632, 2.633, 2.635, 2.638, 2.641, 2.642, 2.643, 2.642, 2.636, 2.636, 2.665,
+ 2.624, 2.626, 2.628, 2.628, 2.628, 2.626, 2.624, 2.624, 2.623, 2.623, 2.623, 2.625, 2.627, 2.627, 2.626, 2.626, 2.626, 2.627, 2.628, 2.629, 2.632, 2.633, 2.635, 2.637, 2.639, 2.642, 2.644, 2.644, 2.642, 2.638, 2.638, 2.665,
+ 2.623, 2.625, 2.626, 2.627, 2.626, 2.626, 2.624, 2.623, 2.623, 2.623, 2.623, 2.623, 2.626, 2.627, 2.626, 2.626, 2.626, 2.626, 2.628, 2.628, 2.629, 2.631, 2.634, 2.636, 2.639, 2.642, 2.644, 2.643, 2.641, 2.637, 2.638, 2.659,
+ 2.623, 2.627, 2.627, 2.627, 2.627, 2.628, 2.627, 2.624, 2.624, 2.623, 2.624, 2.624, 2.628, 2.628, 2.627, 2.628, 2.628, 2.628, 2.629, 2.629, 2.631, 2.635, 2.637, 2.639, 2.641, 2.643, 2.646, 2.645, 2.643, 2.641, 2.654, 2.659,
+ 2.642, 2.641, 2.643, 2.645, 2.645, 2.644, 2.644, 2.643, 2.643, 2.642, 2.642, 2.642, 2.643, 2.644, 2.644, 2.644, 2.646, 2.646, 2.647, 2.649, 2.651, 2.652, 2.654, 2.656, 2.658, 2.661, 2.661, 2.661, 2.659, 2.654, 2.659, 2.659
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.391, 1.394, 1.395, 1.396, 1.398, 1.398, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.398, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.398, 1.399, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.399, 1.397, 1.399, 1.402,
+ 1.393, 1.395, 1.396, 1.398, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.401, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.399, 1.398, 1.398, 1.399, 1.401, 1.401, 1.399, 1.398, 1.399, 1.402,
+ 1.398, 1.401, 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.401, 1.401, 1.399, 1.399, 1.401, 1.401, 1.401, 1.401, 1.399, 1.401, 1.406,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.402, 1.403, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.405, 1.404, 1.404, 1.404, 1.404, 1.405, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.404, 1.405, 1.412,
+ 1.401, 1.401, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.406, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.405, 1.404, 1.404, 1.404, 1.404, 1.404, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.407, 1.408, 1.408, 1.407, 1.405, 1.405, 1.412,
+ 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.404, 1.405, 1.406, 1.405, 1.405, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.402, 1.402, 1.402, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.403, 1.402, 1.402, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.408, 1.407, 1.405, 1.405, 1.414,
+ 1.402, 1.402, 1.402, 1.402, 1.403, 1.403, 1.405, 1.405, 1.405, 1.405, 1.404, 1.404, 1.403, 1.402, 1.402, 1.401, 1.401, 1.402, 1.403, 1.403, 1.404, 1.405, 1.406, 1.407, 1.409, 1.409, 1.409, 1.409, 1.407, 1.405, 1.405, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.403, 1.404, 1.405, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.408, 1.405, 1.405, 1.413,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.405, 1.404, 1.402, 1.401, 1.399, 1.398, 1.398, 1.399, 1.399, 1.401, 1.403, 1.404, 1.405, 1.407, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.401, 1.398, 1.397, 1.397, 1.398, 1.399, 1.401, 1.403, 1.404, 1.405, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.399, 1.401, 1.403, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.408, 1.406, 1.406, 1.413,
+ 1.403, 1.404, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.404, 1.403, 1.402, 1.399, 1.397, 1.396, 1.396, 1.397, 1.398, 1.401, 1.403, 1.406, 1.407, 1.409, 1.409, 1.411, 1.409, 1.409, 1.409, 1.408, 1.407, 1.407, 1.413,
+ 1.403, 1.404, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.404, 1.404, 1.403, 1.402, 1.399, 1.398, 1.397, 1.397, 1.398, 1.399, 1.402, 1.404, 1.406, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.414,
+ 1.403, 1.403, 1.404, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.402, 1.401, 1.399, 1.398, 1.398, 1.398, 1.401, 1.403, 1.404, 1.408, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.401, 1.401, 1.399, 1.399, 1.401, 1.402, 1.404, 1.407, 1.408, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.407, 1.407, 1.415,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.403, 1.403, 1.403, 1.402, 1.401, 1.401, 1.401, 1.402, 1.404, 1.406, 1.407, 1.408, 1.409, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.409, 1.408, 1.408, 1.415,
+ 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.405, 1.406, 1.408, 1.408, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.409, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.402, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.403, 1.404, 1.404, 1.404, 1.405, 1.406, 1.407, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.416,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.407, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.405, 1.406, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.409, 1.408, 1.408, 1.417,
+ 1.403, 1.403, 1.403, 1.403, 1.404, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.406, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.416,
+ 1.402, 1.403, 1.403, 1.403, 1.404, 1.404, 1.404, 1.404, 1.405, 1.405, 1.406, 1.407, 1.407, 1.407, 1.408, 1.409, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.409, 1.407, 1.407, 1.417,
+ 1.402, 1.403, 1.403, 1.404, 1.404, 1.404, 1.405, 1.405, 1.405, 1.406, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.415,
+ 1.402, 1.402, 1.403, 1.403, 1.404, 1.404, 1.405, 1.405, 1.405, 1.405, 1.406, 1.407, 1.408, 1.408, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.412, 1.411, 1.409, 1.407, 1.407, 1.413,
+ 1.402, 1.402, 1.403, 1.403, 1.405, 1.406, 1.406, 1.406, 1.406, 1.406, 1.407, 1.408, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.412, 1.412, 1.413, 1.413, 1.411, 1.408, 1.411, 1.413,
+ 1.406, 1.406, 1.408, 1.408, 1.409, 1.409, 1.411, 1.411, 1.411, 1.411, 1.411, 1.411, 1.414, 1.414, 1.414, 1.414, 1.415, 1.415, 1.415, 1.415, 1.416, 1.416, 1.416, 1.417, 1.418, 1.418, 1.417, 1.417, 1.414, 1.411, 1.413, 1.413
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.554, 1.522, 1.466, 1.422, 1.385, 1.351, 1.322, 1.294, 1.269, 1.246, 1.228, 1.214, 1.207, 1.202, 1.199, 1.199, 1.199, 1.199, 1.202, 1.207, 1.218, 1.235, 1.255, 1.279, 1.305, 1.333, 1.365, 1.402, 1.447, 1.508, 1.602, 1.638,
+ 1.522, 1.478, 1.431, 1.391, 1.355, 1.323, 1.298, 1.271, 1.247, 1.228, 1.212, 1.199, 1.187, 1.179, 1.173, 1.172, 1.172, 1.174, 1.179, 1.189, 1.201, 1.216, 1.235, 1.256, 1.282, 1.308, 1.335, 1.368, 1.411, 1.461, 1.535, 1.602,
+ 1.479, 1.449, 1.407, 1.367, 1.332, 1.301, 1.271, 1.247, 1.226, 1.208, 1.191, 1.178, 1.166, 1.158, 1.153, 1.151, 1.151, 1.153, 1.159, 1.168, 1.179, 1.194, 1.212, 1.234, 1.256, 1.282, 1.311, 1.343, 1.382, 1.427, 1.489, 1.535,
+ 1.454, 1.423, 1.383, 1.345, 1.309, 1.278, 1.249, 1.226, 1.206, 1.187, 1.171, 1.158, 1.146, 1.138, 1.132, 1.129, 1.129, 1.133, 1.139, 1.147, 1.159, 1.173, 1.191, 1.212, 1.234, 1.261, 1.288, 1.321, 1.357, 1.401, 1.455, 1.489,
+ 1.433, 1.401, 1.362, 1.325, 1.289, 1.258, 1.231, 1.206, 1.187, 1.169, 1.153, 1.138, 1.129, 1.121, 1.115, 1.112, 1.112, 1.114, 1.121, 1.129, 1.141, 1.155, 1.172, 1.191, 1.214, 1.241, 1.269, 1.301, 1.337, 1.377, 1.428, 1.457,
+ 1.415, 1.382, 1.343, 1.306, 1.273, 1.241, 1.213, 1.189, 1.169, 1.153, 1.137, 1.123, 1.112, 1.105, 1.097, 1.095, 1.095, 1.098, 1.103, 1.112, 1.124, 1.139, 1.155, 1.173, 1.197, 1.222, 1.252, 1.282, 1.317, 1.356, 1.405, 1.434,
+ 1.398, 1.363, 1.325, 1.289, 1.256, 1.224, 1.198, 1.175, 1.155, 1.137, 1.123, 1.108, 1.097, 1.089, 1.083, 1.079, 1.079, 1.083, 1.088, 1.097, 1.109, 1.124, 1.139, 1.158, 1.181, 1.206, 1.234, 1.266, 1.299, 1.339, 1.384, 1.415,
+ 1.382, 1.347, 1.309, 1.274, 1.242, 1.211, 1.185, 1.162, 1.142, 1.124, 1.108, 1.095, 1.083, 1.075, 1.069, 1.066, 1.066, 1.068, 1.074, 1.083, 1.096, 1.109, 1.125, 1.145, 1.166, 1.191, 1.219, 1.251, 1.285, 1.324, 1.367, 1.399,
+ 1.369, 1.334, 1.296, 1.261, 1.228, 1.199, 1.173, 1.151, 1.131, 1.112, 1.095, 1.083, 1.071, 1.062, 1.056, 1.053, 1.053, 1.055, 1.061, 1.069, 1.083, 1.096, 1.112, 1.132, 1.153, 1.178, 1.206, 1.237, 1.271, 1.309, 1.353, 1.385,
+ 1.359, 1.321, 1.284, 1.251, 1.217, 1.189, 1.164, 1.141, 1.121, 1.102, 1.086, 1.071, 1.061, 1.049, 1.045, 1.042, 1.042, 1.043, 1.051, 1.061, 1.069, 1.085, 1.101, 1.121, 1.143, 1.167, 1.195, 1.225, 1.259, 1.298, 1.341, 1.375,
+ 1.351, 1.312, 1.275, 1.241, 1.209, 1.181, 1.155, 1.133, 1.112, 1.092, 1.076, 1.061, 1.049, 1.041, 1.034, 1.032, 1.032, 1.035, 1.041, 1.051, 1.061, 1.075, 1.092, 1.112, 1.133, 1.158, 1.185, 1.216, 1.249, 1.288, 1.331, 1.364,
+ 1.344, 1.303, 1.267, 1.233, 1.201, 1.173, 1.147, 1.124, 1.104, 1.085, 1.067, 1.053, 1.041, 1.033, 1.024, 1.022, 1.022, 1.025, 1.034, 1.041, 1.053, 1.066, 1.083, 1.103, 1.126, 1.149, 1.177, 1.207, 1.241, 1.279, 1.321, 1.357,
+ 1.339, 1.297, 1.261, 1.226, 1.194, 1.166, 1.142, 1.119, 1.098, 1.078, 1.061, 1.046, 1.034, 1.024, 1.017, 1.014, 1.014, 1.017, 1.025, 1.034, 1.046, 1.059, 1.077, 1.096, 1.118, 1.143, 1.169, 1.201, 1.235, 1.273, 1.314, 1.352,
+ 1.337, 1.293, 1.256, 1.223, 1.191, 1.163, 1.136, 1.114, 1.093, 1.074, 1.056, 1.041, 1.027, 1.017, 1.012, 1.006, 1.006, 1.013, 1.017, 1.028, 1.041, 1.055, 1.072, 1.092, 1.114, 1.138, 1.165, 1.195, 1.229, 1.268, 1.309, 1.348,
+ 1.337, 1.291, 1.253, 1.219, 1.187, 1.159, 1.133, 1.109, 1.089, 1.071, 1.053, 1.037, 1.023, 1.012, 1.006, 1.002, 1.003, 1.006, 1.013, 1.023, 1.038, 1.052, 1.069, 1.089, 1.111, 1.135, 1.161, 1.192, 1.226, 1.264, 1.306, 1.348,
+ 1.337, 1.291, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.035, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.341, 1.292, 1.253, 1.218, 1.186, 1.157, 1.132, 1.109, 1.088, 1.068, 1.049, 1.034, 1.021, 1.009, 1.001, 1.001, 1.001, 1.003, 1.011, 1.021, 1.035, 1.051, 1.069, 1.087, 1.109, 1.133, 1.161, 1.189, 1.224, 1.262, 1.304, 1.347,
+ 1.348, 1.298, 1.255, 1.219, 1.188, 1.159, 1.134, 1.111, 1.088, 1.069, 1.051, 1.035, 1.021, 1.009, 1.003, 1.001, 1.002, 1.004, 1.011, 1.022, 1.036, 1.053, 1.071, 1.089, 1.111, 1.135, 1.162, 1.191, 1.226, 1.264, 1.306, 1.347,
+ 1.354, 1.306, 1.258, 1.222, 1.191, 1.162, 1.135, 1.113, 1.092, 1.073, 1.054, 1.038, 1.024, 1.014, 1.008, 1.003, 1.004, 1.008, 1.014, 1.026, 1.039, 1.056, 1.073, 1.093, 1.115, 1.139, 1.165, 1.195, 1.229, 1.267, 1.309, 1.349,
+ 1.358, 1.312, 1.263, 1.227, 1.195, 1.167, 1.141, 1.117, 1.097, 1.078, 1.061, 1.043, 1.029, 1.021, 1.014, 1.008, 1.008, 1.014, 1.021, 1.032, 1.045, 1.061, 1.078, 1.097, 1.119, 1.144, 1.169, 1.201, 1.234, 1.272, 1.315, 1.353,
+ 1.364, 1.319, 1.269, 1.234, 1.201, 1.174, 1.148, 1.124, 1.103, 1.084, 1.067, 1.052, 1.038, 1.029, 1.021, 1.016, 1.016, 1.021, 1.029, 1.038, 1.051, 1.067, 1.084, 1.103, 1.126, 1.151, 1.176, 1.207, 1.241, 1.279, 1.321, 1.358,
+ 1.371, 1.326, 1.277, 1.242, 1.209, 1.181, 1.155, 1.132, 1.111, 1.092, 1.075, 1.061, 1.049, 1.038, 1.029, 1.027, 1.027, 1.029, 1.038, 1.047, 1.061, 1.075, 1.092, 1.111, 1.133, 1.157, 1.185, 1.213, 1.247, 1.286, 1.329, 1.365,
+ 1.379, 1.334, 1.287, 1.251, 1.219, 1.191, 1.164, 1.141, 1.119, 1.101, 1.085, 1.071, 1.061, 1.049, 1.041, 1.038, 1.038, 1.041, 1.047, 1.059, 1.071, 1.084, 1.101, 1.119, 1.141, 1.165, 1.193, 1.223, 1.257, 1.295, 1.338, 1.374,
+ 1.389, 1.343, 1.298, 1.262, 1.231, 1.201, 1.174, 1.151, 1.131, 1.111, 1.095, 1.083, 1.071, 1.061, 1.054, 1.051, 1.051, 1.054, 1.059, 1.071, 1.081, 1.094, 1.111, 1.129, 1.152, 1.176, 1.203, 1.235, 1.269, 1.307, 1.351, 1.384,
+ 1.401, 1.351, 1.311, 1.274, 1.242, 1.214, 1.187, 1.164, 1.142, 1.124, 1.108, 1.095, 1.083, 1.074, 1.068, 1.066, 1.066, 1.068, 1.073, 1.081, 1.094, 1.108, 1.123, 1.141, 1.164, 1.188, 1.215, 1.247, 1.281, 1.321, 1.364, 1.396,
+ 1.412, 1.366, 1.327, 1.289, 1.257, 1.227, 1.201, 1.176, 1.156, 1.137, 1.122, 1.108, 1.096, 1.088, 1.083, 1.081, 1.081, 1.082, 1.087, 1.095, 1.108, 1.122, 1.136, 1.154, 1.177, 1.201, 1.229, 1.261, 1.296, 1.337, 1.382, 1.409,
+ 1.421, 1.383, 1.343, 1.306, 1.273, 1.243, 1.216, 1.192, 1.169, 1.152, 1.137, 1.122, 1.111, 1.103, 1.098, 1.095, 1.095, 1.097, 1.102, 1.111, 1.123, 1.136, 1.152, 1.169, 1.191, 1.217, 1.246, 1.278, 1.314, 1.354, 1.399, 1.429,
+ 1.434, 1.402, 1.362, 1.324, 1.291, 1.261, 1.232, 1.208, 1.187, 1.168, 1.152, 1.138, 1.127, 1.119, 1.114, 1.112, 1.112, 1.115, 1.121, 1.128, 1.139, 1.152, 1.169, 1.186, 1.209, 1.234, 1.262, 1.295, 1.332, 1.372, 1.419, 1.451,
+ 1.453, 1.422, 1.382, 1.344, 1.309, 1.278, 1.249, 1.226, 1.204, 1.187, 1.168, 1.155, 1.144, 1.135, 1.131, 1.131, 1.131, 1.133, 1.138, 1.146, 1.157, 1.171, 1.186, 1.206, 1.227, 1.252, 1.281, 1.314, 1.351, 1.393, 1.442, 1.473,
+ 1.475, 1.446, 1.404, 1.366, 1.329, 1.298, 1.269, 1.245, 1.224, 1.204, 1.188, 1.174, 1.163, 1.154, 1.149, 1.148, 1.148, 1.152, 1.156, 1.164, 1.176, 1.189, 1.206, 1.226, 1.247, 1.274, 1.303, 1.336, 1.374, 1.417, 1.471, 1.505,
+ 1.503, 1.472, 1.428, 1.389, 1.353, 1.321, 1.291, 1.266, 1.245, 1.224, 1.207, 1.192, 1.183, 1.174, 1.169, 1.167, 1.168, 1.169, 1.175, 1.183, 1.195, 1.209, 1.226, 1.247, 1.267, 1.294, 1.325, 1.359, 1.397, 1.445, 1.505, 1.548,
+ 1.534, 1.503, 1.455, 1.413, 1.378, 1.344, 1.315, 1.289, 1.265, 1.243, 1.224, 1.207, 1.196, 1.192, 1.189, 1.189, 1.189, 1.189, 1.192, 1.198, 1.209, 1.226, 1.244, 1.266, 1.291, 1.318, 1.349, 1.383, 1.425, 1.475, 1.548, 1.591
+ ],
+ "sigma": 0.00095,
+ "sigma_Cb": 0.00098
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2360,
+ "ccm":
+ [
+ 1.66078, -0.23588, -0.42491,
+ -0.47456, 1.82763, -0.35307,
+ -0.00545, -1.44729, 2.45273
+ ]
+ },
+ {
+ "ct": 2870,
+ "ccm":
+ [
+ 1.78373, -0.55344, -0.23029,
+ -0.39951, 1.69701, -0.29751,
+ 0.01986, -1.06525, 2.04539
+ ]
+ },
+ {
+ "ct": 2970,
+ "ccm":
+ [
+ 1.73511, -0.56973, -0.16537,
+ -0.36338, 1.69878, -0.33539,
+ -0.02354, -0.76813, 1.79168
+ ]
+ },
+ {
+ "ct": 3000,
+ "ccm":
+ [
+ 2.06374, -0.92218, -0.14156,
+ -0.41721, 1.69289, -0.27568,
+ -0.00554, -0.92741, 1.93295
+ ]
+ },
+ {
+ "ct": 3700,
+ "ccm":
+ [
+ 2.13792, -1.08136, -0.05655,
+ -0.34739, 1.58989, -0.24249,
+ -0.00349, -0.76789, 1.77138
+ ]
+ },
+ {
+ "ct": 3870,
+ "ccm":
+ [
+ 1.83834, -0.70528, -0.13307,
+ -0.30499, 1.60523, -0.30024,
+ -0.05701, -0.58313, 1.64014
+ ]
+ },
+ {
+ "ct": 4000,
+ "ccm":
+ [
+ 2.15741, -1.10295, -0.05447,
+ -0.34631, 1.61158, -0.26528,
+ -0.02723, -0.70288, 1.73011
+ ]
+ },
+ {
+ "ct": 4400,
+ "ccm":
+ [
+ 2.05729, -0.95007, -0.10723,
+ -0.41712, 1.78606, -0.36894,
+ -0.11899, -0.55727, 1.67626
+ ]
+ },
+ {
+ "ct": 4715,
+ "ccm":
+ [
+ 1.90255, -0.77478, -0.12777,
+ -0.31338, 1.88197, -0.56858,
+ -0.06001, -0.61785, 1.67786
+ ]
+ },
+ {
+ "ct": 5920,
+ "ccm":
+ [
+ 1.98691, -0.84671, -0.14019,
+ -0.26581, 1.70615, -0.44035,
+ -0.09532, -0.47332, 1.56864
+ ]
+ },
+ {
+ "ct": 9050,
+ "ccm":
+ [
+ 2.09255, -0.76541, -0.32714,
+ -0.28973, 2.27462, -0.98489,
+ -0.17299, -0.61275, 1.78574
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx477_scientific.json b/src/ipa/rpi/pisp/data/imx477_scientific.json
new file mode 100644
index 00000000..4ec5a15b
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx477_scientific.json
@@ -0,0 +1,546 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 12000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 740,
+ "reference_Y": 15051
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.809
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 204,
+ "slope": 0.0061
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2000.0, 0.6331025775790707, 0.27424225990946915,
+ 2200.0, 0.5696117366212947, 0.3116091368689487,
+ 2400.0, 0.5204264653110015, 0.34892179554105873,
+ 2600.0, 0.48148675531667223, 0.38565229719076793,
+ 2800.0, 0.450085403501908, 0.42145684622485047,
+ 3000.0, 0.42436130159169017, 0.45611835670028816,
+ 3200.0, 0.40300023695527337, 0.48950766215198593,
+ 3400.0, 0.3850520052612984, 0.5215567075837261,
+ 3600.0, 0.36981508088230314, 0.5522397906415475,
+ 4100.0, 0.333468007836758, 0.5909770465167908,
+ 4600.0, 0.31196097364221376, 0.6515706327327178,
+ 5100.0, 0.2961860409294588, 0.7068178946570284,
+ 5600.0, 0.2842607232745885, 0.7564837749584288,
+ 6100.0, 0.2750265787051251, 0.8006183524920533,
+ 6600.0, 0.2677057225584924, 0.8398879225373039,
+ 7100.0, 0.2617955199757274, 0.8746456080032436,
+ 7600.0, 0.25693714288250125, 0.905569559506562,
+ 8100.0, 0.25287531441063316, 0.9331696750390895,
+ 8600.0, 0.24946601483331993, 0.9576820904825795
+ ],
+ "sensitivity_r": 1.05,
+ "sensitivity_b": 1.05,
+ "transverse_pos": 0.0238,
+ "transverse_neg": 0.04429,
+ "coarse_step": 0.1
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 33333 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.3,
+ 1000, 0.3
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.3,
+ 1000, 0.3
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 0,
+ "gamma_curve":
+ [
+ 0, 0,
+ 512, 2304,
+ 1024, 4608,
+ 1536, 6573,
+ 2048, 8401,
+ 2560, 9992,
+ 3072, 11418,
+ 3584, 12719,
+ 4096, 13922,
+ 4608, 15045,
+ 5120, 16103,
+ 5632, 17104,
+ 6144, 18056,
+ 6656, 18967,
+ 7168, 19839,
+ 7680, 20679,
+ 8192, 21488,
+ 9216, 23028,
+ 10240, 24477,
+ 11264, 25849,
+ 12288, 27154,
+ 13312, 28401,
+ 14336, 29597,
+ 15360, 30747,
+ 16384, 31856,
+ 17408, 32928,
+ 18432, 33966,
+ 19456, 34973,
+ 20480, 35952,
+ 22528, 37832,
+ 24576, 39621,
+ 26624, 41330,
+ 28672, 42969,
+ 30720, 44545,
+ 32768, 46065,
+ 34816, 47534,
+ 36864, 48956,
+ 38912, 50336,
+ 40960, 51677,
+ 43008, 52982,
+ 45056, 54253,
+ 47104, 55493,
+ 49152, 56704,
+ 51200, 57888,
+ 53248, 59046,
+ 55296, 60181,
+ 57344, 61292,
+ 59392, 62382,
+ 61440, 63452,
+ 63488, 64503,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2000,
+ "ccm":
+ [
+ 1.5813882365848004, -0.35293683714581114, -0.27378771561617715,
+ -0.4347297185453639, 1.5792631087746074, -0.12102601986382337,
+ 0.2322290578987574, -1.4382672640468128, 2.1386425781770755
+ ]
+ },
+ {
+ "ct": 2200,
+ "ccm":
+ [
+ 1.6322048484088305, -0.45932286857238486, -0.21373542690252198,
+ -0.3970719209901105, 1.5877868651467202, -0.17249380832122455,
+ 0.20753774825903412, -1.2660673594740142, 2.005654261091916
+ ]
+ },
+ {
+ "ct": 2400,
+ "ccm":
+ [
+ 1.6766610071470398, -0.5447101051688111, -0.16838641107407676,
+ -0.3659845183388154, 1.592223692670396, -0.2127091997471162,
+ 0.1833964516767549, -1.1339155942419321, 1.9089342978542396
+ ]
+ },
+ {
+ "ct": 2600,
+ "ccm":
+ [
+ 1.7161984340622154, -0.6152585785678794, -0.1331100845092582,
+ -0.33972082628066275, 1.5944888273736966, -0.2453979465898787,
+ 0.1615577497676328, -1.0298684958833109, 1.8357854177422053
+ ]
+ },
+ {
+ "ct": 2800,
+ "ccm":
+ [
+ 1.7519307259815728, -0.6748682080165339, -0.10515169074540848,
+ -0.3171703484479931, 1.5955820297498486, -0.2727395854813966,
+ 0.14230870739974305, -0.9460976023551511, 1.778709391659538
+ ]
+ },
+ {
+ "ct": 3000,
+ "ccm":
+ [
+ 1.7846716625128374, -0.7261240476375332, -0.08274697420358428,
+ -0.2975654035173307, 1.5960425637021738, -0.2961043416505157,
+ 0.12546426281675097, -0.8773434727076518, 1.7330356805246685
+ ]
+ },
+ {
+ "ct": 3200,
+ "ccm":
+ [
+ 1.8150085872943436, -0.7708109672515514, -0.06469468211419174,
+ -0.2803468940646277, 1.596168842967451, -0.3164044170681625,
+ 0.11071494533513807, -0.8199772290209191, 1.69572135046367
+ ]
+ },
+ {
+ "ct": 3400,
+ "ccm":
+ [
+ 1.8433668304932087, -0.8102060605062592, -0.05013485852801454,
+ -0.2650934036324084, 1.5961288492969294, -0.33427554893845535,
+ 0.0977478941863518, -0.7714303112098978, 1.6647070820146963
+ ]
+ },
+ {
+ "ct": 3600,
+ "ccm":
+ [
+ 1.8700575831917468, -0.8452518300291346, -0.03842644337477299,
+ -0.2514794528347016, 1.5960178299141876, -0.3501774949366156,
+ 0.08628520830733245, -0.729841503339915, 1.638553343939267
+ ]
+ },
+ {
+ "ct": 4100,
+ "ccm":
+ [
+ 1.8988700903560716, -0.8911278803351247, -0.018848644425650693,
+ -0.21487101487384094, 1.599236541382614, -0.39405450457918206,
+ 0.08251488056482173, -0.7178919368326191, 1.6267009056502704
+ ]
+ },
+ {
+ "ct": 4600,
+ "ccm":
+ [
+ 1.960355191764125, -0.9624344812121991, -0.0017122408632169205,
+ -0.19444620905212898, 1.5978493736948447, -0.416727638296156,
+ 0.06310261513271084, -0.6483790952487849, 1.5834605477213093
+ ]
+ },
+ {
+ "ct": 5100,
+ "ccm":
+ [
+ 2.014680536961399, -1.0195930302148566, 0.007728256612638915,
+ -0.17751999660735496, 1.5977081555831, -0.4366085498741474,
+ 0.04741267583041334, -0.5950327902073489, 1.5512919847321853
+ ]
+ },
+ {
+ "ct": 5600,
+ "ccm":
+ [
+ 2.062652337917251, -1.0658386679125478, 0.011886354256281267,
+ -0.16319197721451495, 1.598363237584736, -0.45422061523742235,
+ 0.03465810928795378, -0.5535454108047286, 1.5269025836946852
+ ]
+ },
+ {
+ "ct": 6100,
+ "ccm":
+ [
+ 2.104985902038069, -1.103597868736314, 0.012503517136539277,
+ -0.15090797064906178, 1.5994703078166095, -0.4698414300864995,
+ 0.02421766063474242, -0.5208922818196823, 1.5081270847783788
+ ]
+ },
+ {
+ "ct": 6600,
+ "ccm":
+ [
+ 2.1424988751299714, -1.134760232367728, 0.010730356010435522,
+ -0.14021846798466234, 1.600822462230719, -0.48379204794526487,
+ 0.015521315410496622, -0.49463630325832275, 1.4933313534840327
+ ]
+ },
+ {
+ "ct": 7100,
+ "ccm":
+ [
+ 2.1758034100130925, -1.1607558481037359, 0.007452724895469076,
+ -0.13085694672641826, 1.6022648614493245, -0.4962330524084075,
+ 0.008226943206113427, -0.4733077192319791, 1.4815336120437468
+ ]
+ },
+ {
+ "ct": 7600,
+ "ccm":
+ [
+ 2.205529206931895, -1.1826662383072108, 0.0032019529917605167,
+ -0.122572009780486, 1.6037258133595753, -0.5073973734282445,
+ 0.0020132587619863425, -0.4556590236414181, 1.471939788496745
+ ]
+ },
+ {
+ "ct": 8100,
+ "ccm":
+ [
+ 2.232224969223067, -1.2013672897252885, -0.0016234598095482985,
+ -0.11518026734442414, 1.6051544769439803, -0.5174558699422255,
+ -0.0033378143542219835, -0.4408590373867774, 1.4640252230667452
+ ]
+ },
+ {
+ "ct": 8600,
+ "ccm":
+ [
+ 2.256082295891265, -1.2173210549996634, -0.0067231350481711675,
+ -0.10860272839843167, 1.6065150139140594, -0.5264728573611493,
+ -0.007952618707984149, -0.4284003574050791, 1.4574646927117558
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx519.json b/src/ipa/rpi/pisp/data/imx519.json
new file mode 100644
index 00000000..9bc4d9a3
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx519.json
@@ -0,0 +1,634 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 13841,
+ "reference_gain": 2.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 900,
+ "reference_Y": 12064
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.776
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 189,
+ "slope": 0.01495
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7900
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2890.0, 0.7328, 0.3734,
+ 3550.0, 0.6228, 0.4763,
+ 4500.0, 0.5208, 0.5825,
+ 5700.0, 0.4467, 0.6671,
+ 7900.0, 0.3858, 0.7411
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.02027,
+ "transverse_neg": 0.01935
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.5,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.527, 1.524, 1.521, 1.515, 1.509, 1.502, 1.494, 1.486, 1.478, 1.469, 1.458, 1.451, 1.445, 1.442, 1.441, 1.441, 1.441, 1.441, 1.441, 1.442, 1.446, 1.451, 1.46, 1.469, 1.477, 1.484, 1.489, 1.495, 1.499, 1.503, 1.504, 1.504,
+ 1.526, 1.522, 1.518, 1.512, 1.505, 1.497, 1.489, 1.481, 1.473, 1.462, 1.451, 1.443, 1.436, 1.432, 1.431, 1.43, 1.43, 1.43, 1.431, 1.434, 1.438, 1.444, 1.454, 1.463, 1.471, 1.479, 1.485, 1.491, 1.496, 1.5, 1.502, 1.504,
+ 1.526, 1.521, 1.516, 1.508, 1.501, 1.492, 1.483, 1.475, 1.467, 1.456, 1.444, 1.435, 1.428, 1.423, 1.42, 1.418, 1.418, 1.419, 1.422, 1.425, 1.431, 1.438, 1.447, 1.457, 1.466, 1.474, 1.482, 1.488, 1.493, 1.498, 1.5, 1.503,
+ 1.524, 1.519, 1.513, 1.505, 1.496, 1.487, 1.478, 1.469, 1.461, 1.45, 1.437, 1.427, 1.419, 1.413, 1.409, 1.407, 1.407, 1.408, 1.412, 1.417, 1.423, 1.431, 1.441, 1.45, 1.46, 1.469, 1.477, 1.485, 1.49, 1.495, 1.499, 1.502,
+ 1.522, 1.516, 1.51, 1.502, 1.493, 1.483, 1.472, 1.462, 1.452, 1.441, 1.429, 1.419, 1.409, 1.402, 1.397, 1.395, 1.395, 1.397, 1.401, 1.406, 1.414, 1.422, 1.433, 1.443, 1.453, 1.462, 1.471, 1.48, 1.486, 1.492, 1.496, 1.5,
+ 1.519, 1.513, 1.508, 1.499, 1.489, 1.478, 1.467, 1.455, 1.443, 1.432, 1.421, 1.41, 1.399, 1.391, 1.386, 1.383, 1.383, 1.386, 1.39, 1.396, 1.405, 1.414, 1.425, 1.436, 1.446, 1.456, 1.466, 1.475, 1.483, 1.49, 1.493, 1.497,
+ 1.516, 1.511, 1.505, 1.495, 1.485, 1.473, 1.461, 1.448, 1.435, 1.423, 1.412, 1.401, 1.389, 1.381, 1.375, 1.372, 1.372, 1.374, 1.379, 1.386, 1.396, 1.406, 1.418, 1.429, 1.439, 1.449, 1.46, 1.47, 1.479, 1.487, 1.491, 1.494,
+ 1.515, 1.508, 1.502, 1.491, 1.48, 1.467, 1.454, 1.441, 1.427, 1.415, 1.404, 1.392, 1.38, 1.371, 1.364, 1.361, 1.361, 1.363, 1.369, 1.377, 1.388, 1.398, 1.409, 1.42, 1.431, 1.443, 1.454, 1.465, 1.475, 1.484, 1.488, 1.492,
+ 1.513, 1.505, 1.498, 1.487, 1.475, 1.461, 1.448, 1.434, 1.419, 1.407, 1.396, 1.383, 1.37, 1.361, 1.353, 1.349, 1.349, 1.352, 1.359, 1.367, 1.379, 1.391, 1.401, 1.412, 1.424, 1.436, 1.448, 1.46, 1.471, 1.481, 1.485, 1.49,
+ 1.511, 1.503, 1.495, 1.483, 1.47, 1.456, 1.442, 1.427, 1.412, 1.399, 1.387, 1.375, 1.362, 1.352, 1.344, 1.34, 1.34, 1.343, 1.35, 1.36, 1.371, 1.383, 1.393, 1.405, 1.418, 1.431, 1.443, 1.455, 1.467, 1.478, 1.483, 1.488,
+ 1.51, 1.501, 1.492, 1.479, 1.466, 1.451, 1.436, 1.421, 1.406, 1.392, 1.378, 1.366, 1.355, 1.346, 1.336, 1.332, 1.332, 1.335, 1.344, 1.353, 1.363, 1.374, 1.385, 1.398, 1.412, 1.425, 1.439, 1.452, 1.463, 1.475, 1.481, 1.486,
+ 1.508, 1.499, 1.489, 1.475, 1.461, 1.446, 1.43, 1.414, 1.399, 1.384, 1.369, 1.358, 1.348, 1.339, 1.329, 1.324, 1.323, 1.328, 1.338, 1.347, 1.355, 1.365, 1.378, 1.391, 1.406, 1.42, 1.434, 1.448, 1.46, 1.472, 1.478, 1.484,
+ 1.508, 1.497, 1.487, 1.473, 1.459, 1.443, 1.426, 1.41, 1.394, 1.379, 1.363, 1.351, 1.342, 1.333, 1.325, 1.321, 1.32, 1.324, 1.332, 1.34, 1.349, 1.359, 1.372, 1.386, 1.401, 1.416, 1.43, 1.445, 1.457, 1.47, 1.477, 1.484,
+ 1.507, 1.496, 1.485, 1.471, 1.457, 1.441, 1.424, 1.407, 1.391, 1.375, 1.359, 1.346, 1.335, 1.327, 1.322, 1.319, 1.319, 1.321, 1.326, 1.333, 1.343, 1.354, 1.368, 1.382, 1.397, 1.412, 1.427, 1.442, 1.455, 1.468, 1.476, 1.483,
+ 1.507, 1.495, 1.483, 1.469, 1.455, 1.439, 1.422, 1.404, 1.387, 1.371, 1.355, 1.341, 1.328, 1.321, 1.319, 1.318, 1.318, 1.319, 1.321, 1.326, 1.338, 1.35, 1.363, 1.378, 1.393, 1.408, 1.424, 1.439, 1.453, 1.466, 1.474, 1.483,
+ 1.507, 1.495, 1.483, 1.469, 1.455, 1.438, 1.421, 1.404, 1.387, 1.37, 1.354, 1.34, 1.327, 1.32, 1.318, 1.316, 1.316, 1.317, 1.32, 1.326, 1.337, 1.35, 1.363, 1.377, 1.393, 1.408, 1.424, 1.439, 1.452, 1.466, 1.474, 1.483,
+ 1.507, 1.495, 1.483, 1.469, 1.455, 1.438, 1.421, 1.404, 1.387, 1.37, 1.354, 1.34, 1.327, 1.32, 1.316, 1.315, 1.315, 1.316, 1.319, 1.326, 1.337, 1.35, 1.363, 1.377, 1.393, 1.408, 1.424, 1.439, 1.452, 1.466, 1.474, 1.483,
+ 1.507, 1.495, 1.483, 1.469, 1.455, 1.438, 1.422, 1.404, 1.387, 1.37, 1.355, 1.341, 1.328, 1.32, 1.315, 1.313, 1.313, 1.315, 1.319, 1.326, 1.338, 1.35, 1.363, 1.377, 1.393, 1.408, 1.424, 1.439, 1.452, 1.466, 1.474, 1.483,
+ 1.507, 1.495, 1.484, 1.47, 1.456, 1.439, 1.423, 1.406, 1.389, 1.372, 1.357, 1.343, 1.331, 1.323, 1.318, 1.316, 1.316, 1.318, 1.323, 1.33, 1.34, 1.352, 1.366, 1.38, 1.395, 1.41, 1.425, 1.44, 1.453, 1.466, 1.475, 1.483,
+ 1.507, 1.496, 1.485, 1.471, 1.456, 1.44, 1.424, 1.407, 1.39, 1.374, 1.359, 1.346, 1.335, 1.326, 1.32, 1.318, 1.319, 1.321, 1.327, 1.334, 1.343, 1.354, 1.368, 1.383, 1.398, 1.412, 1.427, 1.442, 1.455, 1.467, 1.475, 1.483,
+ 1.507, 1.497, 1.486, 1.472, 1.458, 1.442, 1.426, 1.41, 1.393, 1.377, 1.362, 1.35, 1.339, 1.331, 1.324, 1.321, 1.322, 1.325, 1.331, 1.338, 1.347, 1.357, 1.372, 1.386, 1.4, 1.415, 1.429, 1.443, 1.456, 1.468, 1.475, 1.483,
+ 1.507, 1.497, 1.487, 1.474, 1.46, 1.445, 1.43, 1.414, 1.398, 1.382, 1.368, 1.356, 1.347, 1.338, 1.329, 1.326, 1.326, 1.33, 1.337, 1.345, 1.353, 1.364, 1.377, 1.39, 1.405, 1.419, 1.432, 1.446, 1.458, 1.469, 1.476, 1.483,
+ 1.508, 1.498, 1.489, 1.476, 1.463, 1.448, 1.433, 1.418, 1.402, 1.388, 1.373, 1.363, 1.354, 1.345, 1.335, 1.33, 1.331, 1.334, 1.343, 1.351, 1.36, 1.37, 1.382, 1.394, 1.409, 1.422, 1.435, 1.448, 1.46, 1.471, 1.477, 1.484,
+ 1.508, 1.499, 1.49, 1.478, 1.466, 1.452, 1.437, 1.422, 1.407, 1.394, 1.381, 1.37, 1.361, 1.352, 1.342, 1.338, 1.338, 1.341, 1.349, 1.358, 1.367, 1.377, 1.388, 1.4, 1.413, 1.427, 1.439, 1.451, 1.462, 1.472, 1.478, 1.484,
+ 1.51, 1.501, 1.492, 1.481, 1.469, 1.455, 1.441, 1.427, 1.413, 1.4, 1.389, 1.378, 1.368, 1.359, 1.351, 1.347, 1.347, 1.35, 1.357, 1.364, 1.375, 1.385, 1.395, 1.406, 1.419, 1.432, 1.443, 1.455, 1.465, 1.474, 1.48, 1.486,
+ 1.511, 1.502, 1.494, 1.483, 1.472, 1.459, 1.445, 1.431, 1.418, 1.407, 1.398, 1.387, 1.375, 1.366, 1.36, 1.357, 1.357, 1.359, 1.364, 1.371, 1.382, 1.393, 1.402, 1.412, 1.424, 1.436, 1.447, 1.458, 1.467, 1.477, 1.482, 1.487,
+ 1.511, 1.503, 1.495, 1.485, 1.475, 1.462, 1.449, 1.436, 1.424, 1.414, 1.405, 1.394, 1.383, 1.375, 1.37, 1.368, 1.368, 1.369, 1.373, 1.38, 1.39, 1.4, 1.409, 1.418, 1.43, 1.441, 1.451, 1.461, 1.469, 1.478, 1.482, 1.487,
+ 1.511, 1.503, 1.496, 1.486, 1.477, 1.465, 1.453, 1.442, 1.431, 1.421, 1.412, 1.402, 1.392, 1.385, 1.381, 1.378, 1.378, 1.38, 1.383, 1.389, 1.398, 1.406, 1.415, 1.424, 1.436, 1.446, 1.455, 1.464, 1.471, 1.478, 1.483, 1.487,
+ 1.511, 1.504, 1.496, 1.488, 1.479, 1.468, 1.457, 1.447, 1.437, 1.428, 1.418, 1.409, 1.401, 1.395, 1.391, 1.389, 1.389, 1.39, 1.393, 1.398, 1.405, 1.413, 1.421, 1.431, 1.441, 1.452, 1.459, 1.466, 1.473, 1.479, 1.483, 1.487,
+ 1.511, 1.504, 1.496, 1.488, 1.479, 1.469, 1.459, 1.45, 1.442, 1.433, 1.424, 1.416, 1.408, 1.403, 1.4, 1.399, 1.399, 1.4, 1.402, 1.406, 1.412, 1.419, 1.427, 1.436, 1.446, 1.455, 1.462, 1.468, 1.474, 1.48, 1.484, 1.487,
+ 1.511, 1.503, 1.496, 1.488, 1.479, 1.47, 1.461, 1.453, 1.446, 1.438, 1.429, 1.422, 1.415, 1.411, 1.41, 1.409, 1.409, 1.41, 1.411, 1.413, 1.419, 1.425, 1.433, 1.441, 1.45, 1.457, 1.464, 1.47, 1.476, 1.481, 1.484, 1.487,
+ 1.511, 1.503, 1.496, 1.487, 1.479, 1.471, 1.464, 1.457, 1.45, 1.442, 1.435, 1.428, 1.422, 1.419, 1.419, 1.419, 1.419, 1.419, 1.419, 1.421, 1.426, 1.432, 1.439, 1.447, 1.454, 1.46, 1.466, 1.472, 1.477, 1.482, 1.485, 1.487
+ ]
+ },
+ {
+ "ct": 6000,
+ "table":
+ [
+ 2.581, 2.577, 2.573, 2.566, 2.559, 2.55, 2.541, 2.529, 2.517, 2.504, 2.491, 2.482, 2.476, 2.472, 2.471, 2.471, 2.471, 2.471, 2.471, 2.473, 2.476, 2.482, 2.492, 2.501, 2.51, 2.518, 2.526, 2.533, 2.538, 2.543, 2.544, 2.544,
+ 2.579, 2.574, 2.568, 2.56, 2.552, 2.543, 2.534, 2.522, 2.509, 2.496, 2.481, 2.471, 2.463, 2.458, 2.455, 2.453, 2.453, 2.454, 2.455, 2.458, 2.464, 2.472, 2.483, 2.494, 2.503, 2.512, 2.52, 2.528, 2.534, 2.54, 2.542, 2.544,
+ 2.577, 2.57, 2.564, 2.555, 2.546, 2.537, 2.528, 2.515, 2.501, 2.487, 2.471, 2.46, 2.45, 2.443, 2.438, 2.436, 2.436, 2.437, 2.44, 2.444, 2.452, 2.462, 2.474, 2.486, 2.496, 2.506, 2.515, 2.524, 2.53, 2.537, 2.54, 2.543,
+ 2.574, 2.566, 2.559, 2.549, 2.539, 2.53, 2.521, 2.507, 2.493, 2.477, 2.461, 2.448, 2.437, 2.428, 2.421, 2.418, 2.418, 2.42, 2.424, 2.43, 2.44, 2.451, 2.465, 2.478, 2.489, 2.499, 2.509, 2.519, 2.526, 2.533, 2.538, 2.542,
+ 2.569, 2.562, 2.555, 2.544, 2.533, 2.522, 2.511, 2.496, 2.481, 2.465, 2.449, 2.435, 2.422, 2.413, 2.405, 2.402, 2.402, 2.404, 2.409, 2.416, 2.426, 2.438, 2.453, 2.466, 2.479, 2.491, 2.502, 2.512, 2.52, 2.528, 2.533, 2.538,
+ 2.564, 2.558, 2.552, 2.539, 2.527, 2.514, 2.5, 2.485, 2.469, 2.453, 2.436, 2.422, 2.408, 2.398, 2.389, 2.385, 2.385, 2.388, 2.393, 2.401, 2.413, 2.425, 2.44, 2.455, 2.469, 2.483, 2.494, 2.505, 2.514, 2.523, 2.529, 2.534,
+ 2.56, 2.553, 2.547, 2.534, 2.52, 2.505, 2.49, 2.474, 2.457, 2.441, 2.424, 2.409, 2.393, 2.382, 2.373, 2.369, 2.369, 2.371, 2.378, 2.386, 2.399, 2.412, 2.428, 2.444, 2.459, 2.473, 2.486, 2.497, 2.508, 2.518, 2.524, 2.53,
+ 2.557, 2.549, 2.541, 2.527, 2.512, 2.495, 2.479, 2.462, 2.445, 2.429, 2.413, 2.396, 2.379, 2.366, 2.356, 2.351, 2.351, 2.354, 2.362, 2.372, 2.385, 2.399, 2.416, 2.433, 2.448, 2.463, 2.476, 2.489, 2.501, 2.513, 2.519, 2.526,
+ 2.553, 2.544, 2.535, 2.519, 2.504, 2.486, 2.468, 2.45, 2.433, 2.417, 2.401, 2.383, 2.364, 2.349, 2.338, 2.333, 2.333, 2.337, 2.346, 2.357, 2.371, 2.386, 2.404, 2.421, 2.437, 2.452, 2.467, 2.481, 2.495, 2.508, 2.514, 2.521,
+ 2.55, 2.54, 2.529, 2.513, 2.497, 2.478, 2.458, 2.44, 2.422, 2.405, 2.388, 2.37, 2.352, 2.336, 2.323, 2.317, 2.317, 2.322, 2.332, 2.344, 2.358, 2.374, 2.392, 2.409, 2.426, 2.442, 2.458, 2.474, 2.489, 2.502, 2.509, 2.516,
+ 2.547, 2.536, 2.525, 2.507, 2.49, 2.47, 2.45, 2.43, 2.411, 2.393, 2.374, 2.357, 2.342, 2.326, 2.31, 2.303, 2.302, 2.308, 2.32, 2.333, 2.348, 2.363, 2.379, 2.396, 2.414, 2.433, 2.45, 2.468, 2.482, 2.497, 2.504, 2.512,
+ 2.544, 2.532, 2.52, 2.502, 2.483, 2.463, 2.442, 2.421, 2.4, 2.38, 2.36, 2.344, 2.332, 2.316, 2.297, 2.288, 2.288, 2.294, 2.308, 2.322, 2.337, 2.352, 2.367, 2.383, 2.403, 2.423, 2.442, 2.461, 2.476, 2.491, 2.499, 2.507,
+ 2.542, 2.53, 2.517, 2.498, 2.479, 2.458, 2.436, 2.414, 2.393, 2.371, 2.35, 2.334, 2.319, 2.305, 2.29, 2.283, 2.282, 2.287, 2.298, 2.311, 2.326, 2.341, 2.358, 2.375, 2.396, 2.417, 2.436, 2.456, 2.472, 2.487, 2.496, 2.505,
+ 2.542, 2.528, 2.515, 2.495, 2.476, 2.453, 2.431, 2.408, 2.386, 2.364, 2.342, 2.323, 2.306, 2.294, 2.284, 2.28, 2.28, 2.284, 2.291, 2.3, 2.315, 2.331, 2.35, 2.369, 2.39, 2.411, 2.431, 2.451, 2.467, 2.484, 2.494, 2.505,
+ 2.541, 2.527, 2.512, 2.492, 2.472, 2.449, 2.426, 2.403, 2.379, 2.356, 2.334, 2.313, 2.293, 2.283, 2.279, 2.278, 2.279, 2.28, 2.283, 2.29, 2.304, 2.321, 2.342, 2.363, 2.384, 2.406, 2.426, 2.446, 2.463, 2.48, 2.492, 2.504,
+ 2.541, 2.526, 2.512, 2.492, 2.472, 2.449, 2.426, 2.402, 2.378, 2.356, 2.333, 2.312, 2.292, 2.281, 2.276, 2.274, 2.275, 2.277, 2.28, 2.288, 2.303, 2.32, 2.341, 2.363, 2.384, 2.405, 2.425, 2.445, 2.463, 2.48, 2.492, 2.504,
+ 2.541, 2.526, 2.512, 2.492, 2.472, 2.449, 2.426, 2.402, 2.378, 2.356, 2.333, 2.312, 2.292, 2.28, 2.273, 2.27, 2.271, 2.273, 2.279, 2.288, 2.303, 2.32, 2.341, 2.363, 2.384, 2.405, 2.425, 2.445, 2.463, 2.48, 2.492, 2.504,
+ 2.541, 2.526, 2.512, 2.492, 2.472, 2.449, 2.426, 2.402, 2.379, 2.356, 2.334, 2.313, 2.293, 2.28, 2.271, 2.267, 2.267, 2.271, 2.278, 2.288, 2.303, 2.32, 2.342, 2.363, 2.384, 2.405, 2.426, 2.445, 2.463, 2.48, 2.492, 2.504,
+ 2.541, 2.527, 2.512, 2.493, 2.473, 2.45, 2.427, 2.404, 2.382, 2.36, 2.338, 2.318, 2.299, 2.285, 2.276, 2.271, 2.272, 2.276, 2.284, 2.294, 2.308, 2.324, 2.345, 2.365, 2.386, 2.407, 2.427, 2.447, 2.464, 2.481, 2.492, 2.504,
+ 2.541, 2.527, 2.513, 2.493, 2.474, 2.451, 2.429, 2.406, 2.385, 2.363, 2.342, 2.323, 2.305, 2.291, 2.28, 2.275, 2.276, 2.28, 2.29, 2.301, 2.313, 2.328, 2.348, 2.368, 2.389, 2.409, 2.429, 2.448, 2.465, 2.481, 2.493, 2.504,
+ 2.541, 2.527, 2.514, 2.495, 2.476, 2.454, 2.431, 2.41, 2.389, 2.368, 2.347, 2.329, 2.312, 2.298, 2.286, 2.281, 2.281, 2.286, 2.297, 2.308, 2.319, 2.333, 2.352, 2.372, 2.392, 2.412, 2.432, 2.45, 2.467, 2.482, 2.493, 2.504,
+ 2.542, 2.529, 2.516, 2.498, 2.479, 2.458, 2.437, 2.416, 2.395, 2.376, 2.356, 2.339, 2.324, 2.31, 2.295, 2.289, 2.289, 2.294, 2.305, 2.317, 2.329, 2.344, 2.361, 2.379, 2.398, 2.418, 2.436, 2.454, 2.47, 2.485, 2.495, 2.505,
+ 2.543, 2.531, 2.518, 2.501, 2.483, 2.463, 2.442, 2.422, 2.402, 2.383, 2.364, 2.349, 2.336, 2.321, 2.305, 2.297, 2.297, 2.303, 2.313, 2.325, 2.339, 2.354, 2.37, 2.386, 2.405, 2.423, 2.441, 2.459, 2.473, 2.487, 2.496, 2.506,
+ 2.545, 2.533, 2.521, 2.504, 2.488, 2.468, 2.448, 2.429, 2.41, 2.392, 2.375, 2.36, 2.347, 2.332, 2.316, 2.309, 2.309, 2.313, 2.323, 2.335, 2.35, 2.365, 2.379, 2.394, 2.412, 2.43, 2.447, 2.463, 2.477, 2.49, 2.498, 2.506,
+ 2.547, 2.535, 2.524, 2.508, 2.492, 2.474, 2.456, 2.438, 2.419, 2.403, 2.388, 2.372, 2.357, 2.343, 2.33, 2.324, 2.324, 2.328, 2.335, 2.346, 2.361, 2.375, 2.389, 2.403, 2.42, 2.437, 2.453, 2.468, 2.481, 2.493, 2.5, 2.508,
+ 2.548, 2.538, 2.527, 2.512, 2.497, 2.481, 2.464, 2.446, 2.428, 2.414, 2.401, 2.384, 2.367, 2.354, 2.344, 2.339, 2.339, 2.342, 2.348, 2.357, 2.371, 2.386, 2.399, 2.413, 2.429, 2.444, 2.459, 2.473, 2.485, 2.496, 2.502, 2.509,
+ 2.55, 2.539, 2.529, 2.515, 2.501, 2.486, 2.47, 2.454, 2.438, 2.425, 2.411, 2.396, 2.379, 2.367, 2.359, 2.355, 2.355, 2.357, 2.361, 2.369, 2.382, 2.396, 2.409, 2.423, 2.437, 2.451, 2.464, 2.476, 2.487, 2.498, 2.504, 2.509,
+ 2.551, 2.541, 2.531, 2.518, 2.505, 2.49, 2.476, 2.463, 2.449, 2.435, 2.421, 2.406, 2.392, 2.381, 2.374, 2.371, 2.371, 2.372, 2.376, 2.382, 2.393, 2.406, 2.42, 2.434, 2.446, 2.458, 2.469, 2.479, 2.489, 2.499, 2.504, 2.51,
+ 2.552, 2.542, 2.532, 2.52, 2.508, 2.495, 2.482, 2.471, 2.46, 2.446, 2.43, 2.417, 2.404, 2.396, 2.389, 2.386, 2.386, 2.387, 2.39, 2.395, 2.404, 2.415, 2.431, 2.445, 2.455, 2.465, 2.473, 2.482, 2.491, 2.499, 2.505, 2.511,
+ 2.552, 2.543, 2.533, 2.521, 2.509, 2.497, 2.486, 2.476, 2.466, 2.453, 2.439, 2.427, 2.415, 2.407, 2.403, 2.401, 2.401, 2.401, 2.403, 2.407, 2.415, 2.425, 2.439, 2.452, 2.462, 2.471, 2.478, 2.485, 2.493, 2.501, 2.506, 2.511,
+ 2.553, 2.543, 2.533, 2.521, 2.509, 2.499, 2.488, 2.48, 2.471, 2.46, 2.448, 2.436, 2.424, 2.418, 2.416, 2.415, 2.415, 2.415, 2.416, 2.419, 2.425, 2.434, 2.447, 2.459, 2.468, 2.477, 2.483, 2.489, 2.496, 2.503, 2.507, 2.511,
+ 2.553, 2.543, 2.534, 2.522, 2.51, 2.5, 2.491, 2.484, 2.477, 2.468, 2.457, 2.446, 2.434, 2.429, 2.429, 2.429, 2.429, 2.429, 2.429, 2.431, 2.436, 2.443, 2.454, 2.465, 2.474, 2.482, 2.487, 2.493, 2.499, 2.504, 2.508, 2.511
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.132, 3.129, 3.126, 3.121, 3.117, 3.111, 3.104, 3.101, 3.098, 3.095, 3.092, 3.09, 3.088, 3.087, 3.086, 3.087, 3.087, 3.089, 3.09, 3.091, 3.092, 3.094, 3.098, 3.103, 3.109, 3.114, 3.118, 3.122, 3.132, 3.141, 3.143, 3.144,
+ 3.138, 3.133, 3.128, 3.124, 3.119, 3.113, 3.106, 3.102, 3.099, 3.096, 3.094, 3.091, 3.089, 3.088, 3.087, 3.088, 3.089, 3.09, 3.091, 3.092, 3.094, 3.097, 3.101, 3.105, 3.11, 3.115, 3.12, 3.125, 3.134, 3.142, 3.145, 3.147,
+ 3.144, 3.137, 3.131, 3.126, 3.122, 3.115, 3.108, 3.104, 3.101, 3.098, 3.095, 3.093, 3.091, 3.089, 3.089, 3.089, 3.09, 3.09, 3.091, 3.093, 3.096, 3.1, 3.103, 3.107, 3.111, 3.116, 3.122, 3.128, 3.136, 3.143, 3.147, 3.15,
+ 3.15, 3.142, 3.134, 3.129, 3.124, 3.117, 3.11, 3.106, 3.102, 3.1, 3.097, 3.095, 3.093, 3.091, 3.09, 3.09, 3.091, 3.092, 3.092, 3.094, 3.099, 3.102, 3.105, 3.109, 3.113, 3.118, 3.124, 3.13, 3.138, 3.145, 3.149, 3.153,
+ 3.154, 3.147, 3.14, 3.133, 3.126, 3.12, 3.115, 3.11, 3.105, 3.102, 3.1, 3.098, 3.096, 3.095, 3.094, 3.094, 3.095, 3.096, 3.096, 3.098, 3.101, 3.105, 3.108, 3.112, 3.116, 3.121, 3.126, 3.132, 3.14, 3.148, 3.152, 3.156,
+ 3.158, 3.152, 3.146, 3.137, 3.129, 3.124, 3.119, 3.114, 3.108, 3.105, 3.102, 3.101, 3.099, 3.099, 3.098, 3.098, 3.099, 3.099, 3.1, 3.102, 3.104, 3.107, 3.111, 3.115, 3.119, 3.124, 3.129, 3.134, 3.143, 3.151, 3.154, 3.158,
+ 3.163, 3.157, 3.151, 3.142, 3.132, 3.127, 3.123, 3.117, 3.112, 3.108, 3.106, 3.105, 3.104, 3.103, 3.103, 3.103, 3.103, 3.104, 3.105, 3.106, 3.108, 3.11, 3.114, 3.118, 3.123, 3.127, 3.132, 3.137, 3.146, 3.154, 3.157, 3.161,
+ 3.168, 3.162, 3.155, 3.146, 3.137, 3.131, 3.126, 3.121, 3.117, 3.114, 3.112, 3.111, 3.109, 3.109, 3.109, 3.109, 3.109, 3.11, 3.11, 3.111, 3.113, 3.115, 3.118, 3.122, 3.126, 3.13, 3.135, 3.141, 3.149, 3.156, 3.16, 3.165,
+ 3.174, 3.167, 3.16, 3.151, 3.143, 3.136, 3.129, 3.125, 3.122, 3.12, 3.119, 3.117, 3.115, 3.115, 3.115, 3.115, 3.115, 3.116, 3.116, 3.117, 3.119, 3.12, 3.122, 3.125, 3.129, 3.134, 3.139, 3.145, 3.152, 3.158, 3.164, 3.169,
+ 3.177, 3.171, 3.164, 3.156, 3.148, 3.14, 3.133, 3.13, 3.128, 3.127, 3.126, 3.124, 3.122, 3.122, 3.122, 3.122, 3.122, 3.123, 3.123, 3.124, 3.125, 3.126, 3.127, 3.129, 3.133, 3.138, 3.144, 3.15, 3.156, 3.162, 3.167, 3.173,
+ 3.18, 3.175, 3.17, 3.161, 3.152, 3.145, 3.139, 3.136, 3.135, 3.134, 3.133, 3.132, 3.13, 3.13, 3.13, 3.131, 3.131, 3.131, 3.131, 3.131, 3.132, 3.133, 3.133, 3.135, 3.138, 3.142, 3.149, 3.155, 3.16, 3.166, 3.171, 3.175,
+ 3.182, 3.179, 3.175, 3.166, 3.157, 3.15, 3.144, 3.142, 3.141, 3.141, 3.141, 3.14, 3.138, 3.137, 3.138, 3.139, 3.139, 3.139, 3.139, 3.139, 3.139, 3.139, 3.139, 3.14, 3.143, 3.146, 3.153, 3.16, 3.165, 3.17, 3.174, 3.178,
+ 3.185, 3.181, 3.178, 3.169, 3.16, 3.154, 3.148, 3.147, 3.146, 3.146, 3.147, 3.146, 3.145, 3.145, 3.146, 3.147, 3.147, 3.147, 3.147, 3.147, 3.147, 3.147, 3.146, 3.147, 3.149, 3.152, 3.158, 3.164, 3.169, 3.173, 3.177, 3.181,
+ 3.187, 3.184, 3.18, 3.172, 3.163, 3.158, 3.153, 3.152, 3.151, 3.151, 3.151, 3.151, 3.151, 3.152, 3.154, 3.154, 3.154, 3.154, 3.154, 3.154, 3.154, 3.154, 3.154, 3.154, 3.155, 3.157, 3.162, 3.167, 3.171, 3.176, 3.18, 3.184,
+ 3.189, 3.186, 3.183, 3.175, 3.166, 3.161, 3.157, 3.156, 3.156, 3.156, 3.156, 3.157, 3.158, 3.159, 3.161, 3.162, 3.162, 3.162, 3.162, 3.162, 3.162, 3.162, 3.161, 3.161, 3.162, 3.163, 3.166, 3.169, 3.174, 3.179, 3.183, 3.187,
+ 3.192, 3.189, 3.185, 3.177, 3.168, 3.164, 3.16, 3.159, 3.159, 3.159, 3.16, 3.161, 3.162, 3.164, 3.165, 3.166, 3.166, 3.166, 3.166, 3.166, 3.166, 3.165, 3.164, 3.164, 3.164, 3.166, 3.168, 3.172, 3.177, 3.182, 3.185, 3.188,
+ 3.196, 3.192, 3.187, 3.179, 3.17, 3.166, 3.163, 3.162, 3.162, 3.162, 3.163, 3.165, 3.166, 3.168, 3.169, 3.17, 3.17, 3.17, 3.169, 3.169, 3.169, 3.168, 3.167, 3.167, 3.167, 3.168, 3.171, 3.174, 3.179, 3.185, 3.186, 3.188,
+ 3.199, 3.194, 3.19, 3.181, 3.172, 3.169, 3.166, 3.165, 3.164, 3.165, 3.167, 3.168, 3.17, 3.172, 3.173, 3.173, 3.173, 3.173, 3.172, 3.172, 3.171, 3.171, 3.17, 3.169, 3.169, 3.17, 3.173, 3.176, 3.182, 3.187, 3.188, 3.189,
+ 3.202, 3.197, 3.192, 3.183, 3.175, 3.171, 3.168, 3.166, 3.165, 3.165, 3.167, 3.168, 3.17, 3.172, 3.173, 3.173, 3.173, 3.173, 3.172, 3.172, 3.171, 3.171, 3.17, 3.17, 3.17, 3.171, 3.174, 3.177, 3.183, 3.189, 3.19, 3.191,
+ 3.204, 3.199, 3.195, 3.186, 3.177, 3.173, 3.17, 3.168, 3.165, 3.166, 3.167, 3.168, 3.17, 3.172, 3.173, 3.173, 3.173, 3.173, 3.172, 3.172, 3.171, 3.171, 3.171, 3.171, 3.171, 3.172, 3.175, 3.177, 3.184, 3.191, 3.192, 3.193,
+ 3.206, 3.201, 3.196, 3.188, 3.178, 3.175, 3.172, 3.169, 3.166, 3.165, 3.166, 3.168, 3.169, 3.17, 3.171, 3.172, 3.172, 3.172, 3.171, 3.171, 3.171, 3.171, 3.171, 3.171, 3.172, 3.173, 3.176, 3.178, 3.185, 3.192, 3.193, 3.194,
+ 3.207, 3.202, 3.197, 3.188, 3.179, 3.175, 3.172, 3.169, 3.165, 3.164, 3.164, 3.165, 3.165, 3.166, 3.167, 3.168, 3.168, 3.168, 3.168, 3.169, 3.169, 3.169, 3.17, 3.171, 3.172, 3.174, 3.176, 3.18, 3.186, 3.193, 3.194, 3.196,
+ 3.208, 3.203, 3.197, 3.188, 3.179, 3.175, 3.172, 3.168, 3.165, 3.163, 3.162, 3.162, 3.161, 3.162, 3.163, 3.164, 3.164, 3.164, 3.165, 3.166, 3.167, 3.168, 3.17, 3.171, 3.172, 3.174, 3.177, 3.181, 3.187, 3.193, 3.195, 3.197,
+ 3.208, 3.203, 3.197, 3.188, 3.179, 3.174, 3.171, 3.168, 3.164, 3.162, 3.161, 3.16, 3.159, 3.159, 3.159, 3.16, 3.161, 3.162, 3.163, 3.164, 3.166, 3.167, 3.169, 3.171, 3.172, 3.174, 3.178, 3.182, 3.188, 3.194, 3.196, 3.198,
+ 3.206, 3.201, 3.196, 3.187, 3.178, 3.173, 3.169, 3.166, 3.163, 3.161, 3.159, 3.158, 3.157, 3.157, 3.157, 3.158, 3.16, 3.161, 3.162, 3.163, 3.164, 3.166, 3.168, 3.17, 3.172, 3.174, 3.178, 3.182, 3.189, 3.196, 3.197, 3.199,
+ 3.205, 3.2, 3.195, 3.186, 3.177, 3.172, 3.167, 3.164, 3.162, 3.16, 3.157, 3.156, 3.155, 3.155, 3.155, 3.156, 3.158, 3.16, 3.161, 3.162, 3.163, 3.165, 3.167, 3.169, 3.171, 3.174, 3.178, 3.183, 3.19, 3.197, 3.198, 3.199,
+ 3.203, 3.198, 3.194, 3.185, 3.177, 3.172, 3.167, 3.164, 3.162, 3.159, 3.157, 3.155, 3.154, 3.154, 3.154, 3.155, 3.157, 3.159, 3.16, 3.162, 3.163, 3.165, 3.167, 3.169, 3.171, 3.174, 3.179, 3.184, 3.191, 3.198, 3.198, 3.199,
+ 3.201, 3.197, 3.193, 3.185, 3.177, 3.172, 3.168, 3.165, 3.162, 3.159, 3.157, 3.156, 3.154, 3.153, 3.153, 3.154, 3.156, 3.158, 3.16, 3.162, 3.163, 3.165, 3.167, 3.169, 3.171, 3.174, 3.18, 3.185, 3.191, 3.197, 3.198, 3.199,
+ 3.199, 3.195, 3.191, 3.184, 3.177, 3.173, 3.169, 3.166, 3.162, 3.16, 3.158, 3.156, 3.154, 3.153, 3.153, 3.154, 3.155, 3.157, 3.16, 3.162, 3.163, 3.165, 3.167, 3.169, 3.171, 3.174, 3.18, 3.186, 3.191, 3.196, 3.198, 3.199,
+ 3.199, 3.195, 3.19, 3.184, 3.178, 3.174, 3.171, 3.167, 3.163, 3.16, 3.158, 3.156, 3.154, 3.153, 3.153, 3.154, 3.155, 3.157, 3.159, 3.161, 3.163, 3.166, 3.167, 3.17, 3.172, 3.175, 3.181, 3.186, 3.191, 3.195, 3.197, 3.199,
+ 3.199, 3.194, 3.189, 3.184, 3.179, 3.175, 3.172, 3.168, 3.165, 3.161, 3.158, 3.156, 3.154, 3.153, 3.153, 3.154, 3.155, 3.157, 3.159, 3.161, 3.164, 3.167, 3.169, 3.171, 3.173, 3.176, 3.181, 3.186, 3.19, 3.194, 3.196, 3.198,
+ 3.199, 3.194, 3.188, 3.184, 3.18, 3.176, 3.174, 3.17, 3.166, 3.162, 3.158, 3.156, 3.154, 3.153, 3.154, 3.155, 3.155, 3.157, 3.158, 3.161, 3.164, 3.168, 3.17, 3.172, 3.174, 3.177, 3.181, 3.186, 3.189, 3.193, 3.196, 3.198
+ ]
+ },
+ {
+ "ct": 6000,
+ "table":
+ [
+ 1.579, 1.579, 1.579, 1.578, 1.577, 1.576, 1.574, 1.574, 1.573, 1.572, 1.571, 1.571, 1.571, 1.571, 1.571, 1.571, 1.571, 1.571, 1.57, 1.569, 1.569, 1.569, 1.57, 1.571, 1.572, 1.572, 1.573, 1.574, 1.576, 1.577, 1.578, 1.578,
+ 1.581, 1.58, 1.579, 1.578, 1.577, 1.576, 1.575, 1.574, 1.573, 1.572, 1.572, 1.571, 1.571, 1.571, 1.571, 1.571, 1.571, 1.571, 1.57, 1.57, 1.57, 1.57, 1.571, 1.571, 1.572, 1.573, 1.574, 1.575, 1.576, 1.577, 1.578, 1.578,
+ 1.583, 1.581, 1.579, 1.578, 1.578, 1.576, 1.575, 1.574, 1.573, 1.573, 1.572, 1.571, 1.571, 1.571, 1.572, 1.572, 1.572, 1.571, 1.571, 1.57, 1.57, 1.571, 1.571, 1.572, 1.572, 1.573, 1.574, 1.576, 1.577, 1.578, 1.578, 1.579,
+ 1.584, 1.582, 1.579, 1.579, 1.578, 1.577, 1.575, 1.574, 1.573, 1.573, 1.572, 1.572, 1.571, 1.571, 1.572, 1.572, 1.572, 1.572, 1.571, 1.571, 1.571, 1.571, 1.572, 1.572, 1.573, 1.573, 1.575, 1.576, 1.577, 1.578, 1.579, 1.579,
+ 1.585, 1.583, 1.581, 1.58, 1.579, 1.578, 1.576, 1.575, 1.574, 1.573, 1.573, 1.572, 1.572, 1.572, 1.573, 1.573, 1.573, 1.573, 1.573, 1.572, 1.572, 1.572, 1.572, 1.573, 1.574, 1.575, 1.576, 1.577, 1.578, 1.579, 1.58, 1.58,
+ 1.586, 1.585, 1.583, 1.581, 1.579, 1.578, 1.577, 1.576, 1.575, 1.574, 1.573, 1.573, 1.573, 1.573, 1.574, 1.574, 1.574, 1.574, 1.574, 1.573, 1.573, 1.573, 1.573, 1.574, 1.575, 1.576, 1.577, 1.578, 1.579, 1.58, 1.58, 1.581,
+ 1.588, 1.586, 1.584, 1.582, 1.58, 1.579, 1.578, 1.577, 1.576, 1.575, 1.574, 1.574, 1.574, 1.574, 1.575, 1.576, 1.576, 1.576, 1.575, 1.575, 1.574, 1.574, 1.574, 1.575, 1.576, 1.576, 1.577, 1.579, 1.58, 1.582, 1.582, 1.582,
+ 1.589, 1.587, 1.586, 1.584, 1.582, 1.58, 1.579, 1.578, 1.577, 1.576, 1.576, 1.576, 1.576, 1.576, 1.577, 1.578, 1.578, 1.578, 1.578, 1.577, 1.576, 1.575, 1.575, 1.576, 1.576, 1.577, 1.578, 1.58, 1.581, 1.583, 1.583, 1.583,
+ 1.59, 1.588, 1.587, 1.585, 1.583, 1.581, 1.579, 1.578, 1.578, 1.578, 1.578, 1.578, 1.578, 1.579, 1.58, 1.58, 1.58, 1.58, 1.58, 1.579, 1.578, 1.577, 1.577, 1.577, 1.577, 1.578, 1.579, 1.581, 1.583, 1.584, 1.585, 1.585,
+ 1.592, 1.59, 1.588, 1.586, 1.585, 1.583, 1.581, 1.58, 1.579, 1.58, 1.58, 1.58, 1.581, 1.581, 1.582, 1.582, 1.582, 1.582, 1.582, 1.582, 1.58, 1.579, 1.579, 1.578, 1.579, 1.579, 1.581, 1.582, 1.584, 1.586, 1.586, 1.587,
+ 1.593, 1.591, 1.589, 1.588, 1.586, 1.584, 1.583, 1.582, 1.582, 1.582, 1.583, 1.583, 1.583, 1.584, 1.584, 1.584, 1.585, 1.585, 1.585, 1.584, 1.583, 1.582, 1.581, 1.581, 1.581, 1.582, 1.583, 1.584, 1.586, 1.587, 1.587, 1.588,
+ 1.595, 1.593, 1.591, 1.589, 1.587, 1.586, 1.585, 1.584, 1.584, 1.585, 1.585, 1.586, 1.586, 1.586, 1.586, 1.587, 1.587, 1.587, 1.587, 1.587, 1.585, 1.584, 1.584, 1.583, 1.583, 1.584, 1.585, 1.586, 1.587, 1.589, 1.589, 1.589,
+ 1.596, 1.594, 1.592, 1.59, 1.588, 1.587, 1.586, 1.586, 1.586, 1.587, 1.588, 1.588, 1.589, 1.589, 1.589, 1.59, 1.59, 1.59, 1.59, 1.59, 1.588, 1.587, 1.587, 1.587, 1.586, 1.586, 1.587, 1.588, 1.589, 1.59, 1.59, 1.59,
+ 1.596, 1.595, 1.594, 1.592, 1.59, 1.589, 1.588, 1.588, 1.589, 1.589, 1.59, 1.591, 1.592, 1.592, 1.592, 1.593, 1.593, 1.594, 1.594, 1.593, 1.592, 1.591, 1.59, 1.59, 1.589, 1.589, 1.589, 1.59, 1.591, 1.591, 1.591, 1.591,
+ 1.597, 1.596, 1.595, 1.593, 1.591, 1.59, 1.589, 1.59, 1.591, 1.592, 1.592, 1.593, 1.594, 1.595, 1.595, 1.596, 1.596, 1.597, 1.597, 1.596, 1.595, 1.595, 1.594, 1.593, 1.592, 1.592, 1.592, 1.592, 1.592, 1.593, 1.593, 1.593,
+ 1.598, 1.597, 1.596, 1.594, 1.592, 1.591, 1.59, 1.591, 1.591, 1.592, 1.593, 1.594, 1.596, 1.596, 1.597, 1.597, 1.598, 1.599, 1.598, 1.598, 1.597, 1.596, 1.595, 1.594, 1.594, 1.593, 1.593, 1.593, 1.593, 1.594, 1.594, 1.594,
+ 1.6, 1.598, 1.596, 1.595, 1.593, 1.592, 1.591, 1.592, 1.592, 1.593, 1.594, 1.595, 1.597, 1.597, 1.598, 1.599, 1.6, 1.6, 1.6, 1.599, 1.598, 1.597, 1.596, 1.595, 1.595, 1.594, 1.594, 1.595, 1.595, 1.594, 1.594, 1.594,
+ 1.601, 1.599, 1.597, 1.595, 1.593, 1.593, 1.592, 1.592, 1.593, 1.594, 1.595, 1.596, 1.597, 1.598, 1.599, 1.6, 1.601, 1.602, 1.601, 1.6, 1.599, 1.598, 1.597, 1.596, 1.595, 1.595, 1.596, 1.596, 1.596, 1.595, 1.595, 1.595,
+ 1.601, 1.599, 1.598, 1.596, 1.594, 1.593, 1.592, 1.593, 1.593, 1.594, 1.595, 1.596, 1.597, 1.598, 1.599, 1.6, 1.601, 1.602, 1.601, 1.6, 1.599, 1.598, 1.597, 1.596, 1.596, 1.596, 1.596, 1.596, 1.596, 1.596, 1.596, 1.596,
+ 1.601, 1.6, 1.599, 1.596, 1.594, 1.593, 1.593, 1.593, 1.593, 1.594, 1.595, 1.596, 1.597, 1.598, 1.599, 1.6, 1.601, 1.602, 1.601, 1.6, 1.599, 1.598, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.596, 1.596, 1.596,
+ 1.601, 1.6, 1.599, 1.597, 1.594, 1.594, 1.593, 1.593, 1.593, 1.594, 1.594, 1.596, 1.597, 1.598, 1.599, 1.6, 1.601, 1.601, 1.601, 1.6, 1.599, 1.598, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597,
+ 1.601, 1.6, 1.599, 1.597, 1.594, 1.594, 1.593, 1.593, 1.593, 1.593, 1.594, 1.595, 1.596, 1.597, 1.598, 1.599, 1.599, 1.6, 1.6, 1.599, 1.599, 1.598, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597,
+ 1.602, 1.6, 1.599, 1.597, 1.594, 1.594, 1.593, 1.593, 1.592, 1.593, 1.593, 1.594, 1.595, 1.596, 1.597, 1.598, 1.598, 1.598, 1.598, 1.598, 1.598, 1.598, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.598,
+ 1.602, 1.6, 1.599, 1.597, 1.594, 1.594, 1.593, 1.592, 1.592, 1.592, 1.593, 1.593, 1.594, 1.595, 1.596, 1.597, 1.597, 1.597, 1.598, 1.598, 1.598, 1.598, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.598, 1.598,
+ 1.6, 1.599, 1.599, 1.596, 1.594, 1.593, 1.593, 1.592, 1.592, 1.592, 1.592, 1.592, 1.593, 1.594, 1.595, 1.596, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.598, 1.599, 1.599, 1.599,
+ 1.599, 1.599, 1.598, 1.596, 1.594, 1.593, 1.592, 1.592, 1.591, 1.591, 1.591, 1.592, 1.592, 1.593, 1.595, 1.595, 1.596, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.599, 1.598, 1.598, 1.596, 1.594, 1.593, 1.592, 1.592, 1.591, 1.591, 1.591, 1.591, 1.592, 1.593, 1.594, 1.595, 1.596, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.598, 1.598, 1.597, 1.596, 1.594, 1.593, 1.593, 1.592, 1.592, 1.592, 1.592, 1.592, 1.592, 1.593, 1.594, 1.595, 1.595, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.598, 1.597, 1.596, 1.595, 1.594, 1.594, 1.593, 1.593, 1.592, 1.592, 1.592, 1.592, 1.592, 1.593, 1.594, 1.594, 1.595, 1.596, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.598, 1.597, 1.596, 1.595, 1.594, 1.594, 1.593, 1.593, 1.592, 1.592, 1.592, 1.592, 1.592, 1.593, 1.594, 1.594, 1.595, 1.595, 1.596, 1.597, 1.597, 1.597, 1.597, 1.597, 1.598, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.597, 1.596, 1.595, 1.595, 1.594, 1.594, 1.594, 1.593, 1.593, 1.592, 1.592, 1.592, 1.593, 1.593, 1.594, 1.595, 1.595, 1.595, 1.596, 1.597, 1.597, 1.598, 1.598, 1.598, 1.598, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599, 1.599,
+ 1.597, 1.596, 1.595, 1.595, 1.594, 1.594, 1.594, 1.594, 1.593, 1.593, 1.592, 1.592, 1.593, 1.594, 1.595, 1.595, 1.595, 1.595, 1.596, 1.597, 1.598, 1.598, 1.598, 1.598, 1.598, 1.598, 1.599, 1.599, 1.599, 1.599, 1.599, 1.599
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.887, 2.823, 2.758, 2.586, 2.405, 2.265, 2.132, 2.01, 1.891, 1.795, 1.707, 1.661, 1.635, 1.624, 1.623, 1.623, 1.623, 1.623, 1.624, 1.633, 1.654, 1.698, 1.785, 1.88, 1.998, 2.118, 2.249, 2.385, 2.56, 2.727, 2.782, 2.838,
+ 2.84, 2.745, 2.65, 2.482, 2.308, 2.18, 2.058, 1.941, 1.826, 1.736, 1.656, 1.609, 1.577, 1.56, 1.552, 1.548, 1.548, 1.551, 1.559, 1.574, 1.603, 1.648, 1.726, 1.814, 1.929, 2.045, 2.164, 2.29, 2.457, 2.619, 2.708, 2.797,
+ 2.793, 2.667, 2.542, 2.378, 2.212, 2.094, 1.985, 1.873, 1.761, 1.678, 1.606, 1.557, 1.519, 1.495, 1.48, 1.473, 1.473, 1.48, 1.494, 1.516, 1.551, 1.597, 1.667, 1.748, 1.861, 1.972, 2.08, 2.195, 2.354, 2.511, 2.634, 2.756,
+ 2.734, 2.586, 2.438, 2.279, 2.119, 2.011, 1.91, 1.805, 1.697, 1.62, 1.553, 1.503, 1.461, 1.432, 1.411, 1.401, 1.401, 1.41, 1.43, 1.457, 1.497, 1.545, 1.609, 1.685, 1.792, 1.898, 1.997, 2.103, 2.256, 2.409, 2.556, 2.703,
+ 2.624, 2.49, 2.357, 2.203, 2.048, 1.936, 1.831, 1.736, 1.644, 1.566, 1.495, 1.443, 1.402, 1.372, 1.352, 1.342, 1.342, 1.351, 1.37, 1.397, 1.437, 1.486, 1.556, 1.632, 1.724, 1.818, 1.922, 2.032, 2.181, 2.33, 2.461, 2.593,
+ 2.513, 2.394, 2.275, 2.127, 1.976, 1.861, 1.751, 1.667, 1.59, 1.513, 1.436, 1.383, 1.342, 1.313, 1.292, 1.283, 1.283, 1.291, 1.31, 1.337, 1.376, 1.427, 1.503, 1.579, 1.655, 1.738, 1.846, 1.96, 2.106, 2.25, 2.367, 2.483,
+ 2.427, 2.315, 2.203, 2.058, 1.912, 1.795, 1.683, 1.604, 1.534, 1.461, 1.385, 1.332, 1.289, 1.259, 1.238, 1.228, 1.228, 1.237, 1.255, 1.282, 1.323, 1.376, 1.451, 1.524, 1.592, 1.669, 1.78, 1.895, 2.039, 2.18, 2.288, 2.396,
+ 2.383, 2.265, 2.147, 2.004, 1.859, 1.744, 1.634, 1.552, 1.477, 1.411, 1.349, 1.295, 1.245, 1.213, 1.191, 1.181, 1.181, 1.19, 1.208, 1.238, 1.286, 1.339, 1.401, 1.467, 1.54, 1.62, 1.73, 1.843, 1.984, 2.124, 2.236, 2.348,
+ 2.338, 2.215, 2.091, 1.949, 1.807, 1.694, 1.585, 1.499, 1.42, 1.362, 1.313, 1.259, 1.202, 1.167, 1.145, 1.134, 1.134, 1.143, 1.161, 1.194, 1.248, 1.301, 1.352, 1.41, 1.487, 1.571, 1.679, 1.791, 1.93, 2.067, 2.184, 2.3,
+ 2.307, 2.176, 2.046, 1.906, 1.765, 1.653, 1.545, 1.458, 1.377, 1.321, 1.274, 1.223, 1.17, 1.133, 1.107, 1.095, 1.094, 1.105, 1.127, 1.161, 1.212, 1.262, 1.31, 1.366, 1.446, 1.531, 1.638, 1.749, 1.886, 2.022, 2.145, 2.267,
+ 2.286, 2.147, 2.009, 1.87, 1.732, 1.62, 1.514, 1.427, 1.345, 1.285, 1.232, 1.187, 1.147, 1.11, 1.077, 1.061, 1.06, 1.074, 1.104, 1.137, 1.178, 1.222, 1.273, 1.333, 1.413, 1.499, 1.605, 1.716, 1.851, 1.986, 2.117, 2.247,
+ 2.265, 2.119, 1.973, 1.835, 1.698, 1.588, 1.482, 1.395, 1.313, 1.249, 1.19, 1.152, 1.123, 1.087, 1.046, 1.027, 1.027, 1.043, 1.08, 1.114, 1.143, 1.181, 1.237, 1.3, 1.381, 1.467, 1.573, 1.682, 1.816, 1.95, 2.089, 2.227,
+ 2.258, 2.104, 1.95, 1.813, 1.677, 1.567, 1.462, 1.375, 1.293, 1.227, 1.167, 1.127, 1.096, 1.065, 1.032, 1.016, 1.014, 1.028, 1.058, 1.088, 1.117, 1.157, 1.215, 1.28, 1.361, 1.447, 1.552, 1.661, 1.794, 1.928, 2.075, 2.222,
+ 2.258, 2.095, 1.933, 1.795, 1.66, 1.551, 1.446, 1.36, 1.278, 1.211, 1.15, 1.105, 1.068, 1.042, 1.023, 1.013, 1.011, 1.018, 1.036, 1.06, 1.095, 1.139, 1.199, 1.265, 1.346, 1.432, 1.536, 1.644, 1.777, 1.912, 2.067, 2.222,
+ 2.257, 2.086, 1.915, 1.778, 1.643, 1.535, 1.43, 1.344, 1.262, 1.195, 1.133, 1.083, 1.039, 1.019, 1.014, 1.01, 1.007, 1.008, 1.013, 1.033, 1.073, 1.12, 1.183, 1.25, 1.331, 1.417, 1.52, 1.627, 1.76, 1.895, 2.059, 2.222,
+ 2.257, 2.085, 1.913, 1.776, 1.642, 1.533, 1.429, 1.343, 1.261, 1.194, 1.132, 1.081, 1.036, 1.015, 1.01, 1.007, 1.005, 1.006, 1.009, 1.028, 1.07, 1.119, 1.181, 1.249, 1.33, 1.416, 1.519, 1.626, 1.759, 1.894, 2.058, 2.222,
+ 2.257, 2.085, 1.913, 1.776, 1.642, 1.533, 1.429, 1.343, 1.261, 1.194, 1.132, 1.081, 1.035, 1.013, 1.007, 1.004, 1.003, 1.004, 1.007, 1.026, 1.069, 1.119, 1.181, 1.249, 1.33, 1.416, 1.519, 1.626, 1.759, 1.894, 2.058, 2.222,
+ 2.257, 2.086, 1.915, 1.778, 1.643, 1.535, 1.43, 1.344, 1.262, 1.195, 1.133, 1.082, 1.037, 1.014, 1.005, 1.001, 1.001, 1.003, 1.007, 1.027, 1.07, 1.12, 1.183, 1.25, 1.331, 1.417, 1.52, 1.627, 1.76, 1.896, 2.059, 2.222,
+ 2.257, 2.093, 1.93, 1.793, 1.658, 1.549, 1.444, 1.358, 1.277, 1.21, 1.148, 1.101, 1.062, 1.034, 1.015, 1.005, 1.004, 1.012, 1.029, 1.054, 1.091, 1.136, 1.198, 1.265, 1.346, 1.432, 1.536, 1.644, 1.778, 1.913, 2.068, 2.224,
+ 2.257, 2.101, 1.945, 1.808, 1.673, 1.564, 1.459, 1.373, 1.292, 1.225, 1.163, 1.12, 1.086, 1.055, 1.024, 1.009, 1.007, 1.02, 1.05, 1.08, 1.111, 1.152, 1.213, 1.28, 1.361, 1.447, 1.552, 1.66, 1.795, 1.931, 2.078, 2.225,
+ 2.262, 2.114, 1.965, 1.829, 1.693, 1.583, 1.477, 1.391, 1.311, 1.244, 1.184, 1.142, 1.111, 1.076, 1.038, 1.02, 1.017, 1.034, 1.072, 1.106, 1.135, 1.174, 1.234, 1.299, 1.38, 1.466, 1.572, 1.681, 1.817, 1.953, 2.092, 2.232,
+ 2.28, 2.14, 2.0, 1.862, 1.725, 1.614, 1.507, 1.421, 1.34, 1.276, 1.22, 1.175, 1.136, 1.099, 1.065, 1.048, 1.047, 1.062, 1.094, 1.13, 1.17, 1.215, 1.268, 1.329, 1.411, 1.498, 1.604, 1.714, 1.851, 1.988, 2.12, 2.252,
+ 2.299, 2.166, 2.034, 1.896, 1.757, 1.645, 1.537, 1.45, 1.369, 1.309, 1.256, 1.207, 1.16, 1.123, 1.092, 1.077, 1.077, 1.089, 1.116, 1.153, 1.206, 1.256, 1.303, 1.359, 1.442, 1.529, 1.636, 1.747, 1.886, 2.024, 2.148, 2.273,
+ 2.328, 2.203, 2.078, 1.938, 1.797, 1.684, 1.575, 1.489, 1.409, 1.348, 1.294, 1.242, 1.191, 1.153, 1.126, 1.113, 1.113, 1.124, 1.148, 1.185, 1.241, 1.295, 1.344, 1.402, 1.481, 1.567, 1.675, 1.788, 1.929, 2.068, 2.186, 2.305,
+ 2.369, 2.251, 2.133, 1.991, 1.847, 1.732, 1.621, 1.539, 1.464, 1.397, 1.334, 1.279, 1.228, 1.193, 1.167, 1.155, 1.155, 1.167, 1.191, 1.226, 1.277, 1.331, 1.393, 1.459, 1.533, 1.614, 1.724, 1.838, 1.982, 2.123, 2.237, 2.351,
+ 2.41, 2.299, 2.188, 2.044, 1.897, 1.78, 1.668, 1.589, 1.518, 1.446, 1.374, 1.316, 1.266, 1.232, 1.209, 1.198, 1.198, 1.21, 1.234, 1.267, 1.312, 1.367, 1.443, 1.516, 1.584, 1.661, 1.773, 1.889, 2.035, 2.178, 2.287, 2.396,
+ 2.493, 2.375, 2.258, 2.11, 1.96, 1.845, 1.735, 1.65, 1.572, 1.497, 1.423, 1.365, 1.315, 1.282, 1.26, 1.25, 1.25, 1.261, 1.286, 1.318, 1.362, 1.417, 1.494, 1.57, 1.646, 1.729, 1.838, 1.953, 2.102, 2.248, 2.365, 2.483,
+ 2.599, 2.467, 2.335, 2.183, 2.03, 1.919, 1.814, 1.719, 1.627, 1.549, 1.478, 1.421, 1.372, 1.339, 1.317, 1.306, 1.306, 1.318, 1.343, 1.376, 1.421, 1.475, 1.546, 1.623, 1.715, 1.809, 1.914, 2.025, 2.176, 2.326, 2.459, 2.592,
+ 2.705, 2.559, 2.413, 2.256, 2.099, 1.992, 1.893, 1.788, 1.681, 1.602, 1.532, 1.477, 1.428, 1.395, 1.373, 1.363, 1.363, 1.374, 1.4, 1.433, 1.479, 1.532, 1.598, 1.675, 1.783, 1.89, 1.99, 2.097, 2.251, 2.405, 2.553, 2.702,
+ 2.763, 2.639, 2.514, 2.353, 2.19, 2.075, 1.967, 1.856, 1.744, 1.659, 1.584, 1.529, 1.484, 1.456, 1.44, 1.432, 1.432, 1.441, 1.459, 1.487, 1.53, 1.583, 1.655, 1.738, 1.852, 1.965, 2.073, 2.189, 2.35, 2.508, 2.632, 2.757,
+ 2.81, 2.716, 2.621, 2.456, 2.285, 2.158, 2.039, 1.923, 1.809, 1.718, 1.636, 1.581, 1.54, 1.518, 1.509, 1.505, 1.505, 1.509, 1.519, 1.54, 1.58, 1.633, 1.714, 1.804, 1.92, 2.038, 2.158, 2.286, 2.454, 2.617, 2.708, 2.799,
+ 2.858, 2.793, 2.728, 2.558, 2.38, 2.242, 2.111, 1.991, 1.873, 1.777, 1.688, 1.633, 1.596, 1.58, 1.578, 1.577, 1.577, 1.577, 1.578, 1.593, 1.629, 1.683, 1.772, 1.87, 1.989, 2.111, 2.244, 2.382, 2.558, 2.726, 2.784, 2.842
+ ],
+ "sigma": 0.00372,
+ "sigma_Cb": 0.00244
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2890,
+ "ccm":
+ [
+ 1.36754, -0.18448, -0.18306,
+ -0.32356, 1.44826, -0.12471,
+ -0.00412, -0.69936, 1.70348
+ ]
+ },
+ {
+ "ct": 2920,
+ "ccm":
+ [
+ 1.26704, 0.01624, -0.28328,
+ -0.28516, 1.38934, -0.10419,
+ -0.04854, -0.82211, 1.87066
+ ]
+ },
+ {
+ "ct": 3550,
+ "ccm":
+ [
+ 1.42836, -0.27235, -0.15601,
+ -0.28751, 1.41075, -0.12325,
+ -0.01812, -0.54849, 1.56661
+ ]
+ },
+ {
+ "ct": 4500,
+ "ccm":
+ [
+ 1.36328, -0.19569, -0.16759,
+ -0.25254, 1.52248, -0.26994,
+ -0.01575, -0.53155, 1.54729
+ ]
+ },
+ {
+ "ct": 5700,
+ "ccm":
+ [
+ 1.49207, -0.37245, -0.11963,
+ -0.21493, 1.40005, -0.18512,
+ -0.03781, -0.38779, 1.42561
+ ]
+ },
+ {
+ "ct": 7900,
+ "ccm":
+ [
+ 1.34849, -0.05425, -0.29424,
+ -0.22182, 1.77684, -0.55502,
+ -0.07403, -0.55336, 1.62739
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx708.json b/src/ipa/rpi/pisp/data/imx708.json
new file mode 100644
index 00000000..e8d25c21
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx708.json
@@ -0,0 +1,1270 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 20716,
+ "reference_gain": 1.12,
+ "reference_aperture": 1.0,
+ "reference_lux": 810,
+ "reference_Y": 13994
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 1.856
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 221,
+ "slope": 0.00226
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 3.2,
+ "strength": 0.75,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2964.0, 0.7451, 0.3213,
+ 3610.0, 0.6119, 0.4443,
+ 4640.0, 0.5168, 0.5419,
+ 5910.0, 0.4436, 0.6229,
+ 7590.0, 0.3847, 0.6921
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01752,
+ "transverse_neg": 0.01831
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.532, 1.534, 1.535, 1.538, 1.538, 1.533, 1.529, 1.515, 1.506, 1.492, 1.477, 1.465, 1.453, 1.444, 1.437, 1.433, 1.433, 1.435, 1.441, 1.449, 1.461, 1.474, 1.485, 1.499, 1.511, 1.519, 1.525, 1.526, 1.526, 1.523, 1.517, 1.516,
+ 1.532, 1.534, 1.537, 1.538, 1.537, 1.534, 1.525, 1.515, 1.502, 1.486, 1.474, 1.458, 1.449, 1.438, 1.429, 1.427, 1.426, 1.429, 1.436, 1.444, 1.456, 1.468, 1.483, 1.497, 1.509, 1.518, 1.524, 1.526, 1.526, 1.523, 1.521, 1.516,
+ 1.532, 1.534, 1.537, 1.538, 1.536, 1.533, 1.524, 1.512, 1.499, 1.483, 1.468, 1.453, 1.439, 1.429, 1.421, 1.419, 1.419, 1.419, 1.427, 1.438, 1.451, 1.464, 1.479, 1.494, 1.506, 1.516, 1.523, 1.526, 1.526, 1.524, 1.521, 1.518,
+ 1.533, 1.536, 1.537, 1.537, 1.535, 1.532, 1.521, 1.507, 1.491, 1.474, 1.456, 1.441, 1.429, 1.418, 1.409, 1.406, 1.406, 1.408, 1.415, 1.426, 1.439, 1.453, 1.471, 1.485, 1.501, 1.511, 1.522, 1.524, 1.526, 1.525, 1.522, 1.519,
+ 1.537, 1.538, 1.539, 1.538, 1.534, 1.525, 1.513, 1.495, 1.477, 1.459, 1.443, 1.427, 1.413, 1.402, 1.394, 1.391, 1.391, 1.393, 1.399, 1.409, 1.424, 1.439, 1.455, 1.472, 1.489, 1.503, 1.515, 1.523, 1.526, 1.527, 1.525, 1.523,
+ 1.538, 1.539, 1.541, 1.539, 1.531, 1.519, 1.503, 1.484, 1.466, 1.445, 1.427, 1.413, 1.401, 1.386, 1.378, 1.373, 1.373, 1.376, 1.386, 1.398, 1.409, 1.424, 1.441, 1.459, 1.477, 1.495, 1.509, 1.519, 1.526, 1.528, 1.528, 1.526,
+ 1.539, 1.541, 1.541, 1.539, 1.529, 1.516, 1.498, 1.479, 1.456, 1.437, 1.417, 1.401, 1.386, 1.378, 1.369, 1.363, 1.363, 1.367, 1.376, 1.386, 1.399, 1.413, 1.432, 1.451, 1.472, 1.491, 1.507, 1.517, 1.525, 1.527, 1.527, 1.527,
+ 1.539, 1.539, 1.539, 1.538, 1.529, 1.515, 1.497, 1.476, 1.454, 1.433, 1.411, 1.395, 1.381, 1.368, 1.361, 1.356, 1.356, 1.359, 1.367, 1.379, 1.393, 1.409, 1.428, 1.448, 1.471, 1.489, 1.505, 1.516, 1.524, 1.527, 1.527, 1.527,
+ 1.539, 1.539, 1.539, 1.537, 1.528, 1.513, 1.493, 1.471, 1.449, 1.426, 1.406, 1.387, 1.373, 1.361, 1.352, 1.348, 1.348, 1.351, 1.359, 1.372, 1.387, 1.403, 1.422, 1.443, 1.465, 1.484, 1.503, 1.516, 1.525, 1.527, 1.528, 1.526,
+ 1.541, 1.542, 1.539, 1.537, 1.524, 1.506, 1.485, 1.461, 1.438, 1.416, 1.395, 1.377, 1.362, 1.352, 1.344, 1.339, 1.339, 1.342, 1.351, 1.362, 1.376, 1.393, 1.412, 1.434, 1.455, 1.477, 1.495, 1.514, 1.524, 1.528, 1.529, 1.529,
+ 1.543, 1.544, 1.543, 1.534, 1.518, 1.499, 1.476, 1.452, 1.427, 1.405, 1.386, 1.367, 1.354, 1.344, 1.338, 1.329, 1.329, 1.335, 1.342, 1.352, 1.367, 1.382, 1.402, 1.424, 1.445, 1.469, 1.491, 1.507, 1.522, 1.528, 1.529, 1.532,
+ 1.544, 1.544, 1.542, 1.534, 1.518, 1.499, 1.474, 1.449, 1.425, 1.401, 1.379, 1.362, 1.348, 1.338, 1.329, 1.324, 1.325, 1.329, 1.335, 1.347, 1.361, 1.378, 1.397, 1.421, 1.443, 1.467, 1.489, 1.507, 1.521, 1.529, 1.532, 1.533,
+ 1.543, 1.543, 1.541, 1.534, 1.519, 1.499, 1.474, 1.448, 1.424, 1.399, 1.377, 1.359, 1.346, 1.333, 1.324, 1.322, 1.321, 1.324, 1.332, 1.344, 1.359, 1.376, 1.397, 1.419, 1.443, 1.467, 1.489, 1.508, 1.521, 1.528, 1.531, 1.532,
+ 1.543, 1.542, 1.541, 1.533, 1.519, 1.499, 1.474, 1.448, 1.422, 1.399, 1.376, 1.358, 1.344, 1.331, 1.322, 1.319, 1.319, 1.321, 1.331, 1.342, 1.357, 1.375, 1.396, 1.419, 1.443, 1.467, 1.489, 1.508, 1.521, 1.529, 1.531, 1.532,
+ 1.543, 1.542, 1.541, 1.532, 1.518, 1.496, 1.471, 1.445, 1.418, 1.393, 1.373, 1.354, 1.341, 1.329, 1.319, 1.317, 1.316, 1.319, 1.327, 1.338, 1.353, 1.371, 1.392, 1.415, 1.439, 1.465, 1.485, 1.507, 1.519, 1.529, 1.531, 1.531,
+ 1.545, 1.544, 1.542, 1.531, 1.515, 1.493, 1.467, 1.441, 1.414, 1.391, 1.369, 1.351, 1.337, 1.326, 1.318, 1.314, 1.314, 1.317, 1.325, 1.335, 1.351, 1.367, 1.388, 1.411, 1.436, 1.461, 1.483, 1.505, 1.519, 1.531, 1.533, 1.533,
+ 1.545, 1.544, 1.541, 1.531, 1.515, 1.493, 1.467, 1.441, 1.414, 1.391, 1.369, 1.351, 1.337, 1.326, 1.318, 1.314, 1.314, 1.317, 1.325, 1.335, 1.351, 1.367, 1.388, 1.411, 1.436, 1.461, 1.483, 1.505, 1.521, 1.531, 1.534, 1.534,
+ 1.545, 1.544, 1.541, 1.534, 1.519, 1.496, 1.471, 1.446, 1.419, 1.392, 1.372, 1.354, 1.338, 1.328, 1.319, 1.316, 1.315, 1.319, 1.327, 1.338, 1.353, 1.371, 1.392, 1.416, 1.441, 1.465, 1.489, 1.511, 1.522, 1.531, 1.534, 1.535,
+ 1.544, 1.544, 1.542, 1.537, 1.524, 1.501, 1.476, 1.449, 1.424, 1.399, 1.377, 1.359, 1.344, 1.332, 1.324, 1.319, 1.319, 1.323, 1.331, 1.343, 1.358, 1.374, 1.396, 1.419, 1.445, 1.471, 1.493, 1.512, 1.525, 1.532, 1.534, 1.534,
+ 1.545, 1.545, 1.543, 1.538, 1.524, 1.503, 1.479, 1.452, 1.426, 1.402, 1.381, 1.362, 1.348, 1.337, 1.329, 1.324, 1.324, 1.328, 1.335, 1.347, 1.361, 1.379, 1.399, 1.423, 1.447, 1.471, 1.493, 1.513, 1.526, 1.533, 1.534, 1.535,
+ 1.546, 1.546, 1.544, 1.539, 1.525, 1.504, 1.479, 1.453, 1.428, 1.404, 1.383, 1.365, 1.352, 1.339, 1.333, 1.329, 1.329, 1.333, 1.339, 1.349, 1.363, 1.381, 1.402, 1.424, 1.448, 1.472, 1.494, 1.514, 1.526, 1.534, 1.534, 1.534,
+ 1.546, 1.546, 1.544, 1.539, 1.526, 1.505, 1.483, 1.457, 1.432, 1.407, 1.389, 1.371, 1.357, 1.347, 1.339, 1.333, 1.333, 1.339, 1.345, 1.354, 1.368, 1.386, 1.406, 1.428, 1.453, 1.475, 1.496, 1.515, 1.527, 1.535, 1.535, 1.535,
+ 1.545, 1.545, 1.545, 1.541, 1.529, 1.513, 1.491, 1.467, 1.441, 1.418, 1.399, 1.379, 1.366, 1.355, 1.347, 1.341, 1.341, 1.345, 1.354, 1.364, 1.378, 1.395, 1.415, 1.436, 1.459, 1.483, 1.503, 1.519, 1.531, 1.534, 1.535, 1.534,
+ 1.544, 1.545, 1.545, 1.544, 1.535, 1.519, 1.499, 1.476, 1.451, 1.428, 1.409, 1.391, 1.377, 1.366, 1.356, 1.352, 1.352, 1.355, 1.364, 1.374, 1.388, 1.405, 1.426, 1.447, 1.469, 1.492, 1.509, 1.523, 1.532, 1.535, 1.535, 1.533,
+ 1.544, 1.545, 1.546, 1.545, 1.537, 1.523, 1.504, 1.482, 1.458, 1.436, 1.418, 1.401, 1.385, 1.377, 1.367, 1.362, 1.362, 1.365, 1.373, 1.385, 1.398, 1.415, 1.434, 1.455, 1.477, 1.495, 1.514, 1.525, 1.533, 1.536, 1.535, 1.533,
+ 1.545, 1.546, 1.547, 1.545, 1.538, 1.525, 1.508, 1.486, 1.465, 1.444, 1.424, 1.408, 1.394, 1.385, 1.377, 1.371, 1.371, 1.373, 1.384, 1.392, 1.405, 1.421, 1.441, 1.459, 1.481, 1.499, 1.516, 1.528, 1.534, 1.536, 1.536, 1.533,
+ 1.544, 1.546, 1.547, 1.547, 1.541, 1.531, 1.514, 1.494, 1.474, 1.454, 1.434, 1.421, 1.408, 1.394, 1.386, 1.382, 1.382, 1.385, 1.392, 1.405, 1.416, 1.432, 1.449, 1.468, 1.488, 1.505, 1.519, 1.531, 1.536, 1.537, 1.536, 1.533,
+ 1.544, 1.546, 1.548, 1.548, 1.545, 1.536, 1.522, 1.506, 1.486, 1.467, 1.451, 1.434, 1.421, 1.408, 1.401, 1.396, 1.396, 1.399, 1.407, 1.416, 1.431, 1.447, 1.463, 1.481, 1.499, 1.513, 1.526, 1.534, 1.537, 1.537, 1.534, 1.531,
+ 1.543, 1.545, 1.547, 1.549, 1.549, 1.543, 1.531, 1.517, 1.501, 1.483, 1.465, 1.451, 1.438, 1.425, 1.417, 1.412, 1.412, 1.418, 1.423, 1.433, 1.447, 1.462, 1.479, 1.493, 1.511, 1.524, 1.531, 1.536, 1.538, 1.537, 1.533, 1.531,
+ 1.542, 1.545, 1.548, 1.551, 1.551, 1.546, 1.539, 1.524, 1.511, 1.493, 1.479, 1.464, 1.451, 1.442, 1.433, 1.429, 1.429, 1.434, 1.439, 1.449, 1.462, 1.474, 1.491, 1.505, 1.519, 1.529, 1.536, 1.539, 1.539, 1.537, 1.533, 1.531,
+ 1.541, 1.546, 1.549, 1.552, 1.553, 1.551, 1.544, 1.533, 1.521, 1.505, 1.489, 1.477, 1.464, 1.455, 1.447, 1.443, 1.443, 1.446, 1.451, 1.462, 1.472, 1.487, 1.499, 1.514, 1.525, 1.535, 1.541, 1.541, 1.541, 1.539, 1.533, 1.531,
+ 1.541, 1.546, 1.549, 1.553, 1.554, 1.552, 1.546, 1.537, 1.524, 1.512, 1.499, 1.485, 1.474, 1.464, 1.455, 1.451, 1.451, 1.452, 1.461, 1.469, 1.481, 1.495, 1.506, 1.518, 1.529, 1.539, 1.541, 1.542, 1.541, 1.539, 1.533, 1.529
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 2.586, 2.591, 2.597, 2.601, 2.601, 2.599, 2.592, 2.576, 2.561, 2.541, 2.523, 2.503, 2.486, 2.471, 2.459, 2.452, 2.452, 2.454, 2.462, 2.478, 2.495, 2.512, 2.531, 2.555, 2.568, 2.579, 2.587, 2.588, 2.585, 2.579, 2.573, 2.566,
+ 2.587, 2.592, 2.598, 2.601, 2.601, 2.599, 2.587, 2.574, 2.556, 2.532, 2.512, 2.491, 2.474, 2.462, 2.449, 2.443, 2.439, 2.443, 2.454, 2.464, 2.485, 2.505, 2.525, 2.548, 2.566, 2.578, 2.585, 2.588, 2.586, 2.579, 2.575, 2.567,
+ 2.587, 2.593, 2.598, 2.602, 2.601, 2.597, 2.584, 2.569, 2.551, 2.527, 2.503, 2.482, 2.464, 2.448, 2.434, 2.428, 2.427, 2.431, 2.439, 2.455, 2.474, 2.498, 2.521, 2.541, 2.564, 2.577, 2.585, 2.588, 2.589, 2.581, 2.576, 2.569,
+ 2.593, 2.596, 2.601, 2.603, 2.601, 2.594, 2.583, 2.563, 2.539, 2.514, 2.491, 2.466, 2.445, 2.429, 2.417, 2.409, 2.408, 2.411, 2.421, 2.437, 2.457, 2.481, 2.507, 2.531, 2.555, 2.572, 2.583, 2.588, 2.588, 2.585, 2.579, 2.575,
+ 2.597, 2.599, 2.604, 2.603, 2.599, 2.587, 2.567, 2.548, 2.522, 2.493, 2.467, 2.443, 2.419, 2.406, 2.391, 2.385, 2.385, 2.387, 2.397, 2.413, 2.435, 2.459, 2.486, 2.509, 2.538, 2.559, 2.574, 2.586, 2.588, 2.586, 2.582, 2.579,
+ 2.601, 2.603, 2.606, 2.604, 2.596, 2.578, 2.556, 2.531, 2.501, 2.471, 2.444, 2.419, 2.402, 2.381, 2.365, 2.359, 2.359, 2.361, 2.374, 2.396, 2.413, 2.435, 2.465, 2.493, 2.517, 2.542, 2.562, 2.582, 2.588, 2.587, 2.586, 2.584,
+ 2.601, 2.604, 2.605, 2.604, 2.593, 2.575, 2.547, 2.522, 2.488, 2.458, 2.432, 2.402, 2.381, 2.364, 2.349, 2.338, 2.338, 2.345, 2.359, 2.374, 2.396, 2.423, 2.453, 2.481, 2.511, 2.539, 2.561, 2.581, 2.586, 2.588, 2.588, 2.586,
+ 2.599, 2.602, 2.604, 2.602, 2.592, 2.572, 2.546, 2.516, 2.485, 2.451, 2.422, 2.393, 2.368, 2.349, 2.336, 2.328, 2.328, 2.333, 2.345, 2.365, 2.389, 2.417, 2.447, 2.478, 2.509, 2.537, 2.561, 2.577, 2.585, 2.588, 2.588, 2.587,
+ 2.601, 2.602, 2.604, 2.601, 2.589, 2.569, 2.539, 2.509, 2.473, 2.442, 2.409, 2.379, 2.357, 2.336, 2.323, 2.315, 2.315, 2.322, 2.334, 2.354, 2.377, 2.406, 2.436, 2.469, 2.503, 2.529, 2.558, 2.574, 2.585, 2.588, 2.589, 2.587,
+ 2.601, 2.606, 2.606, 2.601, 2.581, 2.557, 2.525, 2.493, 2.459, 2.426, 2.394, 2.365, 2.339, 2.322, 2.308, 2.301, 2.301, 2.305, 2.322, 2.337, 2.361, 2.389, 2.422, 2.454, 2.485, 2.519, 2.546, 2.568, 2.584, 2.589, 2.589, 2.589,
+ 2.608, 2.608, 2.606, 2.597, 2.576, 2.548, 2.515, 2.481, 2.444, 2.409, 2.376, 2.346, 2.323, 2.308, 2.293, 2.282, 2.281, 2.291, 2.305, 2.322, 2.348, 2.371, 2.403, 2.439, 2.472, 2.508, 2.538, 2.565, 2.582, 2.589, 2.592, 2.593,
+ 2.608, 2.608, 2.605, 2.596, 2.575, 2.547, 2.511, 2.474, 2.435, 2.401, 2.366, 2.339, 2.312, 2.293, 2.281, 2.274, 2.274, 2.281, 2.291, 2.311, 2.334, 2.364, 2.399, 2.433, 2.471, 2.506, 2.538, 2.564, 2.581, 2.591, 2.594, 2.595,
+ 2.605, 2.606, 2.605, 2.595, 2.575, 2.547, 2.511, 2.474, 2.433, 2.397, 2.363, 2.333, 2.309, 2.291, 2.274, 2.267, 2.265, 2.272, 2.284, 2.307, 2.331, 2.361, 2.395, 2.431, 2.469, 2.503, 2.539, 2.567, 2.584, 2.591, 2.595, 2.595,
+ 2.605, 2.606, 2.605, 2.595, 2.575, 2.547, 2.509, 2.473, 2.431, 2.395, 2.361, 2.332, 2.306, 2.285, 2.267, 2.261, 2.262, 2.265, 2.281, 2.302, 2.329, 2.359, 2.395, 2.429, 2.468, 2.503, 2.539, 2.567, 2.583, 2.593, 2.595, 2.595,
+ 2.608, 2.607, 2.606, 2.592, 2.572, 2.543, 2.506, 2.468, 2.426, 2.389, 2.354, 2.327, 2.299, 2.279, 2.262, 2.258, 2.257, 2.262, 2.276, 2.297, 2.321, 2.352, 2.387, 2.425, 2.464, 2.498, 2.532, 2.565, 2.582, 2.592, 2.595, 2.596,
+ 2.611, 2.609, 2.605, 2.592, 2.571, 2.538, 2.499, 2.463, 2.421, 2.384, 2.351, 2.322, 2.295, 2.276, 2.259, 2.254, 2.254, 2.256, 2.273, 2.292, 2.318, 2.347, 2.383, 2.418, 2.456, 2.491, 2.529, 2.562, 2.581, 2.593, 2.597, 2.598,
+ 2.609, 2.609, 2.606, 2.593, 2.571, 2.538, 2.499, 2.463, 2.421, 2.384, 2.351, 2.321, 2.295, 2.276, 2.259, 2.251, 2.251, 2.256, 2.273, 2.292, 2.318, 2.347, 2.383, 2.418, 2.456, 2.491, 2.529, 2.559, 2.582, 2.595, 2.597, 2.599,
+ 2.609, 2.609, 2.607, 2.597, 2.576, 2.543, 2.507, 2.467, 2.427, 2.388, 2.356, 2.323, 2.297, 2.278, 2.262, 2.256, 2.255, 2.262, 2.275, 2.296, 2.321, 2.351, 2.388, 2.425, 2.464, 2.502, 2.534, 2.563, 2.586, 2.595, 2.598, 2.599,
+ 2.609, 2.609, 2.608, 2.601, 2.581, 2.547, 2.513, 2.475, 2.434, 2.398, 2.362, 2.332, 2.307, 2.287, 2.269, 2.263, 2.263, 2.269, 2.281, 2.304, 2.328, 2.358, 2.394, 2.429, 2.469, 2.508, 2.538, 2.568, 2.589, 2.597, 2.598, 2.598,
+ 2.609, 2.611, 2.609, 2.601, 2.583, 2.549, 2.518, 2.478, 2.439, 2.402, 2.367, 2.337, 2.313, 2.293, 2.279, 2.271, 2.269, 2.277, 2.291, 2.311, 2.336, 2.363, 2.399, 2.435, 2.473, 2.509, 2.541, 2.571, 2.591, 2.598, 2.599, 2.599,
+ 2.611, 2.611, 2.609, 2.602, 2.585, 2.551, 2.519, 2.481, 2.442, 2.406, 2.374, 2.342, 2.318, 2.297, 2.287, 2.279, 2.278, 2.287, 2.297, 2.315, 2.339, 2.368, 2.402, 2.438, 2.476, 2.511, 2.545, 2.571, 2.591, 2.599, 2.601, 2.599,
+ 2.611, 2.611, 2.609, 2.604, 2.587, 2.557, 2.521, 2.485, 2.447, 2.412, 2.379, 2.352, 2.328, 2.309, 2.297, 2.288, 2.287, 2.297, 2.308, 2.327, 2.349, 2.377, 2.408, 2.446, 2.481, 2.517, 2.547, 2.573, 2.591, 2.599, 2.601, 2.599,
+ 2.608, 2.609, 2.609, 2.606, 2.592, 2.564, 2.533, 2.498, 2.462, 2.427, 2.394, 2.364, 2.343, 2.326, 2.309, 2.302, 2.302, 2.308, 2.324, 2.341, 2.362, 2.391, 2.425, 2.458, 2.494, 2.526, 2.555, 2.584, 2.593, 2.599, 2.599, 2.599,
+ 2.608, 2.609, 2.609, 2.609, 2.597, 2.574, 2.547, 2.511, 2.475, 2.438, 2.411, 2.381, 2.359, 2.342, 2.327, 2.318, 2.318, 2.325, 2.341, 2.358, 2.377, 2.404, 2.439, 2.469, 2.507, 2.537, 2.564, 2.587, 2.596, 2.598, 2.598, 2.597,
+ 2.609, 2.609, 2.611, 2.609, 2.599, 2.579, 2.551, 2.519, 2.486, 2.453, 2.425, 2.397, 2.375, 2.358, 2.345, 2.336, 2.336, 2.341, 2.355, 2.372, 2.393, 2.419, 2.452, 2.481, 2.516, 2.542, 2.571, 2.591, 2.597, 2.599, 2.598, 2.595,
+ 2.607, 2.611, 2.613, 2.611, 2.605, 2.586, 2.561, 2.529, 2.495, 2.462, 2.435, 2.409, 2.387, 2.374, 2.359, 2.351, 2.351, 2.356, 2.372, 2.385, 2.406, 2.431, 2.462, 2.488, 2.524, 2.551, 2.573, 2.591, 2.598, 2.599, 2.598, 2.596,
+ 2.606, 2.609, 2.613, 2.613, 2.607, 2.591, 2.565, 2.539, 2.507, 2.477, 2.449, 2.425, 2.409, 2.387, 2.376, 2.369, 2.369, 2.374, 2.385, 2.406, 2.422, 2.446, 2.473, 2.502, 2.534, 2.557, 2.578, 2.595, 2.599, 2.601, 2.598, 2.595,
+ 2.606, 2.611, 2.613, 2.614, 2.611, 2.598, 2.581, 2.553, 2.523, 2.496, 2.471, 2.449, 2.425, 2.409, 2.398, 2.391, 2.391, 2.395, 2.408, 2.422, 2.445, 2.468, 2.493, 2.522, 2.549, 2.569, 2.589, 2.601, 2.603, 2.602, 2.596, 2.593,
+ 2.605, 2.609, 2.613, 2.616, 2.614, 2.607, 2.591, 2.571, 2.545, 2.518, 2.494, 2.471, 2.452, 2.435, 2.423, 2.417, 2.417, 2.421, 2.431, 2.449, 2.467, 2.493, 2.516, 2.542, 2.566, 2.585, 2.596, 2.606, 2.605, 2.602, 2.595, 2.593,
+ 2.604, 2.608, 2.616, 2.617, 2.618, 2.613, 2.602, 2.584, 2.559, 2.536, 2.514, 2.493, 2.476, 2.459, 2.445, 2.439, 2.439, 2.445, 2.456, 2.471, 2.493, 2.511, 2.534, 2.559, 2.579, 2.592, 2.607, 2.608, 2.607, 2.604, 2.595, 2.592,
+ 2.603, 2.609, 2.615, 2.619, 2.623, 2.619, 2.608, 2.594, 2.573, 2.551, 2.532, 2.512, 2.493, 2.477, 2.468, 2.462, 2.462, 2.468, 2.476, 2.494, 2.509, 2.528, 2.551, 2.574, 2.589, 2.604, 2.611, 2.611, 2.611, 2.604, 2.598, 2.592,
+ 2.602, 2.607, 2.613, 2.621, 2.624, 2.621, 2.617, 2.601, 2.585, 2.567, 2.544, 2.521, 2.507, 2.493, 2.478, 2.474, 2.475, 2.477, 2.489, 2.505, 2.523, 2.544, 2.563, 2.584, 2.598, 2.609, 2.612, 2.613, 2.613, 2.608, 2.599, 2.591
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.263, 3.263, 3.264, 3.269, 3.274, 3.275, 3.277, 3.281, 3.283, 3.285, 3.289, 3.292, 3.291, 3.291, 3.294, 3.298, 3.302, 3.305, 3.303, 3.301, 3.296, 3.294, 3.293, 3.293, 3.295, 3.295, 3.295, 3.287, 3.285, 3.279, 3.282, 3.285,
+ 3.259, 3.259, 3.262, 3.268, 3.271, 3.273, 3.273, 3.274, 3.277, 3.278, 3.282, 3.285, 3.286, 3.286, 3.288, 3.289, 3.292, 3.291, 3.293, 3.291, 3.288, 3.288, 3.288, 3.288, 3.288, 3.287, 3.287, 3.283, 3.281, 3.276, 3.277, 3.281,
+ 3.259, 3.259, 3.262, 3.269, 3.272, 3.274, 3.273, 3.273, 3.273, 3.276, 3.278, 3.279, 3.281, 3.282, 3.283, 3.283, 3.285, 3.286, 3.286, 3.285, 3.283, 3.282, 3.282, 3.286, 3.285, 3.285, 3.285, 3.282, 3.281, 3.276, 3.275, 3.279,
+ 3.267, 3.266, 3.269, 3.273, 3.274, 3.277, 3.276, 3.275, 3.274, 3.277, 3.277, 3.278, 3.279, 3.279, 3.279, 3.279, 3.281, 3.283, 3.283, 3.281, 3.281, 3.281, 3.282, 3.287, 3.287, 3.288, 3.287, 3.286, 3.283, 3.277, 3.278, 3.281,
+ 3.268, 3.271, 3.274, 3.277, 3.283, 3.286, 3.284, 3.281, 3.278, 3.278, 3.279, 3.279, 3.281, 3.281, 3.281, 3.281, 3.282, 3.283, 3.284, 3.283, 3.282, 3.282, 3.284, 3.288, 3.289, 3.291, 3.291, 3.288, 3.288, 3.283, 3.286, 3.288,
+ 3.272, 3.275, 3.279, 3.283, 3.288, 3.289, 3.289, 3.287, 3.282, 3.284, 3.282, 3.284, 3.284, 3.285, 3.284, 3.285, 3.285, 3.288, 3.287, 3.286, 3.283, 3.283, 3.285, 3.289, 3.292, 3.292, 3.293, 3.292, 3.291, 3.288, 3.289, 3.293,
+ 3.276, 3.278, 3.282, 3.289, 3.293, 3.293, 3.291, 3.289, 3.287, 3.286, 3.285, 3.285, 3.286, 3.286, 3.287, 3.288, 3.289, 3.289, 3.289, 3.288, 3.285, 3.283, 3.286, 3.289, 3.292, 3.294, 3.294, 3.294, 3.293, 3.289, 3.292, 3.293,
+ 3.279, 3.281, 3.286, 3.293, 3.297, 3.298, 3.295, 3.292, 3.288, 3.287, 3.285, 3.287, 3.288, 3.288, 3.289, 3.291, 3.292, 3.293, 3.291, 3.288, 3.286, 3.285, 3.285, 3.291, 3.294, 3.295, 3.297, 3.297, 3.298, 3.293, 3.294, 3.294,
+ 3.281, 3.286, 3.291, 3.298, 3.301, 3.301, 3.299, 3.295, 3.289, 3.288, 3.286, 3.288, 3.289, 3.292, 3.293, 3.292, 3.295, 3.296, 3.295, 3.291, 3.287, 3.286, 3.286, 3.289, 3.295, 3.297, 3.298, 3.301, 3.301, 3.298, 3.297, 3.297,
+ 3.284, 3.289, 3.295, 3.302, 3.303, 3.303, 3.301, 3.298, 3.294, 3.292, 3.289, 3.293, 3.296, 3.297, 3.297, 3.297, 3.297, 3.298, 3.298, 3.296, 3.289, 3.288, 3.287, 3.294, 3.298, 3.301, 3.304, 3.305, 3.304, 3.299, 3.299, 3.302,
+ 3.291, 3.292, 3.299, 3.305, 3.308, 3.305, 3.304, 3.302, 3.298, 3.295, 3.295, 3.298, 3.299, 3.302, 3.303, 3.302, 3.301, 3.301, 3.301, 3.299, 3.296, 3.291, 3.292, 3.297, 3.301, 3.304, 3.306, 3.309, 3.308, 3.302, 3.301, 3.304,
+ 3.292, 3.297, 3.303, 3.309, 3.312, 3.311, 3.308, 3.304, 3.301, 3.299, 3.298, 3.299, 3.303, 3.305, 3.306, 3.305, 3.305, 3.303, 3.303, 3.301, 3.299, 3.294, 3.294, 3.297, 3.302, 3.305, 3.309, 3.311, 3.311, 3.305, 3.305, 3.306,
+ 3.295, 3.298, 3.305, 3.309, 3.313, 3.313, 3.312, 3.307, 3.303, 3.301, 3.299, 3.301, 3.304, 3.307, 3.308, 3.306, 3.306, 3.306, 3.306, 3.302, 3.299, 3.296, 3.295, 3.298, 3.303, 3.306, 3.311, 3.312, 3.312, 3.307, 3.308, 3.309,
+ 3.297, 3.298, 3.303, 3.309, 3.313, 3.313, 3.311, 3.307, 3.303, 3.301, 3.299, 3.299, 3.305, 3.307, 3.307, 3.306, 3.306, 3.306, 3.305, 3.299, 3.297, 3.294, 3.294, 3.298, 3.303, 3.305, 3.311, 3.312, 3.313, 3.308, 3.311, 3.309,
+ 3.297, 3.298, 3.304, 3.309, 3.312, 3.313, 3.311, 3.308, 3.304, 3.302, 3.301, 3.301, 3.306, 3.307, 3.308, 3.306, 3.306, 3.307, 3.306, 3.302, 3.297, 3.294, 3.294, 3.299, 3.305, 3.306, 3.309, 3.312, 3.311, 3.306, 3.308, 3.309,
+ 3.298, 3.299, 3.306, 3.311, 3.315, 3.314, 3.311, 3.308, 3.305, 3.303, 3.303, 3.304, 3.307, 3.309, 3.309, 3.308, 3.308, 3.307, 3.306, 3.302, 3.298, 3.296, 3.296, 3.298, 3.304, 3.306, 3.308, 3.309, 3.314, 3.308, 3.309, 3.308,
+ 3.299, 3.301, 3.307, 3.313, 3.316, 3.316, 3.313, 3.311, 3.307, 3.305, 3.305, 3.307, 3.309, 3.311, 3.312, 3.311, 3.309, 3.309, 3.308, 3.306, 3.301, 3.298, 3.297, 3.301, 3.305, 3.309, 3.309, 3.311, 3.313, 3.306, 3.308, 3.307,
+ 3.301, 3.301, 3.307, 3.314, 3.317, 3.318, 3.314, 3.311, 3.308, 3.306, 3.306, 3.308, 3.311, 3.311, 3.312, 3.311, 3.309, 3.309, 3.309, 3.306, 3.302, 3.298, 3.298, 3.301, 3.305, 3.309, 3.311, 3.311, 3.312, 3.309, 3.308, 3.308,
+ 3.301, 3.302, 3.307, 3.316, 3.319, 3.319, 3.315, 3.312, 3.309, 3.306, 3.307, 3.309, 3.311, 3.312, 3.311, 3.311, 3.309, 3.309, 3.309, 3.306, 3.303, 3.299, 3.298, 3.302, 3.305, 3.308, 3.309, 3.309, 3.309, 3.303, 3.306, 3.307,
+ 3.301, 3.303, 3.308, 3.315, 3.318, 3.318, 3.316, 3.313, 3.311, 3.307, 3.307, 3.308, 3.311, 3.311, 3.311, 3.308, 3.308, 3.307, 3.307, 3.306, 3.303, 3.299, 3.297, 3.301, 3.303, 3.306, 3.309, 3.308, 3.306, 3.303, 3.304, 3.306,
+ 3.302, 3.304, 3.306, 3.316, 3.318, 3.318, 3.317, 3.315, 3.311, 3.308, 3.309, 3.311, 3.311, 3.312, 3.311, 3.307, 3.306, 3.307, 3.308, 3.307, 3.304, 3.299, 3.298, 3.301, 3.303, 3.305, 3.306, 3.305, 3.304, 3.302, 3.303, 3.306,
+ 3.302, 3.304, 3.306, 3.312, 3.316, 3.317, 3.317, 3.313, 3.311, 3.309, 3.309, 3.311, 3.311, 3.312, 3.309, 3.307, 3.306, 3.306, 3.308, 3.307, 3.304, 3.298, 3.297, 3.302, 3.304, 3.305, 3.306, 3.305, 3.304, 3.299, 3.302, 3.303,
+ 3.299, 3.299, 3.306, 3.309, 3.315, 3.316, 3.316, 3.312, 3.309, 3.308, 3.308, 3.309, 3.311, 3.311, 3.307, 3.305, 3.305, 3.305, 3.306, 3.304, 3.299, 3.297, 3.296, 3.301, 3.302, 3.304, 3.303, 3.302, 3.301, 3.298, 3.299, 3.301,
+ 3.295, 3.297, 3.305, 3.309, 3.311, 3.311, 3.311, 3.309, 3.307, 3.306, 3.305, 3.305, 3.305, 3.305, 3.304, 3.301, 3.301, 3.301, 3.302, 3.299, 3.296, 3.295, 3.295, 3.298, 3.301, 3.302, 3.303, 3.301, 3.299, 3.295, 3.297, 3.299,
+ 3.294, 3.296, 3.299, 3.306, 3.308, 3.309, 3.309, 3.307, 3.307, 3.303, 3.302, 3.301, 3.302, 3.303, 3.302, 3.299, 3.298, 3.299, 3.299, 3.298, 3.295, 3.292, 3.292, 3.293, 3.297, 3.299, 3.299, 3.299, 3.297, 3.294, 3.295, 3.299,
+ 3.291, 3.292, 3.296, 3.302, 3.306, 3.306, 3.307, 3.306, 3.305, 3.303, 3.302, 3.301, 3.301, 3.303, 3.301, 3.299, 3.298, 3.298, 3.298, 3.297, 3.295, 3.292, 3.291, 3.291, 3.295, 3.295, 3.297, 3.298, 3.296, 3.293, 3.292, 3.291,
+ 3.293, 3.292, 3.294, 3.301, 3.303, 3.305, 3.308, 3.306, 3.306, 3.304, 3.304, 3.303, 3.303, 3.303, 3.302, 3.301, 3.299, 3.299, 3.299, 3.299, 3.294, 3.291, 3.289, 3.291, 3.293, 3.294, 3.294, 3.294, 3.294, 3.289, 3.291, 3.291,
+ 3.288, 3.289, 3.291, 3.299, 3.303, 3.304, 3.304, 3.304, 3.304, 3.303, 3.303, 3.304, 3.306, 3.305, 3.303, 3.301, 3.301, 3.298, 3.299, 3.298, 3.293, 3.291, 3.289, 3.291, 3.291, 3.292, 3.291, 3.291, 3.291, 3.285, 3.288, 3.291,
+ 3.285, 3.284, 3.287, 3.291, 3.299, 3.299, 3.299, 3.299, 3.299, 3.301, 3.302, 3.303, 3.303, 3.302, 3.299, 3.298, 3.298, 3.298, 3.298, 3.293, 3.288, 3.286, 3.285, 3.288, 3.288, 3.288, 3.287, 3.285, 3.284, 3.279, 3.281, 3.284,
+ 3.281, 3.282, 3.282, 3.286, 3.291, 3.294, 3.294, 3.295, 3.295, 3.299, 3.301, 3.304, 3.305, 3.299, 3.299, 3.297, 3.298, 3.298, 3.297, 3.292, 3.288, 3.285, 3.283, 3.284, 3.284, 3.286, 3.284, 3.282, 3.279, 3.275, 3.275, 3.278,
+ 3.282, 3.282, 3.284, 3.286, 3.291, 3.294, 3.295, 3.295, 3.298, 3.301, 3.304, 3.306, 3.306, 3.304, 3.303, 3.301, 3.302, 3.299, 3.299, 3.295, 3.289, 3.287, 3.284, 3.288, 3.287, 3.287, 3.285, 3.283, 3.282, 3.278, 3.281, 3.286,
+ 3.292, 3.291, 3.292, 3.298, 3.307, 3.309, 3.308, 3.312, 3.313, 3.317, 3.324, 3.327, 3.327, 3.325, 3.326, 3.322, 3.319, 3.317, 3.317, 3.315, 3.312, 3.305, 3.303, 3.301, 3.299, 3.297, 3.299, 3.293, 3.289, 3.285, 3.287, 3.293
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.602, 1.603, 1.605, 1.608, 1.611, 1.612, 1.612, 1.614, 1.615, 1.616, 1.619, 1.621, 1.621, 1.622, 1.622, 1.624, 1.624, 1.626, 1.625, 1.625, 1.623, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.614, 1.612, 1.609, 1.609, 1.611,
+ 1.601, 1.602, 1.605, 1.608, 1.611, 1.612, 1.612, 1.613, 1.614, 1.615, 1.617, 1.619, 1.621, 1.621, 1.621, 1.621, 1.622, 1.624, 1.624, 1.624, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.615, 1.614, 1.612, 1.609, 1.609, 1.609,
+ 1.602, 1.603, 1.605, 1.609, 1.611, 1.613, 1.613, 1.613, 1.613, 1.615, 1.616, 1.618, 1.618, 1.619, 1.619, 1.619, 1.621, 1.621, 1.622, 1.622, 1.619, 1.618, 1.617, 1.617, 1.616, 1.615, 1.615, 1.615, 1.612, 1.609, 1.609, 1.609,
+ 1.604, 1.605, 1.608, 1.612, 1.613, 1.614, 1.614, 1.614, 1.614, 1.614, 1.616, 1.617, 1.618, 1.618, 1.618, 1.619, 1.619, 1.621, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.616, 1.616, 1.616, 1.615, 1.615, 1.612, 1.611, 1.611,
+ 1.606, 1.608, 1.611, 1.614, 1.615, 1.615, 1.616, 1.616, 1.615, 1.615, 1.617, 1.618, 1.619, 1.619, 1.618, 1.619, 1.621, 1.622, 1.623, 1.622, 1.619, 1.619, 1.617, 1.617, 1.617, 1.618, 1.618, 1.617, 1.617, 1.614, 1.613, 1.613,
+ 1.608, 1.611, 1.614, 1.617, 1.618, 1.618, 1.618, 1.618, 1.618, 1.618, 1.619, 1.621, 1.621, 1.621, 1.621, 1.621, 1.622, 1.623, 1.624, 1.623, 1.622, 1.619, 1.619, 1.618, 1.618, 1.618, 1.618, 1.618, 1.618, 1.617, 1.615, 1.614,
+ 1.611, 1.613, 1.616, 1.618, 1.621, 1.621, 1.619, 1.619, 1.619, 1.619, 1.619, 1.621, 1.622, 1.623, 1.623, 1.623, 1.623, 1.624, 1.626, 1.624, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.621, 1.621, 1.619, 1.617, 1.616, 1.616,
+ 1.611, 1.613, 1.617, 1.621, 1.622, 1.622, 1.621, 1.619, 1.619, 1.619, 1.621, 1.622, 1.624, 1.624, 1.624, 1.624, 1.625, 1.626, 1.626, 1.624, 1.623, 1.621, 1.621, 1.619, 1.619, 1.619, 1.621, 1.621, 1.621, 1.619, 1.618, 1.617,
+ 1.613, 1.615, 1.618, 1.621, 1.623, 1.623, 1.622, 1.621, 1.619, 1.619, 1.621, 1.622, 1.625, 1.625, 1.626, 1.626, 1.625, 1.626, 1.626, 1.624, 1.622, 1.621, 1.619, 1.619, 1.619, 1.621, 1.622, 1.622, 1.621, 1.621, 1.619, 1.618,
+ 1.614, 1.617, 1.621, 1.623, 1.624, 1.624, 1.623, 1.621, 1.621, 1.621, 1.622, 1.625, 1.627, 1.627, 1.628, 1.628, 1.628, 1.628, 1.627, 1.626, 1.623, 1.621, 1.621, 1.621, 1.621, 1.623, 1.623, 1.623, 1.623, 1.621, 1.619, 1.619,
+ 1.616, 1.617, 1.622, 1.624, 1.625, 1.625, 1.624, 1.623, 1.622, 1.623, 1.624, 1.627, 1.629, 1.631, 1.631, 1.631, 1.631, 1.631, 1.631, 1.628, 1.626, 1.623, 1.622, 1.622, 1.623, 1.623, 1.624, 1.624, 1.624, 1.622, 1.621, 1.621,
+ 1.617, 1.618, 1.623, 1.625, 1.626, 1.626, 1.625, 1.624, 1.623, 1.624, 1.625, 1.629, 1.631, 1.633, 1.634, 1.634, 1.634, 1.633, 1.633, 1.631, 1.628, 1.624, 1.623, 1.623, 1.623, 1.625, 1.625, 1.625, 1.625, 1.623, 1.622, 1.622,
+ 1.617, 1.619, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.624, 1.625, 1.628, 1.632, 1.634, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.627, 1.624, 1.623, 1.623, 1.623, 1.624, 1.625, 1.626, 1.625, 1.624, 1.623, 1.623,
+ 1.618, 1.619, 1.623, 1.626, 1.627, 1.626, 1.626, 1.625, 1.624, 1.624, 1.625, 1.628, 1.631, 1.634, 1.634, 1.634, 1.634, 1.634, 1.633, 1.631, 1.628, 1.623, 1.622, 1.622, 1.623, 1.624, 1.625, 1.626, 1.626, 1.624, 1.624, 1.623,
+ 1.618, 1.619, 1.623, 1.626, 1.627, 1.627, 1.625, 1.624, 1.624, 1.624, 1.625, 1.628, 1.632, 1.633, 1.634, 1.634, 1.634, 1.633, 1.633, 1.631, 1.627, 1.623, 1.622, 1.622, 1.623, 1.624, 1.624, 1.625, 1.625, 1.624, 1.623, 1.623,
+ 1.619, 1.621, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.624, 1.626, 1.628, 1.632, 1.634, 1.635, 1.634, 1.634, 1.633, 1.633, 1.631, 1.628, 1.625, 1.622, 1.622, 1.622, 1.623, 1.624, 1.625, 1.625, 1.624, 1.623, 1.623,
+ 1.619, 1.621, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.625, 1.627, 1.629, 1.633, 1.635, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.628, 1.625, 1.623, 1.622, 1.622, 1.623, 1.624, 1.624, 1.624, 1.623, 1.623, 1.622,
+ 1.619, 1.621, 1.624, 1.626, 1.628, 1.628, 1.627, 1.626, 1.625, 1.626, 1.627, 1.629, 1.633, 1.635, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.628, 1.625, 1.623, 1.623, 1.623, 1.623, 1.624, 1.624, 1.624, 1.622, 1.622, 1.622,
+ 1.619, 1.621, 1.623, 1.626, 1.628, 1.628, 1.627, 1.626, 1.625, 1.626, 1.627, 1.629, 1.632, 1.634, 1.635, 1.635, 1.634, 1.634, 1.632, 1.631, 1.628, 1.624, 1.622, 1.622, 1.622, 1.623, 1.624, 1.624, 1.624, 1.622, 1.621, 1.621,
+ 1.619, 1.621, 1.623, 1.627, 1.628, 1.628, 1.627, 1.627, 1.626, 1.627, 1.628, 1.629, 1.631, 1.633, 1.634, 1.633, 1.633, 1.632, 1.631, 1.631, 1.627, 1.624, 1.622, 1.622, 1.622, 1.622, 1.623, 1.623, 1.623, 1.621, 1.621, 1.621,
+ 1.621, 1.621, 1.624, 1.627, 1.628, 1.628, 1.627, 1.627, 1.627, 1.627, 1.628, 1.631, 1.632, 1.633, 1.633, 1.632, 1.632, 1.632, 1.631, 1.631, 1.628, 1.625, 1.623, 1.622, 1.622, 1.622, 1.623, 1.623, 1.623, 1.621, 1.621, 1.621,
+ 1.621, 1.621, 1.623, 1.627, 1.628, 1.628, 1.628, 1.627, 1.627, 1.628, 1.628, 1.629, 1.631, 1.632, 1.633, 1.632, 1.631, 1.631, 1.631, 1.629, 1.628, 1.625, 1.624, 1.623, 1.623, 1.623, 1.623, 1.623, 1.623, 1.621, 1.621, 1.619,
+ 1.619, 1.621, 1.623, 1.626, 1.628, 1.629, 1.627, 1.627, 1.627, 1.627, 1.628, 1.629, 1.631, 1.631, 1.631, 1.631, 1.631, 1.629, 1.629, 1.628, 1.626, 1.624, 1.623, 1.623, 1.623, 1.622, 1.623, 1.623, 1.622, 1.621, 1.619, 1.619,
+ 1.618, 1.619, 1.623, 1.625, 1.627, 1.627, 1.627, 1.627, 1.626, 1.627, 1.627, 1.628, 1.628, 1.629, 1.628, 1.628, 1.628, 1.628, 1.628, 1.627, 1.625, 1.623, 1.621, 1.621, 1.621, 1.622, 1.622, 1.622, 1.621, 1.619, 1.618, 1.618,
+ 1.618, 1.619, 1.622, 1.624, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.627, 1.627, 1.627, 1.626, 1.626, 1.626, 1.626, 1.626, 1.624, 1.622, 1.621, 1.621, 1.619, 1.621, 1.621, 1.621, 1.621, 1.618, 1.617, 1.617,
+ 1.616, 1.618, 1.621, 1.623, 1.624, 1.625, 1.625, 1.625, 1.625, 1.625, 1.626, 1.626, 1.627, 1.627, 1.625, 1.624, 1.624, 1.625, 1.626, 1.625, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.621, 1.621, 1.619, 1.616, 1.616, 1.616,
+ 1.615, 1.616, 1.619, 1.621, 1.623, 1.624, 1.625, 1.624, 1.624, 1.625, 1.626, 1.627, 1.627, 1.626, 1.626, 1.625, 1.624, 1.625, 1.625, 1.625, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.619, 1.619, 1.618, 1.616, 1.615, 1.614,
+ 1.614, 1.615, 1.616, 1.621, 1.621, 1.623, 1.624, 1.623, 1.624, 1.624, 1.625, 1.627, 1.627, 1.627, 1.626, 1.625, 1.625, 1.625, 1.625, 1.624, 1.622, 1.621, 1.619, 1.618, 1.617, 1.617, 1.617, 1.617, 1.616, 1.613, 1.612, 1.612,
+ 1.612, 1.612, 1.615, 1.617, 1.621, 1.621, 1.622, 1.622, 1.622, 1.624, 1.625, 1.626, 1.626, 1.626, 1.625, 1.624, 1.624, 1.624, 1.624, 1.623, 1.621, 1.619, 1.618, 1.616, 1.615, 1.615, 1.615, 1.615, 1.613, 1.611, 1.609, 1.609,
+ 1.611, 1.611, 1.612, 1.615, 1.618, 1.619, 1.621, 1.621, 1.622, 1.623, 1.624, 1.626, 1.626, 1.626, 1.625, 1.624, 1.624, 1.624, 1.623, 1.622, 1.621, 1.618, 1.617, 1.615, 1.615, 1.614, 1.614, 1.613, 1.611, 1.609, 1.609, 1.609,
+ 1.611, 1.611, 1.612, 1.615, 1.618, 1.619, 1.621, 1.622, 1.623, 1.625, 1.625, 1.627, 1.627, 1.627, 1.626, 1.626, 1.626, 1.626, 1.624, 1.622, 1.621, 1.618, 1.617, 1.617, 1.616, 1.615, 1.614, 1.613, 1.612, 1.609, 1.609, 1.609,
+ 1.612, 1.612, 1.614, 1.617, 1.619, 1.621, 1.623, 1.624, 1.625, 1.626, 1.627, 1.629, 1.631, 1.629, 1.629, 1.629, 1.628, 1.629, 1.628, 1.626, 1.624, 1.621, 1.621, 1.619, 1.619, 1.618, 1.616, 1.616, 1.613, 1.611, 1.612, 1.612
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.977, 2.794, 2.572, 2.375, 2.218, 2.098, 1.995, 1.903, 1.815, 1.731, 1.647, 1.571, 1.516, 1.493, 1.483, 1.481, 1.481, 1.481, 1.489, 1.511, 1.571, 1.643, 1.729, 1.813, 1.901, 1.993, 2.091, 2.208, 2.364, 2.563, 2.785, 2.971,
+ 2.951, 2.736, 2.512, 2.312, 2.153, 2.031, 1.926, 1.824, 1.736, 1.649, 1.571, 1.506, 1.456, 1.419, 1.396, 1.386, 1.386, 1.392, 1.414, 1.451, 1.505, 1.571, 1.648, 1.733, 1.824, 1.922, 2.025, 2.144, 2.301, 2.499, 2.725, 2.939,
+ 2.883, 2.701, 2.471, 2.266, 2.102, 1.974, 1.861, 1.753, 1.649, 1.571, 1.502, 1.425, 1.361, 1.322, 1.298, 1.286, 1.286, 1.294, 1.317, 1.359, 1.424, 1.501, 1.571, 1.648, 1.751, 1.857, 1.968, 2.095, 2.254, 2.458, 2.688, 2.872,
+ 2.788, 2.632, 2.408, 2.209, 2.056, 1.931, 1.816, 1.704, 1.598, 1.503, 1.425, 1.361, 1.322, 1.298, 1.269, 1.245, 1.243, 1.264, 1.293, 1.317, 1.359, 1.424, 1.501, 1.596, 1.702, 1.812, 1.924, 2.046, 2.197, 2.392, 2.619, 2.777,
+ 2.712, 2.541, 2.327, 2.155, 2.023, 1.908, 1.796, 1.684, 1.578, 1.488, 1.412, 1.351, 1.304, 1.269, 1.245, 1.235, 1.235, 1.243, 1.264, 1.301, 1.349, 1.411, 1.485, 1.577, 1.683, 1.791, 1.902, 2.016, 2.143, 2.312, 2.528, 2.702,
+ 2.678, 2.469, 2.269, 2.117, 1.998, 1.885, 1.773, 1.661, 1.556, 1.469, 1.397, 1.336, 1.277, 1.245, 1.234, 1.226, 1.226, 1.232, 1.244, 1.273, 1.332, 1.392, 1.465, 1.555, 1.659, 1.768, 1.879, 1.991, 2.109, 2.256, 2.454, 2.665,
+ 2.659, 2.433, 2.232, 2.081, 1.957, 1.841, 1.722, 1.606, 1.499, 1.409, 1.337, 1.277, 1.232, 1.198, 1.175, 1.166, 1.166, 1.172, 1.193, 1.228, 1.272, 1.334, 1.408, 1.499, 1.608, 1.717, 1.834, 1.951, 2.073, 2.222, 2.419, 2.648,
+ 2.624, 2.411, 2.204, 2.041, 1.909, 1.784, 1.661, 1.539, 1.431, 1.337, 1.277, 1.219, 1.159, 1.118, 1.096, 1.085, 1.085, 1.092, 1.114, 1.156, 1.219, 1.272, 1.337, 1.429, 1.539, 1.658, 1.779, 1.904, 2.033, 2.193, 2.397, 2.613,
+ 2.564, 2.377, 2.169, 2.012, 1.879, 1.749, 1.623, 1.501, 1.392, 1.299, 1.227, 1.169, 1.125, 1.097, 1.079, 1.063, 1.063, 1.076, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.501, 1.622, 1.746, 1.875, 2.005, 2.161, 2.362, 2.554,
+ 2.515, 2.325, 2.138, 1.997, 1.869, 1.742, 1.617, 1.501, 1.392, 1.299, 1.227, 1.169, 1.125, 1.095, 1.079, 1.063, 1.063, 1.076, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.499, 1.615, 1.741, 1.867, 1.991, 2.132, 2.316, 2.505,
+ 2.498, 2.289, 2.121, 1.988, 1.867, 1.741, 1.616, 1.499, 1.391, 1.299, 1.227, 1.169, 1.125, 1.095, 1.082, 1.065, 1.064, 1.079, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.498, 1.614, 1.738, 1.864, 1.985, 2.116, 2.281, 2.486,
+ 2.498, 2.272, 2.105, 1.971, 1.846, 1.718, 1.592, 1.475, 1.371, 1.279, 1.211, 1.156, 1.112, 1.083, 1.064, 1.055, 1.055, 1.062, 1.081, 1.109, 1.154, 1.212, 1.285, 1.372, 1.473, 1.589, 1.712, 1.843, 1.967, 2.101, 2.263, 2.486,
+ 2.497, 2.267, 2.088, 1.946, 1.813, 1.679, 1.549, 1.431, 1.324, 1.231, 1.159, 1.114, 1.079, 1.035, 1.008, 1.001, 1.001, 1.008, 1.032, 1.076, 1.111, 1.161, 1.235, 1.324, 1.429, 1.547, 1.677, 1.811, 1.941, 2.082, 2.257, 2.484,
+ 2.476, 2.262, 2.077, 1.933, 1.802, 1.671, 1.541, 1.421, 1.317, 1.227, 1.157, 1.101, 1.059, 1.027, 1.004, 1.001, 1.001, 1.004, 1.024, 1.054, 1.098, 1.157, 1.229, 1.317, 1.419, 1.537, 1.667, 1.799, 1.931, 2.071, 2.251, 2.463,
+ 2.455, 2.246, 2.076, 1.933, 1.802, 1.671, 1.541, 1.421, 1.317, 1.227, 1.157, 1.103, 1.064, 1.035, 1.011, 1.003, 1.003, 1.009, 1.032, 1.062, 1.099, 1.157, 1.229, 1.317, 1.419, 1.537, 1.667, 1.799, 1.931, 2.071, 2.236, 2.446,
+ 2.454, 2.239, 2.077, 1.946, 1.817, 1.686, 1.561, 1.444, 1.342, 1.255, 1.189, 1.136, 1.093, 1.059, 1.039, 1.038, 1.038, 1.039, 1.056, 1.091, 1.131, 1.187, 1.258, 1.341, 1.441, 1.556, 1.683, 1.813, 1.939, 2.071, 2.229, 2.445,
+ 2.454, 2.239, 2.079, 1.946, 1.817, 1.686, 1.561, 1.444, 1.342, 1.255, 1.189, 1.136, 1.093, 1.062, 1.039, 1.038, 1.038, 1.039, 1.059, 1.091, 1.131, 1.187, 1.258, 1.341, 1.441, 1.556, 1.683, 1.813, 1.939, 2.071, 2.229, 2.445,
+ 2.458, 2.251, 2.079, 1.941, 1.807, 1.672, 1.543, 1.424, 1.319, 1.231, 1.162, 1.107, 1.065, 1.045, 1.018, 1.003, 1.003, 1.017, 1.044, 1.062, 1.103, 1.159, 1.232, 1.317, 1.419, 1.539, 1.669, 1.802, 1.933, 2.072, 2.239, 2.445,
+ 2.479, 2.265, 2.085, 1.941, 1.807, 1.672, 1.543, 1.424, 1.319, 1.231, 1.162, 1.107, 1.064, 1.031, 1.017, 1.003, 1.003, 1.017, 1.031, 1.059, 1.103, 1.159, 1.232, 1.317, 1.419, 1.539, 1.669, 1.802, 1.933, 2.076, 2.252, 2.468,
+ 2.504, 2.277, 2.099, 1.958, 1.826, 1.695, 1.565, 1.445, 1.338, 1.249, 1.181, 1.129, 1.095, 1.051, 1.027, 1.018, 1.018, 1.028, 1.049, 1.092, 1.127, 1.179, 1.252, 1.339, 1.442, 1.561, 1.691, 1.822, 1.949, 2.089, 2.263, 2.492,
+ 2.509, 2.288, 2.118, 1.982, 1.858, 1.728, 1.604, 1.486, 1.381, 1.293, 1.227, 1.173, 1.127, 1.098, 1.076, 1.067, 1.067, 1.077, 1.097, 1.121, 1.168, 1.225, 1.296, 1.382, 1.483, 1.598, 1.723, 1.852, 1.975, 2.107, 2.274, 2.496,
+ 2.515, 2.312, 2.139, 2.002, 1.877, 1.751, 1.629, 1.512, 1.405, 1.318, 1.248, 1.193, 1.149, 1.118, 1.096, 1.085, 1.085, 1.095, 1.114, 1.145, 1.188, 1.246, 1.319, 1.405, 1.508, 1.623, 1.747, 1.873, 1.995, 2.127, 2.297, 2.501,
+ 2.541, 2.351, 2.161, 2.016, 1.888, 1.762, 1.638, 1.519, 1.411, 1.319, 1.251, 1.197, 1.154, 1.121, 1.099, 1.091, 1.091, 1.099, 1.119, 1.148, 1.192, 1.248, 1.321, 1.411, 1.515, 1.633, 1.758, 1.884, 2.009, 2.149, 2.334, 2.526,
+ 2.588, 2.394, 2.193, 2.036, 1.905, 1.779, 1.656, 1.537, 1.426, 1.329, 1.255, 1.198, 1.161, 1.139, 1.118, 1.096, 1.095, 1.114, 1.138, 1.158, 1.195, 1.256, 1.333, 1.425, 1.533, 1.651, 1.777, 1.902, 2.028, 2.181, 2.378, 2.571,
+ 2.639, 2.431, 2.226, 2.067, 1.937, 1.816, 1.695, 1.577, 1.467, 1.368, 1.298, 1.253, 1.198, 1.161, 1.139, 1.129, 1.129, 1.138, 1.158, 1.195, 1.245, 1.296, 1.374, 1.468, 1.574, 1.692, 1.812, 1.934, 2.059, 2.216, 2.418, 2.626,
+ 2.679, 2.465, 2.261, 2.104, 1.979, 1.862, 1.746, 1.631, 1.522, 1.426, 1.352, 1.297, 1.254, 1.221, 1.201, 1.189, 1.189, 1.198, 1.217, 1.246, 1.293, 1.354, 1.433, 1.526, 1.631, 1.744, 1.859, 1.975, 2.097, 2.252, 2.452, 2.667,
+ 2.711, 2.511, 2.302, 2.141, 2.018, 1.903, 1.791, 1.678, 1.571, 1.475, 1.401, 1.343, 1.297, 1.268, 1.247, 1.236, 1.236, 1.244, 1.263, 1.291, 1.341, 1.403, 1.484, 1.575, 1.679, 1.791, 1.902, 2.012, 2.136, 2.295, 2.501, 2.698,
+ 2.759, 2.582, 2.363, 2.184, 2.049, 1.935, 1.824, 1.714, 1.608, 1.511, 1.431, 1.371, 1.325, 1.295, 1.271, 1.259, 1.259, 1.266, 1.291, 1.318, 1.369, 1.436, 1.517, 1.611, 1.716, 1.825, 1.933, 2.047, 2.179, 2.351, 2.571, 2.748,
+ 2.833, 2.662, 2.433, 2.239, 2.089, 1.968, 1.859, 1.752, 1.646, 1.549, 1.468, 1.411, 1.369, 1.325, 1.296, 1.283, 1.283, 1.292, 1.318, 1.366, 1.411, 1.472, 1.555, 1.651, 1.755, 1.861, 1.969, 2.086, 2.231, 2.422, 2.648, 2.821,
+ 2.909, 2.729, 2.499, 2.298, 2.141, 2.016, 1.907, 1.805, 1.703, 1.611, 1.539, 1.468, 1.411, 1.375, 1.351, 1.339, 1.339, 1.348, 1.372, 1.411, 1.472, 1.543, 1.613, 1.708, 1.807, 1.909, 2.014, 2.135, 2.288, 2.487, 2.716, 2.897,
+ 2.981, 2.789, 2.563, 2.358, 2.197, 2.071, 1.968, 1.868, 1.774, 1.684, 1.607, 1.541, 1.489, 1.453, 1.428, 1.417, 1.417, 1.427, 1.451, 1.489, 1.543, 1.611, 1.686, 1.776, 1.871, 1.966, 2.069, 2.191, 2.349, 2.551, 2.775, 2.964,
+ 3.041, 2.856, 2.629, 2.422, 2.252, 2.127, 2.021, 1.927, 1.834, 1.748, 1.672, 1.604, 1.541, 1.495, 1.483, 1.483, 1.483, 1.483, 1.496, 1.543, 1.608, 1.673, 1.749, 1.835, 1.926, 2.019, 2.122, 2.249, 2.411, 2.614, 2.839, 3.026
+ ],
+ "sigma": 0.00163,
+ "sigma_Cb": 0.0011
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2964,
+ "ccm":
+ [
+ 1.72129, -0.45961, -0.26169,
+ -0.30042, 1.56924, -0.26882,
+ 0.15133, -1.13293, 1.98161
+ ]
+ },
+ {
+ "ct": 3610,
+ "ccm":
+ [
+ 1.54474, -0.35082, -0.19391,
+ -0.36989, 1.67926, -0.30936,
+ -0.00524, -0.55197, 1.55722
+ ]
+ },
+ {
+ "ct": 4640,
+ "ccm":
+ [
+ 1.52972, -0.35168, -0.17804,
+ -0.28309, 1.67098, -0.38788,
+ 0.01695, -0.57209, 1.55515
+ ]
+ },
+ {
+ "ct": 5910,
+ "ccm":
+ [
+ 1.56879, -0.42159, -0.14719,
+ -0.27275, 1.59354, -0.32079,
+ -0.02862, -0.40662, 1.43525
+ ]
+ },
+ {
+ "ct": 7590,
+ "ccm":
+ [
+ 1.41424, -0.21092, -0.20332,
+ -0.17646, 1.71734, -0.54087,
+ 0.01297, -0.63111, 1.61814
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.af":
+ {
+ "ranges":
+ {
+ "normal":
+ {
+ "min": 0.0,
+ "max": 12.0,
+ "default": 1.0
+ },
+ "macro":
+ {
+ "min": 3.0,
+ "max": 15.0,
+ "default": 4.0
+ }
+ },
+ "speeds":
+ {
+ "normal":
+ {
+ "step_coarse": 1.0,
+ "step_fine": 0.25,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.02,
+ "pdaf_squelch": 0.125,
+ "max_slew": 2.0,
+ "pdaf_frames": 20,
+ "dropout_frames": 6,
+ "step_frames": 4
+ }
+ },
+ "conf_epsilon": 8,
+ "conf_thresh": 16,
+ "conf_clip": 512,
+ "skip_frames": 5,
+ "map": [ 0.0, 445, 15.0, 925 ]
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "strength": 1.0,
+ "lut_rx":
+ [
+ -0.21, -0.12, -0.06, -0.04, -0.03, -0.0, 0.02, 0.08, 0.21,
+ -0.2, -0.12, -0.07, -0.05, -0.01, 0.02, 0.02, 0.06, 0.19,
+ -0.18, -0.12, -0.09, -0.07, -0.01, 0.03, 0.03, 0.04, 0.13,
+ -0.15, -0.11, -0.1, -0.09, -0.01, 0.04, 0.04, 0.04, 0.09,
+ -0.15, -0.11, -0.1, -0.09, -0.02, 0.05, 0.05, 0.05, 0.08,
+ -0.16, -0.11, -0.08, -0.07, -0.02, 0.05, 0.06, 0.07, 0.1,
+ -0.18, -0.1, -0.07, -0.05, -0.01, 0.03, 0.05, 0.08, 0.15,
+ -0.21, -0.11, -0.06, -0.04, -0.01, 0.02, 0.04, 0.09, 0.22,
+ -0.23, -0.14, -0.05, -0.03, -0.01, 0.01, 0.03, 0.1, 0.23
+ ],
+ "lut_ry":
+ [
+ -0.13, -0.08, -0.06, -0.08, -0.08, -0.06, -0.04, -0.06, -0.08,
+ -0.09, -0.05, -0.05, -0.09, -0.1, -0.08, -0.05, -0.04, -0.06,
+ -0.04, -0.05, -0.06, -0.1, -0.13, -0.1, -0.06, -0.04, -0.02,
+ -0.03, -0.04, -0.06, -0.09, -0.11, -0.1, -0.06, -0.03, 0.01,
+ -0.01, -0.01, -0.03, -0.03, -0.03, -0.04, -0.03, -0.01, 0.02,
+ 0.03, 0.01, -0.01, 0.0, 0.01, 0.01, -0.0, 0.01, 0.03,
+ 0.05, 0.02, 0.01, 0.02, 0.03, 0.02, 0.01, 0.03, 0.07,
+ 0.08, 0.03, 0.01, 0.01, 0.02, 0.02, 0.02, 0.05, 0.12,
+ 0.11, 0.07, 0.01, 0.0, -0.0, 0.01, 0.03, 0.07, 0.14
+ ],
+ "lut_bx":
+ [
+ 0.27, 0.13, 0.03, -0.01, -0.01, -0.0, -0.04, -0.11, -0.29,
+ 0.23, 0.1, 0.02, -0.01, -0.02, -0.01, -0.03, -0.1, -0.28,
+ 0.22, 0.08, 0.0, -0.01, -0.02, -0.02, -0.02, -0.08, -0.25,
+ 0.2, 0.08, 0.01, 0.0, -0.01, -0.02, -0.01, -0.07, -0.22,
+ 0.19, 0.08, 0.01, 0.0, -0.01, -0.02, -0.02, -0.06, -0.21,
+ 0.2, 0.08, 0.01, 0.0, -0.01, -0.02, -0.02, -0.07, -0.22,
+ 0.21, 0.09, 0.01, -0.01, -0.02, -0.02, -0.03, -0.09, -0.26,
+ 0.21, 0.11, 0.02, -0.01, -0.01, -0.02, -0.04, -0.11, -0.28,
+ 0.23, 0.13, 0.04, -0.01, -0.01, -0.01, -0.06, -0.13, -0.31
+ ],
+ "lut_by":
+ [
+ 0.17, 0.11, 0.07, 0.05, 0.04, 0.05, 0.07, 0.12, 0.19,
+ 0.11, 0.06, 0.04, 0.04, 0.04, 0.03, 0.04, 0.06, 0.13,
+ 0.06, 0.03, 0.02, 0.04, 0.05, 0.04, 0.03, 0.03, 0.06,
+ 0.02, 0.02, 0.03, 0.04, 0.06, 0.05, 0.03, 0.02, 0.01,
+ -0.0, 0.01, 0.03, 0.04, 0.04, 0.04, 0.02, -0.0, -0.03,
+ -0.04, -0.01, 0.02, 0.02, 0.02, 0.02, 0.01, -0.02, -0.09,
+ -0.08, -0.01, 0.04, 0.06, 0.06, 0.05, 0.03, -0.03, -0.14,
+ -0.1, -0.04, 0.04, 0.08, 0.08, 0.06, 0.02, -0.05, -0.18,
+ -0.15, -0.08, 0.02, 0.09, 0.11, 0.08, 0.01, -0.09, -0.22
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx708_noir.json b/src/ipa/rpi/pisp/data/imx708_noir.json
new file mode 100644
index 00000000..e69afb0c
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx708_noir.json
@@ -0,0 +1,1233 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 20716,
+ "reference_gain": 1.12,
+ "reference_aperture": 1.0,
+ "reference_lux": 810,
+ "reference_Y": 13994
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 1.856
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 221,
+ "slope": 0.00226
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.532, 1.534, 1.535, 1.538, 1.538, 1.533, 1.529, 1.515, 1.506, 1.492, 1.477, 1.465, 1.453, 1.444, 1.437, 1.433, 1.433, 1.435, 1.441, 1.449, 1.461, 1.474, 1.485, 1.499, 1.511, 1.519, 1.525, 1.526, 1.526, 1.523, 1.517, 1.516,
+ 1.532, 1.534, 1.537, 1.538, 1.537, 1.534, 1.525, 1.515, 1.502, 1.486, 1.474, 1.458, 1.449, 1.438, 1.429, 1.427, 1.426, 1.429, 1.436, 1.444, 1.456, 1.468, 1.483, 1.497, 1.509, 1.518, 1.524, 1.526, 1.526, 1.523, 1.521, 1.516,
+ 1.532, 1.534, 1.537, 1.538, 1.536, 1.533, 1.524, 1.512, 1.499, 1.483, 1.468, 1.453, 1.439, 1.429, 1.421, 1.419, 1.419, 1.419, 1.427, 1.438, 1.451, 1.464, 1.479, 1.494, 1.506, 1.516, 1.523, 1.526, 1.526, 1.524, 1.521, 1.518,
+ 1.533, 1.536, 1.537, 1.537, 1.535, 1.532, 1.521, 1.507, 1.491, 1.474, 1.456, 1.441, 1.429, 1.418, 1.409, 1.406, 1.406, 1.408, 1.415, 1.426, 1.439, 1.453, 1.471, 1.485, 1.501, 1.511, 1.522, 1.524, 1.526, 1.525, 1.522, 1.519,
+ 1.537, 1.538, 1.539, 1.538, 1.534, 1.525, 1.513, 1.495, 1.477, 1.459, 1.443, 1.427, 1.413, 1.402, 1.394, 1.391, 1.391, 1.393, 1.399, 1.409, 1.424, 1.439, 1.455, 1.472, 1.489, 1.503, 1.515, 1.523, 1.526, 1.527, 1.525, 1.523,
+ 1.538, 1.539, 1.541, 1.539, 1.531, 1.519, 1.503, 1.484, 1.466, 1.445, 1.427, 1.413, 1.401, 1.386, 1.378, 1.373, 1.373, 1.376, 1.386, 1.398, 1.409, 1.424, 1.441, 1.459, 1.477, 1.495, 1.509, 1.519, 1.526, 1.528, 1.528, 1.526,
+ 1.539, 1.541, 1.541, 1.539, 1.529, 1.516, 1.498, 1.479, 1.456, 1.437, 1.417, 1.401, 1.386, 1.378, 1.369, 1.363, 1.363, 1.367, 1.376, 1.386, 1.399, 1.413, 1.432, 1.451, 1.472, 1.491, 1.507, 1.517, 1.525, 1.527, 1.527, 1.527,
+ 1.539, 1.539, 1.539, 1.538, 1.529, 1.515, 1.497, 1.476, 1.454, 1.433, 1.411, 1.395, 1.381, 1.368, 1.361, 1.356, 1.356, 1.359, 1.367, 1.379, 1.393, 1.409, 1.428, 1.448, 1.471, 1.489, 1.505, 1.516, 1.524, 1.527, 1.527, 1.527,
+ 1.539, 1.539, 1.539, 1.537, 1.528, 1.513, 1.493, 1.471, 1.449, 1.426, 1.406, 1.387, 1.373, 1.361, 1.352, 1.348, 1.348, 1.351, 1.359, 1.372, 1.387, 1.403, 1.422, 1.443, 1.465, 1.484, 1.503, 1.516, 1.525, 1.527, 1.528, 1.526,
+ 1.541, 1.542, 1.539, 1.537, 1.524, 1.506, 1.485, 1.461, 1.438, 1.416, 1.395, 1.377, 1.362, 1.352, 1.344, 1.339, 1.339, 1.342, 1.351, 1.362, 1.376, 1.393, 1.412, 1.434, 1.455, 1.477, 1.495, 1.514, 1.524, 1.528, 1.529, 1.529,
+ 1.543, 1.544, 1.543, 1.534, 1.518, 1.499, 1.476, 1.452, 1.427, 1.405, 1.386, 1.367, 1.354, 1.344, 1.338, 1.329, 1.329, 1.335, 1.342, 1.352, 1.367, 1.382, 1.402, 1.424, 1.445, 1.469, 1.491, 1.507, 1.522, 1.528, 1.529, 1.532,
+ 1.544, 1.544, 1.542, 1.534, 1.518, 1.499, 1.474, 1.449, 1.425, 1.401, 1.379, 1.362, 1.348, 1.338, 1.329, 1.324, 1.325, 1.329, 1.335, 1.347, 1.361, 1.378, 1.397, 1.421, 1.443, 1.467, 1.489, 1.507, 1.521, 1.529, 1.532, 1.533,
+ 1.543, 1.543, 1.541, 1.534, 1.519, 1.499, 1.474, 1.448, 1.424, 1.399, 1.377, 1.359, 1.346, 1.333, 1.324, 1.322, 1.321, 1.324, 1.332, 1.344, 1.359, 1.376, 1.397, 1.419, 1.443, 1.467, 1.489, 1.508, 1.521, 1.528, 1.531, 1.532,
+ 1.543, 1.542, 1.541, 1.533, 1.519, 1.499, 1.474, 1.448, 1.422, 1.399, 1.376, 1.358, 1.344, 1.331, 1.322, 1.319, 1.319, 1.321, 1.331, 1.342, 1.357, 1.375, 1.396, 1.419, 1.443, 1.467, 1.489, 1.508, 1.521, 1.529, 1.531, 1.532,
+ 1.543, 1.542, 1.541, 1.532, 1.518, 1.496, 1.471, 1.445, 1.418, 1.393, 1.373, 1.354, 1.341, 1.329, 1.319, 1.317, 1.316, 1.319, 1.327, 1.338, 1.353, 1.371, 1.392, 1.415, 1.439, 1.465, 1.485, 1.507, 1.519, 1.529, 1.531, 1.531,
+ 1.545, 1.544, 1.542, 1.531, 1.515, 1.493, 1.467, 1.441, 1.414, 1.391, 1.369, 1.351, 1.337, 1.326, 1.318, 1.314, 1.314, 1.317, 1.325, 1.335, 1.351, 1.367, 1.388, 1.411, 1.436, 1.461, 1.483, 1.505, 1.519, 1.531, 1.533, 1.533,
+ 1.545, 1.544, 1.541, 1.531, 1.515, 1.493, 1.467, 1.441, 1.414, 1.391, 1.369, 1.351, 1.337, 1.326, 1.318, 1.314, 1.314, 1.317, 1.325, 1.335, 1.351, 1.367, 1.388, 1.411, 1.436, 1.461, 1.483, 1.505, 1.521, 1.531, 1.534, 1.534,
+ 1.545, 1.544, 1.541, 1.534, 1.519, 1.496, 1.471, 1.446, 1.419, 1.392, 1.372, 1.354, 1.338, 1.328, 1.319, 1.316, 1.315, 1.319, 1.327, 1.338, 1.353, 1.371, 1.392, 1.416, 1.441, 1.465, 1.489, 1.511, 1.522, 1.531, 1.534, 1.535,
+ 1.544, 1.544, 1.542, 1.537, 1.524, 1.501, 1.476, 1.449, 1.424, 1.399, 1.377, 1.359, 1.344, 1.332, 1.324, 1.319, 1.319, 1.323, 1.331, 1.343, 1.358, 1.374, 1.396, 1.419, 1.445, 1.471, 1.493, 1.512, 1.525, 1.532, 1.534, 1.534,
+ 1.545, 1.545, 1.543, 1.538, 1.524, 1.503, 1.479, 1.452, 1.426, 1.402, 1.381, 1.362, 1.348, 1.337, 1.329, 1.324, 1.324, 1.328, 1.335, 1.347, 1.361, 1.379, 1.399, 1.423, 1.447, 1.471, 1.493, 1.513, 1.526, 1.533, 1.534, 1.535,
+ 1.546, 1.546, 1.544, 1.539, 1.525, 1.504, 1.479, 1.453, 1.428, 1.404, 1.383, 1.365, 1.352, 1.339, 1.333, 1.329, 1.329, 1.333, 1.339, 1.349, 1.363, 1.381, 1.402, 1.424, 1.448, 1.472, 1.494, 1.514, 1.526, 1.534, 1.534, 1.534,
+ 1.546, 1.546, 1.544, 1.539, 1.526, 1.505, 1.483, 1.457, 1.432, 1.407, 1.389, 1.371, 1.357, 1.347, 1.339, 1.333, 1.333, 1.339, 1.345, 1.354, 1.368, 1.386, 1.406, 1.428, 1.453, 1.475, 1.496, 1.515, 1.527, 1.535, 1.535, 1.535,
+ 1.545, 1.545, 1.545, 1.541, 1.529, 1.513, 1.491, 1.467, 1.441, 1.418, 1.399, 1.379, 1.366, 1.355, 1.347, 1.341, 1.341, 1.345, 1.354, 1.364, 1.378, 1.395, 1.415, 1.436, 1.459, 1.483, 1.503, 1.519, 1.531, 1.534, 1.535, 1.534,
+ 1.544, 1.545, 1.545, 1.544, 1.535, 1.519, 1.499, 1.476, 1.451, 1.428, 1.409, 1.391, 1.377, 1.366, 1.356, 1.352, 1.352, 1.355, 1.364, 1.374, 1.388, 1.405, 1.426, 1.447, 1.469, 1.492, 1.509, 1.523, 1.532, 1.535, 1.535, 1.533,
+ 1.544, 1.545, 1.546, 1.545, 1.537, 1.523, 1.504, 1.482, 1.458, 1.436, 1.418, 1.401, 1.385, 1.377, 1.367, 1.362, 1.362, 1.365, 1.373, 1.385, 1.398, 1.415, 1.434, 1.455, 1.477, 1.495, 1.514, 1.525, 1.533, 1.536, 1.535, 1.533,
+ 1.545, 1.546, 1.547, 1.545, 1.538, 1.525, 1.508, 1.486, 1.465, 1.444, 1.424, 1.408, 1.394, 1.385, 1.377, 1.371, 1.371, 1.373, 1.384, 1.392, 1.405, 1.421, 1.441, 1.459, 1.481, 1.499, 1.516, 1.528, 1.534, 1.536, 1.536, 1.533,
+ 1.544, 1.546, 1.547, 1.547, 1.541, 1.531, 1.514, 1.494, 1.474, 1.454, 1.434, 1.421, 1.408, 1.394, 1.386, 1.382, 1.382, 1.385, 1.392, 1.405, 1.416, 1.432, 1.449, 1.468, 1.488, 1.505, 1.519, 1.531, 1.536, 1.537, 1.536, 1.533,
+ 1.544, 1.546, 1.548, 1.548, 1.545, 1.536, 1.522, 1.506, 1.486, 1.467, 1.451, 1.434, 1.421, 1.408, 1.401, 1.396, 1.396, 1.399, 1.407, 1.416, 1.431, 1.447, 1.463, 1.481, 1.499, 1.513, 1.526, 1.534, 1.537, 1.537, 1.534, 1.531,
+ 1.543, 1.545, 1.547, 1.549, 1.549, 1.543, 1.531, 1.517, 1.501, 1.483, 1.465, 1.451, 1.438, 1.425, 1.417, 1.412, 1.412, 1.418, 1.423, 1.433, 1.447, 1.462, 1.479, 1.493, 1.511, 1.524, 1.531, 1.536, 1.538, 1.537, 1.533, 1.531,
+ 1.542, 1.545, 1.548, 1.551, 1.551, 1.546, 1.539, 1.524, 1.511, 1.493, 1.479, 1.464, 1.451, 1.442, 1.433, 1.429, 1.429, 1.434, 1.439, 1.449, 1.462, 1.474, 1.491, 1.505, 1.519, 1.529, 1.536, 1.539, 1.539, 1.537, 1.533, 1.531,
+ 1.541, 1.546, 1.549, 1.552, 1.553, 1.551, 1.544, 1.533, 1.521, 1.505, 1.489, 1.477, 1.464, 1.455, 1.447, 1.443, 1.443, 1.446, 1.451, 1.462, 1.472, 1.487, 1.499, 1.514, 1.525, 1.535, 1.541, 1.541, 1.541, 1.539, 1.533, 1.531,
+ 1.541, 1.546, 1.549, 1.553, 1.554, 1.552, 1.546, 1.537, 1.524, 1.512, 1.499, 1.485, 1.474, 1.464, 1.455, 1.451, 1.451, 1.452, 1.461, 1.469, 1.481, 1.495, 1.506, 1.518, 1.529, 1.539, 1.541, 1.542, 1.541, 1.539, 1.533, 1.529
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 2.586, 2.591, 2.597, 2.601, 2.601, 2.599, 2.592, 2.576, 2.561, 2.541, 2.523, 2.503, 2.486, 2.471, 2.459, 2.452, 2.452, 2.454, 2.462, 2.478, 2.495, 2.512, 2.531, 2.555, 2.568, 2.579, 2.587, 2.588, 2.585, 2.579, 2.573, 2.566,
+ 2.587, 2.592, 2.598, 2.601, 2.601, 2.599, 2.587, 2.574, 2.556, 2.532, 2.512, 2.491, 2.474, 2.462, 2.449, 2.443, 2.439, 2.443, 2.454, 2.464, 2.485, 2.505, 2.525, 2.548, 2.566, 2.578, 2.585, 2.588, 2.586, 2.579, 2.575, 2.567,
+ 2.587, 2.593, 2.598, 2.602, 2.601, 2.597, 2.584, 2.569, 2.551, 2.527, 2.503, 2.482, 2.464, 2.448, 2.434, 2.428, 2.427, 2.431, 2.439, 2.455, 2.474, 2.498, 2.521, 2.541, 2.564, 2.577, 2.585, 2.588, 2.589, 2.581, 2.576, 2.569,
+ 2.593, 2.596, 2.601, 2.603, 2.601, 2.594, 2.583, 2.563, 2.539, 2.514, 2.491, 2.466, 2.445, 2.429, 2.417, 2.409, 2.408, 2.411, 2.421, 2.437, 2.457, 2.481, 2.507, 2.531, 2.555, 2.572, 2.583, 2.588, 2.588, 2.585, 2.579, 2.575,
+ 2.597, 2.599, 2.604, 2.603, 2.599, 2.587, 2.567, 2.548, 2.522, 2.493, 2.467, 2.443, 2.419, 2.406, 2.391, 2.385, 2.385, 2.387, 2.397, 2.413, 2.435, 2.459, 2.486, 2.509, 2.538, 2.559, 2.574, 2.586, 2.588, 2.586, 2.582, 2.579,
+ 2.601, 2.603, 2.606, 2.604, 2.596, 2.578, 2.556, 2.531, 2.501, 2.471, 2.444, 2.419, 2.402, 2.381, 2.365, 2.359, 2.359, 2.361, 2.374, 2.396, 2.413, 2.435, 2.465, 2.493, 2.517, 2.542, 2.562, 2.582, 2.588, 2.587, 2.586, 2.584,
+ 2.601, 2.604, 2.605, 2.604, 2.593, 2.575, 2.547, 2.522, 2.488, 2.458, 2.432, 2.402, 2.381, 2.364, 2.349, 2.338, 2.338, 2.345, 2.359, 2.374, 2.396, 2.423, 2.453, 2.481, 2.511, 2.539, 2.561, 2.581, 2.586, 2.588, 2.588, 2.586,
+ 2.599, 2.602, 2.604, 2.602, 2.592, 2.572, 2.546, 2.516, 2.485, 2.451, 2.422, 2.393, 2.368, 2.349, 2.336, 2.328, 2.328, 2.333, 2.345, 2.365, 2.389, 2.417, 2.447, 2.478, 2.509, 2.537, 2.561, 2.577, 2.585, 2.588, 2.588, 2.587,
+ 2.601, 2.602, 2.604, 2.601, 2.589, 2.569, 2.539, 2.509, 2.473, 2.442, 2.409, 2.379, 2.357, 2.336, 2.323, 2.315, 2.315, 2.322, 2.334, 2.354, 2.377, 2.406, 2.436, 2.469, 2.503, 2.529, 2.558, 2.574, 2.585, 2.588, 2.589, 2.587,
+ 2.601, 2.606, 2.606, 2.601, 2.581, 2.557, 2.525, 2.493, 2.459, 2.426, 2.394, 2.365, 2.339, 2.322, 2.308, 2.301, 2.301, 2.305, 2.322, 2.337, 2.361, 2.389, 2.422, 2.454, 2.485, 2.519, 2.546, 2.568, 2.584, 2.589, 2.589, 2.589,
+ 2.608, 2.608, 2.606, 2.597, 2.576, 2.548, 2.515, 2.481, 2.444, 2.409, 2.376, 2.346, 2.323, 2.308, 2.293, 2.282, 2.281, 2.291, 2.305, 2.322, 2.348, 2.371, 2.403, 2.439, 2.472, 2.508, 2.538, 2.565, 2.582, 2.589, 2.592, 2.593,
+ 2.608, 2.608, 2.605, 2.596, 2.575, 2.547, 2.511, 2.474, 2.435, 2.401, 2.366, 2.339, 2.312, 2.293, 2.281, 2.274, 2.274, 2.281, 2.291, 2.311, 2.334, 2.364, 2.399, 2.433, 2.471, 2.506, 2.538, 2.564, 2.581, 2.591, 2.594, 2.595,
+ 2.605, 2.606, 2.605, 2.595, 2.575, 2.547, 2.511, 2.474, 2.433, 2.397, 2.363, 2.333, 2.309, 2.291, 2.274, 2.267, 2.265, 2.272, 2.284, 2.307, 2.331, 2.361, 2.395, 2.431, 2.469, 2.503, 2.539, 2.567, 2.584, 2.591, 2.595, 2.595,
+ 2.605, 2.606, 2.605, 2.595, 2.575, 2.547, 2.509, 2.473, 2.431, 2.395, 2.361, 2.332, 2.306, 2.285, 2.267, 2.261, 2.262, 2.265, 2.281, 2.302, 2.329, 2.359, 2.395, 2.429, 2.468, 2.503, 2.539, 2.567, 2.583, 2.593, 2.595, 2.595,
+ 2.608, 2.607, 2.606, 2.592, 2.572, 2.543, 2.506, 2.468, 2.426, 2.389, 2.354, 2.327, 2.299, 2.279, 2.262, 2.258, 2.257, 2.262, 2.276, 2.297, 2.321, 2.352, 2.387, 2.425, 2.464, 2.498, 2.532, 2.565, 2.582, 2.592, 2.595, 2.596,
+ 2.611, 2.609, 2.605, 2.592, 2.571, 2.538, 2.499, 2.463, 2.421, 2.384, 2.351, 2.322, 2.295, 2.276, 2.259, 2.254, 2.254, 2.256, 2.273, 2.292, 2.318, 2.347, 2.383, 2.418, 2.456, 2.491, 2.529, 2.562, 2.581, 2.593, 2.597, 2.598,
+ 2.609, 2.609, 2.606, 2.593, 2.571, 2.538, 2.499, 2.463, 2.421, 2.384, 2.351, 2.321, 2.295, 2.276, 2.259, 2.251, 2.251, 2.256, 2.273, 2.292, 2.318, 2.347, 2.383, 2.418, 2.456, 2.491, 2.529, 2.559, 2.582, 2.595, 2.597, 2.599,
+ 2.609, 2.609, 2.607, 2.597, 2.576, 2.543, 2.507, 2.467, 2.427, 2.388, 2.356, 2.323, 2.297, 2.278, 2.262, 2.256, 2.255, 2.262, 2.275, 2.296, 2.321, 2.351, 2.388, 2.425, 2.464, 2.502, 2.534, 2.563, 2.586, 2.595, 2.598, 2.599,
+ 2.609, 2.609, 2.608, 2.601, 2.581, 2.547, 2.513, 2.475, 2.434, 2.398, 2.362, 2.332, 2.307, 2.287, 2.269, 2.263, 2.263, 2.269, 2.281, 2.304, 2.328, 2.358, 2.394, 2.429, 2.469, 2.508, 2.538, 2.568, 2.589, 2.597, 2.598, 2.598,
+ 2.609, 2.611, 2.609, 2.601, 2.583, 2.549, 2.518, 2.478, 2.439, 2.402, 2.367, 2.337, 2.313, 2.293, 2.279, 2.271, 2.269, 2.277, 2.291, 2.311, 2.336, 2.363, 2.399, 2.435, 2.473, 2.509, 2.541, 2.571, 2.591, 2.598, 2.599, 2.599,
+ 2.611, 2.611, 2.609, 2.602, 2.585, 2.551, 2.519, 2.481, 2.442, 2.406, 2.374, 2.342, 2.318, 2.297, 2.287, 2.279, 2.278, 2.287, 2.297, 2.315, 2.339, 2.368, 2.402, 2.438, 2.476, 2.511, 2.545, 2.571, 2.591, 2.599, 2.601, 2.599,
+ 2.611, 2.611, 2.609, 2.604, 2.587, 2.557, 2.521, 2.485, 2.447, 2.412, 2.379, 2.352, 2.328, 2.309, 2.297, 2.288, 2.287, 2.297, 2.308, 2.327, 2.349, 2.377, 2.408, 2.446, 2.481, 2.517, 2.547, 2.573, 2.591, 2.599, 2.601, 2.599,
+ 2.608, 2.609, 2.609, 2.606, 2.592, 2.564, 2.533, 2.498, 2.462, 2.427, 2.394, 2.364, 2.343, 2.326, 2.309, 2.302, 2.302, 2.308, 2.324, 2.341, 2.362, 2.391, 2.425, 2.458, 2.494, 2.526, 2.555, 2.584, 2.593, 2.599, 2.599, 2.599,
+ 2.608, 2.609, 2.609, 2.609, 2.597, 2.574, 2.547, 2.511, 2.475, 2.438, 2.411, 2.381, 2.359, 2.342, 2.327, 2.318, 2.318, 2.325, 2.341, 2.358, 2.377, 2.404, 2.439, 2.469, 2.507, 2.537, 2.564, 2.587, 2.596, 2.598, 2.598, 2.597,
+ 2.609, 2.609, 2.611, 2.609, 2.599, 2.579, 2.551, 2.519, 2.486, 2.453, 2.425, 2.397, 2.375, 2.358, 2.345, 2.336, 2.336, 2.341, 2.355, 2.372, 2.393, 2.419, 2.452, 2.481, 2.516, 2.542, 2.571, 2.591, 2.597, 2.599, 2.598, 2.595,
+ 2.607, 2.611, 2.613, 2.611, 2.605, 2.586, 2.561, 2.529, 2.495, 2.462, 2.435, 2.409, 2.387, 2.374, 2.359, 2.351, 2.351, 2.356, 2.372, 2.385, 2.406, 2.431, 2.462, 2.488, 2.524, 2.551, 2.573, 2.591, 2.598, 2.599, 2.598, 2.596,
+ 2.606, 2.609, 2.613, 2.613, 2.607, 2.591, 2.565, 2.539, 2.507, 2.477, 2.449, 2.425, 2.409, 2.387, 2.376, 2.369, 2.369, 2.374, 2.385, 2.406, 2.422, 2.446, 2.473, 2.502, 2.534, 2.557, 2.578, 2.595, 2.599, 2.601, 2.598, 2.595,
+ 2.606, 2.611, 2.613, 2.614, 2.611, 2.598, 2.581, 2.553, 2.523, 2.496, 2.471, 2.449, 2.425, 2.409, 2.398, 2.391, 2.391, 2.395, 2.408, 2.422, 2.445, 2.468, 2.493, 2.522, 2.549, 2.569, 2.589, 2.601, 2.603, 2.602, 2.596, 2.593,
+ 2.605, 2.609, 2.613, 2.616, 2.614, 2.607, 2.591, 2.571, 2.545, 2.518, 2.494, 2.471, 2.452, 2.435, 2.423, 2.417, 2.417, 2.421, 2.431, 2.449, 2.467, 2.493, 2.516, 2.542, 2.566, 2.585, 2.596, 2.606, 2.605, 2.602, 2.595, 2.593,
+ 2.604, 2.608, 2.616, 2.617, 2.618, 2.613, 2.602, 2.584, 2.559, 2.536, 2.514, 2.493, 2.476, 2.459, 2.445, 2.439, 2.439, 2.445, 2.456, 2.471, 2.493, 2.511, 2.534, 2.559, 2.579, 2.592, 2.607, 2.608, 2.607, 2.604, 2.595, 2.592,
+ 2.603, 2.609, 2.615, 2.619, 2.623, 2.619, 2.608, 2.594, 2.573, 2.551, 2.532, 2.512, 2.493, 2.477, 2.468, 2.462, 2.462, 2.468, 2.476, 2.494, 2.509, 2.528, 2.551, 2.574, 2.589, 2.604, 2.611, 2.611, 2.611, 2.604, 2.598, 2.592,
+ 2.602, 2.607, 2.613, 2.621, 2.624, 2.621, 2.617, 2.601, 2.585, 2.567, 2.544, 2.521, 2.507, 2.493, 2.478, 2.474, 2.475, 2.477, 2.489, 2.505, 2.523, 2.544, 2.563, 2.584, 2.598, 2.609, 2.612, 2.613, 2.613, 2.608, 2.599, 2.591
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.263, 3.263, 3.264, 3.269, 3.274, 3.275, 3.277, 3.281, 3.283, 3.285, 3.289, 3.292, 3.291, 3.291, 3.294, 3.298, 3.302, 3.305, 3.303, 3.301, 3.296, 3.294, 3.293, 3.293, 3.295, 3.295, 3.295, 3.287, 3.285, 3.279, 3.282, 3.285,
+ 3.259, 3.259, 3.262, 3.268, 3.271, 3.273, 3.273, 3.274, 3.277, 3.278, 3.282, 3.285, 3.286, 3.286, 3.288, 3.289, 3.292, 3.291, 3.293, 3.291, 3.288, 3.288, 3.288, 3.288, 3.288, 3.287, 3.287, 3.283, 3.281, 3.276, 3.277, 3.281,
+ 3.259, 3.259, 3.262, 3.269, 3.272, 3.274, 3.273, 3.273, 3.273, 3.276, 3.278, 3.279, 3.281, 3.282, 3.283, 3.283, 3.285, 3.286, 3.286, 3.285, 3.283, 3.282, 3.282, 3.286, 3.285, 3.285, 3.285, 3.282, 3.281, 3.276, 3.275, 3.279,
+ 3.267, 3.266, 3.269, 3.273, 3.274, 3.277, 3.276, 3.275, 3.274, 3.277, 3.277, 3.278, 3.279, 3.279, 3.279, 3.279, 3.281, 3.283, 3.283, 3.281, 3.281, 3.281, 3.282, 3.287, 3.287, 3.288, 3.287, 3.286, 3.283, 3.277, 3.278, 3.281,
+ 3.268, 3.271, 3.274, 3.277, 3.283, 3.286, 3.284, 3.281, 3.278, 3.278, 3.279, 3.279, 3.281, 3.281, 3.281, 3.281, 3.282, 3.283, 3.284, 3.283, 3.282, 3.282, 3.284, 3.288, 3.289, 3.291, 3.291, 3.288, 3.288, 3.283, 3.286, 3.288,
+ 3.272, 3.275, 3.279, 3.283, 3.288, 3.289, 3.289, 3.287, 3.282, 3.284, 3.282, 3.284, 3.284, 3.285, 3.284, 3.285, 3.285, 3.288, 3.287, 3.286, 3.283, 3.283, 3.285, 3.289, 3.292, 3.292, 3.293, 3.292, 3.291, 3.288, 3.289, 3.293,
+ 3.276, 3.278, 3.282, 3.289, 3.293, 3.293, 3.291, 3.289, 3.287, 3.286, 3.285, 3.285, 3.286, 3.286, 3.287, 3.288, 3.289, 3.289, 3.289, 3.288, 3.285, 3.283, 3.286, 3.289, 3.292, 3.294, 3.294, 3.294, 3.293, 3.289, 3.292, 3.293,
+ 3.279, 3.281, 3.286, 3.293, 3.297, 3.298, 3.295, 3.292, 3.288, 3.287, 3.285, 3.287, 3.288, 3.288, 3.289, 3.291, 3.292, 3.293, 3.291, 3.288, 3.286, 3.285, 3.285, 3.291, 3.294, 3.295, 3.297, 3.297, 3.298, 3.293, 3.294, 3.294,
+ 3.281, 3.286, 3.291, 3.298, 3.301, 3.301, 3.299, 3.295, 3.289, 3.288, 3.286, 3.288, 3.289, 3.292, 3.293, 3.292, 3.295, 3.296, 3.295, 3.291, 3.287, 3.286, 3.286, 3.289, 3.295, 3.297, 3.298, 3.301, 3.301, 3.298, 3.297, 3.297,
+ 3.284, 3.289, 3.295, 3.302, 3.303, 3.303, 3.301, 3.298, 3.294, 3.292, 3.289, 3.293, 3.296, 3.297, 3.297, 3.297, 3.297, 3.298, 3.298, 3.296, 3.289, 3.288, 3.287, 3.294, 3.298, 3.301, 3.304, 3.305, 3.304, 3.299, 3.299, 3.302,
+ 3.291, 3.292, 3.299, 3.305, 3.308, 3.305, 3.304, 3.302, 3.298, 3.295, 3.295, 3.298, 3.299, 3.302, 3.303, 3.302, 3.301, 3.301, 3.301, 3.299, 3.296, 3.291, 3.292, 3.297, 3.301, 3.304, 3.306, 3.309, 3.308, 3.302, 3.301, 3.304,
+ 3.292, 3.297, 3.303, 3.309, 3.312, 3.311, 3.308, 3.304, 3.301, 3.299, 3.298, 3.299, 3.303, 3.305, 3.306, 3.305, 3.305, 3.303, 3.303, 3.301, 3.299, 3.294, 3.294, 3.297, 3.302, 3.305, 3.309, 3.311, 3.311, 3.305, 3.305, 3.306,
+ 3.295, 3.298, 3.305, 3.309, 3.313, 3.313, 3.312, 3.307, 3.303, 3.301, 3.299, 3.301, 3.304, 3.307, 3.308, 3.306, 3.306, 3.306, 3.306, 3.302, 3.299, 3.296, 3.295, 3.298, 3.303, 3.306, 3.311, 3.312, 3.312, 3.307, 3.308, 3.309,
+ 3.297, 3.298, 3.303, 3.309, 3.313, 3.313, 3.311, 3.307, 3.303, 3.301, 3.299, 3.299, 3.305, 3.307, 3.307, 3.306, 3.306, 3.306, 3.305, 3.299, 3.297, 3.294, 3.294, 3.298, 3.303, 3.305, 3.311, 3.312, 3.313, 3.308, 3.311, 3.309,
+ 3.297, 3.298, 3.304, 3.309, 3.312, 3.313, 3.311, 3.308, 3.304, 3.302, 3.301, 3.301, 3.306, 3.307, 3.308, 3.306, 3.306, 3.307, 3.306, 3.302, 3.297, 3.294, 3.294, 3.299, 3.305, 3.306, 3.309, 3.312, 3.311, 3.306, 3.308, 3.309,
+ 3.298, 3.299, 3.306, 3.311, 3.315, 3.314, 3.311, 3.308, 3.305, 3.303, 3.303, 3.304, 3.307, 3.309, 3.309, 3.308, 3.308, 3.307, 3.306, 3.302, 3.298, 3.296, 3.296, 3.298, 3.304, 3.306, 3.308, 3.309, 3.314, 3.308, 3.309, 3.308,
+ 3.299, 3.301, 3.307, 3.313, 3.316, 3.316, 3.313, 3.311, 3.307, 3.305, 3.305, 3.307, 3.309, 3.311, 3.312, 3.311, 3.309, 3.309, 3.308, 3.306, 3.301, 3.298, 3.297, 3.301, 3.305, 3.309, 3.309, 3.311, 3.313, 3.306, 3.308, 3.307,
+ 3.301, 3.301, 3.307, 3.314, 3.317, 3.318, 3.314, 3.311, 3.308, 3.306, 3.306, 3.308, 3.311, 3.311, 3.312, 3.311, 3.309, 3.309, 3.309, 3.306, 3.302, 3.298, 3.298, 3.301, 3.305, 3.309, 3.311, 3.311, 3.312, 3.309, 3.308, 3.308,
+ 3.301, 3.302, 3.307, 3.316, 3.319, 3.319, 3.315, 3.312, 3.309, 3.306, 3.307, 3.309, 3.311, 3.312, 3.311, 3.311, 3.309, 3.309, 3.309, 3.306, 3.303, 3.299, 3.298, 3.302, 3.305, 3.308, 3.309, 3.309, 3.309, 3.303, 3.306, 3.307,
+ 3.301, 3.303, 3.308, 3.315, 3.318, 3.318, 3.316, 3.313, 3.311, 3.307, 3.307, 3.308, 3.311, 3.311, 3.311, 3.308, 3.308, 3.307, 3.307, 3.306, 3.303, 3.299, 3.297, 3.301, 3.303, 3.306, 3.309, 3.308, 3.306, 3.303, 3.304, 3.306,
+ 3.302, 3.304, 3.306, 3.316, 3.318, 3.318, 3.317, 3.315, 3.311, 3.308, 3.309, 3.311, 3.311, 3.312, 3.311, 3.307, 3.306, 3.307, 3.308, 3.307, 3.304, 3.299, 3.298, 3.301, 3.303, 3.305, 3.306, 3.305, 3.304, 3.302, 3.303, 3.306,
+ 3.302, 3.304, 3.306, 3.312, 3.316, 3.317, 3.317, 3.313, 3.311, 3.309, 3.309, 3.311, 3.311, 3.312, 3.309, 3.307, 3.306, 3.306, 3.308, 3.307, 3.304, 3.298, 3.297, 3.302, 3.304, 3.305, 3.306, 3.305, 3.304, 3.299, 3.302, 3.303,
+ 3.299, 3.299, 3.306, 3.309, 3.315, 3.316, 3.316, 3.312, 3.309, 3.308, 3.308, 3.309, 3.311, 3.311, 3.307, 3.305, 3.305, 3.305, 3.306, 3.304, 3.299, 3.297, 3.296, 3.301, 3.302, 3.304, 3.303, 3.302, 3.301, 3.298, 3.299, 3.301,
+ 3.295, 3.297, 3.305, 3.309, 3.311, 3.311, 3.311, 3.309, 3.307, 3.306, 3.305, 3.305, 3.305, 3.305, 3.304, 3.301, 3.301, 3.301, 3.302, 3.299, 3.296, 3.295, 3.295, 3.298, 3.301, 3.302, 3.303, 3.301, 3.299, 3.295, 3.297, 3.299,
+ 3.294, 3.296, 3.299, 3.306, 3.308, 3.309, 3.309, 3.307, 3.307, 3.303, 3.302, 3.301, 3.302, 3.303, 3.302, 3.299, 3.298, 3.299, 3.299, 3.298, 3.295, 3.292, 3.292, 3.293, 3.297, 3.299, 3.299, 3.299, 3.297, 3.294, 3.295, 3.299,
+ 3.291, 3.292, 3.296, 3.302, 3.306, 3.306, 3.307, 3.306, 3.305, 3.303, 3.302, 3.301, 3.301, 3.303, 3.301, 3.299, 3.298, 3.298, 3.298, 3.297, 3.295, 3.292, 3.291, 3.291, 3.295, 3.295, 3.297, 3.298, 3.296, 3.293, 3.292, 3.291,
+ 3.293, 3.292, 3.294, 3.301, 3.303, 3.305, 3.308, 3.306, 3.306, 3.304, 3.304, 3.303, 3.303, 3.303, 3.302, 3.301, 3.299, 3.299, 3.299, 3.299, 3.294, 3.291, 3.289, 3.291, 3.293, 3.294, 3.294, 3.294, 3.294, 3.289, 3.291, 3.291,
+ 3.288, 3.289, 3.291, 3.299, 3.303, 3.304, 3.304, 3.304, 3.304, 3.303, 3.303, 3.304, 3.306, 3.305, 3.303, 3.301, 3.301, 3.298, 3.299, 3.298, 3.293, 3.291, 3.289, 3.291, 3.291, 3.292, 3.291, 3.291, 3.291, 3.285, 3.288, 3.291,
+ 3.285, 3.284, 3.287, 3.291, 3.299, 3.299, 3.299, 3.299, 3.299, 3.301, 3.302, 3.303, 3.303, 3.302, 3.299, 3.298, 3.298, 3.298, 3.298, 3.293, 3.288, 3.286, 3.285, 3.288, 3.288, 3.288, 3.287, 3.285, 3.284, 3.279, 3.281, 3.284,
+ 3.281, 3.282, 3.282, 3.286, 3.291, 3.294, 3.294, 3.295, 3.295, 3.299, 3.301, 3.304, 3.305, 3.299, 3.299, 3.297, 3.298, 3.298, 3.297, 3.292, 3.288, 3.285, 3.283, 3.284, 3.284, 3.286, 3.284, 3.282, 3.279, 3.275, 3.275, 3.278,
+ 3.282, 3.282, 3.284, 3.286, 3.291, 3.294, 3.295, 3.295, 3.298, 3.301, 3.304, 3.306, 3.306, 3.304, 3.303, 3.301, 3.302, 3.299, 3.299, 3.295, 3.289, 3.287, 3.284, 3.288, 3.287, 3.287, 3.285, 3.283, 3.282, 3.278, 3.281, 3.286,
+ 3.292, 3.291, 3.292, 3.298, 3.307, 3.309, 3.308, 3.312, 3.313, 3.317, 3.324, 3.327, 3.327, 3.325, 3.326, 3.322, 3.319, 3.317, 3.317, 3.315, 3.312, 3.305, 3.303, 3.301, 3.299, 3.297, 3.299, 3.293, 3.289, 3.285, 3.287, 3.293
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.602, 1.603, 1.605, 1.608, 1.611, 1.612, 1.612, 1.614, 1.615, 1.616, 1.619, 1.621, 1.621, 1.622, 1.622, 1.624, 1.624, 1.626, 1.625, 1.625, 1.623, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.614, 1.612, 1.609, 1.609, 1.611,
+ 1.601, 1.602, 1.605, 1.608, 1.611, 1.612, 1.612, 1.613, 1.614, 1.615, 1.617, 1.619, 1.621, 1.621, 1.621, 1.621, 1.622, 1.624, 1.624, 1.624, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.615, 1.614, 1.612, 1.609, 1.609, 1.609,
+ 1.602, 1.603, 1.605, 1.609, 1.611, 1.613, 1.613, 1.613, 1.613, 1.615, 1.616, 1.618, 1.618, 1.619, 1.619, 1.619, 1.621, 1.621, 1.622, 1.622, 1.619, 1.618, 1.617, 1.617, 1.616, 1.615, 1.615, 1.615, 1.612, 1.609, 1.609, 1.609,
+ 1.604, 1.605, 1.608, 1.612, 1.613, 1.614, 1.614, 1.614, 1.614, 1.614, 1.616, 1.617, 1.618, 1.618, 1.618, 1.619, 1.619, 1.621, 1.622, 1.621, 1.619, 1.618, 1.617, 1.616, 1.616, 1.616, 1.616, 1.615, 1.615, 1.612, 1.611, 1.611,
+ 1.606, 1.608, 1.611, 1.614, 1.615, 1.615, 1.616, 1.616, 1.615, 1.615, 1.617, 1.618, 1.619, 1.619, 1.618, 1.619, 1.621, 1.622, 1.623, 1.622, 1.619, 1.619, 1.617, 1.617, 1.617, 1.618, 1.618, 1.617, 1.617, 1.614, 1.613, 1.613,
+ 1.608, 1.611, 1.614, 1.617, 1.618, 1.618, 1.618, 1.618, 1.618, 1.618, 1.619, 1.621, 1.621, 1.621, 1.621, 1.621, 1.622, 1.623, 1.624, 1.623, 1.622, 1.619, 1.619, 1.618, 1.618, 1.618, 1.618, 1.618, 1.618, 1.617, 1.615, 1.614,
+ 1.611, 1.613, 1.616, 1.618, 1.621, 1.621, 1.619, 1.619, 1.619, 1.619, 1.619, 1.621, 1.622, 1.623, 1.623, 1.623, 1.623, 1.624, 1.626, 1.624, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.621, 1.621, 1.619, 1.617, 1.616, 1.616,
+ 1.611, 1.613, 1.617, 1.621, 1.622, 1.622, 1.621, 1.619, 1.619, 1.619, 1.621, 1.622, 1.624, 1.624, 1.624, 1.624, 1.625, 1.626, 1.626, 1.624, 1.623, 1.621, 1.621, 1.619, 1.619, 1.619, 1.621, 1.621, 1.621, 1.619, 1.618, 1.617,
+ 1.613, 1.615, 1.618, 1.621, 1.623, 1.623, 1.622, 1.621, 1.619, 1.619, 1.621, 1.622, 1.625, 1.625, 1.626, 1.626, 1.625, 1.626, 1.626, 1.624, 1.622, 1.621, 1.619, 1.619, 1.619, 1.621, 1.622, 1.622, 1.621, 1.621, 1.619, 1.618,
+ 1.614, 1.617, 1.621, 1.623, 1.624, 1.624, 1.623, 1.621, 1.621, 1.621, 1.622, 1.625, 1.627, 1.627, 1.628, 1.628, 1.628, 1.628, 1.627, 1.626, 1.623, 1.621, 1.621, 1.621, 1.621, 1.623, 1.623, 1.623, 1.623, 1.621, 1.619, 1.619,
+ 1.616, 1.617, 1.622, 1.624, 1.625, 1.625, 1.624, 1.623, 1.622, 1.623, 1.624, 1.627, 1.629, 1.631, 1.631, 1.631, 1.631, 1.631, 1.631, 1.628, 1.626, 1.623, 1.622, 1.622, 1.623, 1.623, 1.624, 1.624, 1.624, 1.622, 1.621, 1.621,
+ 1.617, 1.618, 1.623, 1.625, 1.626, 1.626, 1.625, 1.624, 1.623, 1.624, 1.625, 1.629, 1.631, 1.633, 1.634, 1.634, 1.634, 1.633, 1.633, 1.631, 1.628, 1.624, 1.623, 1.623, 1.623, 1.625, 1.625, 1.625, 1.625, 1.623, 1.622, 1.622,
+ 1.617, 1.619, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.624, 1.625, 1.628, 1.632, 1.634, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.627, 1.624, 1.623, 1.623, 1.623, 1.624, 1.625, 1.626, 1.625, 1.624, 1.623, 1.623,
+ 1.618, 1.619, 1.623, 1.626, 1.627, 1.626, 1.626, 1.625, 1.624, 1.624, 1.625, 1.628, 1.631, 1.634, 1.634, 1.634, 1.634, 1.634, 1.633, 1.631, 1.628, 1.623, 1.622, 1.622, 1.623, 1.624, 1.625, 1.626, 1.626, 1.624, 1.624, 1.623,
+ 1.618, 1.619, 1.623, 1.626, 1.627, 1.627, 1.625, 1.624, 1.624, 1.624, 1.625, 1.628, 1.632, 1.633, 1.634, 1.634, 1.634, 1.633, 1.633, 1.631, 1.627, 1.623, 1.622, 1.622, 1.623, 1.624, 1.624, 1.625, 1.625, 1.624, 1.623, 1.623,
+ 1.619, 1.621, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.624, 1.626, 1.628, 1.632, 1.634, 1.635, 1.634, 1.634, 1.633, 1.633, 1.631, 1.628, 1.625, 1.622, 1.622, 1.622, 1.623, 1.624, 1.625, 1.625, 1.624, 1.623, 1.623,
+ 1.619, 1.621, 1.623, 1.626, 1.627, 1.627, 1.626, 1.625, 1.624, 1.625, 1.627, 1.629, 1.633, 1.635, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.628, 1.625, 1.623, 1.622, 1.622, 1.623, 1.624, 1.624, 1.624, 1.623, 1.623, 1.622,
+ 1.619, 1.621, 1.624, 1.626, 1.628, 1.628, 1.627, 1.626, 1.625, 1.626, 1.627, 1.629, 1.633, 1.635, 1.635, 1.635, 1.635, 1.634, 1.633, 1.631, 1.628, 1.625, 1.623, 1.623, 1.623, 1.623, 1.624, 1.624, 1.624, 1.622, 1.622, 1.622,
+ 1.619, 1.621, 1.623, 1.626, 1.628, 1.628, 1.627, 1.626, 1.625, 1.626, 1.627, 1.629, 1.632, 1.634, 1.635, 1.635, 1.634, 1.634, 1.632, 1.631, 1.628, 1.624, 1.622, 1.622, 1.622, 1.623, 1.624, 1.624, 1.624, 1.622, 1.621, 1.621,
+ 1.619, 1.621, 1.623, 1.627, 1.628, 1.628, 1.627, 1.627, 1.626, 1.627, 1.628, 1.629, 1.631, 1.633, 1.634, 1.633, 1.633, 1.632, 1.631, 1.631, 1.627, 1.624, 1.622, 1.622, 1.622, 1.622, 1.623, 1.623, 1.623, 1.621, 1.621, 1.621,
+ 1.621, 1.621, 1.624, 1.627, 1.628, 1.628, 1.627, 1.627, 1.627, 1.627, 1.628, 1.631, 1.632, 1.633, 1.633, 1.632, 1.632, 1.632, 1.631, 1.631, 1.628, 1.625, 1.623, 1.622, 1.622, 1.622, 1.623, 1.623, 1.623, 1.621, 1.621, 1.621,
+ 1.621, 1.621, 1.623, 1.627, 1.628, 1.628, 1.628, 1.627, 1.627, 1.628, 1.628, 1.629, 1.631, 1.632, 1.633, 1.632, 1.631, 1.631, 1.631, 1.629, 1.628, 1.625, 1.624, 1.623, 1.623, 1.623, 1.623, 1.623, 1.623, 1.621, 1.621, 1.619,
+ 1.619, 1.621, 1.623, 1.626, 1.628, 1.629, 1.627, 1.627, 1.627, 1.627, 1.628, 1.629, 1.631, 1.631, 1.631, 1.631, 1.631, 1.629, 1.629, 1.628, 1.626, 1.624, 1.623, 1.623, 1.623, 1.622, 1.623, 1.623, 1.622, 1.621, 1.619, 1.619,
+ 1.618, 1.619, 1.623, 1.625, 1.627, 1.627, 1.627, 1.627, 1.626, 1.627, 1.627, 1.628, 1.628, 1.629, 1.628, 1.628, 1.628, 1.628, 1.628, 1.627, 1.625, 1.623, 1.621, 1.621, 1.621, 1.622, 1.622, 1.622, 1.621, 1.619, 1.618, 1.618,
+ 1.618, 1.619, 1.622, 1.624, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.626, 1.627, 1.627, 1.627, 1.626, 1.626, 1.626, 1.626, 1.626, 1.624, 1.622, 1.621, 1.621, 1.619, 1.621, 1.621, 1.621, 1.621, 1.618, 1.617, 1.617,
+ 1.616, 1.618, 1.621, 1.623, 1.624, 1.625, 1.625, 1.625, 1.625, 1.625, 1.626, 1.626, 1.627, 1.627, 1.625, 1.624, 1.624, 1.625, 1.626, 1.625, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.621, 1.621, 1.619, 1.616, 1.616, 1.616,
+ 1.615, 1.616, 1.619, 1.621, 1.623, 1.624, 1.625, 1.624, 1.624, 1.625, 1.626, 1.627, 1.627, 1.626, 1.626, 1.625, 1.624, 1.625, 1.625, 1.625, 1.623, 1.621, 1.619, 1.619, 1.619, 1.619, 1.619, 1.619, 1.618, 1.616, 1.615, 1.614,
+ 1.614, 1.615, 1.616, 1.621, 1.621, 1.623, 1.624, 1.623, 1.624, 1.624, 1.625, 1.627, 1.627, 1.627, 1.626, 1.625, 1.625, 1.625, 1.625, 1.624, 1.622, 1.621, 1.619, 1.618, 1.617, 1.617, 1.617, 1.617, 1.616, 1.613, 1.612, 1.612,
+ 1.612, 1.612, 1.615, 1.617, 1.621, 1.621, 1.622, 1.622, 1.622, 1.624, 1.625, 1.626, 1.626, 1.626, 1.625, 1.624, 1.624, 1.624, 1.624, 1.623, 1.621, 1.619, 1.618, 1.616, 1.615, 1.615, 1.615, 1.615, 1.613, 1.611, 1.609, 1.609,
+ 1.611, 1.611, 1.612, 1.615, 1.618, 1.619, 1.621, 1.621, 1.622, 1.623, 1.624, 1.626, 1.626, 1.626, 1.625, 1.624, 1.624, 1.624, 1.623, 1.622, 1.621, 1.618, 1.617, 1.615, 1.615, 1.614, 1.614, 1.613, 1.611, 1.609, 1.609, 1.609,
+ 1.611, 1.611, 1.612, 1.615, 1.618, 1.619, 1.621, 1.622, 1.623, 1.625, 1.625, 1.627, 1.627, 1.627, 1.626, 1.626, 1.626, 1.626, 1.624, 1.622, 1.621, 1.618, 1.617, 1.617, 1.616, 1.615, 1.614, 1.613, 1.612, 1.609, 1.609, 1.609,
+ 1.612, 1.612, 1.614, 1.617, 1.619, 1.621, 1.623, 1.624, 1.625, 1.626, 1.627, 1.629, 1.631, 1.629, 1.629, 1.629, 1.628, 1.629, 1.628, 1.626, 1.624, 1.621, 1.621, 1.619, 1.619, 1.618, 1.616, 1.616, 1.613, 1.611, 1.612, 1.612
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.977, 2.794, 2.572, 2.375, 2.218, 2.098, 1.995, 1.903, 1.815, 1.731, 1.647, 1.571, 1.516, 1.493, 1.483, 1.481, 1.481, 1.481, 1.489, 1.511, 1.571, 1.643, 1.729, 1.813, 1.901, 1.993, 2.091, 2.208, 2.364, 2.563, 2.785, 2.971,
+ 2.951, 2.736, 2.512, 2.312, 2.153, 2.031, 1.926, 1.824, 1.736, 1.649, 1.571, 1.506, 1.456, 1.419, 1.396, 1.386, 1.386, 1.392, 1.414, 1.451, 1.505, 1.571, 1.648, 1.733, 1.824, 1.922, 2.025, 2.144, 2.301, 2.499, 2.725, 2.939,
+ 2.883, 2.701, 2.471, 2.266, 2.102, 1.974, 1.861, 1.753, 1.649, 1.571, 1.502, 1.425, 1.361, 1.322, 1.298, 1.286, 1.286, 1.294, 1.317, 1.359, 1.424, 1.501, 1.571, 1.648, 1.751, 1.857, 1.968, 2.095, 2.254, 2.458, 2.688, 2.872,
+ 2.788, 2.632, 2.408, 2.209, 2.056, 1.931, 1.816, 1.704, 1.598, 1.503, 1.425, 1.361, 1.322, 1.298, 1.269, 1.245, 1.243, 1.264, 1.293, 1.317, 1.359, 1.424, 1.501, 1.596, 1.702, 1.812, 1.924, 2.046, 2.197, 2.392, 2.619, 2.777,
+ 2.712, 2.541, 2.327, 2.155, 2.023, 1.908, 1.796, 1.684, 1.578, 1.488, 1.412, 1.351, 1.304, 1.269, 1.245, 1.235, 1.235, 1.243, 1.264, 1.301, 1.349, 1.411, 1.485, 1.577, 1.683, 1.791, 1.902, 2.016, 2.143, 2.312, 2.528, 2.702,
+ 2.678, 2.469, 2.269, 2.117, 1.998, 1.885, 1.773, 1.661, 1.556, 1.469, 1.397, 1.336, 1.277, 1.245, 1.234, 1.226, 1.226, 1.232, 1.244, 1.273, 1.332, 1.392, 1.465, 1.555, 1.659, 1.768, 1.879, 1.991, 2.109, 2.256, 2.454, 2.665,
+ 2.659, 2.433, 2.232, 2.081, 1.957, 1.841, 1.722, 1.606, 1.499, 1.409, 1.337, 1.277, 1.232, 1.198, 1.175, 1.166, 1.166, 1.172, 1.193, 1.228, 1.272, 1.334, 1.408, 1.499, 1.608, 1.717, 1.834, 1.951, 2.073, 2.222, 2.419, 2.648,
+ 2.624, 2.411, 2.204, 2.041, 1.909, 1.784, 1.661, 1.539, 1.431, 1.337, 1.277, 1.219, 1.159, 1.118, 1.096, 1.085, 1.085, 1.092, 1.114, 1.156, 1.219, 1.272, 1.337, 1.429, 1.539, 1.658, 1.779, 1.904, 2.033, 2.193, 2.397, 2.613,
+ 2.564, 2.377, 2.169, 2.012, 1.879, 1.749, 1.623, 1.501, 1.392, 1.299, 1.227, 1.169, 1.125, 1.097, 1.079, 1.063, 1.063, 1.076, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.501, 1.622, 1.746, 1.875, 2.005, 2.161, 2.362, 2.554,
+ 2.515, 2.325, 2.138, 1.997, 1.869, 1.742, 1.617, 1.501, 1.392, 1.299, 1.227, 1.169, 1.125, 1.095, 1.079, 1.063, 1.063, 1.076, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.499, 1.615, 1.741, 1.867, 1.991, 2.132, 2.316, 2.505,
+ 2.498, 2.289, 2.121, 1.988, 1.867, 1.741, 1.616, 1.499, 1.391, 1.299, 1.227, 1.169, 1.125, 1.095, 1.082, 1.065, 1.064, 1.079, 1.093, 1.124, 1.168, 1.227, 1.302, 1.392, 1.498, 1.614, 1.738, 1.864, 1.985, 2.116, 2.281, 2.486,
+ 2.498, 2.272, 2.105, 1.971, 1.846, 1.718, 1.592, 1.475, 1.371, 1.279, 1.211, 1.156, 1.112, 1.083, 1.064, 1.055, 1.055, 1.062, 1.081, 1.109, 1.154, 1.212, 1.285, 1.372, 1.473, 1.589, 1.712, 1.843, 1.967, 2.101, 2.263, 2.486,
+ 2.497, 2.267, 2.088, 1.946, 1.813, 1.679, 1.549, 1.431, 1.324, 1.231, 1.159, 1.114, 1.079, 1.035, 1.008, 1.001, 1.001, 1.008, 1.032, 1.076, 1.111, 1.161, 1.235, 1.324, 1.429, 1.547, 1.677, 1.811, 1.941, 2.082, 2.257, 2.484,
+ 2.476, 2.262, 2.077, 1.933, 1.802, 1.671, 1.541, 1.421, 1.317, 1.227, 1.157, 1.101, 1.059, 1.027, 1.004, 1.001, 1.001, 1.004, 1.024, 1.054, 1.098, 1.157, 1.229, 1.317, 1.419, 1.537, 1.667, 1.799, 1.931, 2.071, 2.251, 2.463,
+ 2.455, 2.246, 2.076, 1.933, 1.802, 1.671, 1.541, 1.421, 1.317, 1.227, 1.157, 1.103, 1.064, 1.035, 1.011, 1.003, 1.003, 1.009, 1.032, 1.062, 1.099, 1.157, 1.229, 1.317, 1.419, 1.537, 1.667, 1.799, 1.931, 2.071, 2.236, 2.446,
+ 2.454, 2.239, 2.077, 1.946, 1.817, 1.686, 1.561, 1.444, 1.342, 1.255, 1.189, 1.136, 1.093, 1.059, 1.039, 1.038, 1.038, 1.039, 1.056, 1.091, 1.131, 1.187, 1.258, 1.341, 1.441, 1.556, 1.683, 1.813, 1.939, 2.071, 2.229, 2.445,
+ 2.454, 2.239, 2.079, 1.946, 1.817, 1.686, 1.561, 1.444, 1.342, 1.255, 1.189, 1.136, 1.093, 1.062, 1.039, 1.038, 1.038, 1.039, 1.059, 1.091, 1.131, 1.187, 1.258, 1.341, 1.441, 1.556, 1.683, 1.813, 1.939, 2.071, 2.229, 2.445,
+ 2.458, 2.251, 2.079, 1.941, 1.807, 1.672, 1.543, 1.424, 1.319, 1.231, 1.162, 1.107, 1.065, 1.045, 1.018, 1.003, 1.003, 1.017, 1.044, 1.062, 1.103, 1.159, 1.232, 1.317, 1.419, 1.539, 1.669, 1.802, 1.933, 2.072, 2.239, 2.445,
+ 2.479, 2.265, 2.085, 1.941, 1.807, 1.672, 1.543, 1.424, 1.319, 1.231, 1.162, 1.107, 1.064, 1.031, 1.017, 1.003, 1.003, 1.017, 1.031, 1.059, 1.103, 1.159, 1.232, 1.317, 1.419, 1.539, 1.669, 1.802, 1.933, 2.076, 2.252, 2.468,
+ 2.504, 2.277, 2.099, 1.958, 1.826, 1.695, 1.565, 1.445, 1.338, 1.249, 1.181, 1.129, 1.095, 1.051, 1.027, 1.018, 1.018, 1.028, 1.049, 1.092, 1.127, 1.179, 1.252, 1.339, 1.442, 1.561, 1.691, 1.822, 1.949, 2.089, 2.263, 2.492,
+ 2.509, 2.288, 2.118, 1.982, 1.858, 1.728, 1.604, 1.486, 1.381, 1.293, 1.227, 1.173, 1.127, 1.098, 1.076, 1.067, 1.067, 1.077, 1.097, 1.121, 1.168, 1.225, 1.296, 1.382, 1.483, 1.598, 1.723, 1.852, 1.975, 2.107, 2.274, 2.496,
+ 2.515, 2.312, 2.139, 2.002, 1.877, 1.751, 1.629, 1.512, 1.405, 1.318, 1.248, 1.193, 1.149, 1.118, 1.096, 1.085, 1.085, 1.095, 1.114, 1.145, 1.188, 1.246, 1.319, 1.405, 1.508, 1.623, 1.747, 1.873, 1.995, 2.127, 2.297, 2.501,
+ 2.541, 2.351, 2.161, 2.016, 1.888, 1.762, 1.638, 1.519, 1.411, 1.319, 1.251, 1.197, 1.154, 1.121, 1.099, 1.091, 1.091, 1.099, 1.119, 1.148, 1.192, 1.248, 1.321, 1.411, 1.515, 1.633, 1.758, 1.884, 2.009, 2.149, 2.334, 2.526,
+ 2.588, 2.394, 2.193, 2.036, 1.905, 1.779, 1.656, 1.537, 1.426, 1.329, 1.255, 1.198, 1.161, 1.139, 1.118, 1.096, 1.095, 1.114, 1.138, 1.158, 1.195, 1.256, 1.333, 1.425, 1.533, 1.651, 1.777, 1.902, 2.028, 2.181, 2.378, 2.571,
+ 2.639, 2.431, 2.226, 2.067, 1.937, 1.816, 1.695, 1.577, 1.467, 1.368, 1.298, 1.253, 1.198, 1.161, 1.139, 1.129, 1.129, 1.138, 1.158, 1.195, 1.245, 1.296, 1.374, 1.468, 1.574, 1.692, 1.812, 1.934, 2.059, 2.216, 2.418, 2.626,
+ 2.679, 2.465, 2.261, 2.104, 1.979, 1.862, 1.746, 1.631, 1.522, 1.426, 1.352, 1.297, 1.254, 1.221, 1.201, 1.189, 1.189, 1.198, 1.217, 1.246, 1.293, 1.354, 1.433, 1.526, 1.631, 1.744, 1.859, 1.975, 2.097, 2.252, 2.452, 2.667,
+ 2.711, 2.511, 2.302, 2.141, 2.018, 1.903, 1.791, 1.678, 1.571, 1.475, 1.401, 1.343, 1.297, 1.268, 1.247, 1.236, 1.236, 1.244, 1.263, 1.291, 1.341, 1.403, 1.484, 1.575, 1.679, 1.791, 1.902, 2.012, 2.136, 2.295, 2.501, 2.698,
+ 2.759, 2.582, 2.363, 2.184, 2.049, 1.935, 1.824, 1.714, 1.608, 1.511, 1.431, 1.371, 1.325, 1.295, 1.271, 1.259, 1.259, 1.266, 1.291, 1.318, 1.369, 1.436, 1.517, 1.611, 1.716, 1.825, 1.933, 2.047, 2.179, 2.351, 2.571, 2.748,
+ 2.833, 2.662, 2.433, 2.239, 2.089, 1.968, 1.859, 1.752, 1.646, 1.549, 1.468, 1.411, 1.369, 1.325, 1.296, 1.283, 1.283, 1.292, 1.318, 1.366, 1.411, 1.472, 1.555, 1.651, 1.755, 1.861, 1.969, 2.086, 2.231, 2.422, 2.648, 2.821,
+ 2.909, 2.729, 2.499, 2.298, 2.141, 2.016, 1.907, 1.805, 1.703, 1.611, 1.539, 1.468, 1.411, 1.375, 1.351, 1.339, 1.339, 1.348, 1.372, 1.411, 1.472, 1.543, 1.613, 1.708, 1.807, 1.909, 2.014, 2.135, 2.288, 2.487, 2.716, 2.897,
+ 2.981, 2.789, 2.563, 2.358, 2.197, 2.071, 1.968, 1.868, 1.774, 1.684, 1.607, 1.541, 1.489, 1.453, 1.428, 1.417, 1.417, 1.427, 1.451, 1.489, 1.543, 1.611, 1.686, 1.776, 1.871, 1.966, 2.069, 2.191, 2.349, 2.551, 2.775, 2.964,
+ 3.041, 2.856, 2.629, 2.422, 2.252, 2.127, 2.021, 1.927, 1.834, 1.748, 1.672, 1.604, 1.541, 1.495, 1.483, 1.483, 1.483, 1.483, 1.496, 1.543, 1.608, 1.673, 1.749, 1.835, 1.926, 2.019, 2.122, 2.249, 2.411, 2.614, 2.839, 3.026
+ ],
+ "sigma": 0.00163,
+ "sigma_Cb": 0.0011
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2498,
+ "ccm":
+ [
+ 1.14912, 0.28638, -0.43551,
+ -0.49691, 1.60391, -0.10701,
+ -0.10513, -1.09534, 2.20047
+ ]
+ },
+ {
+ "ct": 2821,
+ "ccm":
+ [
+ 1.18251, 0.15501, -0.33752,
+ -0.44304, 1.58495, -0.14191,
+ -0.05077, -0.96422, 2.01498
+ ]
+ },
+ {
+ "ct": 2925,
+ "ccm":
+ [
+ 1.18668, 0.00195, -0.18864,
+ -0.41617, 1.50514, -0.08897,
+ -0.02675, -0.91143, 1.93818
+ ]
+ },
+ {
+ "ct": 2926,
+ "ccm":
+ [
+ 1.50948, -0.44421, -0.06527,
+ -0.37241, 1.41726, -0.04486,
+ 0.07098, -0.84694, 1.77596
+ ]
+ },
+ {
+ "ct": 2951,
+ "ccm":
+ [
+ 1.52743, -0.47333, -0.05411,
+ -0.36485, 1.40764, -0.04279,
+ 0.08672, -0.90479, 1.81807
+ ]
+ },
+ {
+ "ct": 2954,
+ "ccm":
+ [
+ 1.51683, -0.46841, -0.04841,
+ -0.36288, 1.39914, -0.03625,
+ 0.06421, -0.82034, 1.75613
+ ]
+ },
+ {
+ "ct": 3578,
+ "ccm":
+ [
+ 1.59888, -0.59105, -0.00784,
+ -0.29366, 1.32037, -0.02671,
+ 0.06627, -0.76465, 1.69838
+ ]
+ },
+ {
+ "ct": 3717,
+ "ccm":
+ [
+ 1.59063, -0.58059, -0.01003,
+ -0.29583, 1.32715, -0.03132,
+ 0.03613, -0.67431, 1.63817
+ ]
+ },
+ {
+ "ct": 3784,
+ "ccm":
+ [
+ 1.59379, -0.58861, -0.00517,
+ -0.29178, 1.33292, -0.04115,
+ 0.03541, -0.66162, 1.62622
+ ]
+ },
+ {
+ "ct": 4485,
+ "ccm":
+ [
+ 1.40761, -0.34561, -0.06201,
+ -0.32388, 1.57221, -0.24832,
+ -0.01014, -0.63427, 1.64441
+ ]
+ },
+ {
+ "ct": 4615,
+ "ccm":
+ [
+ 1.41537, -0.35832, -0.05705,
+ -0.31429, 1.56019, -0.24591,
+ -0.01761, -0.61859, 1.63621
+ ]
+ },
+ {
+ "ct": 4671,
+ "ccm":
+ [
+ 1.42941, -0.38178, -0.04764,
+ -0.31421, 1.55925, -0.24504,
+ -0.01141, -0.62987, 1.64129
+ ]
+ },
+ {
+ "ct": 5753,
+ "ccm":
+ [
+ 1.64549, -0.63329, -0.01221,
+ -0.22431, 1.36423, -0.13992,
+ -0.00831, -0.55373, 1.56204
+ ]
+ },
+ {
+ "ct": 5773,
+ "ccm":
+ [
+ 1.63668, -0.63557, -0.00111,
+ -0.21919, 1.36234, -0.14315,
+ -0.00399, -0.57428, 1.57827
+ ]
+ },
+ {
+ "ct": 7433,
+ "ccm":
+ [
+ 1.36007, -0.09277, -0.26729,
+ -0.36886, 2.09249, -0.72363,
+ -0.12573, -0.76761, 1.89334
+ ]
+ },
+ {
+ "ct": 55792,
+ "ccm":
+ [
+ 1.65091, -0.63689, -0.01401,
+ -0.22277, 1.35752, -0.13475,
+ -0.00943, -0.55091, 1.56033
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.af":
+ {
+ "ranges":
+ {
+ "normal":
+ {
+ "min": 0.0,
+ "max": 12.0,
+ "default": 1.0
+ },
+ "macro":
+ {
+ "min": 3.0,
+ "max": 15.0,
+ "default": 4.0
+ }
+ },
+ "speeds":
+ {
+ "normal":
+ {
+ "step_coarse": 1.0,
+ "step_fine": 0.25,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.02,
+ "pdaf_squelch": 0.125,
+ "max_slew": 2.0,
+ "pdaf_frames": 20,
+ "dropout_frames": 6,
+ "step_frames": 4
+ }
+ },
+ "conf_epsilon": 8,
+ "conf_thresh": 16,
+ "conf_clip": 512,
+ "skip_frames": 5,
+ "map": [ 0.0, 445, 15.0, 925 ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx708_wide.json b/src/ipa/rpi/pisp/data/imx708_wide.json
new file mode 100644
index 00000000..9fff05d9
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx708_wide.json
@@ -0,0 +1,1293 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 41985,
+ "reference_gain": 1.12,
+ "reference_aperture": 1.0,
+ "reference_lux": 810,
+ "reference_Y": 13859
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.9
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 206,
+ "slope": 0.00324
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2868.0, 0.6419, 0.3613,
+ 3603.0, 0.5374, 0.4787,
+ 4620.0, 0.4482, 0.5813,
+ 5901.0, 0.3883, 0.6514,
+ 7610.0, 0.3279, 0.7232
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.01908,
+ "transverse_neg": 0.01376
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.65,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.717, 1.712, 1.703, 1.692, 1.674, 1.653, 1.638, 1.624, 1.613, 1.601, 1.589, 1.579, 1.575, 1.573, 1.571, 1.571, 1.571, 1.571, 1.572, 1.577, 1.583, 1.593, 1.605, 1.618, 1.636, 1.653, 1.677, 1.699, 1.715, 1.722, 1.731, 1.733,
+ 1.714, 1.706, 1.696, 1.678, 1.658, 1.639, 1.627, 1.614, 1.602, 1.591, 1.579, 1.572, 1.569, 1.566, 1.565, 1.564, 1.564, 1.565, 1.567, 1.571, 1.578, 1.585, 1.595, 1.607, 1.622, 1.641, 1.661, 1.685, 1.706, 1.717, 1.724, 1.732,
+ 1.708, 1.698, 1.688, 1.667, 1.647, 1.629, 1.619, 1.606, 1.593, 1.581, 1.572, 1.565, 1.561, 1.559, 1.559, 1.559, 1.559, 1.561, 1.562, 1.566, 1.571, 1.577, 1.587, 1.598, 1.612, 1.629, 1.649, 1.674, 1.697, 1.713, 1.721, 1.728,
+ 1.706, 1.695, 1.681, 1.655, 1.636, 1.622, 1.613, 1.597, 1.585, 1.572, 1.564, 1.559, 1.558, 1.556, 1.555, 1.555, 1.556, 1.556, 1.558, 1.561, 1.566, 1.571, 1.578, 1.591, 1.605, 1.619, 1.638, 1.662, 1.691, 1.708, 1.719, 1.726,
+ 1.706, 1.692, 1.675, 1.649, 1.629, 1.615, 1.607, 1.592, 1.575, 1.565, 1.559, 1.554, 1.552, 1.551, 1.551, 1.551, 1.551, 1.552, 1.554, 1.557, 1.561, 1.566, 1.573, 1.582, 1.596, 1.611, 1.627, 1.652, 1.681, 1.705, 1.717, 1.724,
+ 1.703, 1.686, 1.664, 1.639, 1.625, 1.612, 1.599, 1.585, 1.569, 1.559, 1.554, 1.549, 1.548, 1.548, 1.546, 1.546, 1.546, 1.547, 1.549, 1.553, 1.557, 1.563, 1.569, 1.576, 1.591, 1.603, 1.621, 1.644, 1.674, 1.698, 1.714, 1.724,
+ 1.702, 1.681, 1.659, 1.635, 1.621, 1.607, 1.594, 1.579, 1.565, 1.554, 1.549, 1.546, 1.544, 1.543, 1.543, 1.542, 1.543, 1.543, 1.544, 1.549, 1.553, 1.558, 1.564, 1.572, 1.584, 1.599, 1.614, 1.639, 1.667, 1.695, 1.712, 1.724,
+ 1.697, 1.678, 1.655, 1.631, 1.616, 1.602, 1.589, 1.575, 1.559, 1.551, 1.545, 1.543, 1.542, 1.542, 1.541, 1.539, 1.539, 1.539, 1.542, 1.544, 1.551, 1.555, 1.562, 1.571, 1.579, 1.594, 1.611, 1.631, 1.661, 1.691, 1.712, 1.724,
+ 1.695, 1.674, 1.651, 1.629, 1.615, 1.599, 1.584, 1.568, 1.554, 1.545, 1.542, 1.541, 1.539, 1.539, 1.538, 1.538, 1.538, 1.539, 1.539, 1.543, 1.548, 1.554, 1.559, 1.568, 1.576, 1.592, 1.608, 1.629, 1.655, 1.689, 1.709, 1.723,
+ 1.691, 1.671, 1.648, 1.627, 1.613, 1.597, 1.581, 1.564, 1.551, 1.543, 1.539, 1.538, 1.538, 1.537, 1.536, 1.535, 1.536, 1.538, 1.539, 1.542, 1.546, 1.551, 1.558, 1.564, 1.575, 1.588, 1.604, 1.627, 1.654, 1.686, 1.709, 1.724,
+ 1.689, 1.667, 1.643, 1.626, 1.612, 1.594, 1.579, 1.559, 1.549, 1.541, 1.536, 1.535, 1.535, 1.535, 1.534, 1.533, 1.534, 1.536, 1.538, 1.541, 1.545, 1.549, 1.555, 1.563, 1.573, 1.585, 1.602, 1.624, 1.651, 1.683, 1.709, 1.725,
+ 1.686, 1.665, 1.641, 1.623, 1.609, 1.594, 1.576, 1.559, 1.546, 1.538, 1.535, 1.534, 1.533, 1.532, 1.531, 1.531, 1.532, 1.534, 1.537, 1.539, 1.544, 1.549, 1.554, 1.562, 1.572, 1.585, 1.601, 1.622, 1.651, 1.682, 1.711, 1.726,
+ 1.686, 1.661, 1.639, 1.623, 1.609, 1.592, 1.574, 1.557, 1.545, 1.537, 1.534, 1.533, 1.532, 1.531, 1.529, 1.528, 1.529, 1.532, 1.537, 1.539, 1.542, 1.548, 1.553, 1.562, 1.571, 1.584, 1.601, 1.621, 1.649, 1.682, 1.711, 1.726,
+ 1.685, 1.661, 1.638, 1.624, 1.609, 1.592, 1.574, 1.557, 1.544, 1.536, 1.533, 1.532, 1.531, 1.529, 1.527, 1.522, 1.526, 1.531, 1.536, 1.539, 1.542, 1.547, 1.553, 1.562, 1.571, 1.583, 1.601, 1.621, 1.648, 1.682, 1.711, 1.726,
+ 1.684, 1.658, 1.638, 1.624, 1.611, 1.592, 1.573, 1.556, 1.543, 1.536, 1.532, 1.531, 1.529, 1.528, 1.522, 1.517, 1.519, 1.527, 1.535, 1.539, 1.541, 1.547, 1.553, 1.562, 1.571, 1.583, 1.601, 1.622, 1.647, 1.681, 1.711, 1.727,
+ 1.681, 1.658, 1.641, 1.624, 1.611, 1.593, 1.573, 1.555, 1.541, 1.535, 1.532, 1.529, 1.529, 1.527, 1.517, 1.506, 1.506, 1.522, 1.534, 1.538, 1.541, 1.546, 1.552, 1.562, 1.569, 1.583, 1.601, 1.622, 1.646, 1.679, 1.709, 1.728,
+ 1.679, 1.656, 1.639, 1.624, 1.611, 1.595, 1.575, 1.556, 1.541, 1.534, 1.531, 1.529, 1.529, 1.527, 1.517, 1.507, 1.507, 1.522, 1.533, 1.538, 1.539, 1.546, 1.552, 1.561, 1.569, 1.584, 1.601, 1.622, 1.647, 1.681, 1.709, 1.726,
+ 1.678, 1.656, 1.638, 1.625, 1.612, 1.597, 1.577, 1.557, 1.542, 1.534, 1.529, 1.529, 1.528, 1.527, 1.522, 1.516, 1.519, 1.525, 1.533, 1.537, 1.539, 1.545, 1.552, 1.561, 1.571, 1.584, 1.601, 1.623, 1.649, 1.681, 1.709, 1.726,
+ 1.679, 1.654, 1.639, 1.626, 1.613, 1.598, 1.578, 1.558, 1.543, 1.534, 1.529, 1.529, 1.529, 1.528, 1.527, 1.522, 1.525, 1.528, 1.533, 1.536, 1.539, 1.546, 1.553, 1.561, 1.571, 1.586, 1.602, 1.623, 1.651, 1.683, 1.712, 1.726,
+ 1.677, 1.655, 1.641, 1.628, 1.615, 1.599, 1.581, 1.562, 1.545, 1.535, 1.531, 1.529, 1.529, 1.528, 1.527, 1.527, 1.528, 1.531, 1.533, 1.536, 1.539, 1.545, 1.552, 1.561, 1.572, 1.588, 1.607, 1.626, 1.654, 1.686, 1.716, 1.729,
+ 1.676, 1.655, 1.642, 1.629, 1.617, 1.602, 1.586, 1.564, 1.546, 1.536, 1.531, 1.529, 1.529, 1.529, 1.529, 1.529, 1.529, 1.532, 1.534, 1.536, 1.539, 1.547, 1.553, 1.563, 1.576, 1.591, 1.609, 1.627, 1.655, 1.688, 1.716, 1.729,
+ 1.676, 1.658, 1.641, 1.631, 1.617, 1.605, 1.588, 1.569, 1.553, 1.539, 1.532, 1.531, 1.529, 1.529, 1.529, 1.529, 1.531, 1.532, 1.534, 1.537, 1.541, 1.547, 1.553, 1.564, 1.578, 1.594, 1.613, 1.632, 1.659, 1.691, 1.717, 1.728,
+ 1.676, 1.658, 1.642, 1.631, 1.619, 1.608, 1.592, 1.575, 1.556, 1.542, 1.533, 1.531, 1.529, 1.529, 1.529, 1.531, 1.531, 1.532, 1.534, 1.537, 1.542, 1.548, 1.556, 1.567, 1.582, 1.598, 1.616, 1.638, 1.661, 1.693, 1.717, 1.729,
+ 1.678, 1.661, 1.644, 1.632, 1.621, 1.611, 1.596, 1.579, 1.561, 1.546, 1.536, 1.532, 1.531, 1.531, 1.531, 1.531, 1.532, 1.533, 1.535, 1.538, 1.544, 1.549, 1.559, 1.569, 1.587, 1.604, 1.618, 1.639, 1.669, 1.697, 1.718, 1.731,
+ 1.679, 1.662, 1.648, 1.635, 1.625, 1.615, 1.602, 1.586, 1.569, 1.552, 1.541, 1.535, 1.532, 1.532, 1.531, 1.532, 1.533, 1.534, 1.537, 1.541, 1.546, 1.552, 1.562, 1.576, 1.592, 1.608, 1.622, 1.647, 1.673, 1.703, 1.721, 1.734,
+ 1.684, 1.664, 1.649, 1.637, 1.627, 1.618, 1.606, 1.593, 1.576, 1.561, 1.547, 1.539, 1.535, 1.533, 1.533, 1.533, 1.534, 1.536, 1.539, 1.543, 1.549, 1.555, 1.568, 1.583, 1.596, 1.612, 1.629, 1.651, 1.681, 1.706, 1.723, 1.734,
+ 1.689, 1.669, 1.649, 1.639, 1.629, 1.621, 1.609, 1.597, 1.585, 1.567, 1.554, 1.546, 1.539, 1.536, 1.535, 1.535, 1.537, 1.538, 1.542, 1.546, 1.553, 1.562, 1.572, 1.589, 1.603, 1.619, 1.635, 1.658, 1.686, 1.708, 1.726, 1.736,
+ 1.692, 1.673, 1.655, 1.644, 1.634, 1.624, 1.614, 1.604, 1.592, 1.577, 1.566, 1.554, 1.546, 1.542, 1.538, 1.538, 1.539, 1.542, 1.546, 1.552, 1.559, 1.568, 1.581, 1.596, 1.609, 1.625, 1.642, 1.664, 1.693, 1.714, 1.727, 1.736,
+ 1.695, 1.679, 1.662, 1.647, 1.638, 1.631, 1.623, 1.612, 1.601, 1.589, 1.577, 1.565, 1.555, 1.549, 1.546, 1.545, 1.546, 1.548, 1.552, 1.559, 1.568, 1.579, 1.593, 1.604, 1.618, 1.632, 1.648, 1.676, 1.701, 1.718, 1.728, 1.739,
+ 1.699, 1.684, 1.667, 1.654, 1.644, 1.635, 1.629, 1.621, 1.609, 1.599, 1.589, 1.578, 1.568, 1.559, 1.556, 1.554, 1.554, 1.557, 1.563, 1.569, 1.578, 1.589, 1.599, 1.612, 1.625, 1.641, 1.661, 1.685, 1.707, 1.722, 1.734, 1.742,
+ 1.703, 1.691, 1.672, 1.658, 1.648, 1.639, 1.634, 1.628, 1.618, 1.606, 1.598, 1.589, 1.579, 1.573, 1.568, 1.567, 1.567, 1.568, 1.571, 1.578, 1.587, 1.597, 1.607, 1.618, 1.632, 1.651, 1.672, 1.694, 1.715, 1.728, 1.737, 1.742,
+ 1.707, 1.691, 1.676, 1.662, 1.651, 1.643, 1.638, 1.631, 1.622, 1.614, 1.604, 1.596, 1.589, 1.579, 1.575, 1.573, 1.573, 1.574, 1.578, 1.586, 1.589, 1.598, 1.609, 1.625, 1.638, 1.657, 1.679, 1.701, 1.719, 1.728, 1.738, 1.742
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 2.939, 2.935, 2.916, 2.895, 2.856, 2.825, 2.797, 2.777, 2.761, 2.741, 2.726, 2.709, 2.707, 2.704, 2.702, 2.702, 2.703, 2.706, 2.708, 2.709, 2.719, 2.735, 2.753, 2.776, 2.801, 2.832, 2.874, 2.915, 2.939, 2.943, 2.953, 2.961,
+ 2.936, 2.923, 2.901, 2.863, 2.829, 2.801, 2.781, 2.763, 2.743, 2.732, 2.712, 2.701, 2.696, 2.692, 2.691, 2.691, 2.693, 2.694, 2.696, 2.701, 2.709, 2.725, 2.741, 2.758, 2.779, 2.811, 2.838, 2.879, 2.919, 2.939, 2.948, 2.959,
+ 2.929, 2.909, 2.887, 2.847, 2.808, 2.783, 2.765, 2.748, 2.732, 2.713, 2.699, 2.691, 2.687, 2.686, 2.685, 2.685, 2.687, 2.689, 2.691, 2.694, 2.701, 2.709, 2.725, 2.745, 2.763, 2.786, 2.818, 2.863, 2.907, 2.933, 2.941, 2.955,
+ 2.929, 2.903, 2.875, 2.825, 2.791, 2.769, 2.755, 2.737, 2.718, 2.701, 2.688, 2.683, 2.681, 2.679, 2.681, 2.679, 2.681, 2.682, 2.685, 2.689, 2.694, 2.701, 2.711, 2.737, 2.754, 2.772, 2.803, 2.844, 2.894, 2.931, 2.939, 2.953,
+ 2.926, 2.895, 2.862, 2.816, 2.782, 2.759, 2.744, 2.727, 2.709, 2.691, 2.679, 2.673, 2.671, 2.669, 2.669, 2.669, 2.671, 2.674, 2.678, 2.681, 2.685, 2.694, 2.707, 2.725, 2.739, 2.762, 2.786, 2.829, 2.879, 2.919, 2.942, 2.952,
+ 2.919, 2.886, 2.846, 2.797, 2.772, 2.751, 2.737, 2.719, 2.694, 2.679, 2.672, 2.666, 2.664, 2.661, 2.659, 2.658, 2.661, 2.664, 2.669, 2.673, 2.678, 2.685, 2.696, 2.715, 2.728, 2.749, 2.774, 2.808, 2.866, 2.909, 2.936, 2.951,
+ 2.904, 2.877, 2.835, 2.789, 2.763, 2.744, 2.728, 2.712, 2.686, 2.672, 2.664, 2.657, 2.654, 2.654, 2.652, 2.653, 2.654, 2.657, 2.661, 2.666, 2.672, 2.678, 2.688, 2.703, 2.721, 2.742, 2.762, 2.797, 2.851, 2.902, 2.928, 2.949,
+ 2.901, 2.869, 2.825, 2.781, 2.756, 2.738, 2.721, 2.698, 2.679, 2.665, 2.656, 2.652, 2.649, 2.648, 2.648, 2.648, 2.649, 2.651, 2.654, 2.659, 2.667, 2.675, 2.683, 2.699, 2.711, 2.736, 2.754, 2.789, 2.838, 2.896, 2.926, 2.948,
+ 2.899, 2.862, 2.815, 2.774, 2.752, 2.734, 2.717, 2.689, 2.669, 2.658, 2.651, 2.646, 2.645, 2.643, 2.643, 2.644, 2.645, 2.646, 2.649, 2.654, 2.661, 2.669, 2.681, 2.693, 2.707, 2.729, 2.751, 2.782, 2.834, 2.887, 2.924, 2.947,
+ 2.898, 2.853, 2.812, 2.771, 2.751, 2.731, 2.711, 2.686, 2.663, 2.653, 2.646, 2.642, 2.641, 2.642, 2.642, 2.641, 2.641, 2.641, 2.646, 2.651, 2.657, 2.667, 2.678, 2.693, 2.705, 2.728, 2.746, 2.781, 2.829, 2.885, 2.924, 2.951,
+ 2.896, 2.851, 2.807, 2.771, 2.752, 2.729, 2.709, 2.681, 2.661, 2.649, 2.643, 2.641, 2.639, 2.639, 2.638, 2.636, 2.637, 2.638, 2.644, 2.649, 2.657, 2.666, 2.676, 2.688, 2.705, 2.725, 2.745, 2.777, 2.827, 2.884, 2.927, 2.951,
+ 2.891, 2.846, 2.803, 2.771, 2.749, 2.728, 2.706, 2.677, 2.658, 2.647, 2.641, 2.637, 2.637, 2.636, 2.636, 2.633, 2.632, 2.635, 2.643, 2.649, 2.656, 2.665, 2.675, 2.688, 2.704, 2.719, 2.744, 2.776, 2.822, 2.881, 2.927, 2.958,
+ 2.887, 2.841, 2.797, 2.769, 2.749, 2.729, 2.704, 2.674, 2.655, 2.645, 2.638, 2.635, 2.633, 2.632, 2.631, 2.625, 2.627, 2.631, 2.639, 2.649, 2.654, 2.662, 2.673, 2.686, 2.701, 2.718, 2.742, 2.773, 2.822, 2.881, 2.926, 2.958,
+ 2.883, 2.837, 2.796, 2.769, 2.749, 2.729, 2.701, 2.673, 2.653, 2.641, 2.636, 2.632, 2.631, 2.629, 2.623, 2.612, 2.619, 2.627, 2.637, 2.648, 2.652, 2.659, 2.671, 2.688, 2.699, 2.719, 2.742, 2.774, 2.821, 2.882, 2.927, 2.961,
+ 2.881, 2.832, 2.795, 2.769, 2.751, 2.729, 2.701, 2.672, 2.652, 2.639, 2.633, 2.631, 2.628, 2.625, 2.611, 2.599, 2.607, 2.619, 2.635, 2.644, 2.652, 2.659, 2.669, 2.686, 2.698, 2.719, 2.743, 2.775, 2.822, 2.881, 2.926, 2.961,
+ 2.879, 2.829, 2.793, 2.771, 2.751, 2.731, 2.701, 2.672, 2.651, 2.639, 2.632, 2.628, 2.626, 2.621, 2.601, 2.581, 2.581, 2.611, 2.631, 2.642, 2.648, 2.657, 2.669, 2.685, 2.699, 2.721, 2.743, 2.776, 2.819, 2.879, 2.927, 2.961,
+ 2.876, 2.829, 2.796, 2.773, 2.752, 2.731, 2.705, 2.672, 2.651, 2.637, 2.631, 2.627, 2.625, 2.619, 2.601, 2.581, 2.581, 2.611, 2.629, 2.641, 2.647, 2.658, 2.669, 2.685, 2.697, 2.721, 2.746, 2.777, 2.822, 2.881, 2.929, 2.964,
+ 2.874, 2.827, 2.796, 2.775, 2.755, 2.733, 2.708, 2.674, 2.649, 2.635, 2.629, 2.626, 2.624, 2.621, 2.609, 2.601, 2.606, 2.615, 2.629, 2.638, 2.645, 2.657, 2.669, 2.682, 2.699, 2.722, 2.747, 2.778, 2.822, 2.881, 2.931, 2.964,
+ 2.871, 2.827, 2.797, 2.776, 2.761, 2.734, 2.711, 2.679, 2.651, 2.636, 2.628, 2.626, 2.624, 2.621, 2.618, 2.611, 2.614, 2.619, 2.628, 2.639, 2.644, 2.657, 2.668, 2.683, 2.698, 2.723, 2.749, 2.782, 2.824, 2.882, 2.933, 2.965,
+ 2.869, 2.825, 2.797, 2.777, 2.765, 2.741, 2.718, 2.683, 2.655, 2.638, 2.627, 2.625, 2.624, 2.623, 2.621, 2.618, 2.618, 2.624, 2.629, 2.639, 2.644, 2.657, 2.669, 2.684, 2.701, 2.725, 2.755, 2.782, 2.829, 2.887, 2.937, 2.965,
+ 2.871, 2.826, 2.799, 2.776, 2.765, 2.744, 2.723, 2.689, 2.659, 2.639, 2.629, 2.626, 2.626, 2.624, 2.624, 2.622, 2.624, 2.627, 2.632, 2.639, 2.646, 2.657, 2.671, 2.687, 2.706, 2.732, 2.757, 2.789, 2.836, 2.893, 2.941, 2.965,
+ 2.869, 2.831, 2.803, 2.778, 2.766, 2.748, 2.729, 2.697, 2.667, 2.645, 2.632, 2.628, 2.625, 2.625, 2.625, 2.625, 2.627, 2.629, 2.634, 2.638, 2.648, 2.661, 2.673, 2.688, 2.711, 2.741, 2.762, 2.797, 2.843, 2.901, 2.943, 2.964,
+ 2.872, 2.837, 2.802, 2.781, 2.768, 2.753, 2.734, 2.702, 2.674, 2.647, 2.634, 2.629, 2.626, 2.625, 2.625, 2.627, 2.629, 2.632, 2.635, 2.639, 2.649, 2.663, 2.676, 2.694, 2.719, 2.746, 2.771, 2.799, 2.851, 2.905, 2.947, 2.969,
+ 2.871, 2.837, 2.805, 2.786, 2.771, 2.755, 2.739, 2.714, 2.685, 2.655, 2.639, 2.631, 2.626, 2.625, 2.626, 2.628, 2.629, 2.632, 2.634, 2.642, 2.651, 2.663, 2.679, 2.701, 2.726, 2.756, 2.773, 2.809, 2.861, 2.913, 2.949, 2.968,
+ 2.876, 2.841, 2.808, 2.789, 2.775, 2.759, 2.744, 2.719, 2.693, 2.664, 2.648, 2.636, 2.629, 2.627, 2.627, 2.629, 2.631, 2.633, 2.637, 2.645, 2.653, 2.666, 2.682, 2.708, 2.734, 2.759, 2.779, 2.815, 2.868, 2.918, 2.951, 2.971,
+ 2.882, 2.845, 2.816, 2.791, 2.778, 2.766, 2.748, 2.733, 2.707, 2.681, 2.656, 2.643, 2.636, 2.632, 2.631, 2.632, 2.633, 2.637, 2.643, 2.648, 2.659, 2.672, 2.691, 2.719, 2.747, 2.765, 2.791, 2.829, 2.881, 2.931, 2.952, 2.969,
+ 2.889, 2.855, 2.819, 2.799, 2.782, 2.769, 2.755, 2.741, 2.717, 2.691, 2.672, 2.652, 2.643, 2.639, 2.636, 2.636, 2.638, 2.642, 2.646, 2.655, 2.665, 2.682, 2.703, 2.729, 2.752, 2.774, 2.798, 2.839, 2.891, 2.933, 2.959, 2.975,
+ 2.897, 2.862, 2.829, 2.804, 2.789, 2.776, 2.764, 2.749, 2.734, 2.709, 2.689, 2.669, 2.652, 2.644, 2.642, 2.642, 2.644, 2.647, 2.654, 2.664, 2.677, 2.694, 2.714, 2.742, 2.764, 2.782, 2.809, 2.852, 2.899, 2.936, 2.961, 2.976,
+ 2.902, 2.869, 2.841, 2.811, 2.797, 2.785, 2.776, 2.761, 2.748, 2.727, 2.708, 2.689, 2.671, 2.659, 2.655, 2.654, 2.653, 2.656, 2.666, 2.678, 2.693, 2.713, 2.737, 2.756, 2.775, 2.798, 2.825, 2.871, 2.913, 2.944, 2.966, 2.979,
+ 2.911, 2.885, 2.848, 2.821, 2.804, 2.793, 2.784, 2.774, 2.759, 2.747, 2.726, 2.709, 2.692, 2.679, 2.673, 2.672, 2.671, 2.672, 2.681, 2.694, 2.712, 2.729, 2.749, 2.768, 2.789, 2.811, 2.844, 2.886, 2.928, 2.956, 2.971, 2.984,
+ 2.925, 2.893, 2.861, 2.831, 2.813, 2.802, 2.795, 2.783, 2.773, 2.759, 2.744, 2.729, 2.715, 2.701, 2.698, 2.694, 2.693, 2.694, 2.702, 2.714, 2.729, 2.747, 2.761, 2.781, 2.802, 2.828, 2.864, 2.907, 2.942, 2.967, 2.978, 2.989,
+ 2.932, 2.898, 2.871, 2.843, 2.823, 2.811, 2.802, 2.794, 2.779, 2.772, 2.757, 2.742, 2.729, 2.716, 2.705, 2.704, 2.704, 2.707, 2.715, 2.727, 2.737, 2.754, 2.769, 2.788, 2.812, 2.845, 2.878, 2.923, 2.962, 2.973, 2.979, 2.994
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.018, 3.021, 3.026, 3.052, 3.092, 3.143, 3.181, 3.202, 3.209, 3.212, 3.211, 3.209, 3.197, 3.193, 3.185, 3.184, 3.185, 3.187, 3.191, 3.202, 3.211, 3.213, 3.212, 3.203, 3.189, 3.147, 3.099, 3.051, 3.032, 3.031, 3.048, 3.054,
+ 3.019, 3.023, 3.033, 3.066, 3.123, 3.163, 3.196, 3.206, 3.212, 3.212, 3.211, 3.203, 3.193, 3.179, 3.168, 3.159, 3.159, 3.163, 3.174, 3.188, 3.203, 3.208, 3.211, 3.209, 3.195, 3.168, 3.114, 3.064, 3.035, 3.033, 3.044, 3.051,
+ 3.021, 3.028, 3.046, 3.099, 3.156, 3.192, 3.209, 3.215, 3.216, 3.213, 3.203, 3.193, 3.176, 3.159, 3.153, 3.151, 3.149, 3.152, 3.159, 3.171, 3.188, 3.201, 3.209, 3.211, 3.207, 3.189, 3.142, 3.083, 3.042, 3.038, 3.043, 3.046,
+ 3.022, 3.037, 3.065, 3.124, 3.178, 3.206, 3.215, 3.221, 3.218, 3.217, 3.198, 3.179, 3.162, 3.149, 3.138, 3.133, 3.133, 3.136, 3.145, 3.156, 3.174, 3.192, 3.206, 3.215, 3.214, 3.202, 3.159, 3.105, 3.058, 3.042, 3.043, 3.049,
+ 3.024, 3.047, 3.084, 3.151, 3.195, 3.211, 3.219, 3.223, 3.218, 3.208, 3.182, 3.164, 3.149, 3.137, 3.127, 3.119, 3.119, 3.124, 3.134, 3.144, 3.157, 3.178, 3.194, 3.213, 3.215, 3.208, 3.166, 3.124, 3.074, 3.044, 3.044, 3.049,
+ 3.023, 3.058, 3.102, 3.161, 3.201, 3.217, 3.224, 3.223, 3.217, 3.195, 3.174, 3.156, 3.137, 3.125, 3.115, 3.109, 3.109, 3.115, 3.121, 3.131, 3.146, 3.159, 3.186, 3.208, 3.213, 3.211, 3.181, 3.138, 3.084, 3.047, 3.047, 3.049,
+ 3.031, 3.063, 3.126, 3.183, 3.212, 3.224, 3.225, 3.224, 3.216, 3.191, 3.167, 3.143, 3.129, 3.115, 3.105, 3.103, 3.103, 3.107, 3.114, 3.121, 3.131, 3.148, 3.169, 3.199, 3.211, 3.209, 3.186, 3.151, 3.089, 3.051, 3.049, 3.052,
+ 3.033, 3.083, 3.141, 3.201, 3.221, 3.226, 3.226, 3.224, 3.212, 3.187, 3.159, 3.138, 3.119, 3.107, 3.101, 3.098, 3.098, 3.102, 3.107, 3.115, 3.124, 3.138, 3.161, 3.185, 3.207, 3.209, 3.197, 3.162, 3.112, 3.059, 3.056, 3.057,
+ 3.038, 3.092, 3.159, 3.212, 3.225, 3.231, 3.228, 3.224, 3.209, 3.181, 3.152, 3.129, 3.112, 3.103, 3.095, 3.092, 3.093, 3.095, 3.101, 3.108, 3.118, 3.133, 3.152, 3.179, 3.203, 3.209, 3.205, 3.174, 3.124, 3.069, 3.059, 3.058,
+ 3.049, 3.105, 3.176, 3.223, 3.229, 3.231, 3.229, 3.223, 3.206, 3.171, 3.147, 3.125, 3.109, 3.097, 3.091, 3.089, 3.088, 3.091, 3.094, 3.102, 3.111, 3.124, 3.143, 3.169, 3.196, 3.208, 3.207, 3.181, 3.132, 3.079, 3.064, 3.063,
+ 3.055, 3.123, 3.189, 3.226, 3.232, 3.232, 3.229, 3.225, 3.204, 3.169, 3.143, 3.122, 3.108, 3.095, 3.092, 3.089, 3.088, 3.088, 3.092, 3.095, 3.105, 3.117, 3.135, 3.159, 3.191, 3.208, 3.208, 3.189, 3.141, 3.084, 3.064, 3.062,
+ 3.057, 3.127, 3.198, 3.228, 3.233, 3.233, 3.229, 3.225, 3.201, 3.166, 3.139, 3.119, 3.106, 3.096, 3.093, 3.092, 3.088, 3.088, 3.089, 3.093, 3.099, 3.114, 3.129, 3.156, 3.186, 3.208, 3.208, 3.195, 3.143, 3.089, 3.065, 3.064,
+ 3.066, 3.142, 3.209, 3.232, 3.234, 3.233, 3.231, 3.226, 3.198, 3.166, 3.138, 3.117, 3.103, 3.097, 3.095, 3.095, 3.094, 3.089, 3.089, 3.092, 3.097, 3.109, 3.126, 3.155, 3.183, 3.207, 3.207, 3.198, 3.147, 3.091, 3.069, 3.065,
+ 3.072, 3.153, 3.216, 3.231, 3.234, 3.234, 3.229, 3.226, 3.194, 3.165, 3.136, 3.114, 3.101, 3.098, 3.098, 3.104, 3.098, 3.091, 3.088, 3.089, 3.093, 3.103, 3.123, 3.151, 3.181, 3.204, 3.204, 3.197, 3.156, 3.095, 3.069, 3.068,
+ 3.079, 3.159, 3.222, 3.233, 3.236, 3.235, 3.231, 3.226, 3.194, 3.165, 3.133, 3.112, 3.102, 3.099, 3.107, 3.114, 3.111, 3.097, 3.089, 3.089, 3.091, 3.099, 3.121, 3.149, 3.182, 3.202, 3.202, 3.195, 3.156, 3.096, 3.069, 3.068,
+ 3.081, 3.164, 3.226, 3.233, 3.236, 3.235, 3.233, 3.229, 3.199, 3.165, 3.137, 3.113, 3.102, 3.102, 3.111, 3.134, 3.134, 3.103, 3.091, 3.089, 3.092, 3.101, 3.119, 3.147, 3.182, 3.202, 3.202, 3.194, 3.155, 3.095, 3.069, 3.067,
+ 3.085, 3.163, 3.225, 3.236, 3.239, 3.235, 3.234, 3.231, 3.203, 3.169, 3.141, 3.115, 3.103, 3.103, 3.111, 3.134, 3.134, 3.106, 3.092, 3.091, 3.093, 3.103, 3.119, 3.149, 3.185, 3.203, 3.203, 3.193, 3.152, 3.095, 3.068, 3.066,
+ 3.083, 3.168, 3.226, 3.236, 3.241, 3.235, 3.235, 3.231, 3.205, 3.174, 3.144, 3.117, 3.107, 3.103, 3.107, 3.116, 3.109, 3.103, 3.091, 3.091, 3.095, 3.107, 3.123, 3.152, 3.188, 3.204, 3.204, 3.193, 3.151, 3.095, 3.069, 3.066,
+ 3.082, 3.171, 3.228, 3.237, 3.239, 3.235, 3.234, 3.233, 3.217, 3.184, 3.147, 3.119, 3.108, 3.104, 3.103, 3.105, 3.102, 3.095, 3.091, 3.091, 3.097, 3.111, 3.128, 3.157, 3.191, 3.204, 3.204, 3.185, 3.149, 3.094, 3.069, 3.065,
+ 3.086, 3.173, 3.226, 3.237, 3.239, 3.235, 3.234, 3.232, 3.221, 3.185, 3.155, 3.124, 3.112, 3.105, 3.102, 3.099, 3.096, 3.094, 3.092, 3.094, 3.102, 3.114, 3.133, 3.163, 3.197, 3.205, 3.204, 3.183, 3.144, 3.089, 3.068, 3.065,
+ 3.086, 3.166, 3.225, 3.239, 3.239, 3.237, 3.233, 3.231, 3.223, 3.193, 3.165, 3.135, 3.118, 3.108, 3.101, 3.098, 3.095, 3.093, 3.093, 3.099, 3.109, 3.124, 3.145, 3.174, 3.199, 3.204, 3.203, 3.181, 3.132, 3.085, 3.067, 3.062,
+ 3.086, 3.162, 3.224, 3.239, 3.241, 3.236, 3.232, 3.229, 3.224, 3.201, 3.174, 3.147, 3.128, 3.114, 3.103, 3.099, 3.096, 3.095, 3.097, 3.106, 3.116, 3.134, 3.151, 3.182, 3.201, 3.203, 3.201, 3.176, 3.125, 3.078, 3.065, 3.061,
+ 3.077, 3.162, 3.221, 3.239, 3.241, 3.234, 3.229, 3.227, 3.225, 3.207, 3.186, 3.161, 3.137, 3.122, 3.112, 3.102, 3.099, 3.098, 3.106, 3.113, 3.127, 3.139, 3.159, 3.192, 3.204, 3.205, 3.198, 3.167, 3.119, 3.073, 3.062, 3.061,
+ 3.077, 3.161, 3.216, 3.234, 3.236, 3.232, 3.225, 3.225, 3.222, 3.209, 3.194, 3.172, 3.148, 3.132, 3.121, 3.113, 3.107, 3.107, 3.112, 3.124, 3.135, 3.151, 3.175, 3.196, 3.201, 3.201, 3.191, 3.161, 3.114, 3.062, 3.058, 3.057,
+ 3.073, 3.139, 3.201, 3.227, 3.232, 3.227, 3.223, 3.219, 3.216, 3.212, 3.203, 3.181, 3.161, 3.142, 3.129, 3.121, 3.114, 3.114, 3.124, 3.134, 3.145, 3.161, 3.179, 3.196, 3.199, 3.195, 3.182, 3.145, 3.093, 3.052, 3.051, 3.052,
+ 3.066, 3.126, 3.192, 3.218, 3.224, 3.221, 3.218, 3.214, 3.214, 3.209, 3.204, 3.191, 3.174, 3.155, 3.142, 3.129, 3.127, 3.127, 3.136, 3.145, 3.157, 3.175, 3.187, 3.194, 3.196, 3.192, 3.171, 3.134, 3.082, 3.043, 3.042, 3.044,
+ 3.056, 3.114, 3.176, 3.212, 3.219, 3.219, 3.214, 3.209, 3.208, 3.206, 3.203, 3.198, 3.182, 3.171, 3.155, 3.146, 3.144, 3.144, 3.148, 3.156, 3.171, 3.181, 3.188, 3.194, 3.194, 3.187, 3.161, 3.117, 3.066, 3.037, 3.037, 3.044,
+ 3.054, 3.101, 3.162, 3.203, 3.216, 3.215, 3.211, 3.206, 3.203, 3.201, 3.199, 3.197, 3.191, 3.179, 3.171, 3.161, 3.156, 3.156, 3.161, 3.171, 3.179, 3.184, 3.189, 3.192, 3.191, 3.181, 3.142, 3.097, 3.045, 3.032, 3.033, 3.039,
+ 3.041, 3.093, 3.149, 3.194, 3.208, 3.211, 3.208, 3.202, 3.197, 3.197, 3.197, 3.195, 3.191, 3.189, 3.181, 3.176, 3.172, 3.173, 3.178, 3.181, 3.185, 3.187, 3.189, 3.191, 3.189, 3.173, 3.133, 3.085, 3.034, 3.029, 3.031, 3.038,
+ 3.032, 3.079, 3.133, 3.181, 3.197, 3.207, 3.204, 3.198, 3.193, 3.192, 3.189, 3.191, 3.189, 3.187, 3.185, 3.183, 3.183, 3.183, 3.185, 3.188, 3.187, 3.188, 3.189, 3.188, 3.184, 3.164, 3.118, 3.075, 3.031, 3.026, 3.028, 3.039,
+ 3.025, 3.051, 3.099, 3.149, 3.182, 3.193, 3.193, 3.187, 3.181, 3.178, 3.177, 3.177, 3.182, 3.183, 3.183, 3.183, 3.183, 3.184, 3.187, 3.188, 3.186, 3.184, 3.184, 3.181, 3.167, 3.139, 3.098, 3.053, 3.026, 3.024, 3.029, 3.043,
+ 3.016, 3.025, 3.081, 3.122, 3.167, 3.182, 3.185, 3.181, 3.176, 3.171, 3.169, 3.171, 3.174, 3.175, 3.178, 3.178, 3.179, 3.181, 3.185, 3.185, 3.181, 3.179, 3.177, 3.173, 3.151, 3.119, 3.076, 3.031, 3.021, 3.018, 3.024, 3.046
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.503, 1.503, 1.504, 1.515, 1.541, 1.566, 1.587, 1.599, 1.602, 1.603, 1.602, 1.599, 1.595, 1.589, 1.587, 1.586, 1.586, 1.587, 1.589, 1.594, 1.601, 1.604, 1.604, 1.601, 1.589, 1.571, 1.541, 1.517, 1.512, 1.512, 1.522, 1.526,
+ 1.501, 1.502, 1.506, 1.523, 1.557, 1.579, 1.596, 1.603, 1.603, 1.603, 1.601, 1.597, 1.591, 1.582, 1.576, 1.575, 1.574, 1.577, 1.581, 1.588, 1.595, 1.601, 1.603, 1.602, 1.597, 1.578, 1.553, 1.526, 1.512, 1.512, 1.519, 1.526,
+ 1.499, 1.503, 1.512, 1.539, 1.571, 1.593, 1.603, 1.604, 1.604, 1.602, 1.597, 1.591, 1.581, 1.573, 1.568, 1.566, 1.566, 1.568, 1.572, 1.579, 1.587, 1.594, 1.602, 1.603, 1.601, 1.589, 1.566, 1.536, 1.517, 1.516, 1.519, 1.525,
+ 1.499, 1.505, 1.521, 1.553, 1.582, 1.597, 1.604, 1.604, 1.604, 1.601, 1.592, 1.582, 1.573, 1.564, 1.561, 1.558, 1.557, 1.559, 1.564, 1.571, 1.579, 1.588, 1.597, 1.603, 1.603, 1.596, 1.576, 1.545, 1.519, 1.517, 1.518, 1.526,
+ 1.499, 1.509, 1.529, 1.565, 1.591, 1.601, 1.605, 1.604, 1.602, 1.597, 1.586, 1.573, 1.565, 1.558, 1.553, 1.551, 1.551, 1.552, 1.555, 1.563, 1.571, 1.581, 1.592, 1.601, 1.602, 1.599, 1.582, 1.556, 1.528, 1.517, 1.517, 1.526,
+ 1.501, 1.512, 1.539, 1.576, 1.595, 1.603, 1.605, 1.604, 1.601, 1.591, 1.579, 1.567, 1.559, 1.552, 1.548, 1.545, 1.546, 1.548, 1.551, 1.555, 1.563, 1.574, 1.585, 1.598, 1.602, 1.601, 1.589, 1.562, 1.535, 1.519, 1.519, 1.528,
+ 1.501, 1.517, 1.552, 1.587, 1.601, 1.605, 1.605, 1.605, 1.599, 1.588, 1.574, 1.562, 1.553, 1.548, 1.544, 1.543, 1.543, 1.545, 1.547, 1.551, 1.557, 1.567, 1.578, 1.593, 1.601, 1.601, 1.592, 1.571, 1.539, 1.521, 1.521, 1.529,
+ 1.503, 1.524, 1.561, 1.593, 1.605, 1.606, 1.605, 1.603, 1.598, 1.585, 1.569, 1.558, 1.551, 1.545, 1.542, 1.541, 1.541, 1.542, 1.545, 1.547, 1.555, 1.561, 1.573, 1.587, 1.598, 1.601, 1.596, 1.577, 1.546, 1.523, 1.523, 1.529,
+ 1.503, 1.532, 1.568, 1.597, 1.605, 1.606, 1.605, 1.603, 1.596, 1.581, 1.565, 1.555, 1.548, 1.544, 1.541, 1.539, 1.541, 1.541, 1.543, 1.546, 1.549, 1.558, 1.568, 1.583, 1.595, 1.601, 1.599, 1.582, 1.555, 1.525, 1.525, 1.531,
+ 1.508, 1.539, 1.575, 1.601, 1.605, 1.606, 1.605, 1.602, 1.593, 1.577, 1.563, 1.552, 1.546, 1.543, 1.541, 1.539, 1.539, 1.541, 1.542, 1.544, 1.548, 1.553, 1.564, 1.579, 1.592, 1.599, 1.599, 1.585, 1.559, 1.532, 1.531, 1.531,
+ 1.511, 1.544, 1.581, 1.603, 1.606, 1.606, 1.604, 1.603, 1.591, 1.574, 1.561, 1.549, 1.545, 1.542, 1.541, 1.541, 1.541, 1.541, 1.542, 1.543, 1.545, 1.551, 1.561, 1.573, 1.591, 1.599, 1.599, 1.588, 1.563, 1.535, 1.531, 1.531,
+ 1.515, 1.548, 1.589, 1.605, 1.607, 1.607, 1.604, 1.602, 1.591, 1.573, 1.559, 1.549, 1.543, 1.542, 1.541, 1.542, 1.542, 1.542, 1.541, 1.542, 1.543, 1.549, 1.558, 1.571, 1.588, 1.599, 1.599, 1.591, 1.566, 1.537, 1.532, 1.531,
+ 1.517, 1.558, 1.593, 1.606, 1.607, 1.607, 1.605, 1.602, 1.589, 1.572, 1.557, 1.548, 1.543, 1.543, 1.542, 1.544, 1.543, 1.543, 1.541, 1.541, 1.542, 1.546, 1.554, 1.569, 1.585, 1.599, 1.599, 1.593, 1.568, 1.538, 1.533, 1.531,
+ 1.521, 1.563, 1.596, 1.607, 1.608, 1.607, 1.606, 1.603, 1.589, 1.572, 1.557, 1.548, 1.543, 1.543, 1.544, 1.549, 1.546, 1.544, 1.541, 1.541, 1.542, 1.545, 1.553, 1.568, 1.585, 1.598, 1.598, 1.594, 1.571, 1.541, 1.534, 1.531,
+ 1.521, 1.566, 1.599, 1.607, 1.608, 1.607, 1.605, 1.603, 1.591, 1.571, 1.556, 1.547, 1.544, 1.544, 1.551, 1.554, 1.552, 1.546, 1.541, 1.541, 1.541, 1.544, 1.553, 1.567, 1.585, 1.597, 1.598, 1.595, 1.571, 1.541, 1.534, 1.531,
+ 1.523, 1.568, 1.601, 1.607, 1.608, 1.607, 1.606, 1.604, 1.591, 1.572, 1.557, 1.547, 1.545, 1.545, 1.552, 1.566, 1.566, 1.551, 1.542, 1.541, 1.541, 1.544, 1.553, 1.567, 1.586, 1.596, 1.596, 1.593, 1.571, 1.541, 1.533, 1.531,
+ 1.524, 1.569, 1.602, 1.607, 1.608, 1.607, 1.606, 1.604, 1.591, 1.573, 1.559, 1.548, 1.545, 1.546, 1.552, 1.565, 1.565, 1.551, 1.542, 1.541, 1.541, 1.545, 1.553, 1.568, 1.586, 1.597, 1.597, 1.593, 1.571, 1.541, 1.532, 1.532,
+ 1.526, 1.571, 1.602, 1.607, 1.608, 1.606, 1.605, 1.604, 1.593, 1.575, 1.559, 1.549, 1.546, 1.546, 1.549, 1.552, 1.552, 1.546, 1.542, 1.541, 1.542, 1.546, 1.555, 1.569, 1.587, 1.597, 1.597, 1.591, 1.569, 1.539, 1.532, 1.531,
+ 1.526, 1.571, 1.601, 1.608, 1.609, 1.605, 1.605, 1.603, 1.597, 1.579, 1.562, 1.551, 1.546, 1.545, 1.545, 1.549, 1.546, 1.543, 1.542, 1.541, 1.542, 1.547, 1.557, 1.573, 1.588, 1.597, 1.597, 1.589, 1.566, 1.537, 1.531, 1.529,
+ 1.526, 1.569, 1.602, 1.609, 1.609, 1.606, 1.605, 1.604, 1.598, 1.582, 1.567, 1.553, 1.547, 1.545, 1.544, 1.544, 1.544, 1.542, 1.542, 1.542, 1.544, 1.552, 1.559, 1.576, 1.591, 1.597, 1.597, 1.588, 1.563, 1.535, 1.531, 1.529,
+ 1.523, 1.567, 1.601, 1.609, 1.609, 1.606, 1.605, 1.603, 1.599, 1.587, 1.571, 1.558, 1.549, 1.545, 1.544, 1.543, 1.543, 1.542, 1.542, 1.544, 1.548, 1.555, 1.566, 1.581, 1.593, 1.597, 1.597, 1.586, 1.558, 1.534, 1.529, 1.529,
+ 1.523, 1.564, 1.599, 1.609, 1.609, 1.605, 1.604, 1.603, 1.601, 1.592, 1.576, 1.564, 1.553, 1.547, 1.544, 1.543, 1.542, 1.542, 1.544, 1.548, 1.551, 1.561, 1.572, 1.585, 1.594, 1.596, 1.595, 1.581, 1.555, 1.528, 1.527, 1.528,
+ 1.522, 1.561, 1.595, 1.608, 1.608, 1.604, 1.602, 1.601, 1.601, 1.595, 1.582, 1.569, 1.559, 1.552, 1.547, 1.545, 1.543, 1.544, 1.546, 1.551, 1.556, 1.563, 1.576, 1.589, 1.595, 1.596, 1.593, 1.576, 1.551, 1.524, 1.524, 1.528,
+ 1.519, 1.559, 1.591, 1.605, 1.606, 1.603, 1.601, 1.599, 1.601, 1.597, 1.587, 1.576, 1.565, 1.558, 1.552, 1.549, 1.546, 1.547, 1.552, 1.556, 1.561, 1.571, 1.582, 1.593, 1.596, 1.596, 1.591, 1.569, 1.546, 1.521, 1.521, 1.527,
+ 1.516, 1.553, 1.589, 1.602, 1.604, 1.602, 1.599, 1.598, 1.599, 1.598, 1.594, 1.583, 1.572, 1.564, 1.559, 1.553, 1.552, 1.553, 1.556, 1.561, 1.567, 1.578, 1.588, 1.594, 1.596, 1.594, 1.588, 1.567, 1.539, 1.517, 1.517, 1.525,
+ 1.511, 1.548, 1.581, 1.599, 1.602, 1.602, 1.598, 1.597, 1.597, 1.597, 1.595, 1.589, 1.581, 1.571, 1.564, 1.559, 1.559, 1.558, 1.561, 1.567, 1.575, 1.583, 1.591, 1.593, 1.594, 1.591, 1.581, 1.557, 1.529, 1.514, 1.514, 1.521,
+ 1.508, 1.541, 1.576, 1.596, 1.601, 1.601, 1.597, 1.595, 1.594, 1.595, 1.595, 1.592, 1.585, 1.579, 1.571, 1.566, 1.566, 1.566, 1.568, 1.575, 1.582, 1.589, 1.592, 1.593, 1.593, 1.589, 1.575, 1.553, 1.523, 1.511, 1.511, 1.517,
+ 1.505, 1.535, 1.566, 1.591, 1.599, 1.598, 1.596, 1.594, 1.592, 1.592, 1.593, 1.592, 1.589, 1.585, 1.579, 1.575, 1.574, 1.574, 1.577, 1.582, 1.587, 1.591, 1.592, 1.593, 1.592, 1.585, 1.568, 1.541, 1.516, 1.509, 1.509, 1.517,
+ 1.501, 1.528, 1.559, 1.585, 1.595, 1.597, 1.595, 1.593, 1.589, 1.588, 1.591, 1.591, 1.591, 1.589, 1.586, 1.583, 1.582, 1.582, 1.585, 1.588, 1.589, 1.591, 1.592, 1.593, 1.592, 1.582, 1.561, 1.536, 1.512, 1.509, 1.511, 1.517,
+ 1.496, 1.521, 1.549, 1.576, 1.588, 1.594, 1.593, 1.589, 1.586, 1.585, 1.586, 1.588, 1.589, 1.588, 1.588, 1.587, 1.587, 1.587, 1.589, 1.589, 1.591, 1.591, 1.592, 1.592, 1.591, 1.575, 1.555, 1.527, 1.508, 1.507, 1.511, 1.519,
+ 1.495, 1.505, 1.536, 1.563, 1.581, 1.587, 1.588, 1.584, 1.582, 1.578, 1.578, 1.581, 1.583, 1.584, 1.586, 1.587, 1.587, 1.587, 1.588, 1.589, 1.589, 1.591, 1.591, 1.591, 1.584, 1.566, 1.544, 1.518, 1.505, 1.505, 1.509, 1.519,
+ 1.493, 1.496, 1.522, 1.547, 1.569, 1.581, 1.582, 1.581, 1.577, 1.575, 1.573, 1.575, 1.579, 1.581, 1.583, 1.584, 1.584, 1.585, 1.587, 1.587, 1.588, 1.588, 1.588, 1.585, 1.573, 1.556, 1.532, 1.511, 1.504, 1.504, 1.508, 1.523
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 4.461, 4.088, 3.793, 3.651, 3.557, 3.439, 3.248, 2.999, 2.751, 2.527, 2.341, 2.191, 2.069, 1.956, 1.907, 1.907, 1.907, 1.908, 1.946, 2.056, 2.179, 2.328, 2.517, 2.747, 2.998, 3.219, 3.359, 3.436, 3.494, 3.621, 3.906, 4.251,
+ 4.297, 3.982, 3.747, 3.634, 3.531, 3.373, 3.136, 2.863, 2.608, 2.386, 2.209, 2.075, 1.957, 1.873, 1.817, 1.789, 1.789, 1.813, 1.865, 1.947, 2.066, 2.198, 2.378, 2.605, 2.872, 3.132, 3.322, 3.431, 3.485, 3.577, 3.802, 4.079,
+ 4.152, 3.905, 3.717, 3.623, 3.499, 3.296, 3.022, 2.735, 2.478, 2.265, 2.094, 1.957, 1.849, 1.763, 1.709, 1.679, 1.679, 1.703, 1.753, 1.837, 1.947, 2.081, 2.253, 2.472, 2.742, 3.032, 3.271, 3.414, 3.479, 3.545, 3.719, 3.937,
+ 4.039, 3.835, 3.688, 3.596, 3.442, 3.196, 2.899, 2.609, 2.356, 2.153, 1.987, 1.849, 1.748, 1.659, 1.605, 1.577, 1.577, 1.599, 1.649, 1.734, 1.837, 1.973, 2.139, 2.348, 2.612, 2.911, 3.192, 3.379, 3.467, 3.516, 3.649, 3.815,
+ 3.952, 3.784, 3.669, 3.562, 3.369, 3.088, 2.778, 2.491, 2.246, 2.049, 1.888, 1.748, 1.657, 1.561, 1.509, 1.481, 1.481, 1.504, 1.552, 1.642, 1.734, 1.869, 2.033, 2.233, 2.489, 2.792, 3.105, 3.331, 3.445, 3.493, 3.591, 3.721,
+ 3.883, 3.741, 3.648, 3.519, 3.287, 2.977, 2.665, 2.382, 2.148, 1.957, 1.796, 1.659, 1.561, 1.474, 1.422, 1.396, 1.396, 1.415, 1.465, 1.552, 1.643, 1.776, 1.936, 2.131, 2.375, 2.678, 3.004, 3.275, 3.416, 3.469, 3.541, 3.643,
+ 3.829, 3.716, 3.617, 3.466, 3.202, 2.876, 2.558, 2.282, 2.059, 1.872, 1.713, 1.577, 1.474, 1.399, 1.345, 1.319, 1.319, 1.338, 1.389, 1.465, 1.559, 1.689, 1.849, 2.042, 2.275, 2.568, 2.903, 3.204, 3.383, 3.446, 3.496, 3.579,
+ 3.793, 3.685, 3.589, 3.411, 3.119, 2.781, 2.466, 2.199, 1.983, 1.798, 1.639, 1.505, 1.399, 1.339, 1.276, 1.253, 1.253, 1.271, 1.327, 1.389, 1.487, 1.612, 1.769, 1.961, 2.189, 2.471, 2.806, 3.133, 3.342, 3.425, 3.459, 3.527,
+ 3.763, 3.666, 3.561, 3.357, 3.042, 2.698, 2.384, 2.129, 1.918, 1.734, 1.575, 1.443, 1.339, 1.276, 1.217, 1.194, 1.194, 1.214, 1.271, 1.327, 1.423, 1.546, 1.702, 1.891, 2.112, 2.386, 2.718, 3.061, 3.301, 3.402, 3.433, 3.486,
+ 3.745, 3.647, 3.529, 3.302, 2.971, 2.627, 2.318, 2.067, 1.859, 1.677, 1.521, 1.389, 1.287, 1.217, 1.171, 1.145, 1.145, 1.165, 1.214, 1.276, 1.369, 1.491, 1.643, 1.831, 2.048, 2.313, 2.644, 2.995, 3.262, 3.381, 3.412, 3.453,
+ 3.731, 3.635, 3.503, 3.249, 2.911, 2.566, 2.259, 2.017, 1.811, 1.629, 1.475, 1.347, 1.246, 1.171, 1.138, 1.103, 1.103, 1.129, 1.165, 1.231, 1.322, 1.443, 1.595, 1.779, 1.993, 2.251, 2.576, 2.936, 3.223, 3.359, 3.392, 3.425,
+ 3.721, 3.625, 3.481, 3.208, 2.861, 2.515, 2.213, 1.976, 1.773, 1.593, 1.439, 1.313, 1.213, 1.138, 1.103, 1.071, 1.071, 1.101, 1.129, 1.194, 1.286, 1.405, 1.555, 1.736, 1.949, 2.202, 2.521, 2.886, 3.189, 3.338, 3.375, 3.406,
+ 3.716, 3.616, 3.458, 3.171, 2.819, 2.472, 2.176, 1.942, 1.741, 1.563, 1.411, 1.285, 1.186, 1.112, 1.071, 1.051, 1.049, 1.069, 1.103, 1.165, 1.256, 1.376, 1.523, 1.702, 1.913, 2.163, 2.477, 2.843, 3.155, 3.318, 3.358, 3.389,
+ 3.712, 3.609, 3.439, 3.142, 2.787, 2.443, 2.147, 1.918, 1.721, 1.541, 1.391, 1.266, 1.167, 1.094, 1.051, 1.035, 1.035, 1.049, 1.085, 1.145, 1.236, 1.355, 1.499, 1.676, 1.886, 2.136, 2.449, 2.814, 3.135, 3.307, 3.351, 3.378,
+ 3.709, 3.604, 3.422, 3.123, 2.768, 2.419, 2.129, 1.903, 1.706, 1.527, 1.377, 1.253, 1.155, 1.083, 1.035, 1.023, 1.023, 1.035, 1.074, 1.134, 1.224, 1.341, 1.484, 1.661, 1.868, 2.117, 2.429, 2.797, 3.122, 3.301, 3.346, 3.374,
+ 3.711, 3.597, 3.412, 3.114, 2.758, 2.409, 2.119, 1.895, 1.701, 1.523, 1.373, 1.251, 1.153, 1.081, 1.033, 1.001, 1.001, 1.032, 1.073, 1.133, 1.222, 1.338, 1.479, 1.655, 1.861, 2.107, 2.418, 2.787, 3.115, 3.297, 3.343, 3.373,
+ 3.713, 3.597, 3.412, 3.113, 2.758, 2.409, 2.119, 1.893, 1.698, 1.523, 1.373, 1.251, 1.153, 1.081, 1.034, 1.011, 1.011, 1.032, 1.074, 1.134, 1.222, 1.338, 1.479, 1.655, 1.861, 2.107, 2.418, 2.787, 3.116, 3.294, 3.341, 3.371,
+ 3.721, 3.599, 3.414, 3.116, 2.763, 2.418, 2.124, 1.895, 1.704, 1.531, 1.382, 1.259, 1.162, 1.091, 1.048, 1.034, 1.032, 1.046, 1.083, 1.145, 1.232, 1.348, 1.491, 1.664, 1.869, 2.115, 2.428, 2.798, 3.123, 3.294, 3.339, 3.372,
+ 3.727, 3.604, 3.421, 3.132, 2.784, 2.438, 2.141, 1.908, 1.716, 1.547, 1.399, 1.276, 1.178, 1.107, 1.069, 1.048, 1.046, 1.067, 1.101, 1.162, 1.249, 1.366, 1.509, 1.684, 1.886, 2.134, 2.449, 2.821, 3.135, 3.299, 3.341, 3.375,
+ 3.739, 3.613, 3.431, 3.154, 2.813, 2.468, 2.166, 1.931, 1.739, 1.569, 1.424, 1.302, 1.203, 1.129, 1.098, 1.069, 1.069, 1.096, 1.123, 1.185, 1.274, 1.391, 1.536, 1.709, 1.914, 2.162, 2.481, 2.851, 3.156, 3.311, 3.342, 3.378,
+ 3.751, 3.626, 3.449, 3.186, 2.855, 2.509, 2.201, 1.961, 1.768, 1.601, 1.454, 1.333, 1.235, 1.159, 1.129, 1.098, 1.098, 1.123, 1.152, 1.216, 1.307, 1.424, 1.569, 1.744, 1.947, 2.202, 2.526, 2.891, 3.182, 3.322, 3.351, 3.387,
+ 3.772, 3.641, 3.473, 3.221, 2.902, 2.559, 2.248, 1.999, 1.804, 1.639, 1.496, 1.373, 1.274, 1.201, 1.159, 1.133, 1.133, 1.152, 1.191, 1.254, 1.347, 1.466, 1.611, 1.785, 1.989, 2.253, 2.582, 2.939, 3.209, 3.334, 3.361, 3.402,
+ 3.797, 3.663, 3.496, 3.263, 2.959, 2.624, 2.308, 2.049, 1.847, 1.684, 1.542, 1.422, 1.321, 1.252, 1.201, 1.175, 1.175, 1.191, 1.239, 1.298, 1.394, 1.516, 1.658, 1.831, 2.041, 2.313, 2.651, 2.998, 3.244, 3.351, 3.375, 3.422,
+ 3.831, 3.686, 3.523, 3.307, 3.023, 2.698, 2.379, 2.112, 1.902, 1.737, 1.596, 1.476, 1.378, 1.315, 1.252, 1.227, 1.227, 1.239, 1.296, 1.355, 1.451, 1.572, 1.715, 1.888, 2.103, 2.386, 2.731, 3.063, 3.279, 3.367, 3.393, 3.456,
+ 3.871, 3.714, 3.551, 3.355, 3.091, 2.781, 2.465, 2.186, 1.965, 1.795, 1.654, 1.538, 1.442, 1.378, 1.318, 1.291, 1.291, 1.304, 1.355, 1.424, 1.515, 1.634, 1.778, 1.952, 2.178, 2.479, 2.821, 3.129, 3.314, 3.381, 3.419, 3.491,
+ 3.925, 3.749, 3.582, 3.401, 3.156, 2.866, 2.559, 2.274, 2.039, 1.859, 1.718, 1.604, 1.513, 1.442, 1.389, 1.363, 1.363, 1.379, 1.424, 1.501, 1.586, 1.702, 1.847, 2.028, 2.269, 2.579, 2.913, 3.193, 3.343, 3.396, 3.447, 3.539,
+ 3.994, 3.794, 3.619, 3.442, 3.231, 2.961, 2.662, 2.375, 2.129, 1.938, 1.789, 1.675, 1.591, 1.513, 1.465, 1.439, 1.439, 1.457, 1.501, 1.582, 1.661, 1.777, 1.925, 2.118, 2.375, 2.691, 3.008, 3.251, 3.371, 3.414, 3.479, 3.598,
+ 4.082, 3.845, 3.656, 3.489, 3.298, 3.053, 2.771, 2.485, 2.232, 2.028, 1.871, 1.751, 1.672, 1.591, 1.544, 1.521, 1.521, 1.539, 1.582, 1.661, 1.741, 1.859, 2.014, 2.224, 2.495, 2.806, 3.098, 3.301, 3.392, 3.431, 3.518, 3.677,
+ 4.196, 3.911, 3.698, 3.534, 3.363, 3.146, 2.881, 2.604, 2.348, 2.132, 1.964, 1.836, 1.751, 1.672, 1.628, 1.606, 1.606, 1.624, 1.665, 1.741, 1.827, 1.951, 2.121, 2.344, 2.624, 2.923, 3.177, 3.336, 3.405, 3.447, 3.567, 3.776,
+ 4.341, 4.002, 3.744, 3.575, 3.415, 3.229, 2.989, 2.729, 2.475, 2.251, 2.071, 1.936, 1.836, 1.759, 1.713, 1.693, 1.693, 1.711, 1.753, 1.827, 1.925, 2.058, 2.243, 2.481, 2.758, 3.027, 3.238, 3.361, 3.409, 3.466, 3.637, 3.896,
+ 4.516, 4.123, 3.804, 3.621, 3.468, 3.308, 3.096, 2.855, 2.609, 2.385, 2.194, 2.045, 1.936, 1.857, 1.807, 1.784, 1.784, 1.803, 1.852, 1.925, 2.033, 2.183, 2.382, 2.623, 2.886, 3.121, 3.284, 3.372, 3.413, 3.494, 3.727, 4.048,
+ 4.716, 4.264, 3.875, 3.674, 3.523, 3.376, 3.189, 2.966, 2.733, 2.511, 2.315, 2.158, 2.039, 1.936, 1.875, 1.872, 1.872, 1.872, 1.925, 2.028, 2.148, 2.308, 2.513, 2.751, 2.994, 3.191, 3.319, 3.384, 3.427, 3.541, 3.838, 4.221
+ ],
+ "sigma": 0.00152,
+ "sigma_Cb": 0.00172
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2868,
+ "ccm":
+ [
+ 1.58923, -0.36649, -0.22273,
+ -0.43591, 1.84858, -0.41268,
+ 0.02948, -0.77666, 1.74718
+ ]
+ },
+ {
+ "ct": 2965,
+ "ccm":
+ [
+ 1.73397, -0.42794, -0.30603,
+ -0.36504, 1.72431, -0.35926,
+ 0.12765, -1.10933, 1.98168
+ ]
+ },
+ {
+ "ct": 3603,
+ "ccm":
+ [
+ 1.61787, -0.42704, -0.19084,
+ -0.37819, 1.74588, -0.36769,
+ 0.00961, -0.59807, 1.58847
+ ]
+ },
+ {
+ "ct": 4620,
+ "ccm":
+ [
+ 1.55581, -0.35422, -0.20158,
+ -0.31805, 1.79309, -0.47505,
+ -0.01256, -0.54489, 1.55746
+ ]
+ },
+ {
+ "ct": 5901,
+ "ccm":
+ [
+ 1.64439, -0.48855, -0.15585,
+ -0.29149, 1.67122, -0.37972,
+ -0.03111, -0.44052, 1.47163
+ ]
+ },
+ {
+ "ct": 7610,
+ "ccm":
+ [
+ 1.48667, -0.26072, -0.22595,
+ -0.21815, 1.86724, -0.64909,
+ -0.00985, -0.64485, 1.65471
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.af":
+ {
+ "ranges":
+ {
+ "normal":
+ {
+ "min": 0.0,
+ "max": 12.0,
+ "default": 1.0
+ },
+ "macro":
+ {
+ "min": 4.0,
+ "max": 32.0,
+ "default": 6.0
+ }
+ },
+ "speeds":
+ {
+ "normal":
+ {
+ "step_coarse": 2.0,
+ "step_fine": 0.5,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.03,
+ "pdaf_squelch": 0.2,
+ "max_slew": 4.0,
+ "pdaf_frames": 20,
+ "dropout_frames": 6,
+ "step_frames": 4
+ },
+ "fast":
+ {
+ "step_coarse": 2.0,
+ "step_fine": 0.5,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.05,
+ "pdaf_squelch": 0.2,
+ "max_slew": 5.0,
+ "pdaf_frames": 16,
+ "dropout_frames": 6,
+ "step_frames": 4
+ }
+ },
+ "conf_epsilon": 8,
+ "conf_thresh": 12,
+ "conf_clip": 512,
+ "skip_frames": 5,
+ "map": [ 0.0, 420, 35.0, 920 ]
+ }
+ },
+ {
+ "rpi.cac":
+ {
+ "strength": 1.0,
+ "lut_rx":
+ [
+ -0.11, -0.11, -0.17, -0.11, -0.0, 0.08, 0.13, 0.1, 0.1,
+ -0.07, -0.17, -0.16, -0.08, -0.02, 0.06, 0.15, 0.15, 0.07,
+ -0.11, -0.21, -0.17, -0.07, -0.02, 0.03, 0.14, 0.17, 0.14,
+ -0.19, -0.22, -0.16, -0.07, -0.01, 0.03, 0.12, 0.19, 0.21,
+ -0.19, -0.23, -0.16, -0.06, -0.01, 0.04, 0.13, 0.19, 0.24,
+ -0.18, -0.22, -0.17, -0.05, -0.01, 0.05, 0.15, 0.2, 0.21,
+ -0.14, -0.19, -0.17, -0.06, 0.0, 0.07, 0.15, 0.18, 0.15,
+ -0.09, -0.14, -0.17, -0.08, 0.0, 0.09, 0.15, 0.14, 0.06,
+ -0.09, -0.08, -0.15, -0.12, -0.0, 0.12, 0.16, 0.07, 0.06
+ ],
+ "lut_ry":
+ [
+ -0.11, -0.11, -0.21, -0.21, -0.19, -0.21, -0.19, -0.11, 0.11,
+ -0.02, -0.1, -0.14, -0.14, -0.13, -0.14, -0.15, -0.11, 0.03,
+ -0.03, -0.09, -0.12, -0.12, -0.12, -0.11, -0.12, -0.1, -0.02,
+ -0.05, -0.07, -0.1, -0.11, -0.11, -0.09, -0.08, -0.07, -0.03,
+ -0.03, -0.02, -0.04, -0.05, -0.05, -0.05, -0.02, -0.01, -0.02,
+ 0.01, 0.03, 0.0, -0.02, -0.02, -0.01, 0.02, 0.03, 0.01,
+ 0.01, 0.06, 0.06, 0.0, -0.01, 0.02, 0.06, 0.06, 0.01,
+ -0.0, 0.08, 0.12, 0.08, 0.05, 0.08, 0.1, 0.08, -0.0,
+ 0.11, 0.09, 0.19, 0.19, 0.15, 0.19, 0.18, 0.12, 0.11
+ ],
+ "lut_bx":
+ [
+ -0.3, -0.28, -0.34, -0.19, -0.01, 0.13, 0.27, 0.21, 0.2,
+ -0.24, -0.38, -0.38, -0.24, -0.02, 0.19, 0.31, 0.34, 0.2,
+ -0.4, -0.47, -0.44, -0.26, -0.03, 0.21, 0.35, 0.39, 0.38,
+ -0.52, -0.49, -0.46, -0.27, -0.02, 0.22, 0.38, 0.46, 0.54,
+ -0.56, -0.51, -0.44, -0.27, -0.02, 0.23, 0.39, 0.47, 0.64,
+ -0.52, -0.49, -0.43, -0.27, -0.02, 0.21, 0.39, 0.45, 0.59,
+ -0.39, -0.41, -0.39, -0.26, -0.02, 0.2, 0.37, 0.39, 0.47,
+ -0.2, -0.34, -0.36, -0.23, -0.03, 0.18, 0.33, 0.28, 0.19,
+ -0.2, -0.21, -0.32, -0.18, -0.04, 0.14, 0.28, 0.17, 0.2
+ ],
+ "lut_by":
+ [
+ -0.25, -0.23, -0.31, -0.36, -0.41, -0.36, -0.32, -0.19, -0.2,
+ -0.09, -0.18, -0.27, -0.32, -0.35, -0.31, -0.23, -0.17, 0.01,
+ -0.13, -0.14, -0.19, -0.2, -0.2, -0.21, -0.17, -0.12, -0.04,
+ -0.1, -0.06, -0.06, -0.07, -0.05, -0.05, -0.05, -0.04, -0.07,
+ -0.03, 0.05, 0.06, 0.07, 0.07, 0.08, 0.06, 0.03, -0.05,
+ 0.03, 0.12, 0.18, 0.19, 0.19, 0.2, 0.17, 0.11, -0.03,
+ 0.04, 0.22, 0.3, 0.37, 0.42, 0.37, 0.3, 0.21, -0.02,
+ 0.05, 0.27, 0.39, 0.5, 0.57, 0.51, 0.41, 0.25, -0.09,
+ 0.25, 0.33, 0.52, 0.65, 0.8, 0.72, 0.56, 0.33, -0.25
+ ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "power_min": 0.7,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "power_min": 0.7,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/imx708_wide_noir.json b/src/ipa/rpi/pisp/data/imx708_wide_noir.json
new file mode 100644
index 00000000..75d1149b
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/imx708_wide_noir.json
@@ -0,0 +1,1148 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 41985,
+ "reference_gain": 1.12,
+ "reference_aperture": 1.0,
+ "reference_lux": 810,
+ "reference_Y": 13859
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.9
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 206,
+ "slope": 0.00324
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.65,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.717, 1.712, 1.703, 1.692, 1.674, 1.653, 1.638, 1.624, 1.613, 1.601, 1.589, 1.579, 1.575, 1.573, 1.571, 1.571, 1.571, 1.571, 1.572, 1.577, 1.583, 1.593, 1.605, 1.618, 1.636, 1.653, 1.677, 1.699, 1.715, 1.722, 1.731, 1.733,
+ 1.714, 1.706, 1.696, 1.678, 1.658, 1.639, 1.627, 1.614, 1.602, 1.591, 1.579, 1.572, 1.569, 1.566, 1.565, 1.564, 1.564, 1.565, 1.567, 1.571, 1.578, 1.585, 1.595, 1.607, 1.622, 1.641, 1.661, 1.685, 1.706, 1.717, 1.724, 1.732,
+ 1.708, 1.698, 1.688, 1.667, 1.647, 1.629, 1.619, 1.606, 1.593, 1.581, 1.572, 1.565, 1.561, 1.559, 1.559, 1.559, 1.559, 1.561, 1.562, 1.566, 1.571, 1.577, 1.587, 1.598, 1.612, 1.629, 1.649, 1.674, 1.697, 1.713, 1.721, 1.728,
+ 1.706, 1.695, 1.681, 1.655, 1.636, 1.622, 1.613, 1.597, 1.585, 1.572, 1.564, 1.559, 1.558, 1.556, 1.555, 1.555, 1.556, 1.556, 1.558, 1.561, 1.566, 1.571, 1.578, 1.591, 1.605, 1.619, 1.638, 1.662, 1.691, 1.708, 1.719, 1.726,
+ 1.706, 1.692, 1.675, 1.649, 1.629, 1.615, 1.607, 1.592, 1.575, 1.565, 1.559, 1.554, 1.552, 1.551, 1.551, 1.551, 1.551, 1.552, 1.554, 1.557, 1.561, 1.566, 1.573, 1.582, 1.596, 1.611, 1.627, 1.652, 1.681, 1.705, 1.717, 1.724,
+ 1.703, 1.686, 1.664, 1.639, 1.625, 1.612, 1.599, 1.585, 1.569, 1.559, 1.554, 1.549, 1.548, 1.548, 1.546, 1.546, 1.546, 1.547, 1.549, 1.553, 1.557, 1.563, 1.569, 1.576, 1.591, 1.603, 1.621, 1.644, 1.674, 1.698, 1.714, 1.724,
+ 1.702, 1.681, 1.659, 1.635, 1.621, 1.607, 1.594, 1.579, 1.565, 1.554, 1.549, 1.546, 1.544, 1.543, 1.543, 1.542, 1.543, 1.543, 1.544, 1.549, 1.553, 1.558, 1.564, 1.572, 1.584, 1.599, 1.614, 1.639, 1.667, 1.695, 1.712, 1.724,
+ 1.697, 1.678, 1.655, 1.631, 1.616, 1.602, 1.589, 1.575, 1.559, 1.551, 1.545, 1.543, 1.542, 1.542, 1.541, 1.539, 1.539, 1.539, 1.542, 1.544, 1.551, 1.555, 1.562, 1.571, 1.579, 1.594, 1.611, 1.631, 1.661, 1.691, 1.712, 1.724,
+ 1.695, 1.674, 1.651, 1.629, 1.615, 1.599, 1.584, 1.568, 1.554, 1.545, 1.542, 1.541, 1.539, 1.539, 1.538, 1.538, 1.538, 1.539, 1.539, 1.543, 1.548, 1.554, 1.559, 1.568, 1.576, 1.592, 1.608, 1.629, 1.655, 1.689, 1.709, 1.723,
+ 1.691, 1.671, 1.648, 1.627, 1.613, 1.597, 1.581, 1.564, 1.551, 1.543, 1.539, 1.538, 1.538, 1.537, 1.536, 1.535, 1.536, 1.538, 1.539, 1.542, 1.546, 1.551, 1.558, 1.564, 1.575, 1.588, 1.604, 1.627, 1.654, 1.686, 1.709, 1.724,
+ 1.689, 1.667, 1.643, 1.626, 1.612, 1.594, 1.579, 1.559, 1.549, 1.541, 1.536, 1.535, 1.535, 1.535, 1.534, 1.533, 1.534, 1.536, 1.538, 1.541, 1.545, 1.549, 1.555, 1.563, 1.573, 1.585, 1.602, 1.624, 1.651, 1.683, 1.709, 1.725,
+ 1.686, 1.665, 1.641, 1.623, 1.609, 1.594, 1.576, 1.559, 1.546, 1.538, 1.535, 1.534, 1.533, 1.532, 1.531, 1.531, 1.532, 1.534, 1.537, 1.539, 1.544, 1.549, 1.554, 1.562, 1.572, 1.585, 1.601, 1.622, 1.651, 1.682, 1.711, 1.726,
+ 1.686, 1.661, 1.639, 1.623, 1.609, 1.592, 1.574, 1.557, 1.545, 1.537, 1.534, 1.533, 1.532, 1.531, 1.529, 1.528, 1.529, 1.532, 1.537, 1.539, 1.542, 1.548, 1.553, 1.562, 1.571, 1.584, 1.601, 1.621, 1.649, 1.682, 1.711, 1.726,
+ 1.685, 1.661, 1.638, 1.624, 1.609, 1.592, 1.574, 1.557, 1.544, 1.536, 1.533, 1.532, 1.531, 1.529, 1.527, 1.522, 1.526, 1.531, 1.536, 1.539, 1.542, 1.547, 1.553, 1.562, 1.571, 1.583, 1.601, 1.621, 1.648, 1.682, 1.711, 1.726,
+ 1.684, 1.658, 1.638, 1.624, 1.611, 1.592, 1.573, 1.556, 1.543, 1.536, 1.532, 1.531, 1.529, 1.528, 1.522, 1.517, 1.519, 1.527, 1.535, 1.539, 1.541, 1.547, 1.553, 1.562, 1.571, 1.583, 1.601, 1.622, 1.647, 1.681, 1.711, 1.727,
+ 1.681, 1.658, 1.641, 1.624, 1.611, 1.593, 1.573, 1.555, 1.541, 1.535, 1.532, 1.529, 1.529, 1.527, 1.517, 1.506, 1.506, 1.522, 1.534, 1.538, 1.541, 1.546, 1.552, 1.562, 1.569, 1.583, 1.601, 1.622, 1.646, 1.679, 1.709, 1.728,
+ 1.679, 1.656, 1.639, 1.624, 1.611, 1.595, 1.575, 1.556, 1.541, 1.534, 1.531, 1.529, 1.529, 1.527, 1.517, 1.507, 1.507, 1.522, 1.533, 1.538, 1.539, 1.546, 1.552, 1.561, 1.569, 1.584, 1.601, 1.622, 1.647, 1.681, 1.709, 1.726,
+ 1.678, 1.656, 1.638, 1.625, 1.612, 1.597, 1.577, 1.557, 1.542, 1.534, 1.529, 1.529, 1.528, 1.527, 1.522, 1.516, 1.519, 1.525, 1.533, 1.537, 1.539, 1.545, 1.552, 1.561, 1.571, 1.584, 1.601, 1.623, 1.649, 1.681, 1.709, 1.726,
+ 1.679, 1.654, 1.639, 1.626, 1.613, 1.598, 1.578, 1.558, 1.543, 1.534, 1.529, 1.529, 1.529, 1.528, 1.527, 1.522, 1.525, 1.528, 1.533, 1.536, 1.539, 1.546, 1.553, 1.561, 1.571, 1.586, 1.602, 1.623, 1.651, 1.683, 1.712, 1.726,
+ 1.677, 1.655, 1.641, 1.628, 1.615, 1.599, 1.581, 1.562, 1.545, 1.535, 1.531, 1.529, 1.529, 1.528, 1.527, 1.527, 1.528, 1.531, 1.533, 1.536, 1.539, 1.545, 1.552, 1.561, 1.572, 1.588, 1.607, 1.626, 1.654, 1.686, 1.716, 1.729,
+ 1.676, 1.655, 1.642, 1.629, 1.617, 1.602, 1.586, 1.564, 1.546, 1.536, 1.531, 1.529, 1.529, 1.529, 1.529, 1.529, 1.529, 1.532, 1.534, 1.536, 1.539, 1.547, 1.553, 1.563, 1.576, 1.591, 1.609, 1.627, 1.655, 1.688, 1.716, 1.729,
+ 1.676, 1.658, 1.641, 1.631, 1.617, 1.605, 1.588, 1.569, 1.553, 1.539, 1.532, 1.531, 1.529, 1.529, 1.529, 1.529, 1.531, 1.532, 1.534, 1.537, 1.541, 1.547, 1.553, 1.564, 1.578, 1.594, 1.613, 1.632, 1.659, 1.691, 1.717, 1.728,
+ 1.676, 1.658, 1.642, 1.631, 1.619, 1.608, 1.592, 1.575, 1.556, 1.542, 1.533, 1.531, 1.529, 1.529, 1.529, 1.531, 1.531, 1.532, 1.534, 1.537, 1.542, 1.548, 1.556, 1.567, 1.582, 1.598, 1.616, 1.638, 1.661, 1.693, 1.717, 1.729,
+ 1.678, 1.661, 1.644, 1.632, 1.621, 1.611, 1.596, 1.579, 1.561, 1.546, 1.536, 1.532, 1.531, 1.531, 1.531, 1.531, 1.532, 1.533, 1.535, 1.538, 1.544, 1.549, 1.559, 1.569, 1.587, 1.604, 1.618, 1.639, 1.669, 1.697, 1.718, 1.731,
+ 1.679, 1.662, 1.648, 1.635, 1.625, 1.615, 1.602, 1.586, 1.569, 1.552, 1.541, 1.535, 1.532, 1.532, 1.531, 1.532, 1.533, 1.534, 1.537, 1.541, 1.546, 1.552, 1.562, 1.576, 1.592, 1.608, 1.622, 1.647, 1.673, 1.703, 1.721, 1.734,
+ 1.684, 1.664, 1.649, 1.637, 1.627, 1.618, 1.606, 1.593, 1.576, 1.561, 1.547, 1.539, 1.535, 1.533, 1.533, 1.533, 1.534, 1.536, 1.539, 1.543, 1.549, 1.555, 1.568, 1.583, 1.596, 1.612, 1.629, 1.651, 1.681, 1.706, 1.723, 1.734,
+ 1.689, 1.669, 1.649, 1.639, 1.629, 1.621, 1.609, 1.597, 1.585, 1.567, 1.554, 1.546, 1.539, 1.536, 1.535, 1.535, 1.537, 1.538, 1.542, 1.546, 1.553, 1.562, 1.572, 1.589, 1.603, 1.619, 1.635, 1.658, 1.686, 1.708, 1.726, 1.736,
+ 1.692, 1.673, 1.655, 1.644, 1.634, 1.624, 1.614, 1.604, 1.592, 1.577, 1.566, 1.554, 1.546, 1.542, 1.538, 1.538, 1.539, 1.542, 1.546, 1.552, 1.559, 1.568, 1.581, 1.596, 1.609, 1.625, 1.642, 1.664, 1.693, 1.714, 1.727, 1.736,
+ 1.695, 1.679, 1.662, 1.647, 1.638, 1.631, 1.623, 1.612, 1.601, 1.589, 1.577, 1.565, 1.555, 1.549, 1.546, 1.545, 1.546, 1.548, 1.552, 1.559, 1.568, 1.579, 1.593, 1.604, 1.618, 1.632, 1.648, 1.676, 1.701, 1.718, 1.728, 1.739,
+ 1.699, 1.684, 1.667, 1.654, 1.644, 1.635, 1.629, 1.621, 1.609, 1.599, 1.589, 1.578, 1.568, 1.559, 1.556, 1.554, 1.554, 1.557, 1.563, 1.569, 1.578, 1.589, 1.599, 1.612, 1.625, 1.641, 1.661, 1.685, 1.707, 1.722, 1.734, 1.742,
+ 1.703, 1.691, 1.672, 1.658, 1.648, 1.639, 1.634, 1.628, 1.618, 1.606, 1.598, 1.589, 1.579, 1.573, 1.568, 1.567, 1.567, 1.568, 1.571, 1.578, 1.587, 1.597, 1.607, 1.618, 1.632, 1.651, 1.672, 1.694, 1.715, 1.728, 1.737, 1.742,
+ 1.707, 1.691, 1.676, 1.662, 1.651, 1.643, 1.638, 1.631, 1.622, 1.614, 1.604, 1.596, 1.589, 1.579, 1.575, 1.573, 1.573, 1.574, 1.578, 1.586, 1.589, 1.598, 1.609, 1.625, 1.638, 1.657, 1.679, 1.701, 1.719, 1.728, 1.738, 1.742
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 2.939, 2.935, 2.916, 2.895, 2.856, 2.825, 2.797, 2.777, 2.761, 2.741, 2.726, 2.709, 2.707, 2.704, 2.702, 2.702, 2.703, 2.706, 2.708, 2.709, 2.719, 2.735, 2.753, 2.776, 2.801, 2.832, 2.874, 2.915, 2.939, 2.943, 2.953, 2.961,
+ 2.936, 2.923, 2.901, 2.863, 2.829, 2.801, 2.781, 2.763, 2.743, 2.732, 2.712, 2.701, 2.696, 2.692, 2.691, 2.691, 2.693, 2.694, 2.696, 2.701, 2.709, 2.725, 2.741, 2.758, 2.779, 2.811, 2.838, 2.879, 2.919, 2.939, 2.948, 2.959,
+ 2.929, 2.909, 2.887, 2.847, 2.808, 2.783, 2.765, 2.748, 2.732, 2.713, 2.699, 2.691, 2.687, 2.686, 2.685, 2.685, 2.687, 2.689, 2.691, 2.694, 2.701, 2.709, 2.725, 2.745, 2.763, 2.786, 2.818, 2.863, 2.907, 2.933, 2.941, 2.955,
+ 2.929, 2.903, 2.875, 2.825, 2.791, 2.769, 2.755, 2.737, 2.718, 2.701, 2.688, 2.683, 2.681, 2.679, 2.681, 2.679, 2.681, 2.682, 2.685, 2.689, 2.694, 2.701, 2.711, 2.737, 2.754, 2.772, 2.803, 2.844, 2.894, 2.931, 2.939, 2.953,
+ 2.926, 2.895, 2.862, 2.816, 2.782, 2.759, 2.744, 2.727, 2.709, 2.691, 2.679, 2.673, 2.671, 2.669, 2.669, 2.669, 2.671, 2.674, 2.678, 2.681, 2.685, 2.694, 2.707, 2.725, 2.739, 2.762, 2.786, 2.829, 2.879, 2.919, 2.942, 2.952,
+ 2.919, 2.886, 2.846, 2.797, 2.772, 2.751, 2.737, 2.719, 2.694, 2.679, 2.672, 2.666, 2.664, 2.661, 2.659, 2.658, 2.661, 2.664, 2.669, 2.673, 2.678, 2.685, 2.696, 2.715, 2.728, 2.749, 2.774, 2.808, 2.866, 2.909, 2.936, 2.951,
+ 2.904, 2.877, 2.835, 2.789, 2.763, 2.744, 2.728, 2.712, 2.686, 2.672, 2.664, 2.657, 2.654, 2.654, 2.652, 2.653, 2.654, 2.657, 2.661, 2.666, 2.672, 2.678, 2.688, 2.703, 2.721, 2.742, 2.762, 2.797, 2.851, 2.902, 2.928, 2.949,
+ 2.901, 2.869, 2.825, 2.781, 2.756, 2.738, 2.721, 2.698, 2.679, 2.665, 2.656, 2.652, 2.649, 2.648, 2.648, 2.648, 2.649, 2.651, 2.654, 2.659, 2.667, 2.675, 2.683, 2.699, 2.711, 2.736, 2.754, 2.789, 2.838, 2.896, 2.926, 2.948,
+ 2.899, 2.862, 2.815, 2.774, 2.752, 2.734, 2.717, 2.689, 2.669, 2.658, 2.651, 2.646, 2.645, 2.643, 2.643, 2.644, 2.645, 2.646, 2.649, 2.654, 2.661, 2.669, 2.681, 2.693, 2.707, 2.729, 2.751, 2.782, 2.834, 2.887, 2.924, 2.947,
+ 2.898, 2.853, 2.812, 2.771, 2.751, 2.731, 2.711, 2.686, 2.663, 2.653, 2.646, 2.642, 2.641, 2.642, 2.642, 2.641, 2.641, 2.641, 2.646, 2.651, 2.657, 2.667, 2.678, 2.693, 2.705, 2.728, 2.746, 2.781, 2.829, 2.885, 2.924, 2.951,
+ 2.896, 2.851, 2.807, 2.771, 2.752, 2.729, 2.709, 2.681, 2.661, 2.649, 2.643, 2.641, 2.639, 2.639, 2.638, 2.636, 2.637, 2.638, 2.644, 2.649, 2.657, 2.666, 2.676, 2.688, 2.705, 2.725, 2.745, 2.777, 2.827, 2.884, 2.927, 2.951,
+ 2.891, 2.846, 2.803, 2.771, 2.749, 2.728, 2.706, 2.677, 2.658, 2.647, 2.641, 2.637, 2.637, 2.636, 2.636, 2.633, 2.632, 2.635, 2.643, 2.649, 2.656, 2.665, 2.675, 2.688, 2.704, 2.719, 2.744, 2.776, 2.822, 2.881, 2.927, 2.958,
+ 2.887, 2.841, 2.797, 2.769, 2.749, 2.729, 2.704, 2.674, 2.655, 2.645, 2.638, 2.635, 2.633, 2.632, 2.631, 2.625, 2.627, 2.631, 2.639, 2.649, 2.654, 2.662, 2.673, 2.686, 2.701, 2.718, 2.742, 2.773, 2.822, 2.881, 2.926, 2.958,
+ 2.883, 2.837, 2.796, 2.769, 2.749, 2.729, 2.701, 2.673, 2.653, 2.641, 2.636, 2.632, 2.631, 2.629, 2.623, 2.612, 2.619, 2.627, 2.637, 2.648, 2.652, 2.659, 2.671, 2.688, 2.699, 2.719, 2.742, 2.774, 2.821, 2.882, 2.927, 2.961,
+ 2.881, 2.832, 2.795, 2.769, 2.751, 2.729, 2.701, 2.672, 2.652, 2.639, 2.633, 2.631, 2.628, 2.625, 2.611, 2.599, 2.607, 2.619, 2.635, 2.644, 2.652, 2.659, 2.669, 2.686, 2.698, 2.719, 2.743, 2.775, 2.822, 2.881, 2.926, 2.961,
+ 2.879, 2.829, 2.793, 2.771, 2.751, 2.731, 2.701, 2.672, 2.651, 2.639, 2.632, 2.628, 2.626, 2.621, 2.601, 2.581, 2.581, 2.611, 2.631, 2.642, 2.648, 2.657, 2.669, 2.685, 2.699, 2.721, 2.743, 2.776, 2.819, 2.879, 2.927, 2.961,
+ 2.876, 2.829, 2.796, 2.773, 2.752, 2.731, 2.705, 2.672, 2.651, 2.637, 2.631, 2.627, 2.625, 2.619, 2.601, 2.581, 2.581, 2.611, 2.629, 2.641, 2.647, 2.658, 2.669, 2.685, 2.697, 2.721, 2.746, 2.777, 2.822, 2.881, 2.929, 2.964,
+ 2.874, 2.827, 2.796, 2.775, 2.755, 2.733, 2.708, 2.674, 2.649, 2.635, 2.629, 2.626, 2.624, 2.621, 2.609, 2.601, 2.606, 2.615, 2.629, 2.638, 2.645, 2.657, 2.669, 2.682, 2.699, 2.722, 2.747, 2.778, 2.822, 2.881, 2.931, 2.964,
+ 2.871, 2.827, 2.797, 2.776, 2.761, 2.734, 2.711, 2.679, 2.651, 2.636, 2.628, 2.626, 2.624, 2.621, 2.618, 2.611, 2.614, 2.619, 2.628, 2.639, 2.644, 2.657, 2.668, 2.683, 2.698, 2.723, 2.749, 2.782, 2.824, 2.882, 2.933, 2.965,
+ 2.869, 2.825, 2.797, 2.777, 2.765, 2.741, 2.718, 2.683, 2.655, 2.638, 2.627, 2.625, 2.624, 2.623, 2.621, 2.618, 2.618, 2.624, 2.629, 2.639, 2.644, 2.657, 2.669, 2.684, 2.701, 2.725, 2.755, 2.782, 2.829, 2.887, 2.937, 2.965,
+ 2.871, 2.826, 2.799, 2.776, 2.765, 2.744, 2.723, 2.689, 2.659, 2.639, 2.629, 2.626, 2.626, 2.624, 2.624, 2.622, 2.624, 2.627, 2.632, 2.639, 2.646, 2.657, 2.671, 2.687, 2.706, 2.732, 2.757, 2.789, 2.836, 2.893, 2.941, 2.965,
+ 2.869, 2.831, 2.803, 2.778, 2.766, 2.748, 2.729, 2.697, 2.667, 2.645, 2.632, 2.628, 2.625, 2.625, 2.625, 2.625, 2.627, 2.629, 2.634, 2.638, 2.648, 2.661, 2.673, 2.688, 2.711, 2.741, 2.762, 2.797, 2.843, 2.901, 2.943, 2.964,
+ 2.872, 2.837, 2.802, 2.781, 2.768, 2.753, 2.734, 2.702, 2.674, 2.647, 2.634, 2.629, 2.626, 2.625, 2.625, 2.627, 2.629, 2.632, 2.635, 2.639, 2.649, 2.663, 2.676, 2.694, 2.719, 2.746, 2.771, 2.799, 2.851, 2.905, 2.947, 2.969,
+ 2.871, 2.837, 2.805, 2.786, 2.771, 2.755, 2.739, 2.714, 2.685, 2.655, 2.639, 2.631, 2.626, 2.625, 2.626, 2.628, 2.629, 2.632, 2.634, 2.642, 2.651, 2.663, 2.679, 2.701, 2.726, 2.756, 2.773, 2.809, 2.861, 2.913, 2.949, 2.968,
+ 2.876, 2.841, 2.808, 2.789, 2.775, 2.759, 2.744, 2.719, 2.693, 2.664, 2.648, 2.636, 2.629, 2.627, 2.627, 2.629, 2.631, 2.633, 2.637, 2.645, 2.653, 2.666, 2.682, 2.708, 2.734, 2.759, 2.779, 2.815, 2.868, 2.918, 2.951, 2.971,
+ 2.882, 2.845, 2.816, 2.791, 2.778, 2.766, 2.748, 2.733, 2.707, 2.681, 2.656, 2.643, 2.636, 2.632, 2.631, 2.632, 2.633, 2.637, 2.643, 2.648, 2.659, 2.672, 2.691, 2.719, 2.747, 2.765, 2.791, 2.829, 2.881, 2.931, 2.952, 2.969,
+ 2.889, 2.855, 2.819, 2.799, 2.782, 2.769, 2.755, 2.741, 2.717, 2.691, 2.672, 2.652, 2.643, 2.639, 2.636, 2.636, 2.638, 2.642, 2.646, 2.655, 2.665, 2.682, 2.703, 2.729, 2.752, 2.774, 2.798, 2.839, 2.891, 2.933, 2.959, 2.975,
+ 2.897, 2.862, 2.829, 2.804, 2.789, 2.776, 2.764, 2.749, 2.734, 2.709, 2.689, 2.669, 2.652, 2.644, 2.642, 2.642, 2.644, 2.647, 2.654, 2.664, 2.677, 2.694, 2.714, 2.742, 2.764, 2.782, 2.809, 2.852, 2.899, 2.936, 2.961, 2.976,
+ 2.902, 2.869, 2.841, 2.811, 2.797, 2.785, 2.776, 2.761, 2.748, 2.727, 2.708, 2.689, 2.671, 2.659, 2.655, 2.654, 2.653, 2.656, 2.666, 2.678, 2.693, 2.713, 2.737, 2.756, 2.775, 2.798, 2.825, 2.871, 2.913, 2.944, 2.966, 2.979,
+ 2.911, 2.885, 2.848, 2.821, 2.804, 2.793, 2.784, 2.774, 2.759, 2.747, 2.726, 2.709, 2.692, 2.679, 2.673, 2.672, 2.671, 2.672, 2.681, 2.694, 2.712, 2.729, 2.749, 2.768, 2.789, 2.811, 2.844, 2.886, 2.928, 2.956, 2.971, 2.984,
+ 2.925, 2.893, 2.861, 2.831, 2.813, 2.802, 2.795, 2.783, 2.773, 2.759, 2.744, 2.729, 2.715, 2.701, 2.698, 2.694, 2.693, 2.694, 2.702, 2.714, 2.729, 2.747, 2.761, 2.781, 2.802, 2.828, 2.864, 2.907, 2.942, 2.967, 2.978, 2.989,
+ 2.932, 2.898, 2.871, 2.843, 2.823, 2.811, 2.802, 2.794, 2.779, 2.772, 2.757, 2.742, 2.729, 2.716, 2.705, 2.704, 2.704, 2.707, 2.715, 2.727, 2.737, 2.754, 2.769, 2.788, 2.812, 2.845, 2.878, 2.923, 2.962, 2.973, 2.979, 2.994
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 3.018, 3.021, 3.026, 3.052, 3.092, 3.143, 3.181, 3.202, 3.209, 3.212, 3.211, 3.209, 3.197, 3.193, 3.185, 3.184, 3.185, 3.187, 3.191, 3.202, 3.211, 3.213, 3.212, 3.203, 3.189, 3.147, 3.099, 3.051, 3.032, 3.031, 3.048, 3.054,
+ 3.019, 3.023, 3.033, 3.066, 3.123, 3.163, 3.196, 3.206, 3.212, 3.212, 3.211, 3.203, 3.193, 3.179, 3.168, 3.159, 3.159, 3.163, 3.174, 3.188, 3.203, 3.208, 3.211, 3.209, 3.195, 3.168, 3.114, 3.064, 3.035, 3.033, 3.044, 3.051,
+ 3.021, 3.028, 3.046, 3.099, 3.156, 3.192, 3.209, 3.215, 3.216, 3.213, 3.203, 3.193, 3.176, 3.159, 3.153, 3.151, 3.149, 3.152, 3.159, 3.171, 3.188, 3.201, 3.209, 3.211, 3.207, 3.189, 3.142, 3.083, 3.042, 3.038, 3.043, 3.046,
+ 3.022, 3.037, 3.065, 3.124, 3.178, 3.206, 3.215, 3.221, 3.218, 3.217, 3.198, 3.179, 3.162, 3.149, 3.138, 3.133, 3.133, 3.136, 3.145, 3.156, 3.174, 3.192, 3.206, 3.215, 3.214, 3.202, 3.159, 3.105, 3.058, 3.042, 3.043, 3.049,
+ 3.024, 3.047, 3.084, 3.151, 3.195, 3.211, 3.219, 3.223, 3.218, 3.208, 3.182, 3.164, 3.149, 3.137, 3.127, 3.119, 3.119, 3.124, 3.134, 3.144, 3.157, 3.178, 3.194, 3.213, 3.215, 3.208, 3.166, 3.124, 3.074, 3.044, 3.044, 3.049,
+ 3.023, 3.058, 3.102, 3.161, 3.201, 3.217, 3.224, 3.223, 3.217, 3.195, 3.174, 3.156, 3.137, 3.125, 3.115, 3.109, 3.109, 3.115, 3.121, 3.131, 3.146, 3.159, 3.186, 3.208, 3.213, 3.211, 3.181, 3.138, 3.084, 3.047, 3.047, 3.049,
+ 3.031, 3.063, 3.126, 3.183, 3.212, 3.224, 3.225, 3.224, 3.216, 3.191, 3.167, 3.143, 3.129, 3.115, 3.105, 3.103, 3.103, 3.107, 3.114, 3.121, 3.131, 3.148, 3.169, 3.199, 3.211, 3.209, 3.186, 3.151, 3.089, 3.051, 3.049, 3.052,
+ 3.033, 3.083, 3.141, 3.201, 3.221, 3.226, 3.226, 3.224, 3.212, 3.187, 3.159, 3.138, 3.119, 3.107, 3.101, 3.098, 3.098, 3.102, 3.107, 3.115, 3.124, 3.138, 3.161, 3.185, 3.207, 3.209, 3.197, 3.162, 3.112, 3.059, 3.056, 3.057,
+ 3.038, 3.092, 3.159, 3.212, 3.225, 3.231, 3.228, 3.224, 3.209, 3.181, 3.152, 3.129, 3.112, 3.103, 3.095, 3.092, 3.093, 3.095, 3.101, 3.108, 3.118, 3.133, 3.152, 3.179, 3.203, 3.209, 3.205, 3.174, 3.124, 3.069, 3.059, 3.058,
+ 3.049, 3.105, 3.176, 3.223, 3.229, 3.231, 3.229, 3.223, 3.206, 3.171, 3.147, 3.125, 3.109, 3.097, 3.091, 3.089, 3.088, 3.091, 3.094, 3.102, 3.111, 3.124, 3.143, 3.169, 3.196, 3.208, 3.207, 3.181, 3.132, 3.079, 3.064, 3.063,
+ 3.055, 3.123, 3.189, 3.226, 3.232, 3.232, 3.229, 3.225, 3.204, 3.169, 3.143, 3.122, 3.108, 3.095, 3.092, 3.089, 3.088, 3.088, 3.092, 3.095, 3.105, 3.117, 3.135, 3.159, 3.191, 3.208, 3.208, 3.189, 3.141, 3.084, 3.064, 3.062,
+ 3.057, 3.127, 3.198, 3.228, 3.233, 3.233, 3.229, 3.225, 3.201, 3.166, 3.139, 3.119, 3.106, 3.096, 3.093, 3.092, 3.088, 3.088, 3.089, 3.093, 3.099, 3.114, 3.129, 3.156, 3.186, 3.208, 3.208, 3.195, 3.143, 3.089, 3.065, 3.064,
+ 3.066, 3.142, 3.209, 3.232, 3.234, 3.233, 3.231, 3.226, 3.198, 3.166, 3.138, 3.117, 3.103, 3.097, 3.095, 3.095, 3.094, 3.089, 3.089, 3.092, 3.097, 3.109, 3.126, 3.155, 3.183, 3.207, 3.207, 3.198, 3.147, 3.091, 3.069, 3.065,
+ 3.072, 3.153, 3.216, 3.231, 3.234, 3.234, 3.229, 3.226, 3.194, 3.165, 3.136, 3.114, 3.101, 3.098, 3.098, 3.104, 3.098, 3.091, 3.088, 3.089, 3.093, 3.103, 3.123, 3.151, 3.181, 3.204, 3.204, 3.197, 3.156, 3.095, 3.069, 3.068,
+ 3.079, 3.159, 3.222, 3.233, 3.236, 3.235, 3.231, 3.226, 3.194, 3.165, 3.133, 3.112, 3.102, 3.099, 3.107, 3.114, 3.111, 3.097, 3.089, 3.089, 3.091, 3.099, 3.121, 3.149, 3.182, 3.202, 3.202, 3.195, 3.156, 3.096, 3.069, 3.068,
+ 3.081, 3.164, 3.226, 3.233, 3.236, 3.235, 3.233, 3.229, 3.199, 3.165, 3.137, 3.113, 3.102, 3.102, 3.111, 3.134, 3.134, 3.103, 3.091, 3.089, 3.092, 3.101, 3.119, 3.147, 3.182, 3.202, 3.202, 3.194, 3.155, 3.095, 3.069, 3.067,
+ 3.085, 3.163, 3.225, 3.236, 3.239, 3.235, 3.234, 3.231, 3.203, 3.169, 3.141, 3.115, 3.103, 3.103, 3.111, 3.134, 3.134, 3.106, 3.092, 3.091, 3.093, 3.103, 3.119, 3.149, 3.185, 3.203, 3.203, 3.193, 3.152, 3.095, 3.068, 3.066,
+ 3.083, 3.168, 3.226, 3.236, 3.241, 3.235, 3.235, 3.231, 3.205, 3.174, 3.144, 3.117, 3.107, 3.103, 3.107, 3.116, 3.109, 3.103, 3.091, 3.091, 3.095, 3.107, 3.123, 3.152, 3.188, 3.204, 3.204, 3.193, 3.151, 3.095, 3.069, 3.066,
+ 3.082, 3.171, 3.228, 3.237, 3.239, 3.235, 3.234, 3.233, 3.217, 3.184, 3.147, 3.119, 3.108, 3.104, 3.103, 3.105, 3.102, 3.095, 3.091, 3.091, 3.097, 3.111, 3.128, 3.157, 3.191, 3.204, 3.204, 3.185, 3.149, 3.094, 3.069, 3.065,
+ 3.086, 3.173, 3.226, 3.237, 3.239, 3.235, 3.234, 3.232, 3.221, 3.185, 3.155, 3.124, 3.112, 3.105, 3.102, 3.099, 3.096, 3.094, 3.092, 3.094, 3.102, 3.114, 3.133, 3.163, 3.197, 3.205, 3.204, 3.183, 3.144, 3.089, 3.068, 3.065,
+ 3.086, 3.166, 3.225, 3.239, 3.239, 3.237, 3.233, 3.231, 3.223, 3.193, 3.165, 3.135, 3.118, 3.108, 3.101, 3.098, 3.095, 3.093, 3.093, 3.099, 3.109, 3.124, 3.145, 3.174, 3.199, 3.204, 3.203, 3.181, 3.132, 3.085, 3.067, 3.062,
+ 3.086, 3.162, 3.224, 3.239, 3.241, 3.236, 3.232, 3.229, 3.224, 3.201, 3.174, 3.147, 3.128, 3.114, 3.103, 3.099, 3.096, 3.095, 3.097, 3.106, 3.116, 3.134, 3.151, 3.182, 3.201, 3.203, 3.201, 3.176, 3.125, 3.078, 3.065, 3.061,
+ 3.077, 3.162, 3.221, 3.239, 3.241, 3.234, 3.229, 3.227, 3.225, 3.207, 3.186, 3.161, 3.137, 3.122, 3.112, 3.102, 3.099, 3.098, 3.106, 3.113, 3.127, 3.139, 3.159, 3.192, 3.204, 3.205, 3.198, 3.167, 3.119, 3.073, 3.062, 3.061,
+ 3.077, 3.161, 3.216, 3.234, 3.236, 3.232, 3.225, 3.225, 3.222, 3.209, 3.194, 3.172, 3.148, 3.132, 3.121, 3.113, 3.107, 3.107, 3.112, 3.124, 3.135, 3.151, 3.175, 3.196, 3.201, 3.201, 3.191, 3.161, 3.114, 3.062, 3.058, 3.057,
+ 3.073, 3.139, 3.201, 3.227, 3.232, 3.227, 3.223, 3.219, 3.216, 3.212, 3.203, 3.181, 3.161, 3.142, 3.129, 3.121, 3.114, 3.114, 3.124, 3.134, 3.145, 3.161, 3.179, 3.196, 3.199, 3.195, 3.182, 3.145, 3.093, 3.052, 3.051, 3.052,
+ 3.066, 3.126, 3.192, 3.218, 3.224, 3.221, 3.218, 3.214, 3.214, 3.209, 3.204, 3.191, 3.174, 3.155, 3.142, 3.129, 3.127, 3.127, 3.136, 3.145, 3.157, 3.175, 3.187, 3.194, 3.196, 3.192, 3.171, 3.134, 3.082, 3.043, 3.042, 3.044,
+ 3.056, 3.114, 3.176, 3.212, 3.219, 3.219, 3.214, 3.209, 3.208, 3.206, 3.203, 3.198, 3.182, 3.171, 3.155, 3.146, 3.144, 3.144, 3.148, 3.156, 3.171, 3.181, 3.188, 3.194, 3.194, 3.187, 3.161, 3.117, 3.066, 3.037, 3.037, 3.044,
+ 3.054, 3.101, 3.162, 3.203, 3.216, 3.215, 3.211, 3.206, 3.203, 3.201, 3.199, 3.197, 3.191, 3.179, 3.171, 3.161, 3.156, 3.156, 3.161, 3.171, 3.179, 3.184, 3.189, 3.192, 3.191, 3.181, 3.142, 3.097, 3.045, 3.032, 3.033, 3.039,
+ 3.041, 3.093, 3.149, 3.194, 3.208, 3.211, 3.208, 3.202, 3.197, 3.197, 3.197, 3.195, 3.191, 3.189, 3.181, 3.176, 3.172, 3.173, 3.178, 3.181, 3.185, 3.187, 3.189, 3.191, 3.189, 3.173, 3.133, 3.085, 3.034, 3.029, 3.031, 3.038,
+ 3.032, 3.079, 3.133, 3.181, 3.197, 3.207, 3.204, 3.198, 3.193, 3.192, 3.189, 3.191, 3.189, 3.187, 3.185, 3.183, 3.183, 3.183, 3.185, 3.188, 3.187, 3.188, 3.189, 3.188, 3.184, 3.164, 3.118, 3.075, 3.031, 3.026, 3.028, 3.039,
+ 3.025, 3.051, 3.099, 3.149, 3.182, 3.193, 3.193, 3.187, 3.181, 3.178, 3.177, 3.177, 3.182, 3.183, 3.183, 3.183, 3.183, 3.184, 3.187, 3.188, 3.186, 3.184, 3.184, 3.181, 3.167, 3.139, 3.098, 3.053, 3.026, 3.024, 3.029, 3.043,
+ 3.016, 3.025, 3.081, 3.122, 3.167, 3.182, 3.185, 3.181, 3.176, 3.171, 3.169, 3.171, 3.174, 3.175, 3.178, 3.178, 3.179, 3.181, 3.185, 3.185, 3.181, 3.179, 3.177, 3.173, 3.151, 3.119, 3.076, 3.031, 3.021, 3.018, 3.024, 3.046
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.503, 1.503, 1.504, 1.515, 1.541, 1.566, 1.587, 1.599, 1.602, 1.603, 1.602, 1.599, 1.595, 1.589, 1.587, 1.586, 1.586, 1.587, 1.589, 1.594, 1.601, 1.604, 1.604, 1.601, 1.589, 1.571, 1.541, 1.517, 1.512, 1.512, 1.522, 1.526,
+ 1.501, 1.502, 1.506, 1.523, 1.557, 1.579, 1.596, 1.603, 1.603, 1.603, 1.601, 1.597, 1.591, 1.582, 1.576, 1.575, 1.574, 1.577, 1.581, 1.588, 1.595, 1.601, 1.603, 1.602, 1.597, 1.578, 1.553, 1.526, 1.512, 1.512, 1.519, 1.526,
+ 1.499, 1.503, 1.512, 1.539, 1.571, 1.593, 1.603, 1.604, 1.604, 1.602, 1.597, 1.591, 1.581, 1.573, 1.568, 1.566, 1.566, 1.568, 1.572, 1.579, 1.587, 1.594, 1.602, 1.603, 1.601, 1.589, 1.566, 1.536, 1.517, 1.516, 1.519, 1.525,
+ 1.499, 1.505, 1.521, 1.553, 1.582, 1.597, 1.604, 1.604, 1.604, 1.601, 1.592, 1.582, 1.573, 1.564, 1.561, 1.558, 1.557, 1.559, 1.564, 1.571, 1.579, 1.588, 1.597, 1.603, 1.603, 1.596, 1.576, 1.545, 1.519, 1.517, 1.518, 1.526,
+ 1.499, 1.509, 1.529, 1.565, 1.591, 1.601, 1.605, 1.604, 1.602, 1.597, 1.586, 1.573, 1.565, 1.558, 1.553, 1.551, 1.551, 1.552, 1.555, 1.563, 1.571, 1.581, 1.592, 1.601, 1.602, 1.599, 1.582, 1.556, 1.528, 1.517, 1.517, 1.526,
+ 1.501, 1.512, 1.539, 1.576, 1.595, 1.603, 1.605, 1.604, 1.601, 1.591, 1.579, 1.567, 1.559, 1.552, 1.548, 1.545, 1.546, 1.548, 1.551, 1.555, 1.563, 1.574, 1.585, 1.598, 1.602, 1.601, 1.589, 1.562, 1.535, 1.519, 1.519, 1.528,
+ 1.501, 1.517, 1.552, 1.587, 1.601, 1.605, 1.605, 1.605, 1.599, 1.588, 1.574, 1.562, 1.553, 1.548, 1.544, 1.543, 1.543, 1.545, 1.547, 1.551, 1.557, 1.567, 1.578, 1.593, 1.601, 1.601, 1.592, 1.571, 1.539, 1.521, 1.521, 1.529,
+ 1.503, 1.524, 1.561, 1.593, 1.605, 1.606, 1.605, 1.603, 1.598, 1.585, 1.569, 1.558, 1.551, 1.545, 1.542, 1.541, 1.541, 1.542, 1.545, 1.547, 1.555, 1.561, 1.573, 1.587, 1.598, 1.601, 1.596, 1.577, 1.546, 1.523, 1.523, 1.529,
+ 1.503, 1.532, 1.568, 1.597, 1.605, 1.606, 1.605, 1.603, 1.596, 1.581, 1.565, 1.555, 1.548, 1.544, 1.541, 1.539, 1.541, 1.541, 1.543, 1.546, 1.549, 1.558, 1.568, 1.583, 1.595, 1.601, 1.599, 1.582, 1.555, 1.525, 1.525, 1.531,
+ 1.508, 1.539, 1.575, 1.601, 1.605, 1.606, 1.605, 1.602, 1.593, 1.577, 1.563, 1.552, 1.546, 1.543, 1.541, 1.539, 1.539, 1.541, 1.542, 1.544, 1.548, 1.553, 1.564, 1.579, 1.592, 1.599, 1.599, 1.585, 1.559, 1.532, 1.531, 1.531,
+ 1.511, 1.544, 1.581, 1.603, 1.606, 1.606, 1.604, 1.603, 1.591, 1.574, 1.561, 1.549, 1.545, 1.542, 1.541, 1.541, 1.541, 1.541, 1.542, 1.543, 1.545, 1.551, 1.561, 1.573, 1.591, 1.599, 1.599, 1.588, 1.563, 1.535, 1.531, 1.531,
+ 1.515, 1.548, 1.589, 1.605, 1.607, 1.607, 1.604, 1.602, 1.591, 1.573, 1.559, 1.549, 1.543, 1.542, 1.541, 1.542, 1.542, 1.542, 1.541, 1.542, 1.543, 1.549, 1.558, 1.571, 1.588, 1.599, 1.599, 1.591, 1.566, 1.537, 1.532, 1.531,
+ 1.517, 1.558, 1.593, 1.606, 1.607, 1.607, 1.605, 1.602, 1.589, 1.572, 1.557, 1.548, 1.543, 1.543, 1.542, 1.544, 1.543, 1.543, 1.541, 1.541, 1.542, 1.546, 1.554, 1.569, 1.585, 1.599, 1.599, 1.593, 1.568, 1.538, 1.533, 1.531,
+ 1.521, 1.563, 1.596, 1.607, 1.608, 1.607, 1.606, 1.603, 1.589, 1.572, 1.557, 1.548, 1.543, 1.543, 1.544, 1.549, 1.546, 1.544, 1.541, 1.541, 1.542, 1.545, 1.553, 1.568, 1.585, 1.598, 1.598, 1.594, 1.571, 1.541, 1.534, 1.531,
+ 1.521, 1.566, 1.599, 1.607, 1.608, 1.607, 1.605, 1.603, 1.591, 1.571, 1.556, 1.547, 1.544, 1.544, 1.551, 1.554, 1.552, 1.546, 1.541, 1.541, 1.541, 1.544, 1.553, 1.567, 1.585, 1.597, 1.598, 1.595, 1.571, 1.541, 1.534, 1.531,
+ 1.523, 1.568, 1.601, 1.607, 1.608, 1.607, 1.606, 1.604, 1.591, 1.572, 1.557, 1.547, 1.545, 1.545, 1.552, 1.566, 1.566, 1.551, 1.542, 1.541, 1.541, 1.544, 1.553, 1.567, 1.586, 1.596, 1.596, 1.593, 1.571, 1.541, 1.533, 1.531,
+ 1.524, 1.569, 1.602, 1.607, 1.608, 1.607, 1.606, 1.604, 1.591, 1.573, 1.559, 1.548, 1.545, 1.546, 1.552, 1.565, 1.565, 1.551, 1.542, 1.541, 1.541, 1.545, 1.553, 1.568, 1.586, 1.597, 1.597, 1.593, 1.571, 1.541, 1.532, 1.532,
+ 1.526, 1.571, 1.602, 1.607, 1.608, 1.606, 1.605, 1.604, 1.593, 1.575, 1.559, 1.549, 1.546, 1.546, 1.549, 1.552, 1.552, 1.546, 1.542, 1.541, 1.542, 1.546, 1.555, 1.569, 1.587, 1.597, 1.597, 1.591, 1.569, 1.539, 1.532, 1.531,
+ 1.526, 1.571, 1.601, 1.608, 1.609, 1.605, 1.605, 1.603, 1.597, 1.579, 1.562, 1.551, 1.546, 1.545, 1.545, 1.549, 1.546, 1.543, 1.542, 1.541, 1.542, 1.547, 1.557, 1.573, 1.588, 1.597, 1.597, 1.589, 1.566, 1.537, 1.531, 1.529,
+ 1.526, 1.569, 1.602, 1.609, 1.609, 1.606, 1.605, 1.604, 1.598, 1.582, 1.567, 1.553, 1.547, 1.545, 1.544, 1.544, 1.544, 1.542, 1.542, 1.542, 1.544, 1.552, 1.559, 1.576, 1.591, 1.597, 1.597, 1.588, 1.563, 1.535, 1.531, 1.529,
+ 1.523, 1.567, 1.601, 1.609, 1.609, 1.606, 1.605, 1.603, 1.599, 1.587, 1.571, 1.558, 1.549, 1.545, 1.544, 1.543, 1.543, 1.542, 1.542, 1.544, 1.548, 1.555, 1.566, 1.581, 1.593, 1.597, 1.597, 1.586, 1.558, 1.534, 1.529, 1.529,
+ 1.523, 1.564, 1.599, 1.609, 1.609, 1.605, 1.604, 1.603, 1.601, 1.592, 1.576, 1.564, 1.553, 1.547, 1.544, 1.543, 1.542, 1.542, 1.544, 1.548, 1.551, 1.561, 1.572, 1.585, 1.594, 1.596, 1.595, 1.581, 1.555, 1.528, 1.527, 1.528,
+ 1.522, 1.561, 1.595, 1.608, 1.608, 1.604, 1.602, 1.601, 1.601, 1.595, 1.582, 1.569, 1.559, 1.552, 1.547, 1.545, 1.543, 1.544, 1.546, 1.551, 1.556, 1.563, 1.576, 1.589, 1.595, 1.596, 1.593, 1.576, 1.551, 1.524, 1.524, 1.528,
+ 1.519, 1.559, 1.591, 1.605, 1.606, 1.603, 1.601, 1.599, 1.601, 1.597, 1.587, 1.576, 1.565, 1.558, 1.552, 1.549, 1.546, 1.547, 1.552, 1.556, 1.561, 1.571, 1.582, 1.593, 1.596, 1.596, 1.591, 1.569, 1.546, 1.521, 1.521, 1.527,
+ 1.516, 1.553, 1.589, 1.602, 1.604, 1.602, 1.599, 1.598, 1.599, 1.598, 1.594, 1.583, 1.572, 1.564, 1.559, 1.553, 1.552, 1.553, 1.556, 1.561, 1.567, 1.578, 1.588, 1.594, 1.596, 1.594, 1.588, 1.567, 1.539, 1.517, 1.517, 1.525,
+ 1.511, 1.548, 1.581, 1.599, 1.602, 1.602, 1.598, 1.597, 1.597, 1.597, 1.595, 1.589, 1.581, 1.571, 1.564, 1.559, 1.559, 1.558, 1.561, 1.567, 1.575, 1.583, 1.591, 1.593, 1.594, 1.591, 1.581, 1.557, 1.529, 1.514, 1.514, 1.521,
+ 1.508, 1.541, 1.576, 1.596, 1.601, 1.601, 1.597, 1.595, 1.594, 1.595, 1.595, 1.592, 1.585, 1.579, 1.571, 1.566, 1.566, 1.566, 1.568, 1.575, 1.582, 1.589, 1.592, 1.593, 1.593, 1.589, 1.575, 1.553, 1.523, 1.511, 1.511, 1.517,
+ 1.505, 1.535, 1.566, 1.591, 1.599, 1.598, 1.596, 1.594, 1.592, 1.592, 1.593, 1.592, 1.589, 1.585, 1.579, 1.575, 1.574, 1.574, 1.577, 1.582, 1.587, 1.591, 1.592, 1.593, 1.592, 1.585, 1.568, 1.541, 1.516, 1.509, 1.509, 1.517,
+ 1.501, 1.528, 1.559, 1.585, 1.595, 1.597, 1.595, 1.593, 1.589, 1.588, 1.591, 1.591, 1.591, 1.589, 1.586, 1.583, 1.582, 1.582, 1.585, 1.588, 1.589, 1.591, 1.592, 1.593, 1.592, 1.582, 1.561, 1.536, 1.512, 1.509, 1.511, 1.517,
+ 1.496, 1.521, 1.549, 1.576, 1.588, 1.594, 1.593, 1.589, 1.586, 1.585, 1.586, 1.588, 1.589, 1.588, 1.588, 1.587, 1.587, 1.587, 1.589, 1.589, 1.591, 1.591, 1.592, 1.592, 1.591, 1.575, 1.555, 1.527, 1.508, 1.507, 1.511, 1.519,
+ 1.495, 1.505, 1.536, 1.563, 1.581, 1.587, 1.588, 1.584, 1.582, 1.578, 1.578, 1.581, 1.583, 1.584, 1.586, 1.587, 1.587, 1.587, 1.588, 1.589, 1.589, 1.591, 1.591, 1.591, 1.584, 1.566, 1.544, 1.518, 1.505, 1.505, 1.509, 1.519,
+ 1.493, 1.496, 1.522, 1.547, 1.569, 1.581, 1.582, 1.581, 1.577, 1.575, 1.573, 1.575, 1.579, 1.581, 1.583, 1.584, 1.584, 1.585, 1.587, 1.587, 1.588, 1.588, 1.588, 1.585, 1.573, 1.556, 1.532, 1.511, 1.504, 1.504, 1.508, 1.523
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 4.461, 4.088, 3.793, 3.651, 3.557, 3.439, 3.248, 2.999, 2.751, 2.527, 2.341, 2.191, 2.069, 1.956, 1.907, 1.907, 1.907, 1.908, 1.946, 2.056, 2.179, 2.328, 2.517, 2.747, 2.998, 3.219, 3.359, 3.436, 3.494, 3.621, 3.906, 4.251,
+ 4.297, 3.982, 3.747, 3.634, 3.531, 3.373, 3.136, 2.863, 2.608, 2.386, 2.209, 2.075, 1.957, 1.873, 1.817, 1.789, 1.789, 1.813, 1.865, 1.947, 2.066, 2.198, 2.378, 2.605, 2.872, 3.132, 3.322, 3.431, 3.485, 3.577, 3.802, 4.079,
+ 4.152, 3.905, 3.717, 3.623, 3.499, 3.296, 3.022, 2.735, 2.478, 2.265, 2.094, 1.957, 1.849, 1.763, 1.709, 1.679, 1.679, 1.703, 1.753, 1.837, 1.947, 2.081, 2.253, 2.472, 2.742, 3.032, 3.271, 3.414, 3.479, 3.545, 3.719, 3.937,
+ 4.039, 3.835, 3.688, 3.596, 3.442, 3.196, 2.899, 2.609, 2.356, 2.153, 1.987, 1.849, 1.748, 1.659, 1.605, 1.577, 1.577, 1.599, 1.649, 1.734, 1.837, 1.973, 2.139, 2.348, 2.612, 2.911, 3.192, 3.379, 3.467, 3.516, 3.649, 3.815,
+ 3.952, 3.784, 3.669, 3.562, 3.369, 3.088, 2.778, 2.491, 2.246, 2.049, 1.888, 1.748, 1.657, 1.561, 1.509, 1.481, 1.481, 1.504, 1.552, 1.642, 1.734, 1.869, 2.033, 2.233, 2.489, 2.792, 3.105, 3.331, 3.445, 3.493, 3.591, 3.721,
+ 3.883, 3.741, 3.648, 3.519, 3.287, 2.977, 2.665, 2.382, 2.148, 1.957, 1.796, 1.659, 1.561, 1.474, 1.422, 1.396, 1.396, 1.415, 1.465, 1.552, 1.643, 1.776, 1.936, 2.131, 2.375, 2.678, 3.004, 3.275, 3.416, 3.469, 3.541, 3.643,
+ 3.829, 3.716, 3.617, 3.466, 3.202, 2.876, 2.558, 2.282, 2.059, 1.872, 1.713, 1.577, 1.474, 1.399, 1.345, 1.319, 1.319, 1.338, 1.389, 1.465, 1.559, 1.689, 1.849, 2.042, 2.275, 2.568, 2.903, 3.204, 3.383, 3.446, 3.496, 3.579,
+ 3.793, 3.685, 3.589, 3.411, 3.119, 2.781, 2.466, 2.199, 1.983, 1.798, 1.639, 1.505, 1.399, 1.339, 1.276, 1.253, 1.253, 1.271, 1.327, 1.389, 1.487, 1.612, 1.769, 1.961, 2.189, 2.471, 2.806, 3.133, 3.342, 3.425, 3.459, 3.527,
+ 3.763, 3.666, 3.561, 3.357, 3.042, 2.698, 2.384, 2.129, 1.918, 1.734, 1.575, 1.443, 1.339, 1.276, 1.217, 1.194, 1.194, 1.214, 1.271, 1.327, 1.423, 1.546, 1.702, 1.891, 2.112, 2.386, 2.718, 3.061, 3.301, 3.402, 3.433, 3.486,
+ 3.745, 3.647, 3.529, 3.302, 2.971, 2.627, 2.318, 2.067, 1.859, 1.677, 1.521, 1.389, 1.287, 1.217, 1.171, 1.145, 1.145, 1.165, 1.214, 1.276, 1.369, 1.491, 1.643, 1.831, 2.048, 2.313, 2.644, 2.995, 3.262, 3.381, 3.412, 3.453,
+ 3.731, 3.635, 3.503, 3.249, 2.911, 2.566, 2.259, 2.017, 1.811, 1.629, 1.475, 1.347, 1.246, 1.171, 1.138, 1.103, 1.103, 1.129, 1.165, 1.231, 1.322, 1.443, 1.595, 1.779, 1.993, 2.251, 2.576, 2.936, 3.223, 3.359, 3.392, 3.425,
+ 3.721, 3.625, 3.481, 3.208, 2.861, 2.515, 2.213, 1.976, 1.773, 1.593, 1.439, 1.313, 1.213, 1.138, 1.103, 1.071, 1.071, 1.101, 1.129, 1.194, 1.286, 1.405, 1.555, 1.736, 1.949, 2.202, 2.521, 2.886, 3.189, 3.338, 3.375, 3.406,
+ 3.716, 3.616, 3.458, 3.171, 2.819, 2.472, 2.176, 1.942, 1.741, 1.563, 1.411, 1.285, 1.186, 1.112, 1.071, 1.051, 1.049, 1.069, 1.103, 1.165, 1.256, 1.376, 1.523, 1.702, 1.913, 2.163, 2.477, 2.843, 3.155, 3.318, 3.358, 3.389,
+ 3.712, 3.609, 3.439, 3.142, 2.787, 2.443, 2.147, 1.918, 1.721, 1.541, 1.391, 1.266, 1.167, 1.094, 1.051, 1.035, 1.035, 1.049, 1.085, 1.145, 1.236, 1.355, 1.499, 1.676, 1.886, 2.136, 2.449, 2.814, 3.135, 3.307, 3.351, 3.378,
+ 3.709, 3.604, 3.422, 3.123, 2.768, 2.419, 2.129, 1.903, 1.706, 1.527, 1.377, 1.253, 1.155, 1.083, 1.035, 1.023, 1.023, 1.035, 1.074, 1.134, 1.224, 1.341, 1.484, 1.661, 1.868, 2.117, 2.429, 2.797, 3.122, 3.301, 3.346, 3.374,
+ 3.711, 3.597, 3.412, 3.114, 2.758, 2.409, 2.119, 1.895, 1.701, 1.523, 1.373, 1.251, 1.153, 1.081, 1.033, 1.001, 1.001, 1.032, 1.073, 1.133, 1.222, 1.338, 1.479, 1.655, 1.861, 2.107, 2.418, 2.787, 3.115, 3.297, 3.343, 3.373,
+ 3.713, 3.597, 3.412, 3.113, 2.758, 2.409, 2.119, 1.893, 1.698, 1.523, 1.373, 1.251, 1.153, 1.081, 1.034, 1.011, 1.011, 1.032, 1.074, 1.134, 1.222, 1.338, 1.479, 1.655, 1.861, 2.107, 2.418, 2.787, 3.116, 3.294, 3.341, 3.371,
+ 3.721, 3.599, 3.414, 3.116, 2.763, 2.418, 2.124, 1.895, 1.704, 1.531, 1.382, 1.259, 1.162, 1.091, 1.048, 1.034, 1.032, 1.046, 1.083, 1.145, 1.232, 1.348, 1.491, 1.664, 1.869, 2.115, 2.428, 2.798, 3.123, 3.294, 3.339, 3.372,
+ 3.727, 3.604, 3.421, 3.132, 2.784, 2.438, 2.141, 1.908, 1.716, 1.547, 1.399, 1.276, 1.178, 1.107, 1.069, 1.048, 1.046, 1.067, 1.101, 1.162, 1.249, 1.366, 1.509, 1.684, 1.886, 2.134, 2.449, 2.821, 3.135, 3.299, 3.341, 3.375,
+ 3.739, 3.613, 3.431, 3.154, 2.813, 2.468, 2.166, 1.931, 1.739, 1.569, 1.424, 1.302, 1.203, 1.129, 1.098, 1.069, 1.069, 1.096, 1.123, 1.185, 1.274, 1.391, 1.536, 1.709, 1.914, 2.162, 2.481, 2.851, 3.156, 3.311, 3.342, 3.378,
+ 3.751, 3.626, 3.449, 3.186, 2.855, 2.509, 2.201, 1.961, 1.768, 1.601, 1.454, 1.333, 1.235, 1.159, 1.129, 1.098, 1.098, 1.123, 1.152, 1.216, 1.307, 1.424, 1.569, 1.744, 1.947, 2.202, 2.526, 2.891, 3.182, 3.322, 3.351, 3.387,
+ 3.772, 3.641, 3.473, 3.221, 2.902, 2.559, 2.248, 1.999, 1.804, 1.639, 1.496, 1.373, 1.274, 1.201, 1.159, 1.133, 1.133, 1.152, 1.191, 1.254, 1.347, 1.466, 1.611, 1.785, 1.989, 2.253, 2.582, 2.939, 3.209, 3.334, 3.361, 3.402,
+ 3.797, 3.663, 3.496, 3.263, 2.959, 2.624, 2.308, 2.049, 1.847, 1.684, 1.542, 1.422, 1.321, 1.252, 1.201, 1.175, 1.175, 1.191, 1.239, 1.298, 1.394, 1.516, 1.658, 1.831, 2.041, 2.313, 2.651, 2.998, 3.244, 3.351, 3.375, 3.422,
+ 3.831, 3.686, 3.523, 3.307, 3.023, 2.698, 2.379, 2.112, 1.902, 1.737, 1.596, 1.476, 1.378, 1.315, 1.252, 1.227, 1.227, 1.239, 1.296, 1.355, 1.451, 1.572, 1.715, 1.888, 2.103, 2.386, 2.731, 3.063, 3.279, 3.367, 3.393, 3.456,
+ 3.871, 3.714, 3.551, 3.355, 3.091, 2.781, 2.465, 2.186, 1.965, 1.795, 1.654, 1.538, 1.442, 1.378, 1.318, 1.291, 1.291, 1.304, 1.355, 1.424, 1.515, 1.634, 1.778, 1.952, 2.178, 2.479, 2.821, 3.129, 3.314, 3.381, 3.419, 3.491,
+ 3.925, 3.749, 3.582, 3.401, 3.156, 2.866, 2.559, 2.274, 2.039, 1.859, 1.718, 1.604, 1.513, 1.442, 1.389, 1.363, 1.363, 1.379, 1.424, 1.501, 1.586, 1.702, 1.847, 2.028, 2.269, 2.579, 2.913, 3.193, 3.343, 3.396, 3.447, 3.539,
+ 3.994, 3.794, 3.619, 3.442, 3.231, 2.961, 2.662, 2.375, 2.129, 1.938, 1.789, 1.675, 1.591, 1.513, 1.465, 1.439, 1.439, 1.457, 1.501, 1.582, 1.661, 1.777, 1.925, 2.118, 2.375, 2.691, 3.008, 3.251, 3.371, 3.414, 3.479, 3.598,
+ 4.082, 3.845, 3.656, 3.489, 3.298, 3.053, 2.771, 2.485, 2.232, 2.028, 1.871, 1.751, 1.672, 1.591, 1.544, 1.521, 1.521, 1.539, 1.582, 1.661, 1.741, 1.859, 2.014, 2.224, 2.495, 2.806, 3.098, 3.301, 3.392, 3.431, 3.518, 3.677,
+ 4.196, 3.911, 3.698, 3.534, 3.363, 3.146, 2.881, 2.604, 2.348, 2.132, 1.964, 1.836, 1.751, 1.672, 1.628, 1.606, 1.606, 1.624, 1.665, 1.741, 1.827, 1.951, 2.121, 2.344, 2.624, 2.923, 3.177, 3.336, 3.405, 3.447, 3.567, 3.776,
+ 4.341, 4.002, 3.744, 3.575, 3.415, 3.229, 2.989, 2.729, 2.475, 2.251, 2.071, 1.936, 1.836, 1.759, 1.713, 1.693, 1.693, 1.711, 1.753, 1.827, 1.925, 2.058, 2.243, 2.481, 2.758, 3.027, 3.238, 3.361, 3.409, 3.466, 3.637, 3.896,
+ 4.516, 4.123, 3.804, 3.621, 3.468, 3.308, 3.096, 2.855, 2.609, 2.385, 2.194, 2.045, 1.936, 1.857, 1.807, 1.784, 1.784, 1.803, 1.852, 1.925, 2.033, 2.183, 2.382, 2.623, 2.886, 3.121, 3.284, 3.372, 3.413, 3.494, 3.727, 4.048,
+ 4.716, 4.264, 3.875, 3.674, 3.523, 3.376, 3.189, 2.966, 2.733, 2.511, 2.315, 2.158, 2.039, 1.936, 1.875, 1.872, 1.872, 1.872, 1.925, 2.028, 2.148, 2.308, 2.513, 2.751, 2.994, 3.191, 3.319, 3.384, 3.427, 3.541, 3.838, 4.221
+ ],
+ "sigma": 0.00152,
+ "sigma_Cb": 0.00172
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2750,
+ "ccm":
+ [
+ 1.13004, 0.36392, -0.49396,
+ -0.45885, 1.68171, -0.22286,
+ -0.06473, -0.86962, 1.93435
+ ]
+ },
+ {
+ "ct": 2940,
+ "ccm":
+ [
+ 1.29876, 0.09627, -0.39503,
+ -0.43085, 1.60258, -0.17172,
+ -0.02638, -0.92581, 1.95218
+ ]
+ },
+ {
+ "ct": 3650,
+ "ccm":
+ [
+ 1.57729, -0.29734, -0.27995,
+ -0.42965, 1.66231, -0.23265,
+ -0.02183, -0.62331, 1.64514
+ ]
+ },
+ {
+ "ct": 4625,
+ "ccm":
+ [
+ 1.52145, -0.22382, -0.29763,
+ -0.40445, 1.82186, -0.41742,
+ -0.05732, -0.56222, 1.61954
+ ]
+ },
+ {
+ "ct": 5715,
+ "ccm":
+ [
+ 1.67851, -0.39193, -0.28658,
+ -0.37169, 1.72949, -0.35781,
+ -0.09556, -0.41951, 1.51508
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.af":
+ {
+ "ranges":
+ {
+ "normal":
+ {
+ "min": 0.0,
+ "max": 12.0,
+ "default": 1.0
+ },
+ "macro":
+ {
+ "min": 4.0,
+ "max": 32.0,
+ "default": 6.0
+ }
+ },
+ "speeds":
+ {
+ "normal":
+ {
+ "step_coarse": 2.0,
+ "step_fine": 0.5,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.03,
+ "pdaf_squelch": 0.2,
+ "max_slew": 4.0,
+ "pdaf_frames": 20,
+ "dropout_frames": 6,
+ "step_frames": 4
+ },
+ "fast":
+ {
+ "step_coarse": 2.0,
+ "step_fine": 0.5,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.05,
+ "pdaf_squelch": 0.2,
+ "max_slew": 5.0,
+ "pdaf_frames": 16,
+ "dropout_frames": 6,
+ "step_frames": 4
+ }
+ },
+ "conf_epsilon": 8,
+ "conf_thresh": 12,
+ "conf_clip": 512,
+ "skip_frames": 5,
+ "map": [ 0.0, 420, 35.0, 920 ]
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "power_min": 0.7,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "power_min": 0.7,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/meson.build b/src/ipa/rpi/pisp/data/meson.build
new file mode 100644
index 00000000..f56c4e39
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/meson.build
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: CC0-1.0
+
+conf_files = files([
+ 'imx219.json',
+ 'imx219_noir.json',
+ 'imx290.json',
+ 'imx296.json',
+ 'imx296_mono.json',
+ 'imx378.json',
+ 'imx415.json',
+ 'imx462.json',
+ 'imx477.json',
+ 'imx477_noir.json',
+ 'imx477_scientific.json',
+ 'imx519.json',
+ 'imx708.json',
+ 'imx708_noir.json',
+ 'imx708_wide.json',
+ 'imx708_wide_noir.json',
+ 'ov5647.json',
+ 'ov5647_noir.json',
+ 'ov64a40.json',
+ 'ov9281_mono.json',
+ 'se327m12.json',
+ 'uncalibrated.json',
+])
+
+install_data(conf_files,
+ install_dir : ipa_data_dir / 'rpi' / 'pisp')
diff --git a/src/ipa/rpi/pisp/data/ov5647.json b/src/ipa/rpi/pisp/data/ov5647.json
new file mode 100644
index 00000000..d5156767
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/ov5647.json
@@ -0,0 +1,1186 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 1024
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 29381,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 870,
+ "reference_Y": 12388
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 4.371
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 280,
+ "slope": 0.02153
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2873.0, 1.0463, 0.5142,
+ 2965.0, 1.0233, 0.5284,
+ 3606.0, 0.8947, 0.6314,
+ 4700.0, 0.7665, 0.7897,
+ 5890.0, 0.7055, 0.8933,
+ 7600.0, 0.6482, 1.0119
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.04072,
+ "transverse_neg": 0.03906
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.238, 1.238, 1.238, 1.234, 1.227, 1.216, 1.207, 1.198, 1.191, 1.179, 1.169, 1.162, 1.155, 1.153, 1.152, 1.152, 1.152, 1.153, 1.154, 1.157, 1.166, 1.176, 1.183, 1.191, 1.204, 1.216, 1.226, 1.232, 1.239, 1.241, 1.241, 1.242,
+ 1.235, 1.234, 1.227, 1.222, 1.214, 1.203, 1.193, 1.184, 1.169, 1.161, 1.149, 1.139, 1.131, 1.126, 1.122, 1.121, 1.121, 1.123, 1.129, 1.136, 1.145, 1.157, 1.163, 1.175, 1.189, 1.199, 1.212, 1.221, 1.225, 1.231, 1.241, 1.242,
+ 1.234, 1.227, 1.222, 1.214, 1.203, 1.193, 1.183, 1.169, 1.158, 1.145, 1.133, 1.123, 1.113, 1.106, 1.101, 1.101, 1.101, 1.105, 1.111, 1.116, 1.128, 1.137, 1.149, 1.163, 1.174, 1.189, 1.199, 1.212, 1.221, 1.226, 1.234, 1.241,
+ 1.234, 1.226, 1.217, 1.209, 1.195, 1.183, 1.171, 1.158, 1.145, 1.131, 1.119, 1.108, 1.097, 1.088, 1.088, 1.085, 1.085, 1.087, 1.095, 1.102, 1.114, 1.124, 1.137, 1.149, 1.165, 1.176, 1.194, 1.207, 1.214, 1.224, 1.235, 1.247,
+ 1.238, 1.224, 1.213, 1.202, 1.187, 1.175, 1.161, 1.146, 1.132, 1.117, 1.105, 1.094, 1.082, 1.074, 1.071, 1.071, 1.071, 1.073, 1.079, 1.089, 1.099, 1.112, 1.124, 1.137, 1.152, 1.167, 1.183, 1.198, 1.211, 1.222, 1.235, 1.249,
+ 1.232, 1.221, 1.209, 1.195, 1.178, 1.163, 1.149, 1.134, 1.118, 1.104, 1.093, 1.079, 1.069, 1.061, 1.057, 1.056, 1.056, 1.059, 1.066, 1.073, 1.086, 1.098, 1.111, 1.124, 1.141, 1.157, 1.173, 1.188, 1.203, 1.219, 1.234, 1.251,
+ 1.231, 1.213, 1.197, 1.186, 1.169, 1.151, 1.137, 1.121, 1.104, 1.093, 1.079, 1.068, 1.056, 1.048, 1.045, 1.042, 1.042, 1.045, 1.051, 1.061, 1.071, 1.085, 1.098, 1.111, 1.129, 1.145, 1.161, 1.179, 1.197, 1.215, 1.231, 1.249,
+ 1.224, 1.211, 1.194, 1.178, 1.161, 1.141, 1.127, 1.109, 1.094, 1.081, 1.068, 1.055, 1.047, 1.038, 1.034, 1.032, 1.032, 1.035, 1.039, 1.048, 1.059, 1.071, 1.086, 1.098, 1.116, 1.134, 1.154, 1.172, 1.191, 1.209, 1.228, 1.249,
+ 1.223, 1.206, 1.187, 1.171, 1.152, 1.132, 1.117, 1.098, 1.082, 1.069, 1.056, 1.045, 1.037, 1.028, 1.024, 1.022, 1.022, 1.025, 1.031, 1.039, 1.048, 1.059, 1.074, 1.091, 1.106, 1.126, 1.144, 1.163, 1.186, 1.205, 1.227, 1.247,
+ 1.222, 1.199, 1.183, 1.164, 1.143, 1.126, 1.108, 1.091, 1.075, 1.059, 1.045, 1.037, 1.028, 1.019, 1.015, 1.014, 1.014, 1.018, 1.023, 1.031, 1.042, 1.051, 1.065, 1.081, 1.098, 1.118, 1.137, 1.158, 1.181, 1.201, 1.224, 1.245,
+ 1.221, 1.198, 1.179, 1.163, 1.141, 1.119, 1.101, 1.083, 1.066, 1.051, 1.038, 1.028, 1.019, 1.012, 1.009, 1.008, 1.007, 1.008, 1.015, 1.023, 1.033, 1.044, 1.058, 1.072, 1.089, 1.107, 1.131, 1.152, 1.172, 1.196, 1.216, 1.241,
+ 1.216, 1.194, 1.174, 1.155, 1.133, 1.112, 1.094, 1.074, 1.059, 1.045, 1.032, 1.021, 1.012, 1.007, 1.003, 1.002, 1.002, 1.003, 1.008, 1.015, 1.025, 1.038, 1.049, 1.067, 1.084, 1.102, 1.126, 1.147, 1.169, 1.191, 1.214, 1.238,
+ 1.212, 1.188, 1.171, 1.149, 1.127, 1.105, 1.087, 1.069, 1.055, 1.039, 1.027, 1.016, 1.007, 1.003, 0.999, 0.997, 0.998, 1.001, 1.003, 1.011, 1.021, 1.032, 1.043, 1.059, 1.077, 1.101, 1.121, 1.142, 1.164, 1.187, 1.211, 1.236,
+ 1.208, 1.187, 1.169, 1.149, 1.124, 1.104, 1.085, 1.067, 1.051, 1.036, 1.024, 1.013, 1.005, 0.999, 0.996, 0.994, 0.994, 0.996, 1.001, 1.006, 1.017, 1.025, 1.038, 1.053, 1.072, 1.093, 1.116, 1.138, 1.159, 1.183, 1.207, 1.235,
+ 1.208, 1.181, 1.164, 1.144, 1.122, 1.098, 1.079, 1.062, 1.046, 1.033, 1.018, 1.009, 1.002, 0.996, 0.992, 0.989, 0.991, 0.994, 0.996, 1.002, 1.012, 1.021, 1.035, 1.051, 1.069, 1.091, 1.113, 1.137, 1.157, 1.182, 1.206, 1.233,
+ 1.206, 1.179, 1.163, 1.142, 1.119, 1.098, 1.079, 1.061, 1.045, 1.031, 1.017, 1.008, 1.001, 0.995, 0.991, 0.989, 0.989, 0.992, 0.996, 1.001, 1.011, 1.019, 1.034, 1.051, 1.069, 1.089, 1.112, 1.136, 1.157, 1.181, 1.205, 1.233,
+ 1.206, 1.179, 1.163, 1.139, 1.119, 1.098, 1.079, 1.061, 1.044, 1.031, 1.016, 1.007, 1.001, 0.995, 0.991, 0.989, 0.989, 0.991, 0.996, 1.002, 1.011, 1.019, 1.034, 1.049, 1.069, 1.088, 1.113, 1.136, 1.156, 1.179, 1.204, 1.233,
+ 1.207, 1.179, 1.163, 1.139, 1.119, 1.099, 1.079, 1.061, 1.044, 1.031, 1.017, 1.007, 1.001, 0.995, 0.991, 0.989, 0.989, 0.992, 0.997, 1.003, 1.011, 1.021, 1.034, 1.051, 1.071, 1.089, 1.112, 1.136, 1.157, 1.179, 1.204, 1.233,
+ 1.207, 1.179, 1.163, 1.143, 1.121, 1.101, 1.082, 1.063, 1.047, 1.032, 1.019, 1.009, 1.003, 0.998, 0.994, 0.991, 0.991, 0.995, 0.999, 1.004, 1.013, 1.024, 1.038, 1.052, 1.071, 1.091, 1.112, 1.136, 1.159, 1.181, 1.205, 1.233,
+ 1.207, 1.185, 1.166, 1.148, 1.124, 1.104, 1.087, 1.068, 1.052, 1.037, 1.025, 1.016, 1.006, 1.002, 0.998, 0.995, 0.995, 0.999, 1.003, 1.008, 1.017, 1.029, 1.043, 1.056, 1.076, 1.094, 1.116, 1.138, 1.159, 1.183, 1.205, 1.232,
+ 1.211, 1.186, 1.167, 1.151, 1.128, 1.108, 1.089, 1.072, 1.057, 1.042, 1.031, 1.021, 1.013, 1.006, 1.002, 0.999, 0.999, 1.003, 1.007, 1.013, 1.021, 1.031, 1.047, 1.062, 1.081, 1.098, 1.121, 1.141, 1.164, 1.185, 1.207, 1.232,
+ 1.211, 1.188, 1.169, 1.154, 1.134, 1.114, 1.094, 1.078, 1.063, 1.051, 1.039, 1.028, 1.019, 1.013, 1.007, 1.006, 1.006, 1.007, 1.013, 1.019, 1.027, 1.039, 1.051, 1.069, 1.087, 1.105, 1.124, 1.146, 1.165, 1.186, 1.209, 1.232,
+ 1.214, 1.191, 1.175, 1.159, 1.141, 1.123, 1.105, 1.087, 1.072, 1.058, 1.046, 1.036, 1.028, 1.019, 1.014, 1.013, 1.013, 1.015, 1.019, 1.027, 1.037, 1.048, 1.061, 1.076, 1.094, 1.109, 1.132, 1.149, 1.169, 1.189, 1.209, 1.233,
+ 1.219, 1.194, 1.179, 1.163, 1.146, 1.129, 1.113, 1.095, 1.081, 1.066, 1.055, 1.045, 1.036, 1.029, 1.023, 1.021, 1.021, 1.026, 1.031, 1.037, 1.048, 1.057, 1.069, 1.085, 1.101, 1.118, 1.137, 1.156, 1.174, 1.193, 1.213, 1.233,
+ 1.219, 1.199, 1.184, 1.172, 1.155, 1.138, 1.122, 1.104, 1.088, 1.075, 1.065, 1.055, 1.045, 1.038, 1.034, 1.031, 1.031, 1.035, 1.041, 1.048, 1.057, 1.066, 1.081, 1.096, 1.111, 1.125, 1.146, 1.164, 1.178, 1.196, 1.214, 1.233,
+ 1.222, 1.204, 1.189, 1.178, 1.162, 1.148, 1.132, 1.115, 1.101, 1.087, 1.075, 1.064, 1.055, 1.048, 1.043, 1.042, 1.042, 1.046, 1.049, 1.057, 1.066, 1.076, 1.089, 1.106, 1.121, 1.133, 1.149, 1.167, 1.183, 1.199, 1.215, 1.234,
+ 1.222, 1.205, 1.191, 1.184, 1.171, 1.155, 1.142, 1.124, 1.109, 1.097, 1.087, 1.077, 1.065, 1.059, 1.055, 1.053, 1.053, 1.057, 1.059, 1.067, 1.076, 1.088, 1.102, 1.116, 1.131, 1.143, 1.157, 1.175, 1.187, 1.202, 1.215, 1.231,
+ 1.223, 1.211, 1.198, 1.189, 1.178, 1.165, 1.151, 1.136, 1.122, 1.108, 1.097, 1.087, 1.079, 1.073, 1.067, 1.066, 1.066, 1.069, 1.074, 1.079, 1.088, 1.101, 1.114, 1.128, 1.141, 1.152, 1.166, 1.182, 1.194, 1.205, 1.215, 1.229,
+ 1.223, 1.212, 1.204, 1.197, 1.186, 1.173, 1.161, 1.149, 1.133, 1.121, 1.108, 1.101, 1.092, 1.085, 1.082, 1.082, 1.082, 1.085, 1.091, 1.096, 1.101, 1.113, 1.125, 1.138, 1.151, 1.164, 1.175, 1.188, 1.198, 1.207, 1.215, 1.222,
+ 1.217, 1.213, 1.211, 1.203, 1.194, 1.181, 1.169, 1.158, 1.145, 1.133, 1.123, 1.113, 1.106, 1.097, 1.096, 1.094, 1.094, 1.098, 1.104, 1.108, 1.114, 1.124, 1.137, 1.149, 1.161, 1.172, 1.182, 1.194, 1.203, 1.209, 1.211, 1.217,
+ 1.214, 1.211, 1.209, 1.206, 1.201, 1.188, 1.179, 1.168, 1.154, 1.144, 1.136, 1.126, 1.119, 1.112, 1.109, 1.108, 1.108, 1.108, 1.117, 1.119, 1.124, 1.133, 1.147, 1.158, 1.171, 1.178, 1.188, 1.198, 1.205, 1.208, 1.209, 1.211,
+ 1.207, 1.208, 1.209, 1.206, 1.202, 1.192, 1.182, 1.171, 1.159, 1.146, 1.142, 1.136, 1.126, 1.119, 1.116, 1.114, 1.115, 1.117, 1.119, 1.128, 1.129, 1.136, 1.155, 1.162, 1.176, 1.182, 1.188, 1.198, 1.205, 1.208, 1.207, 1.206
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.879, 1.878, 1.872, 1.862, 1.856, 1.842, 1.826, 1.815, 1.811, 1.799, 1.787, 1.777, 1.768, 1.761, 1.761, 1.761, 1.762, 1.763, 1.764, 1.769, 1.776, 1.789, 1.799, 1.807, 1.824, 1.841, 1.853, 1.861, 1.871, 1.874, 1.885, 1.889,
+ 1.879, 1.875, 1.859, 1.846, 1.835, 1.817, 1.806, 1.794, 1.777, 1.771, 1.755, 1.743, 1.733, 1.726, 1.721, 1.721, 1.721, 1.722, 1.729, 1.734, 1.747, 1.759, 1.771, 1.783, 1.801, 1.813, 1.831, 1.841, 1.849, 1.862, 1.876, 1.888,
+ 1.876, 1.861, 1.846, 1.835, 1.817, 1.806, 1.793, 1.777, 1.766, 1.752, 1.736, 1.727, 1.713, 1.702, 1.696, 1.695, 1.695, 1.697, 1.704, 1.715, 1.725, 1.739, 1.754, 1.771, 1.783, 1.801, 1.813, 1.831, 1.841, 1.851, 1.866, 1.888,
+ 1.878, 1.861, 1.843, 1.829, 1.811, 1.794, 1.779, 1.766, 1.751, 1.734, 1.721, 1.711, 1.695, 1.682, 1.679, 1.677, 1.677, 1.678, 1.687, 1.696, 1.713, 1.723, 1.737, 1.754, 1.774, 1.785, 1.811, 1.825, 1.833, 1.849, 1.866, 1.889,
+ 1.882, 1.859, 1.837, 1.821, 1.803, 1.784, 1.769, 1.752, 1.735, 1.717, 1.701, 1.689, 1.676, 1.664, 1.659, 1.658, 1.658, 1.659, 1.668, 1.679, 1.694, 1.711, 1.723, 1.739, 1.756, 1.777, 1.797, 1.813, 1.827, 1.844, 1.865, 1.889,
+ 1.869, 1.849, 1.832, 1.811, 1.792, 1.772, 1.755, 1.737, 1.717, 1.699, 1.688, 1.674, 1.661, 1.646, 1.642, 1.638, 1.638, 1.641, 1.651, 1.659, 1.676, 1.693, 1.708, 1.724, 1.744, 1.763, 1.783, 1.801, 1.819, 1.838, 1.864, 1.889,
+ 1.869, 1.841, 1.817, 1.801, 1.782, 1.758, 1.741, 1.721, 1.699, 1.688, 1.674, 1.658, 1.643, 1.632, 1.627, 1.621, 1.621, 1.622, 1.631, 1.643, 1.658, 1.676, 1.689, 1.708, 1.729, 1.748, 1.767, 1.791, 1.812, 1.836, 1.859, 1.891,
+ 1.861, 1.836, 1.814, 1.792, 1.772, 1.745, 1.728, 1.707, 1.688, 1.673, 1.658, 1.643, 1.629, 1.618, 1.612, 1.609, 1.609, 1.611, 1.615, 1.629, 1.642, 1.658, 1.676, 1.689, 1.711, 1.734, 1.758, 1.782, 1.804, 1.827, 1.859, 1.891,
+ 1.861, 1.829, 1.807, 1.784, 1.759, 1.735, 1.717, 1.692, 1.674, 1.659, 1.644, 1.629, 1.617, 1.605, 1.598, 1.595, 1.595, 1.598, 1.607, 1.615, 1.631, 1.642, 1.661, 1.681, 1.701, 1.724, 1.746, 1.771, 1.799, 1.825, 1.857, 1.891,
+ 1.861, 1.826, 1.804, 1.779, 1.749, 1.729, 1.707, 1.687, 1.665, 1.648, 1.629, 1.617, 1.604, 1.595, 1.589, 1.585, 1.585, 1.592, 1.597, 1.607, 1.623, 1.635, 1.652, 1.674, 1.693, 1.716, 1.739, 1.766, 1.794, 1.822, 1.855, 1.889,
+ 1.861, 1.824, 1.799, 1.777, 1.748, 1.723, 1.701, 1.678, 1.657, 1.639, 1.619, 1.605, 1.596, 1.586, 1.581, 1.579, 1.577, 1.579, 1.588, 1.597, 1.612, 1.625, 1.641, 1.661, 1.681, 1.702, 1.732, 1.757, 1.785, 1.813, 1.847, 1.882,
+ 1.856, 1.819, 1.796, 1.767, 1.739, 1.714, 1.693, 1.666, 1.651, 1.629, 1.613, 1.597, 1.586, 1.579, 1.576, 1.572, 1.572, 1.573, 1.579, 1.588, 1.602, 1.619, 1.633, 1.655, 1.674, 1.698, 1.729, 1.754, 1.782, 1.809, 1.842, 1.874,
+ 1.853, 1.815, 1.792, 1.761, 1.734, 1.707, 1.682, 1.659, 1.639, 1.622, 1.605, 1.591, 1.579, 1.574, 1.569, 1.565, 1.566, 1.569, 1.573, 1.584, 1.597, 1.609, 1.624, 1.645, 1.666, 1.695, 1.722, 1.746, 1.772, 1.799, 1.835, 1.873,
+ 1.847, 1.811, 1.789, 1.759, 1.732, 1.703, 1.681, 1.657, 1.637, 1.619, 1.603, 1.588, 1.575, 1.569, 1.563, 1.561, 1.561, 1.563, 1.569, 1.576, 1.589, 1.601, 1.616, 1.636, 1.659, 1.686, 1.712, 1.741, 1.767, 1.798, 1.832, 1.873,
+ 1.847, 1.803, 1.779, 1.756, 1.727, 1.699, 1.674, 1.652, 1.632, 1.616, 1.595, 1.583, 1.572, 1.564, 1.558, 1.556, 1.557, 1.559, 1.563, 1.569, 1.583, 1.593, 1.613, 1.633, 1.657, 1.684, 1.709, 1.741, 1.766, 1.796, 1.831, 1.871,
+ 1.845, 1.802, 1.779, 1.755, 1.725, 1.696, 1.673, 1.649, 1.629, 1.614, 1.595, 1.582, 1.572, 1.563, 1.557, 1.556, 1.556, 1.558, 1.562, 1.569, 1.581, 1.593, 1.612, 1.633, 1.656, 1.679, 1.709, 1.741, 1.764, 1.796, 1.828, 1.869,
+ 1.845, 1.801, 1.779, 1.749, 1.723, 1.697, 1.673, 1.649, 1.627, 1.613, 1.593, 1.581, 1.573, 1.563, 1.558, 1.555, 1.555, 1.556, 1.562, 1.573, 1.581, 1.594, 1.611, 1.633, 1.656, 1.679, 1.711, 1.739, 1.764, 1.794, 1.828, 1.869,
+ 1.844, 1.801, 1.781, 1.749, 1.723, 1.697, 1.673, 1.649, 1.627, 1.614, 1.595, 1.581, 1.574, 1.564, 1.559, 1.557, 1.556, 1.559, 1.564, 1.574, 1.582, 1.595, 1.611, 1.634, 1.659, 1.683, 1.709, 1.739, 1.765, 1.794, 1.829, 1.872,
+ 1.845, 1.802, 1.781, 1.754, 1.725, 1.701, 1.677, 1.652, 1.632, 1.616, 1.599, 1.586, 1.576, 1.569, 1.563, 1.559, 1.558, 1.562, 1.569, 1.576, 1.587, 1.599, 1.618, 1.635, 1.661, 1.685, 1.709, 1.739, 1.767, 1.796, 1.829, 1.868,
+ 1.845, 1.809, 1.785, 1.762, 1.731, 1.706, 1.685, 1.659, 1.641, 1.622, 1.606, 1.595, 1.581, 1.575, 1.569, 1.564, 1.564, 1.569, 1.574, 1.582, 1.594, 1.607, 1.625, 1.642, 1.668, 1.687, 1.716, 1.741, 1.769, 1.798, 1.829, 1.868,
+ 1.849, 1.811, 1.785, 1.765, 1.734, 1.709, 1.688, 1.666, 1.647, 1.628, 1.613, 1.601, 1.592, 1.581, 1.575, 1.572, 1.572, 1.575, 1.581, 1.589, 1.599, 1.611, 1.631, 1.649, 1.673, 1.694, 1.721, 1.747, 1.771, 1.798, 1.829, 1.868,
+ 1.849, 1.816, 1.787, 1.766, 1.739, 1.716, 1.692, 1.673, 1.657, 1.641, 1.625, 1.612, 1.599, 1.592, 1.584, 1.581, 1.581, 1.581, 1.589, 1.598, 1.608, 1.622, 1.639, 1.659, 1.679, 1.701, 1.724, 1.751, 1.774, 1.802, 1.832, 1.868,
+ 1.855, 1.816, 1.793, 1.773, 1.748, 1.727, 1.707, 1.686, 1.667, 1.649, 1.636, 1.623, 1.612, 1.599, 1.594, 1.592, 1.591, 1.591, 1.598, 1.608, 1.621, 1.634, 1.649, 1.669, 1.693, 1.705, 1.736, 1.757, 1.778, 1.804, 1.833, 1.867,
+ 1.858, 1.818, 1.796, 1.778, 1.754, 1.733, 1.716, 1.695, 1.676, 1.661, 1.648, 1.635, 1.624, 1.613, 1.604, 1.601, 1.601, 1.606, 1.613, 1.621, 1.634, 1.646, 1.661, 1.679, 1.699, 1.714, 1.742, 1.761, 1.782, 1.809, 1.835, 1.867,
+ 1.857, 1.822, 1.801, 1.789, 1.766, 1.744, 1.726, 1.706, 1.688, 1.671, 1.659, 1.647, 1.635, 1.624, 1.621, 1.617, 1.617, 1.621, 1.627, 1.634, 1.645, 1.656, 1.674, 1.694, 1.709, 1.723, 1.751, 1.771, 1.786, 1.811, 1.837, 1.867,
+ 1.858, 1.824, 1.807, 1.794, 1.774, 1.757, 1.739, 1.716, 1.702, 1.687, 1.671, 1.662, 1.648, 1.636, 1.629, 1.629, 1.629, 1.633, 1.635, 1.646, 1.656, 1.669, 1.684, 1.705, 1.719, 1.732, 1.753, 1.774, 1.793, 1.815, 1.837, 1.871,
+ 1.858, 1.827, 1.809, 1.798, 1.782, 1.761, 1.749, 1.727, 1.711, 1.698, 1.687, 1.675, 1.663, 1.649, 1.646, 1.643, 1.643, 1.646, 1.649, 1.658, 1.669, 1.683, 1.698, 1.716, 1.731, 1.746, 1.761, 1.783, 1.795, 1.817, 1.836, 1.862,
+ 1.862, 1.834, 1.816, 1.805, 1.789, 1.774, 1.759, 1.743, 1.725, 1.711, 1.697, 1.688, 1.678, 1.668, 1.661, 1.659, 1.658, 1.659, 1.668, 1.673, 1.684, 1.698, 1.713, 1.728, 1.742, 1.757, 1.771, 1.791, 1.804, 1.821, 1.836, 1.862,
+ 1.859, 1.835, 1.825, 1.813, 1.794, 1.782, 1.771, 1.757, 1.739, 1.725, 1.711, 1.701, 1.693, 1.683, 1.679, 1.679, 1.679, 1.683, 1.689, 1.693, 1.698, 1.714, 1.726, 1.741, 1.754, 1.769, 1.781, 1.797, 1.808, 1.821, 1.835, 1.856,
+ 1.848, 1.836, 1.832, 1.822, 1.806, 1.789, 1.778, 1.765, 1.751, 1.739, 1.726, 1.718, 1.709, 1.699, 1.696, 1.695, 1.695, 1.696, 1.704, 1.705, 1.714, 1.724, 1.739, 1.753, 1.765, 1.777, 1.789, 1.803, 1.816, 1.824, 1.829, 1.842,
+ 1.839, 1.835, 1.834, 1.829, 1.815, 1.801, 1.787, 1.776, 1.759, 1.751, 1.744, 1.736, 1.724, 1.714, 1.711, 1.708, 1.707, 1.707, 1.717, 1.719, 1.724, 1.734, 1.748, 1.762, 1.775, 1.783, 1.796, 1.808, 1.819, 1.825, 1.828, 1.833,
+ 1.836, 1.833, 1.834, 1.832, 1.821, 1.806, 1.792, 1.785, 1.772, 1.759, 1.751, 1.744, 1.736, 1.725, 1.719, 1.715, 1.715, 1.718, 1.721, 1.728, 1.734, 1.736, 1.757, 1.768, 1.779, 1.787, 1.799, 1.812, 1.821, 1.824, 1.825, 1.833
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.189, 2.127, 2.115, 2.106, 2.113, 2.119, 2.131, 2.144, 2.155, 2.168, 2.176, 2.179, 2.181, 2.181, 2.185, 2.187, 2.187, 2.183, 2.179, 2.176, 2.169, 2.167, 2.159, 2.152, 2.145, 2.141, 2.135, 2.128, 2.124, 2.124, 2.139, 2.177,
+ 2.176, 2.133, 2.116, 2.112, 2.116, 2.125, 2.137, 2.154, 2.168, 2.179, 2.187, 2.194, 2.201, 2.204, 2.208, 2.208, 2.205, 2.202, 2.198, 2.195, 2.183, 2.177, 2.166, 2.159, 2.149, 2.143, 2.138, 2.132, 2.124, 2.125, 2.136, 2.164,
+ 2.175, 2.133, 2.117, 2.115, 2.121, 2.136, 2.154, 2.165, 2.179, 2.192, 2.198, 2.211, 2.218, 2.219, 2.221, 2.221, 2.217, 2.216, 2.211, 2.202, 2.197, 2.188, 2.181, 2.171, 2.159, 2.151, 2.141, 2.136, 2.125, 2.125, 2.132, 2.155,
+ 2.172, 2.128, 2.116, 2.116, 2.124, 2.143, 2.161, 2.177, 2.192, 2.204, 2.213, 2.221, 2.227, 2.231, 2.237, 2.237, 2.229, 2.224, 2.221, 2.213, 2.207, 2.197, 2.191, 2.179, 2.169, 2.156, 2.148, 2.138, 2.126, 2.123, 2.124, 2.149,
+ 2.169, 2.124, 2.119, 2.119, 2.135, 2.152, 2.174, 2.187, 2.204, 2.211, 2.224, 2.233, 2.236, 2.241, 2.246, 2.246, 2.243, 2.237, 2.234, 2.226, 2.218, 2.211, 2.199, 2.191, 2.177, 2.166, 2.155, 2.139, 2.129, 2.121, 2.121, 2.143,
+ 2.157, 2.124, 2.121, 2.127, 2.145, 2.157, 2.181, 2.197, 2.208, 2.221, 2.238, 2.245, 2.249, 2.249, 2.254, 2.254, 2.249, 2.247, 2.243, 2.237, 2.228, 2.219, 2.209, 2.198, 2.186, 2.172, 2.161, 2.143, 2.129, 2.121, 2.121, 2.141,
+ 2.157, 2.124, 2.124, 2.131, 2.148, 2.161, 2.188, 2.202, 2.214, 2.238, 2.246, 2.251, 2.255, 2.257, 2.259, 2.259, 2.257, 2.252, 2.251, 2.247, 2.238, 2.231, 2.219, 2.204, 2.193, 2.173, 2.166, 2.152, 2.134, 2.119, 2.119, 2.131,
+ 2.155, 2.125, 2.125, 2.135, 2.151, 2.169, 2.191, 2.207, 2.219, 2.243, 2.253, 2.258, 2.261, 2.266, 2.266, 2.267, 2.265, 2.262, 2.261, 2.254, 2.244, 2.238, 2.228, 2.212, 2.197, 2.179, 2.167, 2.158, 2.137, 2.122, 2.121, 2.131,
+ 2.155, 2.127, 2.127, 2.137, 2.153, 2.173, 2.197, 2.213, 2.231, 2.248, 2.257, 2.266, 2.271, 2.272, 2.274, 2.275, 2.275, 2.273, 2.271, 2.266, 2.257, 2.251, 2.238, 2.227, 2.209, 2.195, 2.175, 2.159, 2.141, 2.128, 2.127, 2.131,
+ 2.155, 2.128, 2.128, 2.139, 2.159, 2.182, 2.206, 2.225, 2.243, 2.252, 2.265, 2.272, 2.277, 2.283, 2.286, 2.284, 2.283, 2.282, 2.274, 2.272, 2.266, 2.256, 2.244, 2.238, 2.221, 2.202, 2.186, 2.169, 2.149, 2.129, 2.129, 2.135,
+ 2.154, 2.131, 2.131, 2.149, 2.166, 2.189, 2.211, 2.234, 2.248, 2.262, 2.272, 2.277, 2.287, 2.291, 2.293, 2.292, 2.291, 2.285, 2.284, 2.279, 2.272, 2.263, 2.254, 2.243, 2.226, 2.206, 2.193, 2.174, 2.153, 2.133, 2.133, 2.135,
+ 2.153, 2.135, 2.135, 2.151, 2.172, 2.198, 2.221, 2.238, 2.255, 2.265, 2.274, 2.287, 2.291, 2.296, 2.298, 2.298, 2.301, 2.297, 2.289, 2.285, 2.277, 2.271, 2.261, 2.251, 2.236, 2.216, 2.199, 2.179, 2.158, 2.135, 2.134, 2.135,
+ 2.152, 2.136, 2.136, 2.154, 2.176, 2.199, 2.224, 2.239, 2.256, 2.267, 2.282, 2.289, 2.295, 2.299, 2.303, 2.303, 2.302, 2.299, 2.297, 2.288, 2.284, 2.274, 2.262, 2.253, 2.238, 2.219, 2.202, 2.181, 2.158, 2.137, 2.135, 2.135,
+ 2.143, 2.134, 2.134, 2.154, 2.177, 2.201, 2.224, 2.241, 2.256, 2.271, 2.282, 2.289, 2.297, 2.302, 2.306, 2.306, 2.304, 2.301, 2.298, 2.289, 2.287, 2.272, 2.265, 2.255, 2.241, 2.221, 2.203, 2.183, 2.164, 2.141, 2.136, 2.135,
+ 2.142, 2.133, 2.133, 2.155, 2.178, 2.202, 2.223, 2.243, 2.258, 2.273, 2.283, 2.288, 2.296, 2.299, 2.306, 2.306, 2.301, 2.299, 2.296, 2.289, 2.286, 2.271, 2.267, 2.256, 2.244, 2.219, 2.206, 2.188, 2.163, 2.141, 2.137, 2.134,
+ 2.141, 2.131, 2.131, 2.153, 2.179, 2.202, 2.224, 2.242, 2.254, 2.274, 2.283, 2.288, 2.295, 2.298, 2.301, 2.301, 2.301, 2.296, 2.295, 2.289, 2.285, 2.271, 2.267, 2.257, 2.246, 2.223, 2.204, 2.188, 2.165, 2.141, 2.136, 2.134,
+ 2.141, 2.133, 2.133, 2.151, 2.179, 2.201, 2.224, 2.241, 2.254, 2.275, 2.283, 2.288, 2.294, 2.296, 2.298, 2.297, 2.295, 2.295, 2.294, 2.291, 2.284, 2.272, 2.267, 2.256, 2.248, 2.225, 2.208, 2.192, 2.167, 2.141, 2.137, 2.134,
+ 2.141, 2.132, 2.132, 2.151, 2.177, 2.199, 2.221, 2.238, 2.252, 2.274, 2.281, 2.287, 2.293, 2.295, 2.296, 2.294, 2.295, 2.295, 2.294, 2.291, 2.284, 2.274, 2.266, 2.257, 2.248, 2.226, 2.206, 2.189, 2.167, 2.143, 2.141, 2.141,
+ 2.141, 2.133, 2.133, 2.153, 2.175, 2.201, 2.221, 2.238, 2.252, 2.271, 2.278, 2.284, 2.288, 2.291, 2.292, 2.291, 2.293, 2.293, 2.293, 2.287, 2.279, 2.275, 2.266, 2.256, 2.243, 2.224, 2.206, 2.189, 2.168, 2.146, 2.142, 2.134,
+ 2.137, 2.131, 2.131, 2.154, 2.173, 2.199, 2.221, 2.236, 2.251, 2.267, 2.272, 2.278, 2.284, 2.287, 2.288, 2.286, 2.288, 2.288, 2.288, 2.283, 2.277, 2.273, 2.265, 2.256, 2.241, 2.219, 2.205, 2.187, 2.167, 2.144, 2.137, 2.132,
+ 2.136, 2.131, 2.131, 2.152, 2.169, 2.197, 2.218, 2.233, 2.246, 2.257, 2.269, 2.274, 2.281, 2.284, 2.286, 2.285, 2.286, 2.286, 2.286, 2.279, 2.274, 2.269, 2.263, 2.254, 2.239, 2.217, 2.203, 2.181, 2.162, 2.143, 2.133, 2.131,
+ 2.136, 2.131, 2.131, 2.151, 2.167, 2.189, 2.205, 2.226, 2.242, 2.253, 2.261, 2.271, 2.275, 2.279, 2.283, 2.283, 2.284, 2.284, 2.281, 2.277, 2.271, 2.264, 2.257, 2.246, 2.232, 2.215, 2.195, 2.176, 2.158, 2.141, 2.131, 2.128,
+ 2.136, 2.129, 2.131, 2.147, 2.162, 2.181, 2.203, 2.219, 2.236, 2.246, 2.256, 2.263, 2.271, 2.274, 2.278, 2.278, 2.276, 2.277, 2.276, 2.273, 2.266, 2.258, 2.251, 2.241, 2.227, 2.198, 2.191, 2.169, 2.154, 2.136, 2.125, 2.122,
+ 2.132, 2.126, 2.126, 2.139, 2.153, 2.168, 2.194, 2.212, 2.224, 2.238, 2.251, 2.258, 2.263, 2.266, 2.269, 2.271, 2.269, 2.269, 2.269, 2.267, 2.259, 2.253, 2.245, 2.237, 2.219, 2.196, 2.179, 2.162, 2.149, 2.132, 2.122, 2.121,
+ 2.124, 2.119, 2.121, 2.137, 2.147, 2.164, 2.183, 2.199, 2.219, 2.231, 2.239, 2.251, 2.257, 2.261, 2.262, 2.262, 2.259, 2.259, 2.261, 2.258, 2.253, 2.245, 2.237, 2.224, 2.209, 2.187, 2.174, 2.157, 2.141, 2.122, 2.121, 2.121,
+ 2.123, 2.115, 2.115, 2.131, 2.138, 2.157, 2.174, 2.188, 2.207, 2.221, 2.233, 2.239, 2.243, 2.244, 2.244, 2.244, 2.246, 2.245, 2.246, 2.244, 2.241, 2.231, 2.224, 2.212, 2.195, 2.176, 2.159, 2.145, 2.128, 2.117, 2.117, 2.123,
+ 2.123, 2.113, 2.113, 2.123, 2.132, 2.141, 2.162, 2.177, 2.191, 2.208, 2.221, 2.231, 2.231, 2.232, 2.234, 2.235, 2.235, 2.235, 2.238, 2.237, 2.225, 2.214, 2.209, 2.199, 2.181, 2.164, 2.146, 2.135, 2.123, 2.116, 2.116, 2.115,
+ 2.129, 2.115, 2.115, 2.121, 2.128, 2.135, 2.149, 2.164, 2.178, 2.193, 2.207, 2.221, 2.222, 2.222, 2.223, 2.224, 2.224, 2.224, 2.224, 2.223, 2.214, 2.205, 2.196, 2.185, 2.171, 2.151, 2.141, 2.129, 2.119, 2.116, 2.116, 2.117,
+ 2.137, 2.119, 2.119, 2.119, 2.122, 2.129, 2.141, 2.159, 2.167, 2.182, 2.195, 2.206, 2.211, 2.216, 2.218, 2.219, 2.219, 2.219, 2.217, 2.212, 2.202, 2.194, 2.184, 2.174, 2.162, 2.145, 2.134, 2.124, 2.118, 2.117, 2.118, 2.121,
+ 2.138, 2.131, 2.121, 2.122, 2.125, 2.128, 2.137, 2.154, 2.162, 2.176, 2.187, 2.194, 2.196, 2.198, 2.205, 2.205, 2.202, 2.202, 2.203, 2.201, 2.191, 2.182, 2.174, 2.162, 2.149, 2.136, 2.126, 2.121, 2.119, 2.118, 2.127, 2.133,
+ 2.157, 2.148, 2.131, 2.129, 2.129, 2.136, 2.148, 2.157, 2.169, 2.177, 2.182, 2.187, 2.188, 2.191, 2.193, 2.193, 2.192, 2.199, 2.201, 2.199, 2.186, 2.178, 2.167, 2.152, 2.146, 2.137, 2.126, 2.124, 2.121, 2.126, 2.133, 2.151,
+ 2.161, 2.157, 2.148, 2.147, 2.147, 2.147, 2.154, 2.162, 2.174, 2.179, 2.181, 2.184, 2.186, 2.187, 2.189, 2.189, 2.187, 2.188, 2.199, 2.201, 2.187, 2.178, 2.163, 2.148, 2.145, 2.141, 2.131, 2.129, 2.128, 2.135, 2.151, 2.153
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.191, 1.165, 1.156, 1.155, 1.157, 1.161, 1.168, 1.176, 1.179, 1.185, 1.187, 1.189, 1.189, 1.189, 1.191, 1.191, 1.191, 1.189, 1.188, 1.188, 1.185, 1.184, 1.182, 1.178, 1.173, 1.171, 1.166, 1.163, 1.159, 1.159, 1.164, 1.187,
+ 1.188, 1.164, 1.157, 1.156, 1.158, 1.166, 1.173, 1.179, 1.185, 1.193, 1.195, 1.198, 1.199, 1.201, 1.201, 1.202, 1.201, 1.199, 1.199, 1.196, 1.194, 1.189, 1.185, 1.182, 1.177, 1.172, 1.168, 1.164, 1.161, 1.161, 1.162, 1.181,
+ 1.184, 1.164, 1.157, 1.157, 1.161, 1.171, 1.179, 1.185, 1.193, 1.197, 1.201, 1.206, 1.208, 1.209, 1.209, 1.208, 1.207, 1.207, 1.207, 1.202, 1.199, 1.195, 1.192, 1.189, 1.182, 1.176, 1.171, 1.166, 1.161, 1.159, 1.161, 1.177,
+ 1.183, 1.162, 1.158, 1.158, 1.163, 1.174, 1.182, 1.191, 1.197, 1.203, 1.208, 1.212, 1.214, 1.214, 1.218, 1.218, 1.214, 1.212, 1.211, 1.208, 1.206, 1.201, 1.197, 1.192, 1.189, 1.179, 1.174, 1.168, 1.162, 1.159, 1.159, 1.173,
+ 1.181, 1.159, 1.159, 1.159, 1.168, 1.178, 1.189, 1.196, 1.204, 1.208, 1.213, 1.217, 1.219, 1.221, 1.222, 1.222, 1.222, 1.221, 1.219, 1.215, 1.212, 1.208, 1.202, 1.197, 1.189, 1.183, 1.178, 1.169, 1.163, 1.158, 1.158, 1.169,
+ 1.174, 1.159, 1.159, 1.164, 1.172, 1.179, 1.192, 1.201, 1.208, 1.212, 1.219, 1.224, 1.225, 1.227, 1.228, 1.228, 1.226, 1.225, 1.224, 1.221, 1.217, 1.212, 1.208, 1.202, 1.194, 1.187, 1.181, 1.172, 1.164, 1.157, 1.157, 1.169,
+ 1.174, 1.159, 1.159, 1.165, 1.174, 1.184, 1.197, 1.205, 1.209, 1.219, 1.224, 1.228, 1.231, 1.231, 1.231, 1.231, 1.229, 1.229, 1.228, 1.226, 1.222, 1.218, 1.212, 1.205, 1.199, 1.188, 1.181, 1.175, 1.165, 1.157, 1.157, 1.163,
+ 1.173, 1.159, 1.159, 1.165, 1.176, 1.186, 1.198, 1.207, 1.213, 1.223, 1.229, 1.231, 1.235, 1.236, 1.236, 1.236, 1.236, 1.235, 1.234, 1.232, 1.226, 1.223, 1.218, 1.209, 1.201, 1.192, 1.183, 1.178, 1.165, 1.157, 1.157, 1.163,
+ 1.172, 1.159, 1.159, 1.166, 1.176, 1.188, 1.201, 1.209, 1.217, 1.227, 1.231, 1.236, 1.238, 1.239, 1.241, 1.242, 1.242, 1.241, 1.239, 1.235, 1.232, 1.227, 1.223, 1.215, 1.208, 1.199, 1.187, 1.179, 1.167, 1.159, 1.159, 1.163,
+ 1.172, 1.159, 1.159, 1.166, 1.177, 1.189, 1.203, 1.212, 1.223, 1.228, 1.236, 1.239, 1.242, 1.245, 1.246, 1.246, 1.247, 1.246, 1.242, 1.241, 1.237, 1.232, 1.226, 1.223, 1.213, 1.202, 1.191, 1.182, 1.172, 1.159, 1.159, 1.163,
+ 1.168, 1.158, 1.158, 1.167, 1.179, 1.192, 1.204, 1.218, 1.225, 1.233, 1.238, 1.242, 1.246, 1.248, 1.251, 1.251, 1.249, 1.248, 1.247, 1.244, 1.239, 1.237, 1.228, 1.223, 1.214, 1.203, 1.194, 1.183, 1.173, 1.161, 1.161, 1.162,
+ 1.166, 1.158, 1.158, 1.168, 1.183, 1.195, 1.207, 1.218, 1.226, 1.233, 1.239, 1.246, 1.248, 1.251, 1.254, 1.254, 1.254, 1.251, 1.249, 1.247, 1.242, 1.239, 1.232, 1.227, 1.219, 1.207, 1.195, 1.186, 1.175, 1.162, 1.161, 1.162,
+ 1.165, 1.158, 1.158, 1.168, 1.183, 1.196, 1.208, 1.219, 1.227, 1.234, 1.241, 1.247, 1.251, 1.254, 1.255, 1.256, 1.256, 1.254, 1.252, 1.249, 1.246, 1.241, 1.234, 1.228, 1.221, 1.211, 1.199, 1.187, 1.175, 1.163, 1.162, 1.162,
+ 1.161, 1.158, 1.158, 1.169, 1.183, 1.196, 1.208, 1.217, 1.227, 1.234, 1.241, 1.247, 1.253, 1.254, 1.256, 1.257, 1.256, 1.255, 1.253, 1.249, 1.247, 1.241, 1.236, 1.229, 1.221, 1.211, 1.199, 1.189, 1.176, 1.164, 1.163, 1.162,
+ 1.161, 1.156, 1.156, 1.169, 1.183, 1.196, 1.207, 1.218, 1.227, 1.235, 1.241, 1.246, 1.252, 1.254, 1.256, 1.257, 1.256, 1.254, 1.253, 1.249, 1.247, 1.241, 1.237, 1.231, 1.223, 1.211, 1.201, 1.191, 1.177, 1.164, 1.164, 1.161,
+ 1.161, 1.155, 1.155, 1.169, 1.182, 1.195, 1.208, 1.216, 1.225, 1.235, 1.241, 1.245, 1.249, 1.252, 1.254, 1.254, 1.254, 1.253, 1.252, 1.249, 1.246, 1.239, 1.237, 1.231, 1.224, 1.211, 1.201, 1.191, 1.178, 1.164, 1.162, 1.161,
+ 1.159, 1.155, 1.155, 1.168, 1.181, 1.195, 1.208, 1.217, 1.223, 1.235, 1.241, 1.244, 1.248, 1.251, 1.252, 1.252, 1.252, 1.252, 1.251, 1.248, 1.245, 1.241, 1.236, 1.231, 1.224, 1.212, 1.202, 1.191, 1.179, 1.164, 1.162, 1.161,
+ 1.158, 1.154, 1.154, 1.167, 1.181, 1.194, 1.206, 1.216, 1.222, 1.234, 1.237, 1.242, 1.245, 1.248, 1.251, 1.249, 1.249, 1.249, 1.249, 1.248, 1.244, 1.241, 1.235, 1.229, 1.223, 1.213, 1.202, 1.191, 1.179, 1.167, 1.163, 1.163,
+ 1.158, 1.154, 1.154, 1.168, 1.181, 1.194, 1.206, 1.215, 1.223, 1.231, 1.236, 1.239, 1.243, 1.245, 1.246, 1.246, 1.248, 1.248, 1.248, 1.245, 1.242, 1.239, 1.235, 1.229, 1.223, 1.213, 1.202, 1.191, 1.179, 1.167, 1.163, 1.162,
+ 1.157, 1.154, 1.154, 1.168, 1.179, 1.194, 1.205, 1.215, 1.222, 1.229, 1.233, 1.236, 1.239, 1.243, 1.244, 1.244, 1.245, 1.245, 1.244, 1.243, 1.239, 1.236, 1.234, 1.229, 1.222, 1.211, 1.202, 1.191, 1.179, 1.166, 1.163, 1.161,
+ 1.156, 1.155, 1.155, 1.168, 1.179, 1.193, 1.205, 1.213, 1.219, 1.225, 1.231, 1.234, 1.238, 1.239, 1.241, 1.243, 1.243, 1.243, 1.243, 1.239, 1.237, 1.235, 1.231, 1.228, 1.221, 1.209, 1.199, 1.189, 1.178, 1.166, 1.162, 1.159,
+ 1.156, 1.156, 1.157, 1.167, 1.178, 1.191, 1.199, 1.209, 1.217, 1.223, 1.226, 1.231, 1.233, 1.236, 1.239, 1.239, 1.241, 1.241, 1.239, 1.237, 1.235, 1.232, 1.229, 1.224, 1.217, 1.209, 1.196, 1.187, 1.176, 1.165, 1.159, 1.157,
+ 1.157, 1.157, 1.157, 1.166, 1.175, 1.187, 1.198, 1.205, 1.213, 1.219, 1.223, 1.227, 1.231, 1.233, 1.236, 1.236, 1.234, 1.235, 1.235, 1.235, 1.231, 1.229, 1.227, 1.222, 1.216, 1.201, 1.194, 1.184, 1.174, 1.163, 1.157, 1.156,
+ 1.158, 1.155, 1.155, 1.165, 1.172, 1.181, 1.194, 1.202, 1.208, 1.215, 1.221, 1.223, 1.227, 1.229, 1.231, 1.231, 1.231, 1.232, 1.233, 1.231, 1.228, 1.227, 1.223, 1.219, 1.213, 1.199, 1.189, 1.181, 1.171, 1.161, 1.157, 1.156,
+ 1.155, 1.154, 1.154, 1.164, 1.169, 1.179, 1.189, 1.196, 1.203, 1.208, 1.215, 1.221, 1.222, 1.224, 1.225, 1.225, 1.226, 1.228, 1.228, 1.227, 1.225, 1.222, 1.219, 1.213, 1.206, 1.196, 1.187, 1.177, 1.168, 1.159, 1.156, 1.156,
+ 1.155, 1.152, 1.152, 1.162, 1.167, 1.175, 1.185, 1.191, 1.198, 1.205, 1.209, 1.214, 1.216, 1.217, 1.217, 1.217, 1.219, 1.219, 1.219, 1.219, 1.217, 1.215, 1.213, 1.207, 1.199, 1.191, 1.179, 1.172, 1.165, 1.156, 1.155, 1.155,
+ 1.155, 1.152, 1.152, 1.161, 1.163, 1.169, 1.179, 1.186, 1.192, 1.198, 1.204, 1.208, 1.211, 1.211, 1.211, 1.212, 1.212, 1.213, 1.215, 1.215, 1.211, 1.208, 1.205, 1.199, 1.194, 1.185, 1.175, 1.167, 1.161, 1.156, 1.155, 1.153,
+ 1.157, 1.152, 1.152, 1.159, 1.162, 1.166, 1.174, 1.181, 1.187, 1.192, 1.197, 1.203, 1.204, 1.205, 1.204, 1.204, 1.204, 1.205, 1.206, 1.206, 1.204, 1.201, 1.198, 1.194, 1.187, 1.176, 1.171, 1.164, 1.159, 1.156, 1.155, 1.154,
+ 1.159, 1.154, 1.154, 1.158, 1.159, 1.163, 1.171, 1.176, 1.181, 1.187, 1.191, 1.195, 1.198, 1.199, 1.199, 1.201, 1.201, 1.202, 1.202, 1.199, 1.196, 1.193, 1.191, 1.188, 1.182, 1.174, 1.166, 1.162, 1.157, 1.156, 1.156, 1.156,
+ 1.162, 1.161, 1.158, 1.159, 1.159, 1.162, 1.167, 1.173, 1.178, 1.181, 1.186, 1.189, 1.189, 1.191, 1.193, 1.193, 1.193, 1.194, 1.194, 1.194, 1.189, 1.187, 1.186, 1.182, 1.176, 1.167, 1.163, 1.159, 1.158, 1.157, 1.158, 1.161,
+ 1.172, 1.165, 1.162, 1.162, 1.163, 1.166, 1.169, 1.173, 1.178, 1.181, 1.182, 1.185, 1.186, 1.186, 1.186, 1.187, 1.187, 1.189, 1.192, 1.191, 1.187, 1.185, 1.181, 1.177, 1.172, 1.167, 1.163, 1.159, 1.159, 1.161, 1.163, 1.166,
+ 1.173, 1.172, 1.166, 1.165, 1.166, 1.168, 1.171, 1.176, 1.179, 1.182, 1.181, 1.183, 1.185, 1.185, 1.185, 1.185, 1.185, 1.185, 1.191, 1.191, 1.185, 1.181, 1.179, 1.173, 1.169, 1.168, 1.163, 1.162, 1.161, 1.164, 1.166, 1.167
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.271, 2.218, 2.105, 2.004, 1.909, 1.829, 1.762, 1.705, 1.665, 1.629, 1.592, 1.559, 1.528, 1.516, 1.511, 1.511, 1.511, 1.514, 1.525, 1.553, 1.585, 1.617, 1.655, 1.697, 1.752, 1.816, 1.893, 1.982, 2.084, 2.195, 2.321, 2.342,
+ 2.218, 2.166, 2.057, 1.959, 1.871, 1.793, 1.726, 1.675, 1.633, 1.592, 1.559, 1.528, 1.503, 1.484, 1.474, 1.472, 1.472, 1.482, 1.499, 1.523, 1.553, 1.585, 1.619, 1.664, 1.715, 1.779, 1.855, 1.938, 2.037, 2.147, 2.259, 2.321,
+ 2.166, 2.101, 1.997, 1.901, 1.818, 1.743, 1.683, 1.634, 1.588, 1.546, 1.508, 1.476, 1.449, 1.429, 1.418, 1.415, 1.415, 1.425, 1.444, 1.469, 1.501, 1.538, 1.577, 1.622, 1.671, 1.728, 1.799, 1.881, 1.975, 2.078, 2.185, 2.259,
+ 2.101, 2.039, 1.938, 1.848, 1.768, 1.699, 1.641, 1.588, 1.541, 1.494, 1.455, 1.421, 1.394, 1.374, 1.361, 1.357, 1.357, 1.367, 1.388, 1.414, 1.448, 1.485, 1.528, 1.577, 1.626, 1.682, 1.748, 1.827, 1.917, 2.014, 2.119, 2.185,
+ 2.039, 1.979, 1.883, 1.795, 1.722, 1.658, 1.596, 1.541, 1.493, 1.443, 1.401, 1.364, 1.336, 1.316, 1.303, 1.301, 1.301, 1.311, 1.331, 1.359, 1.393, 1.432, 1.482, 1.528, 1.582, 1.641, 1.701, 1.775, 1.861, 1.956, 2.056, 2.119,
+ 1.979, 1.932, 1.836, 1.752, 1.685, 1.621, 1.557, 1.497, 1.443, 1.399, 1.351, 1.314, 1.286, 1.264, 1.253, 1.249, 1.249, 1.259, 1.281, 1.311, 1.344, 1.387, 1.432, 1.484, 1.541, 1.601, 1.662, 1.731, 1.816, 1.908, 2.003, 2.056,
+ 1.934, 1.888, 1.798, 1.719, 1.651, 1.584, 1.519, 1.457, 1.401, 1.351, 1.307, 1.268, 1.239, 1.217, 1.206, 1.203, 1.203, 1.212, 1.234, 1.263, 1.298, 1.344, 1.387, 1.442, 1.502, 1.565, 1.628, 1.693, 1.774, 1.864, 1.956, 2.003,
+ 1.901, 1.851, 1.763, 1.688, 1.618, 1.551, 1.483, 1.419, 1.359, 1.307, 1.268, 1.226, 1.195, 1.175, 1.164, 1.161, 1.161, 1.171, 1.192, 1.221, 1.262, 1.298, 1.346, 1.404, 1.466, 1.532, 1.595, 1.661, 1.738, 1.826, 1.917, 1.956,
+ 1.873, 1.821, 1.734, 1.659, 1.591, 1.519, 1.451, 1.386, 1.324, 1.269, 1.226, 1.192, 1.159, 1.141, 1.127, 1.125, 1.125, 1.135, 1.155, 1.187, 1.221, 1.262, 1.311, 1.368, 1.432, 1.499, 1.566, 1.634, 1.708, 1.793, 1.882, 1.917,
+ 1.847, 1.797, 1.713, 1.639, 1.565, 1.493, 1.422, 1.355, 1.291, 1.238, 1.192, 1.159, 1.128, 1.108, 1.097, 1.094, 1.094, 1.104, 1.125, 1.155, 1.187, 1.229, 1.279, 1.338, 1.403, 1.471, 1.541, 1.611, 1.684, 1.766, 1.853, 1.885,
+ 1.828, 1.772, 1.691, 1.614, 1.539, 1.466, 1.394, 1.325, 1.264, 1.209, 1.163, 1.128, 1.104, 1.081, 1.069, 1.067, 1.067, 1.078, 1.101, 1.125, 1.159, 1.201, 1.252, 1.312, 1.379, 1.447, 1.517, 1.591, 1.665, 1.743, 1.831, 1.862,
+ 1.812, 1.754, 1.677, 1.599, 1.519, 1.445, 1.371, 1.302, 1.239, 1.185, 1.139, 1.104, 1.081, 1.061, 1.048, 1.046, 1.046, 1.058, 1.078, 1.102, 1.136, 1.177, 1.229, 1.289, 1.356, 1.425, 1.497, 1.572, 1.647, 1.724, 1.811, 1.847,
+ 1.798, 1.741, 1.663, 1.585, 1.506, 1.429, 1.353, 1.284, 1.221, 1.167, 1.121, 1.086, 1.061, 1.046, 1.031, 1.029, 1.029, 1.044, 1.058, 1.083, 1.116, 1.159, 1.209, 1.271, 1.338, 1.407, 1.479, 1.557, 1.633, 1.709, 1.792, 1.832,
+ 1.792, 1.727, 1.651, 1.572, 1.494, 1.414, 1.339, 1.269, 1.206, 1.152, 1.106, 1.072, 1.046, 1.031, 1.018, 1.016, 1.016, 1.029, 1.044, 1.069, 1.102, 1.145, 1.196, 1.256, 1.324, 1.394, 1.471, 1.545, 1.624, 1.698, 1.782, 1.825,
+ 1.787, 1.724, 1.647, 1.566, 1.484, 1.407, 1.329, 1.258, 1.196, 1.141, 1.097, 1.062, 1.036, 1.018, 1.012, 1.007, 1.011, 1.016, 1.034, 1.059, 1.093, 1.135, 1.186, 1.246, 1.314, 1.386, 1.461, 1.538, 1.616, 1.691, 1.773, 1.818,
+ 1.786, 1.721, 1.642, 1.562, 1.481, 1.402, 1.325, 1.254, 1.191, 1.137, 1.092, 1.057, 1.031, 1.013, 1.004, 1.001, 1.004, 1.011, 1.028, 1.054, 1.088, 1.129, 1.181, 1.241, 1.308, 1.382, 1.458, 1.535, 1.613, 1.687, 1.769, 1.818,
+ 1.786, 1.721, 1.642, 1.562, 1.481, 1.401, 1.325, 1.253, 1.191, 1.136, 1.091, 1.057, 1.031, 1.013, 1.003, 1.001, 1.001, 1.011, 1.028, 1.054, 1.088, 1.129, 1.181, 1.241, 1.308, 1.382, 1.458, 1.535, 1.613, 1.687, 1.769, 1.818,
+ 1.787, 1.722, 1.643, 1.563, 1.482, 1.402, 1.326, 1.254, 1.192, 1.138, 1.092, 1.057, 1.032, 1.013, 1.006, 1.002, 1.006, 1.012, 1.031, 1.057, 1.092, 1.133, 1.185, 1.243, 1.311, 1.385, 1.461, 1.539, 1.618, 1.691, 1.774, 1.821,
+ 1.789, 1.729, 1.651, 1.571, 1.489, 1.411, 1.334, 1.263, 1.201, 1.147, 1.101, 1.065, 1.038, 1.021, 1.013, 1.009, 1.012, 1.021, 1.038, 1.064, 1.098, 1.141, 1.193, 1.254, 1.321, 1.395, 1.472, 1.549, 1.626, 1.701, 1.785, 1.825,
+ 1.799, 1.739, 1.661, 1.581, 1.502, 1.422, 1.347, 1.277, 1.214, 1.159, 1.111, 1.075, 1.049, 1.037, 1.021, 1.019, 1.021, 1.036, 1.049, 1.076, 1.111, 1.154, 1.207, 1.268, 1.334, 1.408, 1.485, 1.562, 1.639, 1.715, 1.799, 1.837,
+ 1.811, 1.755, 1.676, 1.597, 1.518, 1.439, 1.365, 1.295, 1.231, 1.176, 1.129, 1.093, 1.067, 1.049, 1.038, 1.036, 1.036, 1.049, 1.067, 1.094, 1.129, 1.173, 1.225, 1.286, 1.353, 1.425, 1.501, 1.577, 1.653, 1.729, 1.815, 1.851,
+ 1.829, 1.774, 1.693, 1.615, 1.537, 1.462, 1.387, 1.316, 1.253, 1.198, 1.153, 1.115, 1.091, 1.067, 1.059, 1.056, 1.056, 1.067, 1.092, 1.115, 1.151, 1.196, 1.249, 1.309, 1.375, 1.446, 1.522, 1.595, 1.672, 1.752, 1.839, 1.871,
+ 1.851, 1.801, 1.713, 1.636, 1.561, 1.485, 1.411, 1.342, 1.281, 1.226, 1.179, 1.145, 1.115, 1.091, 1.082, 1.081, 1.082, 1.092, 1.115, 1.143, 1.178, 1.223, 1.276, 1.337, 1.402, 1.472, 1.544, 1.618, 1.691, 1.774, 1.865, 1.896,
+ 1.876, 1.831, 1.739, 1.663, 1.588, 1.513, 1.439, 1.374, 1.312, 1.258, 1.212, 1.179, 1.145, 1.123, 1.113, 1.112, 1.112, 1.122, 1.143, 1.177, 1.211, 1.256, 1.308, 1.368, 1.431, 1.501, 1.572, 1.641, 1.716, 1.802, 1.896, 1.931,
+ 1.909, 1.867, 1.771, 1.691, 1.617, 1.545, 1.474, 1.411, 1.349, 1.296, 1.252, 1.212, 1.182, 1.159, 1.149, 1.148, 1.149, 1.158, 1.179, 1.211, 1.253, 1.293, 1.344, 1.403, 1.465, 1.533, 1.603, 1.669, 1.747, 1.836, 1.931, 1.974,
+ 1.952, 1.905, 1.806, 1.722, 1.651, 1.578, 1.511, 1.448, 1.388, 1.338, 1.296, 1.252, 1.223, 1.201, 1.189, 1.189, 1.189, 1.199, 1.224, 1.253, 1.293, 1.338, 1.384, 1.442, 1.504, 1.571, 1.638, 1.704, 1.782, 1.872, 1.974, 2.025,
+ 2.004, 1.951, 1.849, 1.759, 1.688, 1.619, 1.552, 1.491, 1.435, 1.388, 1.338, 1.301, 1.272, 1.249, 1.238, 1.236, 1.236, 1.248, 1.271, 1.301, 1.338, 1.384, 1.431, 1.484, 1.543, 1.609, 1.675, 1.742, 1.825, 1.919, 2.025, 2.081,
+ 2.062, 2.004, 1.898, 1.805, 1.729, 1.661, 1.597, 1.539, 1.486, 1.435, 1.391, 1.354, 1.326, 1.303, 1.291, 1.289, 1.289, 1.301, 1.323, 1.353, 1.389, 1.431, 1.483, 1.528, 1.585, 1.649, 1.713, 1.787, 1.875, 1.971, 2.081, 2.145,
+ 2.129, 2.062, 1.951, 1.854, 1.774, 1.705, 1.642, 1.586, 1.539, 1.486, 1.445, 1.411, 1.383, 1.361, 1.348, 1.347, 1.348, 1.359, 1.379, 1.409, 1.447, 1.484, 1.528, 1.578, 1.631, 1.691, 1.759, 1.836, 1.928, 2.031, 2.145, 2.217,
+ 2.201, 2.129, 2.013, 1.912, 1.827, 1.752, 1.689, 1.642, 1.586, 1.544, 1.501, 1.468, 1.442, 1.421, 1.409, 1.409, 1.411, 1.421, 1.439, 1.467, 1.504, 1.543, 1.578, 1.629, 1.679, 1.739, 1.815, 1.894, 1.985, 2.098, 2.217, 2.298,
+ 2.273, 2.201, 2.081, 1.974, 1.886, 1.807, 1.741, 1.689, 1.643, 1.603, 1.562, 1.527, 1.504, 1.485, 1.475, 1.474, 1.475, 1.487, 1.503, 1.531, 1.565, 1.601, 1.634, 1.678, 1.728, 1.795, 1.877, 1.961, 2.052, 2.169, 2.298, 2.365,
+ 2.317, 2.273, 2.146, 2.039, 1.946, 1.864, 1.792, 1.737, 1.688, 1.643, 1.603, 1.562, 1.533, 1.525, 1.523, 1.523, 1.523, 1.525, 1.534, 1.565, 1.601, 1.634, 1.677, 1.722, 1.772, 1.848, 1.935, 2.023, 2.108, 2.232, 2.365, 2.403
+ ],
+ "sigma": 0.00285,
+ "sigma_Cb": 0.00166
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2873,
+ "ccm":
+ [
+ 1.88195, -0.26249, -0.61946,
+ -0.63842, 2.11535, -0.47693,
+ -0.13531, -0.99739, 2.13271
+ ]
+ },
+ {
+ "ct": 2965,
+ "ccm":
+ [
+ 2.15048, -0.51859, -0.63189,
+ -0.53572, 1.92585, -0.39013,
+ 0.01831, -1.48576, 2.46744
+ ]
+ },
+ {
+ "ct": 3606,
+ "ccm":
+ [
+ 1.97522, -0.43847, -0.53675,
+ -0.56151, 1.99765, -0.43614,
+ -0.12438, -0.77056, 1.89493
+ ]
+ },
+ {
+ "ct": 4700,
+ "ccm":
+ [
+ 2.00971, -0.51461, -0.49511,
+ -0.52109, 2.01003, -0.48894,
+ -0.09527, -0.67318, 1.76845
+ ]
+ },
+ {
+ "ct": 5890,
+ "ccm":
+ [
+ 2.13616, -0.65283, -0.48333,
+ -0.48364, 1.93115, -0.44751,
+ -0.13465, -0.54831, 1.68295
+ ]
+ },
+ {
+ "ct": 7600,
+ "ccm":
+ [
+ 2.06599, -0.39161, -0.67439,
+ -0.50883, 2.27467, -0.76583,
+ -0.13961, -0.66121, 1.80081
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/ov5647_noir.json b/src/ipa/rpi/pisp/data/ov5647_noir.json
new file mode 100644
index 00000000..3e04f21b
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/ov5647_noir.json
@@ -0,0 +1,1121 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 1024
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 29381,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 870,
+ "reference_Y": 12388
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 4.371
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 280,
+ "slope": 0.02153
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 1.0, 2.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 15000, 30000 ],
+ "gain": [ 1.0, 2.0, 2.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 15000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.02,
+ 1000, 0.02
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.01,
+ 1000, 0.01
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.9,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.005,
+ 1000, 0.005
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.19,
+ 1000, 0.19,
+ 10000, 0.19
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.238, 1.238, 1.238, 1.234, 1.227, 1.216, 1.207, 1.198, 1.191, 1.179, 1.169, 1.162, 1.155, 1.153, 1.152, 1.152, 1.152, 1.153, 1.154, 1.157, 1.166, 1.176, 1.183, 1.191, 1.204, 1.216, 1.226, 1.232, 1.239, 1.241, 1.241, 1.242,
+ 1.235, 1.234, 1.227, 1.222, 1.214, 1.203, 1.193, 1.184, 1.169, 1.161, 1.149, 1.139, 1.131, 1.126, 1.122, 1.121, 1.121, 1.123, 1.129, 1.136, 1.145, 1.157, 1.163, 1.175, 1.189, 1.199, 1.212, 1.221, 1.225, 1.231, 1.241, 1.242,
+ 1.234, 1.227, 1.222, 1.214, 1.203, 1.193, 1.183, 1.169, 1.158, 1.145, 1.133, 1.123, 1.113, 1.106, 1.101, 1.101, 1.101, 1.105, 1.111, 1.116, 1.128, 1.137, 1.149, 1.163, 1.174, 1.189, 1.199, 1.212, 1.221, 1.226, 1.234, 1.241,
+ 1.234, 1.226, 1.217, 1.209, 1.195, 1.183, 1.171, 1.158, 1.145, 1.131, 1.119, 1.108, 1.097, 1.088, 1.088, 1.085, 1.085, 1.087, 1.095, 1.102, 1.114, 1.124, 1.137, 1.149, 1.165, 1.176, 1.194, 1.207, 1.214, 1.224, 1.235, 1.247,
+ 1.238, 1.224, 1.213, 1.202, 1.187, 1.175, 1.161, 1.146, 1.132, 1.117, 1.105, 1.094, 1.082, 1.074, 1.071, 1.071, 1.071, 1.073, 1.079, 1.089, 1.099, 1.112, 1.124, 1.137, 1.152, 1.167, 1.183, 1.198, 1.211, 1.222, 1.235, 1.249,
+ 1.232, 1.221, 1.209, 1.195, 1.178, 1.163, 1.149, 1.134, 1.118, 1.104, 1.093, 1.079, 1.069, 1.061, 1.057, 1.056, 1.056, 1.059, 1.066, 1.073, 1.086, 1.098, 1.111, 1.124, 1.141, 1.157, 1.173, 1.188, 1.203, 1.219, 1.234, 1.251,
+ 1.231, 1.213, 1.197, 1.186, 1.169, 1.151, 1.137, 1.121, 1.104, 1.093, 1.079, 1.068, 1.056, 1.048, 1.045, 1.042, 1.042, 1.045, 1.051, 1.061, 1.071, 1.085, 1.098, 1.111, 1.129, 1.145, 1.161, 1.179, 1.197, 1.215, 1.231, 1.249,
+ 1.224, 1.211, 1.194, 1.178, 1.161, 1.141, 1.127, 1.109, 1.094, 1.081, 1.068, 1.055, 1.047, 1.038, 1.034, 1.032, 1.032, 1.035, 1.039, 1.048, 1.059, 1.071, 1.086, 1.098, 1.116, 1.134, 1.154, 1.172, 1.191, 1.209, 1.228, 1.249,
+ 1.223, 1.206, 1.187, 1.171, 1.152, 1.132, 1.117, 1.098, 1.082, 1.069, 1.056, 1.045, 1.037, 1.028, 1.024, 1.022, 1.022, 1.025, 1.031, 1.039, 1.048, 1.059, 1.074, 1.091, 1.106, 1.126, 1.144, 1.163, 1.186, 1.205, 1.227, 1.247,
+ 1.222, 1.199, 1.183, 1.164, 1.143, 1.126, 1.108, 1.091, 1.075, 1.059, 1.045, 1.037, 1.028, 1.019, 1.015, 1.014, 1.014, 1.018, 1.023, 1.031, 1.042, 1.051, 1.065, 1.081, 1.098, 1.118, 1.137, 1.158, 1.181, 1.201, 1.224, 1.245,
+ 1.221, 1.198, 1.179, 1.163, 1.141, 1.119, 1.101, 1.083, 1.066, 1.051, 1.038, 1.028, 1.019, 1.012, 1.009, 1.008, 1.007, 1.008, 1.015, 1.023, 1.033, 1.044, 1.058, 1.072, 1.089, 1.107, 1.131, 1.152, 1.172, 1.196, 1.216, 1.241,
+ 1.216, 1.194, 1.174, 1.155, 1.133, 1.112, 1.094, 1.074, 1.059, 1.045, 1.032, 1.021, 1.012, 1.007, 1.003, 1.002, 1.002, 1.003, 1.008, 1.015, 1.025, 1.038, 1.049, 1.067, 1.084, 1.102, 1.126, 1.147, 1.169, 1.191, 1.214, 1.238,
+ 1.212, 1.188, 1.171, 1.149, 1.127, 1.105, 1.087, 1.069, 1.055, 1.039, 1.027, 1.016, 1.007, 1.003, 0.999, 0.997, 0.998, 1.001, 1.003, 1.011, 1.021, 1.032, 1.043, 1.059, 1.077, 1.101, 1.121, 1.142, 1.164, 1.187, 1.211, 1.236,
+ 1.208, 1.187, 1.169, 1.149, 1.124, 1.104, 1.085, 1.067, 1.051, 1.036, 1.024, 1.013, 1.005, 0.999, 0.996, 0.994, 0.994, 0.996, 1.001, 1.006, 1.017, 1.025, 1.038, 1.053, 1.072, 1.093, 1.116, 1.138, 1.159, 1.183, 1.207, 1.235,
+ 1.208, 1.181, 1.164, 1.144, 1.122, 1.098, 1.079, 1.062, 1.046, 1.033, 1.018, 1.009, 1.002, 0.996, 0.992, 0.989, 0.991, 0.994, 0.996, 1.002, 1.012, 1.021, 1.035, 1.051, 1.069, 1.091, 1.113, 1.137, 1.157, 1.182, 1.206, 1.233,
+ 1.206, 1.179, 1.163, 1.142, 1.119, 1.098, 1.079, 1.061, 1.045, 1.031, 1.017, 1.008, 1.001, 0.995, 0.991, 0.989, 0.989, 0.992, 0.996, 1.001, 1.011, 1.019, 1.034, 1.051, 1.069, 1.089, 1.112, 1.136, 1.157, 1.181, 1.205, 1.233,
+ 1.206, 1.179, 1.163, 1.139, 1.119, 1.098, 1.079, 1.061, 1.044, 1.031, 1.016, 1.007, 1.001, 0.995, 0.991, 0.989, 0.989, 0.991, 0.996, 1.002, 1.011, 1.019, 1.034, 1.049, 1.069, 1.088, 1.113, 1.136, 1.156, 1.179, 1.204, 1.233,
+ 1.207, 1.179, 1.163, 1.139, 1.119, 1.099, 1.079, 1.061, 1.044, 1.031, 1.017, 1.007, 1.001, 0.995, 0.991, 0.989, 0.989, 0.992, 0.997, 1.003, 1.011, 1.021, 1.034, 1.051, 1.071, 1.089, 1.112, 1.136, 1.157, 1.179, 1.204, 1.233,
+ 1.207, 1.179, 1.163, 1.143, 1.121, 1.101, 1.082, 1.063, 1.047, 1.032, 1.019, 1.009, 1.003, 0.998, 0.994, 0.991, 0.991, 0.995, 0.999, 1.004, 1.013, 1.024, 1.038, 1.052, 1.071, 1.091, 1.112, 1.136, 1.159, 1.181, 1.205, 1.233,
+ 1.207, 1.185, 1.166, 1.148, 1.124, 1.104, 1.087, 1.068, 1.052, 1.037, 1.025, 1.016, 1.006, 1.002, 0.998, 0.995, 0.995, 0.999, 1.003, 1.008, 1.017, 1.029, 1.043, 1.056, 1.076, 1.094, 1.116, 1.138, 1.159, 1.183, 1.205, 1.232,
+ 1.211, 1.186, 1.167, 1.151, 1.128, 1.108, 1.089, 1.072, 1.057, 1.042, 1.031, 1.021, 1.013, 1.006, 1.002, 0.999, 0.999, 1.003, 1.007, 1.013, 1.021, 1.031, 1.047, 1.062, 1.081, 1.098, 1.121, 1.141, 1.164, 1.185, 1.207, 1.232,
+ 1.211, 1.188, 1.169, 1.154, 1.134, 1.114, 1.094, 1.078, 1.063, 1.051, 1.039, 1.028, 1.019, 1.013, 1.007, 1.006, 1.006, 1.007, 1.013, 1.019, 1.027, 1.039, 1.051, 1.069, 1.087, 1.105, 1.124, 1.146, 1.165, 1.186, 1.209, 1.232,
+ 1.214, 1.191, 1.175, 1.159, 1.141, 1.123, 1.105, 1.087, 1.072, 1.058, 1.046, 1.036, 1.028, 1.019, 1.014, 1.013, 1.013, 1.015, 1.019, 1.027, 1.037, 1.048, 1.061, 1.076, 1.094, 1.109, 1.132, 1.149, 1.169, 1.189, 1.209, 1.233,
+ 1.219, 1.194, 1.179, 1.163, 1.146, 1.129, 1.113, 1.095, 1.081, 1.066, 1.055, 1.045, 1.036, 1.029, 1.023, 1.021, 1.021, 1.026, 1.031, 1.037, 1.048, 1.057, 1.069, 1.085, 1.101, 1.118, 1.137, 1.156, 1.174, 1.193, 1.213, 1.233,
+ 1.219, 1.199, 1.184, 1.172, 1.155, 1.138, 1.122, 1.104, 1.088, 1.075, 1.065, 1.055, 1.045, 1.038, 1.034, 1.031, 1.031, 1.035, 1.041, 1.048, 1.057, 1.066, 1.081, 1.096, 1.111, 1.125, 1.146, 1.164, 1.178, 1.196, 1.214, 1.233,
+ 1.222, 1.204, 1.189, 1.178, 1.162, 1.148, 1.132, 1.115, 1.101, 1.087, 1.075, 1.064, 1.055, 1.048, 1.043, 1.042, 1.042, 1.046, 1.049, 1.057, 1.066, 1.076, 1.089, 1.106, 1.121, 1.133, 1.149, 1.167, 1.183, 1.199, 1.215, 1.234,
+ 1.222, 1.205, 1.191, 1.184, 1.171, 1.155, 1.142, 1.124, 1.109, 1.097, 1.087, 1.077, 1.065, 1.059, 1.055, 1.053, 1.053, 1.057, 1.059, 1.067, 1.076, 1.088, 1.102, 1.116, 1.131, 1.143, 1.157, 1.175, 1.187, 1.202, 1.215, 1.231,
+ 1.223, 1.211, 1.198, 1.189, 1.178, 1.165, 1.151, 1.136, 1.122, 1.108, 1.097, 1.087, 1.079, 1.073, 1.067, 1.066, 1.066, 1.069, 1.074, 1.079, 1.088, 1.101, 1.114, 1.128, 1.141, 1.152, 1.166, 1.182, 1.194, 1.205, 1.215, 1.229,
+ 1.223, 1.212, 1.204, 1.197, 1.186, 1.173, 1.161, 1.149, 1.133, 1.121, 1.108, 1.101, 1.092, 1.085, 1.082, 1.082, 1.082, 1.085, 1.091, 1.096, 1.101, 1.113, 1.125, 1.138, 1.151, 1.164, 1.175, 1.188, 1.198, 1.207, 1.215, 1.222,
+ 1.217, 1.213, 1.211, 1.203, 1.194, 1.181, 1.169, 1.158, 1.145, 1.133, 1.123, 1.113, 1.106, 1.097, 1.096, 1.094, 1.094, 1.098, 1.104, 1.108, 1.114, 1.124, 1.137, 1.149, 1.161, 1.172, 1.182, 1.194, 1.203, 1.209, 1.211, 1.217,
+ 1.214, 1.211, 1.209, 1.206, 1.201, 1.188, 1.179, 1.168, 1.154, 1.144, 1.136, 1.126, 1.119, 1.112, 1.109, 1.108, 1.108, 1.108, 1.117, 1.119, 1.124, 1.133, 1.147, 1.158, 1.171, 1.178, 1.188, 1.198, 1.205, 1.208, 1.209, 1.211,
+ 1.207, 1.208, 1.209, 1.206, 1.202, 1.192, 1.182, 1.171, 1.159, 1.146, 1.142, 1.136, 1.126, 1.119, 1.116, 1.114, 1.115, 1.117, 1.119, 1.128, 1.129, 1.136, 1.155, 1.162, 1.176, 1.182, 1.188, 1.198, 1.205, 1.208, 1.207, 1.206
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.879, 1.878, 1.872, 1.862, 1.856, 1.842, 1.826, 1.815, 1.811, 1.799, 1.787, 1.777, 1.768, 1.761, 1.761, 1.761, 1.762, 1.763, 1.764, 1.769, 1.776, 1.789, 1.799, 1.807, 1.824, 1.841, 1.853, 1.861, 1.871, 1.874, 1.885, 1.889,
+ 1.879, 1.875, 1.859, 1.846, 1.835, 1.817, 1.806, 1.794, 1.777, 1.771, 1.755, 1.743, 1.733, 1.726, 1.721, 1.721, 1.721, 1.722, 1.729, 1.734, 1.747, 1.759, 1.771, 1.783, 1.801, 1.813, 1.831, 1.841, 1.849, 1.862, 1.876, 1.888,
+ 1.876, 1.861, 1.846, 1.835, 1.817, 1.806, 1.793, 1.777, 1.766, 1.752, 1.736, 1.727, 1.713, 1.702, 1.696, 1.695, 1.695, 1.697, 1.704, 1.715, 1.725, 1.739, 1.754, 1.771, 1.783, 1.801, 1.813, 1.831, 1.841, 1.851, 1.866, 1.888,
+ 1.878, 1.861, 1.843, 1.829, 1.811, 1.794, 1.779, 1.766, 1.751, 1.734, 1.721, 1.711, 1.695, 1.682, 1.679, 1.677, 1.677, 1.678, 1.687, 1.696, 1.713, 1.723, 1.737, 1.754, 1.774, 1.785, 1.811, 1.825, 1.833, 1.849, 1.866, 1.889,
+ 1.882, 1.859, 1.837, 1.821, 1.803, 1.784, 1.769, 1.752, 1.735, 1.717, 1.701, 1.689, 1.676, 1.664, 1.659, 1.658, 1.658, 1.659, 1.668, 1.679, 1.694, 1.711, 1.723, 1.739, 1.756, 1.777, 1.797, 1.813, 1.827, 1.844, 1.865, 1.889,
+ 1.869, 1.849, 1.832, 1.811, 1.792, 1.772, 1.755, 1.737, 1.717, 1.699, 1.688, 1.674, 1.661, 1.646, 1.642, 1.638, 1.638, 1.641, 1.651, 1.659, 1.676, 1.693, 1.708, 1.724, 1.744, 1.763, 1.783, 1.801, 1.819, 1.838, 1.864, 1.889,
+ 1.869, 1.841, 1.817, 1.801, 1.782, 1.758, 1.741, 1.721, 1.699, 1.688, 1.674, 1.658, 1.643, 1.632, 1.627, 1.621, 1.621, 1.622, 1.631, 1.643, 1.658, 1.676, 1.689, 1.708, 1.729, 1.748, 1.767, 1.791, 1.812, 1.836, 1.859, 1.891,
+ 1.861, 1.836, 1.814, 1.792, 1.772, 1.745, 1.728, 1.707, 1.688, 1.673, 1.658, 1.643, 1.629, 1.618, 1.612, 1.609, 1.609, 1.611, 1.615, 1.629, 1.642, 1.658, 1.676, 1.689, 1.711, 1.734, 1.758, 1.782, 1.804, 1.827, 1.859, 1.891,
+ 1.861, 1.829, 1.807, 1.784, 1.759, 1.735, 1.717, 1.692, 1.674, 1.659, 1.644, 1.629, 1.617, 1.605, 1.598, 1.595, 1.595, 1.598, 1.607, 1.615, 1.631, 1.642, 1.661, 1.681, 1.701, 1.724, 1.746, 1.771, 1.799, 1.825, 1.857, 1.891,
+ 1.861, 1.826, 1.804, 1.779, 1.749, 1.729, 1.707, 1.687, 1.665, 1.648, 1.629, 1.617, 1.604, 1.595, 1.589, 1.585, 1.585, 1.592, 1.597, 1.607, 1.623, 1.635, 1.652, 1.674, 1.693, 1.716, 1.739, 1.766, 1.794, 1.822, 1.855, 1.889,
+ 1.861, 1.824, 1.799, 1.777, 1.748, 1.723, 1.701, 1.678, 1.657, 1.639, 1.619, 1.605, 1.596, 1.586, 1.581, 1.579, 1.577, 1.579, 1.588, 1.597, 1.612, 1.625, 1.641, 1.661, 1.681, 1.702, 1.732, 1.757, 1.785, 1.813, 1.847, 1.882,
+ 1.856, 1.819, 1.796, 1.767, 1.739, 1.714, 1.693, 1.666, 1.651, 1.629, 1.613, 1.597, 1.586, 1.579, 1.576, 1.572, 1.572, 1.573, 1.579, 1.588, 1.602, 1.619, 1.633, 1.655, 1.674, 1.698, 1.729, 1.754, 1.782, 1.809, 1.842, 1.874,
+ 1.853, 1.815, 1.792, 1.761, 1.734, 1.707, 1.682, 1.659, 1.639, 1.622, 1.605, 1.591, 1.579, 1.574, 1.569, 1.565, 1.566, 1.569, 1.573, 1.584, 1.597, 1.609, 1.624, 1.645, 1.666, 1.695, 1.722, 1.746, 1.772, 1.799, 1.835, 1.873,
+ 1.847, 1.811, 1.789, 1.759, 1.732, 1.703, 1.681, 1.657, 1.637, 1.619, 1.603, 1.588, 1.575, 1.569, 1.563, 1.561, 1.561, 1.563, 1.569, 1.576, 1.589, 1.601, 1.616, 1.636, 1.659, 1.686, 1.712, 1.741, 1.767, 1.798, 1.832, 1.873,
+ 1.847, 1.803, 1.779, 1.756, 1.727, 1.699, 1.674, 1.652, 1.632, 1.616, 1.595, 1.583, 1.572, 1.564, 1.558, 1.556, 1.557, 1.559, 1.563, 1.569, 1.583, 1.593, 1.613, 1.633, 1.657, 1.684, 1.709, 1.741, 1.766, 1.796, 1.831, 1.871,
+ 1.845, 1.802, 1.779, 1.755, 1.725, 1.696, 1.673, 1.649, 1.629, 1.614, 1.595, 1.582, 1.572, 1.563, 1.557, 1.556, 1.556, 1.558, 1.562, 1.569, 1.581, 1.593, 1.612, 1.633, 1.656, 1.679, 1.709, 1.741, 1.764, 1.796, 1.828, 1.869,
+ 1.845, 1.801, 1.779, 1.749, 1.723, 1.697, 1.673, 1.649, 1.627, 1.613, 1.593, 1.581, 1.573, 1.563, 1.558, 1.555, 1.555, 1.556, 1.562, 1.573, 1.581, 1.594, 1.611, 1.633, 1.656, 1.679, 1.711, 1.739, 1.764, 1.794, 1.828, 1.869,
+ 1.844, 1.801, 1.781, 1.749, 1.723, 1.697, 1.673, 1.649, 1.627, 1.614, 1.595, 1.581, 1.574, 1.564, 1.559, 1.557, 1.556, 1.559, 1.564, 1.574, 1.582, 1.595, 1.611, 1.634, 1.659, 1.683, 1.709, 1.739, 1.765, 1.794, 1.829, 1.872,
+ 1.845, 1.802, 1.781, 1.754, 1.725, 1.701, 1.677, 1.652, 1.632, 1.616, 1.599, 1.586, 1.576, 1.569, 1.563, 1.559, 1.558, 1.562, 1.569, 1.576, 1.587, 1.599, 1.618, 1.635, 1.661, 1.685, 1.709, 1.739, 1.767, 1.796, 1.829, 1.868,
+ 1.845, 1.809, 1.785, 1.762, 1.731, 1.706, 1.685, 1.659, 1.641, 1.622, 1.606, 1.595, 1.581, 1.575, 1.569, 1.564, 1.564, 1.569, 1.574, 1.582, 1.594, 1.607, 1.625, 1.642, 1.668, 1.687, 1.716, 1.741, 1.769, 1.798, 1.829, 1.868,
+ 1.849, 1.811, 1.785, 1.765, 1.734, 1.709, 1.688, 1.666, 1.647, 1.628, 1.613, 1.601, 1.592, 1.581, 1.575, 1.572, 1.572, 1.575, 1.581, 1.589, 1.599, 1.611, 1.631, 1.649, 1.673, 1.694, 1.721, 1.747, 1.771, 1.798, 1.829, 1.868,
+ 1.849, 1.816, 1.787, 1.766, 1.739, 1.716, 1.692, 1.673, 1.657, 1.641, 1.625, 1.612, 1.599, 1.592, 1.584, 1.581, 1.581, 1.581, 1.589, 1.598, 1.608, 1.622, 1.639, 1.659, 1.679, 1.701, 1.724, 1.751, 1.774, 1.802, 1.832, 1.868,
+ 1.855, 1.816, 1.793, 1.773, 1.748, 1.727, 1.707, 1.686, 1.667, 1.649, 1.636, 1.623, 1.612, 1.599, 1.594, 1.592, 1.591, 1.591, 1.598, 1.608, 1.621, 1.634, 1.649, 1.669, 1.693, 1.705, 1.736, 1.757, 1.778, 1.804, 1.833, 1.867,
+ 1.858, 1.818, 1.796, 1.778, 1.754, 1.733, 1.716, 1.695, 1.676, 1.661, 1.648, 1.635, 1.624, 1.613, 1.604, 1.601, 1.601, 1.606, 1.613, 1.621, 1.634, 1.646, 1.661, 1.679, 1.699, 1.714, 1.742, 1.761, 1.782, 1.809, 1.835, 1.867,
+ 1.857, 1.822, 1.801, 1.789, 1.766, 1.744, 1.726, 1.706, 1.688, 1.671, 1.659, 1.647, 1.635, 1.624, 1.621, 1.617, 1.617, 1.621, 1.627, 1.634, 1.645, 1.656, 1.674, 1.694, 1.709, 1.723, 1.751, 1.771, 1.786, 1.811, 1.837, 1.867,
+ 1.858, 1.824, 1.807, 1.794, 1.774, 1.757, 1.739, 1.716, 1.702, 1.687, 1.671, 1.662, 1.648, 1.636, 1.629, 1.629, 1.629, 1.633, 1.635, 1.646, 1.656, 1.669, 1.684, 1.705, 1.719, 1.732, 1.753, 1.774, 1.793, 1.815, 1.837, 1.871,
+ 1.858, 1.827, 1.809, 1.798, 1.782, 1.761, 1.749, 1.727, 1.711, 1.698, 1.687, 1.675, 1.663, 1.649, 1.646, 1.643, 1.643, 1.646, 1.649, 1.658, 1.669, 1.683, 1.698, 1.716, 1.731, 1.746, 1.761, 1.783, 1.795, 1.817, 1.836, 1.862,
+ 1.862, 1.834, 1.816, 1.805, 1.789, 1.774, 1.759, 1.743, 1.725, 1.711, 1.697, 1.688, 1.678, 1.668, 1.661, 1.659, 1.658, 1.659, 1.668, 1.673, 1.684, 1.698, 1.713, 1.728, 1.742, 1.757, 1.771, 1.791, 1.804, 1.821, 1.836, 1.862,
+ 1.859, 1.835, 1.825, 1.813, 1.794, 1.782, 1.771, 1.757, 1.739, 1.725, 1.711, 1.701, 1.693, 1.683, 1.679, 1.679, 1.679, 1.683, 1.689, 1.693, 1.698, 1.714, 1.726, 1.741, 1.754, 1.769, 1.781, 1.797, 1.808, 1.821, 1.835, 1.856,
+ 1.848, 1.836, 1.832, 1.822, 1.806, 1.789, 1.778, 1.765, 1.751, 1.739, 1.726, 1.718, 1.709, 1.699, 1.696, 1.695, 1.695, 1.696, 1.704, 1.705, 1.714, 1.724, 1.739, 1.753, 1.765, 1.777, 1.789, 1.803, 1.816, 1.824, 1.829, 1.842,
+ 1.839, 1.835, 1.834, 1.829, 1.815, 1.801, 1.787, 1.776, 1.759, 1.751, 1.744, 1.736, 1.724, 1.714, 1.711, 1.708, 1.707, 1.707, 1.717, 1.719, 1.724, 1.734, 1.748, 1.762, 1.775, 1.783, 1.796, 1.808, 1.819, 1.825, 1.828, 1.833,
+ 1.836, 1.833, 1.834, 1.832, 1.821, 1.806, 1.792, 1.785, 1.772, 1.759, 1.751, 1.744, 1.736, 1.725, 1.719, 1.715, 1.715, 1.718, 1.721, 1.728, 1.734, 1.736, 1.757, 1.768, 1.779, 1.787, 1.799, 1.812, 1.821, 1.824, 1.825, 1.833
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 2.189, 2.127, 2.115, 2.106, 2.113, 2.119, 2.131, 2.144, 2.155, 2.168, 2.176, 2.179, 2.181, 2.181, 2.185, 2.187, 2.187, 2.183, 2.179, 2.176, 2.169, 2.167, 2.159, 2.152, 2.145, 2.141, 2.135, 2.128, 2.124, 2.124, 2.139, 2.177,
+ 2.176, 2.133, 2.116, 2.112, 2.116, 2.125, 2.137, 2.154, 2.168, 2.179, 2.187, 2.194, 2.201, 2.204, 2.208, 2.208, 2.205, 2.202, 2.198, 2.195, 2.183, 2.177, 2.166, 2.159, 2.149, 2.143, 2.138, 2.132, 2.124, 2.125, 2.136, 2.164,
+ 2.175, 2.133, 2.117, 2.115, 2.121, 2.136, 2.154, 2.165, 2.179, 2.192, 2.198, 2.211, 2.218, 2.219, 2.221, 2.221, 2.217, 2.216, 2.211, 2.202, 2.197, 2.188, 2.181, 2.171, 2.159, 2.151, 2.141, 2.136, 2.125, 2.125, 2.132, 2.155,
+ 2.172, 2.128, 2.116, 2.116, 2.124, 2.143, 2.161, 2.177, 2.192, 2.204, 2.213, 2.221, 2.227, 2.231, 2.237, 2.237, 2.229, 2.224, 2.221, 2.213, 2.207, 2.197, 2.191, 2.179, 2.169, 2.156, 2.148, 2.138, 2.126, 2.123, 2.124, 2.149,
+ 2.169, 2.124, 2.119, 2.119, 2.135, 2.152, 2.174, 2.187, 2.204, 2.211, 2.224, 2.233, 2.236, 2.241, 2.246, 2.246, 2.243, 2.237, 2.234, 2.226, 2.218, 2.211, 2.199, 2.191, 2.177, 2.166, 2.155, 2.139, 2.129, 2.121, 2.121, 2.143,
+ 2.157, 2.124, 2.121, 2.127, 2.145, 2.157, 2.181, 2.197, 2.208, 2.221, 2.238, 2.245, 2.249, 2.249, 2.254, 2.254, 2.249, 2.247, 2.243, 2.237, 2.228, 2.219, 2.209, 2.198, 2.186, 2.172, 2.161, 2.143, 2.129, 2.121, 2.121, 2.141,
+ 2.157, 2.124, 2.124, 2.131, 2.148, 2.161, 2.188, 2.202, 2.214, 2.238, 2.246, 2.251, 2.255, 2.257, 2.259, 2.259, 2.257, 2.252, 2.251, 2.247, 2.238, 2.231, 2.219, 2.204, 2.193, 2.173, 2.166, 2.152, 2.134, 2.119, 2.119, 2.131,
+ 2.155, 2.125, 2.125, 2.135, 2.151, 2.169, 2.191, 2.207, 2.219, 2.243, 2.253, 2.258, 2.261, 2.266, 2.266, 2.267, 2.265, 2.262, 2.261, 2.254, 2.244, 2.238, 2.228, 2.212, 2.197, 2.179, 2.167, 2.158, 2.137, 2.122, 2.121, 2.131,
+ 2.155, 2.127, 2.127, 2.137, 2.153, 2.173, 2.197, 2.213, 2.231, 2.248, 2.257, 2.266, 2.271, 2.272, 2.274, 2.275, 2.275, 2.273, 2.271, 2.266, 2.257, 2.251, 2.238, 2.227, 2.209, 2.195, 2.175, 2.159, 2.141, 2.128, 2.127, 2.131,
+ 2.155, 2.128, 2.128, 2.139, 2.159, 2.182, 2.206, 2.225, 2.243, 2.252, 2.265, 2.272, 2.277, 2.283, 2.286, 2.284, 2.283, 2.282, 2.274, 2.272, 2.266, 2.256, 2.244, 2.238, 2.221, 2.202, 2.186, 2.169, 2.149, 2.129, 2.129, 2.135,
+ 2.154, 2.131, 2.131, 2.149, 2.166, 2.189, 2.211, 2.234, 2.248, 2.262, 2.272, 2.277, 2.287, 2.291, 2.293, 2.292, 2.291, 2.285, 2.284, 2.279, 2.272, 2.263, 2.254, 2.243, 2.226, 2.206, 2.193, 2.174, 2.153, 2.133, 2.133, 2.135,
+ 2.153, 2.135, 2.135, 2.151, 2.172, 2.198, 2.221, 2.238, 2.255, 2.265, 2.274, 2.287, 2.291, 2.296, 2.298, 2.298, 2.301, 2.297, 2.289, 2.285, 2.277, 2.271, 2.261, 2.251, 2.236, 2.216, 2.199, 2.179, 2.158, 2.135, 2.134, 2.135,
+ 2.152, 2.136, 2.136, 2.154, 2.176, 2.199, 2.224, 2.239, 2.256, 2.267, 2.282, 2.289, 2.295, 2.299, 2.303, 2.303, 2.302, 2.299, 2.297, 2.288, 2.284, 2.274, 2.262, 2.253, 2.238, 2.219, 2.202, 2.181, 2.158, 2.137, 2.135, 2.135,
+ 2.143, 2.134, 2.134, 2.154, 2.177, 2.201, 2.224, 2.241, 2.256, 2.271, 2.282, 2.289, 2.297, 2.302, 2.306, 2.306, 2.304, 2.301, 2.298, 2.289, 2.287, 2.272, 2.265, 2.255, 2.241, 2.221, 2.203, 2.183, 2.164, 2.141, 2.136, 2.135,
+ 2.142, 2.133, 2.133, 2.155, 2.178, 2.202, 2.223, 2.243, 2.258, 2.273, 2.283, 2.288, 2.296, 2.299, 2.306, 2.306, 2.301, 2.299, 2.296, 2.289, 2.286, 2.271, 2.267, 2.256, 2.244, 2.219, 2.206, 2.188, 2.163, 2.141, 2.137, 2.134,
+ 2.141, 2.131, 2.131, 2.153, 2.179, 2.202, 2.224, 2.242, 2.254, 2.274, 2.283, 2.288, 2.295, 2.298, 2.301, 2.301, 2.301, 2.296, 2.295, 2.289, 2.285, 2.271, 2.267, 2.257, 2.246, 2.223, 2.204, 2.188, 2.165, 2.141, 2.136, 2.134,
+ 2.141, 2.133, 2.133, 2.151, 2.179, 2.201, 2.224, 2.241, 2.254, 2.275, 2.283, 2.288, 2.294, 2.296, 2.298, 2.297, 2.295, 2.295, 2.294, 2.291, 2.284, 2.272, 2.267, 2.256, 2.248, 2.225, 2.208, 2.192, 2.167, 2.141, 2.137, 2.134,
+ 2.141, 2.132, 2.132, 2.151, 2.177, 2.199, 2.221, 2.238, 2.252, 2.274, 2.281, 2.287, 2.293, 2.295, 2.296, 2.294, 2.295, 2.295, 2.294, 2.291, 2.284, 2.274, 2.266, 2.257, 2.248, 2.226, 2.206, 2.189, 2.167, 2.143, 2.141, 2.141,
+ 2.141, 2.133, 2.133, 2.153, 2.175, 2.201, 2.221, 2.238, 2.252, 2.271, 2.278, 2.284, 2.288, 2.291, 2.292, 2.291, 2.293, 2.293, 2.293, 2.287, 2.279, 2.275, 2.266, 2.256, 2.243, 2.224, 2.206, 2.189, 2.168, 2.146, 2.142, 2.134,
+ 2.137, 2.131, 2.131, 2.154, 2.173, 2.199, 2.221, 2.236, 2.251, 2.267, 2.272, 2.278, 2.284, 2.287, 2.288, 2.286, 2.288, 2.288, 2.288, 2.283, 2.277, 2.273, 2.265, 2.256, 2.241, 2.219, 2.205, 2.187, 2.167, 2.144, 2.137, 2.132,
+ 2.136, 2.131, 2.131, 2.152, 2.169, 2.197, 2.218, 2.233, 2.246, 2.257, 2.269, 2.274, 2.281, 2.284, 2.286, 2.285, 2.286, 2.286, 2.286, 2.279, 2.274, 2.269, 2.263, 2.254, 2.239, 2.217, 2.203, 2.181, 2.162, 2.143, 2.133, 2.131,
+ 2.136, 2.131, 2.131, 2.151, 2.167, 2.189, 2.205, 2.226, 2.242, 2.253, 2.261, 2.271, 2.275, 2.279, 2.283, 2.283, 2.284, 2.284, 2.281, 2.277, 2.271, 2.264, 2.257, 2.246, 2.232, 2.215, 2.195, 2.176, 2.158, 2.141, 2.131, 2.128,
+ 2.136, 2.129, 2.131, 2.147, 2.162, 2.181, 2.203, 2.219, 2.236, 2.246, 2.256, 2.263, 2.271, 2.274, 2.278, 2.278, 2.276, 2.277, 2.276, 2.273, 2.266, 2.258, 2.251, 2.241, 2.227, 2.198, 2.191, 2.169, 2.154, 2.136, 2.125, 2.122,
+ 2.132, 2.126, 2.126, 2.139, 2.153, 2.168, 2.194, 2.212, 2.224, 2.238, 2.251, 2.258, 2.263, 2.266, 2.269, 2.271, 2.269, 2.269, 2.269, 2.267, 2.259, 2.253, 2.245, 2.237, 2.219, 2.196, 2.179, 2.162, 2.149, 2.132, 2.122, 2.121,
+ 2.124, 2.119, 2.121, 2.137, 2.147, 2.164, 2.183, 2.199, 2.219, 2.231, 2.239, 2.251, 2.257, 2.261, 2.262, 2.262, 2.259, 2.259, 2.261, 2.258, 2.253, 2.245, 2.237, 2.224, 2.209, 2.187, 2.174, 2.157, 2.141, 2.122, 2.121, 2.121,
+ 2.123, 2.115, 2.115, 2.131, 2.138, 2.157, 2.174, 2.188, 2.207, 2.221, 2.233, 2.239, 2.243, 2.244, 2.244, 2.244, 2.246, 2.245, 2.246, 2.244, 2.241, 2.231, 2.224, 2.212, 2.195, 2.176, 2.159, 2.145, 2.128, 2.117, 2.117, 2.123,
+ 2.123, 2.113, 2.113, 2.123, 2.132, 2.141, 2.162, 2.177, 2.191, 2.208, 2.221, 2.231, 2.231, 2.232, 2.234, 2.235, 2.235, 2.235, 2.238, 2.237, 2.225, 2.214, 2.209, 2.199, 2.181, 2.164, 2.146, 2.135, 2.123, 2.116, 2.116, 2.115,
+ 2.129, 2.115, 2.115, 2.121, 2.128, 2.135, 2.149, 2.164, 2.178, 2.193, 2.207, 2.221, 2.222, 2.222, 2.223, 2.224, 2.224, 2.224, 2.224, 2.223, 2.214, 2.205, 2.196, 2.185, 2.171, 2.151, 2.141, 2.129, 2.119, 2.116, 2.116, 2.117,
+ 2.137, 2.119, 2.119, 2.119, 2.122, 2.129, 2.141, 2.159, 2.167, 2.182, 2.195, 2.206, 2.211, 2.216, 2.218, 2.219, 2.219, 2.219, 2.217, 2.212, 2.202, 2.194, 2.184, 2.174, 2.162, 2.145, 2.134, 2.124, 2.118, 2.117, 2.118, 2.121,
+ 2.138, 2.131, 2.121, 2.122, 2.125, 2.128, 2.137, 2.154, 2.162, 2.176, 2.187, 2.194, 2.196, 2.198, 2.205, 2.205, 2.202, 2.202, 2.203, 2.201, 2.191, 2.182, 2.174, 2.162, 2.149, 2.136, 2.126, 2.121, 2.119, 2.118, 2.127, 2.133,
+ 2.157, 2.148, 2.131, 2.129, 2.129, 2.136, 2.148, 2.157, 2.169, 2.177, 2.182, 2.187, 2.188, 2.191, 2.193, 2.193, 2.192, 2.199, 2.201, 2.199, 2.186, 2.178, 2.167, 2.152, 2.146, 2.137, 2.126, 2.124, 2.121, 2.126, 2.133, 2.151,
+ 2.161, 2.157, 2.148, 2.147, 2.147, 2.147, 2.154, 2.162, 2.174, 2.179, 2.181, 2.184, 2.186, 2.187, 2.189, 2.189, 2.187, 2.188, 2.199, 2.201, 2.187, 2.178, 2.163, 2.148, 2.145, 2.141, 2.131, 2.129, 2.128, 2.135, 2.151, 2.153
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.191, 1.165, 1.156, 1.155, 1.157, 1.161, 1.168, 1.176, 1.179, 1.185, 1.187, 1.189, 1.189, 1.189, 1.191, 1.191, 1.191, 1.189, 1.188, 1.188, 1.185, 1.184, 1.182, 1.178, 1.173, 1.171, 1.166, 1.163, 1.159, 1.159, 1.164, 1.187,
+ 1.188, 1.164, 1.157, 1.156, 1.158, 1.166, 1.173, 1.179, 1.185, 1.193, 1.195, 1.198, 1.199, 1.201, 1.201, 1.202, 1.201, 1.199, 1.199, 1.196, 1.194, 1.189, 1.185, 1.182, 1.177, 1.172, 1.168, 1.164, 1.161, 1.161, 1.162, 1.181,
+ 1.184, 1.164, 1.157, 1.157, 1.161, 1.171, 1.179, 1.185, 1.193, 1.197, 1.201, 1.206, 1.208, 1.209, 1.209, 1.208, 1.207, 1.207, 1.207, 1.202, 1.199, 1.195, 1.192, 1.189, 1.182, 1.176, 1.171, 1.166, 1.161, 1.159, 1.161, 1.177,
+ 1.183, 1.162, 1.158, 1.158, 1.163, 1.174, 1.182, 1.191, 1.197, 1.203, 1.208, 1.212, 1.214, 1.214, 1.218, 1.218, 1.214, 1.212, 1.211, 1.208, 1.206, 1.201, 1.197, 1.192, 1.189, 1.179, 1.174, 1.168, 1.162, 1.159, 1.159, 1.173,
+ 1.181, 1.159, 1.159, 1.159, 1.168, 1.178, 1.189, 1.196, 1.204, 1.208, 1.213, 1.217, 1.219, 1.221, 1.222, 1.222, 1.222, 1.221, 1.219, 1.215, 1.212, 1.208, 1.202, 1.197, 1.189, 1.183, 1.178, 1.169, 1.163, 1.158, 1.158, 1.169,
+ 1.174, 1.159, 1.159, 1.164, 1.172, 1.179, 1.192, 1.201, 1.208, 1.212, 1.219, 1.224, 1.225, 1.227, 1.228, 1.228, 1.226, 1.225, 1.224, 1.221, 1.217, 1.212, 1.208, 1.202, 1.194, 1.187, 1.181, 1.172, 1.164, 1.157, 1.157, 1.169,
+ 1.174, 1.159, 1.159, 1.165, 1.174, 1.184, 1.197, 1.205, 1.209, 1.219, 1.224, 1.228, 1.231, 1.231, 1.231, 1.231, 1.229, 1.229, 1.228, 1.226, 1.222, 1.218, 1.212, 1.205, 1.199, 1.188, 1.181, 1.175, 1.165, 1.157, 1.157, 1.163,
+ 1.173, 1.159, 1.159, 1.165, 1.176, 1.186, 1.198, 1.207, 1.213, 1.223, 1.229, 1.231, 1.235, 1.236, 1.236, 1.236, 1.236, 1.235, 1.234, 1.232, 1.226, 1.223, 1.218, 1.209, 1.201, 1.192, 1.183, 1.178, 1.165, 1.157, 1.157, 1.163,
+ 1.172, 1.159, 1.159, 1.166, 1.176, 1.188, 1.201, 1.209, 1.217, 1.227, 1.231, 1.236, 1.238, 1.239, 1.241, 1.242, 1.242, 1.241, 1.239, 1.235, 1.232, 1.227, 1.223, 1.215, 1.208, 1.199, 1.187, 1.179, 1.167, 1.159, 1.159, 1.163,
+ 1.172, 1.159, 1.159, 1.166, 1.177, 1.189, 1.203, 1.212, 1.223, 1.228, 1.236, 1.239, 1.242, 1.245, 1.246, 1.246, 1.247, 1.246, 1.242, 1.241, 1.237, 1.232, 1.226, 1.223, 1.213, 1.202, 1.191, 1.182, 1.172, 1.159, 1.159, 1.163,
+ 1.168, 1.158, 1.158, 1.167, 1.179, 1.192, 1.204, 1.218, 1.225, 1.233, 1.238, 1.242, 1.246, 1.248, 1.251, 1.251, 1.249, 1.248, 1.247, 1.244, 1.239, 1.237, 1.228, 1.223, 1.214, 1.203, 1.194, 1.183, 1.173, 1.161, 1.161, 1.162,
+ 1.166, 1.158, 1.158, 1.168, 1.183, 1.195, 1.207, 1.218, 1.226, 1.233, 1.239, 1.246, 1.248, 1.251, 1.254, 1.254, 1.254, 1.251, 1.249, 1.247, 1.242, 1.239, 1.232, 1.227, 1.219, 1.207, 1.195, 1.186, 1.175, 1.162, 1.161, 1.162,
+ 1.165, 1.158, 1.158, 1.168, 1.183, 1.196, 1.208, 1.219, 1.227, 1.234, 1.241, 1.247, 1.251, 1.254, 1.255, 1.256, 1.256, 1.254, 1.252, 1.249, 1.246, 1.241, 1.234, 1.228, 1.221, 1.211, 1.199, 1.187, 1.175, 1.163, 1.162, 1.162,
+ 1.161, 1.158, 1.158, 1.169, 1.183, 1.196, 1.208, 1.217, 1.227, 1.234, 1.241, 1.247, 1.253, 1.254, 1.256, 1.257, 1.256, 1.255, 1.253, 1.249, 1.247, 1.241, 1.236, 1.229, 1.221, 1.211, 1.199, 1.189, 1.176, 1.164, 1.163, 1.162,
+ 1.161, 1.156, 1.156, 1.169, 1.183, 1.196, 1.207, 1.218, 1.227, 1.235, 1.241, 1.246, 1.252, 1.254, 1.256, 1.257, 1.256, 1.254, 1.253, 1.249, 1.247, 1.241, 1.237, 1.231, 1.223, 1.211, 1.201, 1.191, 1.177, 1.164, 1.164, 1.161,
+ 1.161, 1.155, 1.155, 1.169, 1.182, 1.195, 1.208, 1.216, 1.225, 1.235, 1.241, 1.245, 1.249, 1.252, 1.254, 1.254, 1.254, 1.253, 1.252, 1.249, 1.246, 1.239, 1.237, 1.231, 1.224, 1.211, 1.201, 1.191, 1.178, 1.164, 1.162, 1.161,
+ 1.159, 1.155, 1.155, 1.168, 1.181, 1.195, 1.208, 1.217, 1.223, 1.235, 1.241, 1.244, 1.248, 1.251, 1.252, 1.252, 1.252, 1.252, 1.251, 1.248, 1.245, 1.241, 1.236, 1.231, 1.224, 1.212, 1.202, 1.191, 1.179, 1.164, 1.162, 1.161,
+ 1.158, 1.154, 1.154, 1.167, 1.181, 1.194, 1.206, 1.216, 1.222, 1.234, 1.237, 1.242, 1.245, 1.248, 1.251, 1.249, 1.249, 1.249, 1.249, 1.248, 1.244, 1.241, 1.235, 1.229, 1.223, 1.213, 1.202, 1.191, 1.179, 1.167, 1.163, 1.163,
+ 1.158, 1.154, 1.154, 1.168, 1.181, 1.194, 1.206, 1.215, 1.223, 1.231, 1.236, 1.239, 1.243, 1.245, 1.246, 1.246, 1.248, 1.248, 1.248, 1.245, 1.242, 1.239, 1.235, 1.229, 1.223, 1.213, 1.202, 1.191, 1.179, 1.167, 1.163, 1.162,
+ 1.157, 1.154, 1.154, 1.168, 1.179, 1.194, 1.205, 1.215, 1.222, 1.229, 1.233, 1.236, 1.239, 1.243, 1.244, 1.244, 1.245, 1.245, 1.244, 1.243, 1.239, 1.236, 1.234, 1.229, 1.222, 1.211, 1.202, 1.191, 1.179, 1.166, 1.163, 1.161,
+ 1.156, 1.155, 1.155, 1.168, 1.179, 1.193, 1.205, 1.213, 1.219, 1.225, 1.231, 1.234, 1.238, 1.239, 1.241, 1.243, 1.243, 1.243, 1.243, 1.239, 1.237, 1.235, 1.231, 1.228, 1.221, 1.209, 1.199, 1.189, 1.178, 1.166, 1.162, 1.159,
+ 1.156, 1.156, 1.157, 1.167, 1.178, 1.191, 1.199, 1.209, 1.217, 1.223, 1.226, 1.231, 1.233, 1.236, 1.239, 1.239, 1.241, 1.241, 1.239, 1.237, 1.235, 1.232, 1.229, 1.224, 1.217, 1.209, 1.196, 1.187, 1.176, 1.165, 1.159, 1.157,
+ 1.157, 1.157, 1.157, 1.166, 1.175, 1.187, 1.198, 1.205, 1.213, 1.219, 1.223, 1.227, 1.231, 1.233, 1.236, 1.236, 1.234, 1.235, 1.235, 1.235, 1.231, 1.229, 1.227, 1.222, 1.216, 1.201, 1.194, 1.184, 1.174, 1.163, 1.157, 1.156,
+ 1.158, 1.155, 1.155, 1.165, 1.172, 1.181, 1.194, 1.202, 1.208, 1.215, 1.221, 1.223, 1.227, 1.229, 1.231, 1.231, 1.231, 1.232, 1.233, 1.231, 1.228, 1.227, 1.223, 1.219, 1.213, 1.199, 1.189, 1.181, 1.171, 1.161, 1.157, 1.156,
+ 1.155, 1.154, 1.154, 1.164, 1.169, 1.179, 1.189, 1.196, 1.203, 1.208, 1.215, 1.221, 1.222, 1.224, 1.225, 1.225, 1.226, 1.228, 1.228, 1.227, 1.225, 1.222, 1.219, 1.213, 1.206, 1.196, 1.187, 1.177, 1.168, 1.159, 1.156, 1.156,
+ 1.155, 1.152, 1.152, 1.162, 1.167, 1.175, 1.185, 1.191, 1.198, 1.205, 1.209, 1.214, 1.216, 1.217, 1.217, 1.217, 1.219, 1.219, 1.219, 1.219, 1.217, 1.215, 1.213, 1.207, 1.199, 1.191, 1.179, 1.172, 1.165, 1.156, 1.155, 1.155,
+ 1.155, 1.152, 1.152, 1.161, 1.163, 1.169, 1.179, 1.186, 1.192, 1.198, 1.204, 1.208, 1.211, 1.211, 1.211, 1.212, 1.212, 1.213, 1.215, 1.215, 1.211, 1.208, 1.205, 1.199, 1.194, 1.185, 1.175, 1.167, 1.161, 1.156, 1.155, 1.153,
+ 1.157, 1.152, 1.152, 1.159, 1.162, 1.166, 1.174, 1.181, 1.187, 1.192, 1.197, 1.203, 1.204, 1.205, 1.204, 1.204, 1.204, 1.205, 1.206, 1.206, 1.204, 1.201, 1.198, 1.194, 1.187, 1.176, 1.171, 1.164, 1.159, 1.156, 1.155, 1.154,
+ 1.159, 1.154, 1.154, 1.158, 1.159, 1.163, 1.171, 1.176, 1.181, 1.187, 1.191, 1.195, 1.198, 1.199, 1.199, 1.201, 1.201, 1.202, 1.202, 1.199, 1.196, 1.193, 1.191, 1.188, 1.182, 1.174, 1.166, 1.162, 1.157, 1.156, 1.156, 1.156,
+ 1.162, 1.161, 1.158, 1.159, 1.159, 1.162, 1.167, 1.173, 1.178, 1.181, 1.186, 1.189, 1.189, 1.191, 1.193, 1.193, 1.193, 1.194, 1.194, 1.194, 1.189, 1.187, 1.186, 1.182, 1.176, 1.167, 1.163, 1.159, 1.158, 1.157, 1.158, 1.161,
+ 1.172, 1.165, 1.162, 1.162, 1.163, 1.166, 1.169, 1.173, 1.178, 1.181, 1.182, 1.185, 1.186, 1.186, 1.186, 1.187, 1.187, 1.189, 1.192, 1.191, 1.187, 1.185, 1.181, 1.177, 1.172, 1.167, 1.163, 1.159, 1.159, 1.161, 1.163, 1.166,
+ 1.173, 1.172, 1.166, 1.165, 1.166, 1.168, 1.171, 1.176, 1.179, 1.182, 1.181, 1.183, 1.185, 1.185, 1.185, 1.185, 1.185, 1.185, 1.191, 1.191, 1.185, 1.181, 1.179, 1.173, 1.169, 1.168, 1.163, 1.162, 1.161, 1.164, 1.166, 1.167
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.271, 2.218, 2.105, 2.004, 1.909, 1.829, 1.762, 1.705, 1.665, 1.629, 1.592, 1.559, 1.528, 1.516, 1.511, 1.511, 1.511, 1.514, 1.525, 1.553, 1.585, 1.617, 1.655, 1.697, 1.752, 1.816, 1.893, 1.982, 2.084, 2.195, 2.321, 2.342,
+ 2.218, 2.166, 2.057, 1.959, 1.871, 1.793, 1.726, 1.675, 1.633, 1.592, 1.559, 1.528, 1.503, 1.484, 1.474, 1.472, 1.472, 1.482, 1.499, 1.523, 1.553, 1.585, 1.619, 1.664, 1.715, 1.779, 1.855, 1.938, 2.037, 2.147, 2.259, 2.321,
+ 2.166, 2.101, 1.997, 1.901, 1.818, 1.743, 1.683, 1.634, 1.588, 1.546, 1.508, 1.476, 1.449, 1.429, 1.418, 1.415, 1.415, 1.425, 1.444, 1.469, 1.501, 1.538, 1.577, 1.622, 1.671, 1.728, 1.799, 1.881, 1.975, 2.078, 2.185, 2.259,
+ 2.101, 2.039, 1.938, 1.848, 1.768, 1.699, 1.641, 1.588, 1.541, 1.494, 1.455, 1.421, 1.394, 1.374, 1.361, 1.357, 1.357, 1.367, 1.388, 1.414, 1.448, 1.485, 1.528, 1.577, 1.626, 1.682, 1.748, 1.827, 1.917, 2.014, 2.119, 2.185,
+ 2.039, 1.979, 1.883, 1.795, 1.722, 1.658, 1.596, 1.541, 1.493, 1.443, 1.401, 1.364, 1.336, 1.316, 1.303, 1.301, 1.301, 1.311, 1.331, 1.359, 1.393, 1.432, 1.482, 1.528, 1.582, 1.641, 1.701, 1.775, 1.861, 1.956, 2.056, 2.119,
+ 1.979, 1.932, 1.836, 1.752, 1.685, 1.621, 1.557, 1.497, 1.443, 1.399, 1.351, 1.314, 1.286, 1.264, 1.253, 1.249, 1.249, 1.259, 1.281, 1.311, 1.344, 1.387, 1.432, 1.484, 1.541, 1.601, 1.662, 1.731, 1.816, 1.908, 2.003, 2.056,
+ 1.934, 1.888, 1.798, 1.719, 1.651, 1.584, 1.519, 1.457, 1.401, 1.351, 1.307, 1.268, 1.239, 1.217, 1.206, 1.203, 1.203, 1.212, 1.234, 1.263, 1.298, 1.344, 1.387, 1.442, 1.502, 1.565, 1.628, 1.693, 1.774, 1.864, 1.956, 2.003,
+ 1.901, 1.851, 1.763, 1.688, 1.618, 1.551, 1.483, 1.419, 1.359, 1.307, 1.268, 1.226, 1.195, 1.175, 1.164, 1.161, 1.161, 1.171, 1.192, 1.221, 1.262, 1.298, 1.346, 1.404, 1.466, 1.532, 1.595, 1.661, 1.738, 1.826, 1.917, 1.956,
+ 1.873, 1.821, 1.734, 1.659, 1.591, 1.519, 1.451, 1.386, 1.324, 1.269, 1.226, 1.192, 1.159, 1.141, 1.127, 1.125, 1.125, 1.135, 1.155, 1.187, 1.221, 1.262, 1.311, 1.368, 1.432, 1.499, 1.566, 1.634, 1.708, 1.793, 1.882, 1.917,
+ 1.847, 1.797, 1.713, 1.639, 1.565, 1.493, 1.422, 1.355, 1.291, 1.238, 1.192, 1.159, 1.128, 1.108, 1.097, 1.094, 1.094, 1.104, 1.125, 1.155, 1.187, 1.229, 1.279, 1.338, 1.403, 1.471, 1.541, 1.611, 1.684, 1.766, 1.853, 1.885,
+ 1.828, 1.772, 1.691, 1.614, 1.539, 1.466, 1.394, 1.325, 1.264, 1.209, 1.163, 1.128, 1.104, 1.081, 1.069, 1.067, 1.067, 1.078, 1.101, 1.125, 1.159, 1.201, 1.252, 1.312, 1.379, 1.447, 1.517, 1.591, 1.665, 1.743, 1.831, 1.862,
+ 1.812, 1.754, 1.677, 1.599, 1.519, 1.445, 1.371, 1.302, 1.239, 1.185, 1.139, 1.104, 1.081, 1.061, 1.048, 1.046, 1.046, 1.058, 1.078, 1.102, 1.136, 1.177, 1.229, 1.289, 1.356, 1.425, 1.497, 1.572, 1.647, 1.724, 1.811, 1.847,
+ 1.798, 1.741, 1.663, 1.585, 1.506, 1.429, 1.353, 1.284, 1.221, 1.167, 1.121, 1.086, 1.061, 1.046, 1.031, 1.029, 1.029, 1.044, 1.058, 1.083, 1.116, 1.159, 1.209, 1.271, 1.338, 1.407, 1.479, 1.557, 1.633, 1.709, 1.792, 1.832,
+ 1.792, 1.727, 1.651, 1.572, 1.494, 1.414, 1.339, 1.269, 1.206, 1.152, 1.106, 1.072, 1.046, 1.031, 1.018, 1.016, 1.016, 1.029, 1.044, 1.069, 1.102, 1.145, 1.196, 1.256, 1.324, 1.394, 1.471, 1.545, 1.624, 1.698, 1.782, 1.825,
+ 1.787, 1.724, 1.647, 1.566, 1.484, 1.407, 1.329, 1.258, 1.196, 1.141, 1.097, 1.062, 1.036, 1.018, 1.012, 1.007, 1.011, 1.016, 1.034, 1.059, 1.093, 1.135, 1.186, 1.246, 1.314, 1.386, 1.461, 1.538, 1.616, 1.691, 1.773, 1.818,
+ 1.786, 1.721, 1.642, 1.562, 1.481, 1.402, 1.325, 1.254, 1.191, 1.137, 1.092, 1.057, 1.031, 1.013, 1.004, 1.001, 1.004, 1.011, 1.028, 1.054, 1.088, 1.129, 1.181, 1.241, 1.308, 1.382, 1.458, 1.535, 1.613, 1.687, 1.769, 1.818,
+ 1.786, 1.721, 1.642, 1.562, 1.481, 1.401, 1.325, 1.253, 1.191, 1.136, 1.091, 1.057, 1.031, 1.013, 1.003, 1.001, 1.001, 1.011, 1.028, 1.054, 1.088, 1.129, 1.181, 1.241, 1.308, 1.382, 1.458, 1.535, 1.613, 1.687, 1.769, 1.818,
+ 1.787, 1.722, 1.643, 1.563, 1.482, 1.402, 1.326, 1.254, 1.192, 1.138, 1.092, 1.057, 1.032, 1.013, 1.006, 1.002, 1.006, 1.012, 1.031, 1.057, 1.092, 1.133, 1.185, 1.243, 1.311, 1.385, 1.461, 1.539, 1.618, 1.691, 1.774, 1.821,
+ 1.789, 1.729, 1.651, 1.571, 1.489, 1.411, 1.334, 1.263, 1.201, 1.147, 1.101, 1.065, 1.038, 1.021, 1.013, 1.009, 1.012, 1.021, 1.038, 1.064, 1.098, 1.141, 1.193, 1.254, 1.321, 1.395, 1.472, 1.549, 1.626, 1.701, 1.785, 1.825,
+ 1.799, 1.739, 1.661, 1.581, 1.502, 1.422, 1.347, 1.277, 1.214, 1.159, 1.111, 1.075, 1.049, 1.037, 1.021, 1.019, 1.021, 1.036, 1.049, 1.076, 1.111, 1.154, 1.207, 1.268, 1.334, 1.408, 1.485, 1.562, 1.639, 1.715, 1.799, 1.837,
+ 1.811, 1.755, 1.676, 1.597, 1.518, 1.439, 1.365, 1.295, 1.231, 1.176, 1.129, 1.093, 1.067, 1.049, 1.038, 1.036, 1.036, 1.049, 1.067, 1.094, 1.129, 1.173, 1.225, 1.286, 1.353, 1.425, 1.501, 1.577, 1.653, 1.729, 1.815, 1.851,
+ 1.829, 1.774, 1.693, 1.615, 1.537, 1.462, 1.387, 1.316, 1.253, 1.198, 1.153, 1.115, 1.091, 1.067, 1.059, 1.056, 1.056, 1.067, 1.092, 1.115, 1.151, 1.196, 1.249, 1.309, 1.375, 1.446, 1.522, 1.595, 1.672, 1.752, 1.839, 1.871,
+ 1.851, 1.801, 1.713, 1.636, 1.561, 1.485, 1.411, 1.342, 1.281, 1.226, 1.179, 1.145, 1.115, 1.091, 1.082, 1.081, 1.082, 1.092, 1.115, 1.143, 1.178, 1.223, 1.276, 1.337, 1.402, 1.472, 1.544, 1.618, 1.691, 1.774, 1.865, 1.896,
+ 1.876, 1.831, 1.739, 1.663, 1.588, 1.513, 1.439, 1.374, 1.312, 1.258, 1.212, 1.179, 1.145, 1.123, 1.113, 1.112, 1.112, 1.122, 1.143, 1.177, 1.211, 1.256, 1.308, 1.368, 1.431, 1.501, 1.572, 1.641, 1.716, 1.802, 1.896, 1.931,
+ 1.909, 1.867, 1.771, 1.691, 1.617, 1.545, 1.474, 1.411, 1.349, 1.296, 1.252, 1.212, 1.182, 1.159, 1.149, 1.148, 1.149, 1.158, 1.179, 1.211, 1.253, 1.293, 1.344, 1.403, 1.465, 1.533, 1.603, 1.669, 1.747, 1.836, 1.931, 1.974,
+ 1.952, 1.905, 1.806, 1.722, 1.651, 1.578, 1.511, 1.448, 1.388, 1.338, 1.296, 1.252, 1.223, 1.201, 1.189, 1.189, 1.189, 1.199, 1.224, 1.253, 1.293, 1.338, 1.384, 1.442, 1.504, 1.571, 1.638, 1.704, 1.782, 1.872, 1.974, 2.025,
+ 2.004, 1.951, 1.849, 1.759, 1.688, 1.619, 1.552, 1.491, 1.435, 1.388, 1.338, 1.301, 1.272, 1.249, 1.238, 1.236, 1.236, 1.248, 1.271, 1.301, 1.338, 1.384, 1.431, 1.484, 1.543, 1.609, 1.675, 1.742, 1.825, 1.919, 2.025, 2.081,
+ 2.062, 2.004, 1.898, 1.805, 1.729, 1.661, 1.597, 1.539, 1.486, 1.435, 1.391, 1.354, 1.326, 1.303, 1.291, 1.289, 1.289, 1.301, 1.323, 1.353, 1.389, 1.431, 1.483, 1.528, 1.585, 1.649, 1.713, 1.787, 1.875, 1.971, 2.081, 2.145,
+ 2.129, 2.062, 1.951, 1.854, 1.774, 1.705, 1.642, 1.586, 1.539, 1.486, 1.445, 1.411, 1.383, 1.361, 1.348, 1.347, 1.348, 1.359, 1.379, 1.409, 1.447, 1.484, 1.528, 1.578, 1.631, 1.691, 1.759, 1.836, 1.928, 2.031, 2.145, 2.217,
+ 2.201, 2.129, 2.013, 1.912, 1.827, 1.752, 1.689, 1.642, 1.586, 1.544, 1.501, 1.468, 1.442, 1.421, 1.409, 1.409, 1.411, 1.421, 1.439, 1.467, 1.504, 1.543, 1.578, 1.629, 1.679, 1.739, 1.815, 1.894, 1.985, 2.098, 2.217, 2.298,
+ 2.273, 2.201, 2.081, 1.974, 1.886, 1.807, 1.741, 1.689, 1.643, 1.603, 1.562, 1.527, 1.504, 1.485, 1.475, 1.474, 1.475, 1.487, 1.503, 1.531, 1.565, 1.601, 1.634, 1.678, 1.728, 1.795, 1.877, 1.961, 2.052, 2.169, 2.298, 2.365,
+ 2.317, 2.273, 2.146, 2.039, 1.946, 1.864, 1.792, 1.737, 1.688, 1.643, 1.603, 1.562, 1.533, 1.525, 1.523, 1.523, 1.523, 1.525, 1.534, 1.565, 1.601, 1.634, 1.677, 1.722, 1.772, 1.848, 1.935, 2.023, 2.108, 2.232, 2.365, 2.403
+ ],
+ "sigma": 0.00285,
+ "sigma_Cb": 0.00166
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2500,
+ "ccm":
+ [
+ 1.70741, -0.05307, -0.65433,
+ -0.62822, 1.68836, -0.06014,
+ -0.04452, -1.87628, 2.92079
+ ]
+ },
+ {
+ "ct": 2803,
+ "ccm":
+ [
+ 1.74383, -0.18731, -0.55652,
+ -0.56491, 1.67772, -0.11281,
+ -0.01522, -1.60635, 2.62157
+ ]
+ },
+ {
+ "ct": 2912,
+ "ccm":
+ [
+ 1.75215, -0.22221, -0.52995,
+ -0.54568, 1.63522, -0.08954,
+ 0.02633, -1.56997, 2.54364
+ ]
+ },
+ {
+ "ct": 2914,
+ "ccm":
+ [
+ 1.72423, -0.28939, -0.43484,
+ -0.55188, 1.62925, -0.07737,
+ 0.01959, -1.28661, 2.26702
+ ]
+ },
+ {
+ "ct": 3605,
+ "ccm":
+ [
+ 1.80381, -0.43646, -0.36735,
+ -0.46505, 1.56814, -0.10309,
+ 0.00929, -1.00424, 1.99495
+ ]
+ },
+ {
+ "ct": 4540,
+ "ccm":
+ [
+ 1.85263, -0.46545, -0.38719,
+ -0.44136, 1.68443, -0.24307,
+ 0.04108, -0.85599, 1.81491
+ ]
+ },
+ {
+ "ct": 5699,
+ "ccm":
+ [
+ 1.98595, -0.63542, -0.35054,
+ -0.34623, 1.54146, -0.19522,
+ 0.00411, -0.70936, 1.70525
+ ]
+ },
+ {
+ "ct": 8625,
+ "ccm":
+ [
+ 2.21637, -0.56663, -0.64974,
+ -0.41133, 1.96625, -0.55492,
+ -0.02307, -0.83529, 1.85837
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "short": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/ov64a40.json b/src/ipa/rpi/pisp/data/ov64a40.json
new file mode 100755
index 00000000..d9e263eb
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/ov64a40.json
@@ -0,0 +1,1133 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 17861,
+ "reference_gain": 2.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 1073,
+ "reference_Y": 9022
+ }
+ },
+ {
+ "rpi.dpc":
+ {
+ "strength": 1
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.984
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 215,
+ "slope": 0.01121
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 7700
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8000
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2300.0, 1.0576, 0.4098,
+ 2700.0, 0.7924, 0.4334,
+ 3000.0, 0.7635, 0.4428,
+ 4000.0, 0.6003, 0.5412,
+ 4150.0, 0.5627, 0.5789,
+ 6500.0, 0.4409, 0.7596
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.05597,
+ "transverse_neg": 0.04295
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "channels": [
+ {
+ "comment": "Channel 0 is normal AGC",
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 66666 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 60000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.5,
+ "y_target":
+ [
+ 0, 0.17,
+ 1000, 0.17
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 1 is the HDR short channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 60000 ],
+ "gain": [ 1.0, 1.0, 1.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.95,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.7,
+ 1000, 0.7
+ ]
+ },
+ {
+ "bound": "LOWER",
+ "q_lo": 0.0,
+ "q_hi": 0.2,
+ "y_target":
+ [
+ 0, 0.002,
+ 1000, 0.002
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 2 is the HDR long channel",
+ "desaturate": 0,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 4.0, 8.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [ ],
+ "shadows": [ ]
+ },
+ "channel_constraints": [
+ {
+ "bound": "UPPER",
+ "channel": 4,
+ "factor": 8
+ },
+ {
+ "bound": "LOWER",
+ "channel": 4,
+ "factor": 2
+ }
+ ],
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ },
+ {
+ "comment": "Channel 3 is the night mode channel",
+ "base_ev": 0.33,
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 20000, 66666 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 20000, 33333 ],
+ "gain": [ 1.0, 2.0, 4.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 100, 20000, 66666, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 4.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ],
+ "shadows": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.17
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 6500,
+ "table":
+ [
+ 2.447, 2.441, 2.423, 2.414, 2.401, 2.391, 2.379, 2.376, 2.375, 2.369, 2.364, 2.362, 2.359, 2.356, 2.351, 2.349, 2.349, 2.341, 2.336, 2.334, 2.332, 2.331, 2.331, 2.331, 2.333, 2.338, 2.342, 2.347, 2.359, 2.368, 2.378, 2.391,
+ 2.447, 2.441, 2.422, 2.408, 2.393, 2.388, 2.382, 2.376, 2.369, 2.365, 2.362, 2.359, 2.353, 2.351, 2.345, 2.345, 2.336, 2.336, 2.334, 2.327, 2.325, 2.326, 2.326, 2.329, 2.329, 2.334, 2.338, 2.347, 2.359, 2.368, 2.378, 2.389,
+ 2.446, 2.433, 2.414, 2.403, 2.393, 2.387, 2.382, 2.371, 2.369, 2.362, 2.356, 2.351, 2.335, 2.335, 2.329, 2.326, 2.318, 2.314, 2.313, 2.312, 2.312, 2.312, 2.318, 2.321, 2.326, 2.329, 2.334, 2.344, 2.357, 2.368, 2.378, 2.389,
+ 2.443, 2.431, 2.409, 2.402, 2.393, 2.383, 2.374, 2.369, 2.363, 2.356, 2.343, 2.335, 2.322, 2.317, 2.311, 2.309, 2.302, 2.299, 2.298, 2.295, 2.295, 2.296, 2.309, 2.313, 2.321, 2.326, 2.329, 2.341, 2.352, 2.364, 2.374, 2.385,
+ 2.442, 2.427, 2.409, 2.399, 2.393, 2.383, 2.371, 2.364, 2.356, 2.343, 2.333, 2.319, 2.313, 2.302, 2.297, 2.295, 2.293, 2.288, 2.285, 2.281, 2.281, 2.285, 2.293, 2.306, 2.313, 2.322, 2.327, 2.337, 2.351, 2.364, 2.374, 2.385,
+ 2.442, 2.427, 2.411, 2.398, 2.389, 2.381, 2.369, 2.359, 2.351, 2.335, 2.319, 2.312, 2.301, 2.296, 2.289, 2.283, 2.279, 2.277, 2.273, 2.269, 2.267, 2.268, 2.279, 2.293, 2.306, 2.316, 2.325, 2.335, 2.348, 2.361, 2.372, 2.385,
+ 2.441, 2.428, 2.411, 2.399, 2.389, 2.381, 2.369, 2.356, 2.343, 2.331, 2.312, 2.301, 2.292, 2.286, 2.279, 2.278, 2.273, 2.271, 2.267, 2.259, 2.259, 2.262, 2.268, 2.279, 2.297, 2.311, 2.323, 2.335, 2.347, 2.357, 2.371, 2.388,
+ 2.441, 2.428, 2.412, 2.397, 2.389, 2.381, 2.369, 2.355, 2.337, 2.318, 2.308, 2.292, 2.286, 2.278, 2.276, 2.268, 2.264, 2.263, 2.257, 2.252, 2.252, 2.255, 2.262, 2.273, 2.284, 2.303, 2.319, 2.336, 2.343, 2.356, 2.365, 2.388,
+ 2.441, 2.428, 2.412, 2.401, 2.389, 2.381, 2.363, 2.344, 2.323, 2.311, 2.299, 2.287, 2.278, 2.275, 2.267, 2.264, 2.259, 2.256, 2.249, 2.246, 2.246, 2.249, 2.255, 2.262, 2.279, 2.296, 2.313, 2.336, 2.347, 2.355, 2.366, 2.384,
+ 2.441, 2.427, 2.412, 2.401, 2.391, 2.381, 2.355, 2.339, 2.323, 2.308, 2.297, 2.284, 2.275, 2.267, 2.259, 2.253, 2.251, 2.247, 2.244, 2.239, 2.239, 2.244, 2.249, 2.259, 2.276, 2.288, 2.311, 2.332, 2.348, 2.356, 2.366, 2.384,
+ 2.442, 2.428, 2.415, 2.402, 2.391, 2.379, 2.354, 2.331, 2.323, 2.302, 2.291, 2.278, 2.267, 2.259, 2.253, 2.246, 2.245, 2.241, 2.236, 2.233, 2.235, 2.239, 2.245, 2.255, 2.271, 2.287, 2.307, 2.331, 2.349, 2.356, 2.367, 2.384,
+ 2.441, 2.429, 2.419, 2.404, 2.394, 2.375, 2.352, 2.331, 2.318, 2.301, 2.288, 2.273, 2.263, 2.254, 2.246, 2.242, 2.237, 2.232, 2.229, 2.229, 2.232, 2.235, 2.245, 2.255, 2.271, 2.286, 2.307, 2.331, 2.351, 2.359, 2.371, 2.385,
+ 2.441, 2.432, 2.419, 2.406, 2.395, 2.375, 2.349, 2.332, 2.317, 2.301, 2.288, 2.273, 2.262, 2.249, 2.242, 2.235, 2.226, 2.225, 2.225, 2.227, 2.232, 2.235, 2.246, 2.255, 2.271, 2.286, 2.307, 2.331, 2.351, 2.366, 2.376, 2.388,
+ 2.441, 2.437, 2.424, 2.406, 2.395, 2.375, 2.352, 2.333, 2.317, 2.304, 2.289, 2.274, 2.261, 2.245, 2.235, 2.226, 2.217, 2.216, 2.219, 2.225, 2.229, 2.237, 2.246, 2.255, 2.272, 2.289, 2.307, 2.334, 2.352, 2.369, 2.376, 2.392,
+ 2.447, 2.438, 2.425, 2.412, 2.399, 2.378, 2.352, 2.335, 2.317, 2.304, 2.289, 2.275, 2.259, 2.243, 2.227, 2.217, 2.214, 2.209, 2.214, 2.219, 2.229, 2.238, 2.246, 2.258, 2.272, 2.289, 2.309, 2.334, 2.355, 2.369, 2.385, 2.392,
+ 2.449, 2.441, 2.425, 2.416, 2.399, 2.381, 2.357, 2.336, 2.321, 2.305, 2.289, 2.275, 2.261, 2.242, 2.225, 2.214, 2.207, 2.207, 2.209, 2.218, 2.229, 2.238, 2.249, 2.261, 2.275, 2.291, 2.309, 2.336, 2.354, 2.371, 2.386, 2.396,
+ 2.451, 2.442, 2.426, 2.419, 2.403, 2.383, 2.361, 2.341, 2.321, 2.305, 2.289, 2.276, 2.259, 2.243, 2.225, 2.213, 2.207, 2.207, 2.209, 2.218, 2.227, 2.241, 2.249, 2.261, 2.277, 2.295, 2.316, 2.338, 2.355, 2.374, 2.387, 2.398,
+ 2.452, 2.442, 2.427, 2.419, 2.405, 2.384, 2.361, 2.341, 2.321, 2.305, 2.293, 2.277, 2.259, 2.244, 2.226, 2.213, 2.211, 2.208, 2.211, 2.218, 2.229, 2.241, 2.249, 2.263, 2.279, 2.298, 2.319, 2.339, 2.359, 2.374, 2.387, 2.398,
+ 2.452, 2.442, 2.428, 2.419, 2.405, 2.384, 2.361, 2.341, 2.324, 2.305, 2.293, 2.277, 2.259, 2.245, 2.232, 2.222, 2.213, 2.213, 2.218, 2.223, 2.229, 2.241, 2.249, 2.265, 2.279, 2.298, 2.319, 2.339, 2.363, 2.374, 2.387, 2.406,
+ 2.452, 2.442, 2.428, 2.419, 2.405, 2.384, 2.361, 2.343, 2.324, 2.305, 2.293, 2.279, 2.265, 2.251, 2.241, 2.232, 2.222, 2.222, 2.223, 2.229, 2.233, 2.241, 2.251, 2.265, 2.279, 2.298, 2.321, 2.341, 2.364, 2.374, 2.387, 2.405,
+ 2.454, 2.442, 2.429, 2.419, 2.404, 2.386, 2.365, 2.346, 2.327, 2.309, 2.293, 2.281, 2.269, 2.258, 2.251, 2.241, 2.237, 2.231, 2.231, 2.233, 2.238, 2.245, 2.256, 2.267, 2.283, 2.301, 2.323, 2.344, 2.366, 2.379, 2.388, 2.405,
+ 2.454, 2.439, 2.431, 2.421, 2.404, 2.392, 2.369, 2.348, 2.332, 2.314, 2.299, 2.288, 2.274, 2.268, 2.258, 2.252, 2.249, 2.244, 2.241, 2.241, 2.245, 2.251, 2.259, 2.269, 2.287, 2.301, 2.324, 2.352, 2.366, 2.379, 2.388, 2.405,
+ 2.453, 2.438, 2.431, 2.418, 2.407, 2.393, 2.374, 2.352, 2.337, 2.321, 2.303, 2.293, 2.284, 2.274, 2.268, 2.261, 2.259, 2.257, 2.251, 2.251, 2.251, 2.258, 2.266, 2.276, 2.297, 2.314, 2.333, 2.354, 2.366, 2.381, 2.391, 2.407,
+ 2.453, 2.438, 2.431, 2.417, 2.408, 2.396, 2.379, 2.359, 2.344, 2.329, 2.314, 2.301, 2.293, 2.284, 2.277, 2.276, 2.271, 2.266, 2.266, 2.261, 2.261, 2.266, 2.276, 2.285, 2.301, 2.318, 2.339, 2.356, 2.371, 2.383, 2.393, 2.408,
+ 2.453, 2.441, 2.428, 2.417, 2.409, 2.398, 2.386, 2.371, 2.351, 2.339, 2.324, 2.314, 2.301, 2.296, 2.289, 2.288, 2.281, 2.278, 2.275, 2.271, 2.271, 2.276, 2.285, 2.294, 2.311, 2.327, 2.346, 2.356, 2.373, 2.386, 2.393, 2.409,
+ 2.457, 2.441, 2.428, 2.417, 2.412, 2.403, 2.389, 2.381, 2.365, 2.349, 2.337, 2.324, 2.314, 2.309, 2.306, 2.303, 2.295, 2.294, 2.291, 2.287, 2.287, 2.289, 2.294, 2.309, 2.319, 2.332, 2.351, 2.359, 2.377, 2.386, 2.398, 2.411,
+ 2.457, 2.443, 2.427, 2.417, 2.413, 2.405, 2.399, 2.388, 2.373, 2.365, 2.349, 2.337, 2.327, 2.323, 2.318, 2.314, 2.312, 2.309, 2.304, 2.303, 2.302, 2.303, 2.309, 2.319, 2.332, 2.344, 2.355, 2.365, 2.379, 2.392, 2.403, 2.412,
+ 2.459, 2.449, 2.427, 2.417, 2.413, 2.407, 2.405, 2.399, 2.388, 2.373, 2.366, 2.353, 2.346, 2.338, 2.334, 2.331, 2.328, 2.321, 2.321, 2.317, 2.317, 2.321, 2.321, 2.337, 2.344, 2.355, 2.363, 2.369, 2.383, 2.392, 2.407, 2.418,
+ 2.465, 2.453, 2.439, 2.427, 2.417, 2.413, 2.407, 2.405, 2.399, 2.391, 2.376, 2.368, 2.359, 2.358, 2.349, 2.347, 2.346, 2.341, 2.341, 2.335, 2.334, 2.334, 2.341, 2.347, 2.355, 2.363, 2.368, 2.377, 2.388, 2.399, 2.418, 2.421,
+ 2.467, 2.453, 2.441, 2.431, 2.423, 2.417, 2.416, 2.408, 2.405, 2.399, 2.394, 2.386, 2.381, 2.378, 2.371, 2.369, 2.365, 2.361, 2.359, 2.356, 2.356, 2.356, 2.356, 2.361, 2.367, 2.368, 2.374, 2.387, 2.393, 2.407, 2.418, 2.427,
+ 2.473, 2.456, 2.447, 2.434, 2.431, 2.423, 2.419, 2.419, 2.413, 2.406, 2.404, 2.403, 2.397, 2.395, 2.394, 2.391, 2.386, 2.381, 2.378, 2.371, 2.371, 2.365, 2.365, 2.372, 2.374, 2.376, 2.379, 2.392, 2.401, 2.413, 2.422, 2.431,
+ 2.473, 2.469, 2.449, 2.441, 2.433, 2.431, 2.423, 2.419, 2.419, 2.413, 2.412, 2.409, 2.403, 2.402, 2.402, 2.399, 2.399, 2.391, 2.387, 2.385, 2.381, 2.379, 2.379, 2.379, 2.379, 2.379, 2.388, 2.395, 2.409, 2.413, 2.426, 2.431
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 6500,
+ "table":
+ [
+ 1.308, 1.307, 1.301, 1.301, 1.297, 1.295, 1.295, 1.295, 1.295, 1.295, 1.295, 1.295, 1.295, 1.295, 1.295, 1.296, 1.298, 1.299, 1.298, 1.298, 1.298, 1.299, 1.299, 1.299, 1.299, 1.307, 1.308, 1.311, 1.313, 1.317, 1.322, 1.322,
+ 1.307, 1.304, 1.298, 1.293, 1.292, 1.291, 1.288, 1.288, 1.288, 1.288, 1.289, 1.291, 1.292, 1.292, 1.294, 1.294, 1.294, 1.293, 1.293, 1.292, 1.293, 1.295, 1.296, 1.298, 1.299, 1.299, 1.302, 1.307, 1.309, 1.313, 1.318, 1.322,
+ 1.303, 1.298, 1.293, 1.291, 1.289, 1.287, 1.286, 1.286, 1.287, 1.287, 1.288, 1.289, 1.291, 1.292, 1.292, 1.294, 1.293, 1.293, 1.293, 1.292, 1.291, 1.292, 1.295, 1.296, 1.297, 1.298, 1.299, 1.302, 1.306, 1.308, 1.313, 1.317,
+ 1.299, 1.293, 1.291, 1.289, 1.287, 1.286, 1.286, 1.286, 1.287, 1.287, 1.288, 1.289, 1.291, 1.292, 1.293, 1.293, 1.293, 1.293, 1.293, 1.291, 1.291, 1.291, 1.293, 1.295, 1.296, 1.297, 1.298, 1.301, 1.304, 1.306, 1.308, 1.315,
+ 1.297, 1.291, 1.289, 1.286, 1.286, 1.286, 1.286, 1.287, 1.287, 1.287, 1.288, 1.289, 1.289, 1.292, 1.294, 1.294, 1.293, 1.293, 1.293, 1.291, 1.289, 1.289, 1.292, 1.294, 1.295, 1.296, 1.297, 1.298, 1.301, 1.305, 1.308, 1.313,
+ 1.295, 1.289, 1.287, 1.285, 1.285, 1.285, 1.285, 1.286, 1.287, 1.287, 1.287, 1.288, 1.289, 1.293, 1.294, 1.295, 1.295, 1.294, 1.294, 1.292, 1.289, 1.289, 1.289, 1.294, 1.294, 1.295, 1.295, 1.296, 1.299, 1.301, 1.307, 1.308,
+ 1.292, 1.287, 1.285, 1.284, 1.283, 1.283, 1.283, 1.284, 1.284, 1.286, 1.287, 1.288, 1.289, 1.293, 1.294, 1.295, 1.295, 1.295, 1.294, 1.292, 1.291, 1.289, 1.289, 1.291, 1.293, 1.294, 1.294, 1.295, 1.296, 1.299, 1.305, 1.307,
+ 1.292, 1.285, 1.282, 1.282, 1.282, 1.282, 1.282, 1.283, 1.283, 1.284, 1.286, 1.287, 1.289, 1.293, 1.295, 1.296, 1.296, 1.295, 1.295, 1.292, 1.291, 1.289, 1.288, 1.288, 1.291, 1.292, 1.293, 1.294, 1.296, 1.297, 1.301, 1.306,
+ 1.291, 1.283, 1.282, 1.281, 1.281, 1.281, 1.281, 1.283, 1.282, 1.283, 1.283, 1.286, 1.287, 1.289, 1.293, 1.295, 1.296, 1.296, 1.294, 1.291, 1.291, 1.289, 1.288, 1.288, 1.289, 1.291, 1.292, 1.293, 1.296, 1.297, 1.299, 1.301,
+ 1.288, 1.283, 1.281, 1.279, 1.279, 1.279, 1.281, 1.281, 1.281, 1.282, 1.282, 1.283, 1.286, 1.289, 1.292, 1.295, 1.296, 1.296, 1.293, 1.291, 1.289, 1.288, 1.287, 1.287, 1.289, 1.291, 1.292, 1.292, 1.294, 1.296, 1.297, 1.299,
+ 1.287, 1.282, 1.279, 1.278, 1.279, 1.279, 1.279, 1.279, 1.281, 1.281, 1.282, 1.283, 1.283, 1.288, 1.291, 1.295, 1.295, 1.294, 1.292, 1.289, 1.288, 1.287, 1.287, 1.287, 1.288, 1.289, 1.291, 1.292, 1.293, 1.294, 1.297, 1.298,
+ 1.284, 1.279, 1.278, 1.278, 1.279, 1.279, 1.279, 1.279, 1.279, 1.281, 1.282, 1.283, 1.283, 1.288, 1.291, 1.294, 1.294, 1.294, 1.292, 1.288, 1.288, 1.288, 1.289, 1.288, 1.288, 1.288, 1.291, 1.292, 1.293, 1.294, 1.296, 1.298,
+ 1.284, 1.279, 1.277, 1.277, 1.277, 1.278, 1.279, 1.279, 1.279, 1.281, 1.282, 1.283, 1.285, 1.288, 1.291, 1.294, 1.294, 1.294, 1.292, 1.291, 1.289, 1.289, 1.289, 1.289, 1.288, 1.288, 1.289, 1.293, 1.293, 1.295, 1.296, 1.298,
+ 1.283, 1.279, 1.276, 1.276, 1.276, 1.277, 1.278, 1.279, 1.281, 1.281, 1.282, 1.283, 1.285, 1.289, 1.291, 1.292, 1.293, 1.293, 1.293, 1.292, 1.289, 1.289, 1.291, 1.291, 1.289, 1.288, 1.289, 1.292, 1.293, 1.294, 1.296, 1.299,
+ 1.283, 1.279, 1.275, 1.276, 1.276, 1.277, 1.278, 1.279, 1.281, 1.282, 1.282, 1.283, 1.285, 1.289, 1.291, 1.291, 1.292, 1.293, 1.293, 1.293, 1.291, 1.291, 1.291, 1.291, 1.289, 1.288, 1.288, 1.289, 1.292, 1.294, 1.295, 1.299,
+ 1.283, 1.277, 1.275, 1.275, 1.276, 1.276, 1.279, 1.279, 1.281, 1.282, 1.282, 1.283, 1.285, 1.289, 1.291, 1.291, 1.291, 1.292, 1.293, 1.293, 1.292, 1.291, 1.291, 1.291, 1.291, 1.289, 1.288, 1.289, 1.291, 1.293, 1.295, 1.298,
+ 1.282, 1.277, 1.275, 1.274, 1.275, 1.276, 1.278, 1.279, 1.281, 1.282, 1.282, 1.282, 1.284, 1.287, 1.289, 1.289, 1.289, 1.289, 1.292, 1.292, 1.292, 1.291, 1.291, 1.291, 1.291, 1.289, 1.288, 1.289, 1.291, 1.292, 1.296, 1.298,
+ 1.282, 1.276, 1.274, 1.274, 1.275, 1.276, 1.277, 1.279, 1.279, 1.281, 1.281, 1.281, 1.282, 1.286, 1.287, 1.289, 1.289, 1.289, 1.289, 1.291, 1.291, 1.291, 1.291, 1.291, 1.291, 1.289, 1.289, 1.289, 1.291, 1.292, 1.297, 1.298,
+ 1.282, 1.275, 1.274, 1.274, 1.274, 1.275, 1.275, 1.277, 1.279, 1.279, 1.279, 1.279, 1.281, 1.282, 1.286, 1.287, 1.287, 1.288, 1.288, 1.289, 1.289, 1.289, 1.291, 1.291, 1.291, 1.289, 1.289, 1.289, 1.291, 1.292, 1.297, 1.298,
+ 1.279, 1.274, 1.273, 1.273, 1.274, 1.275, 1.275, 1.276, 1.277, 1.278, 1.278, 1.278, 1.278, 1.281, 1.283, 1.285, 1.286, 1.286, 1.286, 1.286, 1.286, 1.288, 1.289, 1.289, 1.289, 1.289, 1.289, 1.289, 1.291, 1.292, 1.297, 1.298,
+ 1.279, 1.274, 1.272, 1.272, 1.273, 1.274, 1.275, 1.274, 1.276, 1.276, 1.276, 1.276, 1.277, 1.278, 1.282, 1.283, 1.283, 1.283, 1.283, 1.283, 1.284, 1.286, 1.288, 1.288, 1.288, 1.288, 1.289, 1.291, 1.291, 1.292, 1.296, 1.298,
+ 1.279, 1.273, 1.272, 1.272, 1.273, 1.273, 1.274, 1.274, 1.275, 1.275, 1.275, 1.275, 1.276, 1.277, 1.279, 1.281, 1.283, 1.283, 1.282, 1.282, 1.283, 1.284, 1.287, 1.288, 1.288, 1.288, 1.289, 1.291, 1.292, 1.292, 1.296, 1.299,
+ 1.282, 1.272, 1.271, 1.271, 1.272, 1.272, 1.273, 1.274, 1.274, 1.274, 1.274, 1.274, 1.276, 1.277, 1.279, 1.281, 1.282, 1.282, 1.282, 1.281, 1.282, 1.283, 1.286, 1.287, 1.288, 1.288, 1.288, 1.291, 1.292, 1.292, 1.296, 1.297,
+ 1.281, 1.273, 1.272, 1.271, 1.271, 1.271, 1.272, 1.273, 1.274, 1.274, 1.274, 1.275, 1.276, 1.278, 1.279, 1.281, 1.282, 1.282, 1.282, 1.282, 1.282, 1.284, 1.285, 1.287, 1.288, 1.288, 1.288, 1.289, 1.292, 1.293, 1.296, 1.297,
+ 1.281, 1.275, 1.272, 1.271, 1.271, 1.271, 1.272, 1.273, 1.273, 1.273, 1.273, 1.275, 1.277, 1.279, 1.282, 1.282, 1.283, 1.283, 1.283, 1.282, 1.282, 1.284, 1.285, 1.286, 1.288, 1.288, 1.288, 1.289, 1.293, 1.296, 1.297, 1.297,
+ 1.281, 1.276, 1.272, 1.271, 1.269, 1.269, 1.272, 1.273, 1.274, 1.274, 1.275, 1.276, 1.279, 1.282, 1.283, 1.283, 1.284, 1.284, 1.285, 1.285, 1.284, 1.285, 1.285, 1.286, 1.289, 1.289, 1.289, 1.289, 1.293, 1.295, 1.297, 1.301,
+ 1.286, 1.276, 1.272, 1.271, 1.271, 1.269, 1.272, 1.273, 1.274, 1.276, 1.276, 1.276, 1.279, 1.282, 1.284, 1.285, 1.285, 1.285, 1.286, 1.286, 1.285, 1.285, 1.286, 1.286, 1.289, 1.289, 1.289, 1.291, 1.292, 1.295, 1.301, 1.302,
+ 1.286, 1.277, 1.272, 1.272, 1.271, 1.271, 1.272, 1.273, 1.276, 1.276, 1.276, 1.277, 1.279, 1.282, 1.284, 1.285, 1.285, 1.285, 1.286, 1.286, 1.286, 1.286, 1.286, 1.286, 1.288, 1.289, 1.289, 1.291, 1.292, 1.294, 1.301, 1.304,
+ 1.285, 1.276, 1.274, 1.272, 1.271, 1.271, 1.271, 1.273, 1.274, 1.276, 1.276, 1.278, 1.279, 1.282, 1.283, 1.284, 1.285, 1.285, 1.286, 1.286, 1.286, 1.286, 1.286, 1.287, 1.287, 1.288, 1.291, 1.292, 1.292, 1.295, 1.301, 1.307,
+ 1.285, 1.278, 1.275, 1.273, 1.272, 1.272, 1.271, 1.272, 1.274, 1.275, 1.276, 1.279, 1.279, 1.281, 1.284, 1.284, 1.285, 1.285, 1.285, 1.285, 1.285, 1.285, 1.286, 1.287, 1.287, 1.287, 1.291, 1.292, 1.293, 1.297, 1.301, 1.307,
+ 1.283, 1.277, 1.275, 1.273, 1.272, 1.271, 1.269, 1.271, 1.272, 1.274, 1.275, 1.276, 1.279, 1.279, 1.279, 1.284, 1.284, 1.284, 1.284, 1.284, 1.284, 1.284, 1.285, 1.285, 1.287, 1.287, 1.291, 1.292, 1.293, 1.298, 1.301, 1.301,
+ 1.283, 1.277, 1.275, 1.272, 1.271, 1.268, 1.268, 1.269, 1.271, 1.272, 1.273, 1.272, 1.277, 1.279, 1.279, 1.281, 1.281, 1.282, 1.282, 1.282, 1.281, 1.283, 1.285, 1.285, 1.287, 1.287, 1.288, 1.291, 1.293, 1.298, 1.299, 1.299
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 4.903, 4.653, 4.193, 3.818, 3.501, 3.239, 3.015, 2.824, 2.666, 2.529, 2.414, 2.316, 2.241, 2.205, 2.184, 2.178, 2.178, 2.178, 2.188, 2.216, 2.269, 2.359, 2.465, 2.597, 2.738, 2.915, 3.125, 3.374, 3.662, 4.011, 4.418, 4.656,
+ 4.653, 4.392, 3.985, 3.621, 3.323, 3.071, 2.855, 2.678, 2.534, 2.414, 2.316, 2.234, 2.168, 2.116, 2.079, 2.058, 2.058, 2.065, 2.091, 2.135, 2.196, 2.269, 2.359, 2.465, 2.599, 2.761, 2.962, 3.195, 3.472, 3.801, 4.188, 4.418,
+ 4.392, 4.149, 3.766, 3.423, 3.139, 2.901, 2.697, 2.534, 2.409, 2.286, 2.191, 2.106, 2.034, 1.977, 1.938, 1.914, 1.914, 1.923, 1.952, 1.998, 2.063, 2.139, 2.231, 2.341, 2.465, 2.612, 2.796, 3.019, 3.284, 3.596, 3.963, 4.188,
+ 4.149, 3.936, 3.566, 3.252, 2.982, 2.749, 2.561, 2.409, 2.286, 2.169, 2.066, 1.976, 1.901, 1.842, 1.801, 1.777, 1.777, 1.785, 1.814, 1.861, 1.929, 2.012, 2.107, 2.227, 2.341, 2.483, 2.651, 2.863, 3.119, 3.415, 3.764, 3.979,
+ 3.951, 3.743, 3.392, 3.091, 2.831, 2.615, 2.438, 2.297, 2.169, 2.061, 1.942, 1.847, 1.768, 1.711, 1.669, 1.646, 1.646, 1.653, 1.681, 1.729, 1.796, 1.882, 1.987, 2.107, 2.227, 2.367, 2.528, 2.727, 2.968, 3.254, 3.583, 3.805,
+ 3.785, 3.572, 3.242, 2.952, 2.703, 2.501, 2.336, 2.195, 2.061, 1.942, 1.825, 1.726, 1.651, 1.591, 1.549, 1.527, 1.527, 1.533, 1.562, 1.611, 1.676, 1.763, 1.881, 1.987, 2.119, 2.263, 2.422, 2.608, 2.833, 3.109, 3.428, 3.652,
+ 3.644, 3.424, 3.107, 2.828, 2.592, 2.401, 2.244, 2.097, 1.954, 1.825, 1.724, 1.614, 1.538, 1.479, 1.441, 1.419, 1.419, 1.424, 1.452, 1.498, 1.564, 1.656, 1.763, 1.881, 2.018, 2.169, 2.325, 2.504, 2.718, 2.979, 3.291, 3.519,
+ 3.525, 3.297, 2.986, 2.718, 2.495, 2.318, 2.156, 2.004, 1.856, 1.724, 1.614, 1.524, 1.439, 1.384, 1.348, 1.328, 1.328, 1.332, 1.358, 1.402, 1.466, 1.564, 1.656, 1.781, 1.923, 2.076, 2.241, 2.414, 2.616, 2.864, 3.166, 3.411,
+ 3.413, 3.191, 2.889, 2.631, 2.421, 2.245, 2.082, 1.924, 1.772, 1.637, 1.524, 1.439, 1.359, 1.307, 1.272, 1.252, 1.252, 1.258, 1.283, 1.324, 1.391, 1.466, 1.569, 1.694, 1.838, 1.999, 2.166, 2.341, 2.537, 2.774, 3.069, 3.306,
+ 3.333, 3.086, 2.793, 2.547, 2.349, 2.174, 2.006, 1.843, 1.689, 1.556, 1.444, 1.359, 1.299, 1.239, 1.207, 1.189, 1.189, 1.194, 1.219, 1.261, 1.324, 1.391, 1.491, 1.614, 1.757, 1.921, 2.092, 2.269, 2.463, 2.687, 2.967, 3.225,
+ 3.256, 3.016, 2.727, 2.491, 2.295, 2.118, 1.947, 1.779, 1.625, 1.494, 1.383, 1.299, 1.239, 1.189, 1.158, 1.141, 1.141, 1.147, 1.171, 1.217, 1.261, 1.334, 1.429, 1.551, 1.695, 1.857, 2.035, 2.217, 2.409, 2.628, 2.895, 3.153,
+ 3.211, 2.946, 2.666, 2.433, 2.246, 2.068, 1.891, 1.721, 1.569, 1.437, 1.332, 1.249, 1.189, 1.156, 1.113, 1.096, 1.096, 1.102, 1.133, 1.171, 1.217, 1.286, 1.378, 1.496, 1.638, 1.802, 1.981, 2.166, 2.358, 2.573, 2.832, 3.105,
+ 3.165, 2.901, 2.625, 2.401, 2.211, 2.031, 1.848, 1.678, 1.528, 1.398, 1.294, 1.216, 1.156, 1.113, 1.085, 1.061, 1.061, 1.067, 1.102, 1.133, 1.185, 1.253, 1.341, 1.456, 1.597, 1.761, 1.942, 2.131, 2.325, 2.534, 2.793, 3.069,
+ 3.132, 2.862, 2.593, 2.371, 2.182, 1.997, 1.816, 1.646, 1.496, 1.367, 1.267, 1.189, 1.131, 1.085, 1.061, 1.032, 1.032, 1.043, 1.067, 1.108, 1.161, 1.228, 1.313, 1.426, 1.566, 1.728, 1.911, 2.102, 2.297, 2.508, 2.761, 3.039,
+ 3.118, 2.833, 2.566, 2.344, 2.157, 1.972, 1.786, 1.618, 1.469, 1.343, 1.244, 1.169, 1.111, 1.063, 1.032, 1.018, 1.009, 1.027, 1.043, 1.086, 1.141, 1.207, 1.292, 1.403, 1.541, 1.703, 1.884, 2.077, 2.274, 2.484, 2.735, 3.031,
+ 3.111, 2.815, 2.553, 2.334, 2.145, 1.959, 1.774, 1.605, 1.455, 1.331, 1.234, 1.159, 1.101, 1.053, 1.018, 1.005, 1.004, 1.006, 1.033, 1.077, 1.132, 1.199, 1.283, 1.393, 1.531, 1.692, 1.873, 2.067, 2.265, 2.477, 2.726, 3.028,
+ 3.111, 2.815, 2.552, 2.333, 2.145, 1.959, 1.774, 1.605, 1.455, 1.331, 1.234, 1.159, 1.101, 1.053, 1.018, 1.001, 1.001, 1.006, 1.033, 1.077, 1.132, 1.199, 1.283, 1.393, 1.531, 1.692, 1.873, 2.067, 2.265, 2.475, 2.726, 3.028,
+ 3.111, 2.822, 2.552, 2.333, 2.146, 1.961, 1.775, 1.607, 1.457, 1.333, 1.236, 1.161, 1.103, 1.056, 1.021, 1.015, 1.004, 1.017, 1.037, 1.079, 1.135, 1.201, 1.287, 1.395, 1.533, 1.695, 1.876, 2.067, 2.266, 2.475, 2.727, 3.028,
+ 3.123, 2.844, 2.579, 2.357, 2.166, 1.983, 1.797, 1.627, 1.477, 1.351, 1.253, 1.177, 1.119, 1.073, 1.046, 1.021, 1.021, 1.037, 1.055, 1.097, 1.151, 1.218, 1.305, 1.416, 1.555, 1.717, 1.898, 2.089, 2.287, 2.499, 2.753, 3.041,
+ 3.149, 2.881, 2.609, 2.383, 2.191, 2.009, 1.827, 1.658, 1.506, 1.378, 1.277, 1.199, 1.142, 1.099, 1.073, 1.046, 1.046, 1.055, 1.089, 1.121, 1.173, 1.242, 1.331, 1.444, 1.584, 1.747, 1.928, 2.118, 2.315, 2.528, 2.787, 3.071,
+ 3.187, 2.933, 2.654, 2.422, 2.228, 2.049, 1.871, 1.699, 1.547, 1.417, 1.313, 1.232, 1.173, 1.136, 1.099, 1.081, 1.081, 1.089, 1.121, 1.152, 1.205, 1.275, 1.368, 1.484, 1.626, 1.789, 1.971, 2.159, 2.354, 2.571, 2.834, 3.107,
+ 3.247, 2.989, 2.703, 2.464, 2.269, 2.091, 1.915, 1.748, 1.595, 1.464, 1.356, 1.272, 1.216, 1.173, 1.136, 1.121, 1.121, 1.128, 1.152, 1.199, 1.242, 1.316, 1.411, 1.532, 1.675, 1.839, 2.019, 2.202, 2.398, 2.618, 2.891, 3.164,
+ 3.306, 3.068, 2.776, 2.524, 2.324, 2.148, 1.979, 1.814, 1.661, 1.526, 1.416, 1.328, 1.272, 1.216, 1.185, 1.169, 1.169, 1.177, 1.199, 1.242, 1.297, 1.371, 1.473, 1.596, 1.741, 1.904, 2.081, 2.263, 2.459, 2.687, 2.971, 3.221,
+ 3.394, 3.161, 2.855, 2.598, 2.387, 2.211, 2.047, 1.885, 1.734, 1.599, 1.485, 1.399, 1.328, 1.273, 1.242, 1.224, 1.224, 1.231, 1.256, 1.297, 1.369, 1.438, 1.542, 1.669, 1.813, 1.976, 2.149, 2.331, 2.527, 2.764, 3.057, 3.304,
+ 3.496, 3.263, 2.949, 2.684, 2.463, 2.279, 2.118, 1.965, 1.817, 1.681, 1.568, 1.485, 1.399, 1.345, 1.309, 1.291, 1.291, 1.299, 1.325, 1.369, 1.438, 1.528, 1.623, 1.751, 1.897, 2.056, 2.225, 2.405, 2.608, 2.858, 3.162, 3.402,
+ 3.611, 3.397, 3.072, 2.793, 2.558, 2.368, 2.205, 2.057, 1.914, 1.779, 1.673, 1.568, 1.492, 1.435, 1.398, 1.377, 1.377, 1.385, 1.414, 1.461, 1.528, 1.623, 1.722, 1.851, 1.996, 2.152, 2.318, 2.499, 2.712, 2.977, 3.294, 3.519,
+ 3.764, 3.537, 3.204, 2.908, 2.661, 2.459, 2.294, 2.147, 2.012, 1.885, 1.779, 1.673, 1.595, 1.535, 1.496, 1.476, 1.476, 1.484, 1.515, 1.564, 1.631, 1.722, 1.837, 1.954, 2.096, 2.247, 2.411, 2.599, 2.825, 3.108, 3.431, 3.662,
+ 3.919, 3.704, 3.353, 3.046, 2.787, 2.571, 2.393, 2.247, 2.117, 2.007, 1.885, 1.789, 1.709, 1.651, 1.613, 1.591, 1.591, 1.599, 1.631, 1.679, 1.749, 1.837, 1.954, 2.069, 2.204, 2.352, 2.518, 2.719, 2.962, 3.257, 3.591, 3.815,
+ 4.126, 3.894, 3.521, 3.203, 2.931, 2.702, 2.512, 2.358, 2.238, 2.117, 2.007, 1.915, 1.839, 1.779, 1.739, 1.719, 1.719, 1.726, 1.759, 1.808, 1.877, 1.965, 2.069, 2.202, 2.319, 2.467, 2.645, 2.859, 3.122, 3.427, 3.784, 4.019,
+ 4.391, 4.126, 3.721, 3.389, 3.103, 2.857, 2.655, 2.493, 2.358, 2.238, 2.138, 2.049, 1.976, 1.921, 1.882, 1.859, 1.859, 1.868, 1.899, 1.949, 2.015, 2.102, 2.202, 2.319, 2.456, 2.605, 2.794, 3.026, 3.305, 3.629, 4.019, 4.275,
+ 4.671, 4.391, 3.966, 3.603, 3.297, 3.041, 2.821, 2.643, 2.493, 2.374, 2.277, 2.191, 2.122, 2.069, 2.031, 2.011, 2.011, 2.021, 2.049, 2.097, 2.163, 2.245, 2.343, 2.456, 2.601, 2.762, 2.972, 3.225, 3.514, 3.867, 4.275, 4.547,
+ 4.899, 4.671, 4.209, 3.824, 3.501, 3.229, 2.999, 2.805, 2.643, 2.493, 2.374, 2.277, 2.208, 2.172, 2.153, 2.148, 2.148, 2.148, 2.164, 2.192, 2.245, 2.343, 2.456, 2.592, 2.749, 2.935, 3.161, 3.423, 3.736, 4.121, 4.547, 4.751
+ ],
+ "sigma": 0.005,
+ "sigma_Cb": 0.005
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2300,
+ "ccm":
+ [
+ 1.77591, -0.16036, -0.61554,
+ -0.26235, 1.66133, -0.39898,
+ -0.22474, -1.94117, 3.16591
+ ]
+ },
+ {
+ "ct": 2700,
+ "ccm":
+ [
+ 1.54016, 0.02018, -0.56034,
+ -0.27333, 1.78261, -0.50928,
+ -0.13821, -1.22069, 2.35891
+ ]
+ },
+ {
+ "ct": 3000,
+ "ccm":
+ [
+ 1.73266, -0.19227, -0.54039,
+ -0.44685, 2.04704, -0.60018,
+ -0.13631, -0.94323, 2.07953
+ ]
+ },
+ {
+ "ct": 4000,
+ "ccm":
+ [
+ 1.70137, -0.23462, -0.46675,
+ -0.34126, 1.80328, -0.46202,
+ -0.14242, -0.75105, 1.89347
+ ]
+ },
+ {
+ "ct": 4150,
+ "ccm":
+ [
+ 2.09386, -0.69875, -0.39511,
+ -0.38239, 1.78872, -0.40633,
+ -0.11896, -0.74324, 1.86219
+ ]
+ },
+ {
+ "ct": 6500,
+ "ccm":
+ [
+ 1.69679, -0.27504, -0.42174,
+ -0.23619, 1.87692, -0.64073,
+ -0.07905, -0.61889, 1.69795
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.cac": { }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 0.25,
+ "limit": 1.0,
+ "strength": 1.0
+ }
+ },
+ {
+ "rpi.hdr":
+ {
+ "Off":
+ {
+ "cadence": [ 0 ]
+ },
+ "MultiExposureUnmerged":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ }
+ },
+ "SingleExposure":
+ {
+ "cadence": [ 1 ],
+ "channel_map":
+ {
+ "short": 1
+ },
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "MultiExposure":
+ {
+ "cadence": [ 1, 2 ],
+ "channel_map":
+ {
+ "short": 1,
+ "long": 2
+ },
+ "stitch_enable": 1,
+ "spatial_gain": 2.0,
+ "tonemap_enable": 1
+ },
+ "Night":
+ {
+ "cadence": [ 3 ],
+ "channel_map":
+ {
+ "night": 3
+ },
+ "tonemap_enable": 1,
+ "tonemap":
+ [
+ 0, 0,
+ 5000, 20000,
+ 10000, 30000,
+ 20000, 47000,
+ 30000, 55000,
+ 65535, 65535
+ ]
+ }
+ }
+ },
+ {
+ "rpi.af":
+ {
+ "ranges":
+ {
+ "normal":
+ {
+ "min": 0.0,
+ "max": 12.0,
+ "default": 1.0
+ },
+ "macro":
+ {
+ "min": 3.0,
+ "max": 15.0,
+ "default": 4.0
+ }
+ },
+ "speeds":
+ {
+ "normal":
+ {
+ "step_coarse": 1.0,
+ "step_fine": 0.25,
+ "contrast_ratio": 0.75,
+ "pdaf_gain": -0.02,
+ "pdaf_squelch": 0.125,
+ "max_slew": 2.0,
+ "pdaf_frames": 0,
+ "dropout_frames": 0,
+ "step_frames": 4
+ }
+ },
+ "conf_epsilon": 8,
+ "conf_thresh": 16,
+ "conf_clip": 512,
+ "skip_frames": 5,
+ "map": [ 0.0, 0, 15.0, 1023 ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/ov9281_mono.json b/src/ipa/rpi/pisp/data/ov9281_mono.json
new file mode 100644
index 00000000..54229b83
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/ov9281_mono.json
@@ -0,0 +1,215 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 2000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 800,
+ "reference_Y": 20000
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.5
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 3.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 30000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.4,
+ 1000, 0.4
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "n_iter": 0,
+ "luminance_strength": 1.0,
+ "corner_strength": 1.5
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 0,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/se327m12.json b/src/ipa/rpi/pisp/data/se327m12.json
new file mode 100644
index 00000000..46f2378c
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/se327m12.json
@@ -0,0 +1,639 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 6873,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 800,
+ "reference_Y": 12293
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 1.986
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 207,
+ "slope": 0.00539
+ }
+ },
+ {
+ "rpi.denoise":
+ {
+ "normal":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 0.8,
+ "threshold": 0.05
+ }
+ },
+ "hdr":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ },
+ "night":
+ {
+ "sdn":
+ {
+ "deviation": 1.6,
+ "strength": 0.5,
+ "deviation2": 3.2,
+ "deviation_no_tdn": 3.2,
+ "strength_no_tdn": 0.75
+ },
+ "cdn":
+ {
+ "deviation": 200,
+ "strength": 0.3
+ },
+ "tdn":
+ {
+ "deviation": 1.3,
+ "threshold": 0.1
+ }
+ }
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 8000
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8600
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2900.0, 0.9217, 0.3657,
+ 3600.0, 0.7876, 0.4651,
+ 4600.0, 0.6807, 0.5684,
+ 5800.0, 0.5937, 0.6724,
+ 8100.0, 0.5447, 0.7403
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.0162,
+ "transverse_neg": 0.0204
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.5,
+ "calibrations_Cr": [
+ {
+ "ct": 4000,
+ "table":
+ [
+ 1.481, 1.476, 1.471, 1.461, 1.45, 1.441, 1.431, 1.424, 1.418, 1.412, 1.406, 1.401, 1.396, 1.393, 1.39, 1.389, 1.389, 1.389, 1.389, 1.39, 1.391, 1.393, 1.395, 1.398, 1.401, 1.405, 1.411, 1.417, 1.423, 1.429, 1.433, 1.437,
+ 1.478, 1.472, 1.466, 1.456, 1.446, 1.436, 1.427, 1.42, 1.414, 1.408, 1.402, 1.398, 1.394, 1.391, 1.388, 1.387, 1.387, 1.387, 1.387, 1.387, 1.389, 1.391, 1.392, 1.395, 1.399, 1.403, 1.408, 1.414, 1.42, 1.427, 1.43, 1.434,
+ 1.475, 1.468, 1.461, 1.451, 1.441, 1.432, 1.423, 1.416, 1.41, 1.404, 1.399, 1.395, 1.392, 1.389, 1.387, 1.385, 1.384, 1.384, 1.384, 1.385, 1.387, 1.388, 1.39, 1.392, 1.396, 1.401, 1.405, 1.411, 1.418, 1.424, 1.428, 1.431,
+ 1.472, 1.464, 1.456, 1.446, 1.437, 1.428, 1.419, 1.412, 1.406, 1.401, 1.395, 1.392, 1.39, 1.387, 1.385, 1.383, 1.382, 1.382, 1.382, 1.382, 1.384, 1.386, 1.387, 1.389, 1.394, 1.398, 1.403, 1.407, 1.415, 1.422, 1.425, 1.429,
+ 1.469, 1.46, 1.451, 1.442, 1.433, 1.425, 1.417, 1.41, 1.403, 1.398, 1.393, 1.39, 1.388, 1.385, 1.382, 1.381, 1.38, 1.38, 1.38, 1.381, 1.382, 1.384, 1.385, 1.387, 1.391, 1.395, 1.399, 1.404, 1.411, 1.418, 1.422, 1.426,
+ 1.467, 1.457, 1.447, 1.438, 1.429, 1.422, 1.414, 1.407, 1.401, 1.396, 1.392, 1.388, 1.385, 1.383, 1.38, 1.378, 1.378, 1.378, 1.378, 1.379, 1.38, 1.381, 1.383, 1.386, 1.388, 1.391, 1.396, 1.401, 1.407, 1.414, 1.419, 1.424,
+ 1.465, 1.454, 1.443, 1.435, 1.427, 1.419, 1.412, 1.405, 1.399, 1.394, 1.39, 1.387, 1.384, 1.381, 1.378, 1.377, 1.377, 1.377, 1.377, 1.377, 1.378, 1.379, 1.382, 1.384, 1.386, 1.388, 1.393, 1.398, 1.405, 1.411, 1.416, 1.421,
+ 1.464, 1.453, 1.443, 1.434, 1.426, 1.418, 1.411, 1.405, 1.398, 1.393, 1.389, 1.385, 1.382, 1.38, 1.378, 1.376, 1.376, 1.376, 1.376, 1.376, 1.377, 1.378, 1.38, 1.382, 1.384, 1.387, 1.392, 1.397, 1.403, 1.409, 1.415, 1.42,
+ 1.462, 1.452, 1.442, 1.433, 1.425, 1.418, 1.411, 1.404, 1.397, 1.392, 1.387, 1.384, 1.381, 1.379, 1.377, 1.376, 1.375, 1.374, 1.374, 1.375, 1.375, 1.376, 1.378, 1.38, 1.383, 1.386, 1.39, 1.395, 1.402, 1.408, 1.413, 1.419,
+ 1.462, 1.452, 1.441, 1.432, 1.424, 1.417, 1.41, 1.403, 1.397, 1.391, 1.387, 1.383, 1.38, 1.378, 1.377, 1.375, 1.374, 1.374, 1.374, 1.374, 1.374, 1.375, 1.377, 1.379, 1.381, 1.384, 1.389, 1.394, 1.4, 1.407, 1.412, 1.417,
+ 1.461, 1.451, 1.441, 1.432, 1.423, 1.416, 1.409, 1.403, 1.396, 1.391, 1.387, 1.383, 1.381, 1.379, 1.377, 1.375, 1.374, 1.373, 1.373, 1.374, 1.374, 1.374, 1.376, 1.378, 1.38, 1.383, 1.388, 1.392, 1.399, 1.405, 1.411, 1.416,
+ 1.461, 1.45, 1.44, 1.431, 1.422, 1.415, 1.409, 1.402, 1.396, 1.391, 1.386, 1.384, 1.382, 1.379, 1.377, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.374, 1.375, 1.377, 1.379, 1.382, 1.386, 1.39, 1.397, 1.404, 1.41, 1.415,
+ 1.461, 1.45, 1.44, 1.431, 1.422, 1.415, 1.408, 1.401, 1.395, 1.39, 1.386, 1.383, 1.381, 1.379, 1.377, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.374, 1.375, 1.376, 1.379, 1.381, 1.385, 1.39, 1.396, 1.403, 1.409, 1.414,
+ 1.461, 1.45, 1.44, 1.43, 1.421, 1.414, 1.407, 1.4, 1.394, 1.39, 1.386, 1.383, 1.381, 1.379, 1.377, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.374, 1.375, 1.376, 1.378, 1.381, 1.385, 1.39, 1.396, 1.402, 1.408, 1.414,
+ 1.461, 1.45, 1.44, 1.43, 1.42, 1.413, 1.406, 1.399, 1.394, 1.389, 1.385, 1.382, 1.38, 1.378, 1.377, 1.375, 1.374, 1.373, 1.372, 1.372, 1.373, 1.374, 1.375, 1.376, 1.378, 1.38, 1.385, 1.39, 1.396, 1.401, 1.407, 1.413,
+ 1.461, 1.45, 1.439, 1.43, 1.42, 1.412, 1.405, 1.399, 1.393, 1.388, 1.385, 1.382, 1.379, 1.378, 1.376, 1.375, 1.374, 1.373, 1.372, 1.372, 1.373, 1.374, 1.374, 1.376, 1.378, 1.381, 1.385, 1.389, 1.395, 1.401, 1.407, 1.413,
+ 1.461, 1.45, 1.439, 1.43, 1.42, 1.412, 1.404, 1.398, 1.392, 1.388, 1.384, 1.381, 1.379, 1.377, 1.376, 1.375, 1.374, 1.373, 1.372, 1.372, 1.372, 1.373, 1.374, 1.376, 1.378, 1.381, 1.385, 1.389, 1.395, 1.401, 1.408, 1.414,
+ 1.461, 1.45, 1.439, 1.429, 1.42, 1.412, 1.404, 1.397, 1.391, 1.387, 1.384, 1.381, 1.378, 1.376, 1.375, 1.374, 1.374, 1.373, 1.372, 1.372, 1.372, 1.373, 1.374, 1.376, 1.379, 1.382, 1.385, 1.389, 1.395, 1.401, 1.408, 1.414,
+ 1.461, 1.45, 1.439, 1.429, 1.42, 1.412, 1.404, 1.398, 1.391, 1.387, 1.383, 1.381, 1.378, 1.376, 1.375, 1.374, 1.373, 1.373, 1.373, 1.372, 1.373, 1.373, 1.374, 1.376, 1.379, 1.382, 1.385, 1.389, 1.395, 1.401, 1.408, 1.414,
+ 1.462, 1.45, 1.439, 1.429, 1.42, 1.412, 1.404, 1.398, 1.392, 1.387, 1.383, 1.38, 1.378, 1.376, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.373, 1.374, 1.375, 1.376, 1.379, 1.382, 1.385, 1.39, 1.395, 1.401, 1.408, 1.414,
+ 1.462, 1.451, 1.439, 1.43, 1.421, 1.413, 1.405, 1.399, 1.393, 1.388, 1.383, 1.38, 1.378, 1.376, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.374, 1.374, 1.375, 1.377, 1.379, 1.382, 1.386, 1.39, 1.396, 1.402, 1.408, 1.414,
+ 1.462, 1.451, 1.44, 1.431, 1.422, 1.414, 1.406, 1.399, 1.393, 1.388, 1.383, 1.38, 1.378, 1.376, 1.375, 1.374, 1.373, 1.373, 1.373, 1.373, 1.373, 1.374, 1.375, 1.377, 1.379, 1.382, 1.386, 1.391, 1.396, 1.402, 1.408, 1.414,
+ 1.462, 1.452, 1.441, 1.432, 1.423, 1.415, 1.406, 1.4, 1.393, 1.389, 1.384, 1.381, 1.378, 1.376, 1.375, 1.374, 1.373, 1.373, 1.372, 1.372, 1.373, 1.374, 1.375, 1.377, 1.38, 1.383, 1.387, 1.391, 1.397, 1.402, 1.408, 1.414,
+ 1.462, 1.452, 1.442, 1.433, 1.424, 1.416, 1.407, 1.4, 1.394, 1.389, 1.384, 1.381, 1.378, 1.376, 1.375, 1.373, 1.373, 1.372, 1.372, 1.372, 1.372, 1.373, 1.375, 1.377, 1.38, 1.383, 1.387, 1.391, 1.397, 1.402, 1.408, 1.414,
+ 1.464, 1.453, 1.443, 1.434, 1.425, 1.416, 1.408, 1.401, 1.394, 1.389, 1.384, 1.381, 1.378, 1.376, 1.374, 1.373, 1.372, 1.371, 1.371, 1.371, 1.372, 1.373, 1.374, 1.376, 1.379, 1.382, 1.386, 1.391, 1.397, 1.402, 1.409, 1.416,
+ 1.465, 1.454, 1.444, 1.435, 1.425, 1.417, 1.408, 1.401, 1.395, 1.389, 1.384, 1.381, 1.379, 1.376, 1.374, 1.372, 1.37, 1.369, 1.369, 1.37, 1.371, 1.373, 1.374, 1.376, 1.379, 1.382, 1.386, 1.39, 1.396, 1.402, 1.41, 1.417,
+ 1.466, 1.456, 1.446, 1.436, 1.426, 1.418, 1.41, 1.403, 1.396, 1.39, 1.384, 1.381, 1.379, 1.377, 1.375, 1.372, 1.37, 1.369, 1.369, 1.37, 1.371, 1.373, 1.374, 1.376, 1.379, 1.383, 1.387, 1.391, 1.397, 1.404, 1.411, 1.418,
+ 1.467, 1.457, 1.448, 1.437, 1.427, 1.419, 1.412, 1.404, 1.397, 1.391, 1.385, 1.382, 1.38, 1.378, 1.375, 1.373, 1.371, 1.37, 1.37, 1.371, 1.372, 1.373, 1.375, 1.377, 1.381, 1.384, 1.388, 1.392, 1.399, 1.405, 1.413, 1.42,
+ 1.469, 1.459, 1.449, 1.439, 1.428, 1.421, 1.414, 1.406, 1.398, 1.392, 1.386, 1.383, 1.381, 1.379, 1.376, 1.374, 1.372, 1.371, 1.371, 1.371, 1.372, 1.374, 1.375, 1.378, 1.382, 1.386, 1.389, 1.394, 1.4, 1.407, 1.414, 1.422,
+ 1.47, 1.461, 1.452, 1.441, 1.431, 1.423, 1.416, 1.409, 1.401, 1.395, 1.388, 1.385, 1.382, 1.38, 1.377, 1.375, 1.374, 1.373, 1.373, 1.373, 1.374, 1.375, 1.377, 1.379, 1.383, 1.388, 1.392, 1.397, 1.405, 1.412, 1.417, 1.423,
+ 1.472, 1.463, 1.454, 1.444, 1.434, 1.426, 1.418, 1.412, 1.405, 1.398, 1.391, 1.387, 1.383, 1.381, 1.379, 1.377, 1.376, 1.375, 1.375, 1.375, 1.376, 1.377, 1.378, 1.381, 1.385, 1.39, 1.395, 1.401, 1.409, 1.417, 1.421, 1.425,
+ 1.474, 1.465, 1.457, 1.447, 1.437, 1.429, 1.421, 1.414, 1.409, 1.401, 1.394, 1.388, 1.385, 1.382, 1.38, 1.378, 1.378, 1.377, 1.377, 1.377, 1.378, 1.378, 1.38, 1.382, 1.387, 1.392, 1.399, 1.405, 1.414, 1.422, 1.424, 1.426
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.742, 1.732, 1.722, 1.707, 1.691, 1.677, 1.664, 1.652, 1.642, 1.633, 1.626, 1.62, 1.615, 1.612, 1.61, 1.608, 1.608, 1.607, 1.606, 1.607, 1.608, 1.61, 1.614, 1.618, 1.623, 1.627, 1.635, 1.643, 1.654, 1.666, 1.673, 1.681,
+ 1.737, 1.726, 1.715, 1.7, 1.685, 1.671, 1.658, 1.648, 1.639, 1.63, 1.622, 1.616, 1.611, 1.608, 1.606, 1.605, 1.604, 1.603, 1.603, 1.603, 1.605, 1.607, 1.611, 1.615, 1.62, 1.625, 1.631, 1.639, 1.65, 1.661, 1.669, 1.677,
+ 1.732, 1.721, 1.709, 1.694, 1.679, 1.665, 1.652, 1.643, 1.635, 1.627, 1.619, 1.613, 1.607, 1.604, 1.603, 1.601, 1.6, 1.599, 1.599, 1.6, 1.602, 1.604, 1.608, 1.612, 1.617, 1.622, 1.628, 1.635, 1.646, 1.657, 1.665, 1.674,
+ 1.727, 1.715, 1.703, 1.688, 1.673, 1.66, 1.647, 1.639, 1.632, 1.624, 1.616, 1.61, 1.604, 1.601, 1.599, 1.598, 1.596, 1.596, 1.596, 1.597, 1.599, 1.602, 1.605, 1.609, 1.614, 1.619, 1.625, 1.632, 1.642, 1.653, 1.661, 1.67,
+ 1.722, 1.71, 1.699, 1.684, 1.668, 1.656, 1.643, 1.635, 1.628, 1.62, 1.613, 1.607, 1.601, 1.598, 1.596, 1.595, 1.593, 1.593, 1.593, 1.594, 1.596, 1.598, 1.602, 1.606, 1.61, 1.615, 1.622, 1.629, 1.639, 1.649, 1.657, 1.666,
+ 1.716, 1.705, 1.694, 1.679, 1.663, 1.651, 1.64, 1.631, 1.623, 1.616, 1.61, 1.604, 1.599, 1.595, 1.594, 1.592, 1.591, 1.59, 1.59, 1.591, 1.592, 1.595, 1.599, 1.604, 1.607, 1.612, 1.619, 1.627, 1.636, 1.644, 1.653, 1.661,
+ 1.712, 1.701, 1.69, 1.675, 1.659, 1.647, 1.636, 1.628, 1.619, 1.613, 1.607, 1.602, 1.597, 1.593, 1.591, 1.589, 1.588, 1.587, 1.587, 1.588, 1.59, 1.592, 1.596, 1.601, 1.604, 1.609, 1.616, 1.624, 1.632, 1.641, 1.649, 1.658,
+ 1.71, 1.699, 1.687, 1.672, 1.657, 1.645, 1.633, 1.625, 1.618, 1.611, 1.605, 1.6, 1.595, 1.592, 1.589, 1.587, 1.586, 1.586, 1.586, 1.587, 1.588, 1.59, 1.594, 1.597, 1.601, 1.606, 1.613, 1.621, 1.629, 1.638, 1.647, 1.657,
+ 1.708, 1.696, 1.683, 1.669, 1.654, 1.642, 1.631, 1.623, 1.616, 1.609, 1.602, 1.597, 1.593, 1.59, 1.587, 1.585, 1.584, 1.584, 1.584, 1.585, 1.587, 1.588, 1.591, 1.594, 1.598, 1.604, 1.61, 1.618, 1.626, 1.635, 1.645, 1.655,
+ 1.705, 1.693, 1.68, 1.666, 1.652, 1.64, 1.628, 1.62, 1.614, 1.607, 1.6, 1.595, 1.592, 1.588, 1.586, 1.584, 1.583, 1.582, 1.583, 1.584, 1.585, 1.587, 1.589, 1.592, 1.596, 1.602, 1.608, 1.615, 1.624, 1.633, 1.644, 1.654,
+ 1.703, 1.69, 1.677, 1.663, 1.649, 1.638, 1.626, 1.618, 1.611, 1.604, 1.598, 1.593, 1.59, 1.587, 1.584, 1.582, 1.581, 1.581, 1.582, 1.583, 1.584, 1.585, 1.587, 1.59, 1.595, 1.6, 1.607, 1.614, 1.623, 1.633, 1.643, 1.653,
+ 1.7, 1.687, 1.674, 1.66, 1.646, 1.635, 1.625, 1.616, 1.609, 1.602, 1.596, 1.591, 1.588, 1.585, 1.583, 1.581, 1.58, 1.58, 1.581, 1.582, 1.583, 1.584, 1.586, 1.589, 1.594, 1.599, 1.606, 1.613, 1.622, 1.632, 1.642, 1.652,
+ 1.698, 1.685, 1.671, 1.658, 1.644, 1.633, 1.623, 1.615, 1.607, 1.6, 1.594, 1.59, 1.587, 1.584, 1.582, 1.58, 1.579, 1.579, 1.58, 1.581, 1.582, 1.583, 1.585, 1.588, 1.593, 1.598, 1.605, 1.611, 1.621, 1.631, 1.641, 1.652,
+ 1.698, 1.683, 1.669, 1.655, 1.642, 1.631, 1.621, 1.613, 1.605, 1.599, 1.593, 1.589, 1.586, 1.583, 1.581, 1.579, 1.578, 1.578, 1.579, 1.58, 1.581, 1.582, 1.584, 1.587, 1.593, 1.598, 1.604, 1.61, 1.62, 1.629, 1.641, 1.652,
+ 1.697, 1.682, 1.666, 1.653, 1.639, 1.629, 1.619, 1.611, 1.603, 1.597, 1.591, 1.587, 1.585, 1.583, 1.58, 1.579, 1.578, 1.577, 1.578, 1.579, 1.58, 1.582, 1.584, 1.587, 1.592, 1.598, 1.603, 1.608, 1.618, 1.628, 1.64, 1.652,
+ 1.697, 1.681, 1.665, 1.651, 1.638, 1.628, 1.618, 1.61, 1.602, 1.597, 1.591, 1.588, 1.585, 1.582, 1.58, 1.578, 1.577, 1.577, 1.577, 1.578, 1.579, 1.581, 1.584, 1.587, 1.592, 1.598, 1.603, 1.608, 1.618, 1.628, 1.64, 1.652,
+ 1.697, 1.681, 1.664, 1.65, 1.637, 1.626, 1.616, 1.609, 1.602, 1.596, 1.592, 1.588, 1.585, 1.582, 1.579, 1.578, 1.577, 1.576, 1.577, 1.577, 1.579, 1.581, 1.584, 1.587, 1.593, 1.598, 1.603, 1.608, 1.618, 1.628, 1.641, 1.653,
+ 1.697, 1.68, 1.663, 1.649, 1.636, 1.625, 1.615, 1.608, 1.601, 1.596, 1.592, 1.588, 1.585, 1.582, 1.579, 1.577, 1.577, 1.576, 1.576, 1.577, 1.578, 1.58, 1.584, 1.588, 1.593, 1.598, 1.603, 1.608, 1.619, 1.629, 1.641, 1.653,
+ 1.697, 1.68, 1.663, 1.649, 1.635, 1.625, 1.615, 1.607, 1.6, 1.596, 1.592, 1.588, 1.584, 1.581, 1.579, 1.577, 1.577, 1.576, 1.576, 1.577, 1.579, 1.581, 1.585, 1.588, 1.593, 1.598, 1.604, 1.61, 1.621, 1.631, 1.643, 1.654,
+ 1.697, 1.68, 1.663, 1.649, 1.635, 1.625, 1.615, 1.607, 1.6, 1.595, 1.591, 1.587, 1.584, 1.581, 1.579, 1.577, 1.577, 1.576, 1.577, 1.578, 1.58, 1.582, 1.586, 1.589, 1.594, 1.599, 1.605, 1.611, 1.623, 1.634, 1.644, 1.654,
+ 1.697, 1.68, 1.664, 1.649, 1.635, 1.625, 1.615, 1.608, 1.6, 1.595, 1.591, 1.587, 1.583, 1.581, 1.579, 1.578, 1.577, 1.576, 1.577, 1.578, 1.581, 1.583, 1.587, 1.59, 1.595, 1.6, 1.606, 1.613, 1.625, 1.636, 1.646, 1.655,
+ 1.699, 1.682, 1.665, 1.651, 1.636, 1.626, 1.616, 1.609, 1.602, 1.596, 1.591, 1.587, 1.584, 1.581, 1.579, 1.578, 1.577, 1.577, 1.578, 1.58, 1.581, 1.584, 1.587, 1.591, 1.596, 1.601, 1.608, 1.615, 1.626, 1.637, 1.647, 1.657,
+ 1.7, 1.683, 1.666, 1.652, 1.637, 1.627, 1.617, 1.61, 1.603, 1.597, 1.591, 1.587, 1.584, 1.581, 1.579, 1.578, 1.577, 1.578, 1.579, 1.581, 1.582, 1.584, 1.588, 1.592, 1.597, 1.602, 1.609, 1.617, 1.628, 1.639, 1.649, 1.658,
+ 1.702, 1.685, 1.668, 1.653, 1.639, 1.628, 1.618, 1.611, 1.604, 1.598, 1.591, 1.587, 1.584, 1.582, 1.58, 1.578, 1.578, 1.578, 1.58, 1.581, 1.583, 1.585, 1.589, 1.593, 1.598, 1.603, 1.611, 1.619, 1.63, 1.641, 1.65, 1.66,
+ 1.705, 1.687, 1.67, 1.655, 1.641, 1.63, 1.619, 1.611, 1.604, 1.598, 1.592, 1.588, 1.585, 1.582, 1.58, 1.579, 1.578, 1.578, 1.58, 1.582, 1.583, 1.585, 1.59, 1.594, 1.599, 1.604, 1.612, 1.621, 1.632, 1.643, 1.653, 1.663,
+ 1.707, 1.689, 1.672, 1.657, 1.642, 1.631, 1.62, 1.612, 1.605, 1.599, 1.593, 1.589, 1.585, 1.583, 1.581, 1.58, 1.579, 1.579, 1.58, 1.582, 1.584, 1.586, 1.59, 1.595, 1.6, 1.605, 1.614, 1.623, 1.634, 1.646, 1.655, 1.665,
+ 1.709, 1.692, 1.674, 1.659, 1.645, 1.633, 1.621, 1.613, 1.606, 1.6, 1.595, 1.59, 1.587, 1.584, 1.583, 1.581, 1.58, 1.58, 1.581, 1.582, 1.585, 1.587, 1.592, 1.597, 1.602, 1.608, 1.616, 1.625, 1.637, 1.648, 1.658, 1.668,
+ 1.711, 1.695, 1.678, 1.662, 1.647, 1.635, 1.623, 1.615, 1.608, 1.602, 1.597, 1.593, 1.59, 1.587, 1.584, 1.582, 1.581, 1.581, 1.582, 1.584, 1.586, 1.589, 1.594, 1.599, 1.605, 1.611, 1.619, 1.628, 1.639, 1.651, 1.66, 1.67,
+ 1.714, 1.698, 1.681, 1.666, 1.65, 1.637, 1.624, 1.616, 1.609, 1.604, 1.6, 1.596, 1.592, 1.589, 1.585, 1.584, 1.583, 1.583, 1.583, 1.585, 1.587, 1.59, 1.595, 1.601, 1.608, 1.615, 1.622, 1.63, 1.642, 1.653, 1.663, 1.673,
+ 1.715, 1.7, 1.685, 1.669, 1.653, 1.64, 1.627, 1.619, 1.613, 1.607, 1.603, 1.598, 1.594, 1.591, 1.587, 1.586, 1.586, 1.586, 1.586, 1.588, 1.59, 1.593, 1.598, 1.604, 1.611, 1.618, 1.626, 1.634, 1.646, 1.657, 1.666, 1.675,
+ 1.717, 1.703, 1.688, 1.673, 1.657, 1.644, 1.63, 1.623, 1.616, 1.611, 1.605, 1.601, 1.596, 1.593, 1.59, 1.588, 1.588, 1.589, 1.589, 1.591, 1.594, 1.597, 1.601, 1.607, 1.614, 1.622, 1.63, 1.639, 1.65, 1.661, 1.67, 1.678,
+ 1.719, 1.705, 1.692, 1.677, 1.661, 1.647, 1.634, 1.626, 1.62, 1.614, 1.608, 1.603, 1.598, 1.595, 1.592, 1.591, 1.591, 1.591, 1.592, 1.594, 1.597, 1.6, 1.605, 1.61, 1.617, 1.625, 1.634, 1.643, 1.655, 1.666, 1.673, 1.681
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 4000,
+ "table":
+ [
+ 2.253, 2.26, 2.267, 2.277, 2.288, 2.301, 2.314, 2.327, 2.339, 2.348, 2.356, 2.364, 2.37, 2.375, 2.379, 2.381, 2.381, 2.38, 2.379, 2.376, 2.371, 2.367, 2.363, 2.359, 2.351, 2.343, 2.34, 2.336, 2.324, 2.314, 2.307, 2.301,
+ 2.256, 2.264, 2.272, 2.284, 2.296, 2.309, 2.321, 2.332, 2.343, 2.352, 2.36, 2.368, 2.374, 2.379, 2.383, 2.385, 2.385, 2.385, 2.383, 2.381, 2.376, 2.371, 2.367, 2.362, 2.355, 2.349, 2.343, 2.337, 2.327, 2.316, 2.31, 2.303,
+ 2.259, 2.269, 2.278, 2.292, 2.305, 2.316, 2.328, 2.337, 2.347, 2.356, 2.365, 2.372, 2.378, 2.382, 2.386, 2.388, 2.389, 2.389, 2.388, 2.385, 2.38, 2.375, 2.37, 2.365, 2.36, 2.355, 2.347, 2.339, 2.329, 2.319, 2.313, 2.306,
+ 2.263, 2.274, 2.285, 2.298, 2.313, 2.323, 2.334, 2.342, 2.351, 2.359, 2.369, 2.375, 2.381, 2.386, 2.39, 2.392, 2.393, 2.393, 2.392, 2.39, 2.385, 2.38, 2.373, 2.368, 2.364, 2.36, 2.351, 2.341, 2.332, 2.322, 2.316, 2.309,
+ 2.268, 2.28, 2.291, 2.303, 2.315, 2.326, 2.337, 2.346, 2.355, 2.363, 2.372, 2.379, 2.384, 2.388, 2.391, 2.393, 2.394, 2.394, 2.394, 2.392, 2.389, 2.385, 2.378, 2.372, 2.367, 2.362, 2.354, 2.346, 2.336, 2.326, 2.32, 2.313,
+ 2.274, 2.286, 2.298, 2.308, 2.318, 2.33, 2.341, 2.35, 2.359, 2.367, 2.376, 2.382, 2.387, 2.391, 2.393, 2.395, 2.396, 2.396, 2.396, 2.395, 2.393, 2.39, 2.383, 2.376, 2.37, 2.364, 2.357, 2.35, 2.339, 2.329, 2.324, 2.318,
+ 2.277, 2.29, 2.302, 2.312, 2.321, 2.332, 2.344, 2.353, 2.362, 2.371, 2.379, 2.385, 2.389, 2.392, 2.394, 2.396, 2.396, 2.397, 2.397, 2.397, 2.396, 2.393, 2.387, 2.38, 2.374, 2.367, 2.36, 2.353, 2.343, 2.333, 2.327, 2.322,
+ 2.277, 2.29, 2.303, 2.313, 2.323, 2.334, 2.345, 2.355, 2.364, 2.373, 2.381, 2.387, 2.391, 2.393, 2.395, 2.396, 2.396, 2.397, 2.397, 2.397, 2.396, 2.394, 2.389, 2.384, 2.377, 2.37, 2.363, 2.355, 2.345, 2.335, 2.33, 2.324,
+ 2.277, 2.29, 2.303, 2.314, 2.325, 2.335, 2.346, 2.356, 2.366, 2.375, 2.384, 2.389, 2.392, 2.394, 2.395, 2.396, 2.396, 2.397, 2.397, 2.397, 2.396, 2.395, 2.392, 2.387, 2.38, 2.373, 2.365, 2.357, 2.347, 2.338, 2.332, 2.327,
+ 2.277, 2.291, 2.304, 2.315, 2.326, 2.337, 2.348, 2.358, 2.368, 2.377, 2.385, 2.39, 2.392, 2.394, 2.395, 2.396, 2.396, 2.397, 2.397, 2.398, 2.397, 2.395, 2.393, 2.39, 2.383, 2.375, 2.367, 2.358, 2.349, 2.34, 2.334, 2.329,
+ 2.278, 2.292, 2.307, 2.316, 2.326, 2.337, 2.349, 2.36, 2.371, 2.379, 2.386, 2.39, 2.392, 2.394, 2.396, 2.397, 2.397, 2.397, 2.398, 2.398, 2.396, 2.395, 2.393, 2.39, 2.384, 2.378, 2.369, 2.36, 2.351, 2.341, 2.336, 2.33,
+ 2.279, 2.294, 2.309, 2.318, 2.326, 2.338, 2.351, 2.362, 2.373, 2.381, 2.387, 2.39, 2.392, 2.394, 2.396, 2.397, 2.397, 2.397, 2.398, 2.397, 2.396, 2.395, 2.394, 2.391, 2.386, 2.38, 2.37, 2.361, 2.352, 2.343, 2.337, 2.332,
+ 2.28, 2.295, 2.31, 2.318, 2.326, 2.339, 2.351, 2.363, 2.374, 2.381, 2.386, 2.39, 2.393, 2.395, 2.396, 2.397, 2.397, 2.397, 2.397, 2.397, 2.396, 2.395, 2.394, 2.392, 2.387, 2.38, 2.372, 2.363, 2.353, 2.344, 2.338, 2.332,
+ 2.281, 2.295, 2.31, 2.319, 2.327, 2.339, 2.352, 2.363, 2.374, 2.381, 2.386, 2.39, 2.393, 2.395, 2.396, 2.396, 2.396, 2.396, 2.396, 2.397, 2.396, 2.396, 2.395, 2.392, 2.387, 2.381, 2.373, 2.364, 2.354, 2.345, 2.339, 2.333,
+ 2.282, 2.296, 2.31, 2.319, 2.328, 2.339, 2.352, 2.363, 2.374, 2.38, 2.385, 2.389, 2.394, 2.396, 2.396, 2.396, 2.395, 2.395, 2.396, 2.396, 2.397, 2.396, 2.395, 2.393, 2.387, 2.381, 2.374, 2.366, 2.355, 2.346, 2.339, 2.333,
+ 2.282, 2.297, 2.311, 2.32, 2.329, 2.34, 2.351, 2.362, 2.373, 2.38, 2.385, 2.39, 2.394, 2.395, 2.396, 2.396, 2.395, 2.395, 2.395, 2.396, 2.396, 2.396, 2.395, 2.393, 2.388, 2.382, 2.374, 2.366, 2.357, 2.348, 2.341, 2.334,
+ 2.283, 2.297, 2.312, 2.321, 2.331, 2.341, 2.351, 2.362, 2.373, 2.38, 2.386, 2.39, 2.393, 2.395, 2.395, 2.395, 2.395, 2.395, 2.395, 2.396, 2.396, 2.396, 2.395, 2.393, 2.389, 2.383, 2.375, 2.367, 2.359, 2.351, 2.343, 2.335,
+ 2.283, 2.298, 2.313, 2.322, 2.332, 2.341, 2.351, 2.361, 2.372, 2.38, 2.387, 2.391, 2.393, 2.394, 2.395, 2.395, 2.395, 2.395, 2.395, 2.395, 2.396, 2.396, 2.395, 2.393, 2.389, 2.384, 2.376, 2.367, 2.36, 2.353, 2.345, 2.336,
+ 2.285, 2.298, 2.311, 2.321, 2.331, 2.341, 2.351, 2.361, 2.371, 2.379, 2.386, 2.39, 2.393, 2.394, 2.395, 2.395, 2.395, 2.395, 2.395, 2.396, 2.396, 2.396, 2.395, 2.393, 2.389, 2.384, 2.376, 2.368, 2.361, 2.353, 2.345, 2.337,
+ 2.286, 2.298, 2.31, 2.32, 2.33, 2.34, 2.35, 2.36, 2.371, 2.378, 2.385, 2.389, 2.393, 2.394, 2.395, 2.395, 2.395, 2.395, 2.396, 2.396, 2.396, 2.396, 2.395, 2.393, 2.388, 2.383, 2.376, 2.369, 2.361, 2.353, 2.346, 2.338,
+ 2.287, 2.298, 2.308, 2.319, 2.329, 2.339, 2.349, 2.36, 2.37, 2.377, 2.384, 2.388, 2.392, 2.394, 2.395, 2.395, 2.395, 2.395, 2.396, 2.396, 2.396, 2.396, 2.395, 2.393, 2.388, 2.383, 2.376, 2.37, 2.361, 2.353, 2.346, 2.339,
+ 2.288, 2.298, 2.307, 2.317, 2.327, 2.338, 2.348, 2.358, 2.368, 2.376, 2.383, 2.388, 2.392, 2.394, 2.395, 2.396, 2.396, 2.396, 2.397, 2.397, 2.397, 2.396, 2.394, 2.392, 2.387, 2.382, 2.375, 2.368, 2.36, 2.353, 2.345, 2.338,
+ 2.289, 2.298, 2.307, 2.316, 2.326, 2.336, 2.346, 2.356, 2.367, 2.375, 2.383, 2.388, 2.391, 2.394, 2.396, 2.397, 2.397, 2.397, 2.398, 2.397, 2.397, 2.396, 2.394, 2.391, 2.387, 2.382, 2.374, 2.367, 2.359, 2.352, 2.345, 2.337,
+ 2.289, 2.297, 2.306, 2.315, 2.324, 2.334, 2.344, 2.355, 2.365, 2.374, 2.381, 2.386, 2.39, 2.393, 2.395, 2.397, 2.397, 2.398, 2.398, 2.398, 2.397, 2.396, 2.393, 2.39, 2.386, 2.381, 2.373, 2.366, 2.358, 2.351, 2.343, 2.336,
+ 2.287, 2.296, 2.304, 2.314, 2.323, 2.333, 2.342, 2.352, 2.362, 2.371, 2.379, 2.385, 2.389, 2.392, 2.394, 2.396, 2.397, 2.398, 2.398, 2.398, 2.397, 2.396, 2.393, 2.389, 2.385, 2.38, 2.373, 2.365, 2.357, 2.348, 2.341, 2.334,
+ 2.286, 2.295, 2.303, 2.312, 2.321, 2.331, 2.341, 2.35, 2.36, 2.368, 2.377, 2.383, 2.388, 2.391, 2.393, 2.395, 2.396, 2.397, 2.398, 2.398, 2.397, 2.395, 2.392, 2.388, 2.384, 2.38, 2.372, 2.365, 2.356, 2.346, 2.339, 2.333,
+ 2.286, 2.293, 2.3, 2.309, 2.318, 2.328, 2.337, 2.347, 2.356, 2.365, 2.374, 2.381, 2.385, 2.389, 2.392, 2.394, 2.395, 2.396, 2.397, 2.397, 2.395, 2.393, 2.39, 2.387, 2.383, 2.378, 2.371, 2.364, 2.354, 2.344, 2.337, 2.33,
+ 2.285, 2.29, 2.296, 2.305, 2.315, 2.324, 2.333, 2.342, 2.353, 2.362, 2.372, 2.378, 2.383, 2.386, 2.39, 2.392, 2.394, 2.395, 2.395, 2.395, 2.393, 2.391, 2.389, 2.385, 2.381, 2.376, 2.369, 2.362, 2.351, 2.341, 2.334, 2.328,
+ 2.284, 2.288, 2.292, 2.301, 2.311, 2.32, 2.328, 2.338, 2.349, 2.359, 2.369, 2.375, 2.38, 2.384, 2.388, 2.39, 2.392, 2.393, 2.394, 2.393, 2.391, 2.389, 2.387, 2.384, 2.379, 2.373, 2.367, 2.361, 2.349, 2.338, 2.332, 2.325,
+ 2.284, 2.287, 2.29, 2.299, 2.309, 2.317, 2.325, 2.334, 2.345, 2.355, 2.366, 2.373, 2.377, 2.381, 2.385, 2.388, 2.389, 2.391, 2.391, 2.391, 2.389, 2.387, 2.385, 2.382, 2.377, 2.371, 2.363, 2.355, 2.344, 2.334, 2.328, 2.323,
+ 2.283, 2.286, 2.289, 2.297, 2.306, 2.314, 2.321, 2.331, 2.341, 2.352, 2.364, 2.37, 2.375, 2.379, 2.382, 2.385, 2.386, 2.388, 2.388, 2.388, 2.387, 2.386, 2.383, 2.38, 2.374, 2.368, 2.358, 2.348, 2.338, 2.329, 2.325, 2.32,
+ 2.283, 2.285, 2.288, 2.296, 2.304, 2.311, 2.318, 2.327, 2.336, 2.348, 2.361, 2.368, 2.372, 2.376, 2.379, 2.382, 2.383, 2.384, 2.385, 2.386, 2.385, 2.384, 2.381, 2.378, 2.372, 2.365, 2.353, 2.341, 2.333, 2.325, 2.321, 2.318
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.897, 1.908, 1.918, 1.929, 1.94, 1.953, 1.966, 1.977, 1.986, 1.994, 2.001, 2.007, 2.012, 2.015, 2.018, 2.019, 2.019, 2.019, 2.018, 2.016, 2.015, 2.013, 2.01, 2.007, 2.002, 1.998, 1.993, 1.987, 1.977, 1.967, 1.956, 1.944,
+ 1.903, 1.913, 1.923, 1.934, 1.945, 1.958, 1.971, 1.981, 1.99, 1.997, 2.005, 2.01, 2.015, 2.019, 2.021, 2.023, 2.023, 2.023, 2.022, 2.02, 2.018, 2.016, 2.013, 2.009, 2.005, 2.0, 1.995, 1.989, 1.98, 1.97, 1.959, 1.948,
+ 1.909, 1.918, 1.928, 1.939, 1.951, 1.963, 1.976, 1.985, 1.993, 2.001, 2.008, 2.014, 2.019, 2.022, 2.025, 2.026, 2.027, 2.027, 2.026, 2.024, 2.022, 2.018, 2.015, 2.011, 2.007, 2.003, 1.998, 1.992, 1.982, 1.973, 1.962, 1.952,
+ 1.915, 1.924, 1.933, 1.944, 1.956, 1.968, 1.981, 1.989, 1.997, 2.005, 2.012, 2.018, 2.022, 2.025, 2.028, 2.03, 2.031, 2.031, 2.03, 2.028, 2.025, 2.022, 2.018, 2.014, 2.01, 2.006, 2.0, 1.994, 1.985, 1.976, 1.966, 1.956,
+ 1.919, 1.929, 1.939, 1.951, 1.963, 1.974, 1.986, 1.994, 2.002, 2.01, 2.017, 2.022, 2.026, 2.03, 2.032, 2.033, 2.034, 2.034, 2.033, 2.032, 2.029, 2.026, 2.022, 2.018, 2.013, 2.009, 2.003, 1.997, 1.988, 1.979, 1.969, 1.958,
+ 1.923, 1.934, 1.946, 1.957, 1.969, 1.98, 1.991, 1.999, 2.007, 2.015, 2.022, 2.027, 2.031, 2.034, 2.036, 2.037, 2.037, 2.037, 2.036, 2.035, 2.033, 2.031, 2.026, 2.022, 2.017, 2.012, 2.006, 1.999, 1.99, 1.982, 1.971, 1.961,
+ 1.926, 1.938, 1.951, 1.963, 1.974, 1.985, 1.995, 2.004, 2.012, 2.019, 2.026, 2.03, 2.034, 2.037, 2.038, 2.039, 2.04, 2.04, 2.039, 2.038, 2.037, 2.034, 2.03, 2.026, 2.02, 2.015, 2.008, 2.002, 1.993, 1.985, 1.974, 1.964,
+ 1.928, 1.941, 1.954, 1.966, 1.978, 1.989, 1.999, 2.008, 2.016, 2.023, 2.028, 2.033, 2.036, 2.039, 2.04, 2.04, 2.041, 2.042, 2.042, 2.041, 2.039, 2.037, 2.033, 2.028, 2.023, 2.018, 2.011, 2.004, 1.997, 1.989, 1.978, 1.967,
+ 1.931, 1.943, 1.956, 1.969, 1.982, 1.993, 2.003, 2.012, 2.02, 2.026, 2.031, 2.035, 2.039, 2.04, 2.041, 2.042, 2.043, 2.044, 2.044, 2.043, 2.042, 2.039, 2.035, 2.031, 2.026, 2.02, 2.014, 2.007, 2.0, 1.992, 1.981, 1.97,
+ 1.934, 1.946, 1.958, 1.972, 1.986, 1.996, 2.006, 2.015, 2.023, 2.028, 2.033, 2.037, 2.04, 2.042, 2.042, 2.043, 2.045, 2.045, 2.045, 2.045, 2.043, 2.041, 2.037, 2.033, 2.028, 2.023, 2.016, 2.009, 2.002, 1.995, 1.983, 1.972,
+ 1.937, 1.949, 1.961, 1.974, 1.989, 1.999, 2.008, 2.016, 2.025, 2.03, 2.035, 2.038, 2.041, 2.043, 2.043, 2.044, 2.045, 2.046, 2.046, 2.045, 2.044, 2.042, 2.039, 2.035, 2.03, 2.025, 2.018, 2.011, 2.003, 1.995, 1.985, 1.974,
+ 1.941, 1.952, 1.963, 1.977, 1.991, 2.001, 2.01, 2.018, 2.026, 2.032, 2.036, 2.039, 2.042, 2.044, 2.045, 2.046, 2.046, 2.047, 2.046, 2.046, 2.045, 2.044, 2.041, 2.037, 2.032, 2.027, 2.02, 2.012, 2.004, 1.996, 1.986, 1.976,
+ 1.943, 1.954, 1.966, 1.98, 1.993, 2.003, 2.011, 2.019, 2.027, 2.033, 2.037, 2.04, 2.043, 2.044, 2.046, 2.047, 2.047, 2.047, 2.047, 2.046, 2.045, 2.044, 2.041, 2.038, 2.033, 2.028, 2.021, 2.014, 2.006, 1.997, 1.987, 1.977,
+ 1.944, 1.957, 1.969, 1.982, 1.995, 2.004, 2.012, 2.02, 2.028, 2.034, 2.038, 2.041, 2.044, 2.045, 2.046, 2.047, 2.047, 2.047, 2.047, 2.046, 2.045, 2.044, 2.042, 2.039, 2.034, 2.029, 2.023, 2.016, 2.007, 1.998, 1.988, 1.978,
+ 1.946, 1.959, 1.973, 1.985, 1.997, 2.006, 2.013, 2.021, 2.029, 2.034, 2.039, 2.043, 2.045, 2.046, 2.047, 2.047, 2.048, 2.048, 2.047, 2.046, 2.045, 2.044, 2.042, 2.04, 2.035, 2.03, 2.024, 2.018, 2.008, 1.998, 1.988, 1.978,
+ 1.947, 1.96, 1.973, 1.986, 1.998, 2.007, 2.014, 2.022, 2.029, 2.035, 2.039, 2.043, 2.045, 2.046, 2.047, 2.047, 2.048, 2.048, 2.048, 2.047, 2.045, 2.044, 2.042, 2.04, 2.034, 2.029, 2.024, 2.018, 2.008, 1.998, 1.988, 1.978,
+ 1.947, 1.961, 1.974, 1.987, 1.999, 2.008, 2.015, 2.022, 2.029, 2.035, 2.039, 2.043, 2.045, 2.046, 2.047, 2.047, 2.048, 2.048, 2.048, 2.047, 2.046, 2.044, 2.042, 2.04, 2.034, 2.029, 2.023, 2.018, 2.008, 1.998, 1.988, 1.978,
+ 1.948, 1.961, 1.974, 1.987, 2.0, 2.009, 2.016, 2.023, 2.029, 2.035, 2.039, 2.043, 2.045, 2.046, 2.047, 2.047, 2.048, 2.048, 2.048, 2.047, 2.046, 2.044, 2.042, 2.039, 2.034, 2.028, 2.023, 2.017, 2.007, 1.997, 1.988, 1.978,
+ 1.948, 1.961, 1.973, 1.987, 2.0, 2.009, 2.016, 2.023, 2.029, 2.034, 2.04, 2.043, 2.045, 2.046, 2.047, 2.048, 2.048, 2.048, 2.048, 2.047, 2.046, 2.044, 2.041, 2.038, 2.033, 2.027, 2.022, 2.016, 2.006, 1.995, 1.987, 1.978,
+ 1.948, 1.96, 1.973, 1.986, 2.0, 2.009, 2.016, 2.022, 2.028, 2.034, 2.04, 2.043, 2.045, 2.046, 2.047, 2.048, 2.048, 2.048, 2.048, 2.047, 2.045, 2.043, 2.04, 2.037, 2.032, 2.026, 2.02, 2.014, 2.004, 1.994, 1.986, 1.978,
+ 1.948, 1.96, 1.972, 1.986, 2.0, 2.008, 2.016, 2.022, 2.027, 2.033, 2.039, 2.043, 2.044, 2.046, 2.047, 2.048, 2.048, 2.048, 2.048, 2.047, 2.045, 2.042, 2.039, 2.035, 2.03, 2.025, 2.019, 2.012, 2.002, 1.992, 1.985, 1.977,
+ 1.947, 1.959, 1.97, 1.984, 1.998, 2.007, 2.015, 2.021, 2.027, 2.033, 2.038, 2.041, 2.044, 2.046, 2.047, 2.047, 2.047, 2.047, 2.047, 2.045, 2.043, 2.041, 2.038, 2.034, 2.029, 2.023, 2.017, 2.01, 2.0, 1.991, 1.983, 1.975,
+ 1.946, 1.957, 1.969, 1.983, 1.997, 2.006, 2.014, 2.02, 2.027, 2.032, 2.036, 2.04, 2.044, 2.045, 2.046, 2.047, 2.047, 2.047, 2.045, 2.044, 2.042, 2.039, 2.036, 2.032, 2.027, 2.022, 2.015, 2.008, 1.999, 1.989, 1.981, 1.972,
+ 1.944, 1.956, 1.967, 1.981, 1.995, 2.004, 2.013, 2.019, 2.026, 2.03, 2.035, 2.039, 2.042, 2.044, 2.045, 2.046, 2.046, 2.046, 2.044, 2.042, 2.04, 2.037, 2.034, 2.03, 2.025, 2.019, 2.012, 2.005, 1.996, 1.987, 1.978, 1.97,
+ 1.942, 1.954, 1.966, 1.979, 1.993, 2.002, 2.011, 2.018, 2.024, 2.029, 2.033, 2.036, 2.039, 2.041, 2.043, 2.044, 2.044, 2.044, 2.042, 2.041, 2.038, 2.036, 2.031, 2.027, 2.021, 2.015, 2.009, 2.002, 1.992, 1.982, 1.975, 1.967,
+ 1.94, 1.952, 1.964, 1.977, 1.99, 2.0, 2.01, 2.017, 2.023, 2.027, 2.031, 2.034, 2.036, 2.039, 2.041, 2.043, 2.043, 2.042, 2.041, 2.039, 2.037, 2.034, 2.029, 2.024, 2.018, 2.012, 2.005, 1.998, 1.988, 1.978, 1.972, 1.965,
+ 1.937, 1.949, 1.961, 1.974, 1.987, 1.998, 2.008, 2.015, 2.021, 2.025, 2.029, 2.031, 2.033, 2.036, 2.038, 2.04, 2.04, 2.04, 2.038, 2.036, 2.034, 2.031, 2.026, 2.02, 2.015, 2.009, 2.002, 1.995, 1.984, 1.974, 1.968, 1.962,
+ 1.935, 1.946, 1.957, 1.97, 1.983, 1.995, 2.006, 2.012, 2.018, 2.022, 2.026, 2.029, 2.031, 2.033, 2.035, 2.036, 2.037, 2.037, 2.035, 2.033, 2.03, 2.027, 2.022, 2.017, 2.012, 2.006, 1.999, 1.991, 1.981, 1.97, 1.965, 1.959,
+ 1.932, 1.943, 1.953, 1.966, 1.98, 1.992, 2.004, 2.01, 2.015, 2.019, 2.023, 2.026, 2.028, 2.029, 2.031, 2.032, 2.034, 2.034, 2.032, 2.03, 2.027, 2.023, 2.019, 2.014, 2.009, 2.004, 1.996, 1.988, 1.977, 1.966, 1.961, 1.956,
+ 1.931, 1.94, 1.95, 1.963, 1.977, 1.989, 2.002, 2.008, 2.012, 2.016, 2.02, 2.023, 2.025, 2.027, 2.028, 2.03, 2.031, 2.031, 2.03, 2.028, 2.024, 2.021, 2.016, 2.012, 2.007, 2.001, 1.992, 1.984, 1.973, 1.963, 1.958, 1.953,
+ 1.929, 1.938, 1.947, 1.96, 1.974, 1.987, 1.999, 2.005, 2.009, 2.013, 2.017, 2.02, 2.022, 2.024, 2.026, 2.028, 2.028, 2.028, 2.028, 2.026, 2.022, 2.018, 2.014, 2.009, 2.004, 1.998, 1.988, 1.979, 1.969, 1.96, 1.955, 1.95,
+ 1.928, 1.936, 1.943, 1.957, 1.971, 1.984, 1.996, 2.002, 2.006, 2.01, 2.015, 2.017, 2.018, 2.021, 2.024, 2.025, 2.026, 2.026, 2.025, 2.023, 2.02, 2.016, 2.011, 2.007, 2.001, 1.995, 1.984, 1.974, 1.966, 1.958, 1.952, 1.947
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 1.877, 1.742, 1.606, 1.507, 1.41, 1.343, 1.281, 1.239, 1.201, 1.17, 1.141, 1.119, 1.1, 1.089, 1.081, 1.076, 1.073, 1.071, 1.07, 1.072, 1.081, 1.094, 1.118, 1.146, 1.188, 1.232, 1.285, 1.34, 1.409, 1.481, 1.593, 1.704,
+ 1.832, 1.702, 1.573, 1.479, 1.387, 1.324, 1.266, 1.224, 1.186, 1.155, 1.125, 1.104, 1.087, 1.077, 1.072, 1.068, 1.065, 1.063, 1.062, 1.063, 1.07, 1.082, 1.103, 1.13, 1.169, 1.211, 1.261, 1.314, 1.381, 1.45, 1.556, 1.662,
+ 1.786, 1.663, 1.541, 1.451, 1.364, 1.305, 1.251, 1.21, 1.171, 1.14, 1.11, 1.09, 1.074, 1.066, 1.062, 1.059, 1.058, 1.056, 1.054, 1.055, 1.059, 1.069, 1.089, 1.114, 1.15, 1.19, 1.238, 1.288, 1.352, 1.419, 1.52, 1.621,
+ 1.743, 1.627, 1.51, 1.425, 1.343, 1.288, 1.237, 1.196, 1.157, 1.125, 1.096, 1.077, 1.063, 1.056, 1.054, 1.052, 1.051, 1.05, 1.048, 1.047, 1.051, 1.059, 1.076, 1.099, 1.133, 1.17, 1.216, 1.264, 1.326, 1.39, 1.486, 1.582,
+ 1.712, 1.601, 1.49, 1.408, 1.328, 1.274, 1.225, 1.183, 1.144, 1.114, 1.086, 1.069, 1.059, 1.053, 1.052, 1.05, 1.05, 1.049, 1.048, 1.048, 1.05, 1.056, 1.07, 1.089, 1.121, 1.156, 1.2, 1.247, 1.308, 1.371, 1.463, 1.555,
+ 1.681, 1.576, 1.47, 1.391, 1.314, 1.261, 1.212, 1.171, 1.132, 1.102, 1.076, 1.062, 1.054, 1.05, 1.05, 1.049, 1.048, 1.048, 1.048, 1.049, 1.049, 1.053, 1.064, 1.08, 1.109, 1.141, 1.185, 1.23, 1.289, 1.351, 1.44, 1.528,
+ 1.655, 1.554, 1.453, 1.376, 1.301, 1.249, 1.201, 1.16, 1.12, 1.092, 1.068, 1.056, 1.051, 1.048, 1.048, 1.048, 1.047, 1.047, 1.048, 1.049, 1.049, 1.052, 1.059, 1.072, 1.099, 1.129, 1.171, 1.215, 1.274, 1.335, 1.42, 1.506,
+ 1.639, 1.539, 1.438, 1.364, 1.291, 1.239, 1.19, 1.149, 1.11, 1.085, 1.064, 1.054, 1.05, 1.048, 1.048, 1.047, 1.047, 1.047, 1.048, 1.049, 1.05, 1.052, 1.057, 1.068, 1.092, 1.12, 1.161, 1.204, 1.263, 1.324, 1.408, 1.492,
+ 1.622, 1.523, 1.424, 1.352, 1.281, 1.229, 1.18, 1.139, 1.101, 1.077, 1.059, 1.051, 1.049, 1.047, 1.047, 1.047, 1.047, 1.047, 1.048, 1.049, 1.051, 1.052, 1.055, 1.063, 1.085, 1.111, 1.151, 1.194, 1.253, 1.313, 1.395, 1.477,
+ 1.607, 1.51, 1.412, 1.342, 1.273, 1.221, 1.171, 1.131, 1.093, 1.071, 1.056, 1.05, 1.047, 1.046, 1.046, 1.046, 1.047, 1.047, 1.048, 1.05, 1.051, 1.053, 1.054, 1.061, 1.08, 1.104, 1.143, 1.185, 1.244, 1.305, 1.385, 1.466,
+ 1.594, 1.498, 1.403, 1.334, 1.268, 1.215, 1.164, 1.124, 1.086, 1.067, 1.055, 1.049, 1.046, 1.045, 1.045, 1.045, 1.046, 1.047, 1.048, 1.05, 1.051, 1.053, 1.054, 1.059, 1.077, 1.098, 1.137, 1.179, 1.237, 1.297, 1.378, 1.458,
+ 1.58, 1.487, 1.394, 1.327, 1.262, 1.208, 1.156, 1.117, 1.08, 1.062, 1.053, 1.048, 1.045, 1.044, 1.044, 1.045, 1.045, 1.046, 1.048, 1.05, 1.052, 1.053, 1.054, 1.058, 1.073, 1.092, 1.131, 1.172, 1.231, 1.29, 1.37, 1.449,
+ 1.572, 1.48, 1.388, 1.322, 1.259, 1.205, 1.152, 1.113, 1.077, 1.061, 1.052, 1.047, 1.045, 1.044, 1.044, 1.044, 1.045, 1.046, 1.047, 1.049, 1.051, 1.052, 1.053, 1.057, 1.07, 1.088, 1.127, 1.168, 1.226, 1.285, 1.364, 1.443,
+ 1.567, 1.475, 1.384, 1.319, 1.256, 1.202, 1.149, 1.11, 1.075, 1.06, 1.052, 1.047, 1.045, 1.044, 1.044, 1.044, 1.044, 1.045, 1.046, 1.048, 1.049, 1.051, 1.053, 1.057, 1.068, 1.085, 1.123, 1.165, 1.222, 1.281, 1.359, 1.438,
+ 1.561, 1.47, 1.379, 1.316, 1.253, 1.199, 1.146, 1.108, 1.073, 1.059, 1.051, 1.047, 1.045, 1.044, 1.044, 1.044, 1.044, 1.044, 1.045, 1.046, 1.047, 1.049, 1.052, 1.056, 1.066, 1.081, 1.12, 1.161, 1.218, 1.277, 1.355, 1.432,
+ 1.564, 1.472, 1.38, 1.315, 1.252, 1.199, 1.146, 1.108, 1.074, 1.06, 1.053, 1.05, 1.047, 1.046, 1.046, 1.046, 1.046, 1.046, 1.047, 1.047, 1.047, 1.048, 1.051, 1.055, 1.064, 1.079, 1.118, 1.159, 1.217, 1.276, 1.353, 1.43,
+ 1.568, 1.475, 1.382, 1.316, 1.252, 1.198, 1.147, 1.109, 1.075, 1.061, 1.055, 1.052, 1.05, 1.049, 1.049, 1.049, 1.049, 1.049, 1.048, 1.048, 1.048, 1.048, 1.049, 1.052, 1.062, 1.077, 1.116, 1.157, 1.216, 1.276, 1.352, 1.429,
+ 1.571, 1.478, 1.384, 1.317, 1.251, 1.199, 1.148, 1.11, 1.076, 1.063, 1.057, 1.054, 1.053, 1.052, 1.051, 1.051, 1.051, 1.05, 1.049, 1.048, 1.047, 1.047, 1.047, 1.05, 1.06, 1.076, 1.115, 1.156, 1.216, 1.276, 1.352, 1.428,
+ 1.575, 1.483, 1.391, 1.323, 1.257, 1.205, 1.154, 1.117, 1.083, 1.069, 1.062, 1.058, 1.056, 1.054, 1.053, 1.052, 1.051, 1.05, 1.048, 1.047, 1.046, 1.045, 1.046, 1.049, 1.061, 1.078, 1.117, 1.16, 1.22, 1.281, 1.357, 1.434,
+ 1.579, 1.488, 1.397, 1.329, 1.263, 1.211, 1.161, 1.124, 1.089, 1.075, 1.067, 1.062, 1.059, 1.056, 1.054, 1.052, 1.05, 1.049, 1.047, 1.045, 1.044, 1.043, 1.044, 1.048, 1.062, 1.08, 1.12, 1.163, 1.224, 1.286, 1.363, 1.44,
+ 1.586, 1.496, 1.405, 1.337, 1.27, 1.218, 1.168, 1.131, 1.096, 1.08, 1.072, 1.066, 1.062, 1.058, 1.056, 1.054, 1.051, 1.049, 1.047, 1.045, 1.043, 1.042, 1.043, 1.048, 1.063, 1.084, 1.124, 1.168, 1.229, 1.292, 1.369, 1.447,
+ 1.601, 1.509, 1.417, 1.347, 1.279, 1.226, 1.176, 1.138, 1.103, 1.086, 1.074, 1.068, 1.065, 1.062, 1.059, 1.057, 1.054, 1.051, 1.048, 1.046, 1.044, 1.044, 1.045, 1.051, 1.069, 1.091, 1.133, 1.177, 1.238, 1.301, 1.379, 1.457,
+ 1.615, 1.522, 1.428, 1.357, 1.288, 1.234, 1.184, 1.146, 1.11, 1.091, 1.077, 1.071, 1.068, 1.065, 1.063, 1.06, 1.056, 1.053, 1.05, 1.047, 1.046, 1.046, 1.048, 1.055, 1.074, 1.099, 1.141, 1.185, 1.248, 1.311, 1.389, 1.467,
+ 1.634, 1.538, 1.441, 1.369, 1.299, 1.245, 1.194, 1.155, 1.119, 1.098, 1.082, 1.074, 1.071, 1.068, 1.065, 1.062, 1.059, 1.055, 1.052, 1.049, 1.048, 1.048, 1.052, 1.06, 1.082, 1.108, 1.151, 1.197, 1.259, 1.323, 1.402, 1.481,
+ 1.658, 1.557, 1.457, 1.384, 1.312, 1.258, 1.206, 1.167, 1.13, 1.107, 1.088, 1.078, 1.073, 1.07, 1.067, 1.064, 1.061, 1.058, 1.055, 1.053, 1.051, 1.052, 1.057, 1.068, 1.092, 1.121, 1.165, 1.211, 1.273, 1.337, 1.417, 1.498,
+ 1.682, 1.577, 1.472, 1.398, 1.326, 1.271, 1.219, 1.179, 1.141, 1.115, 1.093, 1.082, 1.075, 1.071, 1.069, 1.067, 1.064, 1.061, 1.059, 1.057, 1.054, 1.055, 1.063, 1.076, 1.103, 1.133, 1.178, 1.225, 1.288, 1.351, 1.433, 1.515,
+ 1.717, 1.606, 1.495, 1.417, 1.342, 1.286, 1.233, 1.192, 1.154, 1.126, 1.103, 1.089, 1.079, 1.074, 1.071, 1.068, 1.065, 1.063, 1.061, 1.06, 1.058, 1.061, 1.071, 1.087, 1.116, 1.149, 1.194, 1.242, 1.304, 1.367, 1.451, 1.535,
+ 1.759, 1.64, 1.521, 1.439, 1.361, 1.302, 1.247, 1.206, 1.168, 1.139, 1.114, 1.097, 1.085, 1.077, 1.073, 1.069, 1.067, 1.065, 1.063, 1.062, 1.063, 1.068, 1.081, 1.1, 1.131, 1.166, 1.212, 1.26, 1.321, 1.384, 1.47, 1.556,
+ 1.8, 1.674, 1.547, 1.461, 1.379, 1.319, 1.262, 1.22, 1.182, 1.152, 1.125, 1.106, 1.09, 1.081, 1.075, 1.07, 1.068, 1.066, 1.065, 1.065, 1.068, 1.075, 1.092, 1.113, 1.146, 1.182, 1.23, 1.279, 1.339, 1.401, 1.489, 1.578,
+ 1.855, 1.721, 1.588, 1.495, 1.405, 1.342, 1.283, 1.239, 1.199, 1.168, 1.141, 1.12, 1.103, 1.091, 1.082, 1.077, 1.075, 1.073, 1.074, 1.076, 1.081, 1.091, 1.109, 1.132, 1.167, 1.204, 1.251, 1.3, 1.362, 1.425, 1.518, 1.611,
+ 1.912, 1.772, 1.632, 1.531, 1.433, 1.367, 1.306, 1.26, 1.217, 1.186, 1.158, 1.136, 1.117, 1.103, 1.091, 1.085, 1.082, 1.082, 1.084, 1.088, 1.096, 1.108, 1.128, 1.152, 1.188, 1.226, 1.273, 1.322, 1.386, 1.452, 1.549, 1.646,
+ 1.969, 1.822, 1.676, 1.567, 1.461, 1.392, 1.329, 1.28, 1.235, 1.203, 1.175, 1.152, 1.131, 1.115, 1.101, 1.093, 1.09, 1.091, 1.095, 1.101, 1.111, 1.125, 1.147, 1.173, 1.21, 1.248, 1.295, 1.345, 1.41, 1.478, 1.579, 1.681
+ ],
+ "sigma": 0.00218,
+ "sigma_Cb": 0.00194
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2900,
+ "ccm":
+ [
+ 1.44924, -0.12935, -0.31989,
+ -0.65839, 1.95441, -0.29602,
+ 0.18344, -1.22282, 2.03938
+ ]
+ },
+ {
+ "ct": 3000,
+ "ccm":
+ [
+ 1.38736, 0.07714, -0.46451,
+ -0.59691, 1.84335, -0.24644,
+ 0.10092, -1.30441, 2.20349
+ ]
+ },
+ {
+ "ct": 3600,
+ "ccm":
+ [
+ 1.51261, -0.27921, -0.23339,
+ -0.55129, 1.83241, -0.28111,
+ 0.11649, -0.93195, 1.81546
+ ]
+ },
+ {
+ "ct": 4600,
+ "ccm":
+ [
+ 1.47082, -0.18523, -0.28559,
+ -0.48923, 1.95126, -0.46203,
+ 0.07951, -0.83987, 1.76036
+ ]
+ },
+ {
+ "ct": 5800,
+ "ccm":
+ [
+ 1.57294, -0.36229, -0.21065,
+ -0.42272, 1.80305, -0.38032,
+ 0.03671, -0.66862, 1.63191
+ ]
+ },
+ {
+ "ct": 8100,
+ "ccm":
+ [
+ 1.58803, -0.09912, -0.48891,
+ -0.42594, 2.22303, -0.79709,
+ -0.00621, -0.90516, 1.91137
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen":
+ {
+ "threshold": 2.0,
+ "strength": 0.5,
+ "limit": 0.5
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/data/uncalibrated.json b/src/ipa/rpi/pisp/data/uncalibrated.json
new file mode 100644
index 00000000..ff1e316e
--- /dev/null
+++ b/src/ipa/rpi/pisp/data/uncalibrated.json
@@ -0,0 +1,135 @@
+{
+ "version": 2.0,
+ "target": "pisp",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.awb":
+ {
+ "use_derivatives": 0,
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 3.0, 4.0, 6.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.4,
+ 1000, 0.4
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 4000,
+ "ccm":
+ [
+ 2.0, -1.0, 0.0,
+ -0.5, 2.0, -0.5,
+ 0, -1.0, 2.0
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 0,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/pisp/meson.build b/src/ipa/rpi/pisp/meson.build
new file mode 100644
index 00000000..878e3492
--- /dev/null
+++ b/src/ipa/rpi/pisp/meson.build
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: CC0-1.0
+
+ipa_name = 'ipa_rpi_pisp'
+
+pisp_ipa_deps = [
+ libcamera_private,
+ libatomic,
+ libpisp_dep,
+]
+
+pisp_ipa_libs = [
+ rpi_ipa_cam_helper_lib,
+ rpi_ipa_common_lib,
+ rpi_ipa_controller_lib
+]
+
+pisp_ipa_includes = [
+ ipa_includes,
+ libipa_includes,
+]
+
+pisp_ipa_sources = files([
+ 'pisp.cpp',
+])
+
+pisp_ipa_includes += include_directories('..')
+
+mod = shared_module(ipa_name, pisp_ipa_sources,
+ name_prefix : '',
+ include_directories : pisp_ipa_includes,
+ dependencies : pisp_ipa_deps,
+ link_with : libipa,
+ link_whole : pisp_ipa_libs,
+ install : true,
+ cpp_args : '-Wno-address-of-packed-member',
+ install_dir : ipa_install_dir)
+
+if ipa_sign_module
+ custom_target(ipa_name + '.so.sign',
+ input : mod,
+ output : ipa_name + '.so.sign',
+ command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
+ install : false,
+ build_by_default : true)
+endif
+
+subdir('data')
+
+ipa_names += ipa_name
diff --git a/src/ipa/rpi/pisp/pisp.cpp b/src/ipa/rpi/pisp/pisp.cpp
new file mode 100644
index 00000000..bb50a9e0
--- /dev/null
+++ b/src/ipa/rpi/pisp/pisp.cpp
@@ -0,0 +1,1068 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2023, Raspberry Pi Ltd
+ *
+ * pisp.cpp - Raspberry Pi PiSP IPA
+ */
+#include <algorithm>
+#include <cmath>
+#include <mutex>
+#include <string>
+#include <sys/mman.h>
+#include <utility>
+#include <vector>
+
+#include <libcamera/base/log.h>
+#include <libcamera/control_ids.h>
+#include <libcamera/ipa/ipa_module_info.h>
+#include <libipa/pwl.h>
+
+#include "libpisp/backend/backend.hpp"
+#include "libpisp/frontend/frontend.hpp"
+
+#include "common/ipa_base.h"
+#include "controller/af_status.h"
+#include "controller/agc_algorithm.h"
+#include "controller/alsc_status.h"
+#include "controller/awb_algorithm.h"
+#include "controller/awb_status.h"
+#include "controller/black_level_algorithm.h"
+#include "controller/black_level_status.h"
+#include "controller/cac_status.h"
+#include "controller/ccm_status.h"
+#include "controller/contrast_status.h"
+#include "controller/denoise_algorithm.h"
+#include "controller/denoise_status.h"
+#include "controller/dpc_status.h"
+#include "controller/geq_status.h"
+#include "controller/hdr_status.h"
+#include "controller/lux_status.h"
+#include "controller/noise_status.h"
+#include "controller/saturation_status.h"
+#include "controller/sharpen_status.h"
+#include "controller/stitch_status.h"
+#include "controller/tonemap_status.h"
+
+using namespace std::literals::chrono_literals;
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(IPARPI)
+
+namespace {
+
+constexpr unsigned int NumLscCells = PISP_BE_LSC_GRID_SIZE;
+constexpr unsigned int NumLscVertexes = NumLscCells + 1;
+
+inline int32_t clampField(double value, std::size_t fieldBits, std::size_t fracBits = 0,
+ bool isSigned = false, const char *desc = nullptr)
+{
+ ASSERT(fracBits <= fieldBits && fieldBits <= 32);
+
+ int min = -(isSigned << (fieldBits - 1));
+ int max = (1 << (fieldBits - isSigned)) - 1;
+ int32_t val =
+ std::clamp<int32_t>(std::round(value * (1 << fracBits)), min, max);
+
+ if (desc && val / (1 << fracBits) != value)
+ LOG(IPARPI, Warning)
+ << desc << " rounded/clamped to " << val / (1 << fracBits);
+
+ return val;
+}
+
+int generateLut(const ipa::Pwl &pwl, uint32_t *lut, std::size_t lutSize,
+ unsigned int SlopeBits = 14, unsigned int PosBits = 16)
+{
+ if (pwl.empty())
+ return -EINVAL;
+
+ int lastY = 0;
+ for (unsigned int i = 0; i < lutSize; i++) {
+ int x, y;
+ if (i < 32)
+ x = i * 512;
+ else if (i < 48)
+ x = (i - 32) * 1024 + 16384;
+ else
+ x = std::min(65535u, (i - 48) * 2048 + 32768);
+
+ y = pwl.eval(x);
+ if (y < 0 || (i && y < lastY)) {
+ LOG(IPARPI, Error)
+ << "Malformed PWL for Gamma, disabling!";
+ return -1;
+ }
+
+ if (i) {
+ unsigned int slope = y - lastY;
+ if (slope >= (1u << SlopeBits)) {
+ slope = (1u << SlopeBits) - 1;
+ LOG(IPARPI, Info)
+ << ("Maximum Gamma slope exceeded, adjusting!");
+ y = lastY + slope;
+ }
+ lut[i - 1] |= slope << PosBits;
+ }
+
+ lut[i] = y;
+ lastY = y;
+ }
+
+ return 0;
+}
+
+void packLscLut(uint32_t packed[NumLscVertexes][NumLscVertexes],
+ double const rgb[3][NumLscVertexes][NumLscVertexes])
+{
+ for (unsigned int y = 0; y < NumLscVertexes; ++y) {
+ for (unsigned int x = 0; x < NumLscVertexes; ++x) {
+ /* Jointly encode RGB gains in one of 4 ranges: [0.5:1.5), [0:2), [0:4), [0:8) */
+ double lo = std::min({ rgb[0][y][x], rgb[1][y][x], rgb[2][y][x] });
+ double hi = std::max({ rgb[0][y][x], rgb[1][y][x], rgb[2][y][x] });
+ uint32_t range;
+ double scale, offset;
+ if (lo >= 0.5 && hi < 1.5) {
+ range = 0;
+ scale = 1024.0;
+ offset = -511.5;
+ } else if (hi < 2.0) {
+ range = 1;
+ scale = 512.0;
+ offset = 0.5;
+ } else if (hi < 4.0) {
+ range = 2;
+ scale = 256.0;
+ offset = 0.5;
+ } else {
+ range = 3;
+ scale = 128.0;
+ offset = 0.5;
+ }
+ int r = clampField(offset + scale * rgb[0][y][x], 10);
+ int g = clampField(offset + scale * rgb[1][y][x], 10);
+ int b = clampField(offset + scale * rgb[2][y][x], 10);
+ packed[y][x] = (range << 30) | (b << 20) | (g << 10) | r;
+ }
+ }
+}
+
+/*
+ * Resamples a srcW x srcH table with central sampling to destW x destH with
+ * corner sampling.
+ */
+void resampleTable(double *dest, int destW, int destH, double const *src,
+ int srcW, int srcH)
+{
+ /*
+ * Precalculate and cache the x sampling locations and phases to
+ * save recomputing them on every row.
+ */
+ ASSERT(destW > 1 && destH > 1 && destW <= 64);
+ int xLo[64], xHi[64];
+ double xf[64];
+ double x = -0.5, xInc = srcW / (destW - 1);
+ for (int i = 0; i < destW; i++, x += xInc) {
+ xLo[i] = floor(x);
+ xf[i] = x - xLo[i];
+ xHi[i] = xLo[i] < (srcW - 1) ? (xLo[i] + 1) : (srcW - 1);
+ xLo[i] = xLo[i] > 0 ? xLo[i] : 0;
+ }
+
+ /* Now march over the output table generating the new values. */
+ double y = -0.5, yInc = srcH / (destH - 1);
+ for (int j = 0; j < destH; j++, y += yInc) {
+ int yLo = floor(y);
+ double yf = y - yLo;
+ int yHi = yLo < (srcH - 1) ? (yLo + 1) : (srcH - 1);
+ yLo = yLo > 0 ? yLo : 0;
+ double const *rowAbove = src + yLo * srcW;
+ double const *rowBelow = src + yHi * srcW;
+ for (int i = 0; i < destW; i++) {
+ double above = rowAbove[xLo[i]] * (1 - xf[i]) +
+ rowAbove[xHi[i]] * xf[i];
+ double below = rowBelow[xLo[i]] * (1 - xf[i]) +
+ rowBelow[xHi[i]] * xf[i];
+ *(dest++) = above * (1 - yf) + below * yf;
+ }
+ }
+}
+
+} /* namespace */
+
+using ::libpisp::BackEnd;
+using ::libpisp::FrontEnd;
+
+namespace ipa::RPi {
+
+class IpaPiSP final : public IpaBase
+{
+public:
+ IpaPiSP()
+ : IpaBase(), fe_(nullptr), be_(nullptr)
+ {
+ }
+
+ ~IpaPiSP()
+ {
+ if (fe_)
+ munmap(fe_, sizeof(FrontEnd));
+ if (be_)
+ munmap(be_, sizeof(BackEnd));
+ }
+
+private:
+ int32_t platformInit(const InitParams &params, InitResult *result) override;
+ int32_t platformStart(const ControlList &controls, StartResult *result) override;
+ int32_t platformConfigure(const ConfigParams &params, ConfigResult *result) override;
+
+ void platformPrepareIsp(const PrepareParams &params,
+ RPiController::Metadata &rpiMetadata) override;
+ RPiController::StatisticsPtr platformProcessStats(Span<uint8_t> mem) override;
+
+ void handleControls(const ControlList &controls) override;
+
+ void applyWBG(const AwbStatus *awbStatus, const AgcPrepareStatus *agcStatus,
+ pisp_be_global_config &global);
+ void applyDgOnly(const AgcPrepareStatus *agcPrepareStatus, pisp_be_global_config &global);
+ void applyCAC(const CacStatus *cacStatus, pisp_be_global_config &global);
+ void applyContrast(const ContrastStatus *contrastStatus,
+ pisp_be_global_config &global);
+ void applyCCM(const CcmStatus *ccmStatus, pisp_be_global_config &global);
+ void applyBlackLevel(const BlackLevelStatus *blackLevelStatus,
+ pisp_be_global_config &global);
+ void applyLensShading(const AlscStatus *alscStatus,
+ pisp_be_global_config &global);
+ void applyDPC(const DpcStatus *dpcStatus, pisp_be_global_config &global);
+ void applySdn(const SdnStatus *sdnStatus, pisp_be_global_config &global);
+ void applyTdn(const TdnStatus *tdnStatus, const DeviceStatus *deviceStatus,
+ pisp_be_global_config &global);
+ void applyCdn(const CdnStatus *cdnStatus, pisp_be_global_config &global);
+ void applyGeq(const GeqStatus *geqStatus, pisp_be_global_config &global);
+ void applySaturation(const SaturationStatus *geqStatus,
+ pisp_be_global_config &global);
+ void applySharpen(const SharpenStatus *sharpenStatus,
+ pisp_be_global_config &global);
+ bool applyStitch(const StitchStatus *stitchStatus, const DeviceStatus *deviceStatus,
+ const AgcStatus *agcStatus, pisp_be_global_config &global);
+ void applyTonemap(const TonemapStatus *tonemapStatus,
+ pisp_be_global_config &global);
+ void applyFocusStats(const NoiseStatus *noiseStatus);
+ void applyAF(const struct AfStatus *afStatus, ControlList &lensCtrls);
+
+ void setDefaultConfig();
+ void setStatsAndDebin();
+ void setHistogramWeights();
+
+ /* Frontend/Backend objects passed in from the pipeline handler. */
+ SharedFD feFD_;
+ SharedFD beFD_;
+ FrontEnd *fe_;
+ BackEnd *be_;
+
+ /* TDN/HDR runtime need the following state. */
+ bool tdnReset_;
+ utils::Duration lastExposure_;
+ std::map<std::string, utils::Duration> lastStitchExposures_;
+ HdrStatus lastStitchHdrStatus_;
+};
+
+int32_t IpaPiSP::platformInit(const InitParams &params,
+ [[maybe_unused]] InitResult *result)
+{
+ const std::string &target = controller_.getTarget();
+ if (target != "pisp") {
+ LOG(IPARPI, Error)
+ << "Tuning data file target returned \"" << target << "\""
+ << ", expected \"pisp\"";
+ return -EINVAL;
+ }
+
+ /* Acquire the Frontend and Backend objects. */
+ feFD_ = std::move(params.fe);
+ beFD_ = std::move(params.be);
+
+ if (!feFD_.isValid() || !beFD_.isValid()) {
+ LOG(IPARPI, Error) << "Invalid FE/BE handles!";
+ return -ENODEV;
+ }
+
+ fe_ = static_cast<FrontEnd *>(mmap(nullptr, sizeof(FrontEnd),
+ PROT_READ | PROT_WRITE, MAP_SHARED,
+ feFD_.get(), 0));
+ be_ = static_cast<BackEnd *>(mmap(nullptr, sizeof(BackEnd),
+ PROT_READ | PROT_WRITE, MAP_SHARED,
+ beFD_.get(), 0));
+
+ if (!fe_ || !be_) {
+ LOG(IPARPI, Error) << "Unable to map FE/BE handles!";
+ return -ENODEV;
+ }
+
+ setDefaultConfig();
+
+ return 0;
+}
+
+int32_t IpaPiSP::platformStart([[maybe_unused]] const ControlList &controls,
+ [[maybe_unused]] StartResult *result)
+{
+ tdnReset_ = true;
+
+ /* Cause the stitch block to be reset correctly. */
+ lastStitchHdrStatus_ = HdrStatus();
+
+ return 0;
+}
+
+int32_t IpaPiSP::platformConfigure([[maybe_unused]] const ConfigParams &params,
+ [[maybe_unused]] ConfigResult *result)
+{
+ setStatsAndDebin();
+ return 0;
+}
+
+void IpaPiSP::platformPrepareIsp([[maybe_unused]] const PrepareParams &params,
+ RPiController::Metadata &rpiMetadata)
+{
+ std::scoped_lock<RPiController::Metadata> l(rpiMetadata);
+
+ pisp_be_global_config global;
+ be_->GetGlobal(global);
+
+ global.bayer_enables &= ~(PISP_BE_BAYER_ENABLE_BLC + PISP_BE_BAYER_ENABLE_WBG +
+ PISP_BE_BAYER_ENABLE_GEQ + PISP_BE_BAYER_ENABLE_LSC +
+ PISP_BE_BAYER_ENABLE_SDN + PISP_BE_BAYER_ENABLE_CDN +
+ PISP_BE_BAYER_ENABLE_TDN_OUTPUT + PISP_BE_BAYER_ENABLE_TDN_INPUT +
+ PISP_BE_BAYER_ENABLE_STITCH_INPUT + PISP_BE_BAYER_ENABLE_STITCH_OUTPUT +
+ PISP_BE_BAYER_ENABLE_STITCH + PISP_BE_BAYER_ENABLE_TONEMAP);
+ /* We leave the YCbCr and inverse conversion enabled in case of false colour or sharpening. */
+ global.rgb_enables &= ~(PISP_BE_RGB_ENABLE_GAMMA + PISP_BE_RGB_ENABLE_CCM +
+ PISP_BE_RGB_ENABLE_SHARPEN + PISP_BE_RGB_ENABLE_SAT_CONTROL);
+
+ NoiseStatus *noiseStatus = rpiMetadata.getLocked<NoiseStatus>("noise.status");
+ AgcPrepareStatus *agcPrepareStatus = rpiMetadata.getLocked<AgcPrepareStatus>("agc.prepare_status");
+
+ {
+ /* All Frontend config goes first, we do not want to hold the FE lock for long! */
+ std::scoped_lock<FrontEnd> lf(*fe_);
+
+ if (noiseStatus)
+ applyFocusStats(noiseStatus);
+
+ BlackLevelStatus *blackLevelStatus =
+ rpiMetadata.getLocked<BlackLevelStatus>("black_level.status");
+ if (blackLevelStatus)
+ applyBlackLevel(blackLevelStatus, global);
+
+ AwbStatus *awbStatus = rpiMetadata.getLocked<AwbStatus>("awb.status");
+ if (awbStatus && agcPrepareStatus) {
+ /* Applies digital gain as well. */
+ applyWBG(awbStatus, agcPrepareStatus, global);
+ } else if (agcPrepareStatus) {
+ /* Mono sensor fallback for digital gain. */
+ applyDgOnly(agcPrepareStatus, global);
+ }
+ }
+
+ CacStatus *cacStatus = rpiMetadata.getLocked<CacStatus>("cac.status");
+ if (cacStatus)
+ applyCAC(cacStatus, global);
+
+ ContrastStatus *contrastStatus =
+ rpiMetadata.getLocked<ContrastStatus>("contrast.status");
+ if (contrastStatus)
+ applyContrast(contrastStatus, global);
+
+ CcmStatus *ccmStatus = rpiMetadata.getLocked<CcmStatus>("ccm.status");
+ if (ccmStatus)
+ applyCCM(ccmStatus, global);
+
+ AlscStatus *alscStatus = rpiMetadata.getLocked<AlscStatus>("alsc.status");
+ if (alscStatus)
+ applyLensShading(alscStatus, global);
+
+ DpcStatus *dpcStatus = rpiMetadata.getLocked<DpcStatus>("dpc.status");
+ if (dpcStatus)
+ applyDPC(dpcStatus, global);
+
+ SdnStatus *sdnStatus = rpiMetadata.getLocked<SdnStatus>("sdn.status");
+ if (sdnStatus)
+ applySdn(sdnStatus, global);
+
+ DeviceStatus *deviceStatus = rpiMetadata.getLocked<DeviceStatus>("device.status");
+ TdnStatus *tdnStatus = rpiMetadata.getLocked<TdnStatus>("tdn.status");
+ if (tdnStatus && deviceStatus)
+ applyTdn(tdnStatus, deviceStatus, global);
+
+ CdnStatus *cdnStatus = rpiMetadata.getLocked<CdnStatus>("cdn.status");
+ if (cdnStatus)
+ applyCdn(cdnStatus, global);
+
+ GeqStatus *geqStatus = rpiMetadata.getLocked<GeqStatus>("geq.status");
+ if (geqStatus)
+ applyGeq(geqStatus, global);
+
+ SaturationStatus *saturationStatus =
+ rpiMetadata.getLocked<SaturationStatus>("saturation.status");
+ if (saturationStatus)
+ applySaturation(saturationStatus, global);
+
+ SharpenStatus *sharpenStatus = rpiMetadata.getLocked<SharpenStatus>("sharpen.status");
+ if (sharpenStatus)
+ applySharpen(sharpenStatus, global);
+
+ StitchStatus *stitchStatus = rpiMetadata.getLocked<StitchStatus>("stitch.status");
+ if (stitchStatus) {
+ /*
+ * Note that it's the *delayed* AGC status that contains the HDR mode/channel
+ * info that pertains to this frame!
+ */
+ AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.delayed_status");
+ /* prepareIsp() will fetch this value. Maybe pass it back differently? */
+ stitchSwapBuffers_ = applyStitch(stitchStatus, deviceStatus, agcStatus, global);
+ } else
+ lastStitchHdrStatus_ = HdrStatus();
+
+ TonemapStatus *tonemapStatus = rpiMetadata.getLocked<TonemapStatus>("tonemap.status");
+ if (tonemapStatus)
+ applyTonemap(tonemapStatus, global);
+
+ be_->SetGlobal(global);
+
+ /* Save this for TDN and HDR on the next frame. */
+ lastExposure_ = deviceStatus->exposureTime * deviceStatus->analogueGain;
+
+ /* Lens control */
+ const AfStatus *afStatus = rpiMetadata.getLocked<AfStatus>("af.status");
+ if (afStatus) {
+ ControlList lensctrls(lensCtrls_);
+ applyAF(afStatus, lensctrls);
+ if (!lensctrls.empty())
+ setLensControls.emit(lensctrls);
+ }
+}
+
+RPiController::StatisticsPtr IpaPiSP::platformProcessStats(Span<uint8_t> mem)
+{
+ using namespace RPiController;
+
+ const pisp_statistics *stats = reinterpret_cast<pisp_statistics *>(mem.data());
+
+ unsigned int i;
+ StatisticsPtr statistics =
+ std::make_unique<Statistics>(Statistics::AgcStatsPos::PostWb,
+ Statistics::ColourStatsPos::PreLsc);
+
+ /* RGB histograms are not used, so do not populate them. */
+ statistics->yHist = RPiController::Histogram(stats->agc.histogram,
+ PISP_AGC_STATS_NUM_BINS);
+
+ statistics->awbRegions.init({ PISP_AWB_STATS_SIZE, PISP_AWB_STATS_SIZE });
+ for (i = 0; i < statistics->awbRegions.numRegions(); i++)
+ statistics->awbRegions.set(i, { { stats->awb.zones[i].R_sum,
+ stats->awb.zones[i].G_sum,
+ stats->awb.zones[i].B_sum },
+ stats->awb.zones[i].counted, 0 });
+
+ /* AGC region sums only get collected on floating zones. */
+ statistics->agcRegions.init({ 0, 0 }, PISP_FLOATING_STATS_NUM_ZONES);
+ for (i = 0; i < statistics->agcRegions.numRegions(); i++)
+ statistics->agcRegions.setFloating(i,
+ { { 0, 0, 0, stats->agc.floating[i].Y_sum },
+ stats->agc.floating[i].counted, 0 });
+
+ statistics->focusRegions.init({ PISP_CDAF_STATS_SIZE, PISP_CDAF_STATS_SIZE });
+ for (i = 0; i < statistics->focusRegions.numRegions(); i++)
+ statistics->focusRegions.set(i, { stats->cdaf.foms[i] >> 20, 0, 0 });
+
+ if (statsMetadataOutput_) {
+ Span<const uint8_t> statsSpan(reinterpret_cast<const uint8_t *>(stats),
+ sizeof(pisp_statistics));
+ libcameraMetadata_.set(controls::rpi::PispStatsOutput, statsSpan);
+ }
+
+ return statistics;
+}
+
+void IpaPiSP::handleControls(const ControlList &controls)
+{
+ for (auto const &ctrl : controls) {
+ switch (ctrl.first) {
+ case controls::HDR_MODE:
+ case controls::AE_METERING_MODE:
+ setHistogramWeights();
+ break;
+
+ case controls::draft::NOISE_REDUCTION_MODE: {
+ RPiController::DenoiseAlgorithm *denoise = dynamic_cast<RPiController::DenoiseAlgorithm *>(
+ controller_.getAlgorithm("denoise"));
+
+ if (!denoise) {
+ LOG(IPARPI, Warning)
+ << "Could not set NOISE_REDUCTION_MODE - no Denoise algorithm";
+ return;
+ }
+
+ if (ctrl.second.get<int32_t>() == controls::draft::NoiseReductionModeOff)
+ denoise->setMode(RPiController::DenoiseMode::Off);
+ else
+ denoise->setMode(RPiController::DenoiseMode::ColourHighQuality);
+
+ break;
+ }
+ }
+ }
+}
+
+void IpaPiSP::applyWBG(const AwbStatus *awbStatus, const AgcPrepareStatus *agcPrepareStatus,
+ pisp_be_global_config &global)
+{
+ pisp_wbg_config wbg;
+ pisp_fe_rgby_config rgby = {};
+ double dg = agcPrepareStatus ? agcPrepareStatus->digitalGain : 1.0;
+
+ wbg.gain_r = clampField(dg * awbStatus->gainR, 14, 10);
+ wbg.gain_g = clampField(dg * awbStatus->gainG, 14, 10);
+ wbg.gain_b = clampField(dg * awbStatus->gainB, 14, 10);
+
+ /*
+ * The YCbCr conversion block should contain the appropriate YCbCr
+ * matrix. We should not rely on the CSC0 block as that might be
+ * programmed for RGB outputs.
+ */
+ pisp_be_ccm_config csc;
+ be_->GetYcbcr(csc);
+
+ /* The CSC coefficients already have the << 10 scaling applied. */
+ rgby.gain_r = clampField(csc.coeffs[0] * awbStatus->gainR, 14);
+ rgby.gain_g = clampField(csc.coeffs[1] * awbStatus->gainG, 14);
+ rgby.gain_b = clampField(csc.coeffs[2] * awbStatus->gainB, 14);
+
+ LOG(IPARPI, Debug) << "Applying WB R: " << awbStatus->gainR << " B: "
+ << awbStatus->gainB;
+
+ be_->SetWbg(wbg);
+ fe_->SetRGBY(rgby);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_WBG;
+}
+
+void IpaPiSP::applyDgOnly(const AgcPrepareStatus *agcPrepareStatus, pisp_be_global_config &global)
+{
+ pisp_wbg_config wbg;
+
+ wbg.gain_r = clampField(agcPrepareStatus->digitalGain, 14, 10);
+ wbg.gain_g = clampField(agcPrepareStatus->digitalGain, 14, 10);
+ wbg.gain_b = clampField(agcPrepareStatus->digitalGain, 14, 10);
+
+ LOG(IPARPI, Debug) << "Applying DG (only) : " << agcPrepareStatus->digitalGain;
+
+ be_->SetWbg(wbg);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_WBG;
+}
+
+void IpaPiSP::applyContrast(const ContrastStatus *contrastStatus,
+ pisp_be_global_config &global)
+{
+ pisp_be_gamma_config gamma;
+
+ if (!generateLut(contrastStatus->gammaCurve, gamma.lut, PISP_BE_GAMMA_LUT_SIZE)) {
+ be_->SetGamma(gamma);
+ global.rgb_enables |= PISP_BE_RGB_ENABLE_GAMMA;
+ }
+}
+
+void IpaPiSP::applyCCM(const CcmStatus *ccmStatus, pisp_be_global_config &global)
+{
+ pisp_be_ccm_config ccm = {};
+
+ for (unsigned int i = 0; i < 9; i++)
+ ccm.coeffs[i] = clampField(ccmStatus->matrix[i], 14, 10, true);
+
+ be_->SetCcm(ccm);
+ global.rgb_enables |= PISP_BE_RGB_ENABLE_CCM;
+}
+
+void IpaPiSP::applyCAC(const CacStatus *cacStatus, pisp_be_global_config &global)
+{
+ pisp_be_cac_config cac = {};
+
+ for (int x = 0; x < PISP_BE_CAC_GRID_SIZE + 1; x++) {
+ for (int y = 0; y < PISP_BE_CAC_GRID_SIZE + 1; y++) {
+ cac.lut[y][x][0][0] = clampField(cacStatus->lutRx[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
+ cac.lut[y][x][0][1] = clampField(cacStatus->lutRy[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
+ cac.lut[y][x][1][0] = clampField(cacStatus->lutBx[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
+ cac.lut[y][x][1][1] = clampField(cacStatus->lutBy[y * (PISP_BE_CAC_GRID_SIZE + 1) + x], 7, 5, true);
+ }
+ }
+
+ be_->SetCac(cac);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_CAC;
+}
+
+void IpaPiSP::applyBlackLevel(const BlackLevelStatus *blackLevelStatus, pisp_be_global_config &global)
+{
+ uint16_t minBlackLevel = std::min({ blackLevelStatus->blackLevelR, blackLevelStatus->blackLevelG,
+ blackLevelStatus->blackLevelB });
+ pisp_bla_config bla;
+
+ /*
+ * Set the Frontend to adjust the black level to the smallest black level
+ * of all channels (in 16-bits).
+ */
+ bla.black_level_r = blackLevelStatus->blackLevelR;
+ bla.black_level_gr = blackLevelStatus->blackLevelG;
+ bla.black_level_gb = blackLevelStatus->blackLevelG;
+ bla.black_level_b = blackLevelStatus->blackLevelB;
+ bla.output_black_level = minBlackLevel;
+ fe_->SetBla(bla);
+
+ /* Frontend Stats and Backend black level correction. */
+ bla.black_level_r = bla.black_level_gr =
+ bla.black_level_gb = bla.black_level_b = minBlackLevel;
+ bla.output_black_level = 0;
+ fe_->SetBlc(bla);
+ be_->SetBlc(bla);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_BLC;
+}
+
+void IpaPiSP::applyLensShading(const AlscStatus *alscStatus,
+ pisp_be_global_config &global)
+{
+ pisp_be_lsc_extra lscExtra = {};
+ pisp_be_lsc_config lsc = {};
+ double rgb[3][NumLscVertexes][NumLscVertexes] = {};
+
+ resampleTable(&rgb[0][0][0], NumLscVertexes, NumLscVertexes,
+ alscStatus->r.data(), NumLscCells, NumLscCells);
+ resampleTable(&rgb[1][0][0], NumLscVertexes, NumLscVertexes,
+ alscStatus->g.data(), NumLscCells, NumLscCells);
+ resampleTable(&rgb[2][0][0], NumLscVertexes, NumLscVertexes,
+ alscStatus->b.data(), NumLscCells, NumLscCells);
+ packLscLut(lsc.lut_packed, rgb);
+ be_->SetLsc(lsc, lscExtra);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_LSC;
+}
+
+void IpaPiSP::applyDPC(const DpcStatus *dpcStatus, pisp_be_global_config &global)
+{
+ pisp_be_dpc_config dpc = {};
+
+ switch (dpcStatus->strength) {
+ case 0: /* "off" */
+ break;
+ case 1: /* "normal" */
+ dpc.coeff_level = 1;
+ dpc.coeff_range = 8;
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_DPC;
+ break;
+ case 2: /* "strong" */
+ dpc.coeff_level = 0;
+ dpc.coeff_range = 0;
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_DPC;
+ break;
+ default:
+ ASSERT(0);
+ }
+
+ be_->SetDpc(dpc);
+}
+
+void IpaPiSP::applySdn(const SdnStatus *sdnStatus, pisp_be_global_config &global)
+{
+ pisp_be_sdn_config sdn = {};
+ pisp_bla_config blc;
+
+ be_->GetBlc(blc);
+ /* All R/G/B black levels are the same value in the BE after FE alignment */
+ sdn.black_level = blc.black_level_r;
+ /* leakage is "amount of the original pixel we let through", thus 1 - strength */
+ sdn.leakage = clampField(1.0 - sdnStatus->strength, 8, 8);
+ sdn.noise_constant = clampField(sdnStatus->noiseConstant, 16);
+ sdn.noise_slope = clampField(sdnStatus->noiseSlope, 16, 8);
+ sdn.noise_constant2 = clampField(sdnStatus->noiseConstant2, 16);
+ sdn.noise_slope2 = clampField(sdnStatus->noiseSlope2, 16, 8);
+ be_->SetSdn(sdn);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_SDN;
+}
+
+void IpaPiSP::applyTdn(const TdnStatus *tdnStatus, const DeviceStatus *deviceStatus,
+ pisp_be_global_config &global)
+{
+ utils::Duration exposure = deviceStatus->exposureTime * deviceStatus->analogueGain;
+ pisp_be_tdn_config tdn = {};
+
+ double ratio = tdnReset_ ? 1.0 : exposure / lastExposure_;
+ if (ratio >= 4.0) {
+ /* If the exposure ratio goes above 4x, we need to reset TDN. */
+ ratio = 1;
+ tdnReset_ = true;
+ }
+
+ LOG(IPARPI, Debug) << "TDN: exposure: " << exposure
+ << " last: " << lastExposure_
+ << " ratio: " << ratio;
+
+ pisp_bla_config blc;
+ be_->GetBlc(blc);
+ /* All R/G/B black levels are the same value in the BE after FE alignment */
+ tdn.black_level = blc.black_level_r;
+ tdn.ratio = clampField(ratio, 16, 14);
+ tdn.noise_constant = clampField(tdnStatus->noiseConstant, 16);
+ tdn.noise_slope = clampField(tdnStatus->noiseSlope, 16, 8);
+ tdn.threshold = clampField(tdnStatus->threshold, 16, 16);
+
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_TDN + PISP_BE_BAYER_ENABLE_TDN_OUTPUT;
+
+ /* Only enable the TDN Input after a state reset. */
+ if (!tdnReset_) {
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_TDN_INPUT;
+ tdn.reset = 0;
+ } else
+ tdn.reset = 1;
+
+ be_->SetTdn(tdn);
+ tdnReset_ = false;
+}
+
+void IpaPiSP::applyCdn(const CdnStatus *cdnStatus, pisp_be_global_config &global)
+{
+ pisp_be_cdn_config cdn = {};
+
+ cdn.thresh = clampField(cdnStatus->threshold, 16);
+ cdn.iir_strength = clampField(cdnStatus->strength, 8, 8);
+ cdn.g_adjust = clampField(0, 8, 8);
+ be_->SetCdn(cdn);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_CDN;
+}
+
+void IpaPiSP::applyGeq(const GeqStatus *geqStatus, pisp_be_global_config &global)
+{
+ pisp_be_geq_config geq = {};
+
+ geq.min = 0;
+ geq.max = 0xffff;
+ geq.offset = clampField(geqStatus->offset, 16);
+ geq.slope_sharper = clampField(geqStatus->slope, 10, 10);
+ be_->SetGeq(geq);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_GEQ;
+}
+
+void IpaPiSP::applySaturation(const SaturationStatus *saturationStatus,
+ pisp_be_global_config &global)
+{
+ pisp_be_sat_control_config saturation;
+ pisp_wbg_config wbg;
+
+ saturation.shift_r = std::min<uint8_t>(2, saturationStatus->shiftR);
+ saturation.shift_g = std::min<uint8_t>(2, saturationStatus->shiftG);
+ saturation.shift_b = std::min<uint8_t>(2, saturationStatus->shiftB);
+ be_->SetSatControl(saturation);
+
+ be_->GetWbg(wbg);
+ wbg.gain_r >>= saturationStatus->shiftR;
+ wbg.gain_g >>= saturationStatus->shiftG;
+ wbg.gain_b >>= saturationStatus->shiftB;
+ be_->SetWbg(wbg);
+
+ global.rgb_enables |= PISP_BE_RGB_ENABLE_SAT_CONTROL;
+}
+
+void IpaPiSP::applySharpen(const SharpenStatus *sharpenStatus,
+ pisp_be_global_config &global)
+{
+ /*
+ * This threshold scaling is to normalise the VC4 and PiSP parameter
+ * scales in the tuning config.
+ */
+ static constexpr double ThresholdScaling = 0.25;
+ const double scaling = sharpenStatus->threshold * ThresholdScaling;
+
+ pisp_be_sh_fc_combine_config shfc;
+ pisp_be_sharpen_config sharpen;
+
+ be_->InitialiseSharpen(sharpen, shfc);
+ sharpen.threshold_offset0 = clampField(sharpen.threshold_offset0 * scaling, 16);
+ sharpen.threshold_offset1 = clampField(sharpen.threshold_offset1 * scaling, 16);
+ sharpen.threshold_offset2 = clampField(sharpen.threshold_offset2 * scaling, 16);
+ sharpen.threshold_offset3 = clampField(sharpen.threshold_offset3 * scaling, 16);
+ sharpen.threshold_offset4 = clampField(sharpen.threshold_offset4 * scaling, 16);
+ sharpen.threshold_slope0 = clampField(sharpen.threshold_slope0 * scaling, 12);
+ sharpen.threshold_slope1 = clampField(sharpen.threshold_slope1 * scaling, 12);
+ sharpen.threshold_slope2 = clampField(sharpen.threshold_slope2 * scaling, 12);
+ sharpen.threshold_slope3 = clampField(sharpen.threshold_slope3 * scaling, 12);
+ sharpen.threshold_slope4 = clampField(sharpen.threshold_slope4 * scaling, 12);
+ sharpen.positive_strength = clampField(sharpen.positive_strength * sharpenStatus->strength, 12);
+ sharpen.negative_strength = clampField(sharpen.negative_strength * sharpenStatus->strength, 12);
+ sharpen.positive_pre_limit = clampField(sharpen.positive_pre_limit * sharpenStatus->limit, 16);
+ sharpen.positive_limit = clampField(sharpen.positive_limit * sharpenStatus->limit, 16);
+ sharpen.negative_pre_limit = clampField(sharpen.negative_pre_limit * sharpenStatus->limit, 16);
+ sharpen.negative_limit = clampField(sharpen.negative_limit * sharpenStatus->limit, 16);
+
+ be_->SetSharpen(sharpen);
+ /* The conversion to YCbCr and back is always enabled. */
+ global.rgb_enables |= PISP_BE_RGB_ENABLE_SHARPEN;
+}
+
+bool IpaPiSP::applyStitch(const StitchStatus *stitchStatus, const DeviceStatus *deviceStatus,
+ const AgcStatus *agcStatus, pisp_be_global_config &global)
+{
+ /*
+ * Find out what HDR mode/channel this frame is. Normally this will be in the delayed
+ * HDR status (in the AGC status), though after a mode switch this will be absent and
+ * the information will have been stored in the hdrStatus_ field.
+ */
+ const HdrStatus *hdrStatus = &hdrStatus_;
+ if (agcStatus)
+ hdrStatus = &agcStatus->hdr;
+
+ bool modeChange = hdrStatus->mode != lastStitchHdrStatus_.mode;
+ bool channelChange = !modeChange && hdrStatus->channel != lastStitchHdrStatus_.channel;
+ lastStitchHdrStatus_ = *hdrStatus;
+
+ /* Check for a change of HDR mode. That forces us to start over. */
+ if (modeChange)
+ lastStitchExposures_.clear();
+
+ if (hdrStatus->channel != "short" && hdrStatus->channel != "long") {
+ /* The channel *must* be long or short, anything else does not make sense. */
+ LOG(IPARPI, Warning) << "Stitch channel is not long or short";
+ return false;
+ }
+
+ /* Whatever happens, we're going to output this buffer now. */
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_STITCH_OUTPUT;
+
+ utils::Duration exposure = deviceStatus->exposureTime * deviceStatus->analogueGain;
+ lastStitchExposures_[hdrStatus->channel] = exposure;
+
+ /* If the other channel hasn't been seen there's nothing more we can do. */
+ std::string otherChannel = hdrStatus->channel == "short" ? "long" : "short";
+ if (lastStitchExposures_.find(otherChannel) == lastStitchExposures_.end()) {
+ /* The first channel should be "short". */
+ if (hdrStatus->channel != "short")
+ LOG(IPARPI, Warning) << "First frame is not short";
+ return false;
+ }
+
+ /* We have both channels, we need to enable stitching. */
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_STITCH_INPUT + PISP_BE_BAYER_ENABLE_STITCH;
+
+ utils::Duration otherExposure = lastStitchExposures_[otherChannel];
+ bool phaseLong = hdrStatus->channel == "long";
+ double ratio = phaseLong ? otherExposure / exposure : exposure / otherExposure;
+
+ pisp_be_stitch_config stitch = {};
+ stitch.exposure_ratio = clampField(ratio, 15, 15);
+ if (phaseLong)
+ stitch.exposure_ratio |= PISP_BE_STITCH_STREAMING_LONG;
+ /* These will be filled in correctly once we have implemented the HDR algorithm. */
+ stitch.threshold_lo = stitchStatus->thresholdLo;
+ stitch.threshold_diff_power = stitchStatus->diffPower;
+ stitch.motion_threshold_256 = stitchStatus->motionThreshold;
+ be_->SetStitch(stitch);
+
+ return channelChange;
+}
+
+void IpaPiSP::applyTonemap(const TonemapStatus *tonemapStatus, pisp_be_global_config &global)
+{
+ pisp_be_tonemap_config tonemap = {};
+
+ tonemap.detail_constant = clampField(tonemapStatus->detailConstant, 16);
+ tonemap.detail_slope = clampField(tonemapStatus->detailSlope, 16, 8);
+ tonemap.iir_strength = clampField(tonemapStatus->iirStrength, 12, 4);
+ tonemap.strength = clampField(tonemapStatus->strength, 12, 8);
+
+ if (!generateLut(tonemapStatus->tonemap, tonemap.lut, PISP_BE_TONEMAP_LUT_SIZE)) {
+ be_->SetTonemap(tonemap);
+ global.bayer_enables |= PISP_BE_BAYER_ENABLE_TONEMAP;
+ }
+}
+
+void IpaPiSP::applyFocusStats(const NoiseStatus *noiseStatus)
+{
+ pisp_fe_cdaf_stats_config cdaf;
+ fe_->GetCdafStats(cdaf);
+
+ cdaf.noise_constant = noiseStatus->noiseConstant;
+ cdaf.noise_slope = noiseStatus->noiseSlope;
+ fe_->SetCdafStats(cdaf);
+}
+
+void IpaPiSP::applyAF(const struct AfStatus *afStatus, ControlList &lensCtrls)
+{
+ if (afStatus->lensSetting) {
+ ControlValue v(afStatus->lensSetting.value());
+ lensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE, v);
+ }
+}
+
+void IpaPiSP::setDefaultConfig()
+{
+ std::scoped_lock<FrontEnd> l(*fe_);
+
+ pisp_be_global_config beGlobal;
+ pisp_fe_global_config feGlobal;
+
+ fe_->GetGlobal(feGlobal);
+ be_->GetGlobal(beGlobal);
+ /*
+ * Always go to YCbCr and back. We need them if the false colour block is enabled,
+ * and even for mono sensors if sharpening is enabled. So we're better off enabling
+ * them all the time.
+ */
+ beGlobal.rgb_enables |= PISP_BE_RGB_ENABLE_YCBCR + PISP_BE_RGB_ENABLE_YCBCR_INVERSE;
+
+ if (!monoSensor()) {
+ beGlobal.bayer_enables |= PISP_BE_BAYER_ENABLE_DEMOSAIC;
+ beGlobal.rgb_enables |= PISP_BE_RGB_ENABLE_FALSE_COLOUR;
+ }
+
+ /*
+ * Ask the AWB algorithm for reasonable gain values so that we can program the
+ * front end stats sensibly. We must also factor in the conversion to luminance.
+ */
+ pisp_fe_rgby_config rgby = {};
+ double gainR = 1.5, gainB = 1.5;
+ RPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(
+ controller_.getAlgorithm("awb"));
+ if (awb)
+ awb->initialValues(gainR, gainB);
+ /* The BT.601 RGB -> Y coefficients will do. The precise values are not critical. */
+ rgby.gain_r = clampField(gainR * 0.299, 14, 10);
+ rgby.gain_g = clampField(1.0 * .587, 14, 10);
+ rgby.gain_b = clampField(gainB * .114, 14, 10);
+ fe_->SetRGBY(rgby);
+ feGlobal.enables |= PISP_FE_ENABLE_RGBY;
+
+ /* Also get sensible front end black level defaults, for the same reason. */
+ RPiController::BlackLevelAlgorithm *blackLevel = dynamic_cast<RPiController::BlackLevelAlgorithm *>(
+ controller_.getAlgorithm("black_level"));
+ if (blackLevel) {
+ uint16_t blackLevelR, blackLevelG, blackLevelB;
+ BlackLevelStatus blackLevelStatus;
+
+ blackLevel->initialValues(blackLevelR, blackLevelG, blackLevelB);
+ blackLevelStatus.blackLevelR = blackLevelR;
+ blackLevelStatus.blackLevelG = blackLevelG;
+ blackLevelStatus.blackLevelB = blackLevelB;
+ applyBlackLevel(&blackLevelStatus, beGlobal);
+ feGlobal.enables |= PISP_FE_ENABLE_BLA + PISP_FE_ENABLE_BLC;
+ }
+
+ fe_->SetGlobal(feGlobal);
+ be_->SetGlobal(beGlobal);
+}
+
+void IpaPiSP::setStatsAndDebin()
+{
+ pisp_fe_crop_config crop{ 0, 0, mode_.width, mode_.height };
+
+ pisp_fe_awb_stats_config awb = {};
+ awb.r_lo = awb.g_lo = awb.b_lo = 0;
+ awb.r_hi = awb.g_hi = awb.b_hi = 65535 * 0.98;
+
+ pisp_fe_cdaf_stats_config cdaf = {};
+ cdaf.mode = (1 << 4) + (1 << 2) + 1; /* Gr / Gb count with weights of (1, 1) */
+
+ {
+ std::scoped_lock<FrontEnd> l(*fe_);
+ pisp_fe_global_config feGlobal;
+ fe_->GetGlobal(feGlobal);
+ feGlobal.enables |= PISP_FE_ENABLE_AWB_STATS + PISP_FE_ENABLE_AGC_STATS +
+ PISP_FE_ENABLE_CDAF_STATS;
+
+ fe_->SetGlobal(feGlobal);
+ fe_->SetStatsCrop(crop);
+ fe_->SetAwbStats(awb);
+ fe_->SetCdafStats(cdaf);
+ }
+
+ /*
+ * Apply the correct AGC region weights to the Frontend. Need to do this
+ * out of the Frontend scoped lock.
+ */
+ setHistogramWeights();
+
+ pisp_be_global_config beGlobal;
+ be_->GetGlobal(beGlobal);
+
+ if (mode_.binX > 1 || mode_.binY > 1) {
+ pisp_be_debin_config debin;
+
+ be_->GetDebin(debin);
+ debin.h_enable = (mode_.binX > 1);
+ debin.v_enable = (mode_.binY > 1);
+ be_->SetDebin(debin);
+ beGlobal.bayer_enables |= PISP_BE_BAYER_ENABLE_DEBIN;
+ } else
+ beGlobal.bayer_enables &= ~PISP_BE_BAYER_ENABLE_DEBIN;
+
+ be_->SetGlobal(beGlobal);
+}
+
+void IpaPiSP::setHistogramWeights()
+{
+ RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
+ controller_.getAlgorithm("agc"));
+ if (!agc)
+ return;
+
+ const std::vector<double> &weights = agc->getWeights();
+
+ pisp_fe_agc_stats_config config;
+ memset(&config, 0, sizeof(config));
+
+ /*
+ * The AGC software gives us a 15x15 table of weights which we
+ * map onto 16x16 in the hardware, ensuring the rightmost column
+ * and bottom row all have zero weight. We align everything to
+ * the native 2x2 Bayer pixel blocks.
+ */
+ const Size &size = controller_.getHardwareConfig().agcZoneWeights;
+ int width = (mode_.width / size.width) & ~1;
+ int height = (mode_.height / size.height) & ~1;
+ config.offset_x = ((mode_.width - size.width * width) / 2) & ~1;
+ config.offset_y = ((mode_.height - size.height * height) / 2) & ~1;
+ config.size_x = width;
+ config.size_y = height;
+
+ unsigned int idx = 0;
+ for (unsigned int row = 0; row < size.height; row++) {
+ unsigned int col = 0;
+ for (; col < size.width / 2; col++) {
+ int wt0 = clampField(weights[idx++], 4, 0, false, "agc weights");
+ int wt1 = clampField(weights[idx++], 4, 0, false, "agc weights");
+ config.weights[row * 8 + col] = (wt1 << 4) | wt0;
+ }
+ if (size.width & 1)
+ config.weights[row * 8 + col] =
+ clampField(weights[idx++], 4, 0, false, "agc weights");
+ }
+
+ std::scoped_lock<FrontEnd> l(*fe_);
+ fe_->SetAgcStats(config);
+}
+
+} /* namespace ipa::RPi */
+
+/*
+ * External IPA module interface
+ */
+extern "C" {
+const IPAModuleInfo ipaModuleInfo = {
+ IPA_MODULE_API_VERSION,
+ 1,
+ "rpi/pisp",
+ "rpi/pisp",
+};
+
+IPAInterface *ipaCreate()
+{
+ return new ipa::RPi::IpaPiSP();
+}
+
+} /* extern "C" */
+
+} /* namespace libcamera */
diff --git a/src/ipa/rpi/vc4/data/imx283.json b/src/ipa/rpi/vc4/data/imx283.json
new file mode 100644
index 00000000..bfacecc8
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/imx283.json
@@ -0,0 +1,313 @@
+{
+ "version": 2.0,
+ "target": "bcm2835",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3200
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 2461,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 1148,
+ "reference_Y": 13314
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.204
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 199,
+ "slope": 0.01947
+ }
+ },
+ {
+ "rpi.sdn": { }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 8000
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2213.0, 0.9607, 0.2593,
+ 5313.0, 0.4822, 0.5909,
+ 6237.0, 0.4739, 0.6308
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.0144,
+ "transverse_neg": 0.01
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.7
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2213,
+ "ccm":
+ [
+ 1.91264, -0.27609, -0.63655,
+ -0.65708, 2.11718, -0.46009,
+ 0.03629, -1.38441, 2.34811
+ ]
+ },
+ {
+ "ct": 2255,
+ "ccm":
+ [
+ 1.90369, -0.29309, -0.61059,
+ -0.64693, 2.08169, -0.43476,
+ 0.04086, -1.29999, 2.25914
+ ]
+ },
+ {
+ "ct": 2259,
+ "ccm":
+ [
+ 1.92762, -0.35134, -0.57628,
+ -0.63523, 2.08481, -0.44958,
+ 0.06754, -1.32953, 2.26199
+ ]
+ },
+ {
+ "ct": 5313,
+ "ccm":
+ [
+ 1.75924, -0.54053, -0.21871,
+ -0.38159, 1.88671, -0.50511,
+ -0.00747, -0.53492, 1.54239
+ ]
+ },
+ {
+ "ct": 6237,
+ "ccm":
+ [
+ 2.19299, -0.74764, -0.44536,
+ -0.51678, 2.27651, -0.75972,
+ -0.06498, -0.74269, 1.80767
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ }
+ ]
+}
diff --git a/src/ipa/rpi/vc4/data/imx327.json b/src/ipa/rpi/vc4/data/imx327.json
new file mode 100644
index 00000000..40a56842
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/imx327.json
@@ -0,0 +1,215 @@
+{
+ "version": 2.0,
+ "target": "bcm2835",
+ "description": "This is an interim tuning only. Please consider doing a more formal tuning for your application.",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 6813,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 890,
+ "reference_Y": 12900
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.67
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 187,
+ "slope": 0.00842
+ }
+ },
+ {
+ "rpi.sdn": { }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "speed": 0.2,
+ "metering_modes":
+ {
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ },
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 10, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 10, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.16
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.7,
+ "luminance_lut":
+ [
+ 2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
+ 2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
+ 2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
+ 2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
+ 2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
+ 2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
+ 2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
+ 2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
+ 2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
+ 2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
+ 2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
+ 2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
+ ],
+ "sigma": 0.005,
+ "sigma_Cb": 0.005
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 3900,
+ "ccm":
+ [
+ 1.54659, -0.17707, -0.36953,
+ -0.51471, 1.72733, -0.21262,
+ 0.06667, -0.92279, 1.85612
+ ]
+ }
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/vc4/data/imx415.json b/src/ipa/rpi/vc4/data/imx415.json
new file mode 100755
index 00000000..6ed16b17
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/imx415.json
@@ -0,0 +1,413 @@
+{
+ "version": 2.0,
+ "target": "bcm2835",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 19230,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 1198,
+ "reference_Y": 14876
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 17,
+ "reference_slope": 3.439
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 193,
+ "slope": 0.00902
+ }
+ },
+ {
+ "rpi.sdn": { }
+ },
+ {
+ "rpi.awb":
+ {
+ "priors": [
+ {
+ "lux": 0,
+ "prior":
+ [
+ 2000, 1.0,
+ 3000, 0.0,
+ 13000, 0.0
+ ]
+ },
+ {
+ "lux": 800,
+ "prior":
+ [
+ 2000, 0.0,
+ 6000, 2.0,
+ 13000, 2.0
+ ]
+ },
+ {
+ "lux": 1500,
+ "prior":
+ [
+ 2000, 0.0,
+ 4000, 1.0,
+ 6000, 6.0,
+ 6500, 7.0,
+ 7000, 1.0,
+ 13000, 1.0
+ ]
+ }
+ ],
+ "modes":
+ {
+ "auto":
+ {
+ "lo": 2500,
+ "hi": 8000
+ },
+ "incandescent":
+ {
+ "lo": 2500,
+ "hi": 3000
+ },
+ "tungsten":
+ {
+ "lo": 3000,
+ "hi": 3500
+ },
+ "fluorescent":
+ {
+ "lo": 4000,
+ "hi": 4700
+ },
+ "indoor":
+ {
+ "lo": 3000,
+ "hi": 5000
+ },
+ "daylight":
+ {
+ "lo": 5500,
+ "hi": 6500
+ },
+ "cloudy":
+ {
+ "lo": 7000,
+ "hi": 8600
+ }
+ },
+ "bayes": 1,
+ "ct_curve":
+ [
+ 2698.0, 0.7681, 0.2026,
+ 2930.0, 0.7515, 0.2116,
+ 3643.0, 0.6355, 0.2858,
+ 4605.0, 0.4992, 0.4041,
+ 5658.0, 0.4498, 0.4574
+ ],
+ "sensitivity_r": 1.0,
+ "sensitivity_b": 1.0,
+ "transverse_pos": 0.0112,
+ "transverse_neg": 0.01424
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ },
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 10000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ }
+ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.8,
+ "calibrations_Cr": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.025, 1.016, 1.013, 1.011, 1.008, 1.005, 1.003, 1.001, 1.003, 1.005, 1.008, 1.011, 1.014, 1.019, 1.027, 1.035,
+ 1.025, 1.017, 1.013, 1.011, 1.008, 1.005, 1.003, 1.003, 1.004, 1.005, 1.009, 1.012, 1.017, 1.023, 1.029, 1.035,
+ 1.022, 1.017, 1.013, 1.009, 1.007, 1.005, 1.003, 1.003, 1.004, 1.006, 1.009, 1.012, 1.017, 1.023, 1.029, 1.035,
+ 1.019, 1.015, 1.011, 1.007, 1.005, 1.003, 1.001, 1.001, 1.003, 1.004, 1.007, 1.009, 1.015, 1.022, 1.028, 1.035,
+ 1.018, 1.014, 1.009, 1.006, 1.004, 1.002, 1.001, 1.001, 1.001, 1.003, 1.006, 1.009, 1.015, 1.021, 1.028, 1.035,
+ 1.018, 1.013, 1.011, 1.006, 1.003, 1.002, 1.001, 1.001, 1.001, 1.003, 1.006, 1.009, 1.015, 1.022, 1.028, 1.036,
+ 1.018, 1.014, 1.011, 1.007, 1.004, 1.002, 1.001, 1.001, 1.001, 1.004, 1.007, 1.009, 1.015, 1.023, 1.029, 1.036,
+ 1.019, 1.014, 1.012, 1.008, 1.005, 1.003, 1.002, 1.001, 1.003, 1.005, 1.008, 1.012, 1.016, 1.024, 1.031, 1.037,
+ 1.021, 1.016, 1.013, 1.009, 1.008, 1.005, 1.003, 1.003, 1.005, 1.008, 1.011, 1.014, 1.019, 1.026, 1.033, 1.039,
+ 1.025, 1.021, 1.016, 1.013, 1.009, 1.008, 1.006, 1.006, 1.008, 1.011, 1.014, 1.019, 1.024, 1.031, 1.038, 1.046,
+ 1.029, 1.025, 1.021, 1.018, 1.014, 1.013, 1.011, 1.011, 1.012, 1.015, 1.019, 1.023, 1.028, 1.035, 1.046, 1.051,
+ 1.032, 1.029, 1.023, 1.021, 1.018, 1.015, 1.014, 1.014, 1.015, 1.018, 1.022, 1.027, 1.033, 1.041, 1.051, 1.054
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.025, 1.011, 1.009, 1.005, 1.004, 1.003, 1.001, 1.001, 1.002, 1.006, 1.009, 1.012, 1.016, 1.021, 1.031, 1.041,
+ 1.025, 1.014, 1.009, 1.007, 1.005, 1.004, 1.003, 1.003, 1.004, 1.007, 1.009, 1.013, 1.021, 1.028, 1.037, 1.041,
+ 1.023, 1.014, 1.009, 1.007, 1.005, 1.004, 1.003, 1.003, 1.005, 1.007, 1.011, 1.014, 1.021, 1.028, 1.037, 1.048,
+ 1.022, 1.012, 1.007, 1.005, 1.002, 1.001, 1.001, 1.001, 1.003, 1.005, 1.009, 1.014, 1.019, 1.028, 1.039, 1.048,
+ 1.022, 1.011, 1.006, 1.003, 1.001, 1.001, 1.001, 1.001, 1.002, 1.005, 1.009, 1.014, 1.021, 1.029, 1.039, 1.051,
+ 1.022, 1.012, 1.007, 1.003, 1.002, 1.001, 1.001, 1.001, 1.002, 1.005, 1.009, 1.015, 1.021, 1.031, 1.041, 1.053,
+ 1.023, 1.013, 1.009, 1.005, 1.003, 1.003, 1.001, 1.002, 1.004, 1.006, 1.011, 1.015, 1.022, 1.031, 1.042, 1.056,
+ 1.024, 1.015, 1.012, 1.008, 1.005, 1.004, 1.004, 1.004, 1.006, 1.009, 1.013, 1.018, 1.024, 1.034, 1.045, 1.057,
+ 1.027, 1.017, 1.015, 1.012, 1.009, 1.007, 1.007, 1.008, 1.009, 1.013, 1.018, 1.023, 1.029, 1.038, 1.051, 1.061,
+ 1.029, 1.023, 1.017, 1.015, 1.014, 1.012, 1.011, 1.011, 1.014, 1.018, 1.024, 1.029, 1.036, 1.044, 1.056, 1.066,
+ 1.034, 1.028, 1.023, 1.022, 1.019, 1.019, 1.018, 1.018, 1.021, 1.025, 1.031, 1.035, 1.042, 1.053, 1.066, 1.074,
+ 1.041, 1.034, 1.027, 1.025, 1.025, 1.023, 1.023, 1.023, 1.025, 1.031, 1.035, 1.041, 1.049, 1.059, 1.074, 1.079
+ ]
+ }
+ ],
+ "calibrations_Cb": [
+ {
+ "ct": 3000,
+ "table":
+ [
+ 1.001, 1.001, 1.007, 1.015, 1.027, 1.034, 1.038, 1.041, 1.042, 1.043, 1.043, 1.043, 1.041, 1.039, 1.049, 1.054,
+ 1.011, 1.011, 1.013, 1.023, 1.032, 1.039, 1.044, 1.047, 1.052, 1.056, 1.059, 1.059, 1.055, 1.051, 1.054, 1.056,
+ 1.015, 1.015, 1.019, 1.032, 1.039, 1.044, 1.047, 1.052, 1.055, 1.059, 1.061, 1.066, 1.063, 1.058, 1.061, 1.064,
+ 1.016, 1.017, 1.023, 1.032, 1.041, 1.045, 1.048, 1.053, 1.056, 1.061, 1.066, 1.069, 1.067, 1.064, 1.065, 1.068,
+ 1.018, 1.019, 1.025, 1.033, 1.042, 1.045, 1.049, 1.054, 1.058, 1.063, 1.071, 1.072, 1.071, 1.068, 1.069, 1.071,
+ 1.023, 1.024, 1.029, 1.035, 1.043, 1.048, 1.052, 1.057, 1.061, 1.065, 1.074, 1.075, 1.075, 1.072, 1.072, 1.075,
+ 1.027, 1.028, 1.031, 1.038, 1.045, 1.051, 1.054, 1.059, 1.064, 1.068, 1.075, 1.079, 1.078, 1.075, 1.076, 1.081,
+ 1.029, 1.031, 1.033, 1.044, 1.048, 1.054, 1.059, 1.064, 1.067, 1.073, 1.079, 1.082, 1.082, 1.079, 1.081, 1.085,
+ 1.033, 1.033, 1.035, 1.047, 1.053, 1.058, 1.064, 1.067, 1.073, 1.079, 1.084, 1.086, 1.086, 1.084, 1.089, 1.091,
+ 1.037, 1.037, 1.038, 1.049, 1.057, 1.062, 1.068, 1.073, 1.079, 1.084, 1.089, 1.092, 1.092, 1.092, 1.096, 1.104,
+ 1.041, 1.041, 1.043, 1.051, 1.061, 1.068, 1.073, 1.079, 1.083, 1.089, 1.092, 1.094, 1.097, 1.099, 1.105, 1.115,
+ 1.048, 1.044, 1.044, 1.051, 1.063, 1.071, 1.076, 1.082, 1.088, 1.091, 1.094, 1.097, 1.099, 1.104, 1.115, 1.126
+ ]
+ },
+ {
+ "ct": 5000,
+ "table":
+ [
+ 1.001, 1.001, 1.005, 1.011, 1.014, 1.018, 1.019, 1.019, 1.019, 1.021, 1.021, 1.021, 1.019, 1.017, 1.014, 1.014,
+ 1.009, 1.009, 1.011, 1.014, 1.019, 1.024, 1.026, 1.029, 1.031, 1.032, 1.032, 1.031, 1.027, 1.023, 1.022, 1.022,
+ 1.011, 1.012, 1.015, 1.018, 1.024, 1.026, 1.029, 1.032, 1.035, 1.036, 1.036, 1.034, 1.031, 1.027, 1.025, 1.025,
+ 1.012, 1.013, 1.015, 1.019, 1.025, 1.029, 1.032, 1.035, 1.036, 1.038, 1.038, 1.036, 1.034, 1.029, 1.026, 1.026,
+ 1.013, 1.014, 1.016, 1.019, 1.027, 1.031, 1.034, 1.037, 1.039, 1.039, 1.041, 1.039, 1.036, 1.031, 1.028, 1.027,
+ 1.014, 1.014, 1.017, 1.021, 1.027, 1.033, 1.037, 1.039, 1.041, 1.041, 1.042, 1.042, 1.039, 1.033, 1.029, 1.028,
+ 1.015, 1.015, 1.018, 1.021, 1.027, 1.033, 1.037, 1.041, 1.041, 1.042, 1.042, 1.042, 1.039, 1.034, 1.029, 1.029,
+ 1.015, 1.016, 1.018, 1.022, 1.027, 1.033, 1.037, 1.041, 1.041, 1.042, 1.043, 1.043, 1.041, 1.035, 1.031, 1.031,
+ 1.015, 1.016, 1.018, 1.022, 1.027, 1.032, 1.037, 1.041, 1.042, 1.042, 1.044, 1.043, 1.041, 1.036, 1.034, 1.033,
+ 1.016, 1.017, 1.017, 1.022, 1.027, 1.032, 1.036, 1.039, 1.042, 1.042, 1.043, 1.043, 1.041, 1.039, 1.036, 1.034,
+ 1.017, 1.017, 1.018, 1.022, 1.027, 1.031, 1.035, 1.039, 1.041, 1.042, 1.042, 1.042, 1.042, 1.039, 1.039, 1.039,
+ 1.018, 1.017, 1.017, 1.021, 1.027, 1.031, 1.033, 1.038, 1.041, 1.041, 1.042, 1.042, 1.041, 1.041, 1.041, 1.041
+ ]
+ }
+ ],
+ "luminance_lut":
+ [
+ 2.102, 1.903, 1.658, 1.483, 1.358, 1.267, 1.202, 1.202, 1.202, 1.242, 1.323, 1.431, 1.585, 1.797, 2.096, 2.351,
+ 1.996, 1.776, 1.549, 1.385, 1.273, 1.204, 1.138, 1.133, 1.133, 1.185, 1.252, 1.343, 1.484, 1.679, 1.954, 2.228,
+ 1.923, 1.689, 1.474, 1.318, 1.204, 1.138, 1.079, 1.071, 1.071, 1.133, 1.185, 1.284, 1.415, 1.597, 1.854, 2.146,
+ 1.881, 1.631, 1.423, 1.272, 1.159, 1.079, 1.051, 1.026, 1.046, 1.071, 1.144, 1.245, 1.369, 1.543, 1.801, 2.095,
+ 1.867, 1.595, 1.391, 1.242, 1.131, 1.051, 1.013, 1.002, 1.013, 1.046, 1.121, 1.219, 1.343, 1.511, 1.752, 2.079,
+ 1.867, 1.589, 1.385, 1.236, 1.125, 1.048, 1.001, 1.001, 1.003, 1.045, 1.118, 1.217, 1.342, 1.511, 1.746, 2.079,
+ 1.867, 1.589, 1.385, 1.236, 1.125, 1.048, 1.011, 1.003, 1.011, 1.046, 1.118, 1.217, 1.343, 1.511, 1.746, 2.079,
+ 1.884, 1.621, 1.411, 1.261, 1.149, 1.071, 1.048, 1.024, 1.046, 1.069, 1.141, 1.239, 1.369, 1.541, 1.781, 2.093,
+ 1.913, 1.675, 1.459, 1.304, 1.191, 1.125, 1.071, 1.065, 1.069, 1.124, 1.181, 1.278, 1.413, 1.592, 1.842, 2.133,
+ 1.981, 1.755, 1.529, 1.368, 1.251, 1.191, 1.125, 1.124, 1.124, 1.181, 1.242, 1.337, 1.479, 1.669, 1.935, 2.207,
+ 2.078, 1.867, 1.625, 1.453, 1.344, 1.251, 1.202, 1.201, 1.201, 1.242, 1.333, 1.418, 1.571, 1.776, 2.063, 2.321,
+ 2.217, 2.011, 1.747, 1.562, 1.431, 1.331, 1.278, 1.278, 1.278, 1.313, 1.407, 1.523, 1.686, 1.911, 2.226, 2.484
+ ],
+ "sigma": 0.00135,
+ "sigma_Cb": 0.00279
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 2698,
+ "ccm":
+ [
+ 1.57227, -0.32596, -0.24631,
+ -0.61264, 1.70791, -0.09526,
+ -0.43254, 0.48489, 0.94765
+ ]
+ },
+ {
+ "ct": 2930,
+ "ccm":
+ [
+ 1.69455, -0.52724, -0.16731,
+ -0.67131, 1.78468, -0.11338,
+ -0.41609, 0.54693, 0.86916
+ ]
+ },
+ {
+ "ct": 3643,
+ "ccm":
+ [
+ 1.74041, -0.77553, 0.03512,
+ -0.44073, 1.34131, 0.09943,
+ -0.11035, -0.93919, 2.04954
+ ]
+ },
+ {
+ "ct": 4605,
+ "ccm":
+ [
+ 1.49865, -0.41638, -0.08227,
+ -0.39445, 1.70114, -0.30669,
+ 0.01319, -0.88009, 1.86689
+ ]
+ },
+ {
+ "ct": 5658,
+ "ccm":
+ [
+ 1.38601, -0.23128, -0.15472,
+ -0.37641, 1.70444, -0.32803,
+ -0.01575, -0.71466, 1.73041
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ }
+ ]
+}
diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
new file mode 100644
index 00000000..40a56842
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/imx462.json
@@ -0,0 +1,215 @@
+{
+ "version": 2.0,
+ "target": "bcm2835",
+ "description": "This is an interim tuning only. Please consider doing a more formal tuning for your application.",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 3840
+ }
+ },
+ {
+ "rpi.dpc": { }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 6813,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 890,
+ "reference_Y": 12900
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.67
+ }
+ },
+ {
+ "rpi.geq":
+ {
+ "offset": 187,
+ "slope": 0.00842
+ }
+ },
+ {
+ "rpi.sdn": { }
+ },
+ {
+ "rpi.awb":
+ {
+ "bayes": 0
+ }
+ },
+ {
+ "rpi.agc":
+ {
+ "speed": 0.2,
+ "metering_modes":
+ {
+ "matrix":
+ {
+ "weights":
+ [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ ]
+ },
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+ ]
+ },
+ "spot":
+ {
+ "weights":
+ [
+ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 10, 30000, 60000 ],
+ "gain": [ 1.0, 2.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 10, 5000, 10000, 20000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [ ],
+ "highlight": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.5,
+ 1000, 0.5
+ ]
+ },
+ {
+ "bound": "UPPER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.8,
+ 1000, 0.8
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.16,
+ 10000, 0.16
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "omega": 1.3,
+ "n_iter": 100,
+ "luminance_strength": 0.7,
+ "luminance_lut":
+ [
+ 2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
+ 2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
+ 2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
+ 2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
+ 2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
+ 2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
+ 2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
+ 2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
+ 2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
+ 2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
+ 2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
+ 2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
+ ],
+ "sigma": 0.005,
+ "sigma_Cb": 0.005
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 1,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ },
+ {
+ "rpi.sharpen": { }
+ },
+ {
+ "rpi.ccm":
+ {
+ "ccms": [
+ {
+ "ct": 3900,
+ "ccm":
+ [
+ 1.54659, -0.17707, -0.36953,
+ -0.51471, 1.72733, -0.21262,
+ 0.06667, -0.92279, 1.85612
+ ]
+ }
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
index afbf875a..7a8001ee 100644
--- a/src/ipa/rpi/vc4/data/meson.build
+++ b/src/ipa/rpi/vc4/data/meson.build
@@ -3,10 +3,14 @@
conf_files = files([
'imx219.json',
'imx219_noir.json',
+ 'imx283.json',
'imx290.json',
'imx296.json',
'imx296_mono.json',
+ 'imx327.json',
'imx378.json',
+ 'imx415.json',
+ 'imx462.json',
'imx477.json',
'imx477_noir.json',
'imx477_scientific.json',
@@ -18,6 +22,7 @@ conf_files = files([
'ov5647.json',
'ov5647_noir.json',
'ov64a40.json',
+ 'ov7251_mono.json',
'ov9281_mono.json',
'se327m12.json',
'uncalibrated.json',
diff --git a/src/ipa/rpi/vc4/data/ov7251_mono.json b/src/ipa/rpi/vc4/data/ov7251_mono.json
new file mode 100644
index 00000000..a9d05a01
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/ov7251_mono.json
@@ -0,0 +1,136 @@
+{
+ "version": 2.0,
+ "target": "bcm2835",
+ "algorithms": [
+ {
+ "rpi.black_level":
+ {
+ "black_level": 4096
+ }
+ },
+ {
+ "rpi.lux":
+ {
+ "reference_shutter_speed": 2000,
+ "reference_gain": 1.0,
+ "reference_aperture": 1.0,
+ "reference_lux": 800,
+ "reference_Y": 20000
+ }
+ },
+ {
+ "rpi.noise":
+ {
+ "reference_constant": 0,
+ "reference_slope": 2.5
+ }
+ },
+ {
+ "rpi.sdn": { }
+ },
+ {
+ "rpi.agc":
+ {
+ "metering_modes":
+ {
+ "centre-weighted":
+ {
+ "weights":
+ [
+ 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+ ]
+ }
+ },
+ "exposure_modes":
+ {
+ "normal":
+ {
+ "shutter": [ 100, 15000, 30000, 60000, 120000 ],
+ "gain": [ 1.0, 2.0, 3.0, 4.0, 8.0 ]
+ },
+ "short":
+ {
+ "shutter": [ 100, 5000, 10000, 20000, 30000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+ },
+ "long":
+ {
+ "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+ "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+ }
+ },
+ "constraint_modes":
+ {
+ "normal": [
+ {
+ "bound": "LOWER",
+ "q_lo": 0.98,
+ "q_hi": 1.0,
+ "y_target":
+ [
+ 0, 0.4,
+ 1000, 0.4
+ ]
+ }
+ ]
+ },
+ "y_target":
+ [
+ 0, 0.16,
+ 1000, 0.165,
+ 10000, 0.17
+ ]
+ }
+ },
+ {
+ "rpi.alsc":
+ {
+ "n_iter": 0,
+ "luminance_strength": 1.0,
+ "corner_strength": 1.5
+ }
+ },
+ {
+ "rpi.contrast":
+ {
+ "ce_enable": 0,
+ "gamma_curve":
+ [
+ 0, 0,
+ 1024, 5040,
+ 2048, 9338,
+ 3072, 12356,
+ 4096, 15312,
+ 5120, 18051,
+ 6144, 20790,
+ 7168, 23193,
+ 8192, 25744,
+ 9216, 27942,
+ 10240, 30035,
+ 11264, 32005,
+ 12288, 33975,
+ 13312, 35815,
+ 14336, 37600,
+ 15360, 39168,
+ 16384, 40642,
+ 18432, 43379,
+ 20480, 45749,
+ 22528, 47753,
+ 24576, 49621,
+ 26624, 51253,
+ 28672, 52698,
+ 30720, 53796,
+ 32768, 54876,
+ 36864, 57012,
+ 40960, 58656,
+ 45056, 59954,
+ 49152, 61183,
+ 53248, 62355,
+ 57344, 63419,
+ 61440, 64476,
+ 65535, 65535
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp
new file mode 100644
index 00000000..c46bb0eb
--- /dev/null
+++ b/src/ipa/simple/algorithms/agc.cpp
@@ -0,0 +1,146 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Red Hat Inc.
+ *
+ * Exposure and gain
+ */
+
+#include "agc.h"
+
+#include <stdint.h>
+
+#include <libcamera/base/log.h>
+
+#include "control_ids.h"
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(IPASoftExposure)
+
+namespace ipa::soft::algorithms {
+
+/*
+ * The number of bins to use for the optimal exposure calculations.
+ */
+static constexpr unsigned int kExposureBinsCount = 5;
+
+/*
+ * The exposure is optimal when the mean sample value of the histogram is
+ * in the middle of the range.
+ */
+static constexpr float kExposureOptimal = kExposureBinsCount / 2.0;
+
+/*
+ * This implements the hysteresis for the exposure adjustment.
+ * It is small enough to have the exposure close to the optimal, and is big
+ * enough to prevent the exposure from wobbling around the optimal value.
+ */
+static constexpr float kExposureSatisfactory = 0.2;
+
+Agc::Agc()
+{
+}
+
+void Agc::updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV)
+{
+ /*
+ * kExpDenominator of 10 gives ~10% increment/decrement;
+ * kExpDenominator of 5 - about ~20%
+ */
+ static constexpr uint8_t kExpDenominator = 10;
+ static constexpr uint8_t kExpNumeratorUp = kExpDenominator + 1;
+ static constexpr uint8_t kExpNumeratorDown = kExpDenominator - 1;
+
+ double next;
+ int32_t &exposure = frameContext.sensor.exposure;
+ double &again = frameContext.sensor.gain;
+
+ if (exposureMSV < kExposureOptimal - kExposureSatisfactory) {
+ next = exposure * kExpNumeratorUp / kExpDenominator;
+ if (next - exposure < 1)
+ exposure += 1;
+ else
+ exposure = next;
+ if (exposure >= context.configuration.agc.exposureMax) {
+ next = again * kExpNumeratorUp / kExpDenominator;
+ if (next - again < context.configuration.agc.againMinStep)
+ again += context.configuration.agc.againMinStep;
+ else
+ again = next;
+ }
+ }
+
+ if (exposureMSV > kExposureOptimal + kExposureSatisfactory) {
+ if (exposure == context.configuration.agc.exposureMax &&
+ again > context.configuration.agc.againMin) {
+ next = again * kExpNumeratorDown / kExpDenominator;
+ if (again - next < context.configuration.agc.againMinStep)
+ again -= context.configuration.agc.againMinStep;
+ else
+ again = next;
+ } else {
+ next = exposure * kExpNumeratorDown / kExpDenominator;
+ if (exposure - next < 1)
+ exposure -= 1;
+ else
+ exposure = next;
+ }
+ }
+
+ exposure = std::clamp(exposure, context.configuration.agc.exposureMin,
+ context.configuration.agc.exposureMax);
+ again = std::clamp(again, context.configuration.agc.againMin,
+ context.configuration.agc.againMax);
+
+ LOG(IPASoftExposure, Debug)
+ << "exposureMSV " << exposureMSV
+ << " exp " << exposure << " again " << again;
+}
+
+void Agc::process(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata)
+{
+ utils::Duration exposureTime =
+ context.configuration.agc.lineDuration * frameContext.sensor.exposure;
+ metadata.set(controls::ExposureTime, exposureTime.get<std::micro>());
+ metadata.set(controls::AnalogueGain, frameContext.sensor.gain);
+
+ /*
+ * Calculate Mean Sample Value (MSV) according to formula from:
+ * https://www.araa.asn.au/acra/acra2007/papers/paper84final.pdf
+ */
+ const auto &histogram = stats->yHistogram;
+ const unsigned int blackLevelHistIdx =
+ context.activeState.blc.level / (256 / SwIspStats::kYHistogramSize);
+ const unsigned int histogramSize =
+ SwIspStats::kYHistogramSize - blackLevelHistIdx;
+ const unsigned int yHistValsPerBin = histogramSize / kExposureBinsCount;
+ const unsigned int yHistValsPerBinMod =
+ histogramSize / (histogramSize % kExposureBinsCount + 1);
+ int exposureBins[kExposureBinsCount] = {};
+ unsigned int denom = 0;
+ unsigned int num = 0;
+
+ for (unsigned int i = 0; i < histogramSize; i++) {
+ unsigned int idx = (i - (i / yHistValsPerBinMod)) / yHistValsPerBin;
+ exposureBins[idx] += histogram[blackLevelHistIdx + i];
+ }
+
+ for (unsigned int i = 0; i < kExposureBinsCount; i++) {
+ LOG(IPASoftExposure, Debug) << i << ": " << exposureBins[i];
+ denom += exposureBins[i];
+ num += exposureBins[i] * (i + 1);
+ }
+
+ float exposureMSV = (denom == 0 ? 0 : static_cast<float>(num) / denom);
+ updateExposure(context, frameContext, exposureMSV);
+}
+
+REGISTER_IPA_ALGORITHM(Agc, "Agc")
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/agc.h b/src/ipa/simple/algorithms/agc.h
new file mode 100644
index 00000000..112d9f5a
--- /dev/null
+++ b/src/ipa/simple/algorithms/agc.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Red Hat Inc.
+ *
+ * Exposure and gain
+ */
+
+#pragma once
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+class Agc : public Algorithm
+{
+public:
+ Agc();
+ ~Agc() = default;
+
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata) override;
+
+private:
+ void updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV);
+};
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/algorithm.h b/src/ipa/simple/algorithms/algorithm.h
new file mode 100644
index 00000000..41f63170
--- /dev/null
+++ b/src/ipa/simple/algorithms/algorithm.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Red Hat, Inc.
+ *
+ * Software ISP control algorithm interface
+ */
+
+#pragma once
+
+#include <libipa/algorithm.h>
+
+#include "module.h"
+
+namespace libcamera {
+
+namespace ipa::soft {
+
+using Algorithm = libcamera::ipa::Algorithm<Module>;
+
+} /* namespace ipa::soft */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp
new file mode 100644
index 00000000..cf567e89
--- /dev/null
+++ b/src/ipa/simple/algorithms/awb.cpp
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Red Hat Inc.
+ *
+ * Auto white balance
+ */
+
+#include "awb.h"
+
+#include <numeric>
+#include <stdint.h>
+
+#include <libcamera/base/log.h>
+
+#include <libcamera/control_ids.h>
+
+#include "libipa/colours.h"
+#include "simple/ipa_context.h"
+
+#include "control_ids.h"
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(IPASoftAwb)
+
+namespace ipa::soft::algorithms {
+
+int Awb::configure(IPAContext &context,
+ [[maybe_unused]] const IPAConfigInfo &configInfo)
+{
+ auto &gains = context.activeState.awb.gains;
+ gains = { { 1.0, 1.0, 1.0 } };
+
+ return 0;
+}
+
+void Awb::prepare(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ [[maybe_unused]] DebayerParams *params)
+{
+ auto &gains = context.activeState.awb.gains;
+ /* Just report, the gains are applied in LUT algorithm. */
+ frameContext.gains.red = gains.r();
+ frameContext.gains.blue = gains.b();
+}
+
+void Awb::process(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata)
+{
+ const SwIspStats::Histogram &histogram = stats->yHistogram;
+ const uint8_t blackLevel = context.activeState.blc.level;
+
+ const float maxGain = 1024.0;
+ const float mdGains[] = {
+ static_cast<float>(frameContext.gains.red / maxGain),
+ static_cast<float>(frameContext.gains.blue / maxGain)
+ };
+ metadata.set(controls::ColourGains, mdGains);
+
+ /*
+ * Black level must be subtracted to get the correct AWB ratios, they
+ * would be off if they were computed from the whole brightness range
+ * rather than from the sensor range.
+ */
+ const uint64_t nPixels = std::accumulate(
+ histogram.begin(), histogram.end(), 0);
+ const uint64_t offset = blackLevel * nPixels;
+ const uint64_t sumR = stats->sumR_ - offset / 4;
+ const uint64_t sumG = stats->sumG_ - offset / 2;
+ const uint64_t sumB = stats->sumB_ - offset / 4;
+
+ /*
+ * Calculate red and blue gains for AWB.
+ * Clamp max gain at 4.0, this also avoids 0 division.
+ */
+ auto &gains = context.activeState.awb.gains;
+ gains = { {
+ sumR <= sumG / 4 ? 4.0f : static_cast<float>(sumG) / sumR,
+ 1.0,
+ sumB <= sumG / 4 ? 4.0f : static_cast<float>(sumG) / sumB,
+ } };
+
+ RGB<double> rgbGains{ { 1 / gains.r(), 1 / gains.g(), 1 / gains.b() } };
+ context.activeState.awb.temperatureK = estimateCCT(rgbGains);
+ metadata.set(controls::ColourTemperature, context.activeState.awb.temperatureK);
+
+ LOG(IPASoftAwb, Debug)
+ << "gain R/B: " << gains << "; temperature: "
+ << context.activeState.awb.temperatureK;
+}
+
+REGISTER_IPA_ALGORITHM(Awb, "Awb")
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/awb.h b/src/ipa/simple/algorithms/awb.h
new file mode 100644
index 00000000..ad993f39
--- /dev/null
+++ b/src/ipa/simple/algorithms/awb.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024-2025 Red Hat Inc.
+ *
+ * Auto white balance
+ */
+
+#pragma once
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+class Awb : public Algorithm
+{
+public:
+ Awb() = default;
+ ~Awb() = default;
+
+ int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
+ void prepare(IPAContext &context,
+ const uint32_t frame,
+ IPAFrameContext &frameContext,
+ DebayerParams *params) override;
+ void process(IPAContext &context,
+ const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata) override;
+};
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
new file mode 100644
index 00000000..8c1e9ed0
--- /dev/null
+++ b/src/ipa/simple/algorithms/blc.cpp
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024-2025, Red Hat Inc.
+ *
+ * Black level handling
+ */
+
+#include "blc.h"
+
+#include <numeric>
+
+#include <libcamera/base/log.h>
+
+#include "control_ids.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+LOG_DEFINE_CATEGORY(IPASoftBL)
+
+BlackLevel::BlackLevel()
+{
+}
+
+int BlackLevel::init([[maybe_unused]] IPAContext &context,
+ const YamlObject &tuningData)
+{
+ auto blackLevel = tuningData["blackLevel"].get<int16_t>();
+ if (blackLevel.has_value()) {
+ /*
+ * Convert 16 bit values from the tuning file to 8 bit black
+ * level for the SoftISP.
+ */
+ definedLevel_ = blackLevel.value() >> 8;
+ }
+ return 0;
+}
+
+int BlackLevel::configure(IPAContext &context,
+ [[maybe_unused]] const IPAConfigInfo &configInfo)
+{
+ if (definedLevel_.has_value())
+ context.configuration.black.level = definedLevel_;
+ context.activeState.blc.level =
+ context.configuration.black.level.value_or(255);
+ return 0;
+}
+
+void BlackLevel::process(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata)
+{
+ /* Assign each of the R G G B channels as the same black level. */
+ const int32_t blackLevel = context.activeState.blc.level * 256;
+ const int32_t blackLevels[] = {
+ blackLevel, blackLevel, blackLevel, blackLevel
+ };
+ metadata.set(controls::SensorBlackLevels, blackLevels);
+
+ if (context.configuration.black.level.has_value())
+ return;
+
+ if (frameContext.sensor.exposure == context.activeState.blc.lastExposure &&
+ frameContext.sensor.gain == context.activeState.blc.lastGain) {
+ return;
+ }
+
+ const SwIspStats::Histogram &histogram = stats->yHistogram;
+
+ /*
+ * The constant is selected to be "good enough", not overly
+ * conservative or aggressive. There is no magic about the given value.
+ */
+ constexpr float ignoredPercentage = 0.02;
+ const unsigned int total =
+ std::accumulate(begin(histogram), end(histogram), 0);
+ const unsigned int pixelThreshold = ignoredPercentage * total;
+ const unsigned int histogramRatio = 256 / SwIspStats::kYHistogramSize;
+ const unsigned int currentBlackIdx =
+ context.activeState.blc.level / histogramRatio;
+
+ for (unsigned int i = 0, seen = 0;
+ i < currentBlackIdx && i < SwIspStats::kYHistogramSize;
+ i++) {
+ seen += histogram[i];
+ if (seen >= pixelThreshold) {
+ context.activeState.blc.level = i * histogramRatio;
+ context.activeState.blc.lastExposure = frameContext.sensor.exposure;
+ context.activeState.blc.lastGain = frameContext.sensor.gain;
+ LOG(IPASoftBL, Debug)
+ << "Auto-set black level: "
+ << i << "/" << SwIspStats::kYHistogramSize
+ << " (" << 100 * (seen - histogram[i]) / total << "% below, "
+ << 100 * seen / total << "% at or below)";
+ break;
+ }
+ };
+}
+
+REGISTER_IPA_ALGORITHM(BlackLevel, "BlackLevel")
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
new file mode 100644
index 00000000..db9e6d63
--- /dev/null
+++ b/src/ipa/simple/algorithms/blc.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Red Hat Inc.
+ *
+ * Black level handling
+ */
+
+#pragma once
+
+#include <optional>
+#include <stdint.h>
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+class BlackLevel : public Algorithm
+{
+public:
+ BlackLevel();
+ ~BlackLevel() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata) override;
+
+private:
+ std::optional<uint8_t> definedLevel_;
+};
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/ccm.cpp b/src/ipa/simple/algorithms/ccm.cpp
new file mode 100644
index 00000000..d5ba928d
--- /dev/null
+++ b/src/ipa/simple/algorithms/ccm.cpp
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board
+ * Copyright (C) 2024-2025, Red Hat Inc.
+ *
+ * Color correction matrix
+ */
+
+#include "ccm.h"
+
+#include <libcamera/base/log.h>
+#include <libcamera/base/utils.h>
+
+#include <libcamera/control_ids.h>
+
+namespace {
+
+constexpr unsigned int kTemperatureThreshold = 100;
+
+}
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+LOG_DEFINE_CATEGORY(IPASoftCcm)
+
+int Ccm::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData)
+{
+ int ret = ccm_.readYaml(tuningData["ccms"], "ct", "ccm");
+ if (ret < 0) {
+ LOG(IPASoftCcm, Error)
+ << "Failed to parse 'ccm' parameter from tuning file.";
+ return ret;
+ }
+
+ context.ccmEnabled = true;
+
+ return 0;
+}
+
+void Ccm::prepare(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext, [[maybe_unused]] DebayerParams *params)
+{
+ const unsigned int ct = context.activeState.awb.temperatureK;
+
+ /* Change CCM only on bigger temperature changes. */
+ if (frame > 0 &&
+ utils::abs_diff(ct, lastCt_) < kTemperatureThreshold) {
+ frameContext.ccm.ccm = context.activeState.ccm.ccm;
+ context.activeState.ccm.changed = false;
+ return;
+ }
+
+ lastCt_ = ct;
+ Matrix<float, 3, 3> ccm = ccm_.getInterpolated(ct);
+
+ context.activeState.ccm.ccm = ccm;
+ frameContext.ccm.ccm = ccm;
+ context.activeState.ccm.changed = true;
+}
+
+void Ccm::process([[maybe_unused]] IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ [[maybe_unused]] const SwIspStats *stats,
+ ControlList &metadata)
+{
+ metadata.set(controls::ColourCorrectionMatrix, frameContext.ccm.ccm.data());
+}
+
+REGISTER_IPA_ALGORITHM(Ccm, "Ccm")
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/ccm.h b/src/ipa/simple/algorithms/ccm.h
new file mode 100644
index 00000000..f4e2b85b
--- /dev/null
+++ b/src/ipa/simple/algorithms/ccm.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024-2025, Red Hat Inc.
+ *
+ * Color correction matrix
+ */
+
+#pragma once
+
+#include "libcamera/internal/matrix.h"
+
+#include <libipa/interpolator.h>
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+class Ccm : public Algorithm
+{
+public:
+ Ccm() = default;
+ ~Ccm() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ void prepare(IPAContext &context,
+ const uint32_t frame,
+ IPAFrameContext &frameContext,
+ DebayerParams *params) override;
+ void process(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata) override;
+
+private:
+ unsigned int lastCt_;
+ Interpolator<Matrix<float, 3, 3>> ccm_;
+};
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp
new file mode 100644
index 00000000..d1d5f727
--- /dev/null
+++ b/src/ipa/simple/algorithms/lut.cpp
@@ -0,0 +1,159 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024-2025, Red Hat Inc.
+ *
+ * Color lookup tables construction
+ */
+
+#include "lut.h"
+
+#include <algorithm>
+#include <cmath>
+#include <optional>
+#include <stdint.h>
+
+#include <libcamera/base/log.h>
+
+#include <libcamera/control_ids.h>
+
+#include "simple/ipa_context.h"
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(IPASoftLut)
+
+namespace ipa::soft::algorithms {
+
+int Lut::init(IPAContext &context,
+ [[maybe_unused]] const YamlObject &tuningData)
+{
+ context.ctrlMap[&controls::Contrast] = ControlInfo(0.0f, 2.0f, 1.0f);
+ return 0;
+}
+
+int Lut::configure(IPAContext &context,
+ [[maybe_unused]] const IPAConfigInfo &configInfo)
+{
+ /* Gamma value is fixed */
+ context.configuration.gamma = 0.5;
+ context.activeState.knobs.contrast = std::optional<double>();
+ updateGammaTable(context);
+
+ return 0;
+}
+
+void Lut::queueRequest(typename Module::Context &context,
+ [[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] typename Module::FrameContext &frameContext,
+ const ControlList &controls)
+{
+ const auto &contrast = controls.get(controls::Contrast);
+ if (contrast.has_value()) {
+ context.activeState.knobs.contrast = contrast;
+ LOG(IPASoftLut, Debug) << "Setting contrast to " << contrast.value();
+ }
+}
+
+void Lut::updateGammaTable(IPAContext &context)
+{
+ auto &gammaTable = context.activeState.gamma.gammaTable;
+ const auto blackLevel = context.activeState.blc.level;
+ const unsigned int blackIndex = blackLevel * gammaTable.size() / 256;
+ const auto contrast = context.activeState.knobs.contrast.value_or(1.0);
+
+ std::fill(gammaTable.begin(), gammaTable.begin() + blackIndex, 0);
+ const float divisor = gammaTable.size() - blackIndex - 1.0;
+ for (unsigned int i = blackIndex; i < gammaTable.size(); i++) {
+ double normalized = (i - blackIndex) / divisor;
+ /* Convert 0..2 to 0..infinity; avoid actual inifinity at tan(pi/2) */
+ double contrastExp = tan(std::clamp(contrast * M_PI_4, 0.0, M_PI_2 - 0.00001));
+ /* Apply simple S-curve */
+ if (normalized < 0.5)
+ normalized = 0.5 * std::pow(normalized / 0.5, contrastExp);
+ else
+ normalized = 1.0 - 0.5 * std::pow((1.0 - normalized) / 0.5, contrastExp);
+ gammaTable[i] = UINT8_MAX *
+ std::pow(normalized, context.configuration.gamma);
+ }
+
+ context.activeState.gamma.blackLevel = blackLevel;
+ context.activeState.gamma.contrast = contrast;
+}
+
+int16_t Lut::ccmValue(unsigned int i, float ccm) const
+{
+ return std::round(i * ccm);
+}
+
+void Lut::prepare(IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ IPAFrameContext &frameContext,
+ DebayerParams *params)
+{
+ frameContext.contrast = context.activeState.knobs.contrast;
+
+ /*
+ * Update the gamma table if needed. This means if black level changes
+ * and since the black level gets updated only if a lower value is
+ * observed, it's not permanently prone to minor fluctuations or
+ * rounding errors.
+ */
+ const bool gammaUpdateNeeded =
+ context.activeState.gamma.blackLevel != context.activeState.blc.level ||
+ context.activeState.gamma.contrast != context.activeState.knobs.contrast;
+ if (gammaUpdateNeeded)
+ updateGammaTable(context);
+
+ auto &gains = context.activeState.awb.gains;
+ auto &gammaTable = context.activeState.gamma.gammaTable;
+ const unsigned int gammaTableSize = gammaTable.size();
+ const double div = static_cast<double>(DebayerParams::kRGBLookupSize) /
+ gammaTableSize;
+
+ if (!context.ccmEnabled) {
+ for (unsigned int i = 0; i < DebayerParams::kRGBLookupSize; i++) {
+ /* Apply gamma after gain! */
+ const RGB<float> lutGains = (gains * i / div).min(gammaTableSize - 1);
+ params->red[i] = gammaTable[static_cast<unsigned int>(lutGains.r())];
+ params->green[i] = gammaTable[static_cast<unsigned int>(lutGains.g())];
+ params->blue[i] = gammaTable[static_cast<unsigned int>(lutGains.b())];
+ }
+ } else if (context.activeState.ccm.changed || gammaUpdateNeeded) {
+ Matrix<float, 3, 3> gainCcm = { { gains.r(), 0, 0,
+ 0, gains.g(), 0,
+ 0, 0, gains.b() } };
+ auto ccm = context.activeState.ccm.ccm * gainCcm;
+ auto &red = params->redCcm;
+ auto &green = params->greenCcm;
+ auto &blue = params->blueCcm;
+ for (unsigned int i = 0; i < DebayerParams::kRGBLookupSize; i++) {
+ red[i].r = ccmValue(i, ccm[0][0]);
+ red[i].g = ccmValue(i, ccm[1][0]);
+ red[i].b = ccmValue(i, ccm[2][0]);
+ green[i].r = ccmValue(i, ccm[0][1]);
+ green[i].g = ccmValue(i, ccm[1][1]);
+ green[i].b = ccmValue(i, ccm[2][1]);
+ blue[i].r = ccmValue(i, ccm[0][2]);
+ blue[i].g = ccmValue(i, ccm[1][2]);
+ blue[i].b = ccmValue(i, ccm[2][2]);
+ params->gammaLut[i] = gammaTable[i / div];
+ }
+ }
+}
+
+void Lut::process([[maybe_unused]] IPAContext &context,
+ [[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
+ [[maybe_unused]] const SwIspStats *stats,
+ ControlList &metadata)
+{
+ const auto &contrast = frameContext.contrast;
+ if (contrast)
+ metadata.set(controls::Contrast, contrast.value());
+}
+
+REGISTER_IPA_ALGORITHM(Lut, "Lut")
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/lut.h b/src/ipa/simple/algorithms/lut.h
new file mode 100644
index 00000000..ba8b9021
--- /dev/null
+++ b/src/ipa/simple/algorithms/lut.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024, Red Hat Inc.
+ *
+ * Color lookup tables construction
+ */
+
+#pragma once
+
+#include "algorithm.h"
+
+namespace libcamera {
+
+namespace ipa::soft::algorithms {
+
+class Lut : public Algorithm
+{
+public:
+ Lut() = default;
+ ~Lut() = default;
+
+ int init(IPAContext &context, const YamlObject &tuningData) override;
+ int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
+ void queueRequest(typename Module::Context &context,
+ const uint32_t frame,
+ typename Module::FrameContext &frameContext,
+ const ControlList &controls)
+ override;
+ void prepare(IPAContext &context,
+ const uint32_t frame,
+ IPAFrameContext &frameContext,
+ DebayerParams *params) override;
+ void process(IPAContext &context,
+ const uint32_t frame,
+ IPAFrameContext &frameContext,
+ const SwIspStats *stats,
+ ControlList &metadata) override;
+
+private:
+ void updateGammaTable(IPAContext &context);
+ int16_t ccmValue(unsigned int i, float ccm) const;
+};
+
+} /* namespace ipa::soft::algorithms */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/algorithms/meson.build b/src/ipa/simple/algorithms/meson.build
new file mode 100644
index 00000000..2d0adb05
--- /dev/null
+++ b/src/ipa/simple/algorithms/meson.build
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: CC0-1.0
+
+soft_simple_ipa_algorithms = files([
+ 'awb.cpp',
+ 'agc.cpp',
+ 'blc.cpp',
+ 'ccm.cpp',
+ 'lut.cpp',
+])
diff --git a/src/ipa/simple/black_level.cpp b/src/ipa/simple/black_level.cpp
deleted file mode 100644
index cc490eb5..00000000
--- a/src/ipa/simple/black_level.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Red Hat Inc.
- *
- * black level handling
- */
-
-#include "black_level.h"
-
-#include <numeric>
-
-#include <libcamera/base/log.h>
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(IPASoftBL)
-
-/**
- * \class BlackLevel
- * \brief Object providing black point level for software ISP
- *
- * Black level can be provided in hardware tuning files or, if no tuning file is
- * available for the given hardware, guessed automatically, with less accuracy.
- * As tuning files are not yet implemented for software ISP, BlackLevel
- * currently provides only guessed black levels.
- *
- * This class serves for tracking black level as a property of the underlying
- * hardware, not as means of enhancing a particular scene or image.
- *
- * The class is supposed to be instantiated for the given camera stream.
- * The black level can be retrieved using BlackLevel::get() method. It is
- * initially 0 and may change when updated using BlackLevel::update() method.
- */
-
-BlackLevel::BlackLevel()
- : blackLevel_(255), blackLevelSet_(false)
-{
-}
-
-/**
- * \brief Return the current black level
- *
- * \return The black level, in the range from 0 (minimum) to 255 (maximum).
- * If the black level couldn't be determined yet, return 0.
- */
-uint8_t BlackLevel::get() const
-{
- return blackLevelSet_ ? blackLevel_ : 0;
-}
-
-/**
- * \brief Update black level from the provided histogram
- * \param[in] yHistogram The histogram to be used for updating black level
- *
- * The black level is property of the given hardware, not image. It is updated
- * only if it has not been yet set or if it is lower than the lowest value seen
- * so far.
- */
-void BlackLevel::update(SwIspStats::Histogram &yHistogram)
-{
- /*
- * The constant is selected to be "good enough", not overly conservative or
- * aggressive. There is no magic about the given value.
- */
- constexpr float ignoredPercentage_ = 0.02;
- const unsigned int total =
- std::accumulate(begin(yHistogram), end(yHistogram), 0);
- const unsigned int pixelThreshold = ignoredPercentage_ * total;
- const unsigned int histogramRatio = 256 / SwIspStats::kYHistogramSize;
- const unsigned int currentBlackIdx = blackLevel_ / histogramRatio;
-
- for (unsigned int i = 0, seen = 0;
- i < currentBlackIdx && i < SwIspStats::kYHistogramSize;
- i++) {
- seen += yHistogram[i];
- if (seen >= pixelThreshold) {
- blackLevel_ = i * histogramRatio;
- blackLevelSet_ = true;
- LOG(IPASoftBL, Debug)
- << "Auto-set black level: "
- << i << "/" << SwIspStats::kYHistogramSize
- << " (" << 100 * (seen - yHistogram[i]) / total << "% below, "
- << 100 * seen / total << "% at or below)";
- break;
- }
- };
-}
-} /* namespace libcamera */
diff --git a/src/ipa/simple/black_level.h b/src/ipa/simple/black_level.h
deleted file mode 100644
index 5e032f9f..00000000
--- a/src/ipa/simple/black_level.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Red Hat Inc.
- *
- * black level handling
- */
-
-#pragma once
-
-#include <array>
-#include <stdint.h>
-
-#include "libcamera/internal/software_isp/swisp_stats.h"
-
-namespace libcamera {
-
-class BlackLevel
-{
-public:
- BlackLevel();
- uint8_t get() const;
- void update(SwIspStats::Histogram &yHistogram);
-
-private:
- uint8_t blackLevel_;
- bool blackLevelSet_;
-};
-
-} /* namespace libcamera */
diff --git a/src/ipa/simple/data/uncalibrated.yaml b/src/ipa/simple/data/uncalibrated.yaml
index ff981a1a..5508e668 100644
--- a/src/ipa/simple/data/uncalibrated.yaml
+++ b/src/ipa/simple/data/uncalibrated.yaml
@@ -2,4 +2,18 @@
%YAML 1.1
---
version: 1
+algorithms:
+ - BlackLevel:
+ - Awb:
+ # Color correction matrices can be defined here. The CCM algorithm
+ # has a significant performance impact, and should only be enabled
+ # if tuned.
+ # - Ccm:
+ # ccms:
+ # - ct: 6500
+ # ccm: [ 1, 0, 0,
+ # 0, 1, 0,
+ # 0, 0, 1]
+ - Lut:
+ - Agc:
...
diff --git a/src/ipa/simple/ipa_context.cpp b/src/ipa/simple/ipa_context.cpp
new file mode 100644
index 00000000..3f94bbeb
--- /dev/null
+++ b/src/ipa/simple/ipa_context.cpp
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Google Inc.
+ * Copyright (C) 2024 Red Hat Inc.
+ *
+ * Software ISP IPA Context
+ */
+
+#include "ipa_context.h"
+
+/**
+ * \file ipa_context.h
+ * \brief Context and state information shared between the algorithms
+ */
+
+namespace libcamera::ipa::soft {
+
+/**
+ * \struct IPASessionConfiguration
+ * \brief Session configuration for the IPA module
+ *
+ * The session configuration contains all IPA configuration parameters that
+ * remain constant during the capture session, from IPA module start to stop.
+ * It is typically set during the configure() operation of the IPA module, but
+ * may also be updated in the start() operation.
+ */
+
+/**
+ * \struct IPAActiveState
+ * \brief The active state of the IPA algorithms
+ *
+ * The IPA is fed with the statistics generated from the latest frame processed.
+ * The statistics are then processed by the IPA algorithms to compute parameters
+ * required for the next frame capture and processing. The current state of the
+ * algorithms is reflected through the IPAActiveState to store the values most
+ * recently computed by the IPA algorithms.
+ */
+
+/**
+ * \struct IPAContext
+ * \brief Global IPA context data shared between all algorithms
+ *
+ * \var IPAContext::configuration
+ * \brief The IPA session configuration, immutable during the session
+ *
+ * \var IPAContext::frameContexts
+ * \brief Ring buffer of the IPAFrameContext(s)
+ *
+ * \var IPAContext::activeState
+ * \brief The current state of IPA algorithms
+ */
+
+/**
+ * \var IPASessionConfiguration::gamma
+ * \brief Gamma value to be used in the raw image processing
+ */
+
+/**
+ * \var IPAActiveState::black
+ * \brief Context for the Black Level algorithm
+ *
+ * \var IPAActiveState::black.level
+ * \brief Current determined black level
+ */
+
+/**
+ * \var IPAActiveState::gains
+ * \brief Context for gains in the Colors algorithm
+ *
+ * \var IPAActiveState::gains.red
+ * \brief Gain of red color
+ *
+ * \var IPAActiveState::gains.green
+ * \brief Gain of green color
+ *
+ * \var IPAActiveState::gains.blue
+ * \brief Gain of blue color
+ */
+
+/**
+ * \var IPAActiveState::agc
+ * \brief Context for the AGC algorithm
+ *
+ * \var IPAActiveState::agc.exposure
+ * \brief Current exposure value
+ *
+ * \var IPAActiveState::agc.again
+ * \brief Current analog gain value
+ */
+
+/**
+ * \var IPAActiveState::gamma
+ * \brief Context for gamma in the Colors algorithm
+ *
+ * \var IPAActiveState::gamma.gammaTable
+ * \brief Computed gamma table
+ *
+ * \var IPAActiveState::gamma.blackLevel
+ * \brief Black level used for the gamma table computation
+ */
+
+} /* namespace libcamera::ipa::soft */
diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h
new file mode 100644
index 00000000..88cc6c35
--- /dev/null
+++ b/src/ipa/simple/ipa_context.h
@@ -0,0 +1,101 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024-2025 Red Hat, Inc.
+ *
+ * Simple pipeline IPA Context
+ */
+
+#pragma once
+
+#include <array>
+#include <optional>
+#include <stdint.h>
+
+#include <libcamera/controls.h>
+
+#include "libcamera/internal/matrix.h"
+#include "libcamera/internal/vector.h"
+
+#include <libipa/fc_queue.h>
+
+#include "core_ipa_interface.h"
+
+namespace libcamera {
+
+namespace ipa::soft {
+
+struct IPASessionConfiguration {
+ float gamma;
+ struct {
+ int32_t exposureMin, exposureMax;
+ double againMin, againMax, againMinStep;
+ utils::Duration lineDuration;
+ } agc;
+ struct {
+ std::optional<uint8_t> level;
+ } black;
+};
+
+struct IPAActiveState {
+ struct {
+ uint8_t level;
+ int32_t lastExposure;
+ double lastGain;
+ } blc;
+
+ struct {
+ RGB<float> gains;
+ unsigned int temperatureK;
+ } awb;
+
+ static constexpr unsigned int kGammaLookupSize = 1024;
+ struct {
+ std::array<double, kGammaLookupSize> gammaTable;
+ uint8_t blackLevel;
+ double contrast;
+ } gamma;
+
+ struct {
+ Matrix<float, 3, 3> ccm;
+ bool changed;
+ } ccm;
+
+ struct {
+ /* 0..2 range, 1.0 = normal */
+ std::optional<double> contrast;
+ } knobs;
+};
+
+struct IPAFrameContext : public FrameContext {
+ struct {
+ Matrix<float, 3, 3> ccm;
+ } ccm;
+
+ struct {
+ int32_t exposure;
+ double gain;
+ } sensor;
+ struct {
+ double red;
+ double blue;
+ } gains;
+ std::optional<double> contrast;
+};
+
+struct IPAContext {
+ IPAContext(unsigned int frameContextSize)
+ : frameContexts(frameContextSize)
+ {
+ }
+
+ IPACameraSensorInfo sensorInfo;
+ IPASessionConfiguration configuration;
+ IPAActiveState activeState;
+ FCQueue<IPAFrameContext> frameContexts;
+ ControlInfoMap::Map ctrlMap;
+ bool ccmEnabled = false;
+};
+
+} /* namespace ipa::soft */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/meson.build b/src/ipa/simple/meson.build
index b297e1d2..2f9f15f4 100644
--- a/src/ipa/simple/meson.build
+++ b/src/ipa/simple/meson.build
@@ -1,12 +1,17 @@
# SPDX-License-Identifier: CC0-1.0
+subdir('algorithms')
+subdir('data')
+
ipa_name = 'ipa_soft_simple'
soft_simple_sources = files([
+ 'ipa_context.cpp',
'soft_simple.cpp',
- 'black_level.cpp',
])
+soft_simple_sources += soft_simple_ipa_algorithms
+
mod = shared_module(ipa_name, soft_simple_sources,
name_prefix : '',
include_directories : [ipa_includes],
@@ -23,6 +28,4 @@ if ipa_sign_module
build_by_default : true)
endif
-subdir('data')
-
ipa_names += ipa_name
diff --git a/src/ipa/simple/module.h b/src/ipa/simple/module.h
new file mode 100644
index 00000000..8d4d53fb
--- /dev/null
+++ b/src/ipa/simple/module.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2024 Red Hat, Inc.
+ *
+ * Software ISP IPA Module
+ */
+
+#pragma once
+
+#include <libcamera/controls.h>
+
+#include <libcamera/ipa/soft_ipa_interface.h>
+
+#include "libcamera/internal/software_isp/debayer_params.h"
+#include "libcamera/internal/software_isp/swisp_stats.h"
+
+#include <libipa/module.h>
+
+#include "ipa_context.h"
+
+namespace libcamera {
+
+namespace ipa::soft {
+
+using Module = ipa::Module<IPAContext, IPAFrameContext, IPAConfigInfo,
+ DebayerParams, SwIspStats>;
+
+} /* namespace ipa::soft */
+
+} /* namespace libcamera */
diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
index b7746ce0..c94c4cd5 100644
--- a/src/ipa/simple/soft_simple.cpp
+++ b/src/ipa/simple/soft_simple.cpp
@@ -5,8 +5,7 @@
* Simple Software Image Processing Algorithm module
*/
-#include <cmath>
-#include <numeric>
+#include <chrono>
#include <stdint.h>
#include <sys/mman.h>
@@ -29,37 +28,23 @@
#include "libipa/camera_sensor_helper.h"
-#include "black_level.h"
+#include "module.h"
namespace libcamera {
LOG_DEFINE_CATEGORY(IPASoft)
-namespace ipa::soft {
-
-/*
- * The number of bins to use for the optimal exposure calculations.
- */
-static constexpr unsigned int kExposureBinsCount = 5;
+using namespace std::literals::chrono_literals;
-/*
- * The exposure is optimal when the mean sample value of the histogram is
- * in the middle of the range.
- */
-static constexpr float kExposureOptimal = kExposureBinsCount / 2.0;
+namespace ipa::soft {
-/*
- * The below value implements the hysteresis for the exposure adjustment.
- * It is small enough to have the exposure close to the optimal, and is big
- * enough to prevent the exposure from wobbling around the optimal value.
- */
-static constexpr float kExposureSatisfactory = 0.2;
+/* Maximum number of frame contexts to be held */
+static constexpr uint32_t kMaxFrameContexts = 16;
-class IPASoftSimple : public ipa::soft::IPASoftInterface
+class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module
{
public:
IPASoftSimple()
- : params_(nullptr), stats_(nullptr), blackLevel_(BlackLevel()),
- ignoreUpdates_(0)
+ : context_(kMaxFrameContexts)
{
}
@@ -68,13 +53,22 @@ public:
int init(const IPASettings &settings,
const SharedFD &fdStats,
const SharedFD &fdParams,
- const ControlInfoMap &sensorInfoMap) override;
- int configure(const ControlInfoMap &sensorInfoMap) override;
+ const IPACameraSensorInfo &sensorInfo,
+ const ControlInfoMap &sensorControls,
+ ControlInfoMap *ipaControls,
+ bool *ccmEnabled) override;
+ int configure(const IPAConfigInfo &configInfo) override;
int start() override;
void stop() override;
- void processStats(const ControlList &sensorControls) override;
+ void queueRequest(const uint32_t frame, const ControlList &controls) override;
+ void computeParams(const uint32_t frame) override;
+ void processStats(const uint32_t frame, const uint32_t bufferId,
+ const ControlList &sensorControls) override;
+
+protected:
+ std::string logPrefix() const override;
private:
void updateExposure(double exposureMSV);
@@ -83,17 +77,9 @@ private:
SwIspStats *stats_;
std::unique_ptr<CameraSensorHelper> camHelper_;
ControlInfoMap sensorInfoMap_;
- BlackLevel blackLevel_;
- static constexpr unsigned int kGammaLookupSize = 1024;
- std::array<uint8_t, kGammaLookupSize> gammaTable_;
- int lastBlackLevel_ = -1;
-
- int32_t exposureMin_, exposureMax_;
- int32_t exposure_;
- double againMin_, againMax_, againMinStep_;
- double again_;
- unsigned int ignoreUpdates_;
+ /* Local parameter storage */
+ struct IPAContext context_;
};
IPASoftSimple::~IPASoftSimple()
@@ -107,7 +93,10 @@ IPASoftSimple::~IPASoftSimple()
int IPASoftSimple::init(const IPASettings &settings,
const SharedFD &fdStats,
const SharedFD &fdParams,
- const ControlInfoMap &sensorInfoMap)
+ const IPACameraSensorInfo &sensorInfo,
+ const ControlInfoMap &sensorControls,
+ ControlInfoMap *ipaControls,
+ bool *ccmEnabled)
{
camHelper_ = CameraSensorHelperFactoryBase::create(settings.sensorModel);
if (!camHelper_) {
@@ -116,6 +105,8 @@ int IPASoftSimple::init(const IPASettings &settings,
<< settings.sensorModel;
}
+ context_.sensorInfo = sensorInfo;
+
/* Load the tuning data file */
File file(settings.configurationFile);
if (!file.open(File::OpenModeFlag::ReadOnly)) {
@@ -134,6 +125,17 @@ int IPASoftSimple::init(const IPASettings &settings,
unsigned int version = (*data)["version"].get<uint32_t>(0);
LOG(IPASoft, Debug) << "Tuning file version " << version;
+ if (!data->contains("algorithms")) {
+ LOG(IPASoft, Error) << "Tuning file doesn't contain algorithms";
+ return -EINVAL;
+ }
+
+ int ret = createAlgorithms(context_, (*data)["algorithms"]);
+ if (ret)
+ return ret;
+
+ *ccmEnabled = context_.ccmEnabled;
+
params_ = nullptr;
stats_ = nullptr;
@@ -169,18 +171,21 @@ int IPASoftSimple::init(const IPASettings &settings,
stats_ = static_cast<SwIspStats *>(mem);
}
+ ControlInfoMap::Map ctrlMap = context_.ctrlMap;
+ *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
+
/*
* Check if the sensor driver supports the controls required by the
* Soft IPA.
* Don't save the min and max control values yet, as e.g. the limits
* for V4L2_CID_EXPOSURE depend on the configured sensor resolution.
*/
- if (sensorInfoMap.find(V4L2_CID_EXPOSURE) == sensorInfoMap.end()) {
+ if (sensorControls.find(V4L2_CID_EXPOSURE) == sensorControls.end()) {
LOG(IPASoft, Error) << "Don't have exposure control";
return -EINVAL;
}
- if (sensorInfoMap.find(V4L2_CID_ANALOGUE_GAIN) == sensorInfoMap.end()) {
+ if (sensorControls.find(V4L2_CID_ANALOGUE_GAIN) == sensorControls.end()) {
LOG(IPASoft, Error) << "Don't have gain control";
return -EINVAL;
}
@@ -188,27 +193,47 @@ int IPASoftSimple::init(const IPASettings &settings,
return 0;
}
-int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)
+int IPASoftSimple::configure(const IPAConfigInfo &configInfo)
{
- sensorInfoMap_ = sensorInfoMap;
+ sensorInfoMap_ = configInfo.sensorControls;
const ControlInfo &exposureInfo = sensorInfoMap_.find(V4L2_CID_EXPOSURE)->second;
const ControlInfo &gainInfo = sensorInfoMap_.find(V4L2_CID_ANALOGUE_GAIN)->second;
- exposureMin_ = exposureInfo.min().get<int32_t>();
- exposureMax_ = exposureInfo.max().get<int32_t>();
- if (!exposureMin_) {
+ /* Clear the IPA context before the streaming session. */
+ context_.configuration = {};
+ context_.activeState = {};
+ context_.frameContexts.clear();
+
+ context_.configuration.agc.lineDuration =
+ context_.sensorInfo.minLineLength * 1.0s / context_.sensorInfo.pixelRate;
+ context_.configuration.agc.exposureMin = exposureInfo.min().get<int32_t>();
+ context_.configuration.agc.exposureMax = exposureInfo.max().get<int32_t>();
+ if (!context_.configuration.agc.exposureMin) {
LOG(IPASoft, Warning) << "Minimum exposure is zero, that can't be linear";
- exposureMin_ = 1;
+ context_.configuration.agc.exposureMin = 1;
}
int32_t againMin = gainInfo.min().get<int32_t>();
int32_t againMax = gainInfo.max().get<int32_t>();
if (camHelper_) {
- againMin_ = camHelper_->gain(againMin);
- againMax_ = camHelper_->gain(againMax);
- againMinStep_ = (againMax_ - againMin_) / 100.0;
+ context_.configuration.agc.againMin = camHelper_->gain(againMin);
+ context_.configuration.agc.againMax = camHelper_->gain(againMax);
+ context_.configuration.agc.againMinStep =
+ (context_.configuration.agc.againMax -
+ context_.configuration.agc.againMin) /
+ 100.0;
+ if (camHelper_->blackLevel().has_value()) {
+ /*
+ * The black level from camHelper_ is a 16 bit value, software ISP
+ * works with 8 bit pixel values, both regardless of the actual
+ * sensor pixel width. Hence we obtain the pixel-based black value
+ * by dividing the value from the helper by 256.
+ */
+ context_.configuration.black.level =
+ camHelper_->blackLevel().value() / 256;
+ }
} else {
/*
* The camera sensor gain (g) is usually not equal to the value written
@@ -220,18 +245,28 @@ int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)
* the AGC algorithm (abrupt near one edge, and very small near the
* other) we limit the range of the gain values used.
*/
- againMax_ = againMax;
+ context_.configuration.agc.againMax = againMax;
if (!againMin) {
LOG(IPASoft, Warning)
<< "Minimum gain is zero, that can't be linear";
- againMin_ = std::min(100, againMin / 2 + againMax / 2);
+ context_.configuration.agc.againMin =
+ std::min(100, againMin / 2 + againMax / 2);
}
- againMinStep_ = 1.0;
+ context_.configuration.agc.againMinStep = 1.0;
+ }
+
+ for (auto const &algo : algorithms()) {
+ int ret = algo->configure(context_, configInfo);
+ if (ret)
+ return ret;
}
- LOG(IPASoft, Info) << "Exposure " << exposureMin_ << "-" << exposureMax_
- << ", gain " << againMin_ << "-" << againMax_
- << " (" << againMinStep_ << ")";
+ LOG(IPASoft, Info)
+ << "Exposure " << context_.configuration.agc.exposureMin << "-"
+ << context_.configuration.agc.exposureMax
+ << ", gain " << context_.configuration.agc.againMin << "-"
+ << context_.configuration.agc.againMax
+ << " (" << context_.configuration.agc.againMinStep << ")";
return 0;
}
@@ -243,107 +278,40 @@ int IPASoftSimple::start()
void IPASoftSimple::stop()
{
+ context_.frameContexts.clear();
}
-void IPASoftSimple::processStats(const ControlList &sensorControls)
+void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &controls)
{
- SwIspStats::Histogram histogram = stats_->yHistogram;
- if (ignoreUpdates_ > 0)
- blackLevel_.update(histogram);
- const uint8_t blackLevel = blackLevel_.get();
-
- /*
- * Black level must be subtracted to get the correct AWB ratios, they
- * would be off if they were computed from the whole brightness range
- * rather than from the sensor range.
- */
- const uint64_t nPixels = std::accumulate(
- histogram.begin(), histogram.end(), 0);
- const uint64_t offset = blackLevel * nPixels;
- const uint64_t sumR = stats_->sumR_ - offset / 4;
- const uint64_t sumG = stats_->sumG_ - offset / 2;
- const uint64_t sumB = stats_->sumB_ - offset / 4;
-
- /*
- * Calculate red and blue gains for AWB.
- * Clamp max gain at 4.0, this also avoids 0 division.
- * Gain: 128 = 0.5, 256 = 1.0, 512 = 2.0, etc.
- */
- const unsigned int gainR = sumR <= sumG / 4 ? 1024 : 256 * sumG / sumR;
- const unsigned int gainB = sumB <= sumG / 4 ? 1024 : 256 * sumG / sumB;
- /* Green gain and gamma values are fixed */
- constexpr unsigned int gainG = 256;
-
- /* Update the gamma table if needed */
- if (blackLevel != lastBlackLevel_) {
- constexpr float gamma = 0.5;
- const unsigned int blackIndex = blackLevel * kGammaLookupSize / 256;
- std::fill(gammaTable_.begin(), gammaTable_.begin() + blackIndex, 0);
- const float divisor = kGammaLookupSize - blackIndex - 1.0;
- for (unsigned int i = blackIndex; i < kGammaLookupSize; i++)
- gammaTable_[i] = UINT8_MAX *
- std::pow((i - blackIndex) / divisor, gamma);
-
- lastBlackLevel_ = blackLevel;
- }
-
- for (unsigned int i = 0; i < DebayerParams::kRGBLookupSize; i++) {
- constexpr unsigned int div =
- DebayerParams::kRGBLookupSize * 256 / kGammaLookupSize;
- unsigned int idx;
+ IPAFrameContext &frameContext = context_.frameContexts.alloc(frame);
- /* Apply gamma after gain! */
- idx = std::min({ i * gainR / div, (kGammaLookupSize - 1) });
- params_->red[i] = gammaTable_[idx];
-
- idx = std::min({ i * gainG / div, (kGammaLookupSize - 1) });
- params_->green[i] = gammaTable_[idx];
-
- idx = std::min({ i * gainB / div, (kGammaLookupSize - 1) });
- params_->blue[i] = gammaTable_[idx];
- }
+ for (auto const &algo : algorithms())
+ algo->queueRequest(context_, frame, frameContext, controls);
+}
+void IPASoftSimple::computeParams(const uint32_t frame)
+{
+ IPAFrameContext &frameContext = context_.frameContexts.get(frame);
+ for (auto const &algo : algorithms())
+ algo->prepare(context_, frame, frameContext, params_);
setIspParams.emit();
+}
- /* \todo Switch to the libipa/algorithm.h API someday. */
-
- /*
- * AE / AGC, use 2 frames delay to make sure that the exposure and
- * the gain set have applied to the camera sensor.
- * \todo This could be handled better with DelayedControls.
- */
- if (ignoreUpdates_ > 0) {
- --ignoreUpdates_;
- return;
- }
-
- /*
- * Calculate Mean Sample Value (MSV) according to formula from:
- * https://www.araa.asn.au/acra/acra2007/papers/paper84final.pdf
- */
- const unsigned int blackLevelHistIdx =
- blackLevel / (256 / SwIspStats::kYHistogramSize);
- const unsigned int histogramSize =
- SwIspStats::kYHistogramSize - blackLevelHistIdx;
- const unsigned int yHistValsPerBin = histogramSize / kExposureBinsCount;
- const unsigned int yHistValsPerBinMod =
- histogramSize / (histogramSize % kExposureBinsCount + 1);
- int exposureBins[kExposureBinsCount] = {};
- unsigned int denom = 0;
- unsigned int num = 0;
-
- for (unsigned int i = 0; i < histogramSize; i++) {
- unsigned int idx = (i - (i / yHistValsPerBinMod)) / yHistValsPerBin;
- exposureBins[idx] += stats_->yHistogram[blackLevelHistIdx + i];
- }
+void IPASoftSimple::processStats(const uint32_t frame,
+ [[maybe_unused]] const uint32_t bufferId,
+ const ControlList &sensorControls)
+{
+ IPAFrameContext &frameContext = context_.frameContexts.get(frame);
- for (unsigned int i = 0; i < kExposureBinsCount; i++) {
- LOG(IPASoft, Debug) << i << ": " << exposureBins[i];
- denom += exposureBins[i];
- num += exposureBins[i] * (i + 1);
- }
+ frameContext.sensor.exposure =
+ sensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();
+ int32_t again = sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>();
+ frameContext.sensor.gain = camHelper_ ? camHelper_->gain(again) : again;
- float exposureMSV = static_cast<float>(num) / denom;
+ ControlList metadata(controls::controls);
+ for (auto const &algo : algorithms())
+ algo->process(context_, frame, frameContext, stats_, metadata);
+ metadataReady.emit(frame, metadata);
/* Sanity check */
if (!sensorControls.contains(V4L2_CID_EXPOSURE) ||
@@ -352,73 +320,19 @@ void IPASoftSimple::processStats(const ControlList &sensorControls)
return;
}
- exposure_ = sensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();
- int32_t again = sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>();
- again_ = camHelper_ ? camHelper_->gain(again) : again;
-
- updateExposure(exposureMSV);
-
ControlList ctrls(sensorInfoMap_);
- ctrls.set(V4L2_CID_EXPOSURE, exposure_);
+ auto &againNew = frameContext.sensor.gain;
+ ctrls.set(V4L2_CID_EXPOSURE, frameContext.sensor.exposure);
ctrls.set(V4L2_CID_ANALOGUE_GAIN,
- static_cast<int32_t>(camHelper_ ? camHelper_->gainCode(again_) : again_));
-
- ignoreUpdates_ = 2;
+ static_cast<int32_t>(camHelper_ ? camHelper_->gainCode(againNew) : againNew));
setSensorControls.emit(ctrls);
-
- LOG(IPASoft, Debug) << "exposureMSV " << exposureMSV
- << " exp " << exposure_ << " again " << again_
- << " gain R/B " << gainR << "/" << gainB
- << " black level " << static_cast<unsigned int>(blackLevel);
}
-void IPASoftSimple::updateExposure(double exposureMSV)
+std::string IPASoftSimple::logPrefix() const
{
- /*
- * kExpDenominator of 10 gives ~10% increment/decrement;
- * kExpDenominator of 5 - about ~20%
- */
- static constexpr uint8_t kExpDenominator = 10;
- static constexpr uint8_t kExpNumeratorUp = kExpDenominator + 1;
- static constexpr uint8_t kExpNumeratorDown = kExpDenominator - 1;
-
- double next;
-
- if (exposureMSV < kExposureOptimal - kExposureSatisfactory) {
- next = exposure_ * kExpNumeratorUp / kExpDenominator;
- if (next - exposure_ < 1)
- exposure_ += 1;
- else
- exposure_ = next;
- if (exposure_ >= exposureMax_) {
- next = again_ * kExpNumeratorUp / kExpDenominator;
- if (next - again_ < againMinStep_)
- again_ += againMinStep_;
- else
- again_ = next;
- }
- }
-
- if (exposureMSV > kExposureOptimal + kExposureSatisfactory) {
- if (exposure_ == exposureMax_ && again_ > againMin_) {
- next = again_ * kExpNumeratorDown / kExpDenominator;
- if (again_ - next < againMinStep_)
- again_ -= againMinStep_;
- else
- again_ = next;
- } else {
- next = exposure_ * kExpNumeratorDown / kExpDenominator;
- if (exposure_ - next < 1)
- exposure_ -= 1;
- else
- exposure_ = next;
- }
- }
-
- exposure_ = std::clamp(exposure_, exposureMin_, exposureMax_);
- again_ = std::clamp(again_, againMin_, againMax_);
+ return "IPASoft";
}
} /* namespace ipa::soft */
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index ebd63fa6..a1351a0f 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -14,6 +14,7 @@
#include <iostream>
#include <libcamera/base/file.h>
+#include <libcamera/base/flags.h>
#include <libcamera/base/log.h>
#include <libcamera/ipa/ipa_interface.h>
@@ -47,7 +48,7 @@ public:
void unmapBuffers(const std::vector<unsigned int> &ids) override;
void queueRequest(uint32_t frame, const ControlList &controls) override;
- void fillParamsBuffer(uint32_t frame, uint32_t bufferId) override;
+ void computeParams(uint32_t frame, uint32_t bufferId) override;
private:
void initTrace();
@@ -149,7 +150,7 @@ void IPAVimc::queueRequest([[maybe_unused]] uint32_t frame,
{
}
-void IPAVimc::fillParamsBuffer([[maybe_unused]] uint32_t frame, uint32_t bufferId)
+void IPAVimc::computeParams([[maybe_unused]] uint32_t frame, uint32_t bufferId)
{
auto it = buffers_.find(bufferId);
if (it == buffers_.end()) {
@@ -158,7 +159,7 @@ void IPAVimc::fillParamsBuffer([[maybe_unused]] uint32_t frame, uint32_t bufferI
}
Flags<ipa::vimc::TestFlag> flags;
- paramsBufferReady.emit(bufferId, flags);
+ paramsComputed.emit(bufferId, flags);
}
void IPAVimc::initTrace()