視頻采集播放卡設(shè)計(jì)探究論文
時(shí)間:2022-10-11 11:10:00
導(dǎo)語(yǔ):視頻采集播放卡設(shè)計(jì)探究論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要介紹了視頻采集播放卡的總體設(shè)計(jì),給出了硬件電路設(shè)計(jì)框圖,重點(diǎn)闡述了驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)。
關(guān)鍵詞視頻采集播放卡PCI總線流Minidriver
1引言
隨著寬帶網(wǎng)絡(luò)技術(shù)和流媒體技術(shù)的迅猛發(fā)展,計(jì)算機(jī)用戶可以從網(wǎng)絡(luò)上獲得的影音資源日益豐富,人們不但可以從網(wǎng)絡(luò)上下載,而且能夠通過(guò)在線點(diǎn)播方式即時(shí)收看影音文件。在電視、計(jì)算機(jī)、寬帶網(wǎng)絡(luò)日益普及的今天,利用設(shè)備整合現(xiàn)有資源,充分發(fā)揮各設(shè)備優(yōu)勢(shì),實(shí)現(xiàn)資源利用的最大化顯得尤為重要。通過(guò)設(shè)計(jì)視頻采集播放卡,實(shí)現(xiàn)音視頻采集和計(jì)算機(jī)(網(wǎng)絡(luò))影音文件后臺(tái)播放輸出,有利于音視頻資源的整合利用,提高資源利用率。
2總體方案
視頻采集播放卡由硬件和軟件兩部分組成,如圖1所示。硬件部分包括PCI接口模塊、音頻編解碼模塊、視頻解碼模塊、視頻編碼模塊以及電源模塊等。軟件部分包括驅(qū)動(dòng)模塊和應(yīng)用程序模塊。驅(qū)動(dòng)模塊屬于底層的軟件接口,主要為上層的應(yīng)用程序提供硬件調(diào)用接口。
圖1系統(tǒng)軟硬件框圖
當(dāng)前計(jì)算機(jī)支持的媒體格式多種多樣,自己去為每一種媒體格式編寫編解碼程序不太現(xiàn)實(shí)。在操作系統(tǒng)中有著豐富的編解碼資源,如何利用這些資源就顯得至關(guān)重要。DirectShow為Windows平臺(tái)上處理各種各樣的媒體文件播放、音視頻采集等高性能要求的多媒體應(yīng)用提供一個(gè)完整的解決方案。為了利用操作系統(tǒng)中提供的編解碼資源,需要編寫流Minidriver,利用包裝Filter對(duì)硬件設(shè)備驅(qū)動(dòng)程序進(jìn)行包裝,實(shí)現(xiàn)DirectShow應(yīng)用程序?qū)τ布O(shè)備的訪問(wèn)。
3硬件實(shí)現(xiàn)
視頻采集播放卡由多媒體控制器SAA7146A、視頻編碼器SAA7121H、視頻解碼器SAA7113H、音頻編解碼器TDA1309H、音頻放大器TDA1308以及AT24C02等芯片組成,具體如圖2所示。
圖2硬件實(shí)現(xiàn)框圖
計(jì)算機(jī)通過(guò)PCI總線與視頻采集播放卡進(jìn)行數(shù)據(jù)交互。通過(guò)配置SAA7146A內(nèi)部寄存器,可以對(duì)芯片內(nèi)部各功能模塊進(jìn)行控制,實(shí)現(xiàn)與外圍芯片的數(shù)據(jù)交互。在視頻采集過(guò)程中,模擬視頻信號(hào)首先經(jīng)過(guò)解碼器SAA7113H,轉(zhuǎn)換成標(biāo)準(zhǔn)的數(shù)字視頻信號(hào),SAA7146A芯片讀取D1接口數(shù)據(jù),并通過(guò)PCI總線上傳給應(yīng)用程序。在視頻播放過(guò)程中,應(yīng)用程序下傳數(shù)據(jù)給SAA7146A,而后SAA7146A把視頻數(shù)據(jù)傳遞給編碼器SAA7121H,還原成模擬視頻信號(hào)。音頻信號(hào)采用TDA1309H實(shí)現(xiàn)數(shù)模和模數(shù)轉(zhuǎn)換。
4驅(qū)動(dòng)設(shè)計(jì)
驅(qū)動(dòng)程序是受操作系統(tǒng)信任的、控制硬件設(shè)備的一組函數(shù),它的優(yōu)劣不僅事關(guān)硬件設(shè)備的功能實(shí)現(xiàn),而且嚴(yán)重的設(shè)計(jì)缺陷還將造成操作系統(tǒng)的安全隱患。驅(qū)動(dòng)程序開發(fā)采用DriverStudio2.7+WindowsDDK+VisualC++6.0實(shí)現(xiàn)。由于采用DriverWorks建立的驅(qū)動(dòng)程序框架已包含實(shí)現(xiàn)設(shè)備的初始化、卸載等基本功能代碼,因此在開發(fā)PCI設(shè)備驅(qū)動(dòng)程序時(shí)可以把主要精力集中于處理硬件訪問(wèn)、中斷處理和DMA傳輸?shù)葐?wèn)題。
4.1硬件訪問(wèn)
驅(qū)動(dòng)程序通過(guò)讀寫與設(shè)備相關(guān)聯(lián)的寄存器同外圍設(shè)備進(jìn)行通信。為了引用設(shè)備的寄存器,DriverWorks定義了類KIoRange和類KMemoryRange來(lái)分別實(shí)現(xiàn)I/O空間寄存器和內(nèi)存映射寄存器的訪問(wèn)。映射的地址空間大小和類型由PCI設(shè)備配置空間的基地址寄存器值決定。
控制SAA7146A芯片實(shí)現(xiàn)任何一個(gè)完整的功能,都可能需要編寫一組寄存器訪問(wèn)指令。由于芯片SAA7113H和SAA7121H使用I2C總線進(jìn)行設(shè)置。為實(shí)現(xiàn)對(duì)I2C總線接口的訪問(wèn),不但要設(shè)置狀態(tài)寄存器IICSTA和傳輸控制寄存器IICTRF,而且要設(shè)置主控制寄存器MC1/MC2。圖3所示為I2C單字節(jié)寫操作的流程圖。4.2中斷處理
為了方便狀態(tài)查詢,SAA7146A提供有兩個(gè)狀態(tài)寄存器來(lái)收集、存放狀態(tài)信息,分別為主狀態(tài)寄存器PSR(PrimaryStatusRegister)和次狀態(tài)寄存器SSR(SecondaryStatusRegister),其中主狀態(tài)寄存器包含從次狀態(tài)寄存器中概括的信息。中斷使能寄存器IER使能中斷,當(dāng)某個(gè)中斷條件發(fā)生時(shí),中斷狀態(tài)寄存器ISR的對(duì)應(yīng)位被置“1”。
在ISR主要完成如下工作:①檢測(cè)SAA7146A狀態(tài)寄存器,判斷是否為本設(shè)備中斷,“是”則阻止它產(chǎn)生另一中斷,對(duì)中斷進(jìn)行簡(jiǎn)單處理,“否”則返回FALSE。②調(diào)用IoRequestDpc排隊(duì)DPC請(qǐng)求在驅(qū)動(dòng)程序的DpcForIsr例程中繼續(xù)處理請(qǐng)求。
在每部分?jǐn)?shù)據(jù)傳輸結(jié)束時(shí)由ISR觸發(fā)DpcForIsr例程。它的工作是開始下一部分的傳輸和完成當(dāng)前請(qǐng)求。
4.3DMA傳輸
為了傳輸音頻和視頻數(shù)據(jù),SAA7146A芯片提供了8個(gè)DMA通道(3個(gè)視頻通道,4個(gè)音頻通道,1個(gè)DEBI通道)進(jìn)行數(shù)據(jù)傳輸。為了克服大塊內(nèi)存獲取,SAA7146A支持分散/集中列表,提供有內(nèi)存管理單元MMU,用來(lái)處理不連續(xù)內(nèi)存。使用MMU的關(guān)鍵是初始化頁(yè)表。頁(yè)表是一塊頁(yè)對(duì)齊的4K字節(jié)大小的物理內(nèi)存。頁(yè)表中存放每4K字節(jié)為單位的物理內(nèi)存的物理起始地址。
下述代碼啟動(dòng)視頻DMA通道3,視頻數(shù)據(jù)通過(guò)D1_A接口經(jīng)BRS路由,輸入到內(nèi)存。
Height=conf.height;Width=conf.width;Pitch=conf.pitch;//置初值
basepage3.Page3=PageBaseAddress/4096;//頁(yè)表基地址右移12位
basepage3.ME3=1;//使能MMU
basepage3.Limit=0;basepage3.PV3=0;
basepage3.RW3=0;basepage3.Swap3=0;
useraddr=0;//當(dāng)前DMA通道使用的初始地址,多個(gè)DMA通道可以共用一個(gè)MMU頁(yè)表
SetReg(MC1,0x04000400);//打開DD1接口
SetReg(DD1_INIT,0x07000000);//初始化DD1接口,
SetReg(MC2,0x06000600);//upload“DD1接口初始化設(shè)置”
SetReg(DD1_STREAM,0x00000000);//設(shè)置DD1接口視頻數(shù)據(jù)流處理
SetReg(MC2,0x02000200);//upload
SetReg(BRS_CTRL,0x00000000);//設(shè)置BRS控制寄存器
SetReg(MC2,0x01000100);//upload
SetReg(PCI_BT_V,0x00170000);//設(shè)置Burst傳輸閥值
SetReg(NUM_LINE_BYTE3,(width<<16)|(Height/2);//設(shè)置視頻圖像大小
SetReg(BASE_ODD3,useraddr);//設(shè)置奇場(chǎng)視頻數(shù)據(jù)起始存放地址
SetReg(BASE_EVEN3,useraddr+Pitch);//設(shè)置偶場(chǎng)視頻數(shù)據(jù)起始存放地址
SetReg(PROT_ADDR3,useraddr+Height*Pitch);//設(shè)定保護(hù)地址
SetReg(PITCH3,Pitch);//設(shè)定兩行視頻數(shù)據(jù)存放地址間隔
SetReg(BASE_PAGE3,basepage3.value);//設(shè)置頁(yè)表基地址等信息
SetReg(MC2,0x00100010);//upload“視頻DMA3寄存器”
SetReg(IER,0x00000040);//設(shè)置中斷使能寄存器
SetReg(MC1,0x00100010);//啟動(dòng)DMA3傳輸
4.4流Minidriver
Minidriver的整個(gè)調(diào)試工作是在DirectShow提供的GraphEdit工具中完成的,GraphEdit提供了良好可視化界面,可以方便的實(shí)現(xiàn)Filter的插入、刪除和連接,而且可以查看和修改Filter屬性。整個(gè)調(diào)試過(guò)程分為三步完成——視頻預(yù)覽和音頻監(jiān)聽、視頻采集并壓縮存放為AVI文件、解壓AVI文件并播放輸出到電視設(shè)備。
圖4所示為視頻采集播放卡視頻預(yù)覽和音頻監(jiān)聽的FilterGraph,視頻輸出到顯示屏幕和聲卡。
圖4視頻采集播放卡預(yù)覽FilterGraph
圖5所示為視頻采集播放卡播放輸出上述采集的AVI格式視頻文件的FilterGraph,由于SAA7146ABRS只能接收UYVY格式的視頻數(shù)據(jù),因此需要增加了一個(gè)ColorSpaceConverterFilter來(lái)實(shí)現(xiàn)RGB24到UYVY格式的轉(zhuǎn)換。
圖5AVI文件播放輸出FilterGraph
5總結(jié)
視頻采集播放卡采用軟件方法實(shí)現(xiàn)音視頻壓縮、解壓縮,雖然需要占用一定的計(jì)算機(jī)系統(tǒng)資源,但具有硬件電路簡(jiǎn)單、成本低、升級(jí)容易等優(yōu)點(diǎn)。設(shè)計(jì)選用專用多媒體PCI接口芯片SAA7146A,實(shí)現(xiàn)了與視頻編碼器、視頻解碼器和音頻編解碼器的連接。為利用現(xiàn)有音視頻編解碼資源,擴(kuò)展視頻采集播放卡應(yīng)用范圍,編寫了流Minidriver。通過(guò)使用DirectShow提供的包裝Filter,把硬件設(shè)備包裝成多個(gè)Filter組件,實(shí)現(xiàn)了DirectShow應(yīng)用程序?qū)τ布O(shè)備的訪問(wèn)。
參考文獻(xiàn)
[1]SAA7146ADataSheet.PhilipsSemiconductors.1998
[2]SAA7113HDataSheet.PhilipsSemiconductors.1999
[3]SAA7121HDataSheet.PhilipsSemiconductors.2002
[4][美]ArtBaker,JerryLozano著,施諾等譯.Windows2000設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)指南.機(jī)械工業(yè)出版社,2001
[5]陸其明.DirectShow開發(fā)指南.清華大學(xué)出版社,2003.12