[libcamera-devel] [PATCH 01/11] ipa: Name IPA modules after their source directory

Jacopo Mondi jacopo at jmondi.org
Mon Apr 27 09:46:05 CEST 2020


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.

> 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


More information about the libcamera-devel mailing list