ipa: Switch to the plain C API

Switch IPA communication to the plain C API. As the IPAInterface class
is easier to use for pipeline handlers than a plain C API, retain it and
add an IPAContextWrapper that translate between the C++ and the C APIs.

On the IPA module side usage of IPAInterface may be desired for IPAs
implemented in C++ that want to link to libcamera. For those IPAs, a new
IPAInterfaceWrapper helper class is introduced to wrap the IPAInterface
implemented internally by the IPA module into an ipa_context,
ipa_context_ops and ipa_callback_ops.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Jacopo Mondi 2019-09-15 17:30:26 +03:00 committed by Laurent Pinchart
parent bc9527de45
commit 132d99bc8f
17 changed files with 676 additions and 23 deletions

View file

@ -19,6 +19,7 @@
#include <libcamera/buffer.h>
#include <libcamera/control_ids.h>
#include <libcamera/request.h>
#include <libipa/ipa_interface_wrapper.h>
#include "log.h"
#include "utils.h"
@ -247,9 +248,9 @@ const struct IPAModuleInfo ipaModuleInfo = {
"LGPL-2.1-or-later",
};
IPAInterface *ipaCreate()
struct ipa_context *ipaCreate()
{
return new IPARkISP1();
return new IPAInterfaceWrapper(utils::make_unique<IPARkISP1>());
}
}