summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/raspberrypi
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/pipeline/raspberrypi')
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 791ff199..2ec1f6e7 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -754,8 +754,10 @@ int PipelineHandlerRPi::start(Camera *camera, [[maybe_unused]] ControlList *cont
/* Start the IPA. */
IPAOperationData ipaData = {};
IPAOperationData result = {};
- if (controls)
+ if (controls) {
+ ipaData.operation = RPi::IPA_CONFIG_STARTUP;
ipaData.controls.emplace_back(*controls);
+ }
ret = data->ipa_->start(ipaData, &result);
if (ret) {
LOG(RPI, Error)
@@ -764,6 +766,14 @@ int PipelineHandlerRPi::start(Camera *camera, [[maybe_unused]] ControlList *cont
return ret;
}
+ /* Apply any gain/exposure settings that the IPA may have passed back. */
+ ASSERT(data->staggeredCtrl_);
+ if (result.operation & RPi::IPA_CONFIG_SENSOR) {
+ const ControlList &ctrls = result.controls[0];
+ if (!data->staggeredCtrl_.set(ctrls))
+ LOG(RPI, Error) << "V4L2 staggered set failed";
+ }
+
/*
* IPA configure may have changed the sensor flips - hence the bayer
* order. Get the sensor format and set the ISP input now.
@@ -784,7 +794,6 @@ int PipelineHandlerRPi::start(Camera *camera, [[maybe_unused]] ControlList *cont
* starting. First check that the staggered ctrl has been initialised
* by configure().
*/
- ASSERT(data->staggeredCtrl_);
data->staggeredCtrl_.reset();
data->staggeredCtrl_.write();
data->expectedSequence_ = 0;