[PATCH v2] libcamera: software_isp: Clear IPA context on configure and stop

Robert Mader robert.mader at collabora.com
Sun Oct 13 19:57:19 CEST 2024


Like the hardware pipelines do. Not clearing frameContexts otherwise can
trigger asserts like "Frame context for ... has been overwritten by ..."
when switching between cameras using the swISP, e.g. on phones.

Clearing the configuration and active state will become more important
with upcoming changes such as getting the black level from the camera
helper.

Fixes: 04d171e6 ("libcamera: software_isp: Call Algorithm::queueRequest")
Signed-off-by: Robert Mader <robert.mader at collabora.com>

---

Changes in version 2:
 - Also clear frameContexts as well as other context data on configure
 - Change commit title and message accordingly, previous title:
   "libcamera: software_isp: Clear frameContexts on Stop()"
---
 src/ipa/simple/soft_simple.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
index b28c7039..3b25d7d0 100644
--- a/src/ipa/simple/soft_simple.cpp
+++ b/src/ipa/simple/soft_simple.cpp
@@ -184,6 +184,11 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo)
 	const ControlInfo &exposureInfo = sensorInfoMap_.find(V4L2_CID_EXPOSURE)->second;
 	const ControlInfo &gainInfo = sensorInfoMap_.find(V4L2_CID_ANALOGUE_GAIN)->second;
 
+	/* Clear the IPA context before the streaming session. */
+	context_.configuration = {};
+	context_.activeState = {};
+	context_.frameContexts.clear();
+
 	context_.configuration.agc.exposureMin = exposureInfo.min().get<int32_t>();
 	context_.configuration.agc.exposureMax = exposureInfo.max().get<int32_t>();
 	if (!context_.configuration.agc.exposureMin) {
@@ -245,6 +250,7 @@ int IPASoftSimple::start()
 
 void IPASoftSimple::stop()
 {
+  context_.frameContexts.clear();
 }
 
 void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &controls)
-- 
2.47.0



More information about the libcamera-devel mailing list