[libcamera-devel] [PATCH 4/4] android: camera_device: Initialize pixel array properties
Jacopo Mondi
jacopo at jmondi.org
Wed Dec 2 11:33:44 CET 2020
Hi Laurent,
On Tue, Dec 01, 2020 at 09:04:48PM +0200, Laurent Pinchart wrote:
> Hi Jacopo,
>
> Thank you for the patch.
>
> On Mon, Nov 09, 2020 at 02:04:08PM +0100, Jacopo Mondi wrote:
> > On Mon, Nov 09, 2020 at 01:44:54PM +0100, Niklas Söderlund wrote:
> > > On 2020-11-06 16:49:47 +0100, Jacopo Mondi wrote:
> > > > Initialize pixel array properties in the Android camera HAL
> > > > inspecting the camera properties.
> > > >
> > > > If the camera does not provide any suitable property, not static
> > > > metadata is registered to the Android framework.
> > > >
> > > > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > > > ---
> > > > src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------
> > > > 1 file changed, 27 insertions(+), 11 deletions(-)
> > > >
> > > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > > > index 4690346e05cb..8a71d15be8ca 100644
> > > > --- a/src/android/camera_device.cpp
> > > > +++ b/src/android/camera_device.cpp
> > > > @@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> > > > }
> > > >
> > > > const ControlInfoMap &controlsInfo = camera_->controls();
> > > > + const ControlList &properties = camera_->properties();
> > > >
> > > > /* Color correction static metadata. */
> > > > {
> > > > @@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> > > > staticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);
> > > >
> > > > /* Sensor static metadata. */
> > > > - int32_t pixelArraySize[] = {
> > > > - 2592, 1944,
> > > > - };
> > > > - staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> > > > - &pixelArraySize, 2);
> > > > -
> > > > - int32_t sensorSizes[] = {
> > > > - 0, 0, 2560, 1920,
> > > > - };
> > > > - staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> > > > - &sensorSizes, 4);
> > > > + {
> > >
> > > Why this extra code block level?
> > >
> >
> > I wrapped handling of each control in a separate block for two
> > reasons (one of which is totally personal taste)
> > 1) I re-use the same names for throwaway variables like 'size', 'data' and
> > 'infoMap' that are only required for the conversion between libcamera
> > controls and android metadata format. I really don't want to have
> > 'dataPixelArraySize' or 'infoMapLensShading' for variables with
> > such limited usage
>
> But the variables are defined within the if () { ... } scope, so there
> should be no issue. As there's already a specific scope, I'd tend to
> drop the extra level. In the other locations where no specific scope
> exist, it makes sense to create one.
Ack
>
> Nice to see two hardcoded metadata going away :-)
>
If a pipeline does not report these information, Android will not
receive it and will probably fail at all validation/testing.
I think this is expected, or should we try to default to something ?
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
Thanks
j
> > 2) I like separating each control translation in its own block, but
> > that's merely personal taste.
> >
> > > > + if (properties.contains(properties::PixelArraySize)) {
> > > > + const Size &size =
> > > > + properties.get<Size>(properties::PixelArraySize);
> > > > + std::vector<int32_t> data{
> > > > + static_cast<int32_t>(size.width),
> > > > + static_cast<int32_t>(size.height),
> > > > + };
> > > > + staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> > > > + data.data(), data.size());
> > > > + }
> > > > + }
> > > > + {
> > > > + if (properties.contains(properties::PixelArrayActiveAreas)) {
> > > > + const Span<const Rectangle> &rects =
> > > > + properties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);
> > > > + std::vector<int32_t> data{
> > > > + static_cast<int32_t>(rects[0].x),
> > > > + static_cast<int32_t>(rects[0].y),
> > > > + static_cast<int32_t>(rects[0].width),
> > > > + static_cast<int32_t>(rects[0].height),
> > > > + };
> > > > + staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> > > > + data.data(), data.size());
> > > > + }
> > > > + }
> > > >
> > > > int32_t sensitivityRange[] = {
> > > > 32, 2400,
>
> --
> Regards,
>
> Laurent Pinchart
More information about the libcamera-devel
mailing list