summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-15 23:18:23 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-23 09:50:50 +0300
commitad0a61e32ca54ddcb400bbb2d8396f15b10bda90 (patch)
tree0754a2e318d29266ceed2b17e363a5e5edd7d3a0 /src
parentbd67bef8c67dac9759ef3634121062a934651fa3 (diff)
libcamera: ipa_manager: Rework error messages when enumerating IPAs
When enumerating IPAs, the system IPA directory and all the directories listed in the LIBCAMERA_IPA_MODULE_PATH environment variable are listed in turn. Failing to list any of those directories results in an error message being printed for every failure. This is particularly common when developing libcamera, as IPAs may not have been installed locally. To avoid unnecessarily worrying error messages, rework the enumeration procedure to only print a message when no IPA can be found at all. Individual missing directories are not considered as an issue anymore. The message is also downgraded from an error to a warning as the situation may still be normal. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/ipa_manager.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index 4276d995..708233e8 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -33,26 +33,43 @@ LOG_DEFINE_CATEGORY(IPAManager)
IPAManager::IPAManager()
{
- addDir(IPA_MODULE_DIR);
+ unsigned int ipaCount = 0;
+ int ret;
+
+ ret = addDir(IPA_MODULE_DIR);
+ if (ret > 0)
+ ipaCount += ret;
const char *modulePaths = utils::secure_getenv("LIBCAMERA_IPA_MODULE_PATH");
- if (!modulePaths)
+ if (!modulePaths) {
+ if (!ipaCount)
+ LOG(IPAManager, Warning)
+ << "No IPA found in '" IPA_MODULE_DIR "'";
return;
+ }
+ const char *paths = modulePaths;
while (1) {
- const char *delim = strchrnul(modulePaths, ':');
- size_t count = delim - modulePaths;
+ const char *delim = strchrnul(paths, ':');
+ size_t count = delim - paths;
if (count) {
- std::string path(modulePaths, count);
- addDir(path.c_str());
+ std::string path(paths, count);
+ ret = addDir(path.c_str());
+ if (ret > 0)
+ ipaCount += ret;
}
if (*delim == '\0')
break;
- modulePaths += count + 1;
+ paths += count + 1;
}
+
+ if (!ipaCount)
+ LOG(IPAManager, Warning)
+ << "No IPA found in '" IPA_MODULE_DIR "' and '"
+ << modulePaths << "'";
}
IPAManager::~IPAManager()
@@ -92,13 +109,8 @@ int IPAManager::addDir(const char *libDir)
DIR *dir;
dir = opendir(libDir);
- if (!dir) {
- int ret = -errno;
- LOG(IPAManager, Error)
- << "Invalid path " << libDir << " for IPA modules: "
- << strerror(-ret);
- return ret;
- }
+ if (!dir)
+ return -errno;
unsigned int count = 0;
while ((ent = readdir(dir)) != nullptr) {