ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls
The ControlInfos of non-scalar controls that are reported in controls() must have non-scalar default values for controls that have a defined size. This is because applications should be able to directly set the default value from a ControlInfo to the control. Currently this is relevant to the following controls: - ColourGains - ColourCorrectionMatrix - FrameDurationLimits - AfWindows Fix the scalarness of these controls where relevant. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Tested-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> # rkisp1 Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
committed by
Kieran Bingham
parent
cfdc281100
commit
4e9be7d11b
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <libcamera/base/file.h>
|
#include <libcamera/base/file.h>
|
||||||
#include <libcamera/base/log.h>
|
#include <libcamera/base/log.h>
|
||||||
|
#include <libcamera/base/span.h>
|
||||||
#include <libcamera/base/utils.h>
|
#include <libcamera/base/utils.h>
|
||||||
|
|
||||||
#include <libcamera/control_ids.h>
|
#include <libcamera/control_ids.h>
|
||||||
@@ -280,10 +281,9 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo,
|
|||||||
uint64_t frameSize = lineLength * frameHeights[i];
|
uint64_t frameSize = lineLength * frameHeights[i];
|
||||||
frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
|
frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
|
||||||
}
|
}
|
||||||
|
|
||||||
controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
|
controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
|
||||||
frameDurations[1],
|
frameDurations[1],
|
||||||
frameDurations[2]);
|
Span<const int64_t, 2>{ { frameDurations[2], frameDurations[2] } });
|
||||||
|
|
||||||
controls.merge(context_.ctrlMap);
|
controls.merge(context_.ctrlMap);
|
||||||
*ipaControls = ControlInfoMap(std::move(controls), controls::controls);
|
*ipaControls = ControlInfoMap(std::move(controls), controls::controls);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
* Mali-C55 ISP image processing algorithms
|
* Mali-C55 ISP image processing algorithms
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -14,6 +15,7 @@
|
|||||||
|
|
||||||
#include <libcamera/base/file.h>
|
#include <libcamera/base/file.h>
|
||||||
#include <libcamera/base/log.h>
|
#include <libcamera/base/log.h>
|
||||||
|
#include <libcamera/base/span.h>
|
||||||
|
|
||||||
#include <libcamera/control_ids.h>
|
#include <libcamera/control_ids.h>
|
||||||
#include <libcamera/ipa/ipa_interface.h>
|
#include <libcamera/ipa/ipa_interface.h>
|
||||||
@@ -236,7 +238,7 @@ void IPAMaliC55::updateControls(const IPACameraSensorInfo &sensorInfo,
|
|||||||
|
|
||||||
ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
|
ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
|
||||||
frameDurations[1],
|
frameDurations[1],
|
||||||
frameDurations[2]);
|
Span<const int64_t, 2>{ { frameDurations[2], frameDurations[2] } });
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute exposure time limits from the V4L2_CID_EXPOSURE control
|
* Compute exposure time limits from the V4L2_CID_EXPOSURE control
|
||||||
|
|||||||
@@ -91,7 +91,9 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)
|
|||||||
kMaxColourTemperature,
|
kMaxColourTemperature,
|
||||||
kDefaultColourTemperature);
|
kDefaultColourTemperature);
|
||||||
cmap[&controls::AwbEnable] = ControlInfo(false, true);
|
cmap[&controls::AwbEnable] = ControlInfo(false, true);
|
||||||
cmap[&controls::ColourGains] = ControlInfo(0.0f, 3.996f, 1.0f);
|
|
||||||
|
cmap[&controls::ColourGains] = ControlInfo(0.0f, 3.996f,
|
||||||
|
Span<const float, 2>{ { 1.0f, 1.0f } });
|
||||||
|
|
||||||
if (!tuningData.contains("algorithm"))
|
if (!tuningData.contains("algorithm"))
|
||||||
LOG(RkISP1Awb, Info) << "No AWB algorithm specified."
|
LOG(RkISP1Awb, Info) << "No AWB algorithm specified."
|
||||||
|
|||||||
@@ -439,7 +439,8 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,
|
|||||||
|
|
||||||
/* \todo Move this (and other agc-related controls) to agc */
|
/* \todo Move this (and other agc-related controls) to agc */
|
||||||
context_.ctrlMap[&controls::FrameDurationLimits] =
|
context_.ctrlMap[&controls::FrameDurationLimits] =
|
||||||
ControlInfo(frameDurations[0], frameDurations[1], frameDurations[2]);
|
ControlInfo(frameDurations[0], frameDurations[1],
|
||||||
|
ControlValue(Span<const int64_t, 2>{ { frameDurations[2], frameDurations[2] } }));
|
||||||
|
|
||||||
ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());
|
ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());
|
||||||
*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
|
*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "ipa_base.h"
|
#include "ipa_base.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include <libcamera/base/log.h>
|
#include <libcamera/base/log.h>
|
||||||
@@ -105,7 +106,8 @@ const ControlInfoMap::Map ipaAfControls{
|
|||||||
{ &controls::AfRange, ControlInfo(controls::AfRangeValues) },
|
{ &controls::AfRange, ControlInfo(controls::AfRangeValues) },
|
||||||
{ &controls::AfSpeed, ControlInfo(controls::AfSpeedValues) },
|
{ &controls::AfSpeed, ControlInfo(controls::AfSpeedValues) },
|
||||||
{ &controls::AfMetering, ControlInfo(controls::AfMeteringValues) },
|
{ &controls::AfMetering, ControlInfo(controls::AfMeteringValues) },
|
||||||
{ &controls::AfWindows, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
|
{ &controls::AfWindows, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535),
|
||||||
|
Span<const Rectangle, 1>{ { Rectangle{} } }) },
|
||||||
{ &controls::AfTrigger, ControlInfo(controls::AfTriggerValues) },
|
{ &controls::AfTrigger, ControlInfo(controls::AfTriggerValues) },
|
||||||
{ &controls::AfPause, ControlInfo(controls::AfPauseValues) },
|
{ &controls::AfPause, ControlInfo(controls::AfPauseValues) },
|
||||||
{ &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) }
|
{ &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) }
|
||||||
@@ -246,7 +248,8 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa
|
|||||||
ctrlMap[&controls::FrameDurationLimits] =
|
ctrlMap[&controls::FrameDurationLimits] =
|
||||||
ControlInfo(static_cast<int64_t>(mode_.minFrameDuration.get<std::micro>()),
|
ControlInfo(static_cast<int64_t>(mode_.minFrameDuration.get<std::micro>()),
|
||||||
static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()),
|
static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()),
|
||||||
static_cast<int64_t>(defaultMinFrameDuration.get<std::micro>()));
|
Span<const int64_t, 2>{ { static_cast<int64_t>(defaultMinFrameDuration.get<std::micro>()),
|
||||||
|
static_cast<int64_t>(defaultMinFrameDuration.get<std::micro>()) } });
|
||||||
|
|
||||||
ctrlMap[&controls::AnalogueGain] =
|
ctrlMap[&controls::AnalogueGain] =
|
||||||
ControlInfo(static_cast<float>(mode_.minAnalogueGain),
|
ControlInfo(static_cast<float>(mode_.minAnalogueGain),
|
||||||
|
|||||||
Reference in New Issue
Block a user