[libcamera-devel] [PATCH v2] android: camera_device: Add null check for ScalerCrop control

Phi-bang Nguyen pnguyen at baylibre.com
Mon Mar 29 19:36:58 CEST 2021


Hi Jacopo & Laurent,

Thank you for your reviews !
I take your comments in v3.

On Mon, Mar 29, 2021 at 10:17 AM Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:

> On Mon, Mar 29, 2021 at 09:56:17AM +0200, Jacopo Mondi wrote:
> > Hi Phi-Bang,
> >
> > On Fri, Mar 26, 2021 at 11:04:10PM +0100, Phi-Bang Nguyen wrote:
> > > The ScalerCrop control does not contain the null check which can
> > > cause the camera HAL crash at boot. Fix it.
> > >
> > > Signed-off-by: Phi-Bang Nguyen <pnguyen at baylibre.com>
> >
> > I'm a bit debated as I feel the control should be reported by the
> > Camera (aka registered by the pipeline handler). True that if you have
> > no use for that, it should be safely defaulted to 1, as you do here
> > below.
>
> We should really add a mandatory flag in controls_ids.yaml at some
> point. I'm sure we'll then spend quite a bit of time discussing which
> controls should be mandatory :-) For ScalerCrop, my initial opinion is
> that it should be optional, as not all platforms can scale.
>
> > > ---
> > >  src/android/camera_device.cpp | 11 +++++++----
> > >  1 file changed, 7 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/src/android/camera_device.cpp
> b/src/android/camera_device.cpp
> > > index ae693664..a8108e3a 100644
> > > --- a/src/android/camera_device.cpp
> > > +++ b/src/android/camera_device.cpp
> > > @@ -1107,11 +1107,14 @@ const camera_metadata_t
> *CameraDevice::getStaticMetadata()
> > >              * use the maximum and minimum crop rectangles to
> calculate the
> > >              * digital zoom factor.
> > >              */
> > > +           float maxZoom = { 1 };
> >
> > Why a braced list initializer for a variable of type float ? It
> > compiles as C++ allows it, but it's a bit unusual. Is this me ?
>
> Indeed, just = 1.0f would be better.
>
> > >             const auto info = controlsInfo.find(&controls::ScalerCrop);
> > > -           Rectangle min = info->second.min().get<Rectangle>();
> > > -           Rectangle max = info->second.max().get<Rectangle>();
> > > -           float maxZoom = std::min(1.0f * max.width / min.width,
> > > -                                    1.0f * max.height / min.height);
> > > +           if (info != controlsInfo.end()) {
> > > +                   Rectangle min =
> info->second.min().get<Rectangle>();
> > > +                   Rectangle max =
> info->second.max().get<Rectangle>();
> > > +                   maxZoom = std::min(1.0f * max.width / min.width,
> > > +                                      1.0f * max.height / min.height);
> > > +           }
> >
> > One minor nit. As you can see this code now lives in its own scope
> >
> >         {
> >                 ...
> >                 init max digital zoom
> >                 ...
> >
> >         }
> >
> > That was because I wanted to use 'min', 'max', 'info' and not care
> > about name clashes with other variables in the function. Now that you
> > have made the control registration conditional, I think you can remove
> > the additional scope and make this looks like:
> >
> >         float maxZoom = 1.0;
> >         const auto scalerCrop = controlsInfo.find(&controls::ScalerCrop);
> >         if (scalerCrop != controlsInfo.end()) {
> >
> >                 ....
> >         }
> >
> > What do you think ?
>
> Looks good to me.
>
> > The patch is good for the rest
> > Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> >
> > >
>  staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> > >                                       &maxZoom, 1);
> > >     }
>
> --
> Regards,
>
> Laurent Pinchart
>


-- 
Regards,

Phi-Bang Nguyen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210329/3ac23dd8/attachment.htm>


More information about the libcamera-devel mailing list