19d4fa1a1SMauro Carvalho Chehab /* 29d4fa1a1SMauro Carvalho Chehab * Support for Intel Camera Imaging ISP subsystem. 39d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2015, Intel Corporation. 49d4fa1a1SMauro Carvalho Chehab * 59d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify it 69d4fa1a1SMauro Carvalho Chehab * under the terms and conditions of the GNU General Public License, 79d4fa1a1SMauro Carvalho Chehab * version 2, as published by the Free Software Foundation. 89d4fa1a1SMauro Carvalho Chehab * 99d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope it will be useful, but WITHOUT 109d4fa1a1SMauro Carvalho Chehab * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 119d4fa1a1SMauro Carvalho Chehab * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 129d4fa1a1SMauro Carvalho Chehab * more details. 139d4fa1a1SMauro Carvalho Chehab */ 149d4fa1a1SMauro Carvalho Chehab 159d4fa1a1SMauro Carvalho Chehab #ifndef __IA_CSS_S3A_TYPES_H 169d4fa1a1SMauro Carvalho Chehab #define __IA_CSS_S3A_TYPES_H 179d4fa1a1SMauro Carvalho Chehab 189d4fa1a1SMauro Carvalho Chehab /* @file 199d4fa1a1SMauro Carvalho Chehab * CSS-API header file for 3A statistics parameters. 209d4fa1a1SMauro Carvalho Chehab */ 219d4fa1a1SMauro Carvalho Chehab 229d4fa1a1SMauro Carvalho Chehab #include <ia_css_frac.h> 239d4fa1a1SMauro Carvalho Chehab 249d4fa1a1SMauro Carvalho Chehab #if (defined(SYSTEM_css_skycam_c0_system)) && (!defined(PIPE_GENERATION)) 259d4fa1a1SMauro Carvalho Chehab #include "../../../../components/stats_3a/src/stats_3a_public.h" 269d4fa1a1SMauro Carvalho Chehab #endif 279d4fa1a1SMauro Carvalho Chehab 289d4fa1a1SMauro Carvalho Chehab /* 3A configuration. This configures the 3A statistics collection 299d4fa1a1SMauro Carvalho Chehab * module. 309d4fa1a1SMauro Carvalho Chehab */ 319d4fa1a1SMauro Carvalho Chehab 329d4fa1a1SMauro Carvalho Chehab /* 3A statistics grid 339d4fa1a1SMauro Carvalho Chehab * 349d4fa1a1SMauro Carvalho Chehab * ISP block: S3A1 (3A Support for 3A ver.1 (Histogram is not used for AE)) 359d4fa1a1SMauro Carvalho Chehab * S3A2 (3A Support for 3A ver.2 (Histogram is used for AE)) 369d4fa1a1SMauro Carvalho Chehab * ISP1: S3A1 is used. 379d4fa1a1SMauro Carvalho Chehab * ISP2: S3A2 is used. 389d4fa1a1SMauro Carvalho Chehab */ 399d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_grid_info { 409d4fa1a1SMauro Carvalho Chehab #if defined(SYSTEM_css_skycam_c0_system) 419d4fa1a1SMauro Carvalho Chehab u32 ae_enable; /** ae enabled in binary, 429d4fa1a1SMauro Carvalho Chehab 0:disabled, 1:enabled */ 439d4fa1a1SMauro Carvalho Chehab struct ae_public_config_grid_config 449d4fa1a1SMauro Carvalho Chehab ae_grd_info; /** see description in ae_public.h*/ 459d4fa1a1SMauro Carvalho Chehab 469d4fa1a1SMauro Carvalho Chehab u32 awb_enable; /** awb enabled in binary, 479d4fa1a1SMauro Carvalho Chehab 0:disabled, 1:enabled */ 489d4fa1a1SMauro Carvalho Chehab struct awb_public_config_grid_config 499d4fa1a1SMauro Carvalho Chehab awb_grd_info; /** see description in awb_public.h*/ 509d4fa1a1SMauro Carvalho Chehab 519d4fa1a1SMauro Carvalho Chehab u32 af_enable; /** af enabled in binary, 529d4fa1a1SMauro Carvalho Chehab 0:disabled, 1:enabled */ 539d4fa1a1SMauro Carvalho Chehab struct af_public_grid_config af_grd_info; /** see description in af_public.h*/ 549d4fa1a1SMauro Carvalho Chehab 559d4fa1a1SMauro Carvalho Chehab u32 awb_fr_enable; /** awb_fr enabled in binary, 569d4fa1a1SMauro Carvalho Chehab 0:disabled, 1:enabled */ 579d4fa1a1SMauro Carvalho Chehab struct awb_fr_public_grid_config 589d4fa1a1SMauro Carvalho Chehab awb_fr_grd_info;/** see description in awb_fr_public.h*/ 599d4fa1a1SMauro Carvalho Chehab 609d4fa1a1SMauro Carvalho Chehab u32 elem_bit_depth; /** TODO:Taken from BYT - need input from AIQ 619d4fa1a1SMauro Carvalho Chehab if needed for SKC 629d4fa1a1SMauro Carvalho Chehab Bit depth of element used 639d4fa1a1SMauro Carvalho Chehab to calculate 3A statistics. 649d4fa1a1SMauro Carvalho Chehab This is 13, which is the normalized 659d4fa1a1SMauro Carvalho Chehab bayer bit depth in DSP. */ 669d4fa1a1SMauro Carvalho Chehab 679d4fa1a1SMauro Carvalho Chehab #else 689d4fa1a1SMauro Carvalho Chehab u32 enable; /** 3A statistics enabled. 699d4fa1a1SMauro Carvalho Chehab 0:disabled, 1:enabled */ 709d4fa1a1SMauro Carvalho Chehab u32 use_dmem; /** DMEM or VMEM determines layout. 719d4fa1a1SMauro Carvalho Chehab 0:3A statistics are stored to VMEM, 729d4fa1a1SMauro Carvalho Chehab 1:3A statistics are stored to DMEM */ 739d4fa1a1SMauro Carvalho Chehab u32 has_histogram; /** Statistics include histogram. 749d4fa1a1SMauro Carvalho Chehab 0:no histogram, 1:has histogram */ 759d4fa1a1SMauro Carvalho Chehab u32 width; /** Width of 3A grid table. 769d4fa1a1SMauro Carvalho Chehab (= Horizontal number of grid cells 779d4fa1a1SMauro Carvalho Chehab in table, which cells have effective 789d4fa1a1SMauro Carvalho Chehab statistics.) */ 799d4fa1a1SMauro Carvalho Chehab u32 height; /** Height of 3A grid table. 809d4fa1a1SMauro Carvalho Chehab (= Vertical number of grid cells 819d4fa1a1SMauro Carvalho Chehab in table, which cells have effective 829d4fa1a1SMauro Carvalho Chehab statistics.) */ 839d4fa1a1SMauro Carvalho Chehab u32 aligned_width; /** Horizontal stride (for alloc). 849d4fa1a1SMauro Carvalho Chehab (= Horizontal number of grid cells 859d4fa1a1SMauro Carvalho Chehab in table, which means 869d4fa1a1SMauro Carvalho Chehab the allocated width.) */ 879d4fa1a1SMauro Carvalho Chehab u32 aligned_height; /** Vertical stride (for alloc). 889d4fa1a1SMauro Carvalho Chehab (= Vertical number of grid cells 899d4fa1a1SMauro Carvalho Chehab in table, which means 909d4fa1a1SMauro Carvalho Chehab the allocated height.) */ 919d4fa1a1SMauro Carvalho Chehab u32 bqs_per_grid_cell; /** Grid cell size in BQ(Bayer Quad) unit. 929d4fa1a1SMauro Carvalho Chehab (1BQ means {Gr,R,B,Gb}(2x2 pixels).) 939d4fa1a1SMauro Carvalho Chehab Valid values are 8,16,32,64. */ 949d4fa1a1SMauro Carvalho Chehab u32 deci_factor_log2; /** log2 of bqs_per_grid_cell. */ 959d4fa1a1SMauro Carvalho Chehab u32 elem_bit_depth; /** Bit depth of element used 969d4fa1a1SMauro Carvalho Chehab to calculate 3A statistics. 979d4fa1a1SMauro Carvalho Chehab This is 13, which is the normalized 989d4fa1a1SMauro Carvalho Chehab bayer bit depth in DSP. */ 999d4fa1a1SMauro Carvalho Chehab #endif 1009d4fa1a1SMauro Carvalho Chehab }; 1019d4fa1a1SMauro Carvalho Chehab 1029d4fa1a1SMauro Carvalho Chehab /* This struct should be split into 3, for AE, AWB and AF. 1039d4fa1a1SMauro Carvalho Chehab * However, that will require driver/ 3A lib modifications. 1049d4fa1a1SMauro Carvalho Chehab */ 1059d4fa1a1SMauro Carvalho Chehab 1069d4fa1a1SMauro Carvalho Chehab /* 3A configuration. This configures the 3A statistics collection 1079d4fa1a1SMauro Carvalho Chehab * module. 1089d4fa1a1SMauro Carvalho Chehab * 1099d4fa1a1SMauro Carvalho Chehab * ae_y_*: Coefficients to calculate luminance from bayer. 1109d4fa1a1SMauro Carvalho Chehab * awb_lg_*: Thresholds to check the saturated bayer pixels for AWB. 1119d4fa1a1SMauro Carvalho Chehab * Condition of effective pixel for AWB level gate check: 1129d4fa1a1SMauro Carvalho Chehab * bayer(sensor) <= awb_lg_high_raw && 1139d4fa1a1SMauro Carvalho Chehab * bayer(when AWB statisitcs is calculated) >= awb_lg_low && 1149d4fa1a1SMauro Carvalho Chehab * bayer(when AWB statisitcs is calculated) <= awb_lg_high 1159d4fa1a1SMauro Carvalho Chehab * af_fir*: Coefficients of high pass filter to calculate AF statistics. 1169d4fa1a1SMauro Carvalho Chehab * 1179d4fa1a1SMauro Carvalho Chehab * ISP block: S3A1(ae_y_* for AE/AF, awb_lg_* for AWB) 1189d4fa1a1SMauro Carvalho Chehab * S3A2(ae_y_* for AF, awb_lg_* for AWB) 1199d4fa1a1SMauro Carvalho Chehab * SDVS1(ae_y_*) 1209d4fa1a1SMauro Carvalho Chehab * SDVS2(ae_y_*) 1219d4fa1a1SMauro Carvalho Chehab * ISP1: S3A1 and SDVS1 are used. 1229d4fa1a1SMauro Carvalho Chehab * ISP2: S3A2 and SDVS2 are used. 1239d4fa1a1SMauro Carvalho Chehab */ 1249d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_config { 1259d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 ae_y_coef_r; /** Weight of R for Y. 1269d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1279d4fa1a1SMauro Carvalho Chehab default/ineffective 25559 */ 1289d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 ae_y_coef_g; /** Weight of G for Y. 1299d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1309d4fa1a1SMauro Carvalho Chehab default/ineffective 32768 */ 1319d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 ae_y_coef_b; /** Weight of B for Y. 1329d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1339d4fa1a1SMauro Carvalho Chehab default/ineffective 7209 */ 1349d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 awb_lg_high_raw; /** AWB level gate high for raw. 1359d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1369d4fa1a1SMauro Carvalho Chehab default 65472(=1023*64), 1379d4fa1a1SMauro Carvalho Chehab ineffective 65535 */ 1389d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 awb_lg_low; /** AWB level gate low. 1399d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1409d4fa1a1SMauro Carvalho Chehab default 64(=1*64), 1419d4fa1a1SMauro Carvalho Chehab ineffective 0 */ 1429d4fa1a1SMauro Carvalho Chehab ia_css_u0_16 awb_lg_high; /** AWB level gate high. 1439d4fa1a1SMauro Carvalho Chehab u0.16, [0,65535], 1449d4fa1a1SMauro Carvalho Chehab default 65535, 1459d4fa1a1SMauro Carvalho Chehab ineffective 65535 */ 1469d4fa1a1SMauro Carvalho Chehab ia_css_s0_15 af_fir1_coef[7]; /** AF FIR coefficients of fir1. 1479d4fa1a1SMauro Carvalho Chehab s0.15, [-32768,32767], 1489d4fa1a1SMauro Carvalho Chehab default/ineffective 1499d4fa1a1SMauro Carvalho Chehab -6689,-12207,-32768,32767,12207,6689,0 */ 1509d4fa1a1SMauro Carvalho Chehab ia_css_s0_15 af_fir2_coef[7]; /** AF FIR coefficients of fir2. 1519d4fa1a1SMauro Carvalho Chehab s0.15, [-32768,32767], 1529d4fa1a1SMauro Carvalho Chehab default/ineffective 1539d4fa1a1SMauro Carvalho Chehab 2053,0,-18437,32767,-18437,2053,0 */ 1549d4fa1a1SMauro Carvalho Chehab }; 1559d4fa1a1SMauro Carvalho Chehab 1569d4fa1a1SMauro Carvalho Chehab /* 3A statistics. This structure describes the data stored 1579d4fa1a1SMauro Carvalho Chehab * in each 3A grid point. 1589d4fa1a1SMauro Carvalho Chehab * 1599d4fa1a1SMauro Carvalho Chehab * ISP block: S3A1 (3A Support for 3A ver.1) (Histogram is not used for AE) 1609d4fa1a1SMauro Carvalho Chehab * S3A2 (3A Support for 3A ver.2) (Histogram is used for AE) 1619d4fa1a1SMauro Carvalho Chehab * - ae_y is used only for S3A1. 1629d4fa1a1SMauro Carvalho Chehab * - awb_* and af_* are used both for S3A1 and S3A2. 1639d4fa1a1SMauro Carvalho Chehab * ISP1: S3A1 is used. 1649d4fa1a1SMauro Carvalho Chehab * ISP2: S3A2 is used. 1659d4fa1a1SMauro Carvalho Chehab */ 1669d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_output { 1679d4fa1a1SMauro Carvalho Chehab s32 ae_y; /** Sum of Y in a statistics window, for AE. 1689d4fa1a1SMauro Carvalho Chehab (u19.13) */ 1699d4fa1a1SMauro Carvalho Chehab s32 awb_cnt; /** Number of effective pixels 1709d4fa1a1SMauro Carvalho Chehab in a statistics window. 1719d4fa1a1SMauro Carvalho Chehab Pixels passed by the AWB level gate check are 1729d4fa1a1SMauro Carvalho Chehab judged as "effective". (u32) */ 1739d4fa1a1SMauro Carvalho Chehab s32 awb_gr; /** Sum of Gr in a statistics window, for AWB. 1749d4fa1a1SMauro Carvalho Chehab All Gr pixels (not only for effective pixels) 1759d4fa1a1SMauro Carvalho Chehab are summed. (u19.13) */ 1769d4fa1a1SMauro Carvalho Chehab s32 awb_r; /** Sum of R in a statistics window, for AWB. 1779d4fa1a1SMauro Carvalho Chehab All R pixels (not only for effective pixels) 1789d4fa1a1SMauro Carvalho Chehab are summed. (u19.13) */ 1799d4fa1a1SMauro Carvalho Chehab s32 awb_b; /** Sum of B in a statistics window, for AWB. 1809d4fa1a1SMauro Carvalho Chehab All B pixels (not only for effective pixels) 1819d4fa1a1SMauro Carvalho Chehab are summed. (u19.13) */ 1829d4fa1a1SMauro Carvalho Chehab s32 awb_gb; /** Sum of Gb in a statistics window, for AWB. 1839d4fa1a1SMauro Carvalho Chehab All Gb pixels (not only for effective pixels) 1849d4fa1a1SMauro Carvalho Chehab are summed. (u19.13) */ 1859d4fa1a1SMauro Carvalho Chehab s32 af_hpf1; /** Sum of |Y| following high pass filter af_fir1 1869d4fa1a1SMauro Carvalho Chehab within a statistics window, for AF. (u19.13) */ 1879d4fa1a1SMauro Carvalho Chehab s32 af_hpf2; /** Sum of |Y| following high pass filter af_fir2 1889d4fa1a1SMauro Carvalho Chehab within a statistics window, for AF. (u19.13) */ 1899d4fa1a1SMauro Carvalho Chehab }; 1909d4fa1a1SMauro Carvalho Chehab 1919d4fa1a1SMauro Carvalho Chehab /* 3A Statistics. This structure describes the statistics that are generated 1929d4fa1a1SMauro Carvalho Chehab * using the provided configuration (ia_css_3a_config). 1939d4fa1a1SMauro Carvalho Chehab */ 1949d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_statistics { 1959d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_grid_info 1969d4fa1a1SMauro Carvalho Chehab grid; /** grid info contains the dimensions of the 3A grid */ 1979d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_output 1989d4fa1a1SMauro Carvalho Chehab *data; /** the pointer to 3a_output[grid.width * grid.height] 1999d4fa1a1SMauro Carvalho Chehab containing the 3A statistics */ 2009d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_rgby_output *rgby_data;/** the pointer to 3a_rgby_output[256] 2019d4fa1a1SMauro Carvalho Chehab containing the histogram */ 2029d4fa1a1SMauro Carvalho Chehab }; 2039d4fa1a1SMauro Carvalho Chehab 2049d4fa1a1SMauro Carvalho Chehab /* Histogram (Statistics for AE). 2059d4fa1a1SMauro Carvalho Chehab * 2069d4fa1a1SMauro Carvalho Chehab * 4 histograms(r,g,b,y), 2079d4fa1a1SMauro Carvalho Chehab * 256 bins for each histogram, unsigned 24bit value for each bin. 2089d4fa1a1SMauro Carvalho Chehab * struct ia_css_3a_rgby_output data[256]; 2099d4fa1a1SMauro Carvalho Chehab 2109d4fa1a1SMauro Carvalho Chehab * ISP block: HIST2 2119d4fa1a1SMauro Carvalho Chehab * (ISP1: HIST2 is not used.) 2129d4fa1a1SMauro Carvalho Chehab * ISP2: HIST2 is used. 2139d4fa1a1SMauro Carvalho Chehab */ 2149d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_rgby_output { 2159d4fa1a1SMauro Carvalho Chehab u32 r; /** Number of R of one bin of the histogram R. (u24) */ 2169d4fa1a1SMauro Carvalho Chehab u32 g; /** Number of G of one bin of the histogram G. (u24) */ 2179d4fa1a1SMauro Carvalho Chehab u32 b; /** Number of B of one bin of the histogram B. (u24) */ 2189d4fa1a1SMauro Carvalho Chehab u32 y; /** Number of Y of one bin of the histogram Y. (u24) */ 2199d4fa1a1SMauro Carvalho Chehab }; 2209d4fa1a1SMauro Carvalho Chehab 2219d4fa1a1SMauro Carvalho Chehab #endif /* __IA_CSS_S3A_TYPES_H */ 222