Message ID | 20240502080925.31730-4-naush@raspberrypi.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On Thu, May 02, 2024 at 09:09:23AM GMT, Naushir Patuck wrote: > Add support for the following HDR modes in the Raspberry Pi IPA: > - Night mode > - Single exposure mode > - Multi-exposure (merged and unmerged) > > The algorithm is updated to expect the HDR short channel to meter > explicitly for highlights. This means that it will not in general > under-expose the short channel more than is actually necessary. > > When images don't have much saturation, it's good to detect this so > that some of the boost we want to apply to the dark areas can be > implemented as regular gain. This means we can then adjust the tone > curve less, leading to less flat looking images. > > The impact on the HDR algorithm is then that this determines how we > build tonemaps dynamically. The highlights are more-or-less correct > now, so we have to build a power-type curve that gives us the > appropriately configured targets in the lower part of the histogram. > > We allow the tuning file to supply the maximum spatial gain value, > rather than the whole curve (though it can supply this if it > wants). Some parameter defaults are tweaked to be generally better > across the range of our cameras. > > Signed-off-by: David Plowman <david.plowman@raspberrypi.com> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com> > Reviewed-by: David Plowman <david.plowman@raspberrypi.com> > Reviewed-by: Naushir Patuck <naush@raspberrypi.com> > --- > src/ipa/rpi/common/ipa_base.cpp | 78 ++- > src/ipa/rpi/common/ipa_base.h | 7 + These changes to the common IPA looks ok Acked-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> The rest is your private stuff, so I trust you there ;) > src/ipa/rpi/controller/rpi/hdr.cpp | 112 +++- > src/ipa/rpi/controller/rpi/hdr.h | 10 +- > src/ipa/rpi/vc4/data/imx219.json | 607 ++++++++++--------- > src/ipa/rpi/vc4/data/imx219_noir.json | 607 ++++++++++--------- > src/ipa/rpi/vc4/data/imx290.json | 15 +- > src/ipa/rpi/vc4/data/imx296.json | 17 +- > src/ipa/rpi/vc4/data/imx296_mono.json | 17 +- > src/ipa/rpi/vc4/data/imx378.json | 15 +- > src/ipa/rpi/vc4/data/imx477.json | 615 ++++++++++---------- > src/ipa/rpi/vc4/data/imx477_noir.json | 607 ++++++++++--------- > src/ipa/rpi/vc4/data/imx477_scientific.json | 15 +- > src/ipa/rpi/vc4/data/imx477_v1.json | 15 +- > src/ipa/rpi/vc4/data/imx519.json | 15 +- > src/ipa/rpi/vc4/data/imx708.json | 555 +++++++++--------- > src/ipa/rpi/vc4/data/imx708_noir.json | 555 +++++++++--------- > src/ipa/rpi/vc4/data/imx708_wide.json | 555 +++++++++--------- > src/ipa/rpi/vc4/data/imx708_wide_noir.json | 555 +++++++++--------- > src/ipa/rpi/vc4/data/ov5647.json | 611 +++++++++---------- > src/ipa/rpi/vc4/data/ov5647_noir.json | 15 +- > src/ipa/rpi/vc4/data/ov9281_mono.json | 5 +- > src/ipa/rpi/vc4/data/se327m12.json | 15 +- > src/ipa/rpi/vc4/data/uncalibrated.json | 5 +- > 24 files changed, 3040 insertions(+), 2583 deletions(-) > > diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp > index 3c133c55943a..149a133ab662 100644 > --- a/src/ipa/rpi/common/ipa_base.cpp > +++ b/src/ipa/rpi/common/ipa_base.cpp > @@ -25,7 +25,6 @@ > #include "controller/contrast_algorithm.h" > #include "controller/denoise_algorithm.h" > #include "controller/hdr_algorithm.h" > -#include "controller/hdr_status.h" > #include "controller/lux_status.h" > #include "controller/sharpen_algorithm.h" > #include "controller/statistics.h" > @@ -104,9 +103,8 @@ LOG_DEFINE_CATEGORY(IPARPI) > namespace ipa::RPi { > > IpaBase::IpaBase() > - : controller_(), frameLengths_(FrameLengthsQueueSize, 0s), statsMetadataOutput_(false), > - frameCount_(0), mistrustCount_(0), lastRunTimestamp_(0), firstStart_(true), > - flickerState_({ 0, 0s }) > + : controller_(), frameLengths_(FrameLengthsQueueSize, 0s), stitchSwapBuffers_(false), frameCount_(0), > + mistrustCount_(0), lastRunTimestamp_(0), firstStart_(true), flickerState_({ 0, 0s }) > { > } > > @@ -299,6 +297,8 @@ void IpaBase::start(const ControlList &controls, StartResult *result) > result->controls = std::move(ctrls); > setCameraTimeoutValue(); > } > + /* Make a note of this as it tells us the HDR status of the first few frames. */ > + hdrStatus_ = agcStatus.hdr; > > /* > * Initialise frame counts, and decide how many frames must be hidden or > @@ -402,11 +402,17 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) > * sensor exposure/gain changes. So fetch it from the metadata list > * indexed by the IPA cookie returned, and put it in the current frame > * metadata. > + * > + * Note if the HDR mode has changed, as things like tonemaps may need updating. > */ > AgcStatus agcStatus; > + bool hdrChange = false; > RPiController::Metadata &delayedMetadata = rpiMetadata_[params.delayContext]; > - if (!delayedMetadata.get<AgcStatus>("agc.status", agcStatus)) > + if (!delayedMetadata.get<AgcStatus>("agc.status", agcStatus)) { > rpiMetadata.set("agc.delayed_status", agcStatus); > + hdrChange = agcStatus.hdr.mode != hdrStatus_.mode; > + hdrStatus_ = agcStatus.hdr; > + } > > /* > * This may overwrite the DeviceStatus using values from the sensor > @@ -417,7 +423,7 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) > /* Allow a 10% margin on the comparison below. */ > Duration delta = (frameTimestamp - lastRunTimestamp_) * 1.0ns; > if (lastRunTimestamp_ && frameCount_ > dropFrameCount_ && > - delta < controllerMinFrameDuration * 0.9) { > + delta < controllerMinFrameDuration * 0.9 && !hdrChange) { > /* > * Ensure we merge the previous frame's metadata with the current > * frame. This will not overwrite exposure/gain values for the > @@ -454,7 +460,7 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) > reportMetadata(ipaContext); > > /* Ready to push the input buffer into the ISP. */ > - prepareIspComplete.emit(params.buffers, false); > + prepareIspComplete.emit(params.buffers, stitchSwapBuffers_); > } > > void IpaBase::processStats(const ProcessParams ¶ms) > @@ -695,14 +701,18 @@ static const std::map<int32_t, RPiController::AfAlgorithm::AfPause> AfPauseTable > > static const std::map<int32_t, std::string> HdrModeTable = { > { controls::HdrModeOff, "Off" }, > + { controls::HdrModeMultiExposureUnmerged, "MultiExposureUnmerged" }, > { controls::HdrModeMultiExposure, "MultiExposure" }, > { controls::HdrModeSingleExposure, "SingleExposure" }, > + { controls::HdrModeNight, "Night" }, > }; > > void IpaBase::applyControls(const ControlList &controls) > { > using RPiController::AgcAlgorithm; > using RPiController::AfAlgorithm; > + using RPiController::ContrastAlgorithm; > + using RPiController::DenoiseAlgorithm; > using RPiController::HdrAlgorithm; > > /* Clear the return metadata buffer. */ > @@ -1194,9 +1204,32 @@ void IpaBase::applyControls(const ControlList &controls) > break; > } > > - if (hdr->setMode(mode->second) == 0) > + if (hdr->setMode(mode->second) == 0) { > agc->setActiveChannels(hdr->getChannels()); > - else > + > + /* We also disable adpative contrast enhancement if HDR is running. */ > + ContrastAlgorithm *contrast = > + dynamic_cast<ContrastAlgorithm *>(controller_.getAlgorithm("contrast")); > + if (contrast) { > + if (mode->second == "Off") > + contrast->restoreCe(); > + else > + contrast->enableCe(false); > + } > + > + DenoiseAlgorithm *denoise = > + dynamic_cast<DenoiseAlgorithm *>(controller_.getAlgorithm("denoise")); > + if (denoise) { > + /* \todo - make the HDR mode say what denoise it wants? */ > + if (mode->second == "Night") > + denoise->setConfig("night"); > + else if (mode->second == "SingleExposure") > + denoise->setConfig("hdr"); > + /* MultiExposure doesn't need extra extra denoise. */ > + else > + denoise->setConfig("normal"); > + } > + } else > LOG(IPARPI, Warning) > << "HDR mode " << mode->second << " not supported"; > > @@ -1354,12 +1387,31 @@ void IpaBase::reportMetadata(unsigned int ipaContext) > libcameraMetadata_.set(controls::AfPauseState, p); > } > > - const HdrStatus *hdrStatus = rpiMetadata.getLocked<HdrStatus>("hdr.status"); > - if (hdrStatus) { > - if (hdrStatus->channel == "short") > + /* > + * THe HDR algorithm sets the HDR channel into the agc.status at the time that those > + * AGC parameters were calculated several frames ago, so it comes back to us now in > + * the delayed_status. If this frame is too soon after a mode switch for the > + * delayed_status to be available, we use the HDR status that came out of the > + * switchMode call. > + */ > + const AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.delayed_status"); > + const HdrStatus &hdrStatus = agcStatus ? agcStatus->hdr : hdrStatus_; > + if (!hdrStatus.mode.empty() && hdrStatus.mode != "Off") { > + int32_t hdrMode = controls::HdrModeOff; > + for (auto const &[mode, name] : HdrModeTable) { > + if (hdrStatus.mode == name) { > + hdrMode = mode; > + break; > + } > + } > + libcameraMetadata_.set(controls::HdrMode, hdrMode); > + > + if (hdrStatus.channel == "short") > libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelShort); > - else if (hdrStatus->channel == "long") > + else if (hdrStatus.channel == "long") > libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelLong); > + else if (hdrStatus.channel == "medium") > + libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelMedium); > else > libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelNone); > } > diff --git a/src/ipa/rpi/common/ipa_base.h b/src/ipa/rpi/common/ipa_base.h > index 4db4411eed7c..512d7e8fe778 100644 > --- a/src/ipa/rpi/common/ipa_base.h > +++ b/src/ipa/rpi/common/ipa_base.h > @@ -22,6 +22,7 @@ > #include "controller/agc_status.h" > #include "controller/camera_mode.h" > #include "controller/controller.h" > +#include "controller/hdr_status.h" > #include "controller/metadata.h" > > namespace libcamera { > @@ -64,6 +65,12 @@ protected: > ControlList libcameraMetadata_; > bool statsMetadataOutput_; > > + /* Remember the HDR status after a mode switch. */ > + HdrStatus hdrStatus_; > + > + /* Whether the stitch block (if available) needs to swap buffers. */ > + bool stitchSwapBuffers_; > + > private: > /* Number of metadata objects available in the context list. */ > static constexpr unsigned int numMetadataContexts = 16; > diff --git a/src/ipa/rpi/controller/rpi/hdr.cpp b/src/ipa/rpi/controller/rpi/hdr.cpp > index fb580548d068..28c2280a0fe2 100644 > --- a/src/ipa/rpi/controller/rpi/hdr.cpp > +++ b/src/ipa/rpi/controller/rpi/hdr.cpp > @@ -7,6 +7,8 @@ > > #include "hdr.h" > > +#include <cmath> > + > #include <libcamera/base/log.h> > > #include "../agc_status.h" > @@ -39,25 +41,52 @@ void HdrConfig::read(const libcamera::YamlObject ¶ms, const std::string &mod > channelMap[v.get<unsigned int>().value()] = k; > > /* Lens shading related parameters. */ > - if (params.contains("spatial_gain")) { > - spatialGain.read(params["spatial_gain"]); > - diffusion = params["diffusion"].get<unsigned int>(3); > - /* Clip to an arbitrary limit just to stop typos from killing the system! */ > - const unsigned int MAX_DIFFUSION = 15; > - if (diffusion > MAX_DIFFUSION) { > - diffusion = MAX_DIFFUSION; > - LOG(RPiHdr, Warning) << "Diffusion value clipped to " << MAX_DIFFUSION; > - } > + if (params.contains("spatial_gain_curve")) { > + spatialGainCurve.read(params["spatial_gain_curve"]); > + } else if (params.contains("spatial_gain")) { > + double spatialGain = params["spatial_gain"].get<double>(2.0); > + spatialGainCurve.append(0.0, spatialGain); > + spatialGainCurve.append(0.01, spatialGain); > + spatialGainCurve.append(0.06, 1.0); /* maybe make this programmable? */ > + spatialGainCurve.append(1.0, 1.0); > + } > + > + diffusion = params["diffusion"].get<unsigned int>(3); > + /* Clip to an arbitrary limit just to stop typos from killing the system! */ > + const unsigned int MAX_DIFFUSION = 15; > + if (diffusion > MAX_DIFFUSION) { > + diffusion = MAX_DIFFUSION; > + LOG(RPiHdr, Warning) << "Diffusion value clipped to " << MAX_DIFFUSION; > } > > /* Read any tonemap parameters. */ > tonemapEnable = params["tonemap_enable"].get<int>(0); > - detailConstant = params["detail_constant"].get<uint16_t>(50); > - detailSlope = params["detail_slope"].get<double>(8.0); > + detailConstant = params["detail_constant"].get<uint16_t>(0); > + detailSlope = params["detail_slope"].get<double>(0.0); > iirStrength = params["iir_strength"].get<double>(8.0); > strength = params["strength"].get<double>(1.5); > if (tonemapEnable) > tonemap.read(params["tonemap"]); > + speed = params["speed"].get<double>(1.0); > + if (params.contains("hi_quantile_targets")) { > + hiQuantileTargets = params["hi_quantile_targets"].getList<double>().value(); > + if (hiQuantileTargets.empty() || hiQuantileTargets.size() % 2) > + LOG(RPiHdr, Fatal) << "hi_quantile_targets much be even and non-empty"; > + } else > + hiQuantileTargets = { 0.95, 0.65, 0.5, 0.28, 0.3, 0.25 }; > + hiQuantileMaxGain = params["hi_quantile_max_gain"].get<double>(1.6); > + if (params.contains("quantile_targets")) { > + quantileTargets = params["quantile_targets"].getList<double>().value(); > + if (quantileTargets.empty() || quantileTargets.size() % 2) > + LOG(RPiHdr, Fatal) << "quantile_targets much be even and non-empty"; > + } else > + quantileTargets = { 0.2, 0.03, 1.0, 0.15 }; > + powerMin = params["power_min"].get<double>(0.65); > + powerMax = params["power_max"].get<double>(1.0); > + if (params.contains("contrast_adjustments")) { > + contrastAdjustments = params["contrast_adjustments"].getList<double>().value(); > + } else > + contrastAdjustments = { 0.5, 0.75 }; > > /* Read any stitch parameters. */ > stitchEnable = params["stitch_enable"].get<int>(0); > @@ -159,7 +188,7 @@ void Hdr::prepare(Metadata *imageMetadata) > } > > HdrConfig &config = it->second; > - if (config.spatialGain.empty()) > + if (config.spatialGainCurve.empty()) > return; > > AlscStatus alscStatus{}; /* some compilers seem to require the braces */ > @@ -205,10 +234,61 @@ bool Hdr::updateTonemap([[maybe_unused]] StatisticsPtr &stats, HdrConfig &config > return true; > > /* > - * If we wanted to build or adjust tonemaps dynamically, this would be the place > - * to do it. But for now we seem to be getting by without. > + * Create a tonemap dynamically. We have three ingredients. > + * > + * 1. We have a list of "hi quantiles" and "targets". We use these to judge if > + * the image does seem to be reasonably saturated. If it isn't, we calculate > + * a gain that we will feed as a linear factor into the tonemap generation. > + * This prevents unsaturated images from beoming quite so "flat". > + * > + * 2. We have a list of quantile/target pairs for the bottom of the histogram. > + * We use these to calculate how much gain we must apply to the bottom of the > + * tonemap. We apply this gain as a power curve so as not to blow out the top > + * end. > + * > + * 3. Finally, when we generate the tonemap, we have some contrast adjustments > + * for the bottom because we know that power curves can start quite steeply and > + * cause a washed-out look. > */ > > + /* Compute the linear gain from the headroom for saturation at the top. */ > + double gain = 10; /* arbitrary, but hiQuantileMaxGain will clamp it later */ > + for (unsigned int i = 0; i < config.hiQuantileTargets.size(); i += 2) { > + double quantile = config.hiQuantileTargets[i]; > + double target = config.hiQuantileTargets[i + 1]; > + double value = stats->yHist.interQuantileMean(quantile, 1.0) / 1024.0; > + double newGain = target / (value + 0.01); > + gain = std::min(gain, newGain); > + } > + gain = std::clamp(gain, 1.0, config.hiQuantileMaxGain); > + > + /* Compute the power curve from the amount of gain needed at the bottom. */ > + double min_power = 2; /* arbitrary, but config.powerMax will clamp it later */ > + for (unsigned int i = 0; i < config.quantileTargets.size(); i += 2) { > + double quantile = config.quantileTargets[i]; > + double target = config.quantileTargets[i + 1]; > + double value = stats->yHist.interQuantileMean(0, quantile) / 1024.0; > + value = std::min(value * gain, 1.0); > + double power = log(target + 1e-6) / log(value + 1e-6); > + min_power = std::min(min_power, power); > + } > + double power = std::clamp(min_power, config.powerMin, config.powerMax); > + > + /* Generate the tonemap, including the contrast adjustment factors. */ > + Pwl tonemap; > + tonemap.append(0, 0); > + for (unsigned int i = 0; i <= 6; i++) { > + double x = 1 << (i + 9); /* x loops from 512 to 32768 inclusive */ > + double y = pow(std::min(x * gain, 65535.0) / 65536.0, power) * 65536; > + if (i < config.contrastAdjustments.size()) > + y *= config.contrastAdjustments[i]; > + if (!tonemap_.empty()) > + y = y * config.speed + tonemap_.eval(x) * (1 - config.speed); > + tonemap.append(x, y); > + } > + tonemap.append(65535, 65535); > + tonemap_ = tonemap; > + > return true; > } > > @@ -255,7 +335,7 @@ static void averageGains(std::vector<double> &src, std::vector<double> &dst, con > > void Hdr::updateGains(StatisticsPtr &stats, HdrConfig &config) > { > - if (config.spatialGain.empty()) > + if (config.spatialGainCurve.empty()) > return; > > /* When alternating exposures, only compute these gains for the short frame. */ > @@ -270,7 +350,7 @@ void Hdr::updateGains(StatisticsPtr &stats, HdrConfig &config) > double g = region.val.gSum / counted; > double b = region.val.bSum / counted; > double brightness = std::max({ r, g, b }) / 65535; > - gains_[0][i] = config.spatialGain.eval(brightness); > + gains_[0][i] = config.spatialGainCurve.eval(brightness); > } > > /* Ping-pong between the two gains_ buffers. */ > diff --git a/src/ipa/rpi/controller/rpi/hdr.h b/src/ipa/rpi/controller/rpi/hdr.h > index 980aa3d1850d..ac855b223d97 100644 > --- a/src/ipa/rpi/controller/rpi/hdr.h > +++ b/src/ipa/rpi/controller/rpi/hdr.h > @@ -26,7 +26,7 @@ struct HdrConfig { > std::map<unsigned int, std::string> channelMap; > > /* Lens shading related parameters. */ > - Pwl spatialGain; /* Brightness to gain curve for different image regions. */ > + Pwl spatialGainCurve; /* Brightness to gain curve for different image regions. */ > unsigned int diffusion; /* How much to diffuse the gain spatially. */ > > /* Tonemap related parameters. */ > @@ -36,6 +36,14 @@ struct HdrConfig { > double iirStrength; > double strength; > Pwl tonemap; > + /* These relate to adaptive tonemap calculation. */ > + double speed; > + std::vector<double> hiQuantileTargets; /* quantiles to check for unsaturated images */ > + double hiQuantileMaxGain; /* the max gain we'll apply when unsaturated */ > + std::vector<double> quantileTargets; /* target values for histogram quantiles */ > + double powerMin; /* minimum tonemap power */ > + double powerMax; /* maximum tonemap power */ > + std::vector<double> contrastAdjustments; /* any contrast adjustment factors */ > > /* Stitch related parameters. */ > bool stitchEnable; > diff --git a/src/ipa/rpi/vc4/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json > index 54defc0b8ab8..a020b12f553f 100644 > --- a/src/ipa/rpi/vc4/data/imx219.json > +++ b/src/ipa/rpi/vc4/data/imx219.json > @@ -131,282 +131,308 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - }, > - { > - "base_ev": 0.125, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - }, > - { > - "base_ev": 1.5, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - } > - ] > - } > + "channels": [ > + { > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + }, > + { > + "base_ev": 0.125, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + }, > + { > + "base_ev": 1.5, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -651,20 +677,19 @@ > { > "rpi.sharpen": { } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > } > diff --git a/src/ipa/rpi/vc4/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json > index e823a90dffa8..d8bc963962a4 100644 > --- a/src/ipa/rpi/vc4/data/imx219_noir.json > +++ b/src/ipa/rpi/vc4/data/imx219_noir.json > @@ -47,282 +47,308 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - }, > - { > - "base_ev": 0.125, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - }, > - { > - "base_ev": 1.5, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ] > - } > - ] > - } > + "channels": [ > + { > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + }, > + { > + "base_ev": 0.125, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + }, > + { > + "base_ev": 1.5, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -585,20 +611,19 @@ > { > "rpi.sharpen": { } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > } > diff --git a/src/ipa/rpi/vc4/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json > index 8a7cadba38a2..8f41bf519644 100644 > --- a/src/ipa/rpi/vc4/data/imx290.json > +++ b/src/ipa/rpi/vc4/data/imx290.json > @@ -52,15 +52,24 @@ > { > "matrix": > { > - "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json > index 7621f759fc3f..8f24ce5b819a 100644 > --- a/src/ipa/rpi/vc4/data/imx296.json > +++ b/src/ipa/rpi/vc4/data/imx296.json > @@ -135,15 +135,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > @@ -431,4 +440,4 @@ > } > } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json > index d4140c81bf0d..fe331569938e 100644 > --- a/src/ipa/rpi/vc4/data/imx296_mono.json > +++ b/src/ipa/rpi/vc4/data/imx296_mono.json > @@ -38,15 +38,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > @@ -228,4 +237,4 @@ > } > } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json > index f7b68011b634..363b47e19888 100644 > --- a/src/ipa/rpi/vc4/data/imx378.json > +++ b/src/ipa/rpi/vc4/data/imx378.json > @@ -133,15 +133,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json > index 853bfa67a9b7..fa25ee86004e 100644 > --- a/src/ipa/rpi/vc4/data/imx477.json > +++ b/src/ipa/rpi/vc4/data/imx477.json > @@ -115,16 +115,16 @@ > "ct_curve": > [ > 2360.0, 0.6009, 0.3093, > - 2848.0, 0.5071, 0.4000, > + 2848.0, 0.5071, 0.4, > 2903.0, 0.4905, 0.4392, > 3628.0, 0.4261, 0.5564, > 3643.0, 0.4228, 0.5623, > - 4660.0, 0.3529, 0.6800, > - 5579.0, 0.3227, 0.7000, > - 6125.0, 0.3129, 0.7100, > - 6671.0, 0.3065, 0.7200, > - 7217.0, 0.3014, 0.7300, > - 7763.0, 0.2950, 0.7400, > + 4660.0, 0.3529, 0.68, > + 5579.0, 0.3227, 0.7, > + 6125.0, 0.3129, 0.71, > + 6671.0, 0.3065, 0.72, > + 7217.0, 0.3014, 0.73, > + 7763.0, 0.295, 0.74, > 9505.0, 0.2524, 0.7856 > ], > "sensitivity_r": 1.05, > @@ -136,282 +136,308 @@ > { > "rpi.agc": > { > - "channels": > - [ > + "channels": [ > { > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - }, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + }, > { > - "base_ev": 0.125, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - }, > + "base_ev": 0.125, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + }, > { > - "base_ev": 1.5, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - } > - ] > - } > + "base_ev": 1.5, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -656,20 +682,19 @@ > { > "rpi.sharpen": { } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > } > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json > index 143e20bd92d8..472f33fe1556 100644 > --- a/src/ipa/rpi/vc4/data/imx477_noir.json > +++ b/src/ipa/rpi/vc4/data/imx477_noir.json > @@ -47,282 +47,308 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - }, > - { > - "base_ev": 0.125, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - }, > - { > - "base_ev": 1.5, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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 > - ] > - } > - ], > - "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 > - ] > - } > - ] > - } > + "channels": [ > + { > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + }, > + { > + "base_ev": 0.125, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + }, > + { > + "base_ev": 1.5, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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 > + ] > + } > + ], > + "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 > + ] > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -612,20 +638,19 @@ > { > "rpi.sharpen": { } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > } > diff --git a/src/ipa/rpi/vc4/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json > index 26c692fdbab9..9dc32eb1525c 100644 > --- a/src/ipa/rpi/vc4/data/imx477_scientific.json > +++ b/src/ipa/rpi/vc4/data/imx477_scientific.json > @@ -148,15 +148,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json > index d64020091efa..55e4adc1961d 100644 > --- a/src/ipa/rpi/vc4/data/imx477_v1.json > +++ b/src/ipa/rpi/vc4/data/imx477_v1.json > @@ -138,15 +138,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json > index 1b0a77476aab..ce19425683a6 100644 > --- a/src/ipa/rpi/vc4/data/imx519.json > +++ b/src/ipa/rpi/vc4/data/imx519.json > @@ -133,15 +133,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json > index 26aafc95c584..4de6f0796fd0 100644 > --- a/src/ipa/rpi/vc4/data/imx708.json > +++ b/src/ipa/rpi/vc4/data/imx708.json > @@ -139,255 +139,281 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 0.125, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 1.5, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - } > - ] > - } > + "channels": [ > + { > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 0.125, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 1.5, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -627,20 +653,19 @@ > "map": [ 0.0, 445, 15.0, 925 ] > } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json > index 8259ca4d0411..7b7ee874f66a 100644 > --- a/src/ipa/rpi/vc4/data/imx708_noir.json > +++ b/src/ipa/rpi/vc4/data/imx708_noir.json > @@ -139,255 +139,281 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 0.125, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 1.5, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - } > - ] > - } > + "channels": [ > + { > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 0.125, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 1.5, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -726,20 +752,19 @@ > "map": [ 0.0, 445, 15.0, 925 ] > } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json > index 0f846ea29393..6f45aafc0997 100644 > --- a/src/ipa/rpi/vc4/data/imx708_wide.json > +++ b/src/ipa/rpi/vc4/data/imx708_wide.json > @@ -129,255 +129,281 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 0.125, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 1.5, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - } > - ] > - } > + "channels": [ > + { > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 0.125, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 1.5, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -638,20 +664,19 @@ > "map": [ 0.0, 420, 35.0, 920 ] > } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json > index f12ddbb61fcd..b9a5227e1acc 100644 > --- a/src/ipa/rpi/vc4/data/imx708_wide_noir.json > +++ b/src/ipa/rpi/vc4/data/imx708_wide_noir.json > @@ -129,255 +129,281 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 0.125, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - }, > - { > - "base_ev": 1.5, > - "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, 15000, 30000, 60000, 120000 ], > - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 120000 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > - 1000, 0.2 > - ] > - } > - ], > - "highlight": [ > - { > - "bound": "LOWER", > - "q_lo": 0.98, > - "q_hi": 1.0, > - "y_target": > - [ > - 0, 0.2, > - 1000, 0.2 > - ] > - }, > - { > - "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 > - ], > - "startup_frames": 5, > - "convergence_frames": 6, > - "speed": 0.15 > - } > - ] > - } > + "channels": [ > + { > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 0.125, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + }, > + { > + "base_ev": 1.5, > + "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, 15000, 30000, 60000, 120000 ], > + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 120000 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, > + 1000, 0.2 > + ] > + } > + ], > + "highlight": [ > + { > + "bound": "LOWER", > + "q_lo": 0.98, > + "q_hi": 1.0, > + "y_target": > + [ > + 0, 0.2, > + 1000, 0.2 > + ] > + }, > + { > + "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 > + ], > + "startup_frames": 5, > + "convergence_frames": 6, > + "speed": 0.15 > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -629,20 +655,19 @@ > "map": [ 0.0, 420, 35.0, 920 ] > } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > -} > +} > \ No newline at end of file > diff --git a/src/ipa/rpi/vc4/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json > index 4def9ffc2dcb..40c6059c862b 100644 > --- a/src/ipa/rpi/vc4/data/ov5647.json > +++ b/src/ipa/rpi/vc4/data/ov5647.json > @@ -131,285 +131,309 @@ > { > "rpi.agc": > { > - "channels": > - [ > - { > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ], > - "base_ev": 1.25 > - }, > - { > - "base_ev": 0.125, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ], > - "base_ev": 1.25 > - }, > - { > - "base_ev": 1.5, > - "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, 66666 ], > - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > - }, > - "short": > - { > - "shutter": [ 100, 5000, 10000, 20000, 33333 ], > - "gain": [ 1.0, 2.0, 4.0, 6.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.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 > - ], > - "base_ev": 1.25 > - } > - ] > - } > + "channels": [ > + { > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ], > + "base_ev": 1.25 > + }, > + { > + "base_ev": 1.25, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + }, > + { > + "base_ev": 1.25, > + "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, 66666 ], > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] > + }, > + "short": > + { > + "shutter": [ 100, 5000, 10000, 20000, 33333 ], > + "gain": [ 1.0, 2.0, 4.0, 6.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.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 > + ] > + } > + ] > + } > }, > { > "rpi.alsc": > @@ -654,20 +678,19 @@ > { > "rpi.sharpen": { } > }, > - { > - "rpi.hdr": > - { > - "MultiExposure": > - { > - "cadence": [ 1, 2 ], > - "channel_map": { "short": 1, "long": 2 } > - }, > - "SingleExposure": > - { > - "cadence": [ 1 ], > - "channel_map": { "short": 1 } > - } > - } > - } > + { > + "rpi.hdr": > + { > + "MultiExposureUnmerged": > + { > + "cadence": [ 1, 2 ], > + "channel_map": > + { > + "short": 1, > + "long": 2 > + } > + } > + } > + } > ] > } > diff --git a/src/ipa/rpi/vc4/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json > index a6c6722f12a6..488b7119b17c 100644 > --- a/src/ipa/rpi/vc4/data/ov5647_noir.json > +++ b/src/ipa/rpi/vc4/data/ov5647_noir.json > @@ -51,15 +51,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json > index 2b7292ec7e20..a9d05a01b53f 100644 > --- a/src/ipa/rpi/vc4/data/ov9281_mono.json > +++ b/src/ipa/rpi/vc4/data/ov9281_mono.json > @@ -35,7 +35,10 @@ > { > "centre-weighted": > { > - "weights": [ 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "weights": > + [ > + 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json > index 8552ed92bce6..948169db2419 100644 > --- a/src/ipa/rpi/vc4/data/se327m12.json > +++ b/src/ipa/rpi/vc4/data/se327m12.json > @@ -133,15 +133,24 @@ > { > "centre-weighted": > { > - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "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 ] > + "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 ] > + "weights": > + [ > + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 > + ] > } > }, > "exposure_modes": > diff --git a/src/ipa/rpi/vc4/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json > index 7654defa6dfe..cdc56b323c2e 100644 > --- a/src/ipa/rpi/vc4/data/uncalibrated.json > +++ b/src/ipa/rpi/vc4/data/uncalibrated.json > @@ -22,7 +22,10 @@ > { > "centre-weighted": > { > - "weights": [ 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] > + "weights": > + [ > + 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 > + ] > } > }, > "exposure_modes": > -- > 2.34.1 >
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp index 3c133c55943a..149a133ab662 100644 --- a/src/ipa/rpi/common/ipa_base.cpp +++ b/src/ipa/rpi/common/ipa_base.cpp @@ -25,7 +25,6 @@ #include "controller/contrast_algorithm.h" #include "controller/denoise_algorithm.h" #include "controller/hdr_algorithm.h" -#include "controller/hdr_status.h" #include "controller/lux_status.h" #include "controller/sharpen_algorithm.h" #include "controller/statistics.h" @@ -104,9 +103,8 @@ LOG_DEFINE_CATEGORY(IPARPI) namespace ipa::RPi { IpaBase::IpaBase() - : controller_(), frameLengths_(FrameLengthsQueueSize, 0s), statsMetadataOutput_(false), - frameCount_(0), mistrustCount_(0), lastRunTimestamp_(0), firstStart_(true), - flickerState_({ 0, 0s }) + : controller_(), frameLengths_(FrameLengthsQueueSize, 0s), stitchSwapBuffers_(false), frameCount_(0), + mistrustCount_(0), lastRunTimestamp_(0), firstStart_(true), flickerState_({ 0, 0s }) { } @@ -299,6 +297,8 @@ void IpaBase::start(const ControlList &controls, StartResult *result) result->controls = std::move(ctrls); setCameraTimeoutValue(); } + /* Make a note of this as it tells us the HDR status of the first few frames. */ + hdrStatus_ = agcStatus.hdr; /* * Initialise frame counts, and decide how many frames must be hidden or @@ -402,11 +402,17 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) * sensor exposure/gain changes. So fetch it from the metadata list * indexed by the IPA cookie returned, and put it in the current frame * metadata. + * + * Note if the HDR mode has changed, as things like tonemaps may need updating. */ AgcStatus agcStatus; + bool hdrChange = false; RPiController::Metadata &delayedMetadata = rpiMetadata_[params.delayContext]; - if (!delayedMetadata.get<AgcStatus>("agc.status", agcStatus)) + if (!delayedMetadata.get<AgcStatus>("agc.status", agcStatus)) { rpiMetadata.set("agc.delayed_status", agcStatus); + hdrChange = agcStatus.hdr.mode != hdrStatus_.mode; + hdrStatus_ = agcStatus.hdr; + } /* * This may overwrite the DeviceStatus using values from the sensor @@ -417,7 +423,7 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) /* Allow a 10% margin on the comparison below. */ Duration delta = (frameTimestamp - lastRunTimestamp_) * 1.0ns; if (lastRunTimestamp_ && frameCount_ > dropFrameCount_ && - delta < controllerMinFrameDuration * 0.9) { + delta < controllerMinFrameDuration * 0.9 && !hdrChange) { /* * Ensure we merge the previous frame's metadata with the current * frame. This will not overwrite exposure/gain values for the @@ -454,7 +460,7 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) reportMetadata(ipaContext); /* Ready to push the input buffer into the ISP. */ - prepareIspComplete.emit(params.buffers, false); + prepareIspComplete.emit(params.buffers, stitchSwapBuffers_); } void IpaBase::processStats(const ProcessParams ¶ms) @@ -695,14 +701,18 @@ static const std::map<int32_t, RPiController::AfAlgorithm::AfPause> AfPauseTable static const std::map<int32_t, std::string> HdrModeTable = { { controls::HdrModeOff, "Off" }, + { controls::HdrModeMultiExposureUnmerged, "MultiExposureUnmerged" }, { controls::HdrModeMultiExposure, "MultiExposure" }, { controls::HdrModeSingleExposure, "SingleExposure" }, + { controls::HdrModeNight, "Night" }, }; void IpaBase::applyControls(const ControlList &controls) { using RPiController::AgcAlgorithm; using RPiController::AfAlgorithm; + using RPiController::ContrastAlgorithm; + using RPiController::DenoiseAlgorithm; using RPiController::HdrAlgorithm; /* Clear the return metadata buffer. */ @@ -1194,9 +1204,32 @@ void IpaBase::applyControls(const ControlList &controls) break; } - if (hdr->setMode(mode->second) == 0) + if (hdr->setMode(mode->second) == 0) { agc->setActiveChannels(hdr->getChannels()); - else + + /* We also disable adpative contrast enhancement if HDR is running. */ + ContrastAlgorithm *contrast = + dynamic_cast<ContrastAlgorithm *>(controller_.getAlgorithm("contrast")); + if (contrast) { + if (mode->second == "Off") + contrast->restoreCe(); + else + contrast->enableCe(false); + } + + DenoiseAlgorithm *denoise = + dynamic_cast<DenoiseAlgorithm *>(controller_.getAlgorithm("denoise")); + if (denoise) { + /* \todo - make the HDR mode say what denoise it wants? */ + if (mode->second == "Night") + denoise->setConfig("night"); + else if (mode->second == "SingleExposure") + denoise->setConfig("hdr"); + /* MultiExposure doesn't need extra extra denoise. */ + else + denoise->setConfig("normal"); + } + } else LOG(IPARPI, Warning) << "HDR mode " << mode->second << " not supported"; @@ -1354,12 +1387,31 @@ void IpaBase::reportMetadata(unsigned int ipaContext) libcameraMetadata_.set(controls::AfPauseState, p); } - const HdrStatus *hdrStatus = rpiMetadata.getLocked<HdrStatus>("hdr.status"); - if (hdrStatus) { - if (hdrStatus->channel == "short") + /* + * THe HDR algorithm sets the HDR channel into the agc.status at the time that those + * AGC parameters were calculated several frames ago, so it comes back to us now in + * the delayed_status. If this frame is too soon after a mode switch for the + * delayed_status to be available, we use the HDR status that came out of the + * switchMode call. + */ + const AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.delayed_status"); + const HdrStatus &hdrStatus = agcStatus ? agcStatus->hdr : hdrStatus_; + if (!hdrStatus.mode.empty() && hdrStatus.mode != "Off") { + int32_t hdrMode = controls::HdrModeOff; + for (auto const &[mode, name] : HdrModeTable) { + if (hdrStatus.mode == name) { + hdrMode = mode; + break; + } + } + libcameraMetadata_.set(controls::HdrMode, hdrMode); + + if (hdrStatus.channel == "short") libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelShort); - else if (hdrStatus->channel == "long") + else if (hdrStatus.channel == "long") libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelLong); + else if (hdrStatus.channel == "medium") + libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelMedium); else libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelNone); } diff --git a/src/ipa/rpi/common/ipa_base.h b/src/ipa/rpi/common/ipa_base.h index 4db4411eed7c..512d7e8fe778 100644 --- a/src/ipa/rpi/common/ipa_base.h +++ b/src/ipa/rpi/common/ipa_base.h @@ -22,6 +22,7 @@ #include "controller/agc_status.h" #include "controller/camera_mode.h" #include "controller/controller.h" +#include "controller/hdr_status.h" #include "controller/metadata.h" namespace libcamera { @@ -64,6 +65,12 @@ protected: ControlList libcameraMetadata_; bool statsMetadataOutput_; + /* Remember the HDR status after a mode switch. */ + HdrStatus hdrStatus_; + + /* Whether the stitch block (if available) needs to swap buffers. */ + bool stitchSwapBuffers_; + private: /* Number of metadata objects available in the context list. */ static constexpr unsigned int numMetadataContexts = 16; diff --git a/src/ipa/rpi/controller/rpi/hdr.cpp b/src/ipa/rpi/controller/rpi/hdr.cpp index fb580548d068..28c2280a0fe2 100644 --- a/src/ipa/rpi/controller/rpi/hdr.cpp +++ b/src/ipa/rpi/controller/rpi/hdr.cpp @@ -7,6 +7,8 @@ #include "hdr.h" +#include <cmath> + #include <libcamera/base/log.h> #include "../agc_status.h" @@ -39,25 +41,52 @@ void HdrConfig::read(const libcamera::YamlObject ¶ms, const std::string &mod channelMap[v.get<unsigned int>().value()] = k; /* Lens shading related parameters. */ - if (params.contains("spatial_gain")) { - spatialGain.read(params["spatial_gain"]); - diffusion = params["diffusion"].get<unsigned int>(3); - /* Clip to an arbitrary limit just to stop typos from killing the system! */ - const unsigned int MAX_DIFFUSION = 15; - if (diffusion > MAX_DIFFUSION) { - diffusion = MAX_DIFFUSION; - LOG(RPiHdr, Warning) << "Diffusion value clipped to " << MAX_DIFFUSION; - } + if (params.contains("spatial_gain_curve")) { + spatialGainCurve.read(params["spatial_gain_curve"]); + } else if (params.contains("spatial_gain")) { + double spatialGain = params["spatial_gain"].get<double>(2.0); + spatialGainCurve.append(0.0, spatialGain); + spatialGainCurve.append(0.01, spatialGain); + spatialGainCurve.append(0.06, 1.0); /* maybe make this programmable? */ + spatialGainCurve.append(1.0, 1.0); + } + + diffusion = params["diffusion"].get<unsigned int>(3); + /* Clip to an arbitrary limit just to stop typos from killing the system! */ + const unsigned int MAX_DIFFUSION = 15; + if (diffusion > MAX_DIFFUSION) { + diffusion = MAX_DIFFUSION; + LOG(RPiHdr, Warning) << "Diffusion value clipped to " << MAX_DIFFUSION; } /* Read any tonemap parameters. */ tonemapEnable = params["tonemap_enable"].get<int>(0); - detailConstant = params["detail_constant"].get<uint16_t>(50); - detailSlope = params["detail_slope"].get<double>(8.0); + detailConstant = params["detail_constant"].get<uint16_t>(0); + detailSlope = params["detail_slope"].get<double>(0.0); iirStrength = params["iir_strength"].get<double>(8.0); strength = params["strength"].get<double>(1.5); if (tonemapEnable) tonemap.read(params["tonemap"]); + speed = params["speed"].get<double>(1.0); + if (params.contains("hi_quantile_targets")) { + hiQuantileTargets = params["hi_quantile_targets"].getList<double>().value(); + if (hiQuantileTargets.empty() || hiQuantileTargets.size() % 2) + LOG(RPiHdr, Fatal) << "hi_quantile_targets much be even and non-empty"; + } else + hiQuantileTargets = { 0.95, 0.65, 0.5, 0.28, 0.3, 0.25 }; + hiQuantileMaxGain = params["hi_quantile_max_gain"].get<double>(1.6); + if (params.contains("quantile_targets")) { + quantileTargets = params["quantile_targets"].getList<double>().value(); + if (quantileTargets.empty() || quantileTargets.size() % 2) + LOG(RPiHdr, Fatal) << "quantile_targets much be even and non-empty"; + } else + quantileTargets = { 0.2, 0.03, 1.0, 0.15 }; + powerMin = params["power_min"].get<double>(0.65); + powerMax = params["power_max"].get<double>(1.0); + if (params.contains("contrast_adjustments")) { + contrastAdjustments = params["contrast_adjustments"].getList<double>().value(); + } else + contrastAdjustments = { 0.5, 0.75 }; /* Read any stitch parameters. */ stitchEnable = params["stitch_enable"].get<int>(0); @@ -159,7 +188,7 @@ void Hdr::prepare(Metadata *imageMetadata) } HdrConfig &config = it->second; - if (config.spatialGain.empty()) + if (config.spatialGainCurve.empty()) return; AlscStatus alscStatus{}; /* some compilers seem to require the braces */ @@ -205,10 +234,61 @@ bool Hdr::updateTonemap([[maybe_unused]] StatisticsPtr &stats, HdrConfig &config return true; /* - * If we wanted to build or adjust tonemaps dynamically, this would be the place - * to do it. But for now we seem to be getting by without. + * Create a tonemap dynamically. We have three ingredients. + * + * 1. We have a list of "hi quantiles" and "targets". We use these to judge if + * the image does seem to be reasonably saturated. If it isn't, we calculate + * a gain that we will feed as a linear factor into the tonemap generation. + * This prevents unsaturated images from beoming quite so "flat". + * + * 2. We have a list of quantile/target pairs for the bottom of the histogram. + * We use these to calculate how much gain we must apply to the bottom of the + * tonemap. We apply this gain as a power curve so as not to blow out the top + * end. + * + * 3. Finally, when we generate the tonemap, we have some contrast adjustments + * for the bottom because we know that power curves can start quite steeply and + * cause a washed-out look. */ + /* Compute the linear gain from the headroom for saturation at the top. */ + double gain = 10; /* arbitrary, but hiQuantileMaxGain will clamp it later */ + for (unsigned int i = 0; i < config.hiQuantileTargets.size(); i += 2) { + double quantile = config.hiQuantileTargets[i]; + double target = config.hiQuantileTargets[i + 1]; + double value = stats->yHist.interQuantileMean(quantile, 1.0) / 1024.0; + double newGain = target / (value + 0.01); + gain = std::min(gain, newGain); + } + gain = std::clamp(gain, 1.0, config.hiQuantileMaxGain); + + /* Compute the power curve from the amount of gain needed at the bottom. */ + double min_power = 2; /* arbitrary, but config.powerMax will clamp it later */ + for (unsigned int i = 0; i < config.quantileTargets.size(); i += 2) { + double quantile = config.quantileTargets[i]; + double target = config.quantileTargets[i + 1]; + double value = stats->yHist.interQuantileMean(0, quantile) / 1024.0; + value = std::min(value * gain, 1.0); + double power = log(target + 1e-6) / log(value + 1e-6); + min_power = std::min(min_power, power); + } + double power = std::clamp(min_power, config.powerMin, config.powerMax); + + /* Generate the tonemap, including the contrast adjustment factors. */ + Pwl tonemap; + tonemap.append(0, 0); + for (unsigned int i = 0; i <= 6; i++) { + double x = 1 << (i + 9); /* x loops from 512 to 32768 inclusive */ + double y = pow(std::min(x * gain, 65535.0) / 65536.0, power) * 65536; + if (i < config.contrastAdjustments.size()) + y *= config.contrastAdjustments[i]; + if (!tonemap_.empty()) + y = y * config.speed + tonemap_.eval(x) * (1 - config.speed); + tonemap.append(x, y); + } + tonemap.append(65535, 65535); + tonemap_ = tonemap; + return true; } @@ -255,7 +335,7 @@ static void averageGains(std::vector<double> &src, std::vector<double> &dst, con void Hdr::updateGains(StatisticsPtr &stats, HdrConfig &config) { - if (config.spatialGain.empty()) + if (config.spatialGainCurve.empty()) return; /* When alternating exposures, only compute these gains for the short frame. */ @@ -270,7 +350,7 @@ void Hdr::updateGains(StatisticsPtr &stats, HdrConfig &config) double g = region.val.gSum / counted; double b = region.val.bSum / counted; double brightness = std::max({ r, g, b }) / 65535; - gains_[0][i] = config.spatialGain.eval(brightness); + gains_[0][i] = config.spatialGainCurve.eval(brightness); } /* Ping-pong between the two gains_ buffers. */ diff --git a/src/ipa/rpi/controller/rpi/hdr.h b/src/ipa/rpi/controller/rpi/hdr.h index 980aa3d1850d..ac855b223d97 100644 --- a/src/ipa/rpi/controller/rpi/hdr.h +++ b/src/ipa/rpi/controller/rpi/hdr.h @@ -26,7 +26,7 @@ struct HdrConfig { std::map<unsigned int, std::string> channelMap; /* Lens shading related parameters. */ - Pwl spatialGain; /* Brightness to gain curve for different image regions. */ + Pwl spatialGainCurve; /* Brightness to gain curve for different image regions. */ unsigned int diffusion; /* How much to diffuse the gain spatially. */ /* Tonemap related parameters. */ @@ -36,6 +36,14 @@ struct HdrConfig { double iirStrength; double strength; Pwl tonemap; + /* These relate to adaptive tonemap calculation. */ + double speed; + std::vector<double> hiQuantileTargets; /* quantiles to check for unsaturated images */ + double hiQuantileMaxGain; /* the max gain we'll apply when unsaturated */ + std::vector<double> quantileTargets; /* target values for histogram quantiles */ + double powerMin; /* minimum tonemap power */ + double powerMax; /* maximum tonemap power */ + std::vector<double> contrastAdjustments; /* any contrast adjustment factors */ /* Stitch related parameters. */ bool stitchEnable; diff --git a/src/ipa/rpi/vc4/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json index 54defc0b8ab8..a020b12f553f 100644 --- a/src/ipa/rpi/vc4/data/imx219.json +++ b/src/ipa/rpi/vc4/data/imx219.json @@ -131,282 +131,308 @@ { "rpi.agc": { - "channels": - [ - { - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - }, - { - "base_ev": 0.125, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - }, - { - "base_ev": 1.5, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - } - ] - } + "channels": [ + { + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + }, + { + "base_ev": 0.125, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + }, + { + "base_ev": 1.5, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + } + ] + } }, { "rpi.alsc": @@ -651,20 +677,19 @@ { "rpi.sharpen": { } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] } diff --git a/src/ipa/rpi/vc4/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json index e823a90dffa8..d8bc963962a4 100644 --- a/src/ipa/rpi/vc4/data/imx219_noir.json +++ b/src/ipa/rpi/vc4/data/imx219_noir.json @@ -47,282 +47,308 @@ { "rpi.agc": { - "channels": - [ - { - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - }, - { - "base_ev": 0.125, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - }, - { - "base_ev": 1.5, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ] - } - ] - } + "channels": [ + { + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + }, + { + "base_ev": 0.125, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + }, + { + "base_ev": 1.5, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + } + ] + } }, { "rpi.alsc": @@ -585,20 +611,19 @@ { "rpi.sharpen": { } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] } diff --git a/src/ipa/rpi/vc4/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json index 8a7cadba38a2..8f41bf519644 100644 --- a/src/ipa/rpi/vc4/data/imx290.json +++ b/src/ipa/rpi/vc4/data/imx290.json @@ -52,15 +52,24 @@ { "matrix": { - "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] + "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 ] + "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 ] + "weights": + [ + 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json index 7621f759fc3f..8f24ce5b819a 100644 --- a/src/ipa/rpi/vc4/data/imx296.json +++ b/src/ipa/rpi/vc4/data/imx296.json @@ -135,15 +135,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": @@ -431,4 +440,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json index d4140c81bf0d..fe331569938e 100644 --- a/src/ipa/rpi/vc4/data/imx296_mono.json +++ b/src/ipa/rpi/vc4/data/imx296_mono.json @@ -38,15 +38,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": @@ -228,4 +237,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json index f7b68011b634..363b47e19888 100644 --- a/src/ipa/rpi/vc4/data/imx378.json +++ b/src/ipa/rpi/vc4/data/imx378.json @@ -133,15 +133,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json index 853bfa67a9b7..fa25ee86004e 100644 --- a/src/ipa/rpi/vc4/data/imx477.json +++ b/src/ipa/rpi/vc4/data/imx477.json @@ -115,16 +115,16 @@ "ct_curve": [ 2360.0, 0.6009, 0.3093, - 2848.0, 0.5071, 0.4000, + 2848.0, 0.5071, 0.4, 2903.0, 0.4905, 0.4392, 3628.0, 0.4261, 0.5564, 3643.0, 0.4228, 0.5623, - 4660.0, 0.3529, 0.6800, - 5579.0, 0.3227, 0.7000, - 6125.0, 0.3129, 0.7100, - 6671.0, 0.3065, 0.7200, - 7217.0, 0.3014, 0.7300, - 7763.0, 0.2950, 0.7400, + 4660.0, 0.3529, 0.68, + 5579.0, 0.3227, 0.7, + 6125.0, 0.3129, 0.71, + 6671.0, 0.3065, 0.72, + 7217.0, 0.3014, 0.73, + 7763.0, 0.295, 0.74, 9505.0, 0.2524, 0.7856 ], "sensitivity_r": 1.05, @@ -136,282 +136,308 @@ { "rpi.agc": { - "channels": - [ + "channels": [ { - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - }, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + }, { - "base_ev": 0.125, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - }, + "base_ev": 0.125, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + }, { - "base_ev": 1.5, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - } - ] - } + "base_ev": 1.5, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + } + ] + } }, { "rpi.alsc": @@ -656,20 +682,19 @@ { "rpi.sharpen": { } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] } \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json index 143e20bd92d8..472f33fe1556 100644 --- a/src/ipa/rpi/vc4/data/imx477_noir.json +++ b/src/ipa/rpi/vc4/data/imx477_noir.json @@ -47,282 +47,308 @@ { "rpi.agc": { - "channels": - [ - { - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - }, - { - "base_ev": 0.125, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - }, - { - "base_ev": 1.5, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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 - ] - } - ], - "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 - ] - } - ] - } + "channels": [ + { + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + }, + { + "base_ev": 0.125, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + }, + { + "base_ev": 1.5, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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 + ] + } + ], + "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 + ] + } + ] + } }, { "rpi.alsc": @@ -612,20 +638,19 @@ { "rpi.sharpen": { } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] } diff --git a/src/ipa/rpi/vc4/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json index 26c692fdbab9..9dc32eb1525c 100644 --- a/src/ipa/rpi/vc4/data/imx477_scientific.json +++ b/src/ipa/rpi/vc4/data/imx477_scientific.json @@ -148,15 +148,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json index d64020091efa..55e4adc1961d 100644 --- a/src/ipa/rpi/vc4/data/imx477_v1.json +++ b/src/ipa/rpi/vc4/data/imx477_v1.json @@ -138,15 +138,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json index 1b0a77476aab..ce19425683a6 100644 --- a/src/ipa/rpi/vc4/data/imx519.json +++ b/src/ipa/rpi/vc4/data/imx519.json @@ -133,15 +133,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json index 26aafc95c584..4de6f0796fd0 100644 --- a/src/ipa/rpi/vc4/data/imx708.json +++ b/src/ipa/rpi/vc4/data/imx708.json @@ -139,255 +139,281 @@ { "rpi.agc": { - "channels": - [ - { - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 0.125, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 1.5, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - } - ] - } + "channels": [ + { + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 0.125, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 1.5, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + } + ] + } }, { "rpi.alsc": @@ -627,20 +653,19 @@ "map": [ 0.0, 445, 15.0, 925 ] } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json index 8259ca4d0411..7b7ee874f66a 100644 --- a/src/ipa/rpi/vc4/data/imx708_noir.json +++ b/src/ipa/rpi/vc4/data/imx708_noir.json @@ -139,255 +139,281 @@ { "rpi.agc": { - "channels": - [ - { - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 0.125, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 1.5, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - } - ] - } + "channels": [ + { + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 0.125, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 1.5, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + } + ] + } }, { "rpi.alsc": @@ -726,20 +752,19 @@ "map": [ 0.0, 445, 15.0, 925 ] } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json index 0f846ea29393..6f45aafc0997 100644 --- a/src/ipa/rpi/vc4/data/imx708_wide.json +++ b/src/ipa/rpi/vc4/data/imx708_wide.json @@ -129,255 +129,281 @@ { "rpi.agc": { - "channels": - [ - { - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 0.125, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 1.5, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - } - ] - } + "channels": [ + { + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 0.125, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 1.5, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + } + ] + } }, { "rpi.alsc": @@ -638,20 +664,19 @@ "map": [ 0.0, 420, 35.0, 920 ] } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json index f12ddbb61fcd..b9a5227e1acc 100644 --- a/src/ipa/rpi/vc4/data/imx708_wide_noir.json +++ b/src/ipa/rpi/vc4/data/imx708_wide_noir.json @@ -129,255 +129,281 @@ { "rpi.agc": { - "channels": - [ - { - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 0.125, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - }, - { - "base_ev": 1.5, - "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, 15000, 30000, 60000, 120000 ], - "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 120000 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, - 1000, 0.2 - ] - } - ], - "highlight": [ - { - "bound": "LOWER", - "q_lo": 0.98, - "q_hi": 1.0, - "y_target": - [ - 0, 0.2, - 1000, 0.2 - ] - }, - { - "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 - ], - "startup_frames": 5, - "convergence_frames": 6, - "speed": 0.15 - } - ] - } + "channels": [ + { + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 0.125, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + }, + { + "base_ev": 1.5, + "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, 15000, 30000, 60000, 120000 ], + "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 120000 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 6.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.2, + 1000, 0.2 + ] + } + ], + "highlight": [ + { + "bound": "LOWER", + "q_lo": 0.98, + "q_hi": 1.0, + "y_target": + [ + 0, 0.2, + 1000, 0.2 + ] + }, + { + "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 + ], + "startup_frames": 5, + "convergence_frames": 6, + "speed": 0.15 + } + ] + } }, { "rpi.alsc": @@ -629,20 +655,19 @@ "map": [ 0.0, 420, 35.0, 920 ] } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] -} +} \ No newline at end of file diff --git a/src/ipa/rpi/vc4/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json index 4def9ffc2dcb..40c6059c862b 100644 --- a/src/ipa/rpi/vc4/data/ov5647.json +++ b/src/ipa/rpi/vc4/data/ov5647.json @@ -131,285 +131,309 @@ { "rpi.agc": { - "channels": - [ - { - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ], - "base_ev": 1.25 - }, - { - "base_ev": 0.125, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ], - "base_ev": 1.25 - }, - { - "base_ev": 1.5, - "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, 66666 ], - "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] - }, - "short": - { - "shutter": [ 100, 5000, 10000, 20000, 33333 ], - "gain": [ 1.0, 2.0, 4.0, 6.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.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 - ], - "base_ev": 1.25 - } - ] - } + "channels": [ + { + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ], + "base_ev": 1.25 + }, + { + "base_ev": 1.25, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + }, + { + "base_ev": 1.25, + "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, 66666 ], + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ] + }, + "short": + { + "shutter": [ 100, 5000, 10000, 20000, 33333 ], + "gain": [ 1.0, 2.0, 4.0, 6.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.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 + ] + } + ] + } }, { "rpi.alsc": @@ -654,20 +678,19 @@ { "rpi.sharpen": { } }, - { - "rpi.hdr": - { - "MultiExposure": - { - "cadence": [ 1, 2 ], - "channel_map": { "short": 1, "long": 2 } - }, - "SingleExposure": - { - "cadence": [ 1 ], - "channel_map": { "short": 1 } - } - } - } + { + "rpi.hdr": + { + "MultiExposureUnmerged": + { + "cadence": [ 1, 2 ], + "channel_map": + { + "short": 1, + "long": 2 + } + } + } + } ] } diff --git a/src/ipa/rpi/vc4/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json index a6c6722f12a6..488b7119b17c 100644 --- a/src/ipa/rpi/vc4/data/ov5647_noir.json +++ b/src/ipa/rpi/vc4/data/ov5647_noir.json @@ -51,15 +51,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json index 2b7292ec7e20..a9d05a01b53f 100644 --- a/src/ipa/rpi/vc4/data/ov9281_mono.json +++ b/src/ipa/rpi/vc4/data/ov9281_mono.json @@ -35,7 +35,10 @@ { "centre-weighted": { - "weights": [ 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "weights": + [ + 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json index 8552ed92bce6..948169db2419 100644 --- a/src/ipa/rpi/vc4/data/se327m12.json +++ b/src/ipa/rpi/vc4/data/se327m12.json @@ -133,15 +133,24 @@ { "centre-weighted": { - "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "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 ] + "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 ] + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] } }, "exposure_modes": diff --git a/src/ipa/rpi/vc4/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json index 7654defa6dfe..cdc56b323c2e 100644 --- a/src/ipa/rpi/vc4/data/uncalibrated.json +++ b/src/ipa/rpi/vc4/data/uncalibrated.json @@ -22,7 +22,10 @@ { "centre-weighted": { - "weights": [ 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ] + "weights": + [ + 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 + ] } }, "exposure_modes":