/* 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 /// 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_ */