[libcamera-devel,v2,3/4] android: camera_device: Report available keys

Message ID 20190829165311.29196-4-jacopo@jmondi.org
State Superseded
Headers show
Series
  • android: Rework metadata tags
Related show

Commit Message

Jacopo Mondi Aug. 29, 2019, 4:53 p.m. UTC
Report the list of available static metadata tags (characteristicKeys),
of supported controls (requestKeys) and produced metadata (resultKeys)
in the static metadata pack.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/android/camera_device.cpp | 101 +++++++++++++++++++++++++++++++++-
 1 file changed, 99 insertions(+), 2 deletions(-)

Comments

Niklas Söderlund Aug. 30, 2019, 12:48 p.m. UTC | #1
Hi Jacopo,

Thanks for your patch.

On 2019-08-29 18:53:10 +0200, Jacopo Mondi wrote:
> Report the list of available static metadata tags (characteristicKeys),
> of supported controls (requestKeys) and produced metadata (resultKeys)
> in the static metadata pack.
> 
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

Same question as for 2/4 regarding allocate_camera_metadata(). Otherwise 
it looks good.

> ---
>  src/android/camera_device.cpp | 101 +++++++++++++++++++++++++++++++++-
>  1 file changed, 99 insertions(+), 2 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index bc8ffed92c61..0163e8c4e39a 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -130,9 +130,9 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  
>  	/*
>  	 * \todo Keep this in sync with the actual number of entries.
> -	 * Currently: 46 entries, 390 bytes
> +	 * Currently: 49 entries, 674 bytes
>  	 */
> -	staticMetadata_ = allocate_camera_metadata(50, 500);
> +	staticMetadata_ = allocate_camera_metadata(50, 700);
>  
>  	/* Color correction static metadata. */
>  	std::vector<uint8_t> aberrationModes = {
> @@ -505,6 +505,103 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  			availableCapabilities.size());
>  	METADATA_ASSERT(ret);
>  
> +	std::vector<int32_t> availableCharacteristicsKeys = {
> +		ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
> +		ANDROID_CONTROL_AE_COMPENSATION_RANGE,
> +		ANDROID_CONTROL_AE_COMPENSATION_STEP,
> +		ANDROID_CONTROL_AF_AVAILABLE_MODES,
> +		ANDROID_CONTROL_AVAILABLE_EFFECTS,
> +		ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
> +		ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
> +		ANDROID_CONTROL_AWB_AVAILABLE_MODES,
> +		ANDROID_CONTROL_MAX_REGIONS,
> +		ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
> +		ANDROID_CONTROL_AE_LOCK_AVAILABLE,
> +		ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
> +		ANDROID_CONTROL_AVAILABLE_MODES,
> +		ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
> +		ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> +		ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> +		ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
> +		ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
> +		ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
> +		ANDROID_SENSOR_ORIENTATION,
> +		ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> +		ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
> +		ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> +		ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
> +		ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
> +		ANDROID_SYNC_MAX_LATENCY,
> +		ANDROID_FLASH_INFO_AVAILABLE,
> +		ANDROID_LENS_INFO_AVAILABLE_APERTURES,
> +		ANDROID_LENS_FACING,
> +		ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
> +		ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
> +		ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
> +		ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
> +		ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
> +		ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> +		ANDROID_SCALER_AVAILABLE_FORMATS,
> +		ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> +		ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
> +		ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> +		ANDROID_SCALER_CROPPING_TYPE,
> +		ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> +		ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
> +		ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> +		ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
> +			availableCharacteristicsKeys.data(),
> +			availableCharacteristicsKeys.size());
> +	METADATA_ASSERT(ret);
> +
> +	std::vector<int32_t> availableRequestKeys = {
> +		ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
> +		ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,
> +		ANDROID_CONTROL_AE_MODE,
> +		ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> +		ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> +		ANDROID_CONTROL_AE_LOCK,
> +		ANDROID_CONTROL_AF_TRIGGER,
> +		ANDROID_CONTROL_AWB_MODE,
> +		ANDROID_CONTROL_AWB_LOCK,
> +		ANDROID_FLASH_MODE,
> +		ANDROID_STATISTICS_FACE_DETECT_MODE,
> +		ANDROID_NOISE_REDUCTION_MODE,
> +		ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> +		ANDROID_CONTROL_CAPTURE_INTENT,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
> +			availableRequestKeys.data(),
> +			availableRequestKeys.size());
> +	METADATA_ASSERT(ret);
> +
> +	std::vector<int32_t> availableResultKeys = {
> +		ANDROID_CONTROL_AE_STATE,
> +		ANDROID_CONTROL_AE_LOCK,
> +		ANDROID_CONTROL_AF_STATE,
> +		ANDROID_CONTROL_AWB_STATE,
> +		ANDROID_CONTROL_AWB_LOCK,
> +		ANDROID_LENS_STATE,
> +		ANDROID_SCALER_CROP_REGION,
> +		ANDROID_SENSOR_TIMESTAMP,
> +		ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> +		ANDROID_SENSOR_EXPOSURE_TIME,
> +		ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> +		ANDROID_STATISTICS_SCENE_FLICKER,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
> +			availableResultKeys.data(),
> +			availableResultKeys.size());
> +	METADATA_ASSERT(ret);
> +
>  	return staticMetadata_;
>  }
>  
> -- 
> 2.23.0
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Laurent Pinchart Sept. 3, 2019, 8:30 p.m. UTC | #2
Hi Jacopo,

Thank you for the patch.

On Thu, Aug 29, 2019 at 06:53:10PM +0200, Jacopo Mondi wrote:
> Report the list of available static metadata tags (characteristicKeys),
> of supported controls (requestKeys) and produced metadata (resultKeys)
> in the static metadata pack.
> 
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

Have you tested this with valgrind (running the cros-camera service
under valgrind manually) ?

> ---
>  src/android/camera_device.cpp | 101 +++++++++++++++++++++++++++++++++-
>  1 file changed, 99 insertions(+), 2 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index bc8ffed92c61..0163e8c4e39a 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -130,9 +130,9 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  
>  	/*
>  	 * \todo Keep this in sync with the actual number of entries.
> -	 * Currently: 46 entries, 390 bytes
> +	 * Currently: 49 entries, 674 bytes
>  	 */
> -	staticMetadata_ = allocate_camera_metadata(50, 500);
> +	staticMetadata_ = allocate_camera_metadata(50, 700);
>  
>  	/* Color correction static metadata. */
>  	std::vector<uint8_t> aberrationModes = {
> @@ -505,6 +505,103 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
>  			availableCapabilities.size());
>  	METADATA_ASSERT(ret);
>  
> +	std::vector<int32_t> availableCharacteristicsKeys = {
> +		ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_MODES,
> +		ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
> +		ANDROID_CONTROL_AE_COMPENSATION_RANGE,
> +		ANDROID_CONTROL_AE_COMPENSATION_STEP,
> +		ANDROID_CONTROL_AF_AVAILABLE_MODES,
> +		ANDROID_CONTROL_AVAILABLE_EFFECTS,
> +		ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
> +		ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
> +		ANDROID_CONTROL_AWB_AVAILABLE_MODES,
> +		ANDROID_CONTROL_MAX_REGIONS,
> +		ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
> +		ANDROID_CONTROL_AE_LOCK_AVAILABLE,
> +		ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
> +		ANDROID_CONTROL_AVAILABLE_MODES,
> +		ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
> +		ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> +		ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> +		ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
> +		ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
> +		ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
> +		ANDROID_SENSOR_ORIENTATION,
> +		ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> +		ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
> +		ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> +		ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
> +		ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
> +		ANDROID_SYNC_MAX_LATENCY,
> +		ANDROID_FLASH_INFO_AVAILABLE,
> +		ANDROID_LENS_INFO_AVAILABLE_APERTURES,
> +		ANDROID_LENS_FACING,
> +		ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
> +		ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
> +		ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
> +		ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
> +		ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
> +		ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> +		ANDROID_SCALER_AVAILABLE_FORMATS,
> +		ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> +		ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
> +		ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> +		ANDROID_SCALER_CROPPING_TYPE,
> +		ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> +		ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
> +		ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> +		ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
> +			availableCharacteristicsKeys.data(),
> +			availableCharacteristicsKeys.size());
> +	METADATA_ASSERT(ret);
> +
> +	std::vector<int32_t> availableRequestKeys = {
> +		ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
> +		ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,

Are those request keys ? I would have expected them to be
characteristics.

> +		ANDROID_CONTROL_AE_MODE,
> +		ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> +		ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> +		ANDROID_CONTROL_AE_LOCK,
> +		ANDROID_CONTROL_AF_TRIGGER,
> +		ANDROID_CONTROL_AWB_MODE,
> +		ANDROID_CONTROL_AWB_LOCK,
> +		ANDROID_FLASH_MODE,
> +		ANDROID_STATISTICS_FACE_DETECT_MODE,
> +		ANDROID_NOISE_REDUCTION_MODE,
> +		ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> +		ANDROID_CONTROL_CAPTURE_INTENT,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
> +			availableRequestKeys.data(),
> +			availableRequestKeys.size());
> +	METADATA_ASSERT(ret);
> +
> +	std::vector<int32_t> availableResultKeys = {
> +		ANDROID_CONTROL_AE_STATE,
> +		ANDROID_CONTROL_AE_LOCK,
> +		ANDROID_CONTROL_AF_STATE,
> +		ANDROID_CONTROL_AWB_STATE,
> +		ANDROID_CONTROL_AWB_LOCK,
> +		ANDROID_LENS_STATE,
> +		ANDROID_SCALER_CROP_REGION,
> +		ANDROID_SENSOR_TIMESTAMP,
> +		ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> +		ANDROID_SENSOR_EXPOSURE_TIME,
> +		ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> +		ANDROID_STATISTICS_SCENE_FLICKER,
> +	};
> +	ret = add_camera_metadata_entry(staticMetadata_,
> +			ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
> +			availableResultKeys.data(),
> +			availableResultKeys.size());
> +	METADATA_ASSERT(ret);
> +
>  	return staticMetadata_;
>  }
>
Jacopo Mondi Sept. 4, 2019, 11:34 a.m. UTC | #3
Hi Laurent,

On Tue, Sep 03, 2019 at 11:30:46PM +0300, Laurent Pinchart wrote:
> Hi Jacopo,
>
> Thank you for the patch.
>
> On Thu, Aug 29, 2019 at 06:53:10PM +0200, Jacopo Mondi wrote:
> > Report the list of available static metadata tags (characteristicKeys),
> > of supported controls (requestKeys) and produced metadata (resultKeys)
> > in the static metadata pack.
> >
> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
>
> Have you tested this with valgrind (running the cros-camera service
> under valgrind manually) ?
>

No I will and will make sure the new sizes are big enough

> > ---
> >  src/android/camera_device.cpp | 101 +++++++++++++++++++++++++++++++++-
> >  1 file changed, 99 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > index bc8ffed92c61..0163e8c4e39a 100644
> > --- a/src/android/camera_device.cpp
> > +++ b/src/android/camera_device.cpp
> > @@ -130,9 +130,9 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
> >
> >  	/*
> >  	 * \todo Keep this in sync with the actual number of entries.
> > -	 * Currently: 46 entries, 390 bytes
> > +	 * Currently: 49 entries, 674 bytes
> >  	 */
> > -	staticMetadata_ = allocate_camera_metadata(50, 500);
> > +	staticMetadata_ = allocate_camera_metadata(50, 700);
> >
> >  	/* Color correction static metadata. */
> >  	std::vector<uint8_t> aberrationModes = {
> > @@ -505,6 +505,103 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
> >  			availableCapabilities.size());
> >  	METADATA_ASSERT(ret);
> >
> > +	std::vector<int32_t> availableCharacteristicsKeys = {
> > +		ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
> > +		ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
> > +		ANDROID_CONTROL_AE_AVAILABLE_MODES,
> > +		ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
> > +		ANDROID_CONTROL_AE_COMPENSATION_RANGE,
> > +		ANDROID_CONTROL_AE_COMPENSATION_STEP,
> > +		ANDROID_CONTROL_AF_AVAILABLE_MODES,
> > +		ANDROID_CONTROL_AVAILABLE_EFFECTS,
> > +		ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
> > +		ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
> > +		ANDROID_CONTROL_AWB_AVAILABLE_MODES,
> > +		ANDROID_CONTROL_MAX_REGIONS,
> > +		ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
> > +		ANDROID_CONTROL_AE_LOCK_AVAILABLE,
> > +		ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
> > +		ANDROID_CONTROL_AVAILABLE_MODES,
> > +		ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
> > +		ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> > +		ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> > +		ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
> > +		ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
> > +		ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
> > +		ANDROID_SENSOR_ORIENTATION,
> > +		ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> > +		ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
> > +		ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> > +		ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
> > +		ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
> > +		ANDROID_SYNC_MAX_LATENCY,
> > +		ANDROID_FLASH_INFO_AVAILABLE,
> > +		ANDROID_LENS_INFO_AVAILABLE_APERTURES,
> > +		ANDROID_LENS_FACING,
> > +		ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
> > +		ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
> > +		ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
> > +		ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
> > +		ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
> > +		ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> > +		ANDROID_SCALER_AVAILABLE_FORMATS,
> > +		ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> > +		ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
> > +		ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> > +		ANDROID_SCALER_CROPPING_TYPE,
> > +		ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> > +		ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
> > +		ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> > +		ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
> > +	};
> > +	ret = add_camera_metadata_entry(staticMetadata_,
> > +			ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
> > +			availableCharacteristicsKeys.data(),
> > +			availableCharacteristicsKeys.size());
> > +	METADATA_ASSERT(ret);
> > +
> > +	std::vector<int32_t> availableRequestKeys = {
> > +		ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
> > +		ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,
>
> Are those request keys ? I would have expected them to be
> characteristics.
>

They are, and they shoulnd't be part of the template request in firts
place. They were there already, and I will remove them in v2

Thanks
  j

> > +		ANDROID_CONTROL_AE_MODE,
> > +		ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> > +		ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> > +		ANDROID_CONTROL_AE_LOCK,
> > +		ANDROID_CONTROL_AF_TRIGGER,
> > +		ANDROID_CONTROL_AWB_MODE,
> > +		ANDROID_CONTROL_AWB_LOCK,
> > +		ANDROID_FLASH_MODE,
> > +		ANDROID_STATISTICS_FACE_DETECT_MODE,
> > +		ANDROID_NOISE_REDUCTION_MODE,
> > +		ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> > +		ANDROID_CONTROL_CAPTURE_INTENT,
> > +	};
> > +	ret = add_camera_metadata_entry(staticMetadata_,
> > +			ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
> > +			availableRequestKeys.data(),
> > +			availableRequestKeys.size());
> > +	METADATA_ASSERT(ret);
> > +
> > +	std::vector<int32_t> availableResultKeys = {
> > +		ANDROID_CONTROL_AE_STATE,
> > +		ANDROID_CONTROL_AE_LOCK,
> > +		ANDROID_CONTROL_AF_STATE,
> > +		ANDROID_CONTROL_AWB_STATE,
> > +		ANDROID_CONTROL_AWB_LOCK,
> > +		ANDROID_LENS_STATE,
> > +		ANDROID_SCALER_CROP_REGION,
> > +		ANDROID_SENSOR_TIMESTAMP,
> > +		ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> > +		ANDROID_SENSOR_EXPOSURE_TIME,
> > +		ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> > +		ANDROID_STATISTICS_SCENE_FLICKER,
> > +	};
> > +	ret = add_camera_metadata_entry(staticMetadata_,
> > +			ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
> > +			availableResultKeys.data(),
> > +			availableResultKeys.size());
> > +	METADATA_ASSERT(ret);
> > +
> >  	return staticMetadata_;
> >  }
> >
>
> --
> Regards,
>
> Laurent Pinchart

Patch

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index bc8ffed92c61..0163e8c4e39a 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -130,9 +130,9 @@  camera_metadata_t *CameraDevice::getStaticMetadata()
 
 	/*
 	 * \todo Keep this in sync with the actual number of entries.
-	 * Currently: 46 entries, 390 bytes
+	 * Currently: 49 entries, 674 bytes
 	 */
-	staticMetadata_ = allocate_camera_metadata(50, 500);
+	staticMetadata_ = allocate_camera_metadata(50, 700);
 
 	/* Color correction static metadata. */
 	std::vector<uint8_t> aberrationModes = {
@@ -505,6 +505,103 @@  camera_metadata_t *CameraDevice::getStaticMetadata()
 			availableCapabilities.size());
 	METADATA_ASSERT(ret);
 
+	std::vector<int32_t> availableCharacteristicsKeys = {
+		ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
+		ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
+		ANDROID_CONTROL_AE_AVAILABLE_MODES,
+		ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
+		ANDROID_CONTROL_AE_COMPENSATION_RANGE,
+		ANDROID_CONTROL_AE_COMPENSATION_STEP,
+		ANDROID_CONTROL_AF_AVAILABLE_MODES,
+		ANDROID_CONTROL_AVAILABLE_EFFECTS,
+		ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
+		ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
+		ANDROID_CONTROL_AWB_AVAILABLE_MODES,
+		ANDROID_CONTROL_MAX_REGIONS,
+		ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
+		ANDROID_CONTROL_AE_LOCK_AVAILABLE,
+		ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
+		ANDROID_CONTROL_AVAILABLE_MODES,
+		ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
+		ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
+		ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
+		ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
+		ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
+		ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
+		ANDROID_SENSOR_ORIENTATION,
+		ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
+		ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
+		ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
+		ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
+		ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
+		ANDROID_SYNC_MAX_LATENCY,
+		ANDROID_FLASH_INFO_AVAILABLE,
+		ANDROID_LENS_INFO_AVAILABLE_APERTURES,
+		ANDROID_LENS_FACING,
+		ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
+		ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
+		ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
+		ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
+		ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
+		ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
+		ANDROID_SCALER_AVAILABLE_FORMATS,
+		ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
+		ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
+		ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
+		ANDROID_SCALER_CROPPING_TYPE,
+		ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
+		ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
+		ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
+		ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
+	};
+	ret = add_camera_metadata_entry(staticMetadata_,
+			ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
+			availableCharacteristicsKeys.data(),
+			availableCharacteristicsKeys.size());
+	METADATA_ASSERT(ret);
+
+	std::vector<int32_t> availableRequestKeys = {
+		ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
+		ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,
+		ANDROID_CONTROL_AE_MODE,
+		ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
+		ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
+		ANDROID_CONTROL_AE_LOCK,
+		ANDROID_CONTROL_AF_TRIGGER,
+		ANDROID_CONTROL_AWB_MODE,
+		ANDROID_CONTROL_AWB_LOCK,
+		ANDROID_FLASH_MODE,
+		ANDROID_STATISTICS_FACE_DETECT_MODE,
+		ANDROID_NOISE_REDUCTION_MODE,
+		ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
+		ANDROID_CONTROL_CAPTURE_INTENT,
+	};
+	ret = add_camera_metadata_entry(staticMetadata_,
+			ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
+			availableRequestKeys.data(),
+			availableRequestKeys.size());
+	METADATA_ASSERT(ret);
+
+	std::vector<int32_t> availableResultKeys = {
+		ANDROID_CONTROL_AE_STATE,
+		ANDROID_CONTROL_AE_LOCK,
+		ANDROID_CONTROL_AF_STATE,
+		ANDROID_CONTROL_AWB_STATE,
+		ANDROID_CONTROL_AWB_LOCK,
+		ANDROID_LENS_STATE,
+		ANDROID_SCALER_CROP_REGION,
+		ANDROID_SENSOR_TIMESTAMP,
+		ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
+		ANDROID_SENSOR_EXPOSURE_TIME,
+		ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
+		ANDROID_STATISTICS_SCENE_FLICKER,
+	};
+	ret = add_camera_metadata_entry(staticMetadata_,
+			ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
+			availableResultKeys.data(),
+			availableResultKeys.size());
+	METADATA_ASSERT(ret);
+
 	return staticMetadata_;
 }