| /* |
| * 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 _IA_CP_TYPES_H_ |
| #define _IA_CP_TYPES_H_ |
| |
| #include "ia_aiq_types.h" |
| #include "rgbpp_public.h" |
| |
| /** @file ia_cp_types.h |
| * This file declares data types used for computational photography. |
| * These data types are declared in a separate header file to allow re-use |
| * across components in the software stack. |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define IA_CP_HISTOGRAM_SIZE 256 |
| |
| /** @brief Histogram and related statistics. |
| * |
| * The structure to hold the plane histogram and the corresponding |
| * cumulative distribution function (CDF). |
| */ |
| typedef struct |
| { |
| int data[IA_CP_HISTOGRAM_SIZE]; /**< Histogram values */ |
| int cdf[IA_CP_HISTOGRAM_SIZE]; /**< Normalized CDF for the histogram */ |
| int levels[IA_CP_HISTOGRAM_SIZE + 1]; /**< Histogram levels */ |
| int size; /**< Total number of samples in all bins */ |
| } ia_cp_histogram; |
| |
| /** @brief Local contrast enhancement controls |
| * |
| * Contrast enhancement can be applied as part of the computational photography pipelines. |
| * This is usually done as a post-processing step to make up for a loss in sharpness and |
| * texture details introduced by composition of multiple images. This can be achieved either |
| * as a multi-level sharpening, or as a pixel modification based on its local neighbourhood. |
| */ |
| typedef enum |
| { |
| ia_cp_contrast_none, /**< No contrast enhancement */ |
| ia_cp_contrast_sharpening, /**< Enable sharpening */ |
| ia_cp_contrast_details, /**< Enable texture enhancement */ |
| ia_cp_contrast_all, /**< Enable both sharpening and texture enhancement */ |
| } ia_cp_contrast; |
| |
| /** @brief Vividness enhancement |
| * |
| * Vividness enhancement can be enabled in certain CP features to boost color saturation. |
| * Processing operates on the S channel (HSV color space) and increases its value while |
| * preserving the color gammut. Saturation is not applied to skin tones. |
| */ |
| typedef enum |
| { |
| ia_cp_vividness_off, /**< Color saturation enhancement disabled */ |
| ia_cp_vividness_on, /**< Color saturation enhancement enabled */ |
| } ia_cp_vividness; |
| |
| /** @brief Gamma LUT applied on each of RGB channels. |
| * |
| */ |
| typedef struct { |
| unsigned short *r_gamma_lut; |
| unsigned short *b_gamma_lut; |
| unsigned short *g_gamma_lut; |
| unsigned int gamma_lut_size; |
| } ia_cp_gamma_lut; |
| |
| /** @brief HDR configuration interface |
| * |
| * This structure contains HDR runtime parameters computed by the |
| * AIQ+ module or obtain differently (e.g. read from the disk). These |
| * settings represent HDR runtime control interface. |
| */ |
| typedef struct |
| { |
| ia_cp_gamma_lut gamma_lut; /**< Gamma LUT applied on each of RGB channels */ |
| } ia_cp_hdr_cfg; |
| |
| /** @brief vHDR configuration interface |
| * |
| * This structure contains vHDR runtime parameters computed by the |
| * AIQ+ module or obtain differently (e.g. read from the disk). These |
| * settings represent vHDR runtime control interface. |
| */ |
| #define IA_CP_GAIN_LUT_SZ 18 |
| #define IA_CP_GAMMA_LUT_SZ 1024 |
| |
| typedef struct |
| { |
| ia_aiq_ae_results *ae_results; /* Exposure times, analog and digital gain, lux level,... */ |
| ia_aiq_gbce_results *gbce_results; /* Long gamma LUTs applied on each RGB channel */ |
| } ia_cp_vhdr_cfg; |
| |
| typedef struct gtm_coeff { |
| struct csc_public_config yuv2rgbConv; /**< vHDR: GTM: YUV to RGB converstion */ |
| struct csc_public_config rgb2yuvConv; /**< vHDR: GTM: RGB to YUV converstion */ |
| struct cds_public_config rgb2yuvDs; /**< vHDR: GTM: RGB to YUV downscale */ |
| } gtm_coeff_t; |
| |
| typedef struct gtm_luts_t { |
| float gtm_gamma_lut[IA_CP_GAMMA_LUT_SZ]; /* limited to 1024 entries */ |
| float gtm_gain_lut[IA_CP_GAIN_LUT_SZ]; /* limited to 18 entries */ |
| } gtm_luts_t; |
| |
| typedef struct |
| { |
| int se_exposure_time; |
| int le_exposure_time; |
| uint8_t gae_model; /* 0 - None (GAE is off), 1 - Translation [1]*/ |
| uint8_t gae_bright_thr_low; /* Brightness threshold low (can be sensor dependent) [4] */ |
| uint8_t gae_bright_thr_high; /* Brightness threshold high (can be sensor dependent) [250] */ |
| int gae_pyr_low; |
| int gae_pyr_high; |
| float gae_zeros_thr_w; /*!< Minimal weight of zero motion vectors before declaring that camera is still */ |
| float gae_flat_thr_ratio; /*!< Flat regions ratio */ |
| float gae_motion_min_area_low; /*!< Minimal motion area wieght before entering fallback state */ |
| float gae_motion_min_area_high; /*!< Minimal motion area wieght before leaving fallback state */ |
| uint8_t mrg_blend_thr_low; |
| uint8_t mrg_blend_thr_high; |
| gtm_luts_t gtm_luts; |
| gtm_coeff_t gtm_coeff; /* GTM color space & down Scale converstion parameters */ |
| } ia_vhdr_config; /* dynamic config params, given by aic */ |
| |
| |
| |
| /** @brief ULL configuration interface |
| * |
| * This structure contains ULL runtime parameters computed by the |
| * AIQ+ module or obtain differently (e.g. read from the disk). These |
| * settings represent ULL runtime control interface. |
| */ |
| typedef struct |
| { |
| ia_aiq_exposure_parameters exposure; /**< Generic exposure parameters for the input captures */ |
| int * imreg_fallback; /**< List of frames to ignore when using external alignment estimation (NULL for internal) */ |
| unsigned int zoom_factor; /**< Zoom factor */ |
| } ia_cp_ull_cfg; |
| |
| /** @brief Global motion estimation model |
| * |
| * This enumerator lists valid global motion estimation models |
| * which can be specified during the global motion estimation process. |
| */ |
| typedef enum |
| { |
| ia_cp_me_translation, /**< Pure in-plane translation model */ |
| ia_cp_me_translation_rotation, /**< Pure in-plane translation and rotation model */ |
| ia_cp_me_affine, /**< General affine model */ |
| ia_cp_me_projective /**< General projective (homography) model */ |
| } ia_cp_me_model; |
| |
| /** @brief Global motion estimation configuration interface |
| * |
| * This structure contains global motion estimation parameters. These |
| * settings control the execution of the algorithm at runtime. |
| */ |
| typedef struct |
| { |
| int pyr_depth; /**< Depth of the pyramid for coarse-to-fine search */ |
| ia_cp_me_model model; /**< Transformation model */ |
| } ia_cp_me_cfg; |
| |
| /** @brief Results of the global motion estimation |
| * |
| * This structure contains results of the global motion estimation. |
| */ |
| typedef struct |
| { |
| double transform[3][3]; /**< Resulting 3x3 transformation matrix */ |
| int fallback; /**< Flag to indicate large global motion */ |
| } ia_cp_me_result; |
| |
| /** @brief Processing unit target |
| * |
| * This enumerator lists valid targets for execution of CP applications. |
| */ |
| typedef enum |
| { |
| ia_cp_tgt_ia, /**< Intel Architecture (IA) host */ |
| ia_cp_tgt_ipu, /**< Image Processing Unit */ |
| ia_cp_tgt_gpu, /**< Graphics Processing Unit */ |
| ia_cp_tgt_ate, /**< ATE C bitexact reference model */ |
| ia_cp_tgt_ref, /**< Generic C reference model */ |
| ia_cp_tgt_skl_gpu, /**< Platform SKL, target GPU */ |
| ia_cp_tgt_skl_ref, /**< Platform SKL, Generic C reference model */ |
| ia_cp_tgt_none /**< Use to indicate error in target choice */ |
| } ia_cp_target; |
| |
| /** @brief HDR internal state. |
| * |
| * Opaque structure which holds HDR internal state. |
| */ |
| typedef struct ia_cp_hdr ia_cp_hdr; |
| |
| /** @brief vHDR internal state. |
| * |
| * Opaque structure which holds vHDR internal state. |
| */ |
| typedef struct ia_cp_vhdr ia_cp_vhdr; |
| |
| /** @brief vHDR internal state. |
| * |
| * Opaque structure which holds vHDR internal state. |
| */ |
| typedef struct ia_cp_vhdr_v2 ia_cp_vhdr_v2; |
| |
| /** @brief ULL internal state. |
| * |
| * Opaque structure which holds ULL internal state. |
| */ |
| typedef struct ia_cp_ull ia_cp_ull; |
| |
| /** @brief CP library context. |
| * |
| * Opaque structure which holds CP library internal state. |
| */ |
| typedef struct ia_cp_context ia_cp_context; |
| |
| /** |
| * @brief Chart descriptor |
| */ |
| typedef struct { |
| ia_frame container; /**< Image container */ |
| int roi_width; /**< Width of the patch ROI */ |
| int roi_height; /**< Height of the patch ROI */ |
| int patch_num; /**< Number of relevant patches */ |
| int *points_x; /**< Top-left X coordinates of the patch */ |
| int *points_y; /**< Top-left Y coordinates of the patch */ |
| } ia_cp_chart; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _IA_CP_TYPES_H_ */ |