[libcamera-devel] [PATCH v3 1/3] libcamera: ipu3: Move Imgu configuration to IPU3CameraData
Jean-Michel Hautbois
jeanmichel.hautbois at ideasonboard.com
Tue Mar 16 15:47:09 CET 2021
The IPU3 IPA needs to know the BayerDownScaler (BDS) configuration to
calculate the statistics grids.
This patch makes it possible for PipelineHandlerIPU3::start() to access
the BDS configuration and later pass the rectangle to the IPU3 IPA
configure method.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
---
v3:
- remove bds argument which is in a separate patch
- split in two patches ipa configure moving
v2:
- move pipe configuration calculation from validate to configure
- move ipa configuration from start to configure
---
src/libcamera/pipeline/ipu3/ipu3.cpp | 38 +++++++++++++---------------
1 file changed, 18 insertions(+), 20 deletions(-)
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 2ea13ec9..65657dcc 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -97,11 +97,14 @@ public:
Status validate() override;
const StreamConfiguration &cio2Format() const { return cio2Configuration_; }
- const ImgUDevice::PipeConfig imguConfig() const { return pipeConfig_; }
/* Cache the combinedTransform_ that will be applied to the sensor */
Transform combinedTransform_;
+ /* Store the pipe configuration */
+ ImgUDevice::PipeConfig pipeConfig_;
+ ImgUDevice::Pipe pipe_;
+
private:
/*
* The IPU3CameraData instance is guaranteed to be valid as long as the
@@ -111,7 +114,6 @@ private:
const IPU3CameraData *data_;
StreamConfiguration cio2Configuration_;
- ImgUDevice::PipeConfig pipeConfig_;
};
class PipelineHandlerIPU3 : public PipelineHandler
@@ -170,6 +172,7 @@ IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
CameraConfiguration::Status IPU3CameraConfiguration::validate()
{
Status status = Valid;
+ pipe_ = {};
if (config_.empty())
return Invalid;
@@ -272,8 +275,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
LOG(IPU3, Debug) << "CIO2 configuration: " << cio2Configuration_.toString();
- ImgUDevice::Pipe pipe{};
- pipe.input = cio2Configuration_.size;
+ pipe_.input = cio2Configuration_.size;
/*
* Adjust the configurations if needed and assign streams while
@@ -349,15 +351,15 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
cfg->setStream(const_cast<Stream *>(&data_->outStream_));
mainOutputAvailable = false;
- pipe.main = cfg->size;
+ pipe_.main = cfg->size;
if (yuvCount == 1)
- pipe.viewfinder = pipe.main;
+ pipe_.viewfinder = pipe_.main;
LOG(IPU3, Debug) << "Assigned " << cfg->toString()
<< " to the main output";
} else {
cfg->setStream(const_cast<Stream *>(&data_->vfStream_));
- pipe.viewfinder = cfg->size;
+ pipe_.viewfinder = cfg->size;
LOG(IPU3, Debug) << "Assigned " << cfg->toString()
<< " to the viewfinder output";
@@ -373,16 +375,6 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
}
}
- /* Only compute the ImgU configuration if a YUV stream has been requested. */
- if (yuvCount) {
- pipeConfig_ = data_->imgu_->calculatePipeConfig(&pipe);
- if (pipeConfig_.isNull()) {
- LOG(IPU3, Error) << "Failed to calculate pipe configuration: "
- << "unsupported resolutions.";
- return Invalid;
- }
- }
-
return status;
}
@@ -576,11 +568,17 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
* stream has been requested: return here to skip the ImgU configuration
* part.
*/
- ImgUDevice::PipeConfig imguConfig = config->imguConfig();
- if (imguConfig.isNull())
+ if (config->pipe_.main.isNull() && config->pipe_.viewfinder.isNull())
return 0;
- ret = imgu->configure(imguConfig, &cio2Format);
+ config->pipeConfig_ = imgu->calculatePipeConfig(&config->pipe_);
+ if (config->pipeConfig_.isNull()) {
+ LOG(IPU3, Error) << "Failed to calculate pipe configuration: "
+ << "unsupported resolutions.";
+ return CameraConfiguration::Invalid;
+ }
+
+ ret = imgu->configure(config->pipeConfig_, &cio2Format);
if (ret)
return ret;
--
2.27.0
More information about the libcamera-devel
mailing list