[libcamera-devel] [PATCH 4/4] android: camera_device: Initialize pixel array properties

Jacopo Mondi jacopo at jmondi.org
Mon Nov 9 14:04:08 CET 2020


Hi Niklas,

On Mon, Nov 09, 2020 at 01:44:54PM +0100, Niklas Söderlund wrote:
> Hi Jacopo,
>
> Thanks for your work.
>
> 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
2) I like separating each control translation in its own block, but
   that's merely personal taste.

Thanks
  j

> > +		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,
> > --
> > 2.29.1
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
> --
> Regards,
> Niklas Söderlund


More information about the libcamera-devel mailing list