[libcamera-devel] [PATCH 12/12] android: camera_device: Report the required dynamic metadata
Niklas Söderlund
niklas.soderlund at ragnatech.se
Mon Jan 18 16:48:00 CET 2021
Hi Jacopo,
Thanks for your work.
On 2021-01-05 20:05:22 +0100, Jacopo Mondi wrote:
> The list of dynamic metadata reported by the Camera HAL is currently
> very limited.
>
> Augment the number of reported metadata in order to fix errors
> reported by the android.hardware.camera2.cts.CaptureRequestTest test
> module.
>
> The test module still fails in 2 tests because of the missing
> android.sensor.info.maxFrameDuration static metadata.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
With the duplicated key pointed out by Laurent fixed,
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/android/camera_device.cpp | 134 ++++++++++++++++++++++++++--------
> 1 file changed, 105 insertions(+), 29 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 6eb3404739e8..d2a8e876eccc 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -675,10 +675,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()
> {
> /*
> * \todo Keep this in sync with the actual number of entries.
> - * Currently: 53 entries, 714 bytes of static metadata
> + * Currently: 53 entries, 786 bytes of static metadata
> */
> uint32_t numEntries = 53;
> - uint32_t byteSize = 714;
> + uint32_t byteSize = 786;
>
> /*
> * Calculate space occupation in bytes for dynamically built metadata
> @@ -1200,19 +1200,37 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> availableRequestKeys.size());
>
> std::vector<int32_t> availableResultKeys = {
> - ANDROID_CONTROL_AE_STATE,
> + ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> ANDROID_CONTROL_AE_LOCK,
> + ANDROID_CONTROL_AE_MODE,
> + ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> + ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> + ANDROID_CONTROL_AE_STATE,
> + ANDROID_CONTROL_AF_MODE,
> ANDROID_CONTROL_AF_STATE,
> - ANDROID_CONTROL_AWB_STATE,
> + ANDROID_CONTROL_AF_TRIGGER,
> + ANDROID_CONTROL_AWB_MODE,
> ANDROID_CONTROL_AWB_LOCK,
> + ANDROID_CONTROL_AWB_STATE,
> + ANDROID_CONTROL_CAPTURE_INTENT,
> + ANDROID_CONTROL_EFFECT_MODE,
> + ANDROID_CONTROL_MODE,
> + ANDROID_CONTROL_SCENE_MODE,
> + ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
> + ANDROID_FLASH_MODE,
> + ANDROID_FLASH_STATE,
> ANDROID_LENS_STATE,
> - ANDROID_REQUEST_PIPELINE_DEPTH,
> - ANDROID_SCALER_CROP_REGION,
> + ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> ANDROID_SENSOR_TIMESTAMP,
> ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> ANDROID_SENSOR_EXPOSURE_TIME,
> + ANDROID_STATISTICS_FACE_DETECT_MODE,
> + ANDROID_NOISE_REDUCTION_MODE,
> ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> ANDROID_STATISTICS_SCENE_FLICKER,
> + ANDROID_NOISE_REDUCTION_MODE,
> + ANDROID_REQUEST_PIPELINE_DEPTH,
> + ANDROID_SCALER_CROP_REGION,
> ANDROID_JPEG_SIZE,
> ANDROID_JPEG_QUALITY,
> ANDROID_JPEG_ORIENTATION,
> @@ -1885,48 +1903,106 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,
>
> /*
> * \todo Keep this in sync with the actual number of entries.
> - * Currently: 18 entries, 62 bytes
> + * Currently: 33 entries, 75 bytes
> + *
> + * Reserve more space for the JPEG metadata set by the post-processor.
> + * Currently: ANDROID_JPEG_SIZE (int32_t), ANDROID_JPEG_QUALITY (byte),
> + * ANDROID_JPEG_ORIENTATION (int32_t) = 3 entries, 9 bytes.
> */
> std::unique_ptr<CameraMetadata> resultMetadata =
> - std::make_unique<CameraMetadata>(19, 63);
> + std::make_unique<CameraMetadata>(33, 75);
> if (!resultMetadata->isValid()) {
> LOG(HAL, Error) << "Failed to allocate static metadata";
> return nullptr;
> }
>
> - const uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED;
> - resultMetadata->addEntry(ANDROID_CONTROL_AE_STATE, &ae_state, 1);
> + uint8_t value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &value, 1);
> +
> + value = ANDROID_CONTROL_AE_LOCK_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_LOCK, &value, 1);
> +
> + value = ANDROID_CONTROL_AE_MODE_ON;
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_MODE, &value, 1);
>
> - const uint8_t ae_lock = ANDROID_CONTROL_AE_LOCK_OFF;
> - resultMetadata->addEntry(ANDROID_CONTROL_AE_LOCK, &ae_lock, 1);
> + std::vector<int32_t> aeFpsTarget = { 30, 30 };
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> + aeFpsTarget.data(), aeFpsTarget.size());
>
> - uint8_t af_state = ANDROID_CONTROL_AF_STATE_INACTIVE;
> - resultMetadata->addEntry(ANDROID_CONTROL_AF_STATE, &af_state, 1);
> + value = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> + &value, 1);
>
> - const uint8_t awb_state = ANDROID_CONTROL_AWB_STATE_CONVERGED;
> - resultMetadata->addEntry(ANDROID_CONTROL_AWB_STATE, &awb_state, 1);
> + value = ANDROID_CONTROL_AE_STATE_CONVERGED;
> + resultMetadata->addEntry(ANDROID_CONTROL_AE_STATE, &value, 1);
>
> - const uint8_t awb_lock = ANDROID_CONTROL_AWB_LOCK_OFF;
> - resultMetadata->addEntry(ANDROID_CONTROL_AWB_LOCK, &awb_lock, 1);
> + value = ANDROID_CONTROL_AF_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_AF_MODE, &value, 1);
>
> - const uint8_t lens_state = ANDROID_LENS_STATE_STATIONARY;
> - resultMetadata->addEntry(ANDROID_LENS_STATE, &lens_state, 1);
> + value = ANDROID_CONTROL_AF_STATE_INACTIVE;
> + resultMetadata->addEntry(ANDROID_CONTROL_AF_STATE, &value, 1);
> +
> + value = ANDROID_CONTROL_AF_TRIGGER_IDLE;
> + resultMetadata->addEntry(ANDROID_CONTROL_AF_TRIGGER, &value, 1);
> +
> + value = ANDROID_CONTROL_AWB_MODE_AUTO;
> + resultMetadata->addEntry(ANDROID_CONTROL_AWB_MODE, &value, 1);
> +
> + value = ANDROID_CONTROL_AWB_LOCK_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_AWB_LOCK, &value, 1);
> +
> + value = ANDROID_CONTROL_AWB_STATE_CONVERGED;
> + resultMetadata->addEntry(ANDROID_CONTROL_AWB_STATE, &value, 1);
> +
> + value = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW;
> + resultMetadata->addEntry(ANDROID_CONTROL_CAPTURE_INTENT, &value, 1);
> +
> + value = ANDROID_CONTROL_EFFECT_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_EFFECT_MODE, &value, 1);
> +
> + value = ANDROID_CONTROL_MODE_AUTO;
> + resultMetadata->addEntry(ANDROID_CONTROL_MODE, &value, 1);
> +
> + value = ANDROID_CONTROL_SCENE_MODE_DISABLED;
> + resultMetadata->addEntry(ANDROID_CONTROL_SCENE_MODE, &value, 1);
> +
> + value = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, &value, 1);
> +
> + value = ANDROID_FLASH_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_FLASH_MODE, &value, 1);
> +
> + value = ANDROID_FLASH_STATE_UNAVAILABLE;
> + resultMetadata->addEntry(ANDROID_FLASH_STATE, &value, 1);
> +
> + value = ANDROID_LENS_STATE_STATIONARY;
> + resultMetadata->addEntry(ANDROID_LENS_STATE, &value, 1);
> +
> + value = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> + &value, 1);
>
> resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
>
> - /* 33.3 msec */
> - const int64_t rolling_shutter_skew = 33300000;
> - resultMetadata->addEntry(ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> - &rolling_shutter_skew, 1);
> + value = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,
> + &value, 1);
>
> - const uint8_t lens_shading_map_mode =
> - ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;
> + value = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;
> resultMetadata->addEntry(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> - &lens_shading_map_mode, 1);
> + &value, 1);
>
> - const uint8_t scene_flicker = ANDROID_STATISTICS_SCENE_FLICKER_NONE;
> + value = ANDROID_STATISTICS_SCENE_FLICKER_NONE;
> resultMetadata->addEntry(ANDROID_STATISTICS_SCENE_FLICKER,
> - &scene_flicker, 1);
> + &value, 1);
> +
> + value = ANDROID_NOISE_REDUCTION_MODE_OFF;
> + resultMetadata->addEntry(ANDROID_NOISE_REDUCTION_MODE, &value, 1);
> +
> + /* 33.3 msec */
> + const int64_t rolling_shutter_skew = 33300000;
> + resultMetadata->addEntry(ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> + &rolling_shutter_skew, 1);
>
> /* Add metadata tags reported by libcamera. */
> if (metadata.contains(controls::draft::PipelineDepth)) {
> --
> 2.29.2
>
> _______________________________________________
> 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