Message ID | 20210716105631.158153-8-paul.elder@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Paul, On Fri, Jul 16, 2021 at 07:56:17PM +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@ideasonboard.com> I've not checked if the arrays are copied verbatim, but I assume so Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > --- > 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 c7994800..09b3d82d 100644 > --- a/src/android/camera_capabilities.cpp > +++ b/src/android/camera_capabilities.cpp > @@ -660,6 +660,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, > + }; > + > std::set<camera_metadata_enum_android_request_available_capabilities> > capabilities = {}; > > @@ -1160,141 +1290,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 38ee97d0..cf68539b 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> > @@ -74,6 +75,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__ */ > -- > 2.27.0 >
diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index c7994800..09b3d82d 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -660,6 +660,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, + }; + std::set<camera_metadata_enum_android_request_available_capabilities> capabilities = {}; @@ -1160,141 +1290,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 38ee97d0..cf68539b 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> @@ -74,6 +75,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__ */
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@ideasonboard.com> --- src/android/camera_capabilities.cpp | 266 ++++++++++++++-------------- src/android/camera_capabilities.h | 5 + 2 files changed, 141 insertions(+), 130 deletions(-)