ipa: Name IPA modules after their source directory
The IPAModuleInfo::name field is currently a free-formed string that has little use. Tighten its usage rules to make it suitable for building file system paths to IPA-specific resources by matching the directory name of the IPA module. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -274,7 +274,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
|
||||
IPA_MODULE_API_VERSION,
|
||||
1,
|
||||
"PipelineHandlerRkISP1",
|
||||
"RkISP1 IPA",
|
||||
"rkisp1",
|
||||
};
|
||||
|
||||
struct ipa_context *ipaCreate()
|
||||
|
||||
@@ -126,7 +126,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
|
||||
IPA_MODULE_API_VERSION,
|
||||
0,
|
||||
"PipelineHandlerVimc",
|
||||
"Dummy IPA for Vimc",
|
||||
"vimc",
|
||||
};
|
||||
|
||||
struct ipa_context *ipaCreate()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <ctype.h>
|
||||
#include <dlfcn.h>
|
||||
#include <elf.h>
|
||||
#include <errno.h>
|
||||
@@ -216,6 +217,11 @@ Span<uint8_t> elfLoadSymbol(Span<uint8_t> elf, const char *symbol)
|
||||
* \var IPAModuleInfo::name
|
||||
* \brief The name of the IPA module
|
||||
*
|
||||
* The name may be used to build file system paths to IPA-specific resources.
|
||||
* It shall only contain printable characters, and may not contain '/', '*',
|
||||
* '?' or '\'. For IPA modules included in libcamera, it shall match the
|
||||
* directory of the IPA module in the source tree.
|
||||
*
|
||||
* \todo Allow user to choose to isolate open source IPAs
|
||||
*/
|
||||
|
||||
@@ -287,6 +293,20 @@ int IPAModule::loadIPAModuleInfo()
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Validate the IPA module name. */
|
||||
std::string ipaName = info_.name;
|
||||
auto iter = std::find_if_not(ipaName.begin(), ipaName.end(),
|
||||
[](unsigned char c) -> bool {
|
||||
return isprint(c) && c != '/' &&
|
||||
c != '?' && c != '*' &&
|
||||
c != '\\';
|
||||
});
|
||||
if (iter != ipaName.end()) {
|
||||
LOG(IPAModule, Error)
|
||||
<< "Invalid IPA module name '" << ipaName << "'";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Load the signature. Failures are not fatal. */
|
||||
File sign{ libPath_ + ".sign" };
|
||||
if (!sign.open(File::ReadOnly)) {
|
||||
|
||||
@@ -58,7 +58,7 @@ protected:
|
||||
IPA_MODULE_API_VERSION,
|
||||
0,
|
||||
"PipelineHandlerVimc",
|
||||
"Dummy IPA for Vimc",
|
||||
"vimc",
|
||||
};
|
||||
|
||||
count += runTest("src/ipa/vimc/ipa_vimc.so", testInfo);
|
||||
|
||||
Reference in New Issue
Block a user