[PATCH] [RFC] libcamera: pipeline: Add h/v blanking delays
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue May 13 19:43:12 CEST 2025
The HBLANK and VBLANK control delays are not being accounted for in all
of the libipa platforms. Update their delayed controls instantiation
accordingly.
In particular, update the RKISP1 VBLANK control delay to be marked as a
priority control as well as setting the correct delay to align with the
existing Raspberry Pi implementation.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
Marking this as RFC because I haven't tested this or explored it yet -
but as I was reviewing other parts of the code base - I noted that these
are inconsistent across pipeline handlers - so lets figure out why and
make sure all the pipeline handlers operate in the same way where
possible.
src/libcamera/pipeline/ipu3/ipu3.cpp | 2 ++
src/libcamera/pipeline/mali-c55/mali-c55.cpp | 2 ++
src/libcamera/pipeline/rkisp1/rkisp1.cpp | 3 ++-
src/libcamera/pipeline/simple/simple.cpp | 2 ++
4 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index e31e3879dcc9..4cec22b01940 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1082,6 +1082,8 @@ int PipelineHandlerIPU3::registerCameras()
std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
{ V4L2_CID_ANALOGUE_GAIN, { delays.gainDelay, false } },
{ V4L2_CID_EXPOSURE, { delays.exposureDelay, false } },
+ { V4L2_CID_HBLANK, { delays.hblankDelay, false } },
+ { V4L2_CID_VBLANK, { delays.vblankDelay, true } },
};
data->delayedCtrls_ =
diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
index a05e11fccf8d..7d052263b34d 100644
--- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp
+++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
@@ -1607,6 +1607,8 @@ bool PipelineHandlerMaliC55::registerSensorCamera(MediaLink *ispLink)
std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
{ V4L2_CID_ANALOGUE_GAIN, { delays.gainDelay, false } },
{ V4L2_CID_EXPOSURE, { delays.exposureDelay, false } },
+ { V4L2_CID_HBLANK, { delays.hblankDelay, false } },
+ { V4L2_CID_VBLANK, { delays.vblankDelay, true } },
};
data->delayedCtrls_ =
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 52633fe3cb85..6c5b81b9a2ba 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -1325,7 +1325,8 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
{ V4L2_CID_ANALOGUE_GAIN, { delays.gainDelay, false } },
{ V4L2_CID_EXPOSURE, { delays.exposureDelay, false } },
- { V4L2_CID_VBLANK, { 1, false } },
+ { V4L2_CID_HBLANK, { delays.hblankDelay, false } },
+ { V4L2_CID_VBLANK, { delays.vblankDelay, true } },
};
data->delayedCtrls_ =
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index efb07051b175..fc88efc7a716 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -546,6 +546,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
{ V4L2_CID_ANALOGUE_GAIN, { delays.gainDelay, false } },
{ V4L2_CID_EXPOSURE, { delays.exposureDelay, false } },
+ { V4L2_CID_HBLANK, { delays.hblankDelay, false } },
+ { V4L2_CID_VBLANK, { delays.vblankDelay, true } },
};
delayedCtrls_ = std::make_unique<DelayedControls>(sensor_->device(), params);
--
2.49.0
More information about the libcamera-devel
mailing list