Camera3: Correct min frame duration and sensitivity range
1. Use min frame duration for each scaler sizes
2. Use sensitivity range
3. Add multiple JPEG frame duration support
Change-Id: Ia89a9a6ebccc66e3cd8dfefcf19f5d01a9d8e3b7
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 0a513c7..3530ce7 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1825,6 +1825,9 @@
staticInfo.update(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES,
available_processed_sizes,
(gCamCapability[cameraId]->supported_sizes_tbl_cnt) * 2);
+ staticInfo.update(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS,
+ &gCamCapability[cameraId]->min_duration[0],
+ gCamCapability[cameraId]->supported_sizes_tbl_cnt);
int32_t available_fps_ranges[MAX_SIZES_CNT * 2];
makeFPSTable(gCamCapability[cameraId]->fps_ranges_tbl,
@@ -2027,15 +2030,9 @@
avail_ae_modes,
size);
- int32_t min = INT_MAX, max = INT_MIN;
- for (int i = 0; i < gCamCapability[cameraId]->supported_iso_modes_cnt; i++) {
- int32_t sensitivity = getSensorSensitivity(gCamCapability[cameraId]->supported_iso_modes[i]);
- if (sensitivity != -1) {
- min = (sensitivity >= min) ? min : sensitivity;
- max = (sensitivity <= max) ? max : sensitivity;
- }
- }
- int32_t sensitivity_range[] = {min, max};
+ int32_t sensitivity_range[2];
+ sensitivity_range[0] = gCamCapability[cameraId]->sensitivity_range.min_sensitivity;
+ sensitivity_range[1] = gCamCapability[cameraId]->sensitivity_range.max_sensitivity;
staticInfo.update(ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
sensitivity_range,
sizeof(sensitivity_range) / sizeof(int32_t));
@@ -2043,12 +2040,9 @@
staticInfo.update(ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY,
&gCamCapability[cameraId]->max_analog_sensitivity,
sizeof(int32_t) );
- staticInfo.update(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS,
- &gCamCapability[cameraId]->processed_min_duration,
- sizeof(int32_t));
staticInfo.update(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS,
- &gCamCapability[cameraId]->jpeg_min_duration,
- sizeof(int32_t));
+ &gCamCapability[cameraId]->jpeg_min_duration[0],
+ gCamCapability[cameraId]->picture_sizes_tbl_cnt);
gStaticMetadata[cameraId] = staticInfo.release();
return rc;
@@ -2566,7 +2560,12 @@
}
if (frame_settings.exists(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION)) {
- int32_t expCompensation = frame_settings.find(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION).data.i32[0];
+ int32_t expCompensation = frame_settings.find(
+ ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION).data.i32[0];
+ if (expCompensation < gCamCapability[mCameraId]->exposure_time_range[0])
+ expCompensation = gCamCapability[mCameraId]->exposure_time_range[0];
+ if (expCompensation > gCamCapability[mCameraId]->exposure_time_range[1])
+ expCompensation = gCamCapability[mCameraId]->exposure_time_range[1];
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_EXPOSURE_COMPENSATION,
sizeof(expCompensation), &expCompensation);
}
@@ -2853,6 +2852,8 @@
if (frame_settings.exists(ANDROID_SENSOR_FRAME_DURATION)) {
int64_t sensorFrameDuration =
frame_settings.find(ANDROID_SENSOR_FRAME_DURATION).data.i64[0];
+ if (sensorFrameDuration > gCamCapability[mCameraId]->max_frame_duration)
+ sensorFrameDuration = gCamCapability[mCameraId]->max_frame_duration;
rc = AddSetParmEntryToBatch(mParameters,
CAM_INTF_META_SENSOR_FRAME_DURATION,
sizeof(sensorFrameDuration), &sensorFrameDuration);
@@ -2861,6 +2862,14 @@
if (frame_settings.exists(ANDROID_SENSOR_SENSITIVITY)) {
int32_t sensorSensitivity =
frame_settings.find(ANDROID_SENSOR_SENSITIVITY).data.i32[0];
+ if (sensorSensitivity <
+ gCamCapability[mCameraId]->sensitivity_range.min_sensitivity)
+ sensorSensitivity =
+ gCamCapability[mCameraId]->sensitivity_range.min_sensitivity;
+ if (sensorSensitivity >
+ gCamCapability[mCameraId]->sensitivity_range.max_sensitivity)
+ sensorSensitivity =
+ gCamCapability[mCameraId]->sensitivity_range.max_sensitivity;
rc = AddSetParmEntryToBatch(mParameters,
CAM_INTF_META_SENSOR_SENSITIVITY,
sizeof(sensorSensitivity), &sensorSensitivity);
diff --git a/camera/QCamera2/stack/common/cam_intf.h b/camera/QCamera2/stack/common/cam_intf.h
index 889352f..3044360 100644
--- a/camera/QCamera2/stack/common/cam_intf.h
+++ b/camera/QCamera2/stack/common/cam_intf.h
@@ -108,6 +108,9 @@
uint8_t video_stablization_supported; /* flag id video stablization is supported */
+ uint8_t picture_sizes_tbl_cnt; /* picture sizes table size */
+ cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT]; /* picture sizes table */
+
/* capabilities specific to HAL 1 */
int modes_supported; /* mask of modes supported: 2D, 3D */
@@ -123,8 +126,6 @@
uint8_t video_sizes_tbl_cnt; /* video sizes table size */
cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT]; /* video sizes table */
- uint8_t picture_sizes_tbl_cnt; /* picture sizes table size */
- cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT]; /* picture sizes table */
uint8_t livesnapshot_sizes_tbl_cnt; /* livesnapshot sizes table size */
cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* livesnapshot sizes table */
@@ -268,9 +269,11 @@
/*Autoexposure modes for camera 3 api*/
uint8_t supported_ae_modes_cnt;
cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX];
+
+ int64_t jpeg_min_duration[MAX_SIZES_CNT];
+
+ cam_sensitivity_range_t sensitivity_range;
int32_t max_analog_sensitivity;
- int32_t processed_min_duration;
- int32_t jpeg_min_duration;
} cam_capability_t;
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index a87a0e5..eb7ae7d 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -315,6 +315,11 @@
float max_fps;
} cam_fps_range_t;
+typedef struct {
+ int32_t min_sensitivity;
+ int32_t max_sensitivity;
+} cam_sensitivity_range_t;
+
typedef enum {
CAM_HFR_MODE_OFF,
CAM_HFR_MODE_60FPS,