@@ -1097,6 +1097,11 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlL
utils::ScopeExitActions actions;
int ret;
+ isp_->frameStart.connect(data->delayedCtrls_.get(),
+ &DelayedControls::applyControls);
+
+ actions += [&]() { isp_->frameStart.disconnect(data->delayedCtrls_.get()); };
+
/* Allocate buffers for internal pipeline usage. */
ret = allocateBuffers(camera);
if (ret)
@@ -1168,6 +1173,8 @@ void PipelineHandlerRkISP1::stopDevice(Camera *camera)
isp_->setFrameStartEnabled(false);
+ isp_->frameStart.disconnect(data->delayedCtrls_.get());
+
data->ipa_->stop();
if (hasSelfPath_)
@@ -1354,8 +1361,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;