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