<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 基于Video4Linux的攝像頭驅動(dòng)設計

基于Video4Linux的攝像頭驅動(dòng)設計

作者: 時(shí)間:2018-09-12 來(lái)源:網(wǎng)絡(luò ) 收藏

0 引言
隨著(zhù)多媒體技術(shù)、網(wǎng)絡(luò )技術(shù)的迅猛發(fā)展和后PC機時(shí)代的到來(lái),利用嵌人式系統實(shí)現遠程視頻監控、可視電話(huà)和視頻會(huì )議等應用已成為可能。為了實(shí)現這些應用,實(shí)時(shí)獲得視頻數據是一個(gè)重要環(huán)節。針對這一點(diǎn)本文在嵌入式系統平臺上,基于(簡(jiǎn)稱(chēng)V4L)技術(shù),實(shí)現了驅動(dòng)開(kāi)發(fā),詳細敘述了V4L技術(shù)和在Blackfin536 DSP平臺上的Linux驅動(dòng)程序設計。

本文引用地址:http://dyxdggzs.com/article/201809/388986.htm


1
V4L是Linux的影像串流系統與嵌入式影像系統的基礎。Linux在TV、多媒體上的應用是目前相當熱門(mén)的研究領(lǐng)域,而其中最關(guān)鍵的技術(shù)則是Linux的V4L。V4L是Linux kernel里支持影像設備的一組APIs,配合適當的與攝像頭驅動(dòng)程序,可以讓我們實(shí)現影像采集、AM/FM無(wú)線(xiàn)廣播、影像CODEC、頻道切換等功能;而目前最主要的則是應用在影像串流系統與嵌入式影像系統里,其應用范圍相當廣泛,例如:遠距離教學(xué)系統、遠距離診斷系統、視頻會(huì )議等。
目前,V4L這套接口已發(fā)展為V4L 2,前者比后者簡(jiǎn)單,但存在兩個(gè)不足之處:驅動(dòng)程序設計時(shí)不能同時(shí)打開(kāi)多個(gè)設備;現存的V4L API不能很好地支持帶編碼能力的設備。本文為便于研究攝像頭驅動(dòng)開(kāi)發(fā),還是使用V4L。
V4L主要結構體如下:

camera_open,camera_close是打開(kāi)和關(guān)閉視頻采集設備;camera_read,是讀取視頻圖像;視頻驅動(dòng)主要的控制接口都是通過(guò) ioctl來(lái)實(shí)現的,如圖像的格式、亮度、色度等信息都是通過(guò)ioctl函數獲取和設置的。ioctl命令部分如下:


V4L支持兩種方式捕獲圖像:mmap(卻嬗成浞絞?和read(直接讀取方式),本系統采用mmap。需預先設置好圖像的大小和深度,接著(zhù)使用 VIDIOCGMBUF命令,它會(huì )返回用于mmap的緩存(buffer)的大小以及每幀緩存的偏移地址(offset)。驅動(dòng)程序里的映射函數為 static intbf536_v411_mmap(Struct file*filp,structvm_area_struct*vma);抓幀完成后,在應用程序里通過(guò)內存映射,讀取圖像數據。

2 硬件平臺
本系統采用CMOS模擬傳感器,經(jīng)TI公司的TVP5150A視頻解碼芯片把模擬信號轉成 ITU-R BT.656視頻信號,再送給ADI公司的Blackfin536 DSP處理器進(jìn)行圖像處理,如圖1所示。TVP5150向DSP提供采樣時(shí)鐘信號CLK(27MHz),8根數據線(xiàn)傳輸內嵌同步控制碼流的ITU-R BT.656格式的數據,DSP通過(guò)I2C接口對視頻解碼器進(jìn)行配置。視頻數據由DMA搬運到SDRAM。

3 驅動(dòng)程序設計
3.1 驅動(dòng)程序核心結構體的介紹
本系統的軟件平臺是嵌入式uclinux,因此,攝像頭作為一個(gè)設備驅動(dòng)加載到uclinux內核中。一般而言,每個(gè)設備驅動(dòng)都會(huì )有它的核心結構體,攝像頭驅動(dòng)的核心結構體設計如下:struct camera device


該結構體儲存了幾乎全部與攝像頭視頻圖像相關(guān)的信息。其中的結構體videoDev和videoV4l1是與V4L相關(guān)聯(lián)的,ppiDev是與ADSP- BF537處理器硬件配置相關(guān)的,而frame[CAMERA_NUMFRAMES]則與采集時(shí)當前視頻幀數據相關(guān)聯(lián)。此外,camera_device 該核心結構體還定義了表示奇偶場(chǎng)的成員變量frame_field,表示當前幀的抓取狀態(tài)的成員變量grabbing等。
3.2 硬件配置
本系統在開(kāi)發(fā)過(guò)程中,最主要的難點(diǎn)在于硬件的配置,正確配置TVP5150、PPI、DMA需要搞清楚整個(gè)攝像頭的工作原理,以及各種圖像格式的基本知識。本文主要給出PPI和DMA的幾個(gè)關(guān)鍵配置選項。
3.2.1 PPI配置
TVP5150A視頻解碼芯片把模擬信號轉換成ITu-RBT.656視頻信號,ITU-R BT.656是4:2:2并行接口的數字演播室標準。對于PAL制系統(NTSC系統類(lèi)似),一幀圖像包括兩場(chǎng)視頻數據(奇偶場(chǎng)),每一場(chǎng)圖像由四部分構成:有效視頻數據,水平消隱,垂直消隱以及控制字。而PPI接口在ITU-656輸入模式下可以支持3種數據傳輸,若選擇有效視頻數據,則可以實(shí)現PPI 與TVP5150A解碼器的無(wú)縫連接。且傳輸的有效視頻數據就是UYVY422格式,所以配置PPI控制寄存器為ITu-656輸入、傳輸有效視頻數據。 PPI傳輸的有效視頻數據每場(chǎng)都由288行組成,每行有1440個(gè)取樣字,其中720個(gè)亮度Y取樣字,360個(gè)藍色色差Cb,360個(gè)紅色色差Cr,按 Cb、Y、Cr、Y的次序排列。而UYVY422格式數據是:每個(gè)像素點(diǎn)都取亮度值,而藍色色差和紅色色差是每?jì)蓚€(gè)像素點(diǎn)才各取一個(gè),兩者交替取,所以圖像像素是720×576。這樣可以確定ppi frame=576(整幅圖像的行數)。而ppi count不用配置,因為在ITU-R BT.656視頻信號中有H和V信號。
3.2.2 DMA配置
本系統采用二維DMA來(lái)提高數據的傳輸速度,采用16位傳輸,且傳輸完一場(chǎng)視頻數據后產(chǎn)生中斷。dma_x_count=720(相當于每行數據需傳輸的次數,每行720個(gè)像素點(diǎn),每個(gè)像素點(diǎn)2個(gè)字節。每行要傳720×2個(gè)字節,而dma是16位傳輸,所以x_count=720)。 dma_x_modify=2(相鄰兩次傳輸數據的偏移地址,以字節為單位,因為是16位傳輸,所以為2)。
由于PAL制視頻數據是隔行掃描,每幀分為奇偶兩場(chǎng),兩場(chǎng)在時(shí)域上是分開(kāi)的,但是在數據處理時(shí)需要將兩場(chǎng)合成一幀進(jìn)行處理,因此為了減少CPU的處理時(shí)間,可以利用DMA直接進(jìn)行場(chǎng)合成。在一場(chǎng)的傳輸中,DMA在傳輸完一行數據后,預留下一行的存儲空間,將數據存放到第三行的地址。在一場(chǎng)數據傳輸完后,下一場(chǎng)的數據就填充上一場(chǎng)預留的存儲空間,也是隔行存儲,這樣兩場(chǎng)數據就合成一幀數據了。所以,dma_y_modify=1442(一行720像素點(diǎn),占720×2字節。而一行末地址到下一行首地址還需2字節。所以720×2+2=1442)。同時(shí),兩場(chǎng)數據存放的起始地址的設置間隔也是1442字節。
3.3 中斷服務(wù)子程序
本系統的中斷服務(wù)子程序主要是一場(chǎng)數據采集完后,產(chǎn)生中斷,并根據數據的奇偶場(chǎng)做出相應的處理。其流程如圖2所示。

4 結束語(yǔ)
本文介紹了在Blackfin DSP和Linux的平臺下,攝像頭驅動(dòng)的體系結構和具體實(shí)現。此驅動(dòng)由測試程序測試,可以正常工作。此驅動(dòng)尚存在不足之處,那就是在驅動(dòng)的抓幀過(guò)程中沒(méi)有采用乒乓操作,但是采用了兩個(gè)幀緩存來(lái)存取數據,因此乒乓操作可以在上層應用中完成。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>