基于MPEG-4的嵌入式多媒體監控系統中壓縮/解壓卡的
多媒體監控系統是多媒體技術(shù)在安防領(lǐng)域的新應用。音視頻壓縮技術(shù)是多媒體監控系統中的關(guān)鍵技術(shù)。在數字多媒體壓縮領(lǐng)域內有很多國際標準,如ISO/ITU-T 技術(shù)委員會(huì )下的JPEG 標準,CCITT制定的H. 263標準,以及著(zhù)名的MPEG標準等。
MPEG-4標準于2000年10月公布。MPEG-4 標準的主要特點(diǎn)是對圖像中的內容進(jìn)行編碼, 其核心是基于內容的尺度可變性(Content - basedscalability) 。內容尺度可變性意味著(zhù)給圖像中的各個(gè)對象分配優(yōu)先級。其中,比較重要的對象用較高的空間和(或) 時(shí)間分辨力表示。對甚低比特率應用來(lái)說(shuō),尺度可變性是一個(gè)關(guān)鍵的因素,因為它提供了自適應可用資源的能力。例如,這個(gè)功能允許使用者規定:對具有較高優(yōu)先級的對象以可接受的質(zhì)量顯示,第二優(yōu)先級的對象則以較低的質(zhì)量顯示,而其余內容(對象) 則不顯示。對于監控系統來(lái)說(shuō),在絕大部分時(shí)間內,監視畫(huà)面的背景都保持不變,因此在要求低比特率時(shí),對于監視畫(huà)面的背景部分可以以較低的質(zhì)量顯示,且不會(huì )影響整個(gè)畫(huà)面的效果。本系統采用MPEG
- 4 壓縮標準,在實(shí)現上選擇硬壓縮和硬解壓, 所用的壓縮解壓芯片為VWEB公司的VW2010 芯片。
2 硬件設計原理
2.1 VW2010 芯片的主要特點(diǎn)
VW2010是VWEB公司開(kāi)發(fā)的實(shí)時(shí)MPEG-4音視頻壓縮/ 解壓芯片(CODEC) 。該芯片具有以下主要特點(diǎn):
(1) 單片集成3 個(gè)信號處理/ 控制單元,包括一個(gè)視頻編碼(壓縮) 器、一個(gè)視頻解碼(解壓) 器和一個(gè)片內CPU(內部擴展一個(gè)音頻編碼DSP、一個(gè)音頻解碼DSP、一個(gè)多路復合單元和一個(gè)多路解復合單元) 。
(2) 為了達到可編程、高性能和低功耗,每個(gè)信號處理/ 控制單元都是由一個(gè)RISC處理器和專(zhuān)用的硬件加速器構成,視頻編、解碼器內部還集成一個(gè)專(zhuān)用的SDRAM。
(3) 在系統上電/ 復位時(shí),視頻編、解碼器的固件程序從外部主機(host )載入各自專(zhuān)用的SDRAM;片內CPU的固件程序載入VW2010外掛的SDRAM。
(4) 芯片主機接口采用標準PCI 接口。符合PCI局部總線(xiàn)規范2. 2 。
(5) 為了使編、解碼性能達到最佳,VW2010內部集成了一個(gè)雙通道DMAC。系統host直接通過(guò)主機接口對VW2010 進(jìn)行控制,MPEG流數據則采用DMA方式傳輸。
(6) 提供了與PHILIPS公司兼容的I2C總線(xiàn),方便對外圍芯片的控制。
2.2 基于VW2010 的壓縮/ 解壓卡硬件設計原理
壓縮卡的原理框圖如圖1所示。CVBS信號先經(jīng)過(guò)視頻接收電路進(jìn)行前端處理,包括阻抗匹配、限幅和鉗位,然后通過(guò)視頻解碼電路產(chǎn)生符合VW2010視頻接口標準的ITU656信號。視頻解碼電路的核心是一個(gè)視頻解碼芯片,解碼芯片對CVBS信號進(jìn)行A/ D轉換和編碼,產(chǎn)生ITU656 標準的并行數字電視信號。高檔的視頻解碼器還支持圖像尺寸縮放( scaling) 和幀提取(decimating) 功能,如PHILIPS 公司的SAA7114 、SAA7115 以及Rockwell 公司的BT829A 等。由于VW2010的視頻輸入為ITU656/D1 格式,所以只需要選擇具有基本A/D 轉換和編碼功能的視頻解碼芯片如SAA7113 即可。
圖1 壓縮卡原理圖
模擬音頻信號先經(jīng)過(guò)模擬音頻接收電路進(jìn)行前端處理,然后通過(guò)音頻ADC 產(chǎn)生符合VW2010音頻接口標準的I2S 信號。VW2010是壓縮卡的核心處理芯片,除了完成音視頻編碼外,還提供對解碼器和ADC 的控制(通過(guò)I2C 總線(xiàn)) ,編碼產(chǎn)生的MPEG流則通過(guò)芯片內部集成的PCI 接口輸出。
解壓是壓縮的逆過(guò)程,基本原理類(lèi)似,限于篇幅,不再贅述。
3 Linux 下V W2010 設備驅動(dòng)程序設計
3.1 VW2010 與host 的通信機制
VW2010提供了三種用于同host 通信的機制: 直接訪(fǎng)問(wèn)內部寄存器、共享存儲區( sharedmemory) 和DMA。VW2010允許host 直接訪(fǎng)問(wèn)其內部寄存器和外部存儲單元,寄存器方式主要用于調試目的和下載固件程序; DMA 方式則負責VW2010 芯片和應用緩沖區之間的數據傳輸(如MPEG流數據) ;共享存儲區機制是設備驅動(dòng)程序和VW2010 間的主要通信方式。
3.1.1 共享存儲區(shared memory)
VW2010 采用共享存儲區機制接收host 的命令并返回命令執行結果。用于host 到VW2010 通信的共享存儲區(以下簡(jiǎn)稱(chēng)SM-PC2VW) 位于en-coder SDRAM 中地址3F1800 處,共128 字節; 用于VW2010到host 通信的共享存儲區(以下簡(jiǎn)稱(chēng)SM-VW2PC) 位于encoder SDRAM 中地址3F1880 處,共128 字節。
SM_PC2VW 的格式如表1 所示。表中,CMD 為命令碼, 分別是: 讀數據(CMD=1) 、發(fā)IOCTL 碼(CMD=2) 、寫(xiě)數據(CMD=3) 、打開(kāi)命令(CMD = 4) 和關(guān)閉命令(CMD=5) ; Int Flag為中斷標識, Int Flag 為1 ,則VW2010 執行完CMD 定義的任務(wù)后將產(chǎn)生一個(gè)中斷,為0 則不產(chǎn)生;Device Handle 由打開(kāi)命令從firmware 中獲得; 當CMD不同時(shí),Parameters 有不同的含義,后面將詳細討論。
SM_VW2PC 的格式如表2 所示。ACK/NACK的含義是:如果SM_PC2VW 中Int Flag 為1 ,且命令CMD 成功執行,則為ACK;如果SM-PC2VW 中Int Flag 為1 ,且執行命令CMD 失敗,則為NACK,并將錯誤碼保存在Return Code 字段。
在發(fā)送其它命令之前必須先發(fā)送打開(kāi)命令,此時(shí),Device Handle 字段為0 ,Parameters 字段為打開(kāi)類(lèi)型( TSMUX , PSMUX , TSDEMUX 或PSDE-MUX) 。如果該命令成功執行, 則會(huì )在SM_VW2PC 的Device Handle字段返回所分配的Device Handle ;在SM_VW2PC 的Parameters字段返回輔助參數區的首地址(下面簡(jiǎn)稱(chēng)為X) 。輔助參數區由firmware 在encoder SDRAM 中動(dòng)態(tài)分配,用于傳遞跟命令相關(guān)的參數。在結束使用共享內存區后,必須發(fā)送關(guān)閉命令以釋放輔助參數區。
3.1.2 信號燈
由于共享存儲區是臨界資源,所以必須提供一種機制保證VW2010 和host 互斥地使用它們。為此,VW2010 分別給SM_PC2VW 和SM_VW2PC 提供了兩個(gè)硬件信號燈, 由寄存器REG_INT1 和REG_INT2 的最低位實(shí)現。VW2010 為信號燈定義了兩種操作: 寫(xiě)操作:向REG_INT1 或REG_INT2 的最低位寫(xiě)入1 ,釋放共享存儲區。讀操作:返回REG _INT1 或REG_INT2 的最低位的值,同時(shí)清該位為0 。
3.1.3 host 到VW2010 的中斷
host 通過(guò)向VW2010發(fā)中斷的方式通知VW2010 從共享存儲區讀取主機命令。VW2010用寄存器REG_DHIU5實(shí)現host 到VW2010 的中斷。REG_DHIU5 的最低四位用于保存中斷計數,第五位為中斷屏蔽位。host 向REG_DHIU5 每寫(xiě)一次, 中斷計數加1 ; VW2010 每讀REG_DHIU5 一次,中斷計數減1 。只要中斷計數不為0 ,則VW2010 內部的中斷請求信號一直保持有效。
3.2 VW2010 數據讀寫(xiě)和IOCTL 方法(method) 的實(shí)現
數據讀寫(xiě)和IOCTL 的實(shí)現依賴(lài)于上述的共享存儲區機制,在下面的討論中,我們假設已經(jīng)通過(guò)打開(kāi)命令(CMD = 4) 從firmware 獲取了DeviceHandle 和輔助參數區(首地址為X) 。
3.2.1 數據讀寫(xiě)方法的實(shí)現
VW2010 采用DMA 方式實(shí)現與應用空間的數據交換。讀/ 寫(xiě)命令用于建立從VW2010 到host 的DMA 通道并啟動(dòng)數據傳輸,它并不等待數據傳輸完成, 而是讓DMA 傳輸在后臺運行, 當DMA 傳輸結束后,VW2010 會(huì )中斷主機。
當應用程序要讀寫(xiě)數據時(shí),它首先會(huì )分配一些緩沖區用于保存讀寫(xiě)數據。這些緩沖區可以用首地址和長(cháng)度標識,如可以用(Address ,Len) 代表首地址為Address、長(cháng)度為L(cháng)en的緩沖區。在發(fā)送讀/寫(xiě)數據命令時(shí),SM_PC2VW 的Parameters 字段為X ,輔助參數區的內容為應用空間數據緩沖區的信息,其格式即為上述的首地址和緩沖長(cháng)度標識對(Address ,Len) 。VW2010 根據這些緩沖區信息建立到應用空間的DMA 通道。讀數據方法的程序流程圖如圖2 所示,其中,左邊是系統調用部分的流程圖,右邊則是中斷服務(wù)部分的流程圖。
圖2 讀數據方法流程圖
3.2.2 IOCTL 方法的實(shí)現
VW2010 定義了許多IOCTL 碼用于控制VW2010 芯片,各個(gè)IOCTL 碼的參數各不相同.需要注意的是此處的IOCTL 碼不同于Driver API中的IOCTL 碼。該命令與讀寫(xiě)數據命令的主要區別在于其命令輔助參數存儲區的格式不同,而控制流程類(lèi)似,限于篇幅,不再贅述。
4 實(shí)驗與測試
為了測試壓縮/ 解壓卡和設備驅動(dòng)程序的性能,作者在Linux Redhat7. 3下編寫(xiě)了測試程序。測試中,分別讓VW2010 芯片工作在以下幾種模式:手動(dòng)錄像模式、定時(shí)錄像模式和動(dòng)態(tài)偵測錄像模式。結果都能穩定工作。
5 總結
本文詳細介紹了基于VW2010 芯片的MPEG-4壓縮/ 解壓卡的設計方法, 包括硬件設計和Linux 下的設備驅動(dòng)程序的設計,并在實(shí)際中進(jìn)行了全面的測試。VW2010功能強大,編解碼高效且外圍電路簡(jiǎn)單,具有重要的實(shí)際應用價(jià)值。
評論