[libcamera-devel,02/13] libcamera: ipa_proxy: Allow a prefix for the configuration file
diff mbox series

Message ID 20230426131057.21550-3-naush@raspberrypi.com
State Superseded
Headers show
Series
  • Raspberry Pi: Code refactoring
Related show

Commit Message

Naushir Patuck April 26, 2023, 1:10 p.m. UTC
Add a prefix parameter to IPAProxy::configurationFile(). This prefix is
added to the search path when locating IPA configuration files in the
system directories.

For example, the system directories etc/libcamera/ipa/<prefix>/ and
share/libcamera/ipa/<prefix>/ will be used to search for the IPA
configuration files.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
---
 include/libcamera/internal/ipa_proxy.h             |  3 ++-
 src/libcamera/ipa_proxy.cpp                        | 11 +++++++----
 src/libcamera/pipeline/ipu3/ipu3.cpp               |  4 ++--
 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp |  2 +-
 src/libcamera/pipeline/rkisp1/rkisp1.cpp           |  4 ++--
 src/libcamera/pipeline/vimc/vimc.cpp               |  2 +-
 test/ipa/ipa_interface_test.cpp                    |  2 +-
 7 files changed, 16 insertions(+), 12 deletions(-)

Comments

Jacopo Mondi April 26, 2023, 4:12 p.m. UTC | #1
Hi Naush

On Wed, Apr 26, 2023 at 02:10:46PM +0100, Naushir Patuck via libcamera-devel wrote:
> Add a prefix parameter to IPAProxy::configurationFile(). This prefix is
> added to the search path when locating IPA configuration files in the
> system directories.
>
> For example, the system directories etc/libcamera/ipa/<prefix>/ and
> share/libcamera/ipa/<prefix>/ will be used to search for the IPA
> configuration files.
>
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> ---
>  include/libcamera/internal/ipa_proxy.h             |  3 ++-
>  src/libcamera/ipa_proxy.cpp                        | 11 +++++++----
>  src/libcamera/pipeline/ipu3/ipu3.cpp               |  4 ++--
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp |  2 +-
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           |  4 ++--
>  src/libcamera/pipeline/vimc/vimc.cpp               |  2 +-
>  test/ipa/ipa_interface_test.cpp                    |  2 +-
>  7 files changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
> index 781c8b623605..4ec357425fd3 100644
> --- a/include/libcamera/internal/ipa_proxy.h
> +++ b/include/libcamera/internal/ipa_proxy.h
> @@ -31,7 +31,8 @@ public:
>
>  	bool isValid() const { return valid_; }
>
> -	std::string configurationFile(const std::string &file) const;
> +	std::string configurationFile(const std::string &file,
> +				      const std::string &prefix) const;

This could have a default value of "" for platforms that do not need a
vendor prefix

With that
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

Thanks
  j

>
>  protected:
>  	std::string resolvePath(const std::string &file) const;
> diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
> index 3f2cc6b89f60..4a27b0a993fa 100644
> --- a/src/libcamera/ipa_proxy.cpp
> +++ b/src/libcamera/ipa_proxy.cpp
> @@ -72,6 +72,7 @@ IPAProxy::~IPAProxy()
>  /**
>   * \brief Retrieve the absolute path to an IPA configuration file
>   * \param[in] name The configuration file name
> + * \param[in] prefix The configuration directory prefix when searching system paths
>   *
>   * This function locates the configuration file for an IPA and returns its
>   * absolute path. It searches the following directories, in order:
> @@ -80,8 +81,8 @@ IPAProxy::~IPAProxy()
>   *   environment variable ; or
>   * - If libcamera is not installed, the src/ipa/ directory within the source
>   *   tree ; otherwise
> - * - The system sysconf (etc/libcamera/ipa) and the data (share/libcamera/ipa/)
> - *   directories.
> + * - The system sysconf (etc/libcamera/ipa/<prefix>/) and the data
> + *   (share/libcamera/ipa/<prefix>/) directories.
>   *
>   * The system directories are not searched if libcamera is not installed.
>   *
> @@ -92,7 +93,8 @@ IPAProxy::~IPAProxy()
>   * \return The full path to the IPA configuration file, or an empty string if
>   * no configuration file can be found
>   */
> -std::string IPAProxy::configurationFile(const std::string &name) const
> +std::string IPAProxy::configurationFile(const std::string &name,
> +					const std::string &prefix) const
>  {
>  	struct stat statbuf;
>  	int ret;
> @@ -139,7 +141,8 @@ std::string IPAProxy::configurationFile(const std::string &name) const
>  	} else {
>  		/* Else look in the system locations. */
>  		for (const auto &dir : utils::split(IPA_CONFIG_DIR, ":")) {
> -			std::string confPath = dir + "/" + ipaName + "/" + name;
> +			std::string confPath = dir + "/" + prefix + "/" +
> +					       ipaName + "/" + name;
>  			ret = stat(confPath.c_str(), &statbuf);
>  			if (ret == 0 && (statbuf.st_mode & S_IFMT) == S_IFREG)
>  				return confPath;
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 355cb0cb76b8..a48d7e78d25e 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1186,9 +1186,9 @@ int IPU3CameraData::loadIPA()
>  	 * The API tuning file is made from the sensor name. If the tuning file
>  	 * isn't found, fall back to the 'uncalibrated' file.
>  	 */
> -	std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml");
> +	std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml", "");
>  	if (ipaTuningFile.empty())
> -		ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
> +		ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
>
>  	ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
>  			 sensorInfo, sensor->controls(), &ipaControls_);
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 0060044143cc..a4fff28bf198 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
>  		std::string model = sensor_->model();
>  		if (isMonoSensor(sensor_))
>  			model += "_mono";
> -		configurationFile = ipa_->configurationFile(model + ".json");
> +		configurationFile = ipa_->configurationFile(model + ".json", "");
>  	} else {
>  		configurationFile = std::string(configFromEnv);
>  	}
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 8a30fe061d04..e338cdee2a2d 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -349,13 +349,13 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)
>  	std::string ipaTuningFile;
>  	char const *configFromEnv = utils::secure_getenv("LIBCAMERA_RKISP1_TUNING_FILE");
>  	if (!configFromEnv || *configFromEnv == '\0') {
> -		ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml");
> +		ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml", "");
>  		/*
>  		 * If the tuning file isn't found, fall back to the
>  		 * 'uncalibrated' configuration file.
>  		 */
>  		if (ipaTuningFile.empty())
> -			ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
> +			ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
>  	} else {
>  		ipaTuningFile = std::string(configFromEnv);
>  	}
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 204f5ad73f6d..5fbabcc5763d 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -472,7 +472,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
>
>  	data->ipa_->paramsBufferReady.connect(data.get(), &VimcCameraData::paramsBufferReady);
>
> -	std::string conf = data->ipa_->configurationFile("vimc.conf");
> +	std::string conf = data->ipa_->configurationFile("vimc.conf", "");
>  	Flags<ipa::vimc::TestFlag> inFlags = ipa::vimc::TestFlag::Flag2;
>  	Flags<ipa::vimc::TestFlag> outFlags;
>  	data->ipa_->init(IPASettings{ conf, data->sensor_->model() },
> diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp
> index 051ef96e7ed2..b25de222b9b4 100644
> --- a/test/ipa/ipa_interface_test.cpp
> +++ b/test/ipa/ipa_interface_test.cpp
> @@ -105,7 +105,7 @@ protected:
>  		}
>
>  		/* Test initialization of IPA module. */
> -		std::string conf = ipa_->configurationFile("vimc.conf");
> +		std::string conf = ipa_->configurationFile("vimc.conf", "");
>  		Flags<ipa::vimc::TestFlag> inFlags;
>  		Flags<ipa::vimc::TestFlag> outFlags;
>  		int ret = ipa_->init(IPASettings{ conf, "vimc" },
> --
> 2.34.1
>
Naushir Patuck April 27, 2023, 6:53 a.m. UTC | #2
Hi Jacopo,

Thank you for your review on this and other patches in the series!

On Wed, 26 Apr 2023 at 17:13, Jacopo Mondi
<jacopo.mondi@ideasonboard.com> wrote:
>
> Hi Naush
>
> On Wed, Apr 26, 2023 at 02:10:46PM +0100, Naushir Patuck via libcamera-devel wrote:
> > Add a prefix parameter to IPAProxy::configurationFile(). This prefix is
> > added to the search path when locating IPA configuration files in the
> > system directories.
> >
> > For example, the system directories etc/libcamera/ipa/<prefix>/ and
> > share/libcamera/ipa/<prefix>/ will be used to search for the IPA
> > configuration files.
> >
> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > ---
> >  include/libcamera/internal/ipa_proxy.h             |  3 ++-
> >  src/libcamera/ipa_proxy.cpp                        | 11 +++++++----
> >  src/libcamera/pipeline/ipu3/ipu3.cpp               |  4 ++--
> >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp |  2 +-
> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           |  4 ++--
> >  src/libcamera/pipeline/vimc/vimc.cpp               |  2 +-
> >  test/ipa/ipa_interface_test.cpp                    |  2 +-
> >  7 files changed, 16 insertions(+), 12 deletions(-)
> >
> > diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
> > index 781c8b623605..4ec357425fd3 100644
> > --- a/include/libcamera/internal/ipa_proxy.h
> > +++ b/include/libcamera/internal/ipa_proxy.h
> > @@ -31,7 +31,8 @@ public:
> >
> >       bool isValid() const { return valid_; }
> >
> > -     std::string configurationFile(const std::string &file) const;
> > +     std::string configurationFile(const std::string &file,
> > +                                   const std::string &prefix) const;
>
> This could have a default value of "" for platforms that do not need a
> vendor prefix

I did consider this, but backed out at the last minute because I thought we may
want to have the prefix explicit.  However, since you have separately suggested
it as well, I'll make the change.  I'll reply-to this patch with the update.

Regards,
Naush

>
> With that
> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
>
> Thanks
>   j
>
> >
> >  protected:
> >       std::string resolvePath(const std::string &file) const;
> > diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
> > index 3f2cc6b89f60..4a27b0a993fa 100644
> > --- a/src/libcamera/ipa_proxy.cpp
> > +++ b/src/libcamera/ipa_proxy.cpp
> > @@ -72,6 +72,7 @@ IPAProxy::~IPAProxy()
> >  /**
> >   * \brief Retrieve the absolute path to an IPA configuration file
> >   * \param[in] name The configuration file name
> > + * \param[in] prefix The configuration directory prefix when searching system paths
> >   *
> >   * This function locates the configuration file for an IPA and returns its
> >   * absolute path. It searches the following directories, in order:
> > @@ -80,8 +81,8 @@ IPAProxy::~IPAProxy()
> >   *   environment variable ; or
> >   * - If libcamera is not installed, the src/ipa/ directory within the source
> >   *   tree ; otherwise
> > - * - The system sysconf (etc/libcamera/ipa) and the data (share/libcamera/ipa/)
> > - *   directories.
> > + * - The system sysconf (etc/libcamera/ipa/<prefix>/) and the data
> > + *   (share/libcamera/ipa/<prefix>/) directories.
> >   *
> >   * The system directories are not searched if libcamera is not installed.
> >   *
> > @@ -92,7 +93,8 @@ IPAProxy::~IPAProxy()
> >   * \return The full path to the IPA configuration file, or an empty string if
> >   * no configuration file can be found
> >   */
> > -std::string IPAProxy::configurationFile(const std::string &name) const
> > +std::string IPAProxy::configurationFile(const std::string &name,
> > +                                     const std::string &prefix) const
> >  {
> >       struct stat statbuf;
> >       int ret;
> > @@ -139,7 +141,8 @@ std::string IPAProxy::configurationFile(const std::string &name) const
> >       } else {
> >               /* Else look in the system locations. */
> >               for (const auto &dir : utils::split(IPA_CONFIG_DIR, ":")) {
> > -                     std::string confPath = dir + "/" + ipaName + "/" + name;
> > +                     std::string confPath = dir + "/" + prefix + "/" +
> > +                                            ipaName + "/" + name;
> >                       ret = stat(confPath.c_str(), &statbuf);
> >                       if (ret == 0 && (statbuf.st_mode & S_IFMT) == S_IFREG)
> >                               return confPath;
> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > index 355cb0cb76b8..a48d7e78d25e 100644
> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > @@ -1186,9 +1186,9 @@ int IPU3CameraData::loadIPA()
> >        * The API tuning file is made from the sensor name. If the tuning file
> >        * isn't found, fall back to the 'uncalibrated' file.
> >        */
> > -     std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml");
> > +     std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml", "");
> >       if (ipaTuningFile.empty())
> > -             ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
> > +             ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
> >
> >       ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
> >                        sensorInfo, sensor->controls(), &ipaControls_);
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 0060044143cc..a4fff28bf198 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
> >               std::string model = sensor_->model();
> >               if (isMonoSensor(sensor_))
> >                       model += "_mono";
> > -             configurationFile = ipa_->configurationFile(model + ".json");
> > +             configurationFile = ipa_->configurationFile(model + ".json", "");
> >       } else {
> >               configurationFile = std::string(configFromEnv);
> >       }
> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > index 8a30fe061d04..e338cdee2a2d 100644
> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > @@ -349,13 +349,13 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)
> >       std::string ipaTuningFile;
> >       char const *configFromEnv = utils::secure_getenv("LIBCAMERA_RKISP1_TUNING_FILE");
> >       if (!configFromEnv || *configFromEnv == '\0') {
> > -             ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml");
> > +             ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml", "");
> >               /*
> >                * If the tuning file isn't found, fall back to the
> >                * 'uncalibrated' configuration file.
> >                */
> >               if (ipaTuningFile.empty())
> > -                     ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
> > +                     ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
> >       } else {
> >               ipaTuningFile = std::string(configFromEnv);
> >       }
> > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> > index 204f5ad73f6d..5fbabcc5763d 100644
> > --- a/src/libcamera/pipeline/vimc/vimc.cpp
> > +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> > @@ -472,7 +472,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
> >
> >       data->ipa_->paramsBufferReady.connect(data.get(), &VimcCameraData::paramsBufferReady);
> >
> > -     std::string conf = data->ipa_->configurationFile("vimc.conf");
> > +     std::string conf = data->ipa_->configurationFile("vimc.conf", "");
> >       Flags<ipa::vimc::TestFlag> inFlags = ipa::vimc::TestFlag::Flag2;
> >       Flags<ipa::vimc::TestFlag> outFlags;
> >       data->ipa_->init(IPASettings{ conf, data->sensor_->model() },
> > diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp
> > index 051ef96e7ed2..b25de222b9b4 100644
> > --- a/test/ipa/ipa_interface_test.cpp
> > +++ b/test/ipa/ipa_interface_test.cpp
> > @@ -105,7 +105,7 @@ protected:
> >               }
> >
> >               /* Test initialization of IPA module. */
> > -             std::string conf = ipa_->configurationFile("vimc.conf");
> > +             std::string conf = ipa_->configurationFile("vimc.conf", "");
> >               Flags<ipa::vimc::TestFlag> inFlags;
> >               Flags<ipa::vimc::TestFlag> outFlags;
> >               int ret = ipa_->init(IPASettings{ conf, "vimc" },
> > --
> > 2.34.1
> >

Patch
diff mbox series

diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
index 781c8b623605..4ec357425fd3 100644
--- a/include/libcamera/internal/ipa_proxy.h
+++ b/include/libcamera/internal/ipa_proxy.h
@@ -31,7 +31,8 @@  public:
 
 	bool isValid() const { return valid_; }
 
-	std::string configurationFile(const std::string &file) const;
+	std::string configurationFile(const std::string &file,
+				      const std::string &prefix) const;
 
 protected:
 	std::string resolvePath(const std::string &file) const;
diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
index 3f2cc6b89f60..4a27b0a993fa 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -72,6 +72,7 @@  IPAProxy::~IPAProxy()
 /**
  * \brief Retrieve the absolute path to an IPA configuration file
  * \param[in] name The configuration file name
+ * \param[in] prefix The configuration directory prefix when searching system paths
  *
  * This function locates the configuration file for an IPA and returns its
  * absolute path. It searches the following directories, in order:
@@ -80,8 +81,8 @@  IPAProxy::~IPAProxy()
  *   environment variable ; or
  * - If libcamera is not installed, the src/ipa/ directory within the source
  *   tree ; otherwise
- * - The system sysconf (etc/libcamera/ipa) and the data (share/libcamera/ipa/)
- *   directories.
+ * - The system sysconf (etc/libcamera/ipa/<prefix>/) and the data
+ *   (share/libcamera/ipa/<prefix>/) directories.
  *
  * The system directories are not searched if libcamera is not installed.
  *
@@ -92,7 +93,8 @@  IPAProxy::~IPAProxy()
  * \return The full path to the IPA configuration file, or an empty string if
  * no configuration file can be found
  */
-std::string IPAProxy::configurationFile(const std::string &name) const
+std::string IPAProxy::configurationFile(const std::string &name,
+					const std::string &prefix) const
 {
 	struct stat statbuf;
 	int ret;
@@ -139,7 +141,8 @@  std::string IPAProxy::configurationFile(const std::string &name) const
 	} else {
 		/* Else look in the system locations. */
 		for (const auto &dir : utils::split(IPA_CONFIG_DIR, ":")) {
-			std::string confPath = dir + "/" + ipaName + "/" + name;
+			std::string confPath = dir + "/" + prefix + "/" +
+					       ipaName + "/" + name;
 			ret = stat(confPath.c_str(), &statbuf);
 			if (ret == 0 && (statbuf.st_mode & S_IFMT) == S_IFREG)
 				return confPath;
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 355cb0cb76b8..a48d7e78d25e 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1186,9 +1186,9 @@  int IPU3CameraData::loadIPA()
 	 * The API tuning file is made from the sensor name. If the tuning file
 	 * isn't found, fall back to the 'uncalibrated' file.
 	 */
-	std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml");
+	std::string ipaTuningFile = ipa_->configurationFile(sensor->model() + ".yaml", "");
 	if (ipaTuningFile.empty())
-		ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
+		ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
 
 	ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
 			 sensorInfo, sensor->controls(), &ipaControls_);
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 0060044143cc..a4fff28bf198 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1668,7 +1668,7 @@  int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
 		std::string model = sensor_->model();
 		if (isMonoSensor(sensor_))
 			model += "_mono";
-		configurationFile = ipa_->configurationFile(model + ".json");
+		configurationFile = ipa_->configurationFile(model + ".json", "");
 	} else {
 		configurationFile = std::string(configFromEnv);
 	}
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 8a30fe061d04..e338cdee2a2d 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -349,13 +349,13 @@  int RkISP1CameraData::loadIPA(unsigned int hwRevision)
 	std::string ipaTuningFile;
 	char const *configFromEnv = utils::secure_getenv("LIBCAMERA_RKISP1_TUNING_FILE");
 	if (!configFromEnv || *configFromEnv == '\0') {
-		ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml");
+		ipaTuningFile = ipa_->configurationFile(sensor_->model() + ".yaml", "");
 		/*
 		 * If the tuning file isn't found, fall back to the
 		 * 'uncalibrated' configuration file.
 		 */
 		if (ipaTuningFile.empty())
-			ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
+			ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml", "");
 	} else {
 		ipaTuningFile = std::string(configFromEnv);
 	}
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 204f5ad73f6d..5fbabcc5763d 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -472,7 +472,7 @@  bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
 
 	data->ipa_->paramsBufferReady.connect(data.get(), &VimcCameraData::paramsBufferReady);
 
-	std::string conf = data->ipa_->configurationFile("vimc.conf");
+	std::string conf = data->ipa_->configurationFile("vimc.conf", "");
 	Flags<ipa::vimc::TestFlag> inFlags = ipa::vimc::TestFlag::Flag2;
 	Flags<ipa::vimc::TestFlag> outFlags;
 	data->ipa_->init(IPASettings{ conf, data->sensor_->model() },
diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp
index 051ef96e7ed2..b25de222b9b4 100644
--- a/test/ipa/ipa_interface_test.cpp
+++ b/test/ipa/ipa_interface_test.cpp
@@ -105,7 +105,7 @@  protected:
 		}
 
 		/* Test initialization of IPA module. */
-		std::string conf = ipa_->configurationFile("vimc.conf");
+		std::string conf = ipa_->configurationFile("vimc.conf", "");
 		Flags<ipa::vimc::TestFlag> inFlags;
 		Flags<ipa::vimc::TestFlag> outFlags;
 		int ret = ipa_->init(IPASettings{ conf, "vimc" },