深圳市創(chuàng)研數(shù)字通訊有限公司
聯(lián)系人:羅先生
手機(jī):13692246378
電話:0755-85299996
郵箱:lokiqi@qq.com
網(wǎng)址:http://fm1062.cn
地址:深圳寶安35區(qū)東方鼎泰文創(chuàng)科技園212
深圳市創(chuàng)研數(shù)字通訊有限公司
聯(lián)系人:羅先生
手機(jī):13692246378
電話:0755-85299996
郵箱:lokiqi@qq.com
網(wǎng)址:http://fm1062.cn
地址:深圳寶安35區(qū)東方鼎泰文創(chuàng)科技園212
基于NVP6124的AHD 1080P高清FPV圖傳和車(chē)載及內(nèi)窺鏡方案
項(xiàng)目要求:
2路AHD 1080P/720P模擬視頻輸入,還有兩路AV in輸入,一共四個(gè)畫(huà)面。
用nvp6124b來(lái)轉(zhuǎn)換后AV輸出或顯示屏輸出或HDMI輸出。應(yīng)用于:
u遙控玩具、航模
u視頻監(jiān)控
u可視化門(mén)鈴
u FPV航拍
u智能家居
u魔術(shù)博弈
u醫(yī)用顯微鏡
u情具用品
u耳、鼻、口、皮膚內(nèi)窺鏡
u電子眉毛筆。
u工業(yè)管道內(nèi)窺鏡
軟件初始化:
一、單分辨率視頻采集
在sample程序中,需要采集那種分辨率的攝像頭,只要對(duì)下面兩個(gè)寄存器的值進(jìn)行配置;
typedef struct _nvp6124_chn_mode
{
unsigned char ch;
unsigned char vformat;
unsigned char chmode;
}nvp6124_chn_mode;
typedef struct _nvp6124_opt_mode
{unsigned char chipsel;
unsigned char portsel;
unsigned char portmode;
unsigned char chid;
}nvp6124_opt_mode;
其中兩個(gè)主要的參數(shù);vformat,portsel 確定采集的分辨率,
960H: vformat = NVP6124_VI_SD;
portsel = NVP6124_OUTMODE_4MUX_SD;
720P: vformat = NVP6124_VI_720P_2530; portsel = NVP6124_OUTMODE_2MUX_HD;
1080P:vformat = NVP6124_VI_720P_2530; portsel = NVP6124_OUTMODE_2MUX_FHD;
當(dāng)你需要不同通道接不一樣的攝像頭的時(shí)候,就可以通過(guò)ch、vformat和portsel來(lái)確定接入攝像頭的分辨率;
二、自適應(yīng)視頻采集1、攝像頭分辨率檢測(cè)
通過(guò)nvp6124對(duì)攝像頭分辨率進(jìn)行檢測(cè),這里獲取IOC_VDEC_GET_INPUT_VIDEO_FMT的值得到接入攝像頭的分辨率;
nvp6124_input_videofmt vfmt;
ioctl(fd, IOC_VDEC_GET_INPUT_VIDEO_FMT, &vi_fmt);
res = vi_fmt.getvideofmt[ch];
(1)res = 2 , 960H 分辨率攝像頭
(2)res = 128 , 1080P 分辨率攝像頭
2、自適應(yīng)參數(shù)配置
NVP sample程序,是不支持自適應(yīng)采集的,需要對(duì)vformat,portsel的枚舉進(jìn)行添加,nvp6124驅(qū)動(dòng)中是有支持的, 只需要sample程序更新下面兩個(gè)枚舉就行;
enum
{
NVP6124_VI_SD = 0, //960x576i(480)
NVP6124_VI_720P_2530, //1280x720@25p(30)
NVP6124_VI_720P_5060, //1280x720@50p(60)
NVP6124_VI_1080P_2530, //1920x1080@25p(30)
NVP6124_VI_1920H, //1920x576i(480)
NVP6124_VI_720H, //720x576i(480)
NVP6124_VI_1280H, //1280x576i(480)
NVP6124_VI_1440H, //1440x576i(480)
NVP6124_VI_960H2EX, //3840x576i(480)
NVP6124_VI_HDEX, //2560x720@25p(30)
NVP6124_VI_BUTT
};
typedef enum sample_vi_6124_mux_e
{
NVP6124_OUTMODE_1MUX_SD = 0,
NVP6124_OUTMODE_1MUX_FHD,
NVP6124_OUTMODE_2MUX_SD,
NVP6124_OUTMODE_2MUX_FHD_X,
NVP6124_OUTMODE_4MUX_SD,
NVP6124_OUTMODE_4MUX_HD_X,
NVP6124_OUTMODE_4MUX_HD,
NVP6124_OUTMODE_2MUX_FHD,
NVP6124_OUTMODE_1MUX_HD_X,
NVP6124_OUTMODE_1MUX_FHD_X,
NVP6124_OUTMODE_4MUX_FHD_X,
NVP6124_OUTMODE_4MUX_MIX,
NVP6124_OUTMODE_2MUX_MIX,
NVP6124_OUTMODE_BUTT
}SAMPLE_VI_6124_MUX_E;
如果需要自適應(yīng),需要設(shè)置 vformat = NVP6124_OUTMODE_4MUX_MIX;
960H: portsel = NVP6124_VI_960H2EX;
720P: portsel = NVP6124_VI_HDEX;
1080P:portsel = NVP6124_VI_1080P_2530;
通過(guò)不同分辨率,設(shè)置對(duì)應(yīng)portsel的值,這里是SAMPLE_VI_MODE_8_1080P模式下portsel的值,但是HIS3520Dv300有個(gè)比較惡心的點(diǎn),一個(gè)AD只支持2路1080P,所以如果需要使用2個(gè)AD接8路720P,在SAMPLE_VI_MODE_8_720P模式下,portsel的值應(yīng)該按照下面的值設(shè)置:
960H: portsel = NVP6124_VI_1920H;
720P:portsel = NVP6124_VI_720P_2530;
1080P:portsel = NVP6124_VI_1080P_2530;
3、實(shí)時(shí)檢測(cè)
上面兩步可以實(shí)現(xiàn)對(duì)接入攝像頭的檢測(cè)和采集,但是如果所有參數(shù)都設(shè)置完成,中間需要插拔攝像頭換成不同分辨率的攝像頭時(shí),攝像頭數(shù)據(jù)就不能采集了,這時(shí)需要實(shí)時(shí)檢測(cè)攝像頭分辨率,如果分辨率改變了,需要重新初始化和配置參數(shù);這里vformat,portsel的值需要重新配置,還有需要重新設(shè)置VI通道屬性HI_MPI_VI_SetChnAttr,啟用VI通道HI_MPI_VI_EnableChn,當(dāng)然,由于之前已經(jīng)啟用過(guò)VI通道,需要先禁用HI_MPI_VI_DisableChn,再啟用。
4、內(nèi)存VB配置
當(dāng)設(shè)置MPP視頻緩存池屬性HI_MPI_VB_SetConf時(shí),需要通過(guò)分辨率配置MPP視頻緩存池的大小,一般的做法按照最大分辨率分配就行,如果在自適應(yīng)情況下,需要接1080P攝像頭,那么按照1920x1080去分配VB緩存大小就行,因?yàn)榻悠渌直媛史峙銿B緩存大小肯定小于1920x1080,所以按照最大分配肯定是可以的,但是如果你的內(nèi)存比較小,直接使用1920x1080會(huì)浪費(fèi)內(nèi)存,那么可以給不同分辨率分配不同的VB塊,VB緩沖池在使用過(guò)程中,是從小往大使用的;這里特別注意的一點(diǎn),自適應(yīng)1080P模式下960H的采集分辨率NVP6124_VI_960H2EX(3840*576)大于1080P采集的分辨率NVP6124_VI_1080P_2530(1920 * 1080),所以分配VB最大的緩沖塊應(yīng)該是3840*576;這里多測(cè)試,查看cat /proc/umap/vb 值,就可以找到VB塊分配的規(guī)律。
5.總結(jié):
nvp6124b的驅(qū)動(dòng)在原廠給的sdk包里已經(jīng)有了,直接復(fù)制過(guò)來(lái)即可。
兩路視頻的話是要對(duì)應(yīng)兩個(gè)驅(qū)動(dòng)的,才能注冊(cè)出兩個(gè)/dev/video節(jié)點(diǎn)出來(lái),所以復(fù)制一份同樣的驅(qū)動(dòng)代碼重新命名為nvp6124bnew.c即可,把里面的名字改一下。sys_config.fex中的攝像頭配置,第二路的i2c地址不要寫(xiě)0x060了,隨便寫(xiě)一個(gè)其他的,否則注冊(cè)失敗,y因?yàn)閕2c驅(qū)動(dòng)不允一個(gè)adapter上兩個(gè)同地址設(shè)備,然后在nvp6124bnew.c的讀寫(xiě)中再把client->addr賦值為0x60>>1即可,這樣就可以繞開(kāi)該問(wèn)題了。
注冊(cè)成功的話會(huì)出現(xiàn)/dev/video2, /dev/video3連個(gè)節(jié)點(diǎn)
兩份驅(qū)動(dòng)中都是cfg->flags = CLK_POL | CSI_CH_0; 沒(méi)有用到CSI_CH_1
可以在vfe.c中打印isr_irq,首先要有中斷過(guò)來(lái)
測(cè)量6124b的 vclk1和vclk2應(yīng)該為74M的波形
測(cè)量8根數(shù)據(jù)腳,正確的波形如下:
代碼中寄存器0xb8可以查看4路視頻是否有信號(hào)輸入, 0表示有信號(hào),1表示無(wú)信號(hào),如如果兩路視頻都插入那么應(yīng)該打印的時(shí)0x0c
有幾塊板子一個(gè)視頻預(yù)覽黑屏,另一個(gè)沒(méi)有中斷過(guò)來(lái),預(yù)覽時(shí)藍(lán)色,用示波器測(cè)量視頻輸入都有信號(hào),死活找不到原因,0xb8寄存器打印的值時(shí)0x0d,后來(lái)發(fā)現(xiàn)時(shí)視頻輸入短有個(gè)電容出問(wèn)題了,更換即可
上述都沒(méi)問(wèn)題的話,在app中即可出現(xiàn)4畫(huà)面預(yù)覽
電話:0755-85299996
手機(jī):13692246378 羅先生
郵 箱:lokiqi@qq.com
地 址:深圳寶安35區(qū)塘坊花園一巷19號(hào)東方鼎泰文創(chuàng)科技園212
Copyright ? http://fm1062.cn/ 深圳市創(chuàng)研數(shù)字通訊有限公司 專(zhuān)業(yè)從事于FPV圖傳,電子內(nèi)窺鏡,無(wú)線車(chē)載方案, 歡迎來(lái)電咨詢(xún)!粵ICP備16059882號(hào) Powered by 祥云平臺(tái) 技術(shù)支持:華企立方
熱推產(chǎn)品 | 主營(yíng)區(qū)域: 深圳 上海 珠海 佛山 北京 廣州 山東 圖傳方案定制 無(wú)人機(jī)FPV圖傳 無(wú)線安防發(fā)射接收