summaryrefslogtreecommitdiff
path: root/src/ipa/libipa/fc_queue.h
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo.mondi@ideasonboard.com>2024-10-30 17:30:43 +0100
committerJacopo Mondi <jacopo.mondi@ideasonboard.com>2024-10-30 17:37:56 +0100
commit442842b4b4d88bc44e653bda5b8546dda5c2cb7a (patch)
treee38a561ec712cca6acc8e38d9df1cd04c42b4e67 /src/ipa/libipa/fc_queue.h
parentc31050d2a77a7960282bce6b3f6efff06a718d1c (diff)
ipa: rkisp1: Have algos initialize FrameContextpfc/rkisp1-free-run-v2
The RkISP1 AGC algorithms assumes the metering mode to be "MeteringMatrix" and pre-fill an array of weights associated with it stored in meteringModes_[MeteringMatrix] when intializing the algorithm in parseMeteringModes(). It laters fetches the weights when computing parameters using the FrameContext.agc.meteringMode as index of the meteringModes_ array. When a Request gets queued to the algorithm, the FrameContext.agc.meteringMode index is populated from the algorithm's active state, and optionally updated if the application has specified a different metering mode. In case of Request underrun however, a non-initialized FrameContext gets provided to the algorithm, causing an (unhandled) exception when accessing the meteringModes_ array. To handle the situation when a Request underrun occours and let algorithms initialize a FrameContext to safe defaults: - Add an 'underrun' flag to FrameContext - Add an 'initFrameContext()' function to RkISP1 algorithms - If a FrameContext is get() before being allocated, pass it through the algorithms' initFrameContext() to safely initialize it Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Diffstat (limited to 'src/ipa/libipa/fc_queue.h')
-rw-r--r--src/ipa/libipa/fc_queue.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ipa/libipa/fc_queue.h b/src/ipa/libipa/fc_queue.h
index a1d13652..d70ca960 100644
--- a/src/ipa/libipa/fc_queue.h
+++ b/src/ipa/libipa/fc_queue.h
@@ -22,6 +22,9 @@ template<typename FrameContext>
class FCQueue;
struct FrameContext {
+public:
+ bool underrun = false;
+
private:
template<typename T> friend class FCQueue;
uint32_t frame;
@@ -97,6 +100,7 @@ public:
* is called before alloc() by the IPA for frame#0.
*/
init(frameContext, frame);
+ frameContext.underrun = true;
return frameContext;
}
@@ -117,6 +121,7 @@ public:
<< "Obtained an uninitialised FrameContext for " << frame;
init(frameContext, frame);
+ frameContext.underrun = true;
return frameContext;
}