[libcamera-devel] [PATCH v3 1/7] ipa: Add sensor model string to IPASettings
Naushir Patuck
naush at raspberrypi.com
Tue Mar 23 17:44:35 CET 2021
Hi Laurent,
On Tue, 23 Mar 2021 at 16:36, Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:
> Hi Naush,
>
> On Tue, Mar 23, 2021 at 02:36:04PM +0000, Naushir Patuck wrote:
> > Pass the sensor model string to the IPA init() method through the
> > IPASettings structure.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > Tested-by: David Plowman <david.plowman at raspberrypi.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > include/libcamera/ipa/core.mojom | 8 ++++++++
> > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ++-
> > src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ++-
> > src/libcamera/pipeline/vimc/vimc.cpp | 2 +-
> > test/ipa/ipa_interface_test.cpp | 2 +-
> > 5 files changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/libcamera/ipa/core.mojom
> b/include/libcamera/ipa/core.mojom
> > index 5236a672461c..5363f1c5b48b 100644
> > --- a/include/libcamera/ipa/core.mojom
> > +++ b/include/libcamera/ipa/core.mojom
> > @@ -145,8 +145,16 @@ struct IPABuffer {
> > * This field may be an empty string if the IPA doesn't require a
> configuration
> > * file.
> > */
> > +
> > + /**
> > + * \var IPASettings::sensorModel
> > + * \brief The sensor model name
> > + *
> > + * Provides the sensor model name to the IPA.
> > + */
> > struct IPASettings {
> > string configurationFile;
> > + string sensorModel;
> > };
> >
> > /**
> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp
> b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > index 2ea13ec9e1b9..c27120710323 100644
> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > @@ -1144,7 +1144,8 @@ int IPU3CameraData::loadIPA()
> >
> > ipa_->queueFrameAction.connect(this,
> &IPU3CameraData::queueFrameAction);
> >
> > - ipa_->init(IPASettings{});
> > + CameraSensor *sensor = cio2_.sensor();
> > + ipa_->init(IPASettings{ "", sensor->model() });
> >
> > return 0;
> > }
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 00fa62c972ed..2c8ae31a28ad 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -1227,7 +1227,8 @@ int RPiCameraData::loadIPA()
> > ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls);
> > ipa_->setDelayedControls.connect(this,
> &RPiCameraData::setDelayedControls);
> >
> > - IPASettings settings(ipa_->configurationFile(sensor_->model() +
> ".json"));
> > + IPASettings settings(ipa_->configurationFile(sensor_->model() +
> ".json"),
> > + sensor_->model());
> >
> > return ipa_->init(settings);
> > }
> > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp
> b/src/libcamera/pipeline/vimc/vimc.cpp
> > index 57c65b021c46..2dfb63ecf2ef 100644
> > --- a/src/libcamera/pipeline/vimc/vimc.cpp
> > +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> > @@ -425,7 +425,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator
> *enumerator)
> > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this,
> 0, 0);
> > if (data->ipa_ != nullptr) {
> > std::string conf =
> data->ipa_->configurationFile("vimc.conf");
> > - data->ipa_->init(IPASettings{ conf });
> > + data->ipa_->init(IPASettings{ conf, data->sensor_->model()
> });
> > } else {
> > LOG(VIMC, Warning) << "no matching IPA found";
> > }
>
> This crashes, as data->sensor_ is null here :-S This fixes it.
>
Sorry for breaking that :(
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp
> b/src/libcamera/pipeline/vimc/vimc.cpp
> index 2dfb63ecf2ef..8f5f4ba30953 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -422,6 +422,10 @@ bool PipelineHandlerVimc::match(DeviceEnumerator
> *enumerator)
>
> std::unique_ptr<VimcCameraData> data =
> std::make_unique<VimcCameraData>(this, media);
>
> + /* Locate and open the capture video node. */
> + if (data->init())
> + return false;
> +
> data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this,
> 0, 0);
> if (data->ipa_ != nullptr) {
> std::string conf =
> data->ipa_->configurationFile("vimc.conf");
> @@ -430,10 +434,6 @@ bool PipelineHandlerVimc::match(DeviceEnumerator
> *enumerator)
> LOG(VIMC, Warning) << "no matching IPA found";
> }
>
> - /* Locate and open the capture video node. */
> - if (data->init())
> - return false;
> -
> /* Create and register the camera. */
> std::set<Stream *> streams{ &data->stream_ };
> std::shared_ptr<Camera> camera =
>
> Could you run "ninja test" on future patch series ? It requires the
> vimc, vivid and vim2m modules to be loaded, and you can do so on an x86
> machine.
>
I'll be sure to run through these tests before submitting next time.
Regards,
Naush
>
> I'll fold this fix in when merging.
>
> > diff --git a/test/ipa/ipa_interface_test.cpp
> b/test/ipa/ipa_interface_test.cpp
> > index 4b88806f8f67..d6ca6f5137b0 100644
> > --- a/test/ipa/ipa_interface_test.cpp
> > +++ b/test/ipa/ipa_interface_test.cpp
> > @@ -104,7 +104,7 @@ protected:
> >
> > /* Test initialization of IPA module. */
> > std::string conf = ipa_->configurationFile("vimc.conf");
> > - int ret = ipa_->init(IPASettings{ conf });
> > + int ret = ipa_->init(IPASettings{ conf, "vimc" });
> > if (ret < 0) {
> > cerr << "IPA interface init() failed" << endl;
> > return TestFail;
>
> --
> Regards,
>
> Laurent Pinchart
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210323/7101f26c/attachment-0001.htm>
More information about the libcamera-devel
mailing list