高通aec记录--未完成
Aec_biz.c
1:输入参数的记录:使用如下两个结构体,每个参数对应一个结构体(aec_input_entry_type entry[AEC_INPUT_PARAM_MAX]);用两个变量(first_flagged_entry,next_flagged_entry )形成链表标记有设置的参数
typedef struct
{
uint8 first_flagged_entry;
aec_input_entry_type entry[AEC_INPUT_PARAM_MAX];
} aec_core_input_info_type;
typedef struct
{
uint8 next_flagged_entry;
aec_input_payload_type data;
} aec_input_entry_type;
2:Stream的裁剪信息:
原始出图=》crop成map分辨率(目的是为了x:y比率一样)=》缩放成vfe_out分辨率=》crop成pp分辨率=》缩放成preview分辨率(具体参考函数aec_biz_translate_coord_camif2fov)
typedef struct
{
uint32 vfe_map_x; /**< Left coordinate of the map */
uint32 vfe_map_y; /**< Top coordinate of the map */
uint32 vfe_map_width; /**< The width of the map */
uint32 vfe_map_height; /**< The height of the map */
uint32 pp_x; /**< Left coordinate of the crop */
uint32 pp_y; /**< Top coordinate of the crop */
uint32 pp_crop_out_x; /**< Width of the crop window */
uint32 pp_crop_out_y; /**< Height of the crop window */
uint32 vfe_out_width; /**< The width on which the remapping is calculated */
uint32 vfe_out_height; /**< The height on which the remapping is calculated */
} q3a_stream_crop_t;
可以参考aec_biz_translate_coord_camif2fov的代码
3:Auto Flicker Detection (AFD)
4:MANUAL_TO_AUTO_SKIP_CNT:它确保跳过足够多的帧以获取包含自动设置的统计信息
5:manual eztune exposure time:这是什么功能?
6:aec_bestshot_mode_type_t:各种scen mode
typedef enum {
AEC_BESTSHOT_OFF,
AEC_BESTSHOT_AUTO,
AEC_BESTSHOT_LANDSCAPE,
AEC_BESTSHOT_SNOW,
AEC_BESTSHOT_BEACH,
AEC_BESTSHOT_SUNSET,
AEC_BESTSHOT_NIGHT,
AEC_BESTSHOT_PORTRAIT,
AEC_BESTSHOT_BACKLIGHT,
AEC_BESTSHOT_SPORTS,
AEC_BESTSHOT_ANTISHAKE, /* 10 */
AEC_BESTSHOT_FLOWERS,
AEC_BESTSHOT_CANDLELIGHT,
AEC_BESTSHOT_FIREWORKS,
AEC_BESTSHOT_PARTY,
AEC_BESTSHOT_NIGHT_PORTRAIT,
AEC_BESTSHOT_THEATRE,
AEC_BESTSHOT_ACTION,
AEC_BESTSHOT_AR,
AEC_BESTSHOT_FACE_PRIORITY,
AEC_BESTSHOT_BARCODE, /* 20 */
AEC_BESTSHOT_HDR,
AEC_BESTSHOT_MAX
} aec_bestshot_mode_type_t;
7:STATS事件的处理:
Isp_parse_thread.c的isp_parser_thread_process函数发送MCT_EVENT_MODULE_STATS_DATA事件到stats_port.c中
Stats_port.c再stats_port_event函数处理MCT_EVENT_MODULE_STATS_DATA事件;stats_port_handle_stats_data(port, event),发送MCT_EVENT_MODULE_STATS_EXT_DATA事件到aec_port.c等3a port
Aec_port.c在aec_port_proc_downstream_event()中处理MCT_EVENT_MODULE_STATS_EXT_DATA事件,将q3a_aecawb_thread_en_q_msg事件传给3a线程
Q3a_thread.c中将事件丢给算法库处理:aec_ops->process();然后将处理结果回调camera_aecawb->aec_cb();
回调函数在aec_port.c的aec_port_callback,调用aec_port_send_aec_update处理(将事件type:AEC_PORT_STATE_ALGO_UPDATE flag:STATS_UPDATE_AEC
event:MCT_EVENT_MODULE_STATS_AEC_UPDATE 发送到port_sensor.c);
Port_sensor.c调用port_sensor_handle_aec_update()处理
8预闪流程:
Log:flash_process: Turning on torch/pre flash打开预闪,
《===port_sensor_handle_aec_update
《===aec_port_send_aec_update
《===aec_port_proc_downstream_ctrl(MCT_EVENT_CONTROL_SOF)
《====mct_stream.c(mct_stream_send_ctrl_sof)