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