<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è) > 模擬技術(shù) > 設計應用 > 基于DM642的X.264編碼器優(yōu)化

基于DM642的X.264編碼器優(yōu)化

作者: 時(shí)間:2011-10-26 來(lái)源:網(wǎng)絡(luò ) 收藏
從表中可以看到,采用P幀半像素搜索方式對編碼速度提升30%以上,并且視覺(jué)上解壓出來(lái)的圖像沒(méi)有明顯失真。

  (3)對全像素塊運動(dòng)預測搜索的方式,默認為HEX(正六邊形搜索半徑為2),在對比測試了DIA(菱形搜索,半徑為1)和UMH(可變半徑六邊形搜索)后,對比了速率和峰值信噪比后,發(fā)現在峰值信噪比相差很小的情況下DIA搜索速率最快,本文選擇DIA作為運動(dòng)預測搜索方式。表4給出3種方式的對比結果:

  

基于DM642的X.264編碼器優(yōu)化

  2.2 代碼優(yōu)化

  需要有效的利用的特性,如軟件流水,芯片特性和指令集等,才能有效的提高X.264平臺的編碼效率。為了X.264能夠充分的利用起的特性,需要結合DM642本身的特點(diǎn)對移植過(guò)后的X.264代碼進(jìn)行優(yōu)化,才能夠提高X.264在DM642上執行的效率。

  TI公司的DSP開(kāi)發(fā)軟件CCS提供了功能非常強大的編譯器,編譯工具可以對代碼進(jìn)行各種優(yōu)化,以提高代碼的執行速度,減小代碼尺寸。這些優(yōu)化包括了簡(jiǎn)化循環(huán)、軟件流水、語(yǔ)句和表達式的順序重排和分配變量到寄存器。利用CCS編譯器進(jìn)行優(yōu)化后,仍然不能滿(mǎn)足視頻壓縮的需求,需要繼續對DM642上的X.264進(jìn)行優(yōu)化。

  (1)內聯(lián)函數。內聯(lián)函數是指用函數本身來(lái)代替函數調用這一過(guò)程。當調用內聯(lián)函數時(shí),C/C++源代碼把此函數插入到調用點(diǎn),而不采用傳統的跳轉。將函數設定為內聯(lián)函數后,可以去掉復雜的函數調用過(guò)程來(lái)提高函數的執行效率,而付出的代價(jià)是增加了代碼所占用的空間。使用關(guān)鍵字inline定義內聯(lián)函數,在X.264編碼器中的預測部分對其中一個(gè)頻繁調用的函數設置為內聯(lián)。代碼如下:

  static inline inI clip_uint8(int a)

  (2)restrict關(guān)鍵字。為了幫助編譯器確定存儲器相關(guān)性,可以使用關(guān)鍵字restrict來(lái)限定指針、引用或數組。使用restrict關(guān)鍵字是為了確保其限定的指針在聲明的范圍內,是指向特定對象的惟一指針。編譯器在讀取函數的指針,數據時(shí),采取保守的辦法,認為它們是相關(guān)的。這時(shí)編譯出的代碼必須執行完前次寫(xiě)操作,才能開(kāi)始下次讀取操作。加入restrict關(guān)鍵字后,編譯器將認為指針和數組沒(méi)有相關(guān)性,能夠并行提取數據。

  (3)軟件流水。軟件流水式編排循環(huán)指令是能夠使循環(huán)的多次迭代并行執行的技術(shù)。編譯器總是力爭使用軟件流水技術(shù)。軟件流水是DSP的關(guān)鍵技術(shù),它利用的是算法中存在的指令并行性的特點(diǎn),使一個(gè)循環(huán)的多次迭代同時(shí)進(jìn)行??偟貋?lái)說(shuō),當使用編譯器優(yōu)化的情況下,代碼尺寸小,程序性能更優(yōu)。x.264代碼含有很多循環(huán)操作,故提高循環(huán)體指令的并行度使循環(huán)能夠軟件流水是提高編碼效率的有效途徑之一。

  (4)函數合并。函數調用的過(guò)程中,要執行一些額外的寄存器。在編碼過(guò)程中DCT、量化、zigzag、IDCT和反量化函數調用都非常頻繁,但代碼段都很短,部分代碼只包含一個(gè)循環(huán)操作或者賦值操作。反復的調用會(huì )花費大量運行周期在函數調用上。為減少不必要的操作,提高速度,將DCT變換、量化、反量化和反DCT變化的整個(gè)過(guò)程進(jìn)行優(yōu)化,將幾個(gè)函數合并到一個(gè)函數中。圖1所示為合并結構。

  

基于DM642的X.264編碼器優(yōu)化
2.3 DM642的優(yōu)化

  (1)CACHE優(yōu)化。DM642采用了兩級CACHE的存儲器結構,兩級CACHE主要用于對程序和數據的緩存。CPU直接和一級CACHE連接,一級CACHE包括L1P(程序)和L1D(數據),大小分別為16 KB,分別占用獨立的存儲;一級CACHE的存儲速度與CPU處理速度相同。一級CACHE與二級CACHE相連,稱(chēng)為L(cháng)2,大小為256 kB,可以對程序和數據進(jìn)行統一存取,L2 CACHE作為L(cháng)1CACHE和片外存儲器之間的一個(gè)橋梁,可以由設計人員自行配置大小,分為SRAM和CACHE。L2CACHE的速度為CPU的一半。經(jīng)過(guò)試驗對比,將L2分為128 kBCACHE和128 kB SRAM。將部分調用比較頻繁的函數和數據常量放在L2SRAM中,以提高讀寫(xiě)速度。

  (2)EDMA。EDMA是增強的直接存儲器訪(fǎng)問(wèn),增加了高達64個(gè)傳輸通道,每個(gè)通道相互獨立,且通道間的優(yōu)先級可以設置。CIF格式的圖像格式為352×288,一幀數據需要101 376 b,L2的CACHE容量有限,不能將所需要的參考幀和當前編碼幀都放到片內CACHE中。X.264處理的最小模塊為宏塊16×16,將當前編碼宏塊保存到片內CACHE中來(lái)提速,DSP運行的同時(shí)將片外的下一編碼宏塊傳輸到片內。采用EDMA的ping-pong緩沖技術(shù)可以對X.264編碼器的數據傳輸部分進(jìn)行優(yōu)化。這樣既利用了DM642片內數據存儲速度快的優(yōu)點(diǎn),又避免了使用較多的片內存儲空間。ping-pong緩沖結構中EDMA與CPU的工作原理如圖2所示。

  

基于DM642的X.264編碼器優(yōu)化

  3 優(yōu)化結果

  完成對代碼的優(yōu)化過(guò)后,通過(guò)CCS的編譯將x2



關(guān)鍵詞: DM642 X.264 編碼器

評論


相關(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>