| Message ID | 20251011160335.50578-5-kieran.bingham@ideasonboard.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
Hi 2025. 10. 11. 18:03 keltezéssel, Kieran Bingham írta: > Extend the SoftIPA interface to support passing IPA controls during the > configuration phase so that updates can be made according to the > resolutions selected. > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- This also does not seem to be needed in this patch series. But otherwise it looks reasonable, when it will be needed. Reviewed-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 | 6 ++++-- > src/libcamera/pipeline/simple/simple.cpp | 2 +- > src/libcamera/software_isp/software_isp.cpp | 5 +++-- > 5 files changed, 11 insertions(+), 7 deletions(-) > > diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h > index 78624659245c..0bc695177634 100644 > --- a/include/libcamera/internal/software_isp/software_isp.h > +++ b/include/libcamera/internal/software_isp/software_isp.h > @@ -65,7 +65,8 @@ public: > > int configure(const StreamConfiguration &inputCfg, > const std::vector<std::reference_wrapper<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); > diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom > index 77328c5fd51d..3acac53981e7 100644 > --- a/include/libcamera/ipa/soft.mojom > +++ b/include/libcamera/ipa/soft.mojom > @@ -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); > diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp > index b147aca2e343..0821d214815f 100644 > --- a/src/ipa/simple/soft_simple.cpp > +++ b/src/ipa/simple/soft_simple.cpp > @@ -57,7 +57,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; > @@ -193,7 +194,8 @@ int IPASoftSimple::init(const IPASettings &settings, > return 0; > } > > -int IPASoftSimple::configure(const IPAConfigInfo &configInfo) > +int IPASoftSimple::configure(const IPAConfigInfo &configInfo, > + [[maybe_unused]] ControlInfoMap *ipaControls) > { > sensorInfoMap_ = configInfo.sensorControls; > > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp > index c816cffc9e6a..a7e7ac25bac2 100644 > --- a/src/libcamera/pipeline/simple/simple.cpp > +++ b/src/libcamera/pipeline/simple/simple.cpp > @@ -1414,7 +1414,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_); > } > } > > diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp > index b7651b7d2627..953409c42fee 100644 > --- a/src/libcamera/software_isp/software_isp.cpp > +++ b/src/libcamera/software_isp/software_isp.cpp > @@ -255,11 +255,12 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz > */ > int SoftwareIsp::configure(const StreamConfiguration &inputCfg, > const std::vector<std::reference_wrapper<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; >
diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 78624659245c..0bc695177634 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -65,7 +65,8 @@ public: int configure(const StreamConfiguration &inputCfg, const std::vector<std::reference_wrapper<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); diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom index 77328c5fd51d..3acac53981e7 100644 --- a/include/libcamera/ipa/soft.mojom +++ b/include/libcamera/ipa/soft.mojom @@ -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); diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp index b147aca2e343..0821d214815f 100644 --- a/src/ipa/simple/soft_simple.cpp +++ b/src/ipa/simple/soft_simple.cpp @@ -57,7 +57,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; @@ -193,7 +194,8 @@ int IPASoftSimple::init(const IPASettings &settings, return 0; } -int IPASoftSimple::configure(const IPAConfigInfo &configInfo) +int IPASoftSimple::configure(const IPAConfigInfo &configInfo, + [[maybe_unused]] ControlInfoMap *ipaControls) { sensorInfoMap_ = configInfo.sensorControls; diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index c816cffc9e6a..a7e7ac25bac2 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -1414,7 +1414,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_); } } diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index b7651b7d2627..953409c42fee 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -255,11 +255,12 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz */ int SoftwareIsp::configure(const StreamConfiguration &inputCfg, const std::vector<std::reference_wrapper<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;
Extend the SoftIPA interface to support passing IPA controls during the configuration phase so that updates can be made according to the resolutions selected. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> --- include/libcamera/internal/software_isp/software_isp.h | 3 ++- include/libcamera/ipa/soft.mojom | 2 +- src/ipa/simple/soft_simple.cpp | 6 ++++-- src/libcamera/pipeline/simple/simple.cpp | 2 +- src/libcamera/software_isp/software_isp.cpp | 5 +++-- 5 files changed, 11 insertions(+), 7 deletions(-)