[libcamera-devel] [PATCH] pipeline: ipa: raspberrypi: Handle failures during IPA configuration
Dave Stevenson
dave.stevenson at raspberrypi.com
Fri Nov 27 15:21:12 CET 2020
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
>> > - 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
More information about the libcamera-devel
mailing list