summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHan-Lin Chen <hanlinchen@chromium.org>2021-10-29 19:59:15 +0800
committerJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-11-15 10:49:13 +0100
commit726d6087c00c1e29b014b04d6044b303d30e4111 (patch)
tree12ffb02bfe3b2972a37c56a857dd098bc861a1cd
parentf12efa6730645ba5a9a6c05ea182824ced2a0c3f (diff)
ipu3: ipa: Report effective sensor controls with statistics to IPA
The Intel close sourced IPA requires the effective controls applied to the sensor when the statistics are generated. Report effective sensor controls with the statistics to IPA. Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org> [Jean-Michel: Reword s/stastistics/statistics and move reset after IPA start] Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
-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);
}