blob: 1da215bb966d15d166b2ccbaf5421b8c81178e00 [file] [log] [blame]
/*
* 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_CTC_TYPES_H
#define __IA_CSS_CTC_TYPES_H
/** @file
* CSS-API header file for Chroma Tone Control parameters.
*/
/** Fractional bits for CTC gain (used only for ISP1).
*
* IA_CSS_CTC_COEF_SHIFT(=13) includes not only the fractional bits
* of gain(=8), but also the bits(=5) to convert chroma
* from 13bit precision to 8bit precision.
*
* Gain (struct ia_css_ctc_table) : u5.8
* Input(Chorma) : s0.12 (13bit precision)
* Output(Chorma): s0.7 (8bit precision)
* Output = (Input * Gain) >> IA_CSS_CTC_COEF_SHIFT
*/
#define IA_CSS_CTC_COEF_SHIFT 13
/** Number of elements in the CTC table. */
#define IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2 10
/** Number of elements in the CTC table. */
#define IA_CSS_VAMEM_1_CTC_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2)
/** Number of elements in the CTC table. */
#define IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2 8
/** Number of elements in the CTC table. */
#define IA_CSS_VAMEM_2_CTC_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2) + 1)
enum ia_css_vamem_type {
IA_CSS_VAMEM_TYPE_1,
IA_CSS_VAMEM_TYPE_2
};
/** Chroma Tone Control configuration.
*
* ISP block: CTC2 (CTC by polygonal line approximation)
* (ISP1: CTC1 (CTC by look-up table) is used.)
* ISP2: CTC2 is used.
*/
struct ia_css_ctc_config {
uint16_t y0; /**< 1st kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t y1; /**< 2nd kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t y2; /**< 3rd kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t y3; /**< 4th kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t y4; /**< 5th kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t y5; /**< 6th kneepoint gain.
u[ce_gain_exp].[13-ce_gain_exp], [0,8191],
default/ineffective 4096(0.5) */
uint16_t ce_gain_exp; /**< Common exponent of y-axis gain.
u8.0, [0,13],
default/ineffective 1 */
uint16_t x1; /**< 2nd kneepoint luma.
u0.13, [0,8191], constraints: 0<x1<x2,
default/ineffective 1024 */
uint16_t x2; /**< 3rd kneepoint luma.
u0.13, [0,8191], constraints: x1<x2<x3,
default/ineffective 2048 */
uint16_t x3; /**< 4th kneepoint luma.
u0.13, [0,8191], constraints: x2<x3<x4,
default/ineffective 6144 */
uint16_t x4; /**< 5tn kneepoint luma.
u0.13, [0,8191], constraints: x3<x4<8191,
default/ineffective 7168 */
};
union ia_css_ctc_data {
uint16_t vamem_1[IA_CSS_VAMEM_1_CTC_TABLE_SIZE];
uint16_t vamem_2[IA_CSS_VAMEM_2_CTC_TABLE_SIZE];
};
/** CTC table, used for Chroma Tone Control.
*
* ISP block: CTC1 (CTC by look-up table)
* ISP1: CTC1 is used.
* (ISP2: CTC2 (CTC by polygonal line approximation) is used.)
*/
struct ia_css_ctc_table {
enum ia_css_vamem_type vamem_type;
union ia_css_ctc_data data;
};
#endif /* __IA_CSS_CTC_TYPES_H */