summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUmang Jain <umang.jain@ideasonboard.com>2022-03-03 20:19:10 +0530
committerUmang Jain <umang.jain@ideasonboard.com>2022-03-28 17:01:17 +0530
commit36f0cd57cb4091022bb18533277950fdbab0f09e (patch)
treee76f4716a01423d0b7da7163ec2dfe0cc7ff2741
parenta76b06e951bcab4adf740898cc13a3ddd56cbe8b (diff)
ipa: ipu3: Drop sensor controls private members from IPAIPU3
Drop exposure, gain private members from IPAIPU3 because the values are handled directly via IPAFrameContext. Move the default vblank value from IPAIPU3 to IPASessionConfiguration structure as it is a default static value not expected to change for a session. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/ipa/ipu3/ipa_context.cpp3
-rw-r--r--src/ipa/ipu3/ipa_context.h1
-rw-r--r--src/ipa/ipu3/ipu3.cpp29
3 files changed, 13 insertions, 20 deletions
diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
index 1b59c918..b1570dde 100644
--- a/src/ipa/ipu3/ipa_context.cpp
+++ b/src/ipa/ipu3/ipa_context.cpp
@@ -115,6 +115,9 @@ namespace libcamera::ipa::ipu3 {
*
* \var IPASessionConfiguration::sensor.lineDuration
* \brief Line duration in microseconds
+ *
+ * \var IPASessionConfiguration::sensor.defVBlank
+ * \brief The default vblank value of the sensor
*/
/**
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index 6b7a512e..103498ef 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -37,6 +37,7 @@ struct IPASessionConfiguration {
} agc;
struct {
+ int32_t defVBlank;
utils::Duration lineDuration;
} sensor;
};
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index a8cc2f6c..3717d893 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -166,11 +166,6 @@ private:
IPACameraSensorInfo sensorInfo_;
- /* Camera sensor controls. */
- uint32_t defVBlank_;
- uint32_t exposure_;
- uint32_t gain_;
-
/* Interface to the Camera Helper */
std::unique_ptr<CameraSensorHelper> camHelper_;
@@ -187,15 +182,16 @@ private:
*/
void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)
{
+ const ControlInfo vBlank = sensorControls.find(V4L2_CID_VBLANK)->second;
+ context_.configuration.sensor.defVBlank = vBlank.def().get<int32_t>();
+
const ControlInfo &v4l2Exposure = sensorControls.find(V4L2_CID_EXPOSURE)->second;
int32_t minExposure = v4l2Exposure.min().get<int32_t>();
int32_t maxExposure = v4l2Exposure.max().get<int32_t>();
- exposure_ = minExposure;
const ControlInfo &v4l2Gain = sensorControls.find(V4L2_CID_ANALOGUE_GAIN)->second;
int32_t minGain = v4l2Gain.min().get<int32_t>();
int32_t maxGain = v4l2Gain.max().get<int32_t>();
- gain_ = minGain;
/*
* When the AGC computes the new exposure values for a frame, it needs
@@ -432,14 +428,6 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo,
*/
sensorCtrls_ = configInfo.sensorControls;
- const auto itVBlank = sensorCtrls_.find(V4L2_CID_VBLANK);
- if (itVBlank == sensorCtrls_.end()) {
- LOG(IPAIPU3, Error) << "Can't find VBLANK control";
- return -EINVAL;
- }
-
- defVBlank_ = itVBlank->second.def().get<int32_t>();
-
calculateBdsGrid(configInfo.bdsOutputSize);
/* Clean frameContext at each reconfiguration. */
@@ -605,6 +593,7 @@ void IPAIPU3::parseStatistics(unsigned int frame,
const ipu3_uapi_stats_3a *stats)
{
double lineDuration = context_.configuration.sensor.lineDuration.get<std::micro>();
+ int32_t vBlank = context_.configuration.sensor.defVBlank;
ControlList ctrls(controls::controls);
for (auto const &algo : algorithms_)
@@ -613,7 +602,7 @@ void IPAIPU3::parseStatistics(unsigned int frame,
setControls(frame);
/* \todo Use VBlank value calculated from each frame exposure. */
- int64_t frameDuration = (defVBlank_ + sensorInfo_.outputSize.height) * lineDuration;
+ int64_t frameDuration = (vBlank + sensorInfo_.outputSize.height) * lineDuration;
ctrls.set(controls::FrameDuration, frameDuration);
ctrls.set(controls::AnalogueGain, context_.frameContext.sensor.gain);
@@ -649,12 +638,12 @@ void IPAIPU3::setControls(unsigned int frame)
IPU3Action op;
op.op = ActionSetSensorControls;
- exposure_ = context_.frameContext.agc.exposure;
- gain_ = camHelper_->gainCode(context_.frameContext.agc.gain);
+ int32_t exposure = context_.frameContext.agc.exposure;
+ int32_t gain = camHelper_->gainCode(context_.frameContext.agc.gain);
ControlList ctrls(sensorCtrls_);
- ctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure_));
- ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain_));
+ ctrls.set(V4L2_CID_EXPOSURE, exposure);
+ ctrls.set(V4L2_CID_ANALOGUE_GAIN, gain);
op.sensorControls = ctrls;
ControlList lensCtrls(lensCtrls_);