diff options
Diffstat (limited to 'include/ia_imaging/rgbpp_public.h')
-rw-r--r-- | include/ia_imaging/rgbpp_public.h | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/include/ia_imaging/rgbpp_public.h b/include/ia_imaging/rgbpp_public.h new file mode 100644 index 0000000..138873c --- /dev/null +++ b/include/ia_imaging/rgbpp_public.h @@ -0,0 +1,189 @@ +/* + * 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_ */ |