[libcamera-devel] [PATCH v2 09/10] android: camera_device: Use Camera properties for static Metadata

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Dec 6 23:47:41 CET 2019


Hi Jacopo,

I really like this patch!

On 2019-12-05 21:43:49 +0100, Jacopo Mondi wrote:
> Construct two example static metadata to be reported to the Android
> framework using the properties reported by the Camera.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/android/camera_device.cpp | 29 +++++++++++++++++++++++++++--
>  1 file changed, 27 insertions(+), 2 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 065e0292e186..e01c7fb2e541 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -7,6 +7,9 @@
>  
>  #include "camera_device.h"
>  
> +#include <libcamera/controls.h>
> +#include <libcamera/property_ids.h>
> +
>  #include "log.h"
>  #include "utils.h"
>  
> @@ -97,6 +100,8 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  	if (staticMetadata_)
>  		return staticMetadata_->get();
>  
> +	const ControlList &properties = camera_->properties();
> +
>  	/*
>  	 * The here reported metadata are enough to implement a basic capture
>  	 * example application, but a real camera implementation will require
> @@ -261,9 +266,15 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  	staticMetadata_->addEntry(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
>  				  &exposureTimeRange, 2);
>  
> +	/*
> +	 * Android reports orientation as clockwise correction, while libcamera
> +	 * uses counter-clockwise.
> +	 */
>  	int32_t orientation = 0;
> -	staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION,
> -				  &orientation, 1);
> +	if (properties.contains(properties::Rotation))
> +		orientation = (360 - properties.get(properties::Rotation))
> +			    % 360;

If we limit properties::Rotation to 0 - 360 degrees the mod operation is 
not need here.

With or without adding the bound in previous patches and dropping the 
mod here,

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> +	staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION, &orientation, 1);
>  
>  	std::vector<int32_t> testPatterModes = {
>  		ANDROID_SENSOR_TEST_PATTERN_MODE_OFF,
> @@ -310,6 +321,20 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  				  lensApertures.size());
>  
>  	uint8_t lensFacing = ANDROID_LENS_FACING_FRONT;
> +	if (properties.contains(properties::Location)) {
> +		int32_t location = properties.get(properties::Location);
> +		switch (location) {
> +		case CAMERA_LOCATION_FRONT:
> +			lensFacing = ANDROID_LENS_FACING_FRONT;
> +			break;
> +		case CAMERA_LOCATION_BACK:
> +			lensFacing = ANDROID_LENS_FACING_BACK;
> +			break;
> +		case CAMERA_LOCATION_EXTERNAL:
> +			lensFacing = ANDROID_LENS_FACING_EXTERNAL;
> +			break;
> +		}
> +	}
>  	staticMetadata_->addEntry(ANDROID_LENS_FACING, &lensFacing, 1);
>  
>  	std::vector<float> lensFocalLenghts = {
> -- 
> 2.23.0
> 
> _______________________________________________
> 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