在一次拍照请求中,CameraApp会设置一些参数下来,如果只看App,就会以为这就是Camera拍照需要的所有参数了。但其实hal管理着比App下发参数多得多的参数集合,并且提供构建一个默认CameraMetadata对象的方法。 定义一个代表所有参数集合的struct
typedef struct {
struct img_size preview_size;
struct img_size picture_size;
struct img_size video_size;
struct img_size callback_size;
COLOR_Tag colorInfo;
CONTROL_Tag controlInfo;
CONTROL_Tag resultInfo;
EDGE_Tag edgeInfo;
FLASH_Tag flashInfo;
FLASH_INFO_Tag flash_InfoInfo;
GEOMETRIC_Tag geometricInfo;
HOT_PIXEL_Tag hotpixerInfo;
JPEG_Tag jpgInfo;
LENS_Tag lensInfo;
LENS_INFO_Tag lens_InfoInfo;
NOISE_Tag noiseInfo;
QUIRKS_Tag quirksInfo;
REQUEST_Tag requestInfo;
SCALER_Tag scalerInfo;
SENSOR_Tag sensorInfo;
SENSOR_INFO_Tag sensor_InfoInfo;
SHADING_Tag shadingInfo;
STATISTICS_Tag statisticsInfo;
STATISTICS_INFO_Tag statis_InfoInfo;
TONEMAP_Tag toneInfo;
LED_Tag ledInfo;
FACE_Tag faceInfo;
FACE_Tag orifaceInfo;
SYNC_Tag syncInfo;
meta_info_t metaInfo;
uint8_t info_supported_hardware_level;
uint8_t black_level_lock;
SPRD_DEF_Tag sprddefInfo;
uint8_t supported_hardware_level;
uint8_t demosaic_mode;
EIS_CROP_Tag eiscrop_Info;
OTP_Tag otpInfo;
VCM_Tag vcmInfo;
int32_t vcm_dac[VCM_DISTANCE_COUNT];
int32_t vcm_num;
int32_t vcm_result;
int32_t verification_enable;
VCM_DIST_TAG vcmDist;
CAL_OTP_Tag calOtpInfo;
int32_t hist_report[CAMERA_ISP_HIST_ITEMS];
AUTO_TRACKING_Tag autotrackingInfo;
MLOG_Tag mlogInfo;
int32_t fd_score[10];
uint8_t get_algo_version;
} sprd_setting_info_t;
SprdCamera3Setting.cpp的所有内容便是对这个struct的各个成员变量进行set或者get的操作。
需要注意,所有的参数大致可分为3类:
- Android 原生的
- SPRD自定义的
- CallbackStream(少用)
|