summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipa/libipa/ipa_interface_wrapper.cpp16
-rw-r--r--src/ipa/libipa/ipa_interface_wrapper.h2
-rw-r--r--src/ipa/rkisp1/rkisp1.cpp2
-rw-r--r--src/ipa/vimc/vimc.cpp20
-rw-r--r--src/libcamera/include/ipa_context_wrapper.h2
-rw-r--r--src/libcamera/ipa_context_wrapper.cpp22
-rw-r--r--src/libcamera/ipa_interface.cpp32
-rw-r--r--src/libcamera/proxy/ipa_proxy_linux.cpp2
8 files changed, 98 insertions, 0 deletions
diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp
index b93c1c1f..f50f93a0 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.cpp
+++ b/src/ipa/libipa/ipa_interface_wrapper.cpp
@@ -86,6 +86,20 @@ void IPAInterfaceWrapper::init(struct ipa_context *_ctx)
ctx->ipa_->init();
}
+int IPAInterfaceWrapper::start(struct ipa_context *_ctx)
+{
+ IPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);
+
+ return ctx->ipa_->start();
+}
+
+void IPAInterfaceWrapper::stop(struct ipa_context *_ctx)
+{
+ IPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);
+
+ ctx->ipa_->stop();
+}
+
void IPAInterfaceWrapper::register_callbacks(struct ipa_context *_ctx,
const struct ipa_callback_ops *callbacks,
void *cb_ctx)
@@ -234,6 +248,8 @@ const struct ipa_context_ops IPAInterfaceWrapper::operations_ = {
.destroy = &IPAInterfaceWrapper::destroy,
.get_interface = &IPAInterfaceWrapper::get_interface,
.init = &IPAInterfaceWrapper::init,
+ .start = &IPAInterfaceWrapper::start,
+ .stop = &IPAInterfaceWrapper::stop,
.register_callbacks = &IPAInterfaceWrapper::register_callbacks,
.configure = &IPAInterfaceWrapper::configure,
.map_buffers = &IPAInterfaceWrapper::map_buffers,
diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h
index 3fb7b447..e4bc6dd4 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.h
+++ b/src/ipa/libipa/ipa_interface_wrapper.h
@@ -24,6 +24,8 @@ private:
static void destroy(struct ipa_context *ctx);
static void *get_interface(struct ipa_context *ctx);
static void init(struct ipa_context *ctx);
+ static int start(struct ipa_context *ctx);
+ static void stop(struct ipa_context *ctx);
static void register_callbacks(struct ipa_context *ctx,
const struct ipa_callback_ops *callbacks,
void *cb_ctx);
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 438b3c66..af38e329 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -33,6 +33,8 @@ class IPARkISP1 : public IPAInterface
{
public:
int init() override { return 0; }
+ int start() override { return 0; }
+ void stop() override {}
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, const ControlInfoMap &> &entityControls) override;
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 6e2095b5..566a66e4 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -32,6 +32,10 @@ public:
~IPAVimc();
int init() override;
+
+ int start() override;
+ void stop() override;
+
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, const ControlInfoMap &> &entityControls) override {}
void mapBuffers(const std::vector<IPABuffer> &buffers) override {}
@@ -66,6 +70,22 @@ int IPAVimc::init()
return 0;
}
+int IPAVimc::start()
+{
+ trace(IPAOperationStart);
+
+ LOG(IPAVimc, Debug) << "start vimc IPA!";
+
+ return 0;
+}
+
+void IPAVimc::stop()
+{
+ trace(IPAOperationStop);
+
+ LOG(IPAVimc, Debug) << "stop vimc IPA!";
+}
+
void IPAVimc::initTrace()
{
struct stat fifoStat;
diff --git a/src/libcamera/include/ipa_context_wrapper.h b/src/libcamera/include/ipa_context_wrapper.h
index c9e19412..0a48bfe7 100644
--- a/src/libcamera/include/ipa_context_wrapper.h
+++ b/src/libcamera/include/ipa_context_wrapper.h
@@ -20,6 +20,8 @@ public:
~IPAContextWrapper();
int init() override;
+ int start() override;
+ void stop() override;
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, const ControlInfoMap &> &entityControls) override;
diff --git a/src/libcamera/ipa_context_wrapper.cpp b/src/libcamera/ipa_context_wrapper.cpp
index 946a2fd8..ab6ce396 100644
--- a/src/libcamera/ipa_context_wrapper.cpp
+++ b/src/libcamera/ipa_context_wrapper.cpp
@@ -82,6 +82,28 @@ int IPAContextWrapper::init()
return 0;
}
+int IPAContextWrapper::start()
+{
+ if (intf_)
+ return intf_->start();
+
+ if (!ctx_)
+ return 0;
+
+ return ctx_->ops->start(ctx_);
+}
+
+void IPAContextWrapper::stop()
+{
+ if (intf_)
+ return intf_->stop();
+
+ if (!ctx_)
+ return;
+
+ ctx_->ops->stop(ctx_);
+}
+
void IPAContextWrapper::configure(const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, const ControlInfoMap &> &entityControls)
{
diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp
index 5959e7de..0b785bdf 100644
--- a/src/libcamera/ipa_interface.cpp
+++ b/src/libcamera/ipa_interface.cpp
@@ -236,6 +236,20 @@
*/
/**
+ * \var ipa_context_ops::start
+ * \brief Start the IPA context
+ *
+ * \sa libcamera::IPAInterface::start()
+ */
+
+/**
+ * \var ipa_context_ops::stop
+ * \brief Stop the IPA context
+ *
+ * \sa libcamera::IPAInterface::stop()
+ */
+
+/**
* \var ipa_context_ops::register_callbacks
* \brief Register callback operation from the IPA to the pipeline handler
* \param[in] ctx The IPA context
@@ -413,6 +427,24 @@ namespace libcamera {
*/
/**
+ * \fn IPAInterface::start()
+ * \brief Start the IPA
+ *
+ * This method informs the IPA module that the camera is about to be started.
+ * The IPA module shall prepare any resources it needs to operate.
+ *
+ * \return 0 on success or a negative error code otherwise
+ */
+
+/**
+ * \fn IPAInterface::stop()
+ * \brief Stop the IPA
+ *
+ * This method informs the IPA module that the camera is stopped. The IPA module
+ * shall release resources prepared in start().
+ */
+
+/**
* \fn IPAInterface::configure()
* \brief Configure the IPA stream and sensor settings
* \param[in] streamConfig Configuration of all active streams
diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp
index c7218fb4..2aa80b94 100644
--- a/src/libcamera/proxy/ipa_proxy_linux.cpp
+++ b/src/libcamera/proxy/ipa_proxy_linux.cpp
@@ -27,6 +27,8 @@ public:
~IPAProxyLinux();
int init() override { return 0; }
+ int start() override { return 0; }
+ void stop() override {}
void configure(const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, const ControlInfoMap &> &entityControls) override {}
void mapBuffers(const std::vector<IPABuffer> &buffers) override {}