[libcamera-devel,v3,1/7] ipa: Add sensor model string to IPASettings
diff mbox series

Message ID 20210323143610.787760-2-naush@raspberrypi.com
State Accepted
Headers show
Series
  • Raspberry Pi: ipa::init() restructuring
Related show

Commit Message

Naushir Patuck March 23, 2021, 2:36 p.m. UTC
Pass the sensor model string to the IPA init() method through the
IPASettings structure.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Tested-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@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(-)

Comments

Laurent Pinchart March 23, 2021, 4:35 p.m. UTC | #1
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@raspberrypi.com>
> Tested-by: David Plowman <david.plowman@raspberrypi.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@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.

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 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;
Naushir Patuck March 23, 2021, 4:44 p.m. UTC | #2
Hi Laurent,

On Tue, 23 Mar 2021 at 16:36, Laurent Pinchart <
laurent.pinchart@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@raspberrypi.com>
> > Tested-by: David Plowman <david.plowman@raspberrypi.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@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
>
Laurent Pinchart March 23, 2021, 4:51 p.m. UTC | #3
Hi Naush,

On Tue, Mar 23, 2021 at 04:44:35PM +0000, Naushir Patuck wrote:
> On Tue, 23 Mar 2021 at 16:36, Laurent Pinchart wrote:
> > 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@raspberrypi.com>
> > > Tested-by: David Plowman <david.plowman@raspberrypi.com>
> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@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 :(

No worries, the breakage was caught before it got upstream :-)

> > 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.

Eventually we'll have automated tests that will do this all for you. In
the meantime, thanks for your help.

> > 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;

Patch
diff mbox series

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";
 	}
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;