summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2021-10-05 09:57:00 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-10-07 01:05:29 +0300
commit962df634bd0afe12e6f38464f5e602cf1460c430 (patch)
treec66f4eadb3ce21b120447bb910bc9606c3fc499b /src/ipa/raspberrypi
parente9a3a5d201586a65ece5d4bb10160f04ddf03dea (diff)
pipeline: raspberrypi: Create empty control lists correctly
When the pipeline handler start() method is supplied with a NULL list of controls, we send an empty control list to the IPA. When the IPA is running in isolated mode the control list goes through the data serializer, for which it must be marked correctly as a list of "controls::controls", otherwise the IPA process will abort. The IPA has a similar problem returning a control list in its configure() method. We must be careful to initialise it properly even when empty. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/ipa/raspberrypi')
-rw-r--r--src/ipa/raspberrypi/raspberrypi.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 047123ab..fed82e22 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -389,21 +389,26 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,
/* Pass the camera mode to the CamHelper to setup algorithms. */
helper_->SetCameraMode(mode_);
+ /*
+ * Initialise this ControlList correctly, even if empty, in case the IPA is
+ * running is isolation mode (passing the ControlList through the IPC layer).
+ */
+ ControlList ctrls(sensorCtrls_);
+
if (firstStart_) {
/* Supply initial values for frame durations. */
applyFrameDurations(defaultMinFrameDuration, defaultMaxFrameDuration);
/* Supply initial values for gain and exposure. */
- ControlList ctrls(sensorCtrls_);
AgcStatus agcStatus;
agcStatus.shutter_time = defaultExposureTime;
agcStatus.analogue_gain = defaultAnalogueGain;
applyAGC(&agcStatus, ctrls);
-
- ASSERT(controls);
- *controls = std::move(ctrls);
}
+ ASSERT(controls);
+ *controls = std::move(ctrls);
+
return 0;
}