| /* |
| * Support for Intel Camera Imaging ISP subsystem. |
| * Copyright (c) 2015, Intel Corporation. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms and conditions of the GNU General Public License, |
| * version 2, as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| */ |
| |
| #ifndef __IA_CSS_S3A_TYPES_H |
| #define __IA_CSS_S3A_TYPES_H |
| |
| /** @file |
| * CSS-API header file for 3A statistics parameters. |
| */ |
| |
| #include <ia_css_frac.h> |
| |
| #if (defined(SYSTEM_css_skycam_c0_system)) && (! defined(PIPE_GENERATION) ) |
| #include "../../../../components/stats_3a/src/stats_3a_public.h" |
| #endif |
| |
| /** 3A configuration. This configures the 3A statistics collection |
| * module. |
| */ |
| |
| /** 3A statistics grid |
| * |
| * ISP block: S3A1 (3A Support for 3A ver.1 (Histogram is not used for AE)) |
| * S3A2 (3A Support for 3A ver.2 (Histogram is used for AE)) |
| * ISP1: S3A1 is used. |
| * ISP2: S3A2 is used. |
| */ |
| struct ia_css_3a_grid_info { |
| |
| #if defined(SYSTEM_css_skycam_c0_system) |
| uint32_t ae_enable; /**< ae enabled in binary, |
| 0:disabled, 1:enabled */ |
| struct ae_public_config_grid_config ae_grd_info; /**< see description in ae_public.h*/ |
| |
| uint32_t awb_enable; /**< awb enabled in binary, |
| 0:disabled, 1:enabled */ |
| struct awb_public_config_grid_config awb_grd_info; /**< see description in awb_public.h*/ |
| |
| uint32_t af_enable; /**< af enabled in binary, |
| 0:disabled, 1:enabled */ |
| struct af_public_grid_config af_grd_info; /**< see description in af_public.h*/ |
| |
| uint32_t awb_fr_enable; /**< awb_fr enabled in binary, |
| 0:disabled, 1:enabled */ |
| struct awb_fr_public_grid_config awb_fr_grd_info;/**< see description in awb_fr_public.h*/ |
| |
| uint32_t elem_bit_depth; /**< TODO:Taken from BYT - need input from AIQ |
| if needed for SKC |
| Bit depth of element used |
| to calculate 3A statistics. |
| This is 13, which is the normalized |
| bayer bit depth in DSP. */ |
| |
| #else |
| uint32_t enable; /**< 3A statistics enabled. |
| 0:disabled, 1:enabled */ |
| uint32_t use_dmem; /**< DMEM or VMEM determines layout. |
| 0:3A statistics are stored to VMEM, |
| 1:3A statistics are stored to DMEM */ |
| uint32_t has_histogram; /**< Statistics include histogram. |
| 0:no histogram, 1:has histogram */ |
| uint32_t width; /**< Width of 3A grid table. |
| (= Horizontal number of grid cells |
| in table, which cells have effective |
| statistics.) */ |
| uint32_t height; /**< Height of 3A grid table. |
| (= Vertical number of grid cells |
| in table, which cells have effective |
| statistics.) */ |
| uint32_t aligned_width; /**< Horizontal stride (for alloc). |
| (= Horizontal number of grid cells |
| in table, which means |
| the allocated width.) */ |
| uint32_t aligned_height; /**< Vertical stride (for alloc). |
| (= Vertical number of grid cells |
| in table, which means |
| the allocated height.) */ |
| uint32_t bqs_per_grid_cell; /**< Grid cell size in BQ(Bayer Quad) unit. |
| (1BQ means {Gr,R,B,Gb}(2x2 pixels).) |
| Valid values are 8,16,32,64. */ |
| uint32_t deci_factor_log2; /**< log2 of bqs_per_grid_cell. */ |
| uint32_t elem_bit_depth; /**< Bit depth of element used |
| to calculate 3A statistics. |
| This is 13, which is the normalized |
| bayer bit depth in DSP. */ |
| #endif |
| }; |
| |
| |
| #if defined(SYSTEM_css_skycam_c0_system) |
| #if defined USE_NEW_AE_STRUCT || defined USE_NEW_AWB_STRUCT |
| #define DEFAULT_3A_GRID_INFO \ |
| { \ |
| 0, /* ae_enable */ \ |
| {0,0,0,0,0,0,0}, /* AE: width,height,b_width,b_height,x_start,y_start*/ \ |
| 0, /* awb_enable */ \ |
| {0,0,0,0,0,0}, /* AWB: width,height,b_width,b_height,x_start,y_start*/ \ |
| 0, /* af_enable */ \ |
| {0,0,0,0,0,0,0}, /* AF: width,height,b_width,b_height,x_start,y_start,ff_en*/ \ |
| 0, /* awb_fr_enable */ \ |
| {0,0,0,0,0,0,0}, /* AWB_FR: width,height,b_width,b_height,x_start,y_start,ff_en*/ \ |
| 0, /* elem_bit_depth */ \ |
| } |
| #else |
| #define DEFAULT_3A_GRID_INFO \ |
| { \ |
| 0, /* ae_enable */ \ |
| {0,0,0,0,0,0,0,0,0}, /* AE: width,height,b_width,b_height,x_start,y_start,x_end,y_end*/ \ |
| 0, /* awb_enable */ \ |
| {0,0,0,0,0,0,0,0}, /* AWB: width,height,b_width,b_height,x_start,y_start,x_end,y_end*/ \ |
| 0, /* af_enable */ \ |
| {0,0,0,0,0,0,0}, /* AF: width,height,b_width,b_height,x_start,y_start,ff_en*/ \ |
| 0, /* awb_fr_enable */ \ |
| {0,0,0,0,0,0,0}, /* AWB_FR: width,height,b_width,b_height,x_start,y_start,ff_en*/ \ |
| 0, /* elem_bit_depth */ \ |
| } |
| #endif /* USE_NEW_AE_STRUCT || defined USE_NEW_AWB_STRUCT */ |
| |
| #else |
| #define DEFAULT_3A_GRID_INFO \ |
| { \ |
| 0, /* enable */ \ |
| 0, /* use_dmem */ \ |
| 0, /* has_histogram */ \ |
| 0, /* width */ \ |
| 0, /* height */ \ |
| 0, /* aligned_width */ \ |
| 0, /* aligned_height */ \ |
| 0, /* bqs_per_grid_cell */ \ |
| 0, /* deci_factor_log2 */ \ |
| 0, /* elem_bit_depth */ \ |
| } |
| |
| #endif |
| |
| /* This struct should be split into 3, for AE, AWB and AF. |
| * However, that will require driver/ 3A lib modifications. |
| */ |
| |
| /** 3A configuration. This configures the 3A statistics collection |
| * module. |
| * |
| * ae_y_*: Coefficients to calculate luminance from bayer. |
| * awb_lg_*: Thresholds to check the saturated bayer pixels for AWB. |
| * Condition of effective pixel for AWB level gate check: |
| * bayer(sensor) <= awb_lg_high_raw && |
| * bayer(when AWB statisitcs is calculated) >= awb_lg_low && |
| * bayer(when AWB statisitcs is calculated) <= awb_lg_high |
| * af_fir*: Coefficients of high pass filter to calculate AF statistics. |
| * |
| * ISP block: S3A1(ae_y_* for AE/AF, awb_lg_* for AWB) |
| * S3A2(ae_y_* for AF, awb_lg_* for AWB) |
| * SDVS1(ae_y_*) |
| * SDVS2(ae_y_*) |
| * ISP1: S3A1 and SDVS1 are used. |
| * ISP2: S3A2 and SDVS2 are used. |
| */ |
| struct ia_css_3a_config { |
| ia_css_u0_16 ae_y_coef_r; /**< Weight of R for Y. |
| u0.16, [0,65535], |
| default/ineffective 25559 */ |
| ia_css_u0_16 ae_y_coef_g; /**< Weight of G for Y. |
| u0.16, [0,65535], |
| default/ineffective 32768 */ |
| ia_css_u0_16 ae_y_coef_b; /**< Weight of B for Y. |
| u0.16, [0,65535], |
| default/ineffective 7209 */ |
| ia_css_u0_16 awb_lg_high_raw; /**< AWB level gate high for raw. |
| u0.16, [0,65535], |
| default 65472(=1023*64), |
| ineffective 65535 */ |
| ia_css_u0_16 awb_lg_low; /**< AWB level gate low. |
| u0.16, [0,65535], |
| default 64(=1*64), |
| ineffective 0 */ |
| ia_css_u0_16 awb_lg_high; /**< AWB level gate high. |
| u0.16, [0,65535], |
| default 65535, |
| ineffective 65535 */ |
| ia_css_s0_15 af_fir1_coef[7]; /**< AF FIR coefficients of fir1. |
| s0.15, [-32768,32767], |
| default/ineffective |
| -6689,-12207,-32768,32767,12207,6689,0 */ |
| ia_css_s0_15 af_fir2_coef[7]; /**< AF FIR coefficients of fir2. |
| s0.15, [-32768,32767], |
| default/ineffective |
| 2053,0,-18437,32767,-18437,2053,0 */ |
| }; |
| |
| /** 3A statistics. This structure describes the data stored |
| * in each 3A grid point. |
| * |
| * ISP block: S3A1 (3A Support for 3A ver.1) (Histogram is not used for AE) |
| * S3A2 (3A Support for 3A ver.2) (Histogram is used for AE) |
| * - ae_y is used only for S3A1. |
| * - awb_* and af_* are used both for S3A1 and S3A2. |
| * ISP1: S3A1 is used. |
| * ISP2: S3A2 is used. |
| */ |
| struct ia_css_3a_output { |
| int32_t ae_y; /**< Sum of Y in a statistics window, for AE. |
| (u19.13) */ |
| int32_t awb_cnt; /**< Number of effective pixels |
| in a statistics window. |
| Pixels passed by the AWB level gate check are |
| judged as "effective". (u32) */ |
| int32_t awb_gr; /**< Sum of Gr in a statistics window, for AWB. |
| All Gr pixels (not only for effective pixels) |
| are summed. (u19.13) */ |
| int32_t awb_r; /**< Sum of R in a statistics window, for AWB. |
| All R pixels (not only for effective pixels) |
| are summed. (u19.13) */ |
| int32_t awb_b; /**< Sum of B in a statistics window, for AWB. |
| All B pixels (not only for effective pixels) |
| are summed. (u19.13) */ |
| int32_t awb_gb; /**< Sum of Gb in a statistics window, for AWB. |
| All Gb pixels (not only for effective pixels) |
| are summed. (u19.13) */ |
| int32_t af_hpf1; /**< Sum of |Y| following high pass filter af_fir1 |
| within a statistics window, for AF. (u19.13) */ |
| int32_t af_hpf2; /**< Sum of |Y| following high pass filter af_fir2 |
| within a statistics window, for AF. (u19.13) */ |
| }; |
| |
| |
| /** 3A Statistics. This structure describes the statistics that are generated |
| * using the provided configuration (ia_css_3a_config). |
| */ |
| struct ia_css_3a_statistics { |
| struct ia_css_3a_grid_info grid; /**< grid info contains the dimensions of the 3A grid */ |
| struct ia_css_3a_output *data; /**< the pointer to 3a_output[grid.width * grid.height] |
| containing the 3A statistics */ |
| struct ia_css_3a_rgby_output *rgby_data;/**< the pointer to 3a_rgby_output[256] |
| containing the histogram */ |
| }; |
| |
| /** Histogram (Statistics for AE). |
| * |
| * 4 histograms(r,g,b,y), |
| * 256 bins for each histogram, unsigned 24bit value for each bin. |
| * struct ia_css_3a_rgby_output data[256]; |
| |
| * ISP block: HIST2 |
| * (ISP1: HIST2 is not used.) |
| * ISP2: HIST2 is used. |
| */ |
| struct ia_css_3a_rgby_output { |
| uint32_t r; /**< Number of R of one bin of the histogram R. (u24) */ |
| uint32_t g; /**< Number of G of one bin of the histogram G. (u24) */ |
| uint32_t b; /**< Number of B of one bin of the histogram B. (u24) */ |
| uint32_t y; /**< Number of Y of one bin of the histogram Y. (u24) */ |
| }; |
| |
| #endif /* __IA_CSS_S3A_TYPES_H */ |
| |