summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo.mondi@ideasonboard.com>2024-10-16 11:42:31 +0200
committerJacopo Mondi <jacopo.mondi@ideasonboard.com>2024-10-16 11:52:35 +0200
commit35fdd26eebef3e73a0e227bab407124cce8917b8 (patch)
treeca711c9cd4152859ca139b51e2c2f85243c61a0e
parente4edcf55ba4d5254973137107ae2b376f7635f45 (diff)
libipa: FrameContext: Move init() to FrameContext
The FCtQueue structure initializes a new FrameContext using its init() function. In case of request underrun, where a FrameContext is initialized without application's controls being supplied, the FrameContext needs to be initialized to default values. In order to allow the single IPAs to initialize a FrameContext to the desired default values, move the init() function to the FrameContext structure, which each IPA derives to a per-IPA type. In this way each IPA can override the FrameContext::init() function and initialize the FrameContext to the desired default values. Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
-rw-r--r--src/ipa/libipa/fc_queue.cpp10
-rw-r--r--src/ipa/libipa/fc_queue.h18
-rw-r--r--src/ipa/rkisp1/ipa_context.cpp5
-rw-r--r--src/ipa/rkisp1/ipa_context.h2
4 files changed, 26 insertions, 9 deletions
diff --git a/src/ipa/libipa/fc_queue.cpp b/src/ipa/libipa/fc_queue.cpp
index 0365e919..41c563dd 100644
--- a/src/ipa/libipa/fc_queue.cpp
+++ b/src/ipa/libipa/fc_queue.cpp
@@ -39,6 +39,16 @@ namespace ipa {
*/
/**
+ * \fn FrameContext::init()
+ * \param[in] frameNum The frame number to assign to this FrameContext
+ * \brief Initialize a frame context
+ *
+ * This function initializes a frame context by assigning it a frame number.
+ * The single IPA modules are expected to override this function to initialize
+ * their derived FrameContext implementation to their desired default values.
+ */
+
+/**
* \class FCQueue
* \brief A support class for managing FrameContext instances in IPA modules
* \tparam FrameContext The IPA module-specific FrameContext derived class type
diff --git a/src/ipa/libipa/fc_queue.h b/src/ipa/libipa/fc_queue.h
index 24d9e82b..573ef1e0 100644
--- a/src/ipa/libipa/fc_queue.h
+++ b/src/ipa/libipa/fc_queue.h
@@ -22,6 +22,12 @@ template<typename FrameContext>
class FCQueue;
struct FrameContext {
+protected:
+ virtual void init(const uint32_t frameNum)
+ {
+ frame = frameNum;
+ }
+
private:
template<typename T> friend class FCQueue;
uint32_t frame;
@@ -61,7 +67,7 @@ public:
LOG(FCQueue, Warning)
<< "Frame " << frame << " already initialised";
else
- init(frameContext, frame);
+ frameContext.init(frame);
return frameContext;
}
@@ -98,18 +104,12 @@ public:
LOG(FCQueue, Warning)
<< "Obtained an uninitialised FrameContext for " << frame;
- init(frameContext, frame);
+ frameContext.init(frame);
return frameContext;
}
-private:
- void init(FrameContext &frameContext, const uint32_t frame)
- {
- frameContext = {};
- frameContext.frame = frame;
- }
-
+protected:
std::vector<FrameContext> contexts_;
};
diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp
index 14d0c02a..4e4fe5f4 100644
--- a/src/ipa/rkisp1/ipa_context.cpp
+++ b/src/ipa/rkisp1/ipa_context.cpp
@@ -417,6 +417,11 @@ namespace libcamera::ipa::rkisp1 {
* \brief Analogue gain multiplier
*/
+void IPAFrameContext::init(const uint32_t frameNum)
+{
+ FrameContext::init(frameNum);
+}
+
/**
* \struct IPAContext
* \brief Global IPA context data shared between all algorithms
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
index e274d9b0..51e04bc3 100644
--- a/src/ipa/rkisp1/ipa_context.h
+++ b/src/ipa/rkisp1/ipa_context.h
@@ -177,6 +177,8 @@ struct IPAFrameContext : public FrameContext {
struct {
Matrix<float, 3, 3> ccm;
} ccm;
+
+ void init(const uint32_t frame) override;
};
struct IPAContext {