ipa: Pass IPA initialization settings to IPAInterface::init()
Add a new IPASettings class to pass IPA initialization settings through the IPAInterface::init() method. The settings currently only contain the name of a configuration file, and are expected to be extended later. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
@@ -19,7 +19,7 @@ public:
|
||||
IPAContextWrapper(struct ipa_context *context);
|
||||
~IPAContextWrapper();
|
||||
|
||||
int init() override;
|
||||
int init(const IPASettings &settings) override;
|
||||
int start() override;
|
||||
void stop() override;
|
||||
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
|
||||
|
||||
@@ -69,15 +69,18 @@ IPAContextWrapper::~IPAContextWrapper()
|
||||
ctx_->ops->destroy(ctx_);
|
||||
}
|
||||
|
||||
int IPAContextWrapper::init()
|
||||
int IPAContextWrapper::init(const IPASettings &settings)
|
||||
{
|
||||
if (intf_)
|
||||
return intf_->init();
|
||||
return intf_->init(settings);
|
||||
|
||||
if (!ctx_)
|
||||
return 0;
|
||||
|
||||
ctx_->ops->init(ctx_);
|
||||
struct ipa_settings c_settings;
|
||||
c_settings.configuration_file = settings.configurationFile.c_str();
|
||||
|
||||
ctx_->ops->init(ctx_, &c_settings);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -92,6 +92,16 @@
|
||||
* \brief The IPA context operations
|
||||
*/
|
||||
|
||||
/**
|
||||
* \struct ipa_settings
|
||||
* \brief IPA initialization settings for the IPA context operations
|
||||
* \sa IPASettings
|
||||
*
|
||||
* \var ipa_settings::configuration_file
|
||||
* \brief The name of the IPA configuration file (may be null or point to an
|
||||
* empty string)
|
||||
*/
|
||||
|
||||
/**
|
||||
* \struct ipa_stream
|
||||
* \brief Stream information for the IPA context operations
|
||||
@@ -231,6 +241,7 @@
|
||||
* \var ipa_context_ops::init
|
||||
* \brief Initialise the IPA context
|
||||
* \param[in] ctx The IPA context
|
||||
* \param[in] settings The IPA initialization settings
|
||||
*
|
||||
* \sa libcamera::IPAInterface::init()
|
||||
*/
|
||||
@@ -310,6 +321,24 @@
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
/**
|
||||
* \struct IPASettings
|
||||
* \brief IPA interface initialization settings
|
||||
*
|
||||
* The IPASettings structure stores data passed to the IPAInterface::init()
|
||||
* function. The data contains settings that don't depend on a particular camera
|
||||
* or pipeline configuration and are valid for the whole life time of the IPA
|
||||
* interface.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \var IPASettings::configurationFile
|
||||
* \brief The name of the IPA configuration file
|
||||
*
|
||||
* This field may be an empty string if the IPA doesn't require a configuration
|
||||
* file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \struct IPAStream
|
||||
* \brief Stream configuration for the IPA interface
|
||||
@@ -424,6 +453,11 @@ namespace libcamera {
|
||||
/**
|
||||
* \fn IPAInterface::init()
|
||||
* \brief Initialise the IPAInterface
|
||||
* \param[in] settings The IPA initialization settings
|
||||
*
|
||||
* This function initializes the IPA interface. It shall be called before any
|
||||
* other function of the IPAInterface. The \a settings carry initialization
|
||||
* parameters that are valid for the whole life time of the IPA interface.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -401,7 +401,7 @@ int RkISP1CameraData::loadIPA()
|
||||
ipa_->queueFrameAction.connect(this,
|
||||
&RkISP1CameraData::queueFrameAction);
|
||||
|
||||
ipa_->init();
|
||||
ipa_->init(IPASettings{});
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
|
||||
if (data->ipa_ == nullptr)
|
||||
LOG(VIMC, Warning) << "no matching IPA found";
|
||||
else
|
||||
data->ipa_->init();
|
||||
data->ipa_->init(IPASettings{});
|
||||
|
||||
/* Locate and open the capture video node. */
|
||||
if (data->init(media))
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
IPAProxyLinux(IPAModule *ipam);
|
||||
~IPAProxyLinux();
|
||||
|
||||
int init() override { return 0; }
|
||||
int init(const IPASettings &settings) override { return 0; }
|
||||
int start() override { return 0; }
|
||||
void stop() override {}
|
||||
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
|
||||
|
||||
@@ -25,7 +25,7 @@ class IPAProxyThread : public IPAProxy, public Object
|
||||
public:
|
||||
IPAProxyThread(IPAModule *ipam);
|
||||
|
||||
int init() override;
|
||||
int init(const IPASettings &settings) override;
|
||||
int start() override;
|
||||
void stop() override;
|
||||
|
||||
@@ -97,9 +97,9 @@ IPAProxyThread::IPAProxyThread(IPAModule *ipam)
|
||||
valid_ = true;
|
||||
}
|
||||
|
||||
int IPAProxyThread::init()
|
||||
int IPAProxyThread::init(const IPASettings &settings)
|
||||
{
|
||||
int ret = ipa_->init();
|
||||
int ret = ipa_->init(settings);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user