mirror of https://github.com/OpenIPC/firmware.git
571 lines
13 KiB
C
571 lines
13 KiB
C
/* Copyright (c) 2018-2019 Sigmastar Technology Corp.
|
|
All rights reserved.
|
|
|
|
Unless otherwise stipulated in writing, any and all information contained
|
|
herein regardless in any format shall remain the sole proprietary of
|
|
Sigmastar Technology Corp. and be kept in strict confidence
|
|
(Sigmastar Confidential Information) by the recipient.
|
|
Any unauthorized act including without limitation unauthorized disclosure,
|
|
copying, use, reproduction, sale, distribution, modification, disassembling,
|
|
reverse engineering and compiling of the contents of Sigmastar Confidential
|
|
Information is unlawful and strictly prohibited. Sigmastar hereby reserves the
|
|
rights to any and all damages, losses, costs and expenses resulting therefrom.
|
|
*/
|
|
|
|
|
|
#ifndef MSTAR_ISP_GENERAL_H_
|
|
#define MSTAR_ISP_GENERAL_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
typedef void* ISP_DBGBUF_HANDLE;
|
|
|
|
//#include <isp_types.h>
|
|
/// data type unsigned char, data length 1 byte
|
|
typedef unsigned char MS_U8; // 1 byte
|
|
/// data type unsigned short, data length 2 byte
|
|
typedef unsigned short MS_U16; // 2 bytes
|
|
/// data type unsigned int, data length 4 byte
|
|
typedef unsigned int MS_U32; // 4 bytes
|
|
/// data type unsigned int, data length 8 byte
|
|
typedef unsigned long long MS_U64; // 8 bytes
|
|
/// data type signed char, data length 1 byte
|
|
typedef signed char MS_S8; // 1 byte
|
|
/// data type signed short, data length 2 byte
|
|
typedef signed short MS_S16; // 2 bytes
|
|
/// data type signed int, data length 4 byte
|
|
typedef signed int MS_S32; // 4 bytes
|
|
/// data type signed int, data length 8 byte
|
|
typedef signed long long MS_S64; // 8 bytes
|
|
/// data type float, data length 4 byte
|
|
typedef float MS_FLOAT; // 4 bytes
|
|
|
|
typedef unsigned char MI_U8; // 1 byte
|
|
typedef unsigned short MI_U16; // 2 bytes
|
|
typedef unsigned int MI_U32; // 4 bytes
|
|
typedef unsigned long long MI_U64; // 8 bytes
|
|
typedef signed char MI_S8; // 1 byte
|
|
typedef signed short MI_S16; // 2 bytes
|
|
typedef signed int MI_S32; // 4 bytes
|
|
typedef signed long long MI_S64; // 8 bytes
|
|
/*
|
|
typedef enum __attribute__ ((aligned (4)))
|
|
{
|
|
SS_FALSE = 0,
|
|
SS_TRUE = !SS_FALSE,
|
|
SS_BOOL_MAX
|
|
} MI_ISP_BOOL_e;
|
|
|
|
typedef enum __attribute__ ((aligned (4)))
|
|
{
|
|
SS_OP_TYP_AUTO = 0,
|
|
SS_OP_TYP_MANUAL = !SS_OP_TYP_AUTO,
|
|
SS_OP_TYP_MODE_MAX
|
|
} MI_ISP_OP_TYPE_e;
|
|
*/
|
|
typedef enum __attribute__ ((aligned (4)))
|
|
{
|
|
MS_FALSE = 0,
|
|
MS_TRUE = !MS_FALSE,
|
|
MS_BOOL_MAX = 0x7FFFFFFF
|
|
} MS_CAM_BOOL;
|
|
|
|
#define FAIL (-1)
|
|
#define SUCCESS (0)
|
|
|
|
#if !defined(NULL)
|
|
#define NULL (0)
|
|
#endif
|
|
|
|
#if !defined(TRUE) && !defined(FALSE)
|
|
/// definition for TRUE
|
|
#define TRUE 1
|
|
/// definition for FALSE
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
#define LIMIT(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
|
|
|
|
#ifdef sign
|
|
#undef sign
|
|
#endif
|
|
#define sign(a) (((a) > 0) ? (1) : (-1))
|
|
|
|
#define CAMERA_ISR_FREQ_SEC (0)
|
|
#define CAMERA_ISR_FREQ_NSEC (10000000) //(1000*1000*1000) // 1sec
|
|
|
|
#define PACK_ALIGN_TAG(n) __attribute__((packed, aligned(n)))
|
|
#define LIMIT_BITS(x, bits) ((x) > ((1<<(bits))-1) ? (((1<<(bits))-1)) : (x))
|
|
typedef void *(*THREAD_P)(void *);
|
|
|
|
#define AE_WIN_MAX_WIDTH (32)//(16)
|
|
#define AE_WIN_MAX_HEIGHT (32)//(24)
|
|
#define AE_HIST_WIN_MAX_WIDTH (128)
|
|
#define AE_HIST_WIN_MAX_HEIGHT (90)
|
|
#define AE_HIST_BIN0 (40)
|
|
#define AE_HIST_BINX (128)
|
|
#define AE_IR_HIST_BIN (256)
|
|
#define AE_HIST_OUT_BIN (256)
|
|
|
|
#define HDR_STATS_LEN (1024)
|
|
|
|
#define AWB_WIN_MAX_WIDTH (128)
|
|
#define AWB_WIN_MAX_HEIGHT (90)
|
|
#define AWB_BLOCK_MIN_VALID_X (4)
|
|
#define AWB_BLOCK_MIN_VALID_Y (2)
|
|
|
|
#define AWB_LV_CT_TBL_NUM 18
|
|
#define AWB_CT_TBL_NUM 10
|
|
|
|
typedef struct
|
|
{
|
|
MS_U8 uAvgR;
|
|
MS_U8 uAvgG;
|
|
MS_U8 uAvgB;
|
|
MS_U8 uAvgY;
|
|
} MS_AE_AVGS;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U8 uAvgR;
|
|
MS_U8 uAvgG;
|
|
MS_U8 uAvgB;
|
|
} MS_AWB_AVGS;
|
|
|
|
// crop range
|
|
typedef struct
|
|
{
|
|
unsigned int x;
|
|
unsigned int y;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
unsigned int degree;
|
|
char mirror_flip;
|
|
} ISP_CROP_RANGE;
|
|
|
|
// input source/output destination
|
|
typedef enum
|
|
{
|
|
// source
|
|
ISP_DATA_SRC_TV,
|
|
ISP_DATA_SRC_SENSOR,
|
|
ISP_DATA_SRC_RDMA,
|
|
|
|
// destination
|
|
ISP_DATA_DST_ICP,
|
|
ISP_DATA_DST_WDMA_SIF,
|
|
ISP_DATA_DST_WDMA_ISP,
|
|
ISP_DATA_DST_WDMA_ISPDS,
|
|
ISP_DATA_DST_WDMA_ISPSWAPYC,
|
|
ISP_DATA_DST_WDMA_VDOS,
|
|
ISP_DATA_DST_WDMA_ISP_GREY,
|
|
ISP_DATA_DST_WDMA_ISP_OUT,
|
|
ISP_DATA_DST_WDMA_RGBIR_IN
|
|
} ISP_DATA_SRCDST;
|
|
typedef enum
|
|
{
|
|
ISP_SRC_SENSOR,
|
|
ISP_SRC_RDMA,
|
|
} ISP_DATA_SRC;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned int x;
|
|
unsigned int y;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
} ISP_WDMA_CROP_RANGE;
|
|
// color space
|
|
typedef enum
|
|
{
|
|
ISP_COLOR_SPACE_YUV,
|
|
ISP_COLOR_SPACE_BAYER,
|
|
} ISP_COLOR_SPACE;
|
|
|
|
// data precision
|
|
typedef enum
|
|
{
|
|
ISP_DATAPRECISION_8 = 0,
|
|
ISP_DATAPRECISION_10 = 1,
|
|
ISP_DATAPRECISION_16 = 2,
|
|
ISP_DATAPRECISION_12 = 3,
|
|
ISP_DATAPRECISION_1T4P_8 = 4,
|
|
ISP_DATAPRECISION_1T4P_10 = 5,
|
|
ISP_DATAPRECISION_1T4P_16 = 6,
|
|
ISP_DATAPRECISION_1T4P_12 = 7
|
|
} ISP_DATAPRECISION;
|
|
|
|
typedef enum
|
|
{
|
|
BAYER_RG = 0,
|
|
BAYER_GR = 1,
|
|
BAYER_BG = 2,
|
|
BAYER_GB = 3
|
|
} SEN_BAYER;
|
|
|
|
typedef enum
|
|
{
|
|
RGBIR_R0 = 0,
|
|
RGBIR_G0 = 1,
|
|
RGBIR_B0 = 2,
|
|
RGBIR_G1 = 3,
|
|
RGBIR_G2 = 4,
|
|
RGBIR_I0 = 5,
|
|
RGBIR_G3 = 6,
|
|
RGBIR_I1 = 7,
|
|
RGBIR_NONE = 8,
|
|
} SEN_RGBIR;
|
|
|
|
|
|
// input/output configuration
|
|
typedef struct
|
|
{
|
|
ISP_CROP_RANGE crop_range;
|
|
ISP_DATA_SRCDST srcdst;
|
|
ISP_DATAPRECISION data_precision;
|
|
ISP_COLOR_SPACE colorspace;
|
|
} ISP_INOUT_CONFIG;
|
|
/*
|
|
// data control path
|
|
typedef enum
|
|
{
|
|
ISP_CTL_PATH_SENSOR_ISP_ICP, // preview
|
|
ISP_CTL_PATH_SENSOR_WDMA_RDMA_ISP_ICP, // preview with ring buffer
|
|
ISP_CTL_PATH_SENSOR_WDMA, // capture raw
|
|
ISP_CTL_PATH_RDMA_ISPDS_WDMA, // iterative processing raw
|
|
ISP_CTL_PATH_RDMA_ISPDP_WDMA, // software trigger capture
|
|
ISP_CTL_PATH_RDMA_ISP_ICP // software trigger capture
|
|
} ISP_CTL_PATH;
|
|
*/
|
|
|
|
/*
|
|
typedef enum {
|
|
CAMERA_ID_REAR1 = 0,
|
|
CAMERA_ID_REAR2 = 1,
|
|
CAMERA_ID_FRONT1 = 2,
|
|
CAMERA_ID_FRONT2 = 3,
|
|
CAMERA_ID_TV1 = 4,
|
|
CAMERA_ID_TV2 = 5,
|
|
CAMERA_ID_PG = 6,
|
|
CAMERA_ID_AUTO = 7,
|
|
CAMERA_ID_END = 8
|
|
} CameraModule_id_t;
|
|
*/
|
|
|
|
typedef enum
|
|
{
|
|
IQ_OBC,
|
|
IQ_WBG,
|
|
IQ_WBG0,
|
|
IQ_WBG1,
|
|
IQ_LSC,
|
|
IQ_CROSSTALK,
|
|
IQ_AEAWB_STATS,
|
|
IQ_DPC,
|
|
IQ_SPIKE_NR,
|
|
IQ_MEAN_FILTER, // mean filter
|
|
IQ_NOISE_MASKING, // noise masking
|
|
IQ_FALSECOLOR,
|
|
IQ_CFAi, // De-Mosaic
|
|
IQ_CFAi_NR, // Post Denoise
|
|
IQ_DNR,
|
|
IQ_DNR_LUM,
|
|
IQ_AF_STATS,
|
|
IQ_CCM,
|
|
IQ_UVCM,
|
|
IQ_GAMMA_RAW_LC,
|
|
IQ_GAMMA_RGB_LC,
|
|
IQ_GAMMA16TO16,
|
|
IQ_ALSC,
|
|
IQ_MOTION,
|
|
IQ_ROTATE,
|
|
IQ_END
|
|
} ISP_IQ_BLK;
|
|
|
|
typedef enum
|
|
{
|
|
ISP_WDMA_ICP,
|
|
ISP_WDMA_SIF,
|
|
ISP_WDMA_ISP,
|
|
ISP_WDMA_ISPDS,
|
|
ISP_WDMA_ISPSWAPYC,
|
|
ISP_WDMA_VDOS,
|
|
ISP_WDMA_ISP_GREY,
|
|
ISP_WDMA_ISP_OUT,
|
|
ISP_WDMA_RGBIR_IN,
|
|
ISP_WDMA_DEFAULT_SIF,
|
|
ISP_WDMA_DEFAULT_YC
|
|
} WDMA_PATH;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U32 width;
|
|
MS_U32 height;
|
|
MS_U32 x;
|
|
MS_U32 y;
|
|
WDMA_PATH wdma_path;
|
|
MS_U32 miu_addr;
|
|
} PACK_ALIGN_TAG(1) ISP_WDMA_ATTR;
|
|
|
|
// AE functions
|
|
typedef struct
|
|
{
|
|
MS_U16 u2BlkSize_x;
|
|
MS_U16 u2BlkSize_y;
|
|
MS_U16 u2BlkNum_x;
|
|
MS_U16 u2BlkNum_y;
|
|
} ISP_AE_WIN;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 Rgbir_stats[AE_IR_HIST_BIN];
|
|
} ISP_RGBIR_STATS;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 HDR_stats[HDR_STATS_LEN];
|
|
} ISP_HDR_STATS;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U8 uAvgR;
|
|
MS_U8 uAvgG;
|
|
MS_U8 uAvgB;
|
|
MS_U8 uAvgY;
|
|
} ISP_AE_AVGS;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 u2HistR[AE_HIST_BIN0];
|
|
MS_U16 u2HistG[AE_HIST_BIN0];
|
|
MS_U16 u2HistB[AE_HIST_BIN0];
|
|
} ISP_AE_HIST0;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 u2HistY[AE_HIST_BINX];
|
|
} ISP_AE_HISTX;
|
|
|
|
typedef struct
|
|
{
|
|
ISP_AE_HIST0 Hist0;
|
|
ISP_AE_HISTX Hist1;
|
|
ISP_AE_HISTX Hist2;
|
|
ISP_RGBIR_STATS HistIR;
|
|
ISP_AE_AVGS Avgs[AE_WIN_MAX_WIDTH * AE_WIN_MAX_HEIGHT];
|
|
ISP_AE_AVGS Avgs1[AE_WIN_MAX_WIDTH * AE_WIN_MAX_HEIGHT];
|
|
} PACK_ALIGN_TAG(16) ISP_AE_STATIS;
|
|
|
|
#if 1
|
|
// crop config, isp_crop_cfg
|
|
typedef struct {
|
|
int x_start;
|
|
int y_start;
|
|
int width;
|
|
int height;
|
|
} ISP_CROP_WIN, IspCropWin_t;
|
|
#endif
|
|
|
|
#if 1
|
|
typedef struct {
|
|
MS_U16 u2BlkNum_x;
|
|
MS_U16 u2BlkNum_y;
|
|
MS_U16 u2BlkVaild_x;
|
|
MS_U16 u2BlkVaild_y;
|
|
MS_U16 u2BlkValidLowLux_x;
|
|
MS_U16 u2BlkValidLowLux_y;
|
|
MS_U8 AccEnhanceRatio;
|
|
} ISP_AWB_WIN, IspAwbWin_t;
|
|
#endif
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 u2Stawin_x_offset;
|
|
MS_U16 u2Stawin_x_size;
|
|
MS_U16 u2Stawin_y_offset;
|
|
MS_U16 u2Stawin_y_size;
|
|
//MS_BOOL roi_mode;
|
|
} ISP_HISTO_WIN;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U8 acc_sft;
|
|
MS_U16 u2BlkSize_x;
|
|
MS_U16 u2BlkSize_y;
|
|
MS_U16 u2BlkNum_x;
|
|
MS_U16 u2BlkNum_y;
|
|
MS_U16 u2Blk_h_offset;
|
|
MS_U16 u2Blk_v_offset;
|
|
} ISP_HISTO_ATTR;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 nRgain; /** R channel */
|
|
MS_U16 nGrgain; /** Gr channel */
|
|
MS_U16 nGbgain; /** Gb channel */
|
|
MS_U16 nBgain; /** B channel */
|
|
} IspAwbGain_t;
|
|
|
|
typedef struct {
|
|
MS_U8 uAvgR;
|
|
MS_U8 uAvgG;
|
|
MS_U8 uAvgB;
|
|
} PACK_ALIGN_TAG(1) ISP_AWB_AVGS, IspAwbBlkAvg_t;
|
|
|
|
typedef struct {
|
|
IspAwbBlkAvg_t tRow[AWB_WIN_MAX_WIDTH];
|
|
} PACK_ALIGN_TAG(16) IspAwbAvgRow_t;
|
|
|
|
typedef struct {
|
|
ISP_AWB_AVGS Avgs[AWB_WIN_MAX_WIDTH * AWB_WIN_MAX_HEIGHT];
|
|
//IspAwbAvgRow_t Avgs[AWB_WIN_MAX_HEIGHT];
|
|
} PACK_ALIGN_TAG(16) ISP_AWB_STATIS,IspAwbStatis_t;
|
|
|
|
typedef enum
|
|
{
|
|
SIF_BUS_PARL = 0,
|
|
SIF_BUS_MIPI = 1
|
|
} SIF_BUS;
|
|
|
|
typedef enum
|
|
{
|
|
CLK_POL_POS = 0,
|
|
CLK_POL_NEG
|
|
} CLK_POL;
|
|
|
|
typedef enum
|
|
{
|
|
ISP_DNR_PATH_BEFORE_HDR = 0,
|
|
ISP_DNR_PATH_AFTER_HDR
|
|
} ISP_DNR_PATH_SEL;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U32 x;
|
|
MS_U32 y;
|
|
MS_U32 h;
|
|
MS_U32 w;
|
|
}RECT_t;
|
|
|
|
typedef enum
|
|
{
|
|
eIspInOutMode_RealTimeModeNoHDR = 0,
|
|
eIspInOutMode_RealTimeModeHDR = 1,
|
|
eIspInOutMode_FrameModeNoHDR = 2,
|
|
eIspInOutMode_FrameModeHDR = 3,
|
|
eIspInOutMode_RealTimeModeYuv = 4,
|
|
eIspInOutMode_FrameModeYuv = 5,
|
|
}IspInOutMode_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspHDRType_OFF,
|
|
eIspHDRType_VC, //virtual channel mode HDR, vc0->long, vc1->short
|
|
eIspHDRType_DOL,
|
|
eIspHDRType_EMB, //compressed HDR mode
|
|
eIspHDRType_LI, //Line interlace HDR
|
|
eIspHDRType_MAX
|
|
}IspHDRType_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspBayerID_RG = 0,
|
|
eIspBayerID_GR = 1,
|
|
eIspBayerID_BG = 2,
|
|
eIspBayerID_GB = 3,
|
|
}IspBayerID_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspPixelFmt_8Bit = 0,
|
|
eIspPixelFmt_10Bit = 1,
|
|
eIspPixelFmt_16Bit = 2,
|
|
eIspPixelFmt_12Bit = 3,
|
|
}IspPixelFmt_e;
|
|
|
|
//infinity5
|
|
typedef enum
|
|
{
|
|
eIsp3DNRCompressLevel_0 = 0, //12-bit
|
|
eIsp3DNRCompressLevel_1 = 1, //10-bit
|
|
eIsp3DNRCompressLevel_2 = 2, //8-bit
|
|
eIsp3DNRCompressLevel_3 = 3, //reserved
|
|
}Isp3DNRCompressLevel_e;
|
|
|
|
//infinity6
|
|
typedef enum
|
|
{
|
|
eIspDNRBitDepth_8 = 0, //8-bit
|
|
eIspDNRBitDepth_12 = 1, //12-bit
|
|
}IspDNRBitDepth_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspDNRBlockMode = 0, // block mode
|
|
eIspDNRLinearMode = 1, // linear mode
|
|
}IspDNRDataArrange_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspDNRBlock_128 = 0, // for 128 byte block width
|
|
eIspDNRBlock_256 = 1, // for 256 byte block width
|
|
}IspDNRBlockWidth_e;
|
|
|
|
typedef enum
|
|
{
|
|
eIspDNRDramRow_2K = 0, // for 2K byte/Row in DRAM
|
|
eIspDNRDramRow_1K = 1, // for 1K byte/Row in DRAM
|
|
}IspDNRDramRowMode_e;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 u16InWidth;
|
|
MS_U16 u16InHeight;
|
|
SEN_BAYER eBayerId;
|
|
Isp3DNRCompressLevel_e eBitDepth;
|
|
IspDNRDataArrange_e eDataMode;
|
|
IspDNRBlockWidth_e eBlockWidth;
|
|
IspDNRDramRowMode_e eRowMode;
|
|
MS_U32 u32HistBaseAddr;
|
|
MS_U32 u32RefBaseAddr[4];
|
|
MS_CAM_BOOL bRingMode;
|
|
}IspDNRAttr_t;
|
|
|
|
typedef struct
|
|
{
|
|
MS_U16 u16InWidth;
|
|
MS_U16 u16InHeight;
|
|
IspDNRBitDepth_e eBitDepth;
|
|
IspDNRDataArrange_e eDataMode;
|
|
IspDNRBlockWidth_e eBlockWidth;
|
|
IspDNRDramRowMode_e eRowMode;
|
|
MS_U32 u32BaseAddr[4];
|
|
MS_U8 u8MiuReqNum;
|
|
MS_U8 u8MiuReqCycle;
|
|
}IspROTAttr_t;
|
|
|
|
typedef struct
|
|
{
|
|
IspInOutMode_e eMode;
|
|
IspHDRType_e eHdrType;
|
|
MS_U16 u16InWidth;
|
|
MS_U16 u16InHeight;
|
|
RECT_t tCrop;
|
|
SEN_BAYER eBayerID;
|
|
ISP_DATAPRECISION ePixelFmt;
|
|
ISP_AE_WIN tAeWin;
|
|
IspAwbWin_t tAwbWin;
|
|
SEN_RGBIR eRGBIRID; //infinity5.
|
|
MS_CAM_BOOL bRoation;
|
|
MS_U16 u16IQWidth;
|
|
MS_U16 u16IQHeight;
|
|
}IspInOutAttr_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* MSTAR_ISP_GENERAL_H_ */
|