mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-23 16:45:07 +03:00
libcamera: pipeline: raspberrypi: Start IPA when starting camera
The IPA is meant to be started when starting the camera, and stopped when stopping it. It was so far started early in order to handle the IPAInterface::processEvent() call related to lens shading table allocation before IPAInterface::configure() to pass the table to the IPA. Now that the lens shading table is passed through configure(), starting the IPA early isn't needed anymore. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
This commit is contained in:
parent
89682ea1c4
commit
2c0fad508c
1 changed files with 17 additions and 14 deletions
|
@ -302,10 +302,6 @@ public:
|
|||
vcsm_.free(lsTable_);
|
||||
lsTable_ = nullptr;
|
||||
}
|
||||
|
||||
/* Stop the IPA proxy thread. */
|
||||
if (ipa_)
|
||||
ipa_->stop();
|
||||
}
|
||||
|
||||
void frameStarted(uint32_t sequence);
|
||||
|
@ -802,6 +798,16 @@ int PipelineHandlerRPi::start(Camera *camera)
|
|||
ret = queueAllBuffers(camera);
|
||||
if (ret) {
|
||||
LOG(RPI, Error) << "Failed to queue buffers";
|
||||
stop(camera);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Start the IPA. */
|
||||
ret = data->ipa_->start();
|
||||
if (ret) {
|
||||
LOG(RPI, Error)
|
||||
<< "Failed to start IPA for " << camera->name();
|
||||
stop(camera);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -812,8 +818,10 @@ int PipelineHandlerRPi::start(Camera *camera)
|
|||
V4L2DeviceFormat sensorFormat;
|
||||
data->unicam_[Unicam::Image].dev()->getFormat(&sensorFormat);
|
||||
ret = data->isp_[Isp::Input].dev()->setFormat(&sensorFormat);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
stop(camera);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable SOF event generation. */
|
||||
data->unicam_[Unicam::Image].dev()->setFrameStartEnabled(true);
|
||||
|
@ -857,6 +865,9 @@ void PipelineHandlerRPi::stop(Camera *camera)
|
|||
data->bayerQueue_ = std::queue<FrameBuffer *>{};
|
||||
data->embeddedQueue_ = std::queue<FrameBuffer *>{};
|
||||
|
||||
/* Stop the IPA. */
|
||||
data->ipa_->stop();
|
||||
|
||||
freeBuffers(camera);
|
||||
}
|
||||
|
||||
|
@ -1106,15 +1117,7 @@ int RPiCameraData::loadIPA()
|
|||
.configurationFile = ipa_->configurationFile(sensor_->model() + ".json")
|
||||
};
|
||||
|
||||
ipa_->init(settings);
|
||||
|
||||
/*
|
||||
* Startup the IPA thread now. Without this call, none of the IPA API
|
||||
* functions will run.
|
||||
*
|
||||
* It only gets stopped in the class destructor.
|
||||
*/
|
||||
return ipa_->start();
|
||||
return ipa_->init(settings);
|
||||
}
|
||||
|
||||
int RPiCameraData::configureIPA()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue