android: Set result metadata and EXIF fields based on request metadata

Set the following android result metadata:
- ANDROID_LENS_FOCAL_LENGTH
- ANDROID_LENS_APERTURE
- ANDROID_JPEG_GPS_TIMESTAMP
- ANDROID_JPEG_GPS_COORDINATES
- ANDROID_JPEG_GPS_PROCESSING_METHOD

And the following EXIF fields:
- GPSDatestamp
- GPSTimestamp
- GPSLocation
  - GPSLatitudeRef
  - GPSLatitude
  - GPSLongitudeRef
  - GPSLongitude
  - GPSAltitudeRef
  - GPSAltitude
- GPSProcessingMethod
- FocalLength
- ExposureTime
- FNumber
- ISO
- Flash
- WhiteBalance
- SubsecTime
- SubsecTimeOriginal
- SubsecTimeDigitized

Based on android request metadata.

This allows the following CTS tests to pass:
- android.hardware.camera2.cts.StillCaptureTest#testFocalLengths
- android.hardware.camera2.cts.StillCaptureTest#testJpegExif

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Paul Elder 2021-01-23 13:54:28 +09:00
parent 229653a59b
commit abfabdd6e7
6 changed files with 89 additions and 21 deletions

View file

@ -96,12 +96,15 @@ int CameraStream::configure()
}
int CameraStream::process(const libcamera::FrameBuffer &source,
MappedCamera3Buffer *dest, CameraMetadata *metadata)
MappedCamera3Buffer *dest,
const CameraMetadata &requestMetadata,
CameraMetadata *resultMetadata)
{
if (!postProcessor_)
return 0;
return postProcessor_->process(source, dest->maps()[0], metadata);
return postProcessor_->process(source, dest->maps()[0],
requestMetadata, resultMetadata);
}
FrameBuffer *CameraStream::getBuffer()