/* * 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 /** * \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_ */