summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/pipeline/ipu3/frames.h4
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp5
2 files changed, 9 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/frames.h b/src/libcamera/pipeline/ipu3/frames.h
index 3ef7e445..614701e2 100644
--- a/src/libcamera/pipeline/ipu3/frames.h
+++ b/src/libcamera/pipeline/ipu3/frames.h
@@ -14,6 +14,8 @@
#include <libcamera/base/signal.h>
+#include <libcamera/controls.h>
+
namespace libcamera {
class FrameBuffer;
@@ -34,6 +36,8 @@ public:
FrameBuffer *paramBuffer;
FrameBuffer *statBuffer;
+ ControlList effectiveSensorControls;
+
bool paramDequeued;
bool metadataProcessed;
};
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 75fb2d90..63916caf 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -767,6 +767,8 @@ int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlLis
if (ret)
goto error;
+ data->delayedCtrls_->reset();
+
/*
* Start the ImgU video devices, buffers will be queued to the
* ImgU output and viewfinder when requests will be queued.
@@ -1363,6 +1365,8 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
request->metadata().set(controls::SensorTimestamp,
buffer->metadata().timestamp);
+ info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence);
+
if (request->findBuffer(&rawStream_))
pipe()->completeBuffer(request, buffer);
@@ -1419,6 +1423,7 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer)
ev.frame = info->id;
ev.bufferId = info->statBuffer->cookie();
ev.frameTimestamp = request->metadata().get(controls::SensorTimestamp);
+ ev.sensorControls = info->effectiveSensorControls;
ipa_->processEvent(ev);
}