/*
|
* Copyright (c) 2019 Rockchip 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 _RK_AIQ_COMM_H_
|
#define _RK_AIQ_COMM_H_
|
|
#include <stdint.h>
|
|
#ifdef __cplusplus
|
#define RKAIQ_BEGIN_DECLARE extern "C" {
|
#define RKAIQ_END_DECLARE }
|
#else
|
#define RKAIQ_BEGIN_DECLARE
|
#define RKAIQ_END_DECLARE
|
#endif
|
|
RKAIQ_BEGIN_DECLARE
|
|
typedef enum {
|
BOOL_FALSE = 0,
|
BOOL_TRUE = (!BOOL_FALSE)
|
} bool_t;
|
|
typedef int RESULT;
|
|
typedef enum RKAiqResult_e {
|
RK_AIQ_RET_SUCCESS = 0, // this has to be 0, if clauses rely on it
|
RK_AIQ_RET_FAILURE = 1, // process failure
|
RK_AIQ_RET_INVALID_PARM = 2, // invalid parameter
|
RK_AIQ_RET_WRONG_CONFIG = 3, // feature not supported
|
RK_AIQ_RET_BUSY = 4, // there's already something going on...
|
RK_AIQ_RET_CANCELED = 5, // operation canceled
|
RK_AIQ_RET_OUTOFMEM = 6, // out of memory
|
RK_AIQ_RET_OUTOFRANGE = 7, // parameter/value out of range
|
RK_AIQ_RET_NULL_POINTER = 8, // the/one/all parameter(s) is a(are) NULL pointer(s)
|
RK_AIQ_RET_DIVISION_BY_ZERO = 9, // a divisor equals ZERO
|
RK_AIQ_RET_NO_INPUTIMAGE = 10 // no input image
|
} RKAiqResult_t;
|
|
typedef enum RKAiqState_e {
|
RK_AIQ_STATE_INVALID = 0, /**< initialization value */
|
RK_AIQ_STATE_INITIALIZED = 1, /**< instance is created, but not initialized */
|
RK_AIQ_STATE_STOPPED = 2, /**< instance is confiured (ready to start) or stopped */
|
RK_AIQ_STATE_RUNNING = 3, /**< instance is running (processes frames) */
|
RK_AIQ_STATE_LOCKED = 4, /**< instance is locked (for taking snapshots) */
|
RK_AIQ_STATE_MAX /**< max */
|
} RKAiqState_t;
|
|
typedef enum RKAiqOPMode_e {
|
RK_AIQ_OP_MODE_INVALID = 0, /**< initialization value */
|
RK_AIQ_OP_MODE_AUTO = 1, /**< instance is created, but not initialized */
|
RK_AIQ_OP_MODE_MANUAL = 2, /**< instance is confiured (ready to start) or stopped */
|
RK_AIQ_OP_MODE_MAX /**< max */
|
} RKAiqOPMode_t;
|
|
#define ABS(a) (((a) > 0) ? (a) : (-(a)))
|
#ifndef MIN
|
#define MIN(a,b) ((a) > (b) ? (b) : (a))
|
#endif
|
#ifndef MAX
|
#define MAX(a,b) ((a) < (b) ? (b) : (a))
|
#endif
|
#define ROUND_D(x) (long)(((double)x)+(((x) > 0) ? 0.5 : (-0.5)))
|
#define ROUND_F(x) (int)(((float)x)+(((x) > 0) ? 0.5 : (-0.5)))
|
#define FLOOR(a) (int)( ((double)(a) < (int)(a)) ? (int)((a)-1) : (int)(a) )
|
#define FLOOR_INT64(a) (long)( ((double)(a) < (long)(a)) ? (long)((a)-1) : (long)(a) )
|
#define INTERP1(x0, x1, ratio) ((ratio) * ((x1) - (x0)) + x0)
|
#define CLIPBIT(a,b) ((a)>((1<<(b))-1)?((1<<(b))-1):(a))
|
#define SWAP(_T_,A,B) { _T_ tmp = (A); (A) = (B); (B) = tmp; }
|
#define MIN2(a, b) ((a) > (b) ? (b) : (a))
|
#define CLIP(a, min_v, max_v) (((a) < (min_v)) ? (min_v) : (((a) > (max_v)) ? (max_v) : (a)))
|
|
|
#define RETURN_RESULT_IF_DIFFERENT( cur_res, exp_res ) if ( exp_res != cur_res ) { return ( cur_res ); }
|
#define DCT_ASSERT(exp) ((void)0)
|
|
#ifndef __FLT_EPSILON__
|
#define __FLT_EPSILON__ 0.000000119209289550781250000000
|
#endif /* __FLT_EPSILON__ */
|
|
#ifndef FLT_EPSILON
|
#define FLT_EPSILON __FLT_EPSILON__
|
#endif /* FLT_EPSILON */
|
|
|
#define DIVMIN 0.00001
|
|
typedef unsigned int uint32_t;
|
typedef int sint32_t;
|
typedef char sint8_t;
|
typedef unsigned long long uint64t;
|
|
|
/******************************************************************************/
|
/**
|
* @brief A structure to represent a 5x5 matrix.
|
*
|
* The 25 values are laid out as follows (zero based index):
|
*
|
* | 00 01 02 03 04 | \n
|
* | 05 06 07 08 09 | \n
|
* | 10 11 12 13 14 | \n
|
* | 15 16 17 18 19 | \n
|
* | 20 21 22 23 24 | \n
|
*
|
* @note The 25 values are represented as unsigned char numbers.
|
*
|
*****************************************************************************/
|
typedef struct Cam5x5UCharMatrix_s {
|
uint8_t uCoeff[5 * 5]; /**< array of 5x5 unsigned char values */
|
} Cam5x5UCharMatrix_t;
|
|
typedef struct Cam15x15UCharMatrix_s {
|
uint8_t uCoeff[15 * 15]; /**< array of 15x15 unsigned char values */
|
} Cam15x15UCharMatrix_t;
|
|
|
typedef struct Cam1x3IntMatrix_s
|
{
|
// M4_ARRAY_DESC("Coeff", "s32", M4_SIZE(1,3), M4_RANGE(-65535,65535), "0", M4_DIGIT(0), M4_DYNAMIC(0))
|
int Coeff[3];
|
} Cam1x3IntMatrix_t;
|
|
typedef struct Cam1x4IntMatrix_s
|
{
|
int Coeff[4];
|
} Cam1x4IntMatrix_t;
|
|
typedef struct Cam1x6IntMatrix_s
|
{
|
int Coeff[6];
|
} Cam1x6IntMatrix_t;
|
|
typedef struct Cam1x8IntMatrix_s
|
{
|
int Coeff[8];
|
} Cam1x8IntMatrix_t;
|
|
typedef struct Cam1x9IntMatrix_s
|
{
|
int Coeff[9];
|
} Cam1x9IntMatrix_t;
|
|
typedef struct Cam1x12IntMatrix_s
|
{
|
int Coeff[12];
|
} Cam1x12IntMatrix_t;
|
typedef struct Cam1x17IntMatrix_s
|
{
|
int Coeff[17];
|
} Cam1x17IntMatrix_t;
|
|
typedef struct Cam2x3IntMatrix_s
|
{
|
int Coeff[2 * 3];
|
} Cam2x3IntMatrix_t;
|
|
typedef struct Cam3x3IntMatrix_s
|
{
|
int Coeff[3 * 3];
|
} Cam3x3IntMatrix_t;
|
|
typedef struct Cam5x5IntMatrix_s
|
{
|
int Coeff[5 * 5];
|
} Cam5x5IntMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x1FloatMatrix_s {
|
float fCoeff[1];
|
} Cam1x1FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x3FloatMatrix_s {
|
// M4_ARRAY_DESC("fCoeff", "f32", M4_SIZE(1,3), M4_RANGE(-65535,65535), "0", M4_DIGIT(6), M4_DYNAMIC(0))
|
float fCoeff[3];
|
} Cam1x3FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | ... | 4 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x4FloatMatrix_s {
|
// M4_ARRAY_DESC("fCoeff", "f32", M4_SIZE(1,4), M4_RANGE(-65535,65535), "0", M4_DIGIT(6), M4_DYNAMIC(0))
|
float fCoeff[4];
|
} Cam1x4FloatMatrix_t;
|
|
typedef struct Cam1x5FloatMatrix_s
|
{
|
float fCoeff[5];
|
} Cam1x5FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | ... | 6 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x6FloatMatrix_s {
|
float fCoeff[6];
|
} Cam1x6FloatMatrix_t;
|
|
typedef struct Cam1x8FloatMatrix_s
|
{
|
float fCoeff[8];
|
} Cam1x8FloatMatrix_t;
|
|
typedef struct Cam1x9FloatMatrix_s
|
{
|
float fCoeff[9];
|
} Cam1x9FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | ... | 15 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x16FloatMatrix_s {
|
float fCoeff[16];
|
} Cam1x16FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam2x1FloatMatrix {
|
// M4_ARRAY_DESC("fCoeff", "f32", M4_SIZE(1,2), M4_RANGE(-65535,65535), "0", M4_DIGIT(6), M4_DYNAMIC(0))
|
float fCoeff[2];
|
} Cam2x1FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 |
|
* | 2 | 3 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam2x2FloatMatrix {
|
float fCoeff[4];
|
} Cam2x2FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam3x1FloatMatrix {
|
float fCoeff[3];
|
} Cam3x1FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 |
|
* | 3 | 4 | 5 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam3x2FloatMatrix_s {
|
float fCoeff[6];
|
} Cam3x2FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 |
|
* | 3 | 4 | 5 |
|
* | 6 | 7 | 8 |
|
*
|
* @note Coefficients are represented as float numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam3x3FloatMatrix_s {
|
float fCoeff[9];
|
} Cam3x3FloatMatrix_t;
|
|
/******************************************************************************/
|
/**
|
* @brief A structure to represent a 5x5 matrix.
|
*
|
* The 25 values are laid out as follows (zero based index):
|
*
|
* | 00 01 02 03 04 | \n
|
* | 05 06 07 08 09 | \n
|
* | 10 11 12 13 14 | \n
|
* | 15 16 17 18 19 | \n
|
* | 20 21 22 23 24 | \n
|
*
|
* @note The 25 values are represented as float numbers.
|
*
|
*****************************************************************************/
|
typedef struct Cam5x5FloatMatrix_s {
|
float fCoeff[25U]; /**< array of 5x5 float values */
|
} Cam5x5FloatMatrix_t;
|
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ....
|
* | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ....
|
* | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | ....
|
* ...
|
* ...
|
* ...
|
* | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | .... | 288 |
|
*
|
* @note Coefficients are represented as short numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam17x17FloatMatrix_s {
|
float fCoeff[17 * 17];
|
} Cam17x17FloatMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 |
|
*
|
* @note Coefficients are represented as short numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x3ShortMatrix_s {
|
// M4_ARRAY_DESC("fCoeff", "s16", M4_SIZE(1,3), M4_RANGE(-65535,65535), "0", M4_DIGIT(0), M4_DYNAMIC(0))
|
int16_t Coeff[3];
|
} Cam1x3ShortMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 | ... | 4 |
|
*
|
* @note Coefficients are represented as short numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x4UShortMatrix_s {
|
uint16_t uCoeff[4];
|
} Cam1x4UShortMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 | ... | 16 |
|
*
|
* @note Coefficients are represented as short numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam1x17UShortMatrix_s {
|
uint16_t uCoeff[17];
|
} Cam1x17UShortMatrix_t;
|
|
/*****************************************************************************/
|
/**
|
* @brief Matrix coefficients
|
*
|
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ....
|
* | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ....
|
* | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | ....
|
* ...
|
* ...
|
* ...
|
* | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | .... | 288 |
|
*
|
* @note Coefficients are represented as short numbers
|
*/
|
/*****************************************************************************/
|
typedef struct Cam17x17UShortMatrix_s {
|
// M4_ARRAY_DESC("uCoeff", "u16", M4_SIZE(17,17), M4_RANGE(0,10000), "1024", M4_DIGIT(0), M4_DYNAMIC(0))
|
uint16_t uCoeff[17 * 17];
|
} Cam17x17UShortMatrix_t;
|
|
typedef enum {
|
RK_AIQ_WORKING_MODE_NORMAL,
|
RK_AIQ_WORKING_MODE_ISP_HDR2 = 0x10,
|
RK_AIQ_WORKING_MODE_ISP_HDR3 = 0x20,
|
// RK_AIQ_WORKING_MODE_SENSOR_HDR = 10, // sensor built-in hdr mode
|
} rk_aiq_working_mode_t;
|
|
typedef enum {
|
RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR = RK_AIQ_WORKING_MODE_ISP_HDR2 + 1,
|
RK_AIQ_ISP_HDR_MODE_2_LINE_HDR = RK_AIQ_WORKING_MODE_ISP_HDR2 + 2,
|
RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR = RK_AIQ_WORKING_MODE_ISP_HDR3 + 1,
|
RK_AIQ_ISP_HDR_MODE_3_LINE_HDR = RK_AIQ_WORKING_MODE_ISP_HDR3 + 2,
|
} rk_aiq_isp_hdr_mode_t;
|
|
typedef enum {
|
RK_AIQ_SENSOR_HDR_LINE_MODE_DCG, // 2frame: share the same exptime, use dual conversion gain; 3frame: DCG+VS, VS frame use individual gain & time
|
RK_AIQ_SENSOR_HDR_LINE_MODE_STAGGER, // 2frame or 3frame
|
} rk_aiq_sensor_hdr_line_mode_t;
|
|
#define RK_AIQ_HDR_GET_WORKING_MODE(mode) (mode & 0xF0)
|
|
typedef enum {
|
RK_AIQ_ISPP_STATIC_TNR_WORKING_MODE_2TO1,
|
RK_AIQ_ISPP_STATIC_TNR_WORKING_MODE_3TO1,
|
} rk_aiq_ispp_static_tnr_working_mode_t;
|
|
typedef enum {
|
RK_AIQ_ISPP_STATIC_FEC_WORKING_MODE_STABLIZATION,
|
RK_AIQ_ISPP_STATIC_FEC_WORKING_MODE_FISHEYE,
|
} rk_aiq_ispp_static_fec_working_mode_t;
|
|
typedef enum {
|
RK_MODULE_INVAL = 0,
|
RK_MODULE_DPCC,
|
RK_MODULE_BLS,
|
RK_MODULE_LSC,
|
RK_MODULE_AWB_GAIN,
|
RK_MODULE_CTK,
|
RK_MODULE_GOC,
|
RK_MODULE_SHARP,
|
RK_MODULE_AE,
|
RK_MODULE_AWB,
|
RK_MODULE_NR,//10
|
RK_MODULE_GIC,
|
RK_MODULE_3DLUT,
|
RK_MODULE_LDCH,
|
RK_MODULE_TNR,//14
|
RK_MODULE_FEC,
|
RK_MODULE_RAWNR,//16
|
RK_MODULE_MAX
|
} rk_aiq_module_id_t;
|
|
|
extern int g_rkaiq_isp_hw_ver;
|
|
#define CHECK_ISP_HW_V20() \
|
(g_rkaiq_isp_hw_ver == 20 ? true : false)
|
|
#define CHECK_ISP_HW_V21() \
|
(g_rkaiq_isp_hw_ver == 21 ? true : false)
|
|
RKAIQ_END_DECLARE
|
|
#endif
|