[libcamera-devel] [PATCH] pipeline: ipa: raspberrypi: Handle failures during IPA configuration
Naushir Patuck
naush at raspberrypi.com
Fri Nov 27 14:51:56 CET 2020
HI Jacopo,
Thank you for the review.
On Fri, 27 Nov 2020 at 13:46, Jacopo Mondi <jacopo at jmondi.org> wrote:
> Hello Naush,
>
> On Fri, Nov 27, 2020 at 01:30:31PM +0000, Naushir Patuck wrote:
> > If the IPA fails during configuration, return an error flag to the
> > pipeline handler and fail the use case gracefully.
> >
> > At preset, the IPA configuration can fail for the following reasons:
> > - The sensor is not recognised, and fails to open a CamHelper object.
> > - The pipeline handler did not pass in controls for the ISP and sensor.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
>
> Looks good to me one minor nit apart. See below.
>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
>
> Thanks
> j
>
> > ---
> > include/libcamera/ipa/raspberrypi.h | 1 +
> > src/ipa/raspberrypi/raspberrypi.cpp | 16 ++++++++++++++--
> > .../pipeline/raspberrypi/raspberrypi.cpp | 5 +++++
> > 3 files changed, 20 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/libcamera/ipa/raspberrypi.h
> b/include/libcamera/ipa/raspberrypi.h
> > index 2b55dbfc..86c97ffa 100644
> > --- a/include/libcamera/ipa/raspberrypi.h
> > +++ b/include/libcamera/ipa/raspberrypi.h
> > @@ -21,6 +21,7 @@ enum ConfigParameters {
> > IPA_CONFIG_STAGGERED_WRITE = (1 << 1),
> > IPA_CONFIG_SENSOR = (1 << 2),
> > IPA_CONFIG_DROP_FRAMES = (1 << 3),
> > + IPA_CONFIG_FAILED = (1 << 4),
> > };
> >
> > enum Operations {
> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp
> b/src/ipa/raspberrypi/raspberrypi.cpp
> > index 9853a343..7542dd26 100644
> > --- a/src/ipa/raspberrypi/raspberrypi.cpp
> > +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> > @@ -197,8 +197,14 @@ void IPARPi::configure(const CameraSensorInfo
> &sensorInfo,
> > const IPAOperationData &ipaConfig,
> > IPAOperationData *result)
> > {
> > - if (entityControls.empty())
> > + std::string cameraName(sensorInfo.model);
> > +
> > + if (entityControls.size() != 2) {
> > + LOG(IPARPI, Error) << "No ISP or sensor controls found for
> "
> > + << cameraName;
>
> This will print the sensor name while the error is global to the
> camera, as the ISP controls might be missing as well.
>
You are right, it is a bit pointless here. I will remove and submit an
update after waiting a bit for any more feedback.
Regards,
Naush
>
> > + result->operation = RPi::IPA_CONFIG_FAILED;
> > return;
> > + }
> >
> > result->operation = 0;
> >
> > @@ -213,10 +219,16 @@ void IPARPi::configure(const CameraSensorInfo
> &sensorInfo,
> > * that the kernel driver doesn't. We only do this the first time;
> we don't need
> > * to re-parse the metadata after a simple mode-switch for no
> reason.
> > */
> > - std::string cameraName(sensorInfo.model);
> > if (!helper_) {
> > helper_ =
> std::unique_ptr<RPiController::CamHelper>(RPiController::CamHelper::Create(cameraName));
> >
> > + if (!helper_) {
> > + LOG(IPARPI, Error) << "Could not create camera
> helper for "
> > + << cameraName;
> > + result->operation = RPi::IPA_CONFIG_FAILED;
> > + return;
> > + }
> > +
> > /*
> > * Pass out the sensor config to the pipeline handler in
> order
> > * to setup the staggered writer class.
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 6fcdf557..76252806 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -1194,6 +1194,11 @@ int RPiCameraData::configureIPA(const
> CameraConfiguration *config)
> > ipa_->configure(sensorInfo_, streamConfig, entityControls,
> ipaConfig,
> > &result);
> >
> > + if (result.operation & RPi::IPA_CONFIG_FAILED) {
> > + LOG(RPI, Error) << "IPA configuration failed!";
> > + return -EPIPE;
> > + }
> > +
> > unsigned int resultIdx = 0;
> > if (result.operation & RPi::IPA_CONFIG_STAGGERED_WRITE) {
> > /*
> > --
> > 2.25.1
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20201127/d14894bb/attachment.htm>
More information about the libcamera-devel
mailing list