From d7e0985ce13d094608bec9b496873ae0361ea87d Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sat, 28 Sep 2019 06:41:22 +0300 Subject: ipa: Allow short-circuiting the ipa_context_ops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Jacopo Mondi Reviewed-by: Jacopo Mondi Reviewed-by: Niklas Söderlund Reviewed-by: Kieran Bingham --- src/ipa/libipa/ipa_interface_wrapper.cpp | 8 ++++++++ src/ipa/libipa/ipa_interface_wrapper.h | 1 + 2 files changed, 9 insertions(+) (limited to 'src/ipa/libipa') diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp index 80c5648f..6a389dfa 100644 --- a/src/ipa/libipa/ipa_interface_wrapper.cpp +++ b/src/ipa/libipa/ipa_interface_wrapper.cpp @@ -72,6 +72,13 @@ void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx) delete ctx; } +void *IPAInterfaceWrapper::get_interface(struct ipa_context *_ctx) +{ + IPAInterfaceWrapper *ctx = static_cast(_ctx); + + return ctx->ipa_.get(); +} + void IPAInterfaceWrapper::init(struct ipa_context *_ctx) { IPAInterfaceWrapper *ctx = static_cast(_ctx); @@ -228,6 +235,7 @@ void IPAInterfaceWrapper::queueFrameAction(unsigned int frame, */ const struct ipa_context_ops IPAInterfaceWrapper::operations_ = { .destroy = &IPAInterfaceWrapper::destroy, + .get_interface = &IPAInterfaceWrapper::get_interface, .init = &IPAInterfaceWrapper::init, .register_callbacks = &IPAInterfaceWrapper::register_callbacks, .configure = &IPAInterfaceWrapper::configure, diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h index 17be2062..3fb7b447 100644 --- a/src/ipa/libipa/ipa_interface_wrapper.h +++ b/src/ipa/libipa/ipa_interface_wrapper.h @@ -22,6 +22,7 @@ public: private: static void destroy(struct ipa_context *ctx); + static void *get_interface(struct ipa_context *ctx); static void init(struct ipa_context *ctx); static void register_callbacks(struct ipa_context *ctx, const struct ipa_callback_ops *callbacks, -- cgit v1.2.1