[libcamera-devel] [PATCH v5 7/9] android: capabilities: Make keys list into set and member variable
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sun Jul 25 03:00:12 CEST 2021
Hi Paul,
Thank you for the patch.
On Tue, Jul 20, 2021 at 07:13:05PM +0900, Paul Elder wrote:
> We need to be able to add additional characteristics/request/result keys
> into the corresponding list in the static metadata based on libcamera
> camera capabilities. We also need to be able to easily check if the
> lists have specific keys, for populating templates and result metadata.
>
> Turn the characteristics, requests, and results keys vectors into sets,
> and move them to member variables to achieve this.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/android/camera_capabilities.cpp | 266 ++++++++++++++--------------
> src/android/camera_capabilities.h | 5 +
> 2 files changed, 141 insertions(+), 130 deletions(-)
>
> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
> index a8fa7ffe..4048a94b 100644
> --- a/src/android/camera_capabilities.cpp
> +++ b/src/android/camera_capabilities.cpp
> @@ -666,6 +666,136 @@ int CameraCapabilities::initializeStaticMetadata()
> const ControlInfoMap &controlsInfo = camera_->controls();
> const ControlList &properties = camera_->properties();
>
> + 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_AE_LOCK_AVAILABLE,
> + ANDROID_CONTROL_AF_AVAILABLE_MODES,
> + ANDROID_CONTROL_AVAILABLE_EFFECTS,
> + ANDROID_CONTROL_AVAILABLE_MODES,
> + ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
> + ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
> + ANDROID_CONTROL_AWB_AVAILABLE_MODES,
> + ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
> + ANDROID_CONTROL_MAX_REGIONS,
> + ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
> + ANDROID_FLASH_INFO_AVAILABLE,
> + ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> + ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
> + ANDROID_JPEG_MAX_SIZE,
> + ANDROID_LENS_FACING,
> + ANDROID_LENS_INFO_AVAILABLE_APERTURES,
> + 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_REQUEST_AVAILABLE_CAPABILITIES,
> + ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,
> + ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
> + ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
> + ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> + ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> + ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> + ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
> + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> + ANDROID_SCALER_CROPPING_TYPE,
> + ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> + ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> + ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
> + ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
> + ANDROID_SENSOR_INFO_MAX_FRAME_DURATION,
> + ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
> + ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> + ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
> + ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> + ANDROID_SENSOR_ORIENTATION,
> + ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
> + ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
> + ANDROID_SYNC_MAX_LATENCY,
> + };
> +
> + availableRequestKeys_ = {
> + ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> + ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> + ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> + ANDROID_CONTROL_AE_LOCK,
> + ANDROID_CONTROL_AE_MODE,
> + ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> + ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> + ANDROID_CONTROL_AF_MODE,
> + ANDROID_CONTROL_AF_TRIGGER,
> + ANDROID_CONTROL_AWB_LOCK,
> + ANDROID_CONTROL_AWB_MODE,
> + ANDROID_CONTROL_CAPTURE_INTENT,
> + ANDROID_CONTROL_EFFECT_MODE,
> + ANDROID_CONTROL_MODE,
> + ANDROID_CONTROL_SCENE_MODE,
> + ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
> + ANDROID_FLASH_MODE,
> + ANDROID_JPEG_ORIENTATION,
> + ANDROID_JPEG_QUALITY,
> + ANDROID_JPEG_THUMBNAIL_QUALITY,
> + ANDROID_JPEG_THUMBNAIL_SIZE,
> + ANDROID_LENS_APERTURE,
> + ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> + ANDROID_NOISE_REDUCTION_MODE,
> + ANDROID_SCALER_CROP_REGION,
> + ANDROID_STATISTICS_FACE_DETECT_MODE
> + };
> +
> + availableResultKeys_ = {
> + ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> + ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> + ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> + ANDROID_CONTROL_AE_LOCK,
> + ANDROID_CONTROL_AE_MODE,
> + ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> + ANDROID_CONTROL_AE_STATE,
> + ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> + ANDROID_CONTROL_AF_MODE,
> + ANDROID_CONTROL_AF_STATE,
> + ANDROID_CONTROL_AF_TRIGGER,
> + ANDROID_CONTROL_AWB_LOCK,
> + ANDROID_CONTROL_AWB_MODE,
> + 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_JPEG_GPS_COORDINATES,
> + ANDROID_JPEG_GPS_PROCESSING_METHOD,
> + ANDROID_JPEG_GPS_TIMESTAMP,
> + ANDROID_JPEG_ORIENTATION,
> + ANDROID_JPEG_QUALITY,
> + ANDROID_JPEG_SIZE,
> + ANDROID_JPEG_THUMBNAIL_QUALITY,
> + ANDROID_JPEG_THUMBNAIL_SIZE,
> + ANDROID_LENS_APERTURE,
> + ANDROID_LENS_FOCAL_LENGTH,
> + ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> + ANDROID_LENS_STATE,
> + ANDROID_NOISE_REDUCTION_MODE,
> + ANDROID_REQUEST_PIPELINE_DEPTH,
> + ANDROID_SCALER_CROP_REGION,
> + ANDROID_SENSOR_EXPOSURE_TIME,
> + ANDROID_SENSOR_FRAME_DURATION,
> + ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> + ANDROID_SENSOR_TEST_PATTERN_MODE,
> + ANDROID_SENSOR_TIMESTAMP,
> + ANDROID_STATISTICS_FACE_DETECT_MODE,
> + ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> + ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE,
> + ANDROID_STATISTICS_SCENE_FLICKER,
> + };
> +
> /* Color correction static metadata. */
> {
> std::vector<uint8_t> data;
> @@ -1162,141 +1292,17 @@ int CameraCapabilities::initializeStaticMetadata()
> << "Hardware level: "
> << hwLevelStrings.find((camera_metadata_enum_android_info_supported_hardware_level)hwLevel)->second;
>
> - 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_AE_LOCK_AVAILABLE,
> - ANDROID_CONTROL_AF_AVAILABLE_MODES,
> - ANDROID_CONTROL_AVAILABLE_EFFECTS,
> - ANDROID_CONTROL_AVAILABLE_MODES,
> - ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
> - ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
> - ANDROID_CONTROL_AWB_AVAILABLE_MODES,
> - ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
> - ANDROID_CONTROL_MAX_REGIONS,
> - ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
> - ANDROID_FLASH_INFO_AVAILABLE,
> - ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> - ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
> - ANDROID_JPEG_MAX_SIZE,
> - ANDROID_LENS_FACING,
> - ANDROID_LENS_INFO_AVAILABLE_APERTURES,
> - 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_REQUEST_AVAILABLE_CAPABILITIES,
> - ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS,
> - ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
> - ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
> - ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> - ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> - ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> - ANDROID_SCALER_AVAILABLE_STALL_DURATIONS,
> - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> - ANDROID_SCALER_CROPPING_TYPE,
> - ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> - ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
> - ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
> - ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
> - ANDROID_SENSOR_INFO_MAX_FRAME_DURATION,
> - ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
> - ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
> - ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
> - ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> - ANDROID_SENSOR_ORIENTATION,
> - ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
> - ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
> - ANDROID_SYNC_MAX_LATENCY,
> - };
> staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
> - availableCharacteristicsKeys);
> + std::vector<int32_t>(availableCharacteristicsKeys_.begin(),
> + availableCharacteristicsKeys_.end()));
>
> - std::vector<int32_t> availableRequestKeys = {
> - ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> - ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> - ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> - ANDROID_CONTROL_AE_LOCK,
> - ANDROID_CONTROL_AE_MODE,
> - ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> - ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> - ANDROID_CONTROL_AF_MODE,
> - ANDROID_CONTROL_AF_TRIGGER,
> - ANDROID_CONTROL_AWB_LOCK,
> - ANDROID_CONTROL_AWB_MODE,
> - ANDROID_CONTROL_CAPTURE_INTENT,
> - ANDROID_CONTROL_EFFECT_MODE,
> - ANDROID_CONTROL_MODE,
> - ANDROID_CONTROL_SCENE_MODE,
> - ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
> - ANDROID_FLASH_MODE,
> - ANDROID_JPEG_ORIENTATION,
> - ANDROID_JPEG_QUALITY,
> - ANDROID_JPEG_THUMBNAIL_QUALITY,
> - ANDROID_JPEG_THUMBNAIL_SIZE,
> - ANDROID_LENS_APERTURE,
> - ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> - ANDROID_NOISE_REDUCTION_MODE,
> - ANDROID_SCALER_CROP_REGION,
> - ANDROID_STATISTICS_FACE_DETECT_MODE
> - };
> staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
> - availableRequestKeys);
> + std::vector<int32_t>(availableRequestKeys_.begin(),
> + availableRequestKeys_.end()));
>
> - std::vector<int32_t> availableResultKeys = {
> - ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
> - ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> - ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
> - ANDROID_CONTROL_AE_LOCK,
> - ANDROID_CONTROL_AE_MODE,
> - ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
> - ANDROID_CONTROL_AE_STATE,
> - ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> - ANDROID_CONTROL_AF_MODE,
> - ANDROID_CONTROL_AF_STATE,
> - ANDROID_CONTROL_AF_TRIGGER,
> - ANDROID_CONTROL_AWB_LOCK,
> - ANDROID_CONTROL_AWB_MODE,
> - 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_JPEG_GPS_COORDINATES,
> - ANDROID_JPEG_GPS_PROCESSING_METHOD,
> - ANDROID_JPEG_GPS_TIMESTAMP,
> - ANDROID_JPEG_ORIENTATION,
> - ANDROID_JPEG_QUALITY,
> - ANDROID_JPEG_SIZE,
> - ANDROID_JPEG_THUMBNAIL_QUALITY,
> - ANDROID_JPEG_THUMBNAIL_SIZE,
> - ANDROID_LENS_APERTURE,
> - ANDROID_LENS_FOCAL_LENGTH,
> - ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
> - ANDROID_LENS_STATE,
> - ANDROID_NOISE_REDUCTION_MODE,
> - ANDROID_REQUEST_PIPELINE_DEPTH,
> - ANDROID_SCALER_CROP_REGION,
> - ANDROID_SENSOR_EXPOSURE_TIME,
> - ANDROID_SENSOR_FRAME_DURATION,
> - ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,
> - ANDROID_SENSOR_TEST_PATTERN_MODE,
> - ANDROID_SENSOR_TIMESTAMP,
> - ANDROID_STATISTICS_FACE_DETECT_MODE,
> - ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
> - ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE,
> - ANDROID_STATISTICS_SCENE_FLICKER,
> - };
> staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
> - availableResultKeys);
> + std::vector<int32_t>(availableResultKeys_.begin(),
> + availableResultKeys_.end()));
>
> if (!staticMetadata_->isValid()) {
> LOG(HAL, Error) << "Failed to construct static metadata";
> diff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h
> index 6ef81714..e0c2786b 100644
> --- a/src/android/camera_capabilities.h
> +++ b/src/android/camera_capabilities.h
> @@ -9,6 +9,7 @@
>
> #include <map>
> #include <memory>
> +#include <set>
> #include <vector>
>
> #include <libcamera/base/class.h>
> @@ -73,6 +74,10 @@ private:
> std::map<int, libcamera::PixelFormat> formatsMap_;
> std::unique_ptr<CameraMetadata> staticMetadata_;
> unsigned int maxJpegBufferSize_;
> +
> + std::set<int32_t> availableCharacteristicsKeys_;
> + std::set<int32_t> availableRequestKeys_;
> + std::set<int32_t> availableResultKeys_;
> };
>
> #endif /* __ANDROID_CAMERA_CAPABILITIES_H__ */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list