<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 基于A(yíng)DSP-BF561的H.264視頻編碼器的實(shí)現

基于A(yíng)DSP-BF561的H.264視頻編碼器的實(shí)現

作者:崔海燕,王卿 時(shí)間:2008-07-03 來(lái)源:電子元器件應用 收藏

  3.2從機到的程序移植

本文引用地址:http://dyxdggzs.com/article/85224.htm

  要將端精簡(jiǎn)的程序移植到A-BF561的開(kāi)發(fā)環(huán)境Visual 下,以使其能夠初步運行,所需考慮的主要是語(yǔ)法規則和內存分配等問(wèn)題。 (1)除去所有編譯環(huán)境不支持的函數

  主要是除去某些與時(shí)間相關(guān)的函數、將文件操作修改為讀取文件數據緩存的操作、刪除SNR信息收集等DSP平臺實(shí)現不需要的代碼。還要注意:函數的聲明、數據結構的類(lèi)型要符合DSP的C語(yǔ)言格式。

  (2)添加與硬件相關(guān)的代碼

  該代碼包括系統初始化、輸出模塊代碼、中斷服務(wù)程序和碼速率控制程序等。

  (3)配置LDF文件

  因為剛移植的代碼往往數據和程序都非常大,SRAM里面肯定是放不下的,這時(shí)鏈接就會(huì )有問(wèn)題。剛開(kāi)始的時(shí)候,最好把所有的程序和數據都放在SDRAM里,這樣鏈接就不會(huì )有問(wèn)題了。Stack和heap情況類(lèi)似,都先放到SDRAM。一般在開(kāi)始時(shí),往往需要的是一個(gè)可以正確運行的程序,而速度倒在其次。

  (4) Malloc問(wèn)題的解決

  DSP下的開(kāi)發(fā),malloc是一個(gè)需要解決的問(wèn)題。如果動(dòng)態(tài)申請內存,就算可以運行,其結果往往也是不對的。所以,最好進(jìn)行靜態(tài)分配,可用數組的形式分配。

  移植完畢后,即可實(shí)現基于A(yíng)DSP-BF561的H_264編碼,此時(shí)如果速度達不到實(shí)時(shí)編碼的要求,還可以進(jìn)一步進(jìn)行優(yōu)化。

  4 DSP平臺上的代碼優(yōu)化

  在Visual DSP開(kāi)發(fā)環(huán)境下對代碼進(jìn)行優(yōu)化的主要方法有C語(yǔ)言級優(yōu)化和匯編級優(yōu)化。

  4.1 C語(yǔ)言級優(yōu)化

  通過(guò)VC6的profile分析工具發(fā)現:移植與優(yōu)化的重點(diǎn)應在運動(dòng)估計部分。筆者通過(guò)比較各種算法后選擇了菱形(DS)搜索法。DS算法可采用兩種搜索模板,分別是有9個(gè)檢索點(diǎn)的大模板LD-SP(Large Diamond Search Pattern)和有5個(gè)檢索點(diǎn)的小模板SDSP(Small Diamond Search Pattern)。其菱形搜索示意圖如圖3所示。搜索時(shí),先用大模板計算,當最小塊誤差SAD點(diǎn)出現在中心點(diǎn)處時(shí),再將大模板LDSP換為SDSP進(jìn)行匹配運算,這時(shí),5個(gè)點(diǎn)中具有最小SAD者若為中心點(diǎn),則該點(diǎn)即為最優(yōu)匹配點(diǎn),然后結束搜索,否則將繼續以此點(diǎn)為搜索中心進(jìn)行SPSS搜索。

  經(jīng)JM實(shí)驗證實(shí),采用此種方法,可以節約大約10%的運行時(shí)間,且代碼量無(wú)太大增長(cháng)。

  針對DSP的特點(diǎn)和相關(guān)的硬件指令,設計時(shí)可對代碼進(jìn)行如下優(yōu)化:

  ◇對程序結構進(jìn)行調整。對不適合DSP執行的語(yǔ)句進(jìn)行改寫(xiě),以提高代碼的并行性。
  ◇宏的使用。也就是將有些較短,執行單一、調用次數多的函數改為宏。
  ◇循環(huán)優(yōu)化是將C語(yǔ)言中的for循環(huán)打開(kāi),排流水線(xiàn),提高并行性。
  ◇計算表格化是將運行時(shí)計算的參數做成便于查找的表格常數數值,從而將運行計算轉化為編譯運算。如在量化和反量化程序中進(jìn)行移位位數的處理時(shí),可先計算出所有可能的值,而后來(lái)的運算就可以通過(guò)查表得到數值。
  ◇浮點(diǎn)數定點(diǎn)化。因為Blackfin561并不支持浮點(diǎn)運算,但原始程序代碼卻是浮點(diǎn)運算的格式,所以必須改成定點(diǎn)運算,而其修改后的執行速度也會(huì )加快很多。
  ◇盡量用邏輯運算代替乘除運算。由于乘除運算指令的執行時(shí)間要遠遠大于邏輯移位指令,尤其是除法指令,故應盡量用邏輯移位運算來(lái)代替乘除運算,以加快指令的運行速度。
  ◇盡量少進(jìn)行函數調用。對一些小的函數,最好是用適當的內聯(lián)函數將其直接寫(xiě)入主函數中進(jìn)行替代,而對于一些調用不多的函數,也可以直接寫(xiě)入主函數內,這樣可減少不必要的操作以提高速度。
  ◇減少判斷轉換。
  ◇盡量靜態(tài)分配內存。
  ◇調用系統提供的豐富的內聯(lián)函數。

  此外,為了充分發(fā)揮DSP的運算能力,還必須從它的硬件結構出發(fā),最大限度地利用它的8個(gè)功能單元,使用軟件流水線(xiàn)盡量讓程序無(wú)沖突地并行執行。也可將最耗時(shí)的函數抽取出來(lái),用線(xiàn)性匯編改寫(xiě),從而最大限度的利用DSP的并行性。

  4.2匯編級優(yōu)化

  匯編級優(yōu)化主要指如下幾點(diǎn)操作:

  (1)使用寄存器資源

  Blackfin561提供了8個(gè)32位數據寄存器以及一系列的地址寄存器。使用寄存器代替局部變量時(shí),若局部變量用來(lái)保存中間結果,那么用寄存器代替局部變量可省掉很多訪(fǎng)問(wèn)內存的時(shí)間。

  (2)使用專(zhuān)用指令

  Blackfin561提供有求最大值、最小值、絕對值、CUP及大量視頻專(zhuān)用指令,應可能用多位的指令來(lái)訪(fǎng)問(wèn)少位的數據。通過(guò)使用這些指令能大大提高代碼的執行速度。如用int型(32位)訪(fǎng)問(wèn)2個(gè)short(16位)型數據時(shí),可將其分別放在32位寄存器的高16位和低16位字段。這樣,數據讀取效率可以提高1倍,從而減少內存訪(fǎng)問(wèn)次數。

  (3)使用并行指令和向量指令

  ADSP-BF561中每條通用指令都可以和一條或兩條存儲器訪(fǎng)問(wèn)指令并列執行,這樣有利于A(yíng)DSP-BF561的流水線(xiàn)滿(mǎn)負荷運行,更充分發(fā)揮ADSP-BF561的數據處理能力。

  (4)合理存放反復調用的程序段

  把被反復調用的程序段(如DCT變換和IDCT變換)放在片內程序存儲區中,把頻繁用到的數據段(如編碼表)放在片內數據存儲器中,而把不常用到的程序和數據段放在片外存儲器中,以避免對程序或數據進(jìn)行不必要的反復搬移。

  (5)合理使用內外存儲器

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

  (6)DMA的使用

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

  5 結束語(yǔ)

  經(jīng)過(guò)用ADSP-BF561匯編語(yǔ)言改寫(xiě)的對應函數的優(yōu)化程序經(jīng)調試運行后,DCT,IDCT部分效率提高了大約15倍,去塊濾波部分效率提高了大約6~7倍。對于模塊中的其它部分函數,也同樣取得了良好的優(yōu)化結果。說(shuō)明其優(yōu)化工作確實(shí)達到了良好的效果。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 視頻編碼 處理器 通信 PC DSP

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>