/*
* xcam_3a_result.h - 3A result interface
*
* Copyright (c) 2014-2015 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.
*
* Author: Wind Yuan <feng.yuan@intel.com>
* Zong Wei <wei.zong@intel.com>
*/
#ifndef C_XCAM_3A_RESULT_H
#define C_XCAM_3A_RESULT_H
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <base/xcam_defs.h>
XCAM_BEGIN_DECLARE
#define XCAM_3A_MAX_RESULT_COUNT 256
#define xcam_3a_result_type(result) (((XCam3aResultHead*)result)->type)
typedef enum _ImageProcessType {
XCAM_IMAGE_PROCESS_ONCE,
XCAM_IMAGE_PROCESS_ALWAYS,
XCAM_IMAGE_PROCESS_POST,
} XCamImageProcessType;
typedef enum _XCam3aResultType {
XCAM_3A_RESULT_NULL = 0,
/* White Balance */
XCAM_3A_RESULT_WHITE_BALANCE,
XCAM_3A_RESULT_BLACK_LEVEL,
XCAM_3A_RESULT_YUV2RGB_MATRIX,
XCAM_3A_RESULT_RGB2YUV_MATRIX,
/* Exposure */
XCAM_3A_RESULT_EXPOSURE,
/* Focus */
XCAM_3A_RESULT_FOCUS,
XCAM_3A_RESULT_DEMOSAIC,
//XCAM_3A_RESULT_EIGEN_COLOR_DEMOSAICING,
XCAM_3A_RESULT_DEFECT_PIXEL_CORRECTION,
/* noise reduction */
XCAM_3A_RESULT_NOISE_REDUCTION,
XCAM_3A_RESULT_3D_NOISE_REDUCTION,
XCAM_3A_RESULT_TEMPORAL_NOISE_REDUCTION_YUV,
XCAM_3A_RESULT_LUMA_NOISE_REDUCTION,
XCAM_3A_RESULT_ADVANCED_NOISE_REDUCTION,
XCAM_3A_RESULT_CHROMA_NOISER_EDUCTION,
XCAM_3A_RESULT_BAYER_NOISE_REDUCTION,
XCAM_3A_RESULT_WAVELET_NOISE_REDUCTION,
XCAM_3A_RESULT_EDGE_ENHANCEMENT,
//XCAM_3A_RESULT_FRIGLE_CONTROL,
XCAM_3A_RESULT_MACC,
//XCAM_3A_RESULT_MACCTABLE,
XCAM_3A_RESULT_CHROMA_TONE_CONTROL,
//XCAM_3A_RESULT_CHROMATONECONTROLTABLE,
XCAM_3A_RESULT_CHROMA_ENHANCEMENT,
XCAM_3A_RESULT_Y_GAMMA,
XCAM_3A_RESULT_R_GAMMA,
XCAM_3A_RESULT_G_GAMMA,
XCAM_3A_RESULT_B_GAMMA,
XCAM_3A_RESULT_BRIGHTNESS,
//XCAM_3A_RESULT_SHADING_TABLE,
//Smart Analysis Type
XCAM_3A_RESULT_FACE_DETECTION = 0x4000,
XCAM_3A_RESULT_DVS,
XCAM_3A_RESULT_USER_DEFINED_TYPE = 0x8000,
} XCam3aResultType;
/* matrix size 3x3 */
#define XCAM_COLOR_MATRIX_SIZE 9
#define XCAM_GAMMA_TABLE_SIZE 256
#define XCAM_CHROMA_AXIS_SIZE 16
#define XCAM_CHROMA_MATRIX_SIZE 4
#define XCAM_BNR_TABLE_SIZE 64
typedef struct _XCam3aResultHead XCam3aResultHead;
struct _XCam3aResultHead {
XCam3aResultType type;
XCamImageProcessType process_type;
uint32_t version;
void (*destroy) (XCam3aResultHead *);
};
typedef struct _XCam3aResultWhiteBalance {
XCam3aResultHead head;
/* data */
double r_gain;
double gr_gain;
double gb_gain;
double b_gain;
} XCam3aResultWhiteBalance;
typedef struct _XCam3aResultBlackLevel {
XCam3aResultHead head;
/* data */
double r_level;
double gr_level;
double gb_level;
double b_level;
} XCam3aResultBlackLevel;
typedef struct _XCam3aResultColorMatrix {
XCam3aResultHead head;
/* data */
double matrix [XCAM_COLOR_MATRIX_SIZE];
} XCam3aResultColorMatrix;
typedef struct _XCam3aResultExposure {
XCam3aResultHead head;
/* data */
int32_t exposure_time; //in micro seconds
double analog_gain; // multipler
double digital_gain; // multipler
double aperture; //fn
} XCam3aResultExposure;
typedef struct _XCam3aResultFocus {
XCam3aResultHead head;
/* data */
int32_t position;
} XCam3aResultFocus;
typedef struct _XCam3aResultDemosaic {
XCam3aResultHead head;
/* data */
double noise;
double threshold_cr;
double threshold_cb;
} XCam3aResultDemosaic;
/* DefectPixel Correction */
typedef struct _XCam3aResultDefectPixel {
XCam3aResultHead head;
/* data */
double gain;
double gr_threshold;
double r_threshold;
double b_threshold;
double gb_threshold;
} XCam3aResultDefectPixel;
typedef struct _XCam3aResultNoiseReduction {
XCam3aResultHead head;
/* data */
double gain;
double threshold1;
double threshold2;
} XCam3aResultNoiseReduction;
typedef struct _XCam3aResultBayerNoiseReduction {
XCam3aResultHead head;
/* data */
double bnr_gain;
double direction;
double table[XCAM_BNR_TABLE_SIZE];
} XCam3aResultBayerNoiseReduction;
typedef struct _XCam3aResultEdgeEnhancement {
XCam3aResultHead head;
/* data */
double gain;
double threshold;
} XCam3aResultEdgeEnhancement;
typedef struct _XCam3aResultGammaTable {
XCam3aResultHead head;
/* data */
double table[XCAM_GAMMA_TABLE_SIZE];
} XCam3aResultGammaTable;
typedef struct _XCam3aResultMaccMatrix {
XCam3aResultHead head;
/* data */
double table[XCAM_CHROMA_AXIS_SIZE * XCAM_CHROMA_MATRIX_SIZE];
} XCam3aResultMaccMatrix;
typedef struct _XCam3aResultChromaToneControl {
XCam3aResultHead head;
/* data */
double uv_gain [XCAM_GAMMA_TABLE_SIZE]; // according to Y
} XCam3aResultChromaToneControl;
typedef struct _XCam3aResultBrightness {
XCam3aResultHead head;
/* data */
double brightness_level; // range [-1,1], -1 is full dark , 0 is normal val, 1 is full bright
} XCam3aResultBrightness;
typedef struct _XCam3aResultTemporalNoiseReduction {
XCam3aResultHead head;
/* data */
double gain;
double threshold[3];
} XCam3aResultTemporalNoiseReduction;
typedef struct _XCam3aResultWaveletNoiseReduction {
XCam3aResultHead head;
/* data */
uint8_t decomposition_levels;
double threshold[2]; /* [0]:soft threshold / [1]:hard threshold */
double analog_gain;
} XCam3aResultWaveletNoiseReduction;
XCAM_END_DECLARE
#endif