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