ipa: Allow short-circuiting the ipa_context_ops

When an IPA module is loaded without isolation and implements the
IPAInterface internally, going through ipa_context_ops is a waste of
time. Add an operation to retrieve the IPAInterface, and use it directly
in the IPAContextWrapper.

For debugging purpose, make it possible to forcing usage of the C API by
defining the LIBCAMERA_IPA_FORCE_C_API environment variable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2019-09-28 06:41:22 +03:00
parent 8162ac1647
commit d7e0985ce1
6 changed files with 64 additions and 2 deletions

View File

@@ -62,6 +62,12 @@
* handlers to communicate with IPA modules. IPA modules may use the
* IPAInterface API internally if they want to benefit from the data and helper
* classes offered by libcamera.
*
* When an IPA module is loaded directly into the libcamera process and uses
* the IPAInterface API internally, short-circuiting the path to the
* ipa_context_ops and back to IPAInterface is desirable. To support this, IPA
* modules may implement the ipa_context_ops::get_interface function to return a
* pointer to their internal IPAInterface.
*/
/**
@@ -209,6 +215,18 @@
* \param[in] ctx The IPA context
*/
/**
* \var ipa_context_ops::get_interface
* \brief Retrieve the IPAInterface implemented by the ipa_context (optional)
* \param[in] ctx The IPA context
*
* IPA modules may implement this function to expose their internal
* IPAInterface, if any. When implemented, libcamera may at its sole discretion
* call it and then bypass the ipa_context_ops API by calling the IPAInterface
* methods directly. IPA modules shall still implement and support the full
* ipa_context_ops API.
*/
/**
* \var ipa_context_ops::init
* \brief Initialise the IPA context