From 98449f52af80c9c4e11f571304385860085ad8b4 Mon Sep 17 00:00:00 2001 From: Alexander Pankov Date: Fri, 13 Jan 2023 17:32:51 +0300 Subject: [PATCH] imx225 720p: binary driver and ini (#611) --- .../sensor/config/imx225_i2c_dc_720p.ini | 223 ++++++++++++++++++ .../files/sensor/libsns_imx225_i2c_dc_720p.so | Bin 0 -> 16536 bytes 2 files changed, 223 insertions(+) create mode 100644 general/package/hisilicon-osdrv-hi3516cv100/files/sensor/config/imx225_i2c_dc_720p.ini create mode 100644 general/package/hisilicon-osdrv-hi3516cv100/files/sensor/libsns_imx225_i2c_dc_720p.so diff --git a/general/package/hisilicon-osdrv-hi3516cv100/files/sensor/config/imx225_i2c_dc_720p.ini b/general/package/hisilicon-osdrv-hi3516cv100/files/sensor/config/imx225_i2c_dc_720p.ini new file mode 100644 index 00000000..dcaac08b --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516cv100/files/sensor/config/imx225_i2c_dc_720p.ini @@ -0,0 +1,223 @@ + +# Untested sensor 2021.01.25 + +[sensor] +Sensor_type =imx225_720p ;sensor name +Mode =0 ;WDR_MODE_NONE = 0 + ;WDR_MODE_BUILT_IN = 1 + ;WDR_MODE_2To1_LINE = 2 + ;WDR_MODE_2To1_FRAME = 3 + ;WDR_MODE_2To1_FRAME_FULL_RATE =4 ...etc +DllFile = /usr/lib/sensors/libsns_imx225_i2c_dc_720p.so + + +[mode] +input_mode =4 ;INPUT_MODE_MIPI = 0 + ;INPUT_MODE_SUBLVDS = 1 + ;INPUT_MODE_LVDS = 2 ...etc + +dev_attr = 2 ;mipi_dev_attr_t = 0 + ;lvds_dev_attr_t = 1 + ;NULL =2 + +[isp_image] +Isp_x =20 +Isp_y =10 +Isp_W =1280 +Isp_H =720 +Isp_FrameRate=30 +Isp_Bayer =2 ;BAYER_RGGB=0, BAYER_GRBG=1, BAYER_GBRG=2, BAYER_BGGR=3 + + +[vi_dev] +Input_mod =2 ;VI_INPUT_MODE_BT656 = 0 + ;VI_INPUT_MODE_BT601, + ;VI_INPUT_MODE_DIGITAL_CAMERA +Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0 + ;VI_WORK_MODE_2Multiplex, + ;VI_WORK_MODE_4Multiplex +Combine_mode =0 ;Y/C composite or separation mode + ;VI_COMBINE_COMPOSITE = 0 /*Composite mode */ + ;VI_COMBINE_SEPARATE, /*Separate mode */ +Comp_mode =0 ;Component mode (single-component or dual-component) + ;VI_COMP_MODE_SINGLE = 0, /*single component mode */ + ;VI_COMP_MODE_DOUBLE = 1, /*double component mode */ +Clock_edge =1 ;Clock edge mode (sampling on the rising or falling edge) + ;VI_CLK_EDGE_SINGLE_UP=0, /*rising edge */ + ;VI_CLK_EDGE_SINGLE_DOWN, /*falling edge */ +Mask_num =2 ;Component mask +Mask_0 =0xFFF00000 +Mask_1 =0 +Scan_mode = 1;VI_SCAN_INTERLACED = 0 + ;VI_SCAN_PROGRESSIVE, +Data_seq =2 ;data sequence (ONLY for YUV format) + ;----2th component U/V sequence in bt1120 + ; VI_INPUT_DATA_VUVU = 0, + ; VI_INPUT_DATA_UVUV, + ;----input sequence for yuv + ; VI_INPUT_DATA_UYVY = 0, + ; VI_INPUT_DATA_VYUY, + ; VI_INPUT_DATA_YUYV, + ; VI_INPUT_DATA_YVYU + +Vsync =1 ; vertical synchronization signal + ;VI_VSYNC_FIELD = 0, + ;VI_VSYNC_PULSE, +VsyncNeg=0 ;Polarity of the vertical synchronization signal + ;VI_VSYNC_NEG_HIGH = 0, + ;VI_VSYNC_NEG_LOW /*if VIU_VSYNC_E +Hsync =0 ;Attribute of the horizontal synchronization signal + ;VI_HSYNC_VALID_SINGNAL = 0, + ;VI_HSYNC_PULSE, +HsyncNeg =0 ;Polarity of the horizontal synchronization signal + ;VI_HSYNC_NEG_HIGH = 0, + ;VI_HSYNC_NEG_LOW +VsyncValid =0 ;Attribute of the valid vertical synchronization signal + ;VI_VSYNC_NORM_PULSE = 0, + ;VI_VSYNC_VALID_SINGAL, +VsyncValidNeg =0;Polarity of the valid vertical synchronization signal + ;VI_VSYNC_VALID_NEG_HIGH = 0, + ;VI_VSYNC_VALID_NEG_LOW +Timingblank_HsyncHfb =0 ;Horizontal front blanking width +Timingblank_HsyncAct =1280 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =720 ;Vertical effetive width +Timingblank_VsyncVbb=0 ;Vertical back blanking height +Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive) +Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive) +Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive) + +;----- only for bt656 ---------- +FixCode =0 ;BT656_FIXCODE_1 = 0, + ;BT656_FIXCODE_0 +FieldPolar=0 ;BT656_FIELD_POLAR_STD = 0 + ;BT656_FIELD_POLAR_NSTD +DataPath =1 ;ISP enable or bypass + ;VI_PATH_BYPASS = 0,/* ISP bypass */ + ;VI_PATH_ISP = 1,/* ISP enable */ + ;VI_PATH_RAW = 2,/* Capture raw data, for debug */ +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=0 ; +DevRect_y=0 ; +DevRect_w=1280 ; +DevRect_h=720 ; + +[vi_chn] +CapRect_X =0 +CapRect_Y =0 +CapRect_Width=1280 +CapRect_Height=720 +DestSize_Width=1280 +DestSize_Height=720 +CapSel =2 ;Frame/field select. ONLY used in interlaced mode + ;VI_CAPSEL_TOP = 0, /* top field */ + ;VI_CAPSEL_BOTTOM, /* bottom field */ + ;VI_CAPSEL_BOTH, /* top and bottom field */ + +PixFormat =19;PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 22 + ;PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 23 ...etc +CompressMode =0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc + +;SrcFrameRate=-1 ;Source frame rate. -1: not controll +;FrameRate =-1 ;Target frame rate. -1: not controll + +SrcFrameRate=30 ;Source frame rate. -1: not controll +FrameRate =30 ;Target frame rate. -1: not controll +[vpss_group] +Vpss_DciEn =FALSE +Vpss_IeEn =FALSE +Vpss_NrEn =TRUE +Vpss_HistEn =FALSE +Vpss_DieMode=1 ;Define de-interlace mode + ;VPSS_DIE_MODE_AUTO = 0, + ;VPSS_DIE_MODE_NODIE = 1, + ;VPSS_DIE_MODE_DIE = 2, + +[vpss_corp] +Crop_enable =FALSE +Coordinate =1 ;VPSS_CROP_RATIO_COOR = 0, /*Ratio coordinate*/ + ;VPSS_CROP_ABS_COOR = 1 /*Absolute coordinate*/ +Crop_X =128 +Crop_Y =128 +Crop_W =1158 +Crop_H =562 + +[vpss_chn] +Vpss_W =1280 +Vpss_H =720 +CompressMode=0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc +Mirror =FALSE;Whether to mirror +Flip =FALSE;Whether to flip + +[vb_conf] +VbCnt=5 +#VbCnt=2 +vbTimes=15 + +[venc_comm] +venc_chn =1 ;create venc chn number;(0,2] +BufCnt = 1 ;network meida-trans bufcnt + +[venc_0] +PicWidth =1280 +PicHeight =720 +Profile =2 +RcMode =VENC_RC_MODE_H264CBR + +Gop =50 +StatTime =2 +ViFrmRate =30 +TargetFrmRate=30 +;----- only for VENC_RC_MODE_H264CBR ---------- +BitRate=4096 +FluctuateLevel=0 +;----- only for VENC_RC_MODE_H264VBR ---------- +MaxBitRate =10000 + +MaxQp=32 +MinQp=24 +;----- only for VENC_RC_MODE_H264FIXQP ---------- +IQp=45 + +PQp=40 + +[venc_1] +PicWidth =1280 +PicHeight =720 +Profile =2 +RcMode =VENC_RC_MODE_H264CBR + +Gop =50 +StatTime =2 +ViFrmRate =30 +TargetFrmRate=15 +;----- only for VENC_RC_MODE_H264CBR ---------- +BitRate=4096 +FluctuateLevel=0 +;----- only for VENC_RC_MODE_H264VBR ---------- +MaxBitRate =10000 + +MaxQp=32 + +MinQp=24 +;----- only for VENC_RC_MODE_H264FIXQP ---------- +IQp=40 + +PQp=45 + +[bind] +ViDev =0 +ViChn =0 +VpssGrp =0 +VpssChn = 0 +VoDev =0 +VoChn =0 +ViSnapChn =0 +VpssSnapGrp=0 +VpssSnapChn=1 +VencSnapGrp=1 +VencSnapChn=3 diff --git a/general/package/hisilicon-osdrv-hi3516cv100/files/sensor/libsns_imx225_i2c_dc_720p.so b/general/package/hisilicon-osdrv-hi3516cv100/files/sensor/libsns_imx225_i2c_dc_720p.so new file mode 100644 index 0000000000000000000000000000000000000000..d92ffb281b7bfd82b460acdaf93045d304602467 GIT binary patch literal 16536 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