[libcamera-devel] [PATCH] pipeline: ipa: raspberrypi: Handle failures during IPA configuration
Naushir Patuck
naush at raspberrypi.com
Fri Nov 27 15:54:21 CET 2020
Hi Dave,
Thanks for the review.
On Fri, 27 Nov 2020 at 14:21, Dave Stevenson <dave.stevenson at raspberrypi.com>
wrote:
> Hi Naush
>
> On Fri, 27 Nov 2020 at 13:52, Naushir Patuck <naush at raspberrypi.com>
> wrote:
> >
> > 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:
>
> s/preset/present
>
Ack. Will post an update shortly.
Regards,
Naush
>
> >> > - 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
> >
> > _______________________________________________
> > 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/d8b0221e/attachment.htm>
More information about the libcamera-devel
mailing list