#ifndef IMG_3A_STATiSTIC_H #define IMG_3A_STATiSTIC_H #include "datatype.h" //#include "AmbaDataType.h" #define AMBA_IK_CFA_HISTO_COUNT (64UL) #define AMBA_IK_RGB_HISTO_COUNT (64UL) #define AMBA_IK_HDR_HISTO_COUNT (128UL) #define AMBA_IK_3A_AWB_TILE_COLUMN_COUNT 32UL #define AMBA_IK_3A_AWB_TILE_ROW_COUNT 32UL #define AMBA_IK_3A_AE_TILE_COLUMN_COUNT 12UL #define AMBA_IK_3A_AE_TILE_ROW_COUNT 8UL #define AMBA_IK_3A_AF_TILE_COLUMN_COUNT 12UL #define AMBA_IK_3A_AF_TILE_ROW_COUNT 8UL #define AMBA_IK_3A_SLICE_MAX_COUNT 4UL typedef struct { //awb uint16 awb_tile_col_start; uint16 awb_tile_row_start; uint16 awb_tile_width; uint16 awb_tile_height; uint16 awb_tile_active_width; uint16 awb_tile_active_height; uint16 awb_rgb_shift; uint16 awb_y_shift; uint16 awb_min_max_shift; //ae uint16 ae_tile_col_start; uint16 ae_tile_row_start; uint16 ae_tile_width; uint16 ae_tile_height; uint16 ae_y_shift; uint16 ae_linear_y_shift; uint16 ae_min_max_shift; //af uint16 af_tile_col_start; uint16 af_tile_row_start; uint16 af_tile_width; uint16 af_tile_height; uint16 af_tile_active_width; uint16 af_tile_active_height; uint16 af_y_shift; uint16 af_cfa_y_shift; // AWB tiles uint8 awb_tile_num_col; uint8 awb_tile_num_row; // AE tiles uint8 ae_tile_num_col; uint8 ae_tile_num_row; // AF tiles uint8 af_tile_num_col; uint8 af_tile_num_row; // Strip info uint8 total_slices_x; uint8 total_slices_y; uint8 slice_index_x; uint8 slice_index_y; uint16 slice_width; uint16 slice_height; uint16 slice_start_x; uint16 slice_start_y; // Exposure uint16 exposure_index; uint16 total_exposures; // Black levels uint16 black_red; uint16 black_green; uint16 black_blue; uint32 raw_pic_seq_num; // sequence number of raw picture used in producing this block of AAA results uint32 iso_config_tag; uint32 is_rgbir_aaa : 1; uint32 chan_index : 3; uint32 reserved : 28; uint32 reserved1[10]; // max 128 bytes }__attribute__((packed)) ik_3a_header_t; // cfa awb typedef struct { uint16 sum_r; uint16 sum_g; uint16 sum_b; uint16 count_min; uint16 count_max; } __attribute__((packed)) ik_cfa_awb_t; // cfa ae typedef struct { uint16 lin_y; uint16 count_min; uint16 count_max; } __attribute__((packed)) ik_cfa_ae_t; // cfa af typedef struct { uint16 sum_y; uint16 sum_fv1; uint16 sum_fv2; } __attribute__((packed)) ik_cfa_af_t; //cfa histogram typedef struct { uint32 his_bin_r[AMBA_IK_CFA_HISTO_COUNT]; uint32 his_bin_g[AMBA_IK_CFA_HISTO_COUNT]; uint32 his_bin_b[AMBA_IK_CFA_HISTO_COUNT]; uint32 his_bin_y[AMBA_IK_CFA_HISTO_COUNT]; } __attribute__((packed)) ik_cfa_histo_t; typedef struct { uint16 sum_y; uint16 sum_fv1; uint16 sum_fv2; } __attribute__((packed)) ik_pg_af_t; // rgb ae typedef struct { uint16 sum_y; } __attribute__((packed)) ik_pg_ae_t; // rgb histo typedef struct { uint32 his_bin_y[AMBA_IK_RGB_HISTO_COUNT]; uint32 his_bin_r[AMBA_IK_RGB_HISTO_COUNT]; uint32 his_bin_g[AMBA_IK_RGB_HISTO_COUNT]; uint32 his_bin_b[AMBA_IK_RGB_HISTO_COUNT]; } __attribute__((packed)) ik_pg_histo_t; //cfa_aaa_stat_t typedef struct { ik_3a_header_t header; uint16 frame_id; ik_cfa_awb_t awb[AMBA_IK_3A_AWB_TILE_ROW_COUNT * AMBA_IK_3A_AWB_TILE_COLUMN_COUNT]; ik_cfa_ae_t ae[AMBA_IK_3A_AE_TILE_ROW_COUNT * AMBA_IK_3A_AE_TILE_COLUMN_COUNT]; ik_cfa_af_t af[AMBA_IK_3A_AF_TILE_ROW_COUNT * AMBA_IK_3A_AF_TILE_COLUMN_COUNT]; ik_cfa_histo_t histogram; } __attribute__((packed)) ik_cfa_3a_data_t; //pg_aaa_stat_t typedef struct { ik_3a_header_t header; uint16 frame_id; ik_pg_af_t af[AMBA_IK_3A_AF_TILE_ROW_COUNT * AMBA_IK_3A_AF_TILE_COLUMN_COUNT]; ik_pg_ae_t ae[AMBA_IK_3A_AE_TILE_ROW_COUNT * AMBA_IK_3A_AE_TILE_COLUMN_COUNT]; ik_pg_histo_t histogram; } __attribute__((packed)) ik_pg_3a_data_t; typedef struct { uint8 vin_stats_type; // 0: main; 1: hdr uint8 chan_index : 3; uint8 is_rgbir : 1; uint8 reserved_0 : 4; uint8 total_exposures; uint8 blend_index; // exposure no. uint8 total_slice_in_x; uint8 slice_index_x; uint8 total_slice_in_y; uint8 slice_index_y; uint16 vin_stats_slice_left; uint16 vin_stats_slice_width; uint16 vin_stats_slice_top; uint16 vin_stats_slice_height; uint32 reserved[24]; //NOTE: expanded by ARM to support PTS uint64 mono_pts; uint32 dsp_pts; uint32 reserved2; // max 128 bytes } __attribute__((packed)) ik_cfa_histo_cfg_info_t; typedef struct { uint32 histo_bin_r[AMBA_IK_HDR_HISTO_COUNT]; uint32 histo_bin_g[AMBA_IK_HDR_HISTO_COUNT]; uint32 histo_bin_b[AMBA_IK_HDR_HISTO_COUNT]; } __attribute__((packed)) ik_cfa_histogram_t; typedef struct { ik_cfa_histo_cfg_info_t cfg_info; ik_cfa_histogram_t cfa_hist; /* Address of histogram statistic DSP_IMG_HDR_HIST_STAT_s */ } __attribute__((packed)) ik_cfa_histogram_stat_t; typedef enum { DSP_3A_VIDEO = 0x00, DSP_3A_STILL, DSP_3A_DEC, } DSP_3A_TYPE_e; typedef struct { DSP_3A_TYPE_e Type; uint8 SrcSliceX; uint8 SrcSliceY; uint32 SrcAddr[AMBA_IK_3A_SLICE_MAX_COUNT]; uint32 SrcHistoAddr[AMBA_IK_3A_SLICE_MAX_COUNT]; uint32 DstAddr; uint16 ChannelIdx; } DSP_EVENT_3A_TRANSFER_s; #endif