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) 2010 - 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_TNR3_TYPES_H
179d4fa1a1SMauro Carvalho Chehab #define _IA_CSS_TNR3_TYPES_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab /* @file
209d4fa1a1SMauro Carvalho Chehab * CSS-API header file for Temporal Noise Reduction v3 (TNR3) kernel
219d4fa1a1SMauro Carvalho Chehab */
229d4fa1a1SMauro Carvalho Chehab 
239d4fa1a1SMauro Carvalho Chehab /**
249d4fa1a1SMauro Carvalho Chehab  * \brief Number of piecewise linear segments.
259d4fa1a1SMauro Carvalho Chehab  * \details The parameters to TNR3 are specified as a piecewise linear segment.
269d4fa1a1SMauro Carvalho Chehab  * The number of such segments is fixed at 3.
279d4fa1a1SMauro Carvalho Chehab  */
289d4fa1a1SMauro Carvalho Chehab #define TNR3_NUM_SEGMENTS    3
299d4fa1a1SMauro Carvalho Chehab 
309d4fa1a1SMauro Carvalho Chehab /* Temporal Noise Reduction v3 (TNR3) configuration.
319d4fa1a1SMauro Carvalho Chehab  * The parameter to this kernel is fourfold
329d4fa1a1SMauro Carvalho Chehab  * 1. Three piecewise linear graphs (one for each plane) with three segments
339d4fa1a1SMauro Carvalho Chehab  * each. Each line graph has Luma values on the x axis and sigma values for
349d4fa1a1SMauro Carvalho Chehab  * each plane on the y axis. The three linear segments may have a different
359d4fa1a1SMauro Carvalho Chehab  * slope and the point of Luma value which where the slope may change is called
369d4fa1a1SMauro Carvalho Chehab  * a "Knee" point. As there are three such segments, four points need to be
379d4fa1a1SMauro Carvalho Chehab  * specified each on the Luma axis and the per plane Sigma axis. On the Luma
389d4fa1a1SMauro Carvalho Chehab  * axis two points are fixed (namely 0 and maximum luma value - depending on
399d4fa1a1SMauro Carvalho Chehab  * ISP bit depth). The other two points are the points where the slope may
409d4fa1a1SMauro Carvalho Chehab  * change its value. These two points are called knee points. The four points on
419d4fa1a1SMauro Carvalho Chehab  * the per plane sigma axis are also specified at the interface.
429d4fa1a1SMauro Carvalho Chehab  * 2. One rounding adjustment parameter for each plane
439d4fa1a1SMauro Carvalho Chehab  * 3. One maximum feedback threshold value for each plane
449d4fa1a1SMauro Carvalho Chehab  * 4. Selection of the reference frame buffer to be used for noise reduction.
459d4fa1a1SMauro Carvalho Chehab  */
469d4fa1a1SMauro Carvalho Chehab struct ia_css_tnr3_kernel_config {
479d4fa1a1SMauro Carvalho Chehab 	unsigned int maxfb_y;                        /** Maximum Feedback Gain for Y */
489d4fa1a1SMauro Carvalho Chehab 	unsigned int maxfb_u;                        /** Maximum Feedback Gain for U */
499d4fa1a1SMauro Carvalho Chehab 	unsigned int maxfb_v;                        /** Maximum Feedback Gain for V */
509d4fa1a1SMauro Carvalho Chehab 	unsigned int round_adj_y;                    /** Rounding Adjust for Y */
519d4fa1a1SMauro Carvalho Chehab 	unsigned int round_adj_u;                    /** Rounding Adjust for U */
529d4fa1a1SMauro Carvalho Chehab 	unsigned int round_adj_v;                    /** Rounding Adjust for V */
539d4fa1a1SMauro Carvalho Chehab 	unsigned int knee_y[TNR3_NUM_SEGMENTS - 1];  /** Knee points */
549d4fa1a1SMauro Carvalho Chehab 	unsigned int sigma_y[TNR3_NUM_SEGMENTS +
559d4fa1a1SMauro Carvalho Chehab 					       1]; /** Standard deviation for Y at points Y0, Y1, Y2, Y3 */
569d4fa1a1SMauro Carvalho Chehab 	unsigned int sigma_u[TNR3_NUM_SEGMENTS +
579d4fa1a1SMauro Carvalho Chehab 					       1]; /** Standard deviation for U at points U0, U1, U2, U3 */
589d4fa1a1SMauro Carvalho Chehab 	unsigned int sigma_v[TNR3_NUM_SEGMENTS +
599d4fa1a1SMauro Carvalho Chehab 					       1]; /** Standard deviation for V at points V0, V1, V2, V3 */
609d4fa1a1SMauro Carvalho Chehab 	unsigned int
619d4fa1a1SMauro Carvalho Chehab 	ref_buf_select;                 /** Selection of the reference buffer */
629d4fa1a1SMauro Carvalho Chehab };
639d4fa1a1SMauro Carvalho Chehab 
649d4fa1a1SMauro Carvalho Chehab #endif
65