<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DSP的機(jī)載視頻圖像實(shí)時(shí)壓縮與處理系統(tǒng)

          基于DSP的機(jī)載視頻圖像實(shí)時(shí)壓縮與處理系統(tǒng)

          作者: 時(shí)間:2011-10-17 來源:網(wǎng)絡(luò) 收藏

            2. 3 系統(tǒng)工作流程

            系統(tǒng)由初始化模塊、采集模塊、壓縮模塊、打包編幀模塊、存儲(chǔ)模塊和傳輸模塊組成。其工作流程如圖2 所示。

          圖2 機(jī)載圖像將壓縮處理子系統(tǒng)軟件工作流程

            初始化模塊完成對(duì)程序從Flash 中導(dǎo)入內(nèi)存、DSP各端口及解碼芯片工作模式的設(shè)置及全局?jǐn)?shù)據(jù)的申請(qǐng)及初始化, 并啟動(dòng)對(duì)視頻端口狀態(tài)的查詢。當(dāng)定時(shí)檢測(cè)到視頻端口緩沖區(qū)中有數(shù)據(jù)時(shí), 將端口緩沖區(qū)中的原始數(shù)據(jù)根據(jù)接收的控制命令進(jìn)行指定大小大抽取, 輸出YUV4: 2: 0格式的圖像數(shù)據(jù)緩存到外圍存儲(chǔ)模塊中。壓縮模塊將采集的圖像數(shù)據(jù)進(jìn)行MPEG-4 壓縮。打包、編幀模塊將壓縮后的MPEG-4 編碼數(shù)據(jù)進(jìn)行實(shí)時(shí)打包, 并對(duì)打包后的數(shù)據(jù)進(jìn)行連續(xù)的實(shí)時(shí)編幀。當(dāng)數(shù)據(jù)包緩沖區(qū)中無數(shù)據(jù)時(shí),便在傳輸幀中插入空數(shù)據(jù)。編幀完的數(shù)據(jù)64 位并行緩存到外圍SDRAM 中。在FIFO 中斷服務(wù)程序中, 啟動(dòng)一次DMA 傳輸, 將緩存在SDRAM 中的幀數(shù)據(jù)流傳輸?shù)紽IFO 中, 實(shí)現(xiàn)256 KB/ s 的恒定速率的數(shù)據(jù)傳輸。

            需要注意的是原始圖像和壓縮碼流在DSP 中的存儲(chǔ)。視頻端口、編碼程序都要訪問原始圖像, 例如在某一時(shí)刻,編碼程序訪問當(dāng)前幀圖像, 而視頻端口正在輸入下一幀圖像, 為了避免訪問沖突, 原始圖像在DSP 中采用三緩沖區(qū)進(jìn)行管理。壓縮碼流由編碼程序?qū)懭耄?根據(jù)FIFO 狀態(tài)恒定碼率輸出, 所以采用環(huán)式存儲(chǔ)管理協(xié)調(diào)讀寫的步調(diào)。

            2. 4 內(nèi)存分配

            DM642 片內(nèi)只有256 KB 的存儲(chǔ)空間, 因此當(dāng)前幀、參考幀和當(dāng)前幀的重建幀都必須放至片外存儲(chǔ)器, 壓縮碼流若被主機(jī)讀取, 也放至片外。其他數(shù)據(jù)如程序代碼、全局變量、VLC碼表、各編碼模塊產(chǎn)生的中間數(shù)據(jù)等均可放至片內(nèi)。

            由于CPU 訪問片外的速度通常要比訪問片內(nèi)慢幾十倍, 片外數(shù)據(jù)的傳輸通常成為程序運(yùn)行時(shí)的瓶頸, 即使代碼效率很高, 流水線也會(huì)因?yàn)榈却龜?shù)據(jù)而被嚴(yán)重阻塞。解決這一問題的有效方法是用EDMA 傳送數(shù)據(jù)。程序是逐個(gè)宏塊進(jìn)行編碼時(shí), 在編碼當(dāng)前宏塊的同時(shí), EDMA 將下一個(gè)宏塊的數(shù)據(jù)、用到的參考幀數(shù)據(jù)由片外傳送至片內(nèi);當(dāng)前宏塊做完成運(yùn)動(dòng)補(bǔ)償后, EDMA 將重建后的宏塊由片內(nèi)傳送至片外。這樣CPU 只對(duì)片內(nèi)數(shù)據(jù)進(jìn)行操作, 使得流水線可以順利進(jìn)行, 而壓縮碼流按逐個(gè)碼字有時(shí)間間隔地寫入, 可由CPU 直接寫至片外。

            3 基于DM642 的軟件優(yōu)化技術(shù)

            為了提高代碼的執(zhí)行效率, 必須充分利用C64x CPU的VL IW 和流水線結(jié)構(gòu)對(duì)其進(jìn)行優(yōu)化, 使程序無沖突地并行執(zhí)行[ 6] 。MPEG 4 編碼程序中包含大量的循環(huán)體, 例如計(jì)算量化、DCT、半像素插值、運(yùn)動(dòng)補(bǔ)償和構(gòu)建重建幀等。這些循環(huán)體代碼并不復(fù)雜, 且執(zhí)行次數(shù)頻繁, 占據(jù)了編碼的絕大部分時(shí)間, 因此循環(huán)體的優(yōu)化是重點(diǎn)。本文所采取的代碼優(yōu)化為C 語言優(yōu)化和編寫線性匯編兩個(gè)步驟,主要從消除數(shù)據(jù)相關(guān)性、數(shù)據(jù)打包和循環(huán)體的軟件流水3個(gè)方面進(jìn)行優(yōu)化。

            3. 1 針對(duì)C語言的優(yōu)化

            C 代碼的優(yōu)化主要依靠開發(fā)環(huán)境CCS 的編譯器完成, 編程者需要合理選擇編譯選項(xiàng), 并利用特定的關(guān)鍵字和指令向編譯器提供優(yōu)化信息 。例如關(guān)鍵字rest rict 用來消除數(shù)據(jù)間的相關(guān)性, 編譯器從而可以安排語句的并行執(zhí)行 ; 內(nèi)聯(lián)函數(shù)_ nasser t 有助于數(shù)據(jù)的打包處理; 宏指令# pragma MU ST _IT ERAT E 告訴編譯器有關(guān)循環(huán)迭代次數(shù)的信息, 編碼器會(huì)根據(jù)這一信息進(jìn)行軟件流水。

            3. 2 用線性匯編改寫關(guān)鍵代碼

            線性匯編是TMS320C6000 特有的一種編程語言, 介于高級(jí)語言和匯編語言之間。它可以指定指令用到的寄存器和功能單元, 更易于對(duì)數(shù)據(jù)的打包處理。

            線性匯編代碼的并行處理和軟件流水由匯編優(yōu)化器完成, 編程者需要熟悉C64x DSP 的CPU 結(jié)構(gòu)和指令集, 認(rèn)真設(shè)計(jì)代碼并充分利用編譯器的反饋信息合理修改代碼, 才能寫出高質(zhì)量的線性匯編。本設(shè)計(jì)中程序主框架采用C 語言編寫, 其它各關(guān)鍵部分的代碼采用線性匯編實(shí)現(xiàn)。

            4 結(jié)果分析

            本壓縮系統(tǒng)在對(duì)標(biāo)準(zhǔn)Foreman 序列、地面人群及道路車輛等視頻序列進(jìn)行壓縮測(cè)試。對(duì)D1 分辨率視頻序列能夠?qū)崿F(xiàn)25 幀/ 秒實(shí)時(shí)的壓縮編碼, 壓縮碼率為1. 8 Mb/ s, 解碼圖像視覺效果良好, 經(jīng)編幀后輸出250KB/ s 恒定基帶碼流。在圖像傳輸中沒有出現(xiàn)數(shù)據(jù)擁塞和丟失現(xiàn)象。有效滿足了高清晰機(jī)載圖像幀察的目的。

            5 結(jié)束語

            本文以TMS320DM642 芯片為中心, 詳細(xì)介紹了機(jī)載圖像實(shí)時(shí)壓縮系統(tǒng)的設(shè)計(jì)及MPEG 4 實(shí)時(shí)編碼器的優(yōu)化。系統(tǒng)經(jīng)測(cè)試實(shí)現(xiàn)了高分辨率圖像的實(shí)時(shí)壓縮和實(shí)時(shí)編幀傳輸, 滿足了系統(tǒng)設(shè)計(jì)需求。本文采用MPEG 4Simlpe Profile 算法, 在算法方面還有一定的研究空間。


          上一頁 1 2 下一頁

          關(guān)鍵詞: 圖像壓縮

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();