Files
external_libcamera/src/libcamera/include/ipa_proxy.h
Paul Elder c2a8217df5 libcamera: add IPA proxy
Add an IPAProxy class whose implementations will act as a proxy between a
pipeline handler and an isolated IPA interface. Also add an IPAProxyFactory
that will construct the IPAProxy implementations as necessary.

Update Doxygen to ignore the directory where IPAProxy implementations will
reside.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-07-12 16:32:29 +09:00

67 lines
1.3 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* ipa_proxy.h - Image Processing Algorithm proxy
*/
#ifndef __LIBCAMERA_IPA_PROXY_H__
#define __LIBCAMERA_IPA_PROXY_H__
#include <memory>
#include <string>
#include <vector>
#include <libcamera/ipa/ipa_interface.h>
#include "ipa_module.h"
#include "utils.h"
namespace libcamera {
class IPAProxy : public IPAInterface
{
public:
IPAProxy();
~IPAProxy();
bool isValid() const { return valid_; }
protected:
std::string resolvePath(const std::string &file) const;
bool valid_;
};
class IPAProxyFactory
{
public:
IPAProxyFactory(const char *name);
virtual ~IPAProxyFactory(){};
virtual std::unique_ptr<IPAProxy> create(IPAModule *ipam) = 0;
const std::string &name() const { return name_; }
static void registerType(IPAProxyFactory *factory);
static std::vector<IPAProxyFactory *> &factories();
private:
std::string name_;
};
#define REGISTER_IPA_PROXY(proxy) \
class proxy##Factory final : public IPAProxyFactory \
{ \
public: \
proxy##Factory() : IPAProxyFactory(#proxy) {} \
std::unique_ptr<IPAProxy> create(IPAModule *ipam) \
{ \
return utils::make_unique<proxy>(ipam); \
} \
}; \
static proxy##Factory global_##proxy##Factory;
} /* namespace libcamera */
#endif /* __LIBCAMERA_IPA_PROXY_H__ */