[libcamera-devel] [PATCH v2] android: camera_device: Fix value of orientation metadata

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Sep 9 13:10:38 CEST 2020


On Wed, Sep 09, 2020 at 01:01:33PM +0200, Jacopo Mondi wrote:
> Hi Umang,
>  sorry I got late on v1
> 
> On Wed, Sep 09, 2020 at 04:17:54PM +0530, Umang Jain wrote:
> > Android's orientation metadata cannot have identical numerical
> > value to libcamera's rotation property. This is due to the fact
> > that libcamera's rotation property specify the correction angle
> 
> specifies
> 
> > in anticlockwise direction whereas Android's orientation metadata
> > specifies the value in clockwise direction. Fix that by computing
> > corresponding value for clockwise direction from libcamera's rotation
> > property.
> 
> We used 'counterclockwise', but I think it's the same

Seems anticlockwise is UK English and counterclockwise US English :-)

> > Signed-off-by: Umang Jain <email at uajain.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/android/camera_device.cpp | 15 ++++++++++-----
> >  1 file changed, 10 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > index 2582991..8be846b 100644
> > --- a/src/android/camera_device.cpp
> > +++ b/src/android/camera_device.cpp
> > @@ -265,12 +265,17 @@ int CameraDevice::initialize()
> >  	}
> >
> >  	/*
> > -	 * The Android orientation metadata and libcamera rotation property are
> > -	 * defined differently but have identical numerical values for Android
> > -	 * devices such as phones and tablets.
> > +	 * The Android orientation metadata specifies its rotation correction
> > +	 * value in clockwise direction whereas libcamera specifies the
> > +	 * rotation property in anticlockwise direction. Read the libcamera's
> > +	 * rotation property (anticlockwise) and compute the corresponding
> > +	 * value for clockwise direction as required by the Android orientation
> > +	 * metadata.
> >  	 */
> > -	if (properties.contains(properties::Rotation))
> > -		orientation_ = properties.get(properties::Rotation);
> > +	if (properties.contains(properties::Rotation)) {
> > +		int rotation = properties.get(properties::Rotation);
> > +		orientation_ = (360 - rotation) % 360;
> 
> The % 360 'should' not be necessary, but I guess it doesn't hurt.

Without % 360 a 0° rotation will be translated to 360°, not 0°.

> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> > +	}
> >
> >  	int ret = camera_->acquire();
> >  	if (ret) {

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list