libcamera: IPAManager: remove instance() and make createIPA() static

As the only usage of IPAManager::instance() is by the pipeline handlers
to call IPAManager::createIPA(), remove the former and make the latter
static. Update the pipeline handlers and tests accordingly.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Paul Elder 2020-06-05 14:58:58 +09:00
parent 46d544345c
commit 6e730695de
6 changed files with 10 additions and 26 deletions

View file

@ -25,9 +25,7 @@ public:
IPAManager(); IPAManager();
~IPAManager(); ~IPAManager();
static IPAManager *instance(); static std::unique_ptr<IPAProxy> createIPA(PipelineHandler *pipe,
std::unique_ptr<IPAProxy> createIPA(PipelineHandler *pipe,
uint32_t maxVersion, uint32_t maxVersion,
uint32_t minVersion); uint32_t minVersion);

View file

@ -99,8 +99,7 @@ IPAManager *IPAManager::self_ = nullptr;
* \brief Construct an IPAManager instance * \brief Construct an IPAManager instance
* *
* The IPAManager class is meant to only be instantiated once, by the * The IPAManager class is meant to only be instantiated once, by the
* CameraManager. Pipeline handlers shall use the instance() function to access * CameraManager.
* the IPAManager instance.
*/ */
IPAManager::IPAManager() IPAManager::IPAManager()
{ {
@ -159,19 +158,6 @@ IPAManager::~IPAManager()
self_ = nullptr; self_ = nullptr;
} }
/**
* \brief Retrieve the IPA manager instance
*
* The IPAManager is constructed by the CameraManager. This function shall be
* used to retrieve the single instance of the manager.
*
* \return The IPA manager instance
*/
IPAManager *IPAManager::instance()
{
return self_;
}
/** /**
* \brief Identify shared library objects within a directory * \brief Identify shared library objects within a directory
* \param[in] libDir The directory to search for shared objects * \param[in] libDir The directory to search for shared objects
@ -273,7 +259,7 @@ std::unique_ptr<IPAProxy> IPAManager::createIPA(PipelineHandler *pipe,
{ {
IPAModule *m = nullptr; IPAModule *m = nullptr;
for (IPAModule *module : modules_) { for (IPAModule *module : self_->modules_) {
if (module->match(pipe, minVersion, maxVersion)) { if (module->match(pipe, minVersion, maxVersion)) {
m = module; m = module;
break; break;
@ -289,7 +275,7 @@ std::unique_ptr<IPAProxy> IPAManager::createIPA(PipelineHandler *pipe,
* *
* \todo Implement a better proxy selection * \todo Implement a better proxy selection
*/ */
const char *proxyName = isSignatureValid(m) const char *proxyName = self_->isSignatureValid(m)
? "IPAProxyThread" : "IPAProxyLinux"; ? "IPAProxyThread" : "IPAProxyLinux";
IPAProxyFactory *pf = nullptr; IPAProxyFactory *pf = nullptr;

View file

@ -1118,7 +1118,7 @@ void RPiCameraData::frameStarted(uint32_t sequence)
int RPiCameraData::loadIPA() int RPiCameraData::loadIPA()
{ {
ipa_ = IPAManager::instance()->createIPA(pipe_, 1, 1); ipa_ = IPAManager::createIPA(pipe_, 1, 1);
if (!ipa_) if (!ipa_)
return -ENOENT; return -ENOENT;

View file

@ -395,7 +395,7 @@ private:
int RkISP1CameraData::loadIPA() int RkISP1CameraData::loadIPA()
{ {
ipa_ = IPAManager::instance()->createIPA(pipe_, 1, 1); ipa_ = IPAManager::createIPA(pipe_, 1, 1);
if (!ipa_) if (!ipa_)
return -ENOENT; return -ENOENT;

View file

@ -410,7 +410,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media); std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media);
data->ipa_ = IPAManager::instance()->createIPA(this, 0, 0); data->ipa_ = IPAManager::createIPA(this, 0, 0);
if (data->ipa_ != nullptr) { if (data->ipa_ != nullptr) {
std::string conf = data->ipa_->configurationFile("vimc.conf"); std::string conf = data->ipa_->configurationFile("vimc.conf");
data->ipa_->init(IPASettings{ conf }); data->ipa_->init(IPASettings{ conf });

View file

@ -95,7 +95,7 @@ protected:
EventDispatcher *dispatcher = thread()->eventDispatcher(); EventDispatcher *dispatcher = thread()->eventDispatcher();
Timer timer; Timer timer;
ipa_ = IPAManager::instance()->createIPA(pipe_.get(), 0, 0); ipa_ = IPAManager::createIPA(pipe_.get(), 0, 0);
if (!ipa_) { if (!ipa_) {
cerr << "Failed to create VIMC IPA interface" << endl; cerr << "Failed to create VIMC IPA interface" << endl;
return TestFail; return TestFail;