summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarnabás Pőcze <barnabas.pocze@ideasonboard.com>2025-01-22 18:17:19 +0100
committerBarnabás Pőcze <barnabas.pocze@ideasonboard.com>2025-03-21 15:43:41 +0100
commitd716200d2b81aa884cf395ec742c6df06675306b (patch)
tree8df0a02b22e3d4e7e3ef5b2bcefcf1f40d8d84c7
parent4a5ad4e9b04e0c41efddc9800d4462c23c016904 (diff)
libcamera: ipa_manager: Store `IPAModule`s in `std::unique_ptr`
Express the ownership more clearly by using a smart pointer type. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--include/libcamera/internal/ipa_manager.h3
-rw-r--r--src/libcamera/ipa_manager.cpp18
2 files changed, 8 insertions, 13 deletions
diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h
index 16dede0c..a0d448cf 100644
--- a/include/libcamera/internal/ipa_manager.h
+++ b/include/libcamera/internal/ipa_manager.h
@@ -7,6 +7,7 @@
#pragma once
+#include <memory>
#include <stdint.h>
#include <vector>
@@ -67,7 +68,7 @@ private:
bool isSignatureValid(IPAModule *ipa) const;
- std::vector<IPAModule *> modules_;
+ std::vector<std::unique_ptr<IPAModule>> modules_;
#if HAVE_IPA_PUBKEY
static const uint8_t publicKeyData_[];
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index cfc24d38..830750dc 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -149,11 +149,7 @@ IPAManager::IPAManager()
<< "No IPA found in '" IPA_MODULE_DIR "'";
}
-IPAManager::~IPAManager()
-{
- for (IPAModule *module : modules_)
- delete module;
-}
+IPAManager::~IPAManager() = default;
/**
* \brief Identify shared library objects within a directory
@@ -226,15 +222,13 @@ unsigned int IPAManager::addDir(const char *libDir, unsigned int maxDepth)
unsigned int count = 0;
for (const std::string &file : files) {
- IPAModule *ipaModule = new IPAModule(file);
- if (!ipaModule->isValid()) {
- delete ipaModule;
+ auto ipaModule = std::make_unique<IPAModule>(file);
+ if (!ipaModule->isValid())
continue;
- }
LOG(IPAManager, Debug) << "Loaded IPA module '" << file << "'";
- modules_.push_back(ipaModule);
+ modules_.push_back(std::move(ipaModule));
count++;
}
@@ -250,9 +244,9 @@ unsigned int IPAManager::addDir(const char *libDir, unsigned int maxDepth)
IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion,
uint32_t maxVersion)
{
- for (IPAModule *module : modules_) {
+ for (const auto &module : modules_) {
if (module->match(pipe, minVersion, maxVersion))
- return module;
+ return module.get();
}
return nullptr;