@@ -65,7 +65,8 @@ public:
int configure(const StreamConfiguration &inputCfg,
const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
- const ipa::soft::IPAConfigInfo &configInfo);
+ const ipa::soft::IPAConfigInfo &configInfo,
+ ControlInfoMap *ipaControls);
int exportBuffers(const Stream *stream, unsigned int count,
std::vector<std::unique_ptr<FrameBuffer>> *buffers);
@@ -22,7 +22,7 @@ interface IPASoftInterface {
start() => (int32 ret);
stop();
configure(IPAConfigInfo configInfo)
- => (int32 ret);
+ => (int32 ret, libcamera.ControlInfoMap ipaControls);
[async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);
[async] computeParams(uint32 frame);
@@ -59,7 +59,8 @@ public:
const ControlInfoMap &sensorControls,
ControlInfoMap *ipaControls,
bool *ccmEnabled) override;
- int configure(const IPAConfigInfo &configInfo) override;
+ int configure(const IPAConfigInfo &configInfo,
+ ControlInfoMap *ipaControls) override;
int start() override;
void stop() override;
@@ -198,7 +199,7 @@ int IPASoftSimple::init(const IPASettings &settings,
return 0;
}
-int IPASoftSimple::configure(const IPAConfigInfo &configInfo)
+int IPASoftSimple::configure(const IPAConfigInfo &configInfo, ControlInfoMap *ipaControls)
{
context_.sensorControls = configInfo.sensorControls;
@@ -251,6 +252,8 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo)
<< context_.configuration.agc.againMax
<< " (" << context_.configuration.agc.againMinStep << ")";
+ *ipaControls = { ControlInfoMap::Map(context_.ctrlMap), controls::controls };
+
return 0;
}
@@ -1605,7 +1605,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
} else {
ipa::soft::IPAConfigInfo configInfo;
configInfo.sensorControls = data->sensor_->controls();
- return data->swIsp_->configure(inputCfg, outputCfgs, configInfo);
+ return data->swIsp_->configure(inputCfg, outputCfgs, configInfo, &data->controlInfo_);
}
}
@@ -277,17 +277,18 @@ uint32_t SoftwareIsp::preferredInputStride(const PixelFormat &inputFormat, const
* \brief Configure the SoftwareIsp object according to the passed in parameters
* \param[in] inputCfg The input configuration
* \param[in] outputCfgs The output configurations
- * \param[in] configInfo The IPA configuration data, received from the pipeline
- * handler
+ * \param[in] configInfo The IPA configuration data, received from the pipeline handler
+ * \param[out] ipaControls The IPA controls to update
* \return 0 on success, a negative errno on failure
*/
int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
- const ipa::soft::IPAConfigInfo &configInfo)
+ const ipa::soft::IPAConfigInfo &configInfo,
+ ControlInfoMap *ipaControls)
{
ASSERT(ipa_ && debayer_);
- int ret = ipa_->configure(configInfo);
+ int ret = ipa_->configure(configInfo, ipaControls);
if (ret < 0)
return ret;
Update the control info map after the algorithms are reconfigured. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- include/libcamera/internal/software_isp/software_isp.h | 3 ++- include/libcamera/ipa/soft.mojom | 2 +- src/ipa/simple/soft_simple.cpp | 7 +++++-- src/libcamera/pipeline/simple/simple.cpp | 2 +- src/libcamera/software_isp/software_isp.cpp | 9 +++++---- 5 files changed, 14 insertions(+), 9 deletions(-)