libcamera: software_isp: Call Algorithm::configure
This patch adds Algorithm::configure call for the defined algorithms. This is preparation only since there are currently no Algorithm based algorithms defined. A part of this change is passing IPAConfigInfo instead of ControlInfoMap to configure() calls as this is what Algorithm::configure expects. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
97f9961e1b
commit
ecbc05c4c5
5 changed files with 22 additions and 12 deletions
|
@ -62,7 +62,7 @@ public:
|
||||||
|
|
||||||
int configure(const StreamConfiguration &inputCfg,
|
int configure(const StreamConfiguration &inputCfg,
|
||||||
const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
|
const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
|
||||||
const ControlInfoMap &sensorControls);
|
const ipa::soft::IPAConfigInfo &configInfo);
|
||||||
|
|
||||||
int exportBuffers(const Stream *stream, unsigned int count,
|
int exportBuffers(const Stream *stream, unsigned int count,
|
||||||
std::vector<std::unique_ptr<FrameBuffer>> *buffers);
|
std::vector<std::unique_ptr<FrameBuffer>> *buffers);
|
||||||
|
|
|
@ -20,7 +20,7 @@ interface IPASoftInterface {
|
||||||
=> (int32 ret);
|
=> (int32 ret);
|
||||||
start() => (int32 ret);
|
start() => (int32 ret);
|
||||||
stop();
|
stop();
|
||||||
configure(libcamera.ControlInfoMap sensorCtrlInfoMap)
|
configure(IPAConfigInfo configInfo)
|
||||||
=> (int32 ret);
|
=> (int32 ret);
|
||||||
|
|
||||||
[async] processStats(uint32 frame,
|
[async] processStats(uint32 frame,
|
||||||
|
|
|
@ -73,7 +73,7 @@ public:
|
||||||
const SharedFD &fdStats,
|
const SharedFD &fdStats,
|
||||||
const SharedFD &fdParams,
|
const SharedFD &fdParams,
|
||||||
const ControlInfoMap &sensorInfoMap) override;
|
const ControlInfoMap &sensorInfoMap) override;
|
||||||
int configure(const ControlInfoMap &sensorInfoMap) override;
|
int configure(const IPAConfigInfo &configInfo) override;
|
||||||
|
|
||||||
int start() override;
|
int start() override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
|
@ -207,9 +207,9 @@ int IPASoftSimple::init(const IPASettings &settings,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)
|
int IPASoftSimple::configure(const IPAConfigInfo &configInfo)
|
||||||
{
|
{
|
||||||
sensorInfoMap_ = sensorInfoMap;
|
sensorInfoMap_ = configInfo.sensorControls;
|
||||||
|
|
||||||
const ControlInfo &exposureInfo = sensorInfoMap_.find(V4L2_CID_EXPOSURE)->second;
|
const ControlInfo &exposureInfo = sensorInfoMap_.find(V4L2_CID_EXPOSURE)->second;
|
||||||
const ControlInfo &gainInfo = sensorInfoMap_.find(V4L2_CID_ANALOGUE_GAIN)->second;
|
const ControlInfo &gainInfo = sensorInfoMap_.find(V4L2_CID_ANALOGUE_GAIN)->second;
|
||||||
|
@ -248,6 +248,12 @@ int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)
|
||||||
againMinStep_ = 1.0;
|
againMinStep_ = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto const &algo : algorithms()) {
|
||||||
|
int ret = algo->configure(context_, configInfo);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
LOG(IPASoft, Info) << "Exposure " << exposureMin_ << "-" << exposureMax_
|
LOG(IPASoft, Info) << "Exposure " << exposureMin_ << "-" << exposureMax_
|
||||||
<< ", gain " << againMin_ << "-" << againMax_
|
<< ", gain " << againMin_ << "-" << againMax_
|
||||||
<< " (" << againMinStep_ << ")";
|
<< " (" << againMinStep_ << ")";
|
||||||
|
|
|
@ -1290,10 +1290,13 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
|
||||||
inputCfg.stride = captureFormat.planes[0].bpl;
|
inputCfg.stride = captureFormat.planes[0].bpl;
|
||||||
inputCfg.bufferCount = kNumInternalBuffers;
|
inputCfg.bufferCount = kNumInternalBuffers;
|
||||||
|
|
||||||
return data->converter_
|
if (data->converter_) {
|
||||||
? data->converter_->configure(inputCfg, outputCfgs)
|
return data->converter_->configure(inputCfg, outputCfgs);
|
||||||
: data->swIsp_->configure(inputCfg, outputCfgs,
|
} else {
|
||||||
data->sensor_->controls());
|
ipa::soft::IPAConfigInfo configInfo;
|
||||||
|
configInfo.sensorControls = data->sensor_->controls();
|
||||||
|
return data->swIsp_->configure(inputCfg, outputCfgs, configInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,
|
int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,
|
||||||
|
|
|
@ -222,16 +222,17 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz
|
||||||
* \brief Configure the SoftwareIsp object according to the passed in parameters
|
* \brief Configure the SoftwareIsp object according to the passed in parameters
|
||||||
* \param[in] inputCfg The input configuration
|
* \param[in] inputCfg The input configuration
|
||||||
* \param[in] outputCfgs The output configurations
|
* \param[in] outputCfgs The output configurations
|
||||||
* \param[in] sensorControls ControlInfoMap of the controls supported by the sensor
|
* \param[in] configInfo The IPA configuration data, received from the pipeline
|
||||||
|
* handler
|
||||||
* \return 0 on success, a negative errno on failure
|
* \return 0 on success, a negative errno on failure
|
||||||
*/
|
*/
|
||||||
int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
|
int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
|
||||||
const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
|
const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
|
||||||
const ControlInfoMap &sensorControls)
|
const ipa::soft::IPAConfigInfo &configInfo)
|
||||||
{
|
{
|
||||||
ASSERT(ipa_ && debayer_);
|
ASSERT(ipa_ && debayer_);
|
||||||
|
|
||||||
int ret = ipa_->configure(sensorControls);
|
int ret = ipa_->configure(configInfo);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue