日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hi3559_imx334_sensor修改配置1080P60

發(fā)布時(shí)間:2023/12/9 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hi3559_imx334_sensor修改配置1080P60 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

hi3559 imx334 sensor修改1080P60

先說一下我的需求:讓hi3559上支持驅(qū)動Mp60/4MP60 的imx334
海思把一些可能用到的驅(qū)動文件開放讓我們修改,這樣我們確實(shí)是可以做一些自己的適配,挺好的
先給指一下路,imx334路徑

obj文件是編譯之后會生成的,編譯之前沒有很正常。
主要要修改的就是imx334_cmos.c,imx334_sensor_ctl.c
然后思路就是修改底層之后在上層(sample)做適配,本文最終呈現(xiàn)基于海思官方SDK下的sample下的vio
另外,原理不清楚,但是親測ko文件是不用重新生成的。
具體的修改測試方法是:
先修改component 下的底層驅(qū)動-> make clean->make
再修改sample_comm_vi.c,sample_comm_isp.c/sample_comm_isp.h 新增對應(yīng)的驅(qū)動配置,
最后修改sample 下的Makefile.param,把SENSOR0_TYPE配成你新生成的配置(如果你回改可以配其他的)

334驅(qū)動修改

如果直接說這玩意改哪個(gè)地方的代碼就沒必要寫個(gè)東西記錄了,直接移步下載就可以了,重點(diǎn)說一下修改的思路,以防萬一之后有什么需要還得重新看,雖然也沒看全。

HIISP開發(fā)參考.pdf

下面的圖說了ISP用到的的幾個(gè)指針的功能,

這里說了這幾個(gè)函數(shù)指針的功能,所以cmos.c和ctl.c是在生成函數(shù)指針給海思內(nèi)核調(diào)用,根據(jù)個(gè)人觀察 ,他的調(diào)用方法是沒有開放的,也就是說只能通過修改他給的接口的函數(shù)指針,讓他去執(zhí)行我們寫的函數(shù),從而實(shí)現(xiàn)初始化/驅(qū)動。
個(gè)人建議是把這個(gè)手冊ISP初始化的部分跳著看一看的

這里可以看到初始化有兩個(gè)前置函數(shù) ,內(nèi)存初始化不看,看屬性配置HI_MPI_SetPubAttr
下面是SDK功能的描述

也就是說我們的一切修改都是在修改這幾個(gè)函數(shù),修改它對相機(jī)的配置

剩下的都是用得到的時(shí)候再看就來得及,這里貼上來看一眼

cmos.c

cmos_set_image_mode

根據(jù)傳進(jìn)來的image的尺寸設(shè)定初始化的模式,下面是我的部分配置

if (f32Fps <= 120) {if (pstSnsState->enWDRMode == WDR_MODE_NONE) {if (f32Fps==60 && IMX334_RES_IS_2K60_12BIT(u32W,u32H)) {u8SensorImageMode = IMX334_2M_60FPS_12BIT_LINEAR_MODE;pstSnsState->u32FLStd = IMX334_VMAX_8M_30FPS_12BIT_LINEAR;}else if(f32Fps>=60){u8SensorImageMode = IMX334_8M_60FPS_12BIT_LINEAR_MODE;pstSnsState->u32FLStd = IMX334_VMAX_8M_30FPS_12BIT_LINEAR;}else if(f32Fps>=60){u8SensorImageMode = IMX334_2M_120FPS_12BIT_LINEAR_MODE;pstSnsState->u32FLStd = IMX334_VMAX_8M_30FPS_12BIT_LINEAR;}else if(IMX334_RES_IS_4K30_12BIT(u32W, u32H)){u8SensorImageMode = IMX334_8M_30FPS_12BIT_LINEAR_MODE;pstSnsState->u32FLStd = IMX334_VMAX_8M_30FPS_12BIT_LINEAR;}

可以看到傳進(jìn)來給這個(gè)函數(shù)識別的結(jié)構(gòu)體只剩下下面的幾個(gè)屬性

typedef struct hiISP_CMOS_SENSOR_IMAGE_MODE_S {HI_U16 u16Width;HI_U16 u16Height;HI_FLOAT f32Fps;HI_U8 u8SnsMode; } ISP_CMOS_SENSOR_IMAGE_MODE_S;

也就是說最好根據(jù)幀率,尺寸來確定這個(gè)東西的初始化配置,那個(gè)額外的參數(shù)怎么傳還不大確定,也不太想去確定了,也就是說在這里根據(jù)對面ISP 接口傳進(jìn)來的屬性配置之后的初始化方案。
剩下的思路就是Ctrl+F “IMX334_8M_30FPS_12BIT_LINEAR_MODE” 這個(gè)配置的位置,配置當(dāng)為"IMX334_2M_60FPS_12BIT_LINEAR_MODE"時(shí)候應(yīng)該有的操作
比如

} else if (IMX334_8M_60FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 60) / 5;} else if (IMX334_2M_60FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 60) / 5;} else if (IMX334_2M_120FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 120) / 5;

僅供參考

cmos_init_sensor_exp_function

重點(diǎn)說一下這個(gè)函數(shù)的接口的指針函數(shù)的定義,不過一般也不用改,如果自己寫全部的話需要了解

sensor_register_callback

這個(gè)是包括ae,awb等一些額外功能在內(nèi)的函數(shù)的注冊函數(shù),大概就是讓系統(tǒng)知道這段函數(shù)代碼的指針位置,一般也不用改

cmos_set_pixel_detect

static HI_VOID cmos_set_pixel_detect(VI_PIPE ViPipe, HI_BOOL bEnable) {HI_U32 u32FullLines_5Fps;ISP_SNS_STATE_S *pstSnsState = HI_NULL;IMX334_SENSOR_GET_CTX(ViPipe, pstSnsState);CMOS_CHECK_POINTER_VOID(pstSnsState);if (pstSnsState->enWDRMode == WDR_MODE_2To1_LINE) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_2TO1_WDR * 30) / 5;} else {if (pstSnsState->u8ImgMode == IMX334_8M_30FPS_12BIT_LINEAR_MODE) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 30) / 5;} else if (IMX334_8M_60FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 60) / 5;} else if (IMX334_2M_60FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 60) / 5;} else if (IMX334_2M_120FPS_12BIT_LINEAR_MODE == pstSnsState->u8ImgMode) {u32FullLines_5Fps = (IMX334_VMAX_8M_30FPS_12BIT_LINEAR * 120) / 5;} else {return;}}if (bEnable) { /* setup for ISP pixel calibration mode *//* Sensor must be programmed for slow frame rate (5 fps and below) *//* change frame rate to 5 fps by setting 1 frame length *//* Analog and Digital gains both must be programmed for their minimum values */imx334_write_register(ViPipe, IMX334_PGC_L, 0x00);imx334_write_register(ViPipe, IMX334_PGC_H, 0x00);imx334_write_register(ViPipe, IMX334_VMAX_L, u32FullLines_5Fps & 0xFF);imx334_write_register(ViPipe, IMX334_VMAX_M, (u32FullLines_5Fps & 0xFF00) >> 8);imx334_write_register(ViPipe, IMX334_VMAX_H, (u32FullLines_5Fps & 0xF0000) >> 16);} else { /* setup for ISP 'normal mode' */pstSnsState->u32FLStd = (pstSnsState->u32FLStd > IMX334_FULL_LINES_MAX) ? IMX334_FULL_LINES_MAX : pstSnsState->u32FLStd;imx334_write_register(ViPipe, IMX334_VMAX_L, (pstSnsState->u32FLStd & 0xff));imx334_write_register(ViPipe, IMX334_VMAX_M, (pstSnsState->u32FLStd & 0xff00) >> 8);imx334_write_register(ViPipe, IMX334_VMAX_H, (pstSnsState->u32FLStd & 0xf0000) >> 16);pstSnsState->bSyncInit = HI_FALSE;}return; }

ctl.c

imx334_init

這個(gè)函數(shù)主要實(shí)現(xiàn)init 一些寄存器的配置
下面是在網(wǎng)上抄的reg配置 334 1080P60,親測配置可用

void imx334_linear_2M60_12bit_init(VI_PIPE ViPipe) //4 lane { #if 1//refer to datasheet page.45 & 53 & 75imx334_write_register(ViPipe, 0x3000, 0x01); //standbyimx334_write_register(ViPipe, 0x3001, 0x00);imx334_write_register(ViPipe, 0x3002, 0x01);imx334_write_register(ViPipe, 0x3003, 0x00);imx334_write_register(ViPipe, 0x300C, 0x3B); //74.25M:0xB6 37.125M:0x5B 24M:0x3B 18M:0x2D 12M:0x1E 6M:0x0Fimx334_write_register(ViPipe, 0x300D, 0x2A); //74.25M:0x7F 37.125M:0x40 24M:0x2A 18M:0x1F 12M:0x15 6M:0x0Bimx334_write_register(ViPipe, 0x3018, 0x01); //window mode: 0:all pixel scan 1:h/v 2-2-line binning 4:win croppingimx334_write_register(ViPipe, 0x302C, 0x30); //win cropping mode start positionimx334_write_register(ViPipe, 0x302D, 0x00);imx334_write_register(ViPipe, 0x302E, 0x18); //cropping horizontal 0xF18:3864imx334_write_register(ViPipe, 0x302F, 0x0F);imx334_write_register(ViPipe, 0x3030, 0xCA); //VMAX 0x8CA:2250imx334_write_register(ViPipe, 0x3031, 0x08);imx334_write_register(ViPipe, 0x3032, 0x00);imx334_write_register(ViPipe, 0x3033, 0x00);imx334_write_register(ViPipe, 0x3034, 0x26); //HMAX 0x226: 0x294: 0x44C: 0x528:refer to datasheetimx334_write_register(ViPipe, 0x3035, 0x02);imx334_write_register(ViPipe, 0x304C, 0x14);imx334_write_register(ViPipe, 0x3050, 0x00); //10bit:0x00 12bit:0x01imx334_write_register(ViPipe, 0x3076, 0x84); //width 0x884:2180imx334_write_register(ViPipe, 0x3077, 0x08);imx334_write_register(ViPipe, 0x3090, 0x84); //width 0x884:2180imx334_write_register(ViPipe, 0x3091, 0x08);imx334_write_register(ViPipe, 0x30C6, 0x00);imx334_write_register(ViPipe, 0x30C7, 0x00);imx334_write_register(ViPipe, 0x30CE, 0x00);imx334_write_register(ViPipe, 0x30CF, 0x00);imx334_write_register(ViPipe, 0x30D8, 0xF8);imx334_write_register(ViPipe, 0x30D9, 0x11);imx334_write_register(ViPipe, 0x3117, 0x00);imx334_write_register(ViPipe, 0x314C, 0xC6);imx334_write_register(ViPipe, 0x314D, 0x00);imx334_write_register(ViPipe, 0x315A, 0x02); //6M:0x0 12M/18M:0x1 24M/37.125M:0x2 74.25M:0x3imx334_write_register(ViPipe, 0x3168, 0xA0); //6M/12M:0xA0 18M:0x6B 24M:0xA0 37.125M/74.25M:0x68imx334_write_register(ViPipe, 0x316A, 0x7E);imx334_write_register(ViPipe, 0x3199, 0x10);imx334_write_register(ViPipe, 0x319D, 0x01); //10bit:0x00 12bit:0x01imx334_write_register(ViPipe, 0x319E, 0x01); //1728M:0x0 1188M:0x1 891M:0x2imx334_write_register(ViPipe, 0x31A0, 0x2A);imx334_write_register(ViPipe, 0x31D4, 0x00);imx334_write_register(ViPipe, 0x31D5, 0x00);//imx334_write_register(ViPipe, 0x31DC, 0x04);imx334_write_register(ViPipe, 0x31DD, 0x04);imx334_write_register(ViPipe, 0x3288, 0x21);imx334_write_register(ViPipe, 0x328A, 0x02);imx334_write_register(ViPipe, 0x3300, 0x01);imx334_write_register(ViPipe, 0x3302, 0x32);imx334_write_register(ViPipe, 0x3303, 0x00);imx334_write_register(ViPipe, 0x3308, 0x42);imx334_write_register(ViPipe, 0x3309, 0x04);imx334_write_register(ViPipe, 0x3414, 0x05);imx334_write_register(ViPipe, 0x3416, 0x18);imx334_write_register(ViPipe, 0x341C, 0xFF); //12bit:0x47 10bit:0x1FFimx334_write_register(ViPipe, 0x341D, 0x01);imx334_write_register(ViPipe, 0x35AC, 0x0E);imx334_write_register(ViPipe, 0x3648, 0x01);imx334_write_register(ViPipe, 0x364A, 0x04);imx334_write_register(ViPipe, 0x364C, 0x04);imx334_write_register(ViPipe, 0x3678, 0x01);imx334_write_register(ViPipe, 0x367C, 0x31);imx334_write_register(ViPipe, 0x367E, 0x31);imx334_write_register(ViPipe, 0x3708, 0x02);imx334_write_register(ViPipe, 0x3714, 0x01);imx334_write_register(ViPipe, 0x3715, 0x02);imx334_write_register(ViPipe, 0x3716, 0x02);imx334_write_register(ViPipe, 0x3717, 0x02);imx334_write_register(ViPipe, 0x371C, 0x3D);imx334_write_register(ViPipe, 0x371D, 0x3F);imx334_write_register(ViPipe, 0x372C, 0x00);imx334_write_register(ViPipe, 0x372D, 0x00);imx334_write_register(ViPipe, 0x372E, 0x46);imx334_write_register(ViPipe, 0x372F, 0x00);imx334_write_register(ViPipe, 0x3730, 0x89);imx334_write_register(ViPipe, 0x3731, 0x00);imx334_write_register(ViPipe, 0x3732, 0x08);imx334_write_register(ViPipe, 0x3733, 0x01);imx334_write_register(ViPipe, 0x3734, 0xFE);imx334_write_register(ViPipe, 0x3735, 0x05);imx334_write_register(ViPipe, 0x375D, 0x00);imx334_write_register(ViPipe, 0x375E, 0x00);imx334_write_register(ViPipe, 0x375F, 0x61);imx334_write_register(ViPipe, 0x3760, 0x06);imx334_write_register(ViPipe, 0x3768, 0x1B);imx334_write_register(ViPipe, 0x3769, 0x1B);imx334_write_register(ViPipe, 0x376A, 0x1A);imx334_write_register(ViPipe, 0x376B, 0x19);imx334_write_register(ViPipe, 0x376C, 0x18);imx334_write_register(ViPipe, 0x376D, 0x14);imx334_write_register(ViPipe, 0x376E, 0x0F);imx334_write_register(ViPipe, 0x3776, 0x00);imx334_write_register(ViPipe, 0x3777, 0x00);imx334_write_register(ViPipe, 0x3778, 0x46);imx334_write_register(ViPipe, 0x3779, 0x00);imx334_write_register(ViPipe, 0x377A, 0x08);imx334_write_register(ViPipe, 0x377B, 0x01);imx334_write_register(ViPipe, 0x377C, 0x45);imx334_write_register(ViPipe, 0x377D, 0x01);imx334_write_register(ViPipe, 0x377E, 0x23);imx334_write_register(ViPipe, 0x377F, 0x02);imx334_write_register(ViPipe, 0x3780, 0xD9);imx334_write_register(ViPipe, 0x3781, 0x03);imx334_write_register(ViPipe, 0x3782, 0xF5);imx334_write_register(ViPipe, 0x3783, 0x06);imx334_write_register(ViPipe, 0x3784, 0xA5);imx334_write_register(ViPipe, 0x3788, 0x0F);imx334_write_register(ViPipe, 0x378A, 0xD9);imx334_write_register(ViPipe, 0x378B, 0x03);imx334_write_register(ViPipe, 0x378C, 0xEB);imx334_write_register(ViPipe, 0x378D, 0x05);imx334_write_register(ViPipe, 0x378E, 0x87);imx334_write_register(ViPipe, 0x378F, 0x06);imx334_write_register(ViPipe, 0x3790, 0xF5);imx334_write_register(ViPipe, 0x3792, 0x43);imx334_write_register(ViPipe, 0x3794, 0x7A);imx334_write_register(ViPipe, 0x3796, 0xA1);imx334_write_register(ViPipe, 0x3A01, 0x03);imx334_write_register(ViPipe, 0x3A18, 0x8F); //4/8-lane 30fps: 0x7F 4-lane 60fps:0xB7imx334_write_register(ViPipe, 0x3A19, 0x00);imx334_write_register(ViPipe, 0x3A1A, 0x4F); //4/8-lane 30fps: 0x37 4-lane 60fps:0x67imx334_write_register(ViPipe, 0x3A1B, 0x00);imx334_write_register(ViPipe, 0x3A1C, 0x47); //4/8-lane 30fps: 0x37 4-lane 60fps:0x6Fimx334_write_register(ViPipe, 0x3A1D, 0x00);imx334_write_register(ViPipe, 0x3A1E, 0x37); //4/8-lane 30fps: 0xF7 4-lane 60fps:0x1DFimx334_write_register(ViPipe, 0x3A1F, 0x01);imx334_write_register(ViPipe, 0x3A20, 0x4F); //4/8-lane 30fps: 0x3F 4-lane 60fps:0x6Fimx334_write_register(ViPipe, 0x3A21, 0x00);imx334_write_register(ViPipe, 0x3A22, 0x87); //4/8-lane 30fps: 0x6F 4-lane 60fps:0xCFimx334_write_register(ViPipe, 0x3A23, 0x00);imx334_write_register(ViPipe, 0x3A24, 0x4F); //4/8-lane 30fps: 0x3F 4-lane 60fps:0x6Fimx334_write_register(ViPipe, 0x3A25, 0x00);imx334_write_register(ViPipe, 0x3A26, 0x7F); //4/8-lane 30fps: 0x5F 4-lane 60fps:0xB7imx334_write_register(ViPipe, 0x3A27, 0x00);imx334_write_register(ViPipe, 0x3A28, 0x3F); //4/8-lane 30fps: 0x2F 4-lane 60fps:0x5Fimx334_write_register(ViPipe, 0x3A29, 0x00);imx334_write_register(ViPipe, 0x3E04, 0x0E);imx334_write_register(ViPipe, 0x3078, 0x04);imx334_write_register(ViPipe, 0x3079, 0xFE);imx334_write_register(ViPipe, 0x307A, 0x04);imx334_write_register(ViPipe, 0x307B, 0x02);imx334_write_register(ViPipe, 0x3081, 0xFE);imx334_write_register(ViPipe, 0x3082, 0x04);imx334_write_register(ViPipe, 0x3083, 0x02);imx334_write_register(ViPipe, 0x3088, 0x04);imx334_write_register(ViPipe, 0x3094, 0xFE);imx334_write_register(ViPipe, 0x3095, 0x04);imx334_write_register(ViPipe, 0x3096, 0x02);imx334_write_register(ViPipe, 0x309C, 0xFE);imx334_write_register(ViPipe, 0x309D, 0x04);imx334_write_register(ViPipe, 0x309E, 0x02);imx334_write_register(ViPipe, 0x30A4, 0x33);imx334_write_register(ViPipe, 0x30A5, 0x33);//Sensor registers used for normal image #if 1imx334_write_register(ViPipe, 0x304E, 0x00);imx334_write_register(ViPipe, 0x304F, 0x00);imx334_write_register(ViPipe, 0x3074, 0xB0);imx334_write_register(ViPipe, 0x3075, 0x00);imx334_write_register(ViPipe, 0x308E, 0xB1);imx334_write_register(ViPipe, 0x308F, 0x00);imx334_write_register(ViPipe, 0x30B6, 0x00);imx334_write_register(ViPipe, 0x30B7, 0x00);imx334_write_register(ViPipe, 0x3116, 0x08);imx334_write_register(ViPipe, 0x3080, 0x04);imx334_write_register(ViPipe, 0x309B, 0x04); #endifimx334_write_register(ViPipe, 0x3000, 0x00); //Standby Canceldelay_ms(18);imx334_write_register(ViPipe, 0x3002, 0x00);delay_ms(320); //wait for image stablizationprintf("===Imx334 2M60fps 12bit LINE binning 4lane Init OK!===\n");return; }

另外init函數(shù),不存在的標(biāo)簽自己定義一下宏

void imx334_init(VI_PIPE ViPipe) {HI_U8 u8ImgMode;HI_BOOL bInit;bInit = g_pastImx334[ViPipe]->bInit;u8ImgMode = g_pastImx334[ViPipe]->u8ImgMode;/* 1. sensor i2c init */imx334_i2c_init(ViPipe);if (bInit == HI_FALSE) {/* 2. sensor registers init */if (u8ImgMode == IMX334_8M_30FPS_12BIT_LINEAR_MODE) { /* 4K@30fps Linear */imx334_linear_8M30_12bit_init(ViPipe);} else if (IMX334_8M_30FPS_12BIT_2t1_DOL_MODE == u8ImgMode) { /* 4K@30fps DOL2 */imx334_DOL_2t1_8M30_12bit_init(ViPipe);} else if (IMX334_8M_60FPS_12BIT_LINEAR_MODE == u8ImgMode) { /* 4K@60fps Linear */imx334_linear_8M60_12bit_init(ViPipe);} else if (IMX334_2M_120FPS_12BIT_LINEAR_MODE == u8ImgMode) { /* 1K@120fps Linear */imx334_linear_2M120_12bit_init(ViPipe);} else if (IMX334_2M_60FPS_12BIT_LINEAR_MODE == u8ImgMode) { /*2K@60fps Linear */imx334_linear_2M60_12bit_init(ViPipe);}} else {/* When sensor switch mode(linear<->WDR or resolution), config different registers(if possible) *//* 2. sensor registers init */if (u8ImgMode == IMX334_8M_30FPS_12BIT_LINEAR_MODE) { /* 4K@30fps Linear */imx334_linear_8M30_12bit_init(ViPipe);} else if (IMX334_8M_30FPS_12BIT_2t1_DOL_MODE == u8ImgMode) { /* 4K@30fps DOL2 */imx334_DOL_2t1_8M30_12bit_init(ViPipe);} else if (IMX334_8M_60FPS_12BIT_LINEAR_MODE == u8ImgMode) { /* 4K@60fps Linear */imx334_linear_8M60_12bit_init(ViPipe);} else if (IMX334_2M_120FPS_12BIT_LINEAR_MODE == u8ImgMode) { /* 2K@120fps Linear */imx334_linear_2M120_12bit_init(ViPipe);}else if (IMX334_2M_60FPS_12BIT_LINEAR_MODE == u8ImgMode) { /*2K@60fps Linear */imx334_linear_2M60_12bit_init(ViPipe); }}g_pastImx334[ViPipe]->bInit = HI_TRUE;return;}

至此,底層修改就說道這,深的也還沒看

isp接口修改

Makefile.param

新寫一個(gè)宏 這個(gè)宏定義的位置在sample_common.h

typedef enum hiSAMPLE_SNS_TYPE_E {SONY_IMX477_MIPI_12M_30FPS_12BIT,SONY_IMX477_MIPI_9M_50FPS_10BIT,SONY_IMX477_MIPI_9M_60FPS_10BIT,SONY_IMX477_MIPI_8M_60FPS_12BIT,SONY_IMX477_MIPI_8M_30FPS_12BIT,SONY_IMX290_MIPI_2M_30FPS_12BIT,SONY_IMX290_MIPI_2M_30FPS_12BIT_WDR3TO1,SONY_IMX334_SLAVE_MIPI_8M_30FPS_12BIT,SONY_IMX334_MIPI_8M_30FPS_12BIT,SONY_IMX334_MIPI_8M_30FPS_12BIT_WDR2TO1,SONY_IMX334_MIPI_8M_60FPS_12BIT,SONY_IMX334_MIPI_2M_60FPS_12BIT,SONY_IMX334_MIPI_2M_120FPS_12BIT,SONY_IMX277_SLVS_8M_120FPS_10BIT,SONY_IMX277_SLVS_8M_30FPS_12BIT,SONY_IMX277_SLVS_8M_60FPS_12BIT,SONY_IMX277_SLVS_12M_30FPS_12BIT,SONY_IMX277_SLVS_2M_240FPS_12BIT,COMSIS_SHARP8K_SLVDS_8K_30FPS_12BIT,SAMPLE_SNS_TYPE_BUTT, } SAMPLE_SNS_TYPE_E;

下面的是param里面的配置

## SENSOR0_TYPE ?= SONY_IMX334_MIPI_8M_30FPS_12BIT SENSOR0_TYPE ?= SONY_IMX334_MIPI_2M_60FPS_12BIT

sample_comm_vi.c

SAMPLE_COMM_VI_GetSizeBySensor

里面新加一個(gè)case

case SONY_IMX334_MIPI_2M_60FPS_12BIT:*penSize = PIC_1080P;break;

SAMPLE_COMM_VI_GetFrameRateBySensor

switch (enMode)里面新加一個(gè)case

case SONY_IMX334_MIPI_2M_60FPS_12BIT:*pu32FrameRate = 60;break;

SAMPLE_COMM_VI_GetChnAttrBySns

case SONY_IMX334_MIPI_2M_60FPS_12BIT:memcpy_s(pstChnAttr, sizeof(VI_CHN_ATTR_S), &CHN_ATTR_1920x1080_420_SDR8_LINEAR, sizeof(VI_CHN_ATTR_S));break;

其中配置結(jié)構(gòu)體的定義

VI_CHN_ATTR_S CHN_ATTR_1920x1080_420_SDR8_LINEAR = {{1920, 1080},PIXEL_FORMAT_YVU_SEMIPLANAR_420,DYNAMIC_RANGE_SDR8,VIDEO_FORMAT_LINEAR,COMPRESS_MODE_NONE,0, 0,0,{ -1, -1} };

SAMPLE_COMM_VI_GetPipeAttrBySns

加一個(gè)case

case SONY_IMX334_MIPI_2M_60FPS_12BIT:memcpy_s(pstPipeAttr, sizeof(VI_PIPE_ATTR_S), &PIPE_ATTR_1920x1080_RAW12_420_3DNR_RFR, sizeof(VI_PIPE_ATTR_S));break;

結(jié)構(gòu)體定義

VI_PIPE_ATTR_S PIPE_ATTR_1920x1080_RAW12_420_3DNR_RFR = {VI_PIPE_BYPASS_NONE, HI_FALSE,HI_FALSE,1920, 1080,PIXEL_FORMAT_RGB_BAYER_12BPP,COMPRESS_MODE_LINE,DATA_BITWIDTH_12,HI_TRUE,{PIXEL_FORMAT_YVU_SEMIPLANAR_420,DATA_BITWIDTH_10,VI_NR_REF_FROM_RFR,COMPRESS_MODE_NONE},HI_FALSE,{ -1, -1} };

SAMPLE_COMM_VI_GetDevAttrBySns

case SONY_IMX334_MIPI_2M_60FPS_12BIT:memcpy_s(pstViDevAttr, sizeof(VI_DEV_ATTR_S), &DEV_ATTR_IMX334_2M_BASE, sizeof(VI_DEV_ATTR_S));break;

結(jié)構(gòu)體

VI_DEV_ATTR_S DEV_ATTR_IMX334_2M_BASE = {VI_MODE_MIPI,VI_WORK_MODE_1Multiplex,{0xFFF00000, 0x0},VI_SCAN_PROGRESSIVE,{-1, -1, -1, -1},VI_DATA_SEQ_YUYV,{/*port_vsync port_vsync_neg port_hsync port_hsync_neg */VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,/*hsync_hfb hsync_act hsync_hhb*/{0, 1280, 0,/*vsync0_vhb vsync0_act vsync0_hhb*/0, 720, 0,/*vsync1_vhb vsync1_act vsync1_hhb*/0, 0, 0}},VI_DATA_TYPE_RGB,HI_FALSE,{1920, 1080},{{{1920 , 1080},},{VI_REPHASE_MODE_NONE,VI_REPHASE_MODE_NONE}},{WDR_MODE_NONE,1080},DATA_RATE_X1 };

SAMPLE_COMM_VI_GetComboAttrBySns

case SONY_IMX334_MIPI_2M_60FPS_12BIT:if (0 == MipiDev){memcpy_s(pstComboAttr, sizeof(combo_dev_attr_t), &MIPI_4lane_CHN0_SENSOR_IMX334_12BIT_2M_NOWDR_ATTR, sizeof(combo_dev_attr_t));}

結(jié)構(gòu)體

combo_dev_attr_t MIPI_4lane_CHN4_SENSOR_IMX477_12BIT_12M_NOWDR_ATTR = {.devno = 4,.input_mode = INPUT_MODE_MIPI,.data_rate = MIPI_DATA_RATE_X1,.img_rect = {0, 0, 4000, 3000},{.mipi_attr ={DATA_TYPE_RAW_12BIT,HI_MIPI_WDR_MODE_NONE,{8, 9, 10, 11, -1, -1, -1, -1}}} };

vi要改的基本就是這樣 下面改isp.c

sample_comm_isp.c

SAMPLE_COMM_ISP_GetSnsObj

case SONY_IMX334_MIPI_2M_60FPS_12BIT:case SONY_IMX334_MIPI_2M_120FPS_12BIT:return &stSnsImx334Obj;

SAMPLE_COMM_ISP_GetIspAttrBySns

case SONY_IMX334_MIPI_2M_60FPS_12BIT:memcpy(pstPubAttr, &ISP_PUB_ATTR_IMX334_2K_60FPS, sizeof(ISP_PUB_ATTR_S));break;

其中結(jié)構(gòu)體:

ISP_PUB_ATTR_S ISP_PUB_ATTR_IMX334_2K_60FPS = {{0, 0, 1920, 1080},{1920, 1080},60,BAYER_RGGB,WDR_MODE_NONE,0, };

至此,操作完畢,基本上,就ok了

編譯測試

在編譯完imx334這邊再重新編譯sample_vio ,然后調(diào)用SAMPLE_VIO_8K30_PARALLEL()之后就可以在電腦上得到圖像,沒有操作其他的也能得到圖像,具體原因懶得看了,因?yàn)橛邢旅孢@句話,
printf(“=Imx334 2M60fps 12bit LINE binning 4lane Init OK!=\n”);
所以在執(zhí)行程序后看見下圖就認(rèn)調(diào)成了

總結(jié)

以上是生活随笔為你收集整理的hi3559_imx334_sensor修改配置1080P60的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。