《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設計應用 > 達芬奇TMS320DM6446的視頻軟件設計
達芬奇TMS320DM6446的視頻軟件設計
來源:微型機與應用2013年第7期
謝文濱,葉水生
(南昌航空大學 信息工程學院,江西 南昌 330063)
摘要: 針對視頻監(jiān)控系統(tǒng)對實時性和帶寬的高要求,提出以達芬奇異構(gòu)雙核處理器TMS320DM6446為基礎的解決方案。雙核間的通信和協(xié)作是基于編解碼器引擎機制來實現(xiàn)的。ARM子系統(tǒng)負責I/O端口控制、算法調(diào)度、圖形用戶界面、網(wǎng)絡傳輸?shù)炔僮鳎珼SP子系統(tǒng)則實現(xiàn)H.264視頻編解碼。經(jīng)過研究,實現(xiàn)了視頻軟件設計。該方案實時性較好、部署方便,在視頻監(jiān)控領域具有較好的應用前景。
Abstract:
Key words :

摘  要: 針對視頻監(jiān)控系統(tǒng)對實時性和帶寬的高要求,提出以達芬奇異構(gòu)雙核處理器TMS320DM6446為基礎的解決方案。雙核間的通信和協(xié)作是基于編解碼器引擎機制來實現(xiàn)的。ARM子系統(tǒng)負責I/O端口控制、算法調(diào)度、圖形用戶界面、網(wǎng)絡傳輸?shù)炔僮鳎?a class="innerlink" href="http://ihrv.cn/tags/DSP" title="DSP" target="_blank">DSP子系統(tǒng)則實現(xiàn)H.264視頻編解碼。經(jīng)過研究,實現(xiàn)了視頻軟件設計。該方案實時性較好、部署方便,在視頻監(jiān)控領域具有較好的應用前景。
關鍵詞: 達芬奇;TMS320DM6446;編解碼器引擎;H.264

 隨著計算機多媒體技術(shù)、網(wǎng)絡通信技術(shù)、微電子技術(shù)、數(shù)字信號處理技術(shù)的高速發(fā)展,嵌入式數(shù)字視頻監(jiān)控系統(tǒng)正迅速深入到學校、銀行、商場、機場、道路交通等領域的安防監(jiān)控。然而,視頻數(shù)據(jù)量龐大,如此廣泛的應用,也就需要壓縮率更高的算法。H.264是目前最先進的視頻壓縮標準,具有高壓縮率的同時還具有更強的網(wǎng)絡適應性,它提供了網(wǎng)絡抽象層,使得H.264的文件更容易在不同網(wǎng)絡上傳輸(例如互聯(lián)網(wǎng)、WCDMA、CDMA2000等)。為了應對強勁的市場需求,德州儀器(TI)公司推出達芬奇[1](DaVinci)技術(shù)的TMS320DM6446處理器,它是一種專門針對數(shù)字視頻應用、基于信號處理的解決方案,提供了專業(yè)的集成處理器、軟件、工具和支持,以簡化設計過程,加速產(chǎn)品創(chuàng)新,深受開發(fā)者青睞。然而,它的開發(fā)卻非常復雜,使得許多開發(fā)者都未能盡可能地發(fā)揮其硬件作用。為此,本設計采用了基于達芬奇技術(shù)的TMS320DM6446處理器為開發(fā)平臺,介紹了達芬奇平臺的雙核通信機制,并以H.264進行壓縮編碼,設計實現(xiàn)視頻編碼軟件系統(tǒng)。
1 TMS320DM6446雙核通信
 TMS320DM6446集成了TMS320C64x+ DSP核和ARM926EJ-S核。在ARM端基于MontaVista Linux、相關驅(qū)動和應用程序來管理芯片與外設的交互,DSP作為ARM的協(xié)處理器,主要是基于DSP/BIOS(TI公司的實時操作系統(tǒng)內(nèi)核)來處理復雜的音視頻編解碼相關的算法。高集成度帶來了開發(fā)的復雜性,ARM和DSP間通過DSPLink完成通信,同時需要編解碼引擎Codec Engine和編解碼服務器Codec Server協(xié)助完成。
1.1 Codec Engine
 Codec Engine是處理器間通信的橋梁,是介于ARM側(cè)的應用程序和DSP側(cè)的算法之間的軟件模塊,可以通過調(diào)用一組API集合來調(diào)用和運行符合xDAIS標準的算法。Codec Engine包括核心引擎(Core Engine)API和VISA(Video,Image,Speech,Audio)API。其中的VISA API通過stub(ARM端)來訪問核心引擎SPIs(System Programming Interface)和skeleton(DSP端),skeleton訪問核心引擎SPIs和VISA SPIs,VISA SPIs則最終調(diào)用具體的算法。因此,Codec Engine的工作是通過完成VISA API的任務來體現(xiàn)的。整體結(jié)構(gòu)如圖1所示。

 

 

 核心引擎操作如下:
 static string engine_name=“videoenc”;//定義引擎名稱
 Engine_Handle ce;//引擎的句柄
 Engine_Error errorcode;//返回引擎打開的狀態(tài)信息
 ce=Engine_open(engine_name,NULL,&Engine_Error);
        //打開引擎
 打開一個編解碼引擎之后,就可以創(chuàng)建、控制、處理、刪除具體的算法實例。VISA接口支持4種數(shù)據(jù)源的處理,分別是視頻、圖像、語音和音頻。
 VISA API應用如下:
 Engine_Handle ce;//引擎的句柄
 static string alg_name=“h264enc”;//定義編碼模塊名稱
 VIDENC_Handle h264Handle;//編碼器句柄
 H264Handle=VIDENC_create(ce,alg_name,NULL);
1.2 Codec Server
 Codec Server是一個二進制文件,集成了編解碼器、框架組件以及相關的系統(tǒng)代碼,可以使用DSP/BIOS作為內(nèi)核運行在DSP端。Codec Server類似于一個網(wǎng)頁服務器,包括了對客戶請求(ARM端應用程序?qū)SP端音視頻算法的調(diào)度)進行響應的相關DSP/BIOS任務線程,能夠用于創(chuàng)建編解碼器,同時也提供處理器性能信息。
 Codec Engine和Codec Server間的通信就是RPC(遠過程調(diào)用)原理在雙核上的實現(xiàn)。ARM端當成客戶機,訪問DSP服務器的算法;而DSP端被當成服務器,響應ARM端應用程序的請求。
2 系統(tǒng)總體結(jié)構(gòu)
 系統(tǒng)基于達芬奇平臺數(shù)字媒體處理器TMS320DM6446進行設計,同時結(jié)合128MB DDR2 SDRAM內(nèi)存、視頻解碼器TVP5150、CCD攝像頭、10M/100M標準以太網(wǎng)芯片。系統(tǒng)框圖如圖2所示。

 在ARM端,使用CCD攝像頭實時采集模擬視頻信號,傳入視頻解碼器TVP5150內(nèi)進行A/D轉(zhuǎn)換為數(shù)字視頻信號,這部分的采集工作由視頻前端VPFE負責。為了使這些數(shù)據(jù)能被DSP處理,VPFE需要將RGB格式的原始圖像轉(zhuǎn)換為YUV格式[2]。然后使用DSPLink模塊與DSP端進行通信,并通過Codec Engine調(diào)度DSP端的H.264編碼算法,從而得到已編碼的視頻數(shù)據(jù)?;赥CP/IP協(xié)議,將編碼過的數(shù)據(jù)通過以太網(wǎng)接口EMAC傳輸至遠程管理軟件管理。同時為了驗證H.264編碼的正確性和編碼的質(zhì)量,調(diào)用DSP端的H.264解碼算法對已編碼視頻數(shù)據(jù)進行解碼操作,最后通過ARM側(cè)的視頻后端VPBE將解碼過的視頻數(shù)據(jù)送到LCD進行顯示。VPBE能將YUV格式的圖像轉(zhuǎn)換為LCD支持的NTSC或者PAL格式。UART0接口主要用于系統(tǒng)調(diào)試,DDR2則是視頻流數(shù)據(jù)的交換中心。
3 軟件方案設計
 本設計中,以MontaVista Linux操作系統(tǒng)作為軟件開發(fā)平臺,基于Linux下視頻設備驅(qū)動程序規(guī)范V4L2[3](Video for Linux Two)、幀緩沖機制(Frame Buffer)和多線程技術(shù)進行視頻應用程序的設計。多線程是一種多任務、并發(fā)的工作方式,能夠提高程序響應及CPU的使用率,并能改善程序的結(jié)構(gòu)。本系統(tǒng)軟件設計為5個線程,分別為主線程、顯示線程、采集線程、視頻線程和控制線程。
3.1 主線程
 主線程用于執(zhí)行必要的初始化,解析用戶程序提供的命令行參數(shù),并根據(jù)這些參數(shù)的值產(chǎn)生其他線程。初始化任務主要包括視頻標準檢測,使用了幀緩沖設備驅(qū)動程序的ioctl(FBIO_GETSTD);用戶命令行參數(shù)解析;Codec Engine初始化;創(chuàng)建顯示、采集和視頻三個線程;調(diào)用控制線程的函數(shù)ctrlThrFxn(),從而主線程轉(zhuǎn)變?yōu)榭刂凭€程??刂凭€程負責用戶接口,可用于響應鍵盤接口輸入的命令;還能在OSD(On-Screen Display,達芬奇平臺的在屏顯示技術(shù))上顯示和更新文字、圖形,使用setOsdTransparency()函數(shù)設置OSD窗口的透明度;同時能夠在OSD上繪制按鈕并對文字著色。具體的流程如圖3所示。

3.2 采集線程
 ARM端的采集線程基于V4L2設備驅(qū)動程序來獲取實時的視頻緩沖數(shù)據(jù),并傳給視頻線程處理。采集線程的流程如下:
 (1)打開視頻采集設備
 fd=open(“/dev/video0”,O_RDWR|O_NONBLOCK,0);
?。?)初始化設備
 首先,查詢設備的性能,獲取視頻采集設備的capability,辨別是否具有視頻輸入特性。
 struct v4l2_capability cap;
 ret=ioctl(fd,VIDIOC_QUERYCAP,&cap);
 然后,選擇視頻輸入的功能。
 int input;
 input=TVP5146_AMUX_SVIDEO;
 ret=ioctl(fd,VIDIOC_S_INPUT,&input);
 設置視頻制式和幀格式。
 struct v4l2_format fmt;
 fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
 fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_UYVY;
 fmt.fmt.pix.width=IMAGE_WIDTH;
 fmt.fmt.pix.height=IMAGE_HEIGHT;
 fmt.fmt.pix.field=V4L2_FIELD_INTERLACED;
 ret=ioctl(fd,VIDIOC_S_FMT,&fmt);
?。?)設定數(shù)據(jù)傳輸方式
 采用內(nèi)存映射模式。在這種模式下,應用程序和驅(qū)動程序之間只有指向視頻數(shù)據(jù)buffer的指針被交換,數(shù)據(jù)本身不會被復制,提高了效率。
?。?)實際的采集操作
 V4L2中有兩個隊列:輸入和輸出[4]。先把映射好的內(nèi)存片段入隊,接著開始采集視頻數(shù)據(jù)并進入read循環(huán),此時應用程序等待輸出隊列被填滿時可以將內(nèi)存片段出隊,出隊的數(shù)據(jù)就是攝像頭采集的視頻數(shù)據(jù)。將出隊的內(nèi)存片段處理完后重新入隊列尾,這樣可以循環(huán)采集。入隊和出隊操作使用V4L2中的VIDIOC_QBUF和VIDIOC_DQBUF的ioctl()函數(shù)調(diào)用。
 struct v4l2_buffer v4l2buf;
 ioctl(fd,VIDIOC_DQBUF,&v4l2buf);
      //從采集的數(shù)據(jù)中獲取一個幀緩沖
 ioctl(fd,VIDIOC_QBUF,&v4l2buf);
      //將采集的幀緩沖發(fā)回到設備驅(qū)動中
 同時,應用程序可以調(diào)用VIDIOC_STREAMON的ioctl()來啟動視頻采集,VIDIOC_STREAMOFF的   ioctl()則用來停止視頻采集。
 type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
 ret=ioctl(fd,VIDIOC_STREAMON,&type);
 ret=ioctl(fd,VIDIOC_STREAMOFF,&type);
?。?)關閉設備
 close(fd);
3.3 視頻線程及其交互
 視頻線程基于Codec Engine機制調(diào)用DSP端的視頻編碼算法對該數(shù)據(jù)進行H.264編碼,經(jīng)過預測、量化、熵編碼等一系列的操作,大幅減小視頻數(shù)據(jù)的存儲容量,從而降低視頻傳輸對網(wǎng)絡帶寬的需求。已編碼的視頻數(shù)據(jù)可以存儲在本地硬盤或者基于TCP/IP協(xié)議發(fā)送至遠程管理軟件管理。同時為了驗證視頻編碼算法的正確性與質(zhì)量,調(diào)用DSP端H.264解碼算法對已編碼數(shù)據(jù)進行解碼操作,并且送入顯示線程,使用frame buffer機制將其顯示在LCD屏幕上。詳細的交互流程如圖4所示。

 結(jié)合達芬奇TMS320DM6446中ARM和DSP處理器各自的優(yōu)勢,提出了基于H.264壓縮算法的視頻編碼軟件系統(tǒng)的設計方案,實現(xiàn)視頻采集、視頻編解碼、視頻顯示和網(wǎng)絡傳輸?shù)裙δ?,在以后的工作中將加入行為分析和追蹤等功能,以使系統(tǒng)更加智能。本設計可應用于學校、交通、商業(yè)、銀行等多個領域,具有較好的前景。
參考文獻
[1] 王銘銘,方千山,顏佳泉,等.圖像處理和達芬奇技術(shù)在紡紗斷線檢測中的應用[J].微型機與應用,2012,31(17):44-45.
[2] HAN Peicen, YE Zhaohui,  YANG Shiyuan. The Design and Implementation of Network Video Surveillance System Based on Davinci Chips[C]. Qingdao China:Advances in Information Technology and Education,2011,201:296-302.
[3] Bill Dirks. Video for Linux Two[EB/OL].(2003-6-26)http://www.thedirks.org/v4l2.
[4] 趙勇,袁譽樂,丁銳.DAVINCI技術(shù)原理與應用指南[M].南京:東南大學出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。