libcamera: ipa_proxy: Report a missing configuration as a warning
When the configuration file for an IPA module is missing, it is reported as an error in the log, for example: ERROR IPAProxy ipa_proxy.cpp:149 Configuration file 'imx219.yaml' not found for IPA module 'simple' This is misleading because several pipelines use uncalibrated.yaml in such a case and can continue working. And in case of software ISP, there is currently no other configuration file so the error is always reported. On the other hand, in some other cases the presence of the configuration file is required and it is an error if it is missing. Let's introduce a new optional argument to IPAProxy::configurationFile that specifies a fallback file if the requested file is not found. If the primary requested file is not found and a non-empty fallback file is specified then a warning is logged and the fallback file is looked up. If neither the fallback file can be found then only then an error is logged and the method returns an empty string. This change has also the benefit of putting the common fallback file ("uncalibrated.yaml") pattern to a single place. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
58f83d70eb
commit
6c17996879
5 changed files with 25 additions and 19 deletions
|
@ -31,7 +31,8 @@ public:
|
|||
|
||||
bool isValid() const { return valid_; }
|
||||
|
||||
std::string configurationFile(const std::string &name) const;
|
||||
std::string configurationFile(const std::string &name,
|
||||
const std::string &fallbackName = std::string()) const;
|
||||
|
||||
protected:
|
||||
std::string resolvePath(const std::string &file) const;
|
||||
|
|
|
@ -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] fallbackName The name of a fallback configuration file
|
||||
*
|
||||
* This function locates the configuration file for an IPA and returns its
|
||||
* absolute path. It searches the following directories, in order:
|
||||
|
@ -89,10 +90,14 @@ IPAProxy::~IPAProxy()
|
|||
* named after the IPA module name, as reported in IPAModuleInfo::name, and for
|
||||
* a file named \a name within that directory. The \a name is IPA-specific.
|
||||
*
|
||||
* If the file named \a name is not found and \a fallbackName is non-empty then
|
||||
* the whole search is repeated for \a fallbackName.
|
||||
*
|
||||
* \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 &fallbackName) const
|
||||
{
|
||||
struct stat statbuf;
|
||||
int ret;
|
||||
|
@ -146,11 +151,18 @@ std::string IPAProxy::configurationFile(const std::string &name) const
|
|||
}
|
||||
}
|
||||
|
||||
if (fallbackName.empty()) {
|
||||
LOG(IPAProxy, Error)
|
||||
<< "Configuration file '" << name
|
||||
<< "' not found for IPA module '" << ipaName << "'";
|
||||
|
||||
return std::string();
|
||||
}
|
||||
|
||||
LOG(IPAProxy, Warning)
|
||||
<< "Configuration file '" << name
|
||||
<< "' not found for IPA module '" << ipaName
|
||||
<< "', falling back to '" << fallbackName << "'";
|
||||
return configurationFile(fallbackName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1186,9 +1186,8 @@ 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");
|
||||
if (ipaTuningFile.empty())
|
||||
ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
|
||||
std::string ipaTuningFile =
|
||||
ipa_->configurationFile(sensor->model() + ".yaml", "uncalibrated.yaml");
|
||||
|
||||
ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
|
||||
sensorInfo, sensor->controls(), &ipaControls_);
|
||||
|
|
|
@ -351,13 +351,8 @@ 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");
|
||||
/*
|
||||
* 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(sensor_->model() + ".yaml", "uncalibrated.yaml");
|
||||
} else {
|
||||
ipaTuningFile = std::string(configFromEnv);
|
||||
}
|
||||
|
|
|
@ -121,9 +121,8 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor)
|
|||
* 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");
|
||||
if (ipaTuningFile.empty())
|
||||
ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml");
|
||||
std::string ipaTuningFile =
|
||||
ipa_->configurationFile(sensor->model() + ".yaml", "uncalibrated.yaml");
|
||||
|
||||
int ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
|
||||
debayer_->getStatsFD(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue