blob: 8f540676cf306c4245630848c3871b017ce1a017 [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 _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_ */