blob: 138873cf7704cf0cadeef6d6feab0b03370443fd [file] [log] [blame]
/*
* Copyright (C) 2015 - 2017 Intel Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _RGBPP_PUBLIC_H_
#define _RGBPP_PUBLIC_H_
/** @file
* \brief CSS-API header file for 2500/Skycam specific RGB Per-pixel Correction (Color Correction) accelerator.
* \details RGB PPC accelerator performs mainly per pixels calculations, includes 3 fixed functions: CCM, GC, CSC_CDS
* the accelerator inputs RGB stream at s13.0 format and outputs yuv stream at s13.0
*/
//#include <type_support.h>
/**
* \brief Color Correction Matrix (CCM) parameters
* \details CCM transforms sensor RGB color space into standard RGB color space
*/
struct ccm_public_matrix_coeffs {
signed short m11; /**< ccm 3x3 coeff m11 */
signed short m12; /**< ccm 3x3 coeff m12 */
signed short m13; /**< ccm 3x3 coeff m13 */
signed short m21; /**< ccm 3x3 coeff m21 */
signed short m22; /**< ccm 3x3 coeff m22 */
signed short m23; /**< ccm 3x3 coeff m23 */
signed short m31; /**< ccm 3x3 coeff m31 */
signed short m32; /**< ccm 3x3 coeff m32 */
signed short m33; /**< ccm 3x3 coeff m33 */
};
/**
* enum define the range of ccm coeffs values
*/
enum {
CCM_M11_MAX = 32767, /**< max range of ccm 3x3 coeff m11 */
CCM_M11_MIM = -32768, /**< min range of ccm 3x3 coeff m11 */
CCM_M12_MAX = 8191, /**< max range of ccm 3x3 coeff m12 */
CCM_M12_MIM = -8192, /**< min range of ccm 3x3 coeff m12 */
CCM_M13_MAX = 32767, /**< max range of ccm 3x3 coeff m13 */
CCM_M13_MIM = -32768, /**< min range of ccm 3x3 coeff m13 */
CCM_M21_MAX = 32767, /**< max range of ccm 3x3 coeff m21 */
CCM_M21_MIM = -32768, /**< min range of ccm 3x3 coeff m21 */
CCM_M22_MAX = 8191, /**< max range of ccm 3x3 coeff m22 */
CCM_M22_MIM = -8192, /**< min range of ccm 3x3 coeff m22 */
CCM_M23_MAX = 32767, /**< max range of ccm 3x3 coeff m23 */
CCM_M23_MIM = -32768, /**< min range of ccm 3x3 coeff m23 */
CCM_M31_MAX = 32767, /**< max range of ccm 3x3 coeff m31 */
CCM_M31_MIM = -32768, /**< min range of ccm 3x3 coeff m31 */
CCM_M32_MAX = 8191, /**< max range of ccm 3x3 coeff m32 */
CCM_M32_MIM = -8192, /**< min range of ccm 3x3 coeff m32 */
CCM_M33_MAX = 32767, /**< max range of ccm 3x3 coeff m33 */
CCM_M33_MIM = -32768, /**< min range of ccm 3x3 coeff m33 */
CCM_OFF_MAX = 8191, /**< min range of bias 3x1 coeffs */
CCM_OFF_MIN = -8192, /**< max range of bias 3x1 coeffs */
};
struct ccm_public_offsets {
signed short R; /**< ccm bias 3x1 coeff r */
signed short G; /**< ccm bias 3x1 coeff g */
signed short B; /**< ccm bias 3x1 coeff b */
};
struct ccm_public_config {
struct ccm_public_matrix_coeffs matrix_coeffs; /**< ccm 3x3 coeffs matrix */
struct ccm_public_offsets offsets; /**< ccm bias 3x1 coeffs */
};
/**
* \brief Gamma Correction (GC) parameters
* \details GC applies gamma correction to all pixels
*/
#define GAMMA_CORR_NUM_OF_LUT_ENTRIES 256 /**< number of elements in gamma correction LUT */
struct gamma_corr_public_config {
unsigned short lut_entries[GAMMA_CORR_NUM_OF_LUT_ENTRIES]; /**< gamma correction LUT array */
unsigned short enable; /**< enable/disable gamma correction, 0:disable 1:enable */
};
/**
* \brief Color Space Converter (SCS) parameters
* \details SCS transforms RGB color space to YUV color space
*/
struct csc_public_C_mat {
signed short c11; /**< csc 3x3 coeff c11 */
signed short c12; /**< csc 3x3 coeff c12 */
signed short c13; /**< csc 3x3 coeff c13 */
signed short c21; /**< csc 3x3 coeff c21 */
signed short c22; /**< csc 3x3 coeff c22 */
signed short c23; /**< csc 3x3 coeff c23 */
signed short c31; /**< csc 3x3 coeff c31 */
signed short c32; /**< csc 3x3 coeff c32 */
signed short c33; /**< csc 3x3 coeff c33 */
};
struct csc_public_b_offset {
signed short b1; /**< csc bias 3x1 coeff b1 */
signed short b2; /**< csc bias 3x1 coeff b2 */
signed short b3; /**< csc bias 3x1 coeff b3 */
};
struct csc_public_config {
struct csc_public_C_mat mat; /**< 3x3 conversion coeffs matrix */
struct csc_public_b_offset offset; /**< ccm bias 3x1 coeffs */
};
/**
* \brief Chroma Down Scaling (CDS) parameters
* \details CDS performs down sampling of the Chroma plain
*/
struct cds_public_coeffs {
unsigned char c00; /**< cds coeff c00 */
unsigned char c01; /**< cds coeff c01 */
unsigned char c02; /**< cds coeff c02 */
unsigned char c03; /**< cds coeff c03 */
unsigned char c10; /**< cds coeff c10 */
unsigned char c11; /**< cds coeff c11 */
unsigned char c12; /**< cds coeff c12 */
unsigned char c13; /**< cds coeff c13 */
};
struct cds_public_config {
struct cds_public_coeffs coeffs; /**< 8 coefficients for chroma output downscaling */
unsigned char nf; /**< normalization factor for chroma output downscaling */
/**
* note: css fw currently supports only yuv420 format and always applies cds,
* as opposed to HW capabilities which supports yuv420 and yuv422 formats, and can enable or disable cds
*/
};
/**
* /brief RGBPP parameters
* /details struct with all parameters for RGBPP kernel that can be
* applied from the CSS API.
*/
struct ia_css_2500_rgbpp_kernel_config {
struct ccm_public_config ccm; /** ccm parameters */
struct gamma_corr_public_config gamma; /** gamma parameters */
struct csc_public_config csc; /** csc parameters */
struct cds_public_config cds; /** cds parameters */
};
/** @brief Print RGBPP public configuration
*
* @param cfg The pointer to configuration data
* @return None
*
* Print RGBPP public configuration.
*/
void ia_css_rgbpp_public_cfg_dump(const struct ia_css_2500_rgbpp_kernel_config *cfg);
/** @brief Compare two RGBPP public configurations
*
* @param cfg1 The pointer to first configuration data
* @param cfg2 The pointer to second configuration data
* @param cfg_dump Configurations are printed in case of
* mismatch
* @return true - match, false - not match
*
* Compare two RGBPP public configurations
*/
bool ia_css_rgbpp_public_cfg_compare(
const struct ia_css_2500_rgbpp_kernel_config *cfg1,
const struct ia_css_2500_rgbpp_kernel_config *cfg2,
bool cfg_dump);
#endif /* _RGBPP_PUBLIC_H_ */