999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

V4L2在TMS320DM8168高清視頻監控系統中的實現

2014-09-18 07:12:56楊振永王延杰王明佳韓秋蕾陳懷章
電視技術 2014年13期
關鍵詞:設備系統

楊振永,王延杰,王明佳,韓秋蕾,陳懷章

(1.中國科學院 長春光學精密機械與物理研究所,吉林 長春 130033;2.中國科學院大學,北京 100049)

近年來,隨著數字多媒體技術的飛速發展,安防監控領域對視頻質量有了越來越高的要求,特別是由于犯罪分子作案手段越來越難以發覺捕捉,標清視頻很難發現其中的細節[1]。因此,視頻設備的高清化成為了安防監控領域發展的必然趨勢,而基于高清設備的軟件開發也成為了必須要解決的問題。

V4L2(Video for Linux 2)是嵌入式Linux操作系統為音視頻采集和顯示而提供的驅動框架,在Linux 2.5.46版本以后正式成為Linux內核的一部分,它為音視頻采集和顯示應用提供了API接口[2]。目前V4L2已支持多種視頻設備的采集和顯示,同時驅動本身經過不斷的完善,也可以提供越來越多的圖像預處理功能。基于V4L2的應用開發已經十分成熟,但是新的設備必然帶來新的問題,V4L2在高清視頻采集中也會受到資源不足等問題的困擾。

本文針對TMS320DM8168高清視頻監控系統,首先介紹了V4L2采集的譯碼芯片TVP7002及其與DM8168的接口連接,之后介紹了V4L2視頻設備的驅動設計和應用程序開發,并對其中出現的問題進行了分析解決,最后給出了視頻監控系統的效果。結果表明,V4L2在DM8168高清視頻監控系統中具有良好的可靠性和穩定性,可以為系統提供穩健的高清視頻流。

1 系統總體結構

以TMS320DM8168為核心的高清視頻監控系統,主要由高清視頻的采集和顯示模塊、視頻處理模塊、SATA存儲模塊和網絡傳輸模塊4部分組成,總體結構如圖1所示。

由圖中可以看出,TMS320DM8168內部集成的Cortex-A8 ARM處理器是系統的主處理器,控制著整個系統的運行,單片系統內部集成的C674x DSP處理器主要完成視頻算法的處理,Cortex-M3 ARM處理器是系統多媒體控制器,控制了視頻的高清視頻處理子系統HDVPSS和加速視頻壓縮解壓縮的硬件加速器HDVICP2,HDVPSS控制著視頻采集與顯示模塊,SATA控制器控制著視頻數據的SATA存儲,網絡控制器控制著網絡傳輸部分,支持10/100/1 000 Mbit/s的網絡傳輸[3]。

圖1 系統總體框圖

2 視頻接口設計

系統使用TVP7002作為視頻譯碼芯片,與DM8168對應的視頻采集接口連接。DM8168單片系統中視頻采集和顯示部分以高清視頻處理子系統HDVPSS為基礎,HDVPSS支持兩個獨立的視頻采集端口VIN[0]和VIN[1],能夠支持兩路并行的高達165 MHz的視頻采集,其中VIN[0]可采集單通道16/24 bit(YCbCr/RGB)視頻或者雙通道 8 bit(YCbCr)視頻,VIN[1]可配置為單通道 16 bit(YCbCr)視頻或者雙通道8 bit(YCbCr)視頻,當采集高清視頻時,視頻需要符合BT.1120協議,當采集標清視頻時,符合BT.656協議;HDVPSS還有3個獨立的視頻輸出端口VOUT[0]、VOUT[1]和HDMI輸出端口,其中VOUT[0]最高可顯示30 bit視頻,它支持RGB、YUV444、Y/C和BT.656等多種格式;VOUT[1]可顯示16 bit視頻,它支持Y/C和BT.656格式;HDMI輸出接口,支持HDMI 1.3a協議,最高頻率達到162 MHz。此外,VIN[]和VOUT[]都支持內嵌同步信息和獨立同步信息兩種同步方式。

TVP7002支持3個獨立的數字通道,支持480i、576i、480p、576p、720p、1 080i和1 080p格式的視頻譯碼,輸出時鐘從12 MHz到165 MHz不等,輸出可為30 bit RGB/YCbCr 4∶4∶4或20 bit 4∶2∶2視頻,同步信息可以內嵌到視頻數據中或者獨立于視頻數據之外,芯片可以通過I2C總線配置。系統的視頻接口關鍵連接如圖2所示。

由圖中可以看出,視頻采集選用了VIN[0]通道采集16 bit YCbCr 4∶2∶2高清視頻,其中VIN[0]_D[15:8]傳輸亮度分量Y,VIN[0]_D[7:0]傳輸色度分量Cb/Cr,視頻同步信息嵌入到有效數據之中。DM8168通過I2C總線配置TVP7002芯片,芯片I2C地址選擇引腳接高電平,其I2C地址為7 bit 1011101。

圖2 視頻采集接口

視頻顯示接口使用HDMI輸出通道,HDMI通道最高輸出頻率達到162 MHz,每對差分線速度達到3.4 Gbit/s,因此,為了確保良好的信號完整性,增加了TPD12S521靜電釋放ESD保護芯片。

3 V4L2驅動程序開發

DM8168中HDVPSS系統管理著視頻的采集和顯示,V4L2驅動作為HDVPSS的一部分,為視頻采集程序提供了API接口函數。HDVPSS的軟件結構如圖3所示。

圖3 VPSS軟件結構圖

由圖中可以看出,VPSS硬件可以分為2個部分:Cortex-M3和Cortex-A8,其中Cortex-M3管理VPSS的視頻、圖像的采集和顯示管道,Cortex-A8為驅動提供了硬件抽象層FVID2,為驅動程序提供了底層支持;Cortex-M3和Cortex-A8之間的通信通過SysLink管理。Cortex-A8上運行Linux操作系統,它分為內核空間和用戶空間,驅動程序V4L2和FBDEV以及文件系統管理接口SYSFS都在內核空間,它們為用戶空間的應用程序提供API接口函數。FBDEV是幀緩沖設備,主要用于LCD顯示,它將內存中的圖像數據與LCD的像素位置一一對應,具有操作簡單、靈活多變的特點,本系統HDMI輸出接口采用的就是幀緩沖驅動,這里不再詳細介紹。SYSFS接口為應用程序控制驅動提供了接口,可以配置視頻顯示驅動,改變顯示通道[4]。

V4L2驅動是Linux中標準的視頻采集和顯示驅動,是Linux內核中關于視頻設備的中間驅動層。它在Linux內核中注冊為字符設備,其主設備號為81[5],從設備號為0~255,其中0~63用于視頻設備,64~127用于音頻設備,192~223用于Teletext設備,224~255用于VBI設備。理解V4L2驅動前需要先了解platform driver平臺驅動的概念。platform與I2C、PCI等總線類似,都是為了便于管理系統的外設資源,將設備和驅動連接在一起,但是platform是一種虛擬總線,并沒有嚴格的總線協議,只是為了將外設掛載在一種總線上,便于統一管理,在SOC單片系統中,platform driver平臺驅動很常見,它有獨立的注冊函數和注銷函數,即platform_driver_register()和platform_driver_unregister()。

V4L2視頻采集驅動有兩種實現方法:將采集設備作為普通V4L2設備,直接控制TVP7002譯碼芯片實現視頻數據的采集,或者利用內核中實現好的V4L2驅動框架,將譯碼芯片掛載為V4L2的子設備,通過實現V4L2驅動的接口函數,完成視頻的采集[6]。第1種方法代碼量大,難度也大,第2種方法工作量較小,可移植性強,因此,選擇了第2種方法實現V4L2采集驅動。

V4L2采集驅動從注冊平臺驅動開始,將采集驅動注冊到platform總線上。在driver的probe()探測函數里完成資源分配以及V4L2設備的注冊。在probe()函數中video_device結構體與視頻采集設備是一一對應的,每個video_device都有自己的采集設備。本系統的采集驅動支持4路視頻通道,在調用video_register_device()函數后,將在/dev目錄上生成video0、video4、video5和video6這4個設備節點,每個視頻通道都有各自的操作函數集 v4l2_file_operations和控制函數集v4l2_ioctl_ops。除了以上內容,probe()函數還要將V4L2子設備與V4L2設備綁定在一起。由于TVP7002使用I2C總線配置,因此,最初TVP7002是注冊為I2C子設備的,此時需要使用函數v4l2_i2c_new_subdev_board()將I2C子設備添加為一個V4L2子設備。該函數主要完成2個工作:根據函數傳遞的I2C設備相關信息向I2C總線添加(或探測)一個I2C設備,然后向V4L2驅動注冊V4L2子設備。DM8168有2個通用的I2C控制器,TVP7002使用第2個,因此,調用v4l2_i2c_new_subdev_board()函數前需要使用i2c_get_adapter()函數獲取對應的I2C適配器。

TVP7002作為V4L2的子設備v4l2_subdev,首先會注冊為I2C子設備i2c_client,為了將兩者關聯起來,在TVP7002驅動的probe函數中調用了v4l2_i2c_subdev_init()函數,在該函數中兩者將彼此的*private指針指向對方。v4l2_i2c_subdev_init()函數還調用了v4l2_subdev_init()函數將TVP7002的操作函數集賦給對應V4L2子設備的操作函數。TVP7002作為v4l2_subdev,對應/dev/video0設備節點,主要實現了core函數集和video函數集兩類,其中core函數集中定義了對TVP7002芯片的寄存器配置函數,如獲得芯片id函數g_chip_ident、寄存器值獲取函數g_register、寄存器值設置函數s_register等,video函數集為V4L2的部分操作函數提供了底層實現。此外,TVP7002的probe()函數中還設置了芯片的初始化狀態。

V4L2設置完視頻采集參數后,需要為將要采集到的視頻分配緩存,對視頻緩沖幀的管理是V4L2非常重要的一部分,它關系到視頻能否正確地傳遞給應用層,一般V4L2驅動會使用Linux提供的videobuf_queue結構管理視頻的緩沖幀,它為驅動提供了統一的V4L2用戶空間接口,增加了可移植性。Videobuf層位于V4L2驅動層和應用層之間,包含一系列的函數,可實現標準POSIX I/O系統調用以和V4L2的ioctl()函數調用,它們可用于管理幀視頻的緩沖區分配、FIFO隊列出入和流控制等。

Videobuf支持3種類型的緩沖區,第1種是在物理和虛擬地址上都不連續的緩沖區,這種緩沖區在Linux中非常常見,幾乎所有的用戶空間緩沖區都是這種類型,但是這種分配方式需要硬件支持分散/聚集DMA操作;第2種是在物理上連續,在虛擬地址上不連續的緩沖區,這種緩沖區使用vmalloc()函數分配,很難用于DMA操作;第3種是在物理和虛擬地址上都連續的緩沖區,這種緩沖區可以很方便地使用DMA操作,但是容易造成內存空間的溢出[7]。

為了方便管理緩沖區,videobuf提供了4個接口函數buf_setup()、buf_prepare()、buf_queue()和 buf_release()。與之對應,在v4l2_ioctl_ops函數組中提供了vidioc_reqbufs()、vidioc_qbuf()、vidioc_streamon()和 vidioc_streamof()這4個函數。int(*buf_setup)(struct videobuf_queue*q,unsigned int*count,unsigned int*size)用于通知videobuf申請的I/O緩沖幀的信息,包括緩沖區的數量(在2~32之間)、緩沖區類型和大小等;int(*buf_prepare)(structvideobuf_queue*q,structvideobuf_buffer*vb,enum v4l2_field field)用于設置緩沖幀的寬、高等信息;buf_queue()和buf_release()用于實現緩沖幀數據流的啟停。

4 視頻采集應用程序開發

V4L2驅動提供了符合POSIX I/O標準的系統調用函數open()、read()以及控制函數ioctl()。通過這些函數可以方便地完成視頻的采集工作。采集程序流程圖如圖4所示。

圖4 視頻采集流程圖

這里以采集720p 60 YCbCr 4∶2∶2高清視頻為例介紹視頻采集的流程:

1)打開視頻設備:本驅動設備節點為/dev/video0,可以使用cap_fd=open(“/dev/video0”,O_RDWR)打開視頻設備。

2)設置視頻格式:在申請緩沖區前,需要判斷視頻的格式,首先查詢設備處理能力VIDIOC_QUERYCAP[8],若設備支持視頻采集,則查詢采集的視頻格式VIDIOC_QUERY_DV_PRESET,本例中得到的是V4L2_DV_720P60,之后根據得到的視頻格式,設置參數VIDIOC_S_DV_PRESET,以上操作均是使用V4L2的ioctl()函數完成的。

3)申請幀緩沖區:V4L2支持兩種不同的幀緩沖區操作:映射內存mmap和用戶指針類型內存userptr。本系統采集的都是高清視頻,一幀720p圖像將近1.76 Mbyte,而由于硬件限制,DM8168采集和顯示的幀緩沖區都不能低于4個,DM8168很難留出這么大的空間用于內存映射,因此,這里使用用戶指針類型的內存。具體的操作步驟是:使用VIDIOC_G_FMT獲得當前視頻寬、高等信息、使用VIDIOC_S_FMT設置視頻信息、使用VIDIOC_REQBUFS申請4個用戶指針類型的幀緩沖區,內存分配使用LCD設備緩沖區,這樣可以直接顯示。

4)緩沖幀入列:videobuf通過將緩沖幀送入FIFO隊列來保證視頻流的順序,這里使用VIDIOC_QBUF將申請到的每個幀緩沖區依次送入FIFO隊列中。

5)采集過程:視頻的采集過程實際是FIFO隊列的入隊出隊過程,該過程使用VIDIOC_STREAMON啟動,使用VIDIOC_STREAMOFF終止,其中VIDIOC_DQBUF使視頻幀出隊列,VIDIOC_QBUF使視頻幀入隊列,取出的視頻幀可以做相應的處理。

6)關閉視頻設備:采集結束后需要釋放緩沖區,并且關閉設備節點close(cap_fd)。

5 采集結果測試

這里以采集720p 60高清視頻為例,測試V4L2驅動及應用程序的可靠性。

將V4L2視頻采集驅動編譯為獨立的內核模塊,加載該模塊,編譯并運行采集應用程序,顯示得到的視頻如圖5所示。

圖5 視頻采集的圖像

采集到的高清視頻流暢,沒有出現丟幀的情況,由圖中可以看到采集到的畫面質量很好,證明了V4L2驅動和應用程序的可靠性。

6 結束語

本文主要介紹了V4L2在DM8168高清視頻監控系統中的驅動和應用實現。文中首先介紹了V4L2高清視頻的結構基礎DM8168高清視頻監控系統,特別是視頻的輸入輸出接口,之后V4L2的軟件基礎HDVPSS以及視頻采集驅動在HDVPSS中的位置特點,最后詳細介紹了V4L2驅動程序的設計實現以及采集應用程序的流程步驟。通過采集720p 60高清視頻,表明本系統設計實現的V4L2驅動程序以及應用程序可以穩定可靠地采集高清視頻,為高清視頻監控系統提供優質的高清視頻數據。

[1]蘇財貴,葉宇煌,蘇凱雄.HDMI接口在H.264高清視頻編解碼系統中的應用[J].電視技術,2012,36(21):67-70.

[2]黃俊偉,巴義.基于V4L2移動視頻監控系統的研究與設計[J].電視技術,2012,36(17):159-162.

[3]Texas Instruments Incorporated.TMS320DM816x DaVinci video processors[EB/OL].[2013-07-11].http://www.ti.com/lit/ds/symlink/tms320dm8168.pdf.

[4]Texas Instruments Incorporated.DM816X AM389X VPSS video driver user guide PSP 04.00.00.12[EB/OL].[2013-07-24].http://processors.wiki.ti.com/index.php?oldid=79736.

[5]LIU Y,YU H,ZHANG P.The implementation of embedded image acquisition based on V4L2[C]//Proc.2011 International Conference on Electronics,Communications and Control.[S.l.]:IEEE Press,2011:549-552.

[6]徐家,陳奇.基于V4L2的視頻設備驅動開發[J].計算機工程與設計,2010,31(16):3569-3572.

[7]CORBET J.Videobuf:buffer management for V4L2 drivers[EB/OL].[2013-07-23].http://lwn.net/Articles/363349.

[8]趙玉峰.基于嵌入式Linux的實時視頻通信的實現[J].電視技術,2012,36(19):189-192.

猜你喜歡
設備系統
諧響應分析在設備減振中的應用
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
主站蜘蛛池模板: 欧美中文字幕在线视频| 欧美日韩一区二区三区四区在线观看| 欧美成人综合视频| 久久精品亚洲专区| 无码一区18禁| 婷婷激情五月网| 亚洲VA中文字幕| av在线无码浏览| 国产jizz| 国产免费久久精品99re丫丫一| 国产国产人免费视频成18| 亚洲日韩高清在线亚洲专区| 色呦呦手机在线精品| 人妻无码AⅤ中文字| 天天色天天综合网| 欧美黄网在线| 亚洲成人一区在线| 亚洲日本中文字幕乱码中文| 国产96在线 | 在线观看亚洲精品福利片| 日韩一区精品视频一区二区| 精品久久综合1区2区3区激情| 99精品一区二区免费视频| 国产成人精品第一区二区| 亚洲男人天堂网址| 99久久性生片| 91精品国产自产91精品资源| 成人午夜天| 国产精品免费久久久久影院无码| 成人毛片免费在线观看| 99一级毛片| 国产麻豆aⅴ精品无码| 91亚洲免费视频| 国产区人妖精品人妖精品视频| 欧美不卡视频一区发布| 亚洲人成网址| 成人免费一级片| 亚洲天堂啪啪| 在线观看av永久| 欧美另类视频一区二区三区| 99无码熟妇丰满人妻啪啪| 538国产在线| 国产激情第一页| 青青青草国产| 欧美色视频在线| 亚洲第一成年人网站| 国产成人亚洲综合A∨在线播放| 中文字幕亚洲另类天堂| 又大又硬又爽免费视频| 日韩一二三区视频精品| 国产迷奸在线看| a级毛片免费播放| 欧美一区二区三区欧美日韩亚洲 | 一级毛片免费的| 91亚洲精品第一| 亚洲视屏在线观看| 91在线一9|永久视频在线| 亚洲精品国产自在现线最新| 国产精品xxx| 国产成人调教在线视频| 日韩 欧美 国产 精品 综合| 99热亚洲精品6码| 毛片最新网址| 2022精品国偷自产免费观看| 亚洲一区二区成人| 日本妇乱子伦视频| 在线精品欧美日韩| 女人18毛片一级毛片在线 | 国产sm重味一区二区三区| 久久特级毛片| 国产不卡网| 99久久国产综合精品2020| 日韩国产一区二区三区无码| 又黄又爽视频好爽视频| 97久久精品人人| 欧美视频免费一区二区三区| 国产精品美女自慰喷水| www亚洲天堂| 尤物成AV人片在线观看| 欧美亚洲一区二区三区导航| 成人综合久久综合| 国内自拍久第一页|