[libcamera-devel] [PATCH 01/11] ipa: Name IPA modules after their source directory
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Apr 27 12:25:49 CEST 2020
Hi Laurent,
On 27/04/2020 08:46, Jacopo Mondi wrote:
> Hi Laurent,
>
> On Mon, Apr 27, 2020 at 06:17:03AM +0300, Laurent Pinchart wrote:
>> 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.
>>
>
> I wonder, should we use 'name' for this purpose, or should we get the
> file name directly, strip the .cpp extension out and add a field for
> that purpose ? I feel maintaining the name in synch with the file name
> is a (relatively small) burden we could avoid.
Hrm ... some interesting ideas on a google search to get the stripped
filename at compile time:
https://gist.github.com/huangml/3221950a96154180467a ... but I think in
this instance it requires the directory name - not the file name.
(though equally, perhaps they should be the same too).
I also wonder if perhaps to get the actual desired effect required
(location of the IPA tree) we couldn't use a method similar to the
buildPath() ... but maybe that's more work for little current gain, and
making that path buildable is a simple solution for the time being.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
>> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>> ---
>> src/ipa/rkisp1/rkisp1.cpp | 2 +-
>> src/ipa/vimc/vimc.cpp | 2 +-
>> src/libcamera/ipa_module.cpp | 20 ++++++++++++++++++++
>> test/ipa/ipa_module_test.cpp | 2 +-
>> 4 files changed, 23 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
>> index acbbe58c7a2e..7f0ffb0a791f 100644
>> --- a/src/ipa/rkisp1/rkisp1.cpp
>> +++ b/src/ipa/rkisp1/rkisp1.cpp
>> @@ -274,7 +274,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
>> IPA_MODULE_API_VERSION,
>> 1,
>> "PipelineHandlerRkISP1",
>> - "RkISP1 IPA",
>> + "rkisp1",
>> };
>>
>> struct ipa_context *ipaCreate()
>> diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
>> index d2267e11737f..cfdbd6f99155 100644
>> --- a/src/ipa/vimc/vimc.cpp
>> +++ b/src/ipa/vimc/vimc.cpp
>> @@ -126,7 +126,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
>> IPA_MODULE_API_VERSION,
>> 0,
>> "PipelineHandlerVimc",
>> - "Dummy IPA for Vimc",
>> + "vimc",
>> };
>>
>> struct ipa_context *ipaCreate()
>> diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
>> index 958ede74688e..52823e88a508 100644
>> --- a/src/libcamera/ipa_module.cpp
>> +++ b/src/libcamera/ipa_module.cpp
>> @@ -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)) {
>> diff --git a/test/ipa/ipa_module_test.cpp b/test/ipa/ipa_module_test.cpp
>> index d22c302fa726..e3aee190b410 100644
>> --- a/test/ipa/ipa_module_test.cpp
>> +++ b/test/ipa/ipa_module_test.cpp
>> @@ -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);
>> --
>> Regards,
>>
>> Laurent Pinchart
>>
>> _______________________________________________
>> libcamera-devel mailing list
>> libcamera-devel at lists.libcamera.org
>> https://lists.libcamera.org/listinfo/libcamera-devel
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list