libcamera: pipeline: rkisp1: configure IPA from configure method instead of start method

Currently the call to the configure method of rkisp1 IPA
is called upon the 'start' of the pipeline. This should be done
in the 'configure' method instead.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
Dafna Hirschfeld
2021-02-12 20:05:57 +01:00
committed by Paul Elder
parent f9c0cf2a3a
commit a119d75530
+30 -32
View File
@@ -607,11 +607,22 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
<< "ISP output pad configured with " << format.toString()
<< " crop " << rect.toString();
std::map<unsigned int, IPAStream> streamConfig;
for (const StreamConfiguration &cfg : *config) {
if (cfg.stream() == &data->mainPathStream_)
if (cfg.stream() == &data->mainPathStream_) {
ret = mainPath_.configure(cfg, format);
else
streamConfig[0] = {
.pixelFormat = cfg.pixelFormat,
.size = cfg.size,
};
} else {
ret = selfPath_.configure(cfg, format);
streamConfig[1] = {
.pixelFormat = cfg.pixelFormat,
.size = cfg.size,
};
}
if (ret)
return ret;
@@ -629,6 +640,23 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
if (ret)
return ret;
/* Inform IPA of stream configuration and sensor controls. */
CameraSensorInfo sensorInfo = {};
ret = data->sensor_->sensorInfo(&sensorInfo);
if (ret) {
/* \todo Turn this into a hard failure. */
LOG(RkISP1, Warning) << "Camera sensor information not available";
sensorInfo = {};
ret = 0;
}
std::map<unsigned int, const ControlInfoMap &> entityControls;
entityControls.emplace(0, data->sensor_->controls());
IPAOperationData ipaConfig;
data->ipa_->configure(sensorInfo, streamConfig, entityControls,
ipaConfig, nullptr);
return 0;
}
@@ -759,8 +787,6 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *c
return ret;
}
std::map<unsigned int, IPAStream> streamConfig;
if (data->mainPath_->isEnabled()) {
ret = mainPath_.start();
if (ret) {
@@ -770,11 +796,6 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *c
freeBuffers(camera);
return ret;
}
streamConfig[0] = {
.pixelFormat = data->mainPathStream_.configuration().pixelFormat,
.size = data->mainPathStream_.configuration().size,
};
}
if (data->selfPath_->isEnabled()) {
@@ -787,34 +808,11 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *c
freeBuffers(camera);
return ret;
}
streamConfig[1] = {
.pixelFormat = data->selfPathStream_.configuration().pixelFormat,
.size = data->selfPathStream_.configuration().size,
};
}
isp_->setFrameStartEnabled(true);
activeCamera_ = camera;
/* Inform IPA of stream configuration and sensor controls. */
CameraSensorInfo sensorInfo = {};
ret = data->sensor_->sensorInfo(&sensorInfo);
if (ret) {
/* \todo Turn this in an hard failure. */
LOG(RkISP1, Warning) << "Camera sensor information not available";
sensorInfo = {};
ret = 0;
}
std::map<unsigned int, const ControlInfoMap &> entityControls;
entityControls.emplace(0, data->sensor_->controls());
IPAOperationData ipaConfig;
data->ipa_->configure(sensorInfo, streamConfig, entityControls,
ipaConfig, nullptr);
return ret;
}