基于DM6467T的高清攝像頭驅(qū)動(dòng)設(shè)計(jì)
摘要 為滿足高清視頻監(jiān)控的需求,針對(duì)目前raw格式傳感器的驅(qū)動(dòng)支持尚不完善的問題。文中基于TI公司的DM6467T芯片硬件平臺(tái),利用芯片提供的VPIF接口,對(duì)高清攝像頭進(jìn)行驅(qū)動(dòng)程序的設(shè)計(jì)。分析了V4L2驅(qū)動(dòng)結(jié)構(gòu),并分別對(duì)V4L2核心驅(qū)動(dòng)、VPIF接口驅(qū)動(dòng)以及傳感器驅(qū)動(dòng)進(jìn)行修改及設(shè)計(jì)。編寫了驅(qū)動(dòng)測(cè)試程序,實(shí)驗(yàn)結(jié)果表明,該設(shè)計(jì)能成功采集到raw格式的圖像數(shù)據(jù),對(duì)同類傳感器驅(qū)動(dòng)設(shè)計(jì)具有一定參考價(jià)值。
本文引用地址:http://www.ex-cimer.com/article/201610/307177.htm隨著數(shù)字視頻技術(shù)成為安防監(jiān)控與視頻會(huì)議不可缺少的一部分,人們對(duì)視頻穩(wěn)定性、圖像清晰度以及數(shù)據(jù)實(shí)時(shí)性的要求也逐步提高。為得到更清晰的圖像,TI(德州儀器)推出了達(dá)芬奇系列芯片。該系列芯片善于處理多媒體數(shù)據(jù),支持多種視頻格式的輸入和高清視頻的輸入。對(duì)于YUV格式的視頻圖像輸入,目前已有較為成熟的驅(qū)動(dòng)可直接使用,然而常見的傳感器通常輸出raw格式的視頻數(shù)據(jù),raw格式的是最原始的視頻數(shù)據(jù),其信息量最大,現(xiàn)階段對(duì)傳感器的驅(qū)動(dòng)支持尚不完善。本文基于Linux環(huán)境,介紹了V4L2、VPIF和傳感器驅(qū)動(dòng)之間的關(guān)系,完成視頻采集設(shè)備驅(qū)動(dòng)的設(shè)計(jì)及簡(jiǎn)單測(cè)試程序的編寫。
1 硬件平臺(tái)架構(gòu)介紹
在進(jìn)行驅(qū)動(dòng)程序設(shè)計(jì)之前,首先要了解相關(guān)硬件設(shè)備的信息。
1.1 DM6467T介紹
DM6467T是TI公司推出的一款達(dá)芬奇系列的雙核芯片。達(dá)芬奇技術(shù)的基礎(chǔ)是集成了DSP與ARM雙內(nèi)核的片上系統(tǒng),ARM內(nèi)核可加載操作系統(tǒng),主要起控制和管理作用,DSP內(nèi)核相當(dāng)于一個(gè)只負(fù)責(zé)處理編解碼算法的協(xié)處理器。DM6467T擁有1 GHz主頻的DSP內(nèi)核,500 MHz主頻的ARM926E—JS內(nèi)核以及2個(gè)HDVICP硬件協(xié)處理器。基于多媒體背景提出的DM646 7T,不僅運(yùn)算能力高,且具有較強(qiáng)的控制能力。
DM6467T擁有VPIF(Video Port Interface)視頻接口功能模塊,VPIF模塊管理著視頻數(shù)據(jù)的輸入輸出功能,可滿足各種視頻輸入輸出設(shè)備的格式。該模塊有4路可配置的數(shù)據(jù)通道,每路為8 bit的數(shù)據(jù)寬度,其中兩路用于視頻輸出,另兩路用于視頻輸入。VPIF支持ITU—BT.656、ITU—BT.1120格式的視頻,也可支持?jǐn)?shù)據(jù)寬度為8/10/12 bit的raw格式圖像數(shù)據(jù)。
1.2 MT9P031傳感器
MT9P031傳感器是Aptina公司推出的一款高清傳感器,最高可支持2 592×1 944像素的視頻采集。在720p的視頻格式下,每秒可采集60幀視頻圖像。MT9P031利用I2C(Inter-Integrated Circuit)總線進(jìn)行通信,通過I2C設(shè)置傳感器內(nèi)部寄存器,即可控制傳感器的工作模式及工作參數(shù)。I2C總線是由Philips公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。
傳感器端連接示意圖如圖1所示。傳感器的數(shù)據(jù)接口與DM6467T的VPIF接口相連接。MT9P031傳感器采集輸出的是12位寬度的原始數(shù)據(jù),需要占用VPIF接口中兩路8 bit的數(shù)據(jù)通道,傳感器利用行同步信號(hào)與幀同步信號(hào)進(jìn)行同步,其同步信號(hào)與VPIF接口相連接。
2 視頻驅(qū)動(dòng)設(shè)計(jì)
2.1 V4L2驅(qū)動(dòng)
V4L2(Video for Linux two)是Linux下開發(fā)視頻采集設(shè)備驅(qū)動(dòng)程序的一套規(guī)范,這套規(guī)范使用分層的方法為驅(qū)動(dòng)程序的開發(fā)提供了清晰的模型和一致的接口。V4L2本身是一個(gè)字符設(shè)備,具有字符設(shè)備的所有特性,直接將接口暴露給用戶。當(dāng)視頻設(shè)備連接到主機(jī)后,驅(qū)動(dòng)程序會(huì)首先注冊(cè)一個(gè)主設(shè)備號(hào)為81的字符設(shè)備,其是硬件唯一的身份標(biāo)識(shí)。
圖2展示了V4L2的驅(qū)動(dòng)結(jié)構(gòu)。驅(qū)動(dòng)正常加載完畢后,會(huì)在/dev目錄下產(chǎn)生/dev/videoX設(shè)備節(jié)點(diǎn)。圖中的V4L2驅(qū)動(dòng)核心構(gòu)建一個(gè)內(nèi)核中標(biāo)準(zhǔn)視頻設(shè)備驅(qū)動(dòng)的框架,為視頻操作提供統(tǒng)一的接口函數(shù)。平臺(tái)V4L2驅(qū)動(dòng)部分,根據(jù)平臺(tái)自身的特性實(shí)現(xiàn)與平臺(tái)相關(guān)的驅(qū)動(dòng),平臺(tái)驅(qū)動(dòng)用于控制視頻接收端的相關(guān)操作。本文采用DM6467T處理器,使用DM6467T的VPIF接口,該平臺(tái)驅(qū)動(dòng)即VPIF驅(qū)動(dòng)。用戶在利用接口進(jìn)行操作時(shí),V4L2調(diào)用平臺(tái)驅(qū)動(dòng)所提供的功能對(duì)DM6467T進(jìn)行操作。用戶需要采集傳感器數(shù)據(jù)時(shí),利用V4L2驅(qū)動(dòng)核心提供的接口進(jìn)行操作,驅(qū)動(dòng)核心將負(fù)責(zé)下層驅(qū)動(dòng)的調(diào)用,完成數(shù)據(jù)采集工作。
2.2 VPIF接口驅(qū)動(dòng)
VPIF(Video Port Interface)是DM6467視頻接口功能模塊,VPIF接口共4路數(shù)據(jù)通道,兩路8位視頻輸入通道,兩路輸出通道,其4路通道擁有相同的硬件結(jié)構(gòu)。DM6467T通過VPIF接口接收傳感器采集的視頻數(shù)據(jù),并將所有輸入數(shù)據(jù)都緩存在片內(nèi)Flash中。
首先需設(shè)計(jì)驅(qū)動(dòng)初始化程序,在加載驅(qū)動(dòng)過程中,VPIF需要進(jìn)行初始化工作,主要包括分配緩沖,檢測(cè)設(shè)備類型,分配內(nèi)存給通道對(duì)象,將設(shè)備注冊(cè)為V4l2_dev,申請(qǐng)視頻數(shù)據(jù)接收時(shí)的中斷,該中斷表示一幀視頻數(shù)據(jù)接收完成。注冊(cè)相關(guān)的控制類函數(shù),該類函數(shù)將實(shí)現(xiàn)用戶層接口的控制操作。
余下的VPIF驅(qū)動(dòng)函數(shù)設(shè)計(jì)可分為3部分:(1)用戶控制相關(guān)的操作函數(shù),該類函數(shù)實(shí)現(xiàn)V4L2中ioctl函數(shù)的具體操作。用戶可通過V4L2對(duì)VPIF進(jìn)行查詢?cè)O(shè)備能力、設(shè)置像素、設(shè)置標(biāo)準(zhǔn)格式、申請(qǐng)緩沖區(qū)、對(duì)緩沖區(qū)進(jìn)行操作和開啟或停止視頻采集等操作。(2)字符設(shè)備操作相關(guān)的函數(shù),包括設(shè)備打開的實(shí)現(xiàn),設(shè)備被關(guān)閉時(shí)資源釋放以及內(nèi)存映射的實(shí)現(xiàn)。(3)實(shí)現(xiàn)中斷服務(wù)程序。采集視頻數(shù)據(jù)階段,每接收到一幀完整數(shù)據(jù)后,系統(tǒng)會(huì)產(chǎn)生一個(gè)中斷,跳轉(zhuǎn)到中斷服務(wù)程序。產(chǎn)生中斷表示緩存區(qū)域已被接收到的圖像數(shù)據(jù)填滿,中斷服務(wù)程序中需要實(shí)現(xiàn)緩存輪換的操作,即將緩存指針指向下一個(gè)空白區(qū)域。
2.3 MT9P031驅(qū)動(dòng)
MT9P031傳感器驅(qū)動(dòng)首先需要實(shí)現(xiàn)初始化功能。傳感器驅(qū)動(dòng)需要作為v4l2_subdev進(jìn)行注冊(cè),注冊(cè)完成后可在VPIF驅(qū)動(dòng)中利用v4l2_subdev_call函數(shù)對(duì)其進(jìn)行操作。MT9P031的內(nèi)部控制寄存器由I2C總線進(jìn)行控制,傳感器驅(qū)動(dòng)在初始化時(shí)還需注冊(cè)為I2C設(shè)備,并利用I2C總線進(jìn)行探測(cè),讀取傳感器的設(shè)備號(hào),檢測(cè)傳感器芯片是否正常。
由于MT9P031是V4L2子設(shè)備,驅(qū)動(dòng)需要實(shí)現(xiàn)供上層平臺(tái)驅(qū)動(dòng)調(diào)用的控制函數(shù),包括設(shè)置及獲取當(dāng)前視頻格式,設(shè)置及獲取視頻參數(shù)以及實(shí)現(xiàn)傳感器數(shù)據(jù)采集與停止功能的函數(shù)。
最后需要在芯片相關(guān)的設(shè)置文件中,加入VPIF與傳感器的文件的配置,配置基本參數(shù),如I2C地址、VPIF通道的連接情況等信息。
3 驅(qū)動(dòng)測(cè)試程序
3.1 驅(qū)動(dòng)程序編寫
本文編寫的驅(qū)動(dòng)程序直接編譯在內(nèi)核中,在Linux內(nèi)核啟動(dòng)的過程中,視頻驅(qū)動(dòng)進(jìn)行初始化。內(nèi)核加載完畢后,在/dev目錄下產(chǎn)生/dev/vide0設(shè)備節(jié)點(diǎn),用戶空間通過調(diào)用Open函數(shù)即可打開設(shè)備,進(jìn)行視頻采集操作。具體流程如圖3所示。
用戶打開設(shè)備后,利用Ioctrl函數(shù)進(jìn)行操作,通過VIDIOC_QUERTCAP控制命令可查詢驅(qū)動(dòng)支持格式,并利用其他控制命令進(jìn)行相應(yīng)設(shè)置。Linux操作系統(tǒng)和驅(qū)動(dòng)程序運(yùn)行在內(nèi)核空間,應(yīng)用程序運(yùn)行在用戶空間,兩者不能直接使用指針傳遞數(shù)據(jù),需通過VIDIOC_REQBUFS命令和Malloc函數(shù)分別在內(nèi)核空間和用戶空間分配內(nèi)存緩沖區(qū),最后通過Mmap函數(shù)進(jìn)行內(nèi)存映射。利用VIDIOC_QBUF命令將分配到的緩沖加入緩沖隊(duì)列,該隊(duì)列將用于存放接收到的視頻數(shù)據(jù)。利用VIDIOC_STREAMON命令開始視頻采集,從緩沖隊(duì)列中取到視頻數(shù)據(jù),并保存在SDRAM中,保存完畢后將緩沖區(qū)放回隊(duì)列。采集完畢后需先停止視頻采集,調(diào)用Close函數(shù)關(guān)閉視頻設(shè)備,并且釋放申請(qǐng)的內(nèi)存空間。
3.2 測(cè)試結(jié)果
最終采集到的視頻數(shù)據(jù)存放在SDRAM中,傳感器采集到的視頻圖像是raw格式的數(shù)據(jù),其數(shù)據(jù)格式為紅綠/綠藍(lán)交錯(cuò)的值,需要利用差值算法將其轉(zhuǎn)換成RGB圖像再進(jìn)行顯示,最終呈現(xiàn)了較為清晰的圖像,驗(yàn)證了驅(qū)動(dòng)程序的正確性。
由于raw格式的數(shù)據(jù)量較大,在實(shí)際應(yīng)用中并不適合將該數(shù)據(jù)直接存儲(chǔ)至存儲(chǔ)器中,需要對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)碼壓縮,隨后再存儲(chǔ)或通過網(wǎng)絡(luò)進(jìn)行傳輸。利用該驅(qū)動(dòng)程序進(jìn)行網(wǎng)絡(luò)攝像頭的設(shè)計(jì),由于轉(zhuǎn)碼運(yùn)算量大,在720P的格式下,目前實(shí)時(shí)的采集播放速率可達(dá)到10 fip·s-1。雖未達(dá)到傳感器的標(biāo)準(zhǔn),但驗(yàn)證了驅(qū)動(dòng)的正確性,且基本滿足使用需求。對(duì)DSP算法進(jìn)行優(yōu)化后,視頻每秒的幀數(shù)將可進(jìn)一步提升。
4 結(jié)束語(yǔ)
本文介紹了V4L2驅(qū)動(dòng)的設(shè)計(jì)架構(gòu),利用DM6467T的VPIF接口,設(shè)計(jì)了基于DM6467T的高清攝像頭驅(qū)動(dòng)?,F(xiàn)有基于VPIF接口設(shè)計(jì)的驅(qū)動(dòng)僅支持YUV分量格式的視頻數(shù)據(jù),本文實(shí)現(xiàn)了在VPIF下針對(duì)raw格式視頻數(shù)據(jù)采集的驅(qū)動(dòng),采集數(shù)據(jù)也達(dá)到了預(yù)期的效果。raw格式圖像數(shù)據(jù)量大,根據(jù)需求進(jìn)行處理后,用途廣泛。
評(píng)論