[libcamera-devel] [PATCH] pipeline: rpi: always initialize the embedded buffer in tryRunPipeline

Elias Naur mail at eliasnaur.com
Sat Jan 20 22:14:49 CET 2024


Vc4CameraData::findMatchBuffers may return successfully without setting
the embedded buffer. Make sure to initialize the buffer and id to avoid
accessing garbage data.

Without this change, libcamera v0.2.0 usually crashes with an assertion
error:

 ipa_base.cpp:397 assertion "it != buffers_.end()" failed in prepareIsp()

Signed-off-by: Elias Naur <mail at eliasnaur.com>
---
 src/libcamera/pipeline/rpi/vc4/vc4.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
index 26102ea7..d76389f3 100644
--- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp
+++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
@@ -906,7 +906,7 @@ void Vc4CameraData::setCameraTimeout(uint32_t maxFrameLengthMs)
 
 void Vc4CameraData::tryRunPipeline()
 {
-	FrameBuffer *embeddedBuffer;
+	FrameBuffer *embeddedBuffer = nullptr;
 	BayerFrame bayerFrame;
 
 	/* If any of our request or buffer queues are empty, we cannot proceed. */
@@ -945,6 +945,7 @@ void Vc4CameraData::tryRunPipeline()
 	params.requestControls = request->controls();
 	params.ipaContext = request->sequence();
 	params.delayContext = bayerFrame.delayContext;
+	params.buffers.embedded = 0;
 
 	if (embeddedBuffer) {
 		unsigned int embeddedId = unicam_[Unicam::Embedded].getBufferId(embeddedBuffer);
-- 
2.42.0



More information about the libcamera-devel mailing list