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