@@ -1470,8 +1470,6 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
data->delayedCtrls_ =
std::make_unique<DelayedControls>(data->sensor_->device(),
params);
- isp_->frameStart.connect(data->delayedCtrls_.get(),
- &DelayedControls::applyControls);
uint32_t supportedBlocks = kDefaultExtParamsBlocks;
@@ -1506,6 +1504,15 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
return 0;
}
+void PipelineHandlerRkISP1::frameStart(uint32_t sequence)
+{
+ if (!activeCamera_)
+ return;
+
+ RkISP1CameraData *data = cameraData(activeCamera_);
+ data->delayedCtrls_->applyControls(sequence);
+}
+
bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
{
DeviceMatch dm("rkisp1");
@@ -1548,6 +1555,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
if (hasSelfPath_ && !selfPath_.init(media_))
return false;
+ isp_->frameStart.connect(this, &PipelineHandlerRkISP1::frameStart);
mainPath_.bufferReady().connect(this, &PipelineHandlerRkISP1::imageBufferReady);
if (hasSelfPath_)
selfPath_.bufferReady().connect(this, &PipelineHandlerRkISP1::imageBufferReady);
Move the call to applyControls into an intermediate function for upcoming modfications. As the frameStart handler checks for an activeCamera we can safely connect the signal in match() where all the other signals get connected. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- Changes in v2: - Moved signal connection into match() function. --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)