H.264算法的DSP移植與優化

摘要:在TMS320DM643平臺上實現H.264基檔次編碼器的移植與優化顯得格外實用和必要。基于對DSP平臺的結構特性和H.264的計算復雜度分析,主要從核心算法、數據傳輸和存儲器/Cache使用幾方面對H.264編碼器進行了優化。實驗結果表明,對于CIF格式的視頻序列,優化后的H.264編碼器能夠達到每秒高于24幀的編碼速度,滿足了視頻處理對于實時性的要求。
關鍵詞:H.264編碼;TMS320DM643;算法優化

0 引言
??? 針對視頻通信中傳輸帶寬或存儲容量與視頻質量的矛盾,ITU-T的VCEG和ISO/IEC的MPEG聯合制定了低碼率視頻壓縮標準H.264。相對于以往的標準,H.264除了增強了網絡適應能力外,大幅度提高了壓縮編碼效率,在相同的碼率下能夠獲得更高的主客觀質量。2003年5月,H.264/AVC標準正式推出,正式名稱為H.264 MPEG-4 part 10 AVC(Advanced Video Coding),以下簡稱為H.264標準。

1 編碼器
??? H.264仍采用圖像預測和變換編碼相結合的編碼結構,編碼器采用的仍是變換和預測的混合編碼法。輸入的幀或場以宏塊為單位被編碼器處理。首先,按幀內或幀間預測編碼的方法進行處理。如果采用幀內預測編碼,其預測值PRED是由當前片中前面己編碼的參考圖像經運動補償(MC)后得出,與解碼所需的一些邊信息(如預測模式量化參數、運動矢量等)一起組成一個壓縮后的碼流,經NAL(網絡自適應層)供傳輸和存儲用。為了提供進一步預測用的參考圖像,編碼器必須有重建圖像的功能。因此必須使殘差圖像經反量化、反變換后得到。為了去除編碼解碼環路中產生的噪聲,為了提高參考幀的圖像質量,從而提高壓縮圖像性能,設置了一個環路濾波器。即重建圖像可用作參考圖像。
1.1 視頻編碼的硬件結構
??? H.264視頻編碼器硬件結構如圖1所示。FLASH模塊用于存放程序,EEPROM用于存放編碼系統的初始化配置信息和系統MAC層地址。片內SRAM用于緩存當前正在處理的宏塊數據,以及一些頻繁調用的數據段和程序段。外接存儲器SDRAM主要用于存儲原始幀、參考幀和重建幀的源數據。片內、片外存儲器之間的數據傳輸借助EDMA在后臺操作,這樣可并行處理數據傳輸和運算操作,提高效率。


1.2 DSP芯片簡介
??? DM643的EDMA可在64個獨立的通路上,提供超過2GB/s的I/O帶寬。此外,運用兩級片內高速緩存Cache和64位外部存儲器接口(EMIF),可方便地實現與同步/異步存儲器的無縫連接。DM643還集成了多種新型的片內外設,以適應于媒體數字化處理和網絡通信的應用:(1)三個可配置的視頻端口,提供和通用視頻A/D和D/A芯片的無縫接口;(2)壓控晶體振蕩器插值控制端口,用于與MPEG-2傳輸流接口時的系統時鐘恢復;(3)管理數據輸入輸出模塊,用于列舉系統中的物理層設備并監視它們的連接狀態。

1.3 H.264編碼算法的主要特征
??? H.264編碼算法進行了一系列的改進和擴展,明顯改善編碼效率的特征如下:
??? (1)網絡適配層NAL:傳統的視頻編碼編完的視頻碼流在任何應用領域下都是統一的碼流模式,視頻碼流僅有視頻編碼層。(2)自適應塊大小編碼模式:H.264允許使用16×16、16×8、8×16、8×8、8×4、4×8、4×4等子塊預測和編碼模式,采用更小塊和自適應編碼的方式,使預測殘差的數據量減少,進一步降低了碼率。(3)多幀運動補償技術:傳統的視頻壓縮編碼采用一個或兩個解碼幀作為當前預測的參考幀。

2 算法優化
??? 如上所述,運動估計,整數余弦變換/反整數余弦變換,量化是H.264編碼器中最耗時的部分。因此,這3項是優化的主要對象。
2.1 運動估計
??? 視頻序列圖像在時間上存在很強的相關性,采用運動估計和運動補償技術可以消除時間冗余以提高編碼效率。運動估計粗略分為全局運動估計、基于像素點運動估計、基于塊運動估計和基于區域地運動估計。
??? H.264標準采用塊運動估計匹配算法,它包含匹配原則(主要有MAD、MSE和NCCF三類),搜索范圍,搜索方案等。但是搜索算法是影響塊匹配算法性能的主要因素。在整像素的運動估計中,采用了基于菱形搜索算法。
2.2 CPU與緩存之間的數據傳輸
??? DM643有一個兩級(Level2)高性能Cache結構,它們都有16 kB的獨立存儲器,并且均可以被存入兩級Cache中。兩級Cache可以被設置為Cache,SRAM或者Cache,SRAM的一部分。CPU與Cache之間的數據讀取過程如圖3所示。

2.3 ICT/反ICT和量化
??? 原始的ICT/IICT和量化算法不能夠充分發揮DSP的并行優勢,以至于8個功能單元在編碼的過程中都處于閑置狀態,存儲器中的數據被頻繁重復的訪問也導致了DSP運行效率的降低。在圖4所示中,提出對于ICT/IICT和量化部分的算法圖例,一個宏塊中所有基于4×4塊的IC-T/IICT變換都能夠同時執行,這充分利用了DSP的8個功能單元。實驗結果表明,經量化后,計算一個ICT/HCT的4×4塊僅僅需要12個平均周期。這一優化不但提高了算法的速度又顯著地降低了碼流大小,使視頻信號的實時處理成為可能。



3 實驗結果分析
??? 在600 MHz的TMS320DM643平臺上,通過開發軟件CCS載入開源代碼X264構架對CIF格式的5個視頻序列(Akiyo,News,Foreman,Footba-ll,Mobile)進行了相關實驗。在這5個視頻序列中,Akiyo和News序列有較低的運動級別,背景變化畫面人物運動幅度不大,而Foreman和Fo-otball有高的運動級別,運動劇烈有場景切換,最后一種Mobile序列則有復雜的背景。表1列出了在量化步長(QP)為25的情況下,原始H.264編碼器和優化后的H.264編碼器之間的對比結果。從中可以看出,原始的編碼器的編碼速度是2~3 f/s,而優化后的編碼速度是前者的10倍多。



4 總結
??? 本系統采用TMS320DM643作為的核心處理器,這款DSP芯片主要是為實現低功耗、高性能而專門設計的定點DSP芯片。它具有高度靈活的可操作性和高速的處理能力,先進的多總線結構,主要應用在通信、數據采集等系統中,特別在實時性方面效果最佳。
??? 本設計借助開源代碼X264在CCS開發平臺進行試驗,測試了編碼優化前后的幀率等各種性能,旨在尋求更高效的視屏編碼算法。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453628.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDA*與A*

我實在懶得寫博客了,直接放上來之前講課做的的PPT得了。 PPT_Source Code.zip 轉載于:https://www.cnblogs.com/zzzc18/p/8323927.html

java 子類 父類 轉換_Java子類與父類之間的類型轉換

1.向上轉換父類的引用變量指向子類變量時,子類對象向父類對象向上轉換。從子類向父類的轉換不需要什么限制,只需直接蔣子類實例賦值給父類變量即可,這也是Java中多態的實現機制。2.向下轉換在父類變量調用子類特有的、不是從父類繼承來的方法…

H.264視頻編解碼的代碼移植和優化

基于DSP系統開發的視頻編解碼系統,國內幾乎都是走的移植,優化的路線,并且移植的代碼,都是開源的。畢竟花費大量的人力,物力去開發一套自己的代碼,并不見得比一些成熟的開源代碼效率更高,健壯性更…

SublimeText2 快捷鍵

SublimeText2 快捷鍵,與對應功能一覽表: 快捷鍵功能ctrlshiftn打開新Sublimectrlshiftw關閉Sublime,關閉所有打開文件ctrlshiftt重新打開最近關閉文件ctrln新建文件ctrls保存ctrlshifts另存為ctrlf4關閉文件ctrlw關閉ctrlk, ctrlb切換側邊欄顯…

java-linux-eclipse配置

轉載于:https://www.cnblogs.com/sheying/p/8327517.html

n皇后問題java_經典n皇后問題java代碼實現

問題描述:在n*n的二維表格,把n個皇后在表格上,要求同一行、同一列或同一斜線上不能有2個以上的皇后。例如八皇后有92種解決方案,五皇后有10種解決方案。public class TestQueen {int n; //皇后的個數int num 0; // 記錄方案數int…

ffmpeg mplayer x264 代碼重點詳解 詳細分析

ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((ab1)>>1) #define avg4(a,b,c,d) ((abcd2)>>2) 顯而易見...,注意a,b宏表達式可能引出的副作用 2 SIMD by software…

nagios監控服務器的搭建

nagios 概述: 開源的免費的網絡監視工具。 監控: windows, Linux,Unix,交換機和路由器。報警。 Nagios是插件式的結構,它本身沒有任何監控功能,所有的監控都是通過插件進行的,因此其是高度模塊化和富于彈性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜歡鉆研問題的JS同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法&#…

java棧頂元素_棧在Java類庫中的實現

棧是一種后進先出的數據結構。在它之上,主要有三種操作:(1)判斷棧是否為空——empty();(2)在棧頂添加一個元素——push(E);(3)刪除并返回棧頂元素——pop()。在Java類庫中,Stack類實現了棧,它繼承自Vector類…

LoadRunner遠程監測Centos服務性能配置過程

由于公司的需要,經過一段時間的探索,參考了很多業內人士的文檔,終于完成LoadRunner遠程監測centos服務器的配置過程。 首先監測所需要服務是否存,如果存在就不必要安裝,如果不存在,需要安裝對應的服務。 監…

day 68 增刪改查 語法

1 普通正則 2 分組正則 url(r/blog/(\d)/(\d),views.blog) blog(request,arq1,arq2) 按照位置傳參 3 分組命名 url(r/blog/(?P<year>\d)/(?P<month>\d),views.blog) blog(request,year,month) 4 用name 指定別名 url(r/blog/(?P<year>\d)/(?P…

編譯器入門 語法分析器 java_從零開始寫個編譯器吧 - Parser 語法分析器

Parser(語法分析器)的編寫相對于 Tokenizer (詞法分析器)要復雜得多&#xff0c;因此&#xff0c;在編寫之前可能也會鋪墊得更多一些。當然&#xff0c;本系列旨在“寫出”一個編譯器&#xff0c;所以理論方面只會簡單介紹 tao 語言所涉及的部分。之前的幾章中&#xff0c;我純…

017——數組(十七) asort ksort rsort arsort krsort

<?php /*** 數組 asort ksort rsort arsort krsort*///asort()對數組按值排序&#xff0c;保留鍵名&#xff1a; /*$arrarray(bbs_url>bbs.lantian.com,web_url>www.lantian.com,bbs_name>免費視頻教程,www_name>PHP項目開發, ); asort($arr); print_r($arr);…

v4l打開video設備 ,執行VIDIOC_DQBUF,出現Resource temporarily unavailable 問題

如果你在執行VIDIOC_DQBUF突然提示以下錯誤&#xff1a; error: VIDIOC_DQBUF: Resource temporarily unavailable 那么很可能是你使用非阻塞方式打開設備文件的造成的。 Resource temporarily unavailable是一種EAGAIN的錯誤。EAGAIN是較常見的一種錯誤(比如用在非阻塞操作…

ubuntu下無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用)

sudo apt-get install git E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用) E: 無法鎖定管理目錄(/var/lib/dpkg/)&#xff0c;是否有其他進程正占用它&#xff1f; 當執行sudo apt-get相關的命令&#xff0c;會顯示上面類似的錯誤 參考別人的解決方法是 sudo r…

java get方法不序列化_Java中的Json序列化,不容忽視的getter

在開發的過程中&#xff0c;經常會碰到和自己預期不一樣的情況。有的時候自己去研究一下還是很有趣的。這兩天在寫java web的時候&#xff0c;碰到了一個對象序列化的問題。問題重現public class AjaxJson {private boolean success;private String msg;private Object obj;pri…

mysql 通過echo的方式寫入數據庫 中文亂碼解決方案

echo "set names utf8;insert into xxx (path, sn, time, flag) values ($wav, $sn, $secs, op);" | MYSQL echo "set names utf8;insert into xxx (path, sn, time, flag) values ($wav, $sn, $secs, op);" 前面增加 set names utf8;

getParameter和getAttribute的區別

轉自http://blog.csdn.net/java_xiaobin/article/details/45363897 1.getAttribute是取得jsp中 用setAttribute設定的attribute 2.parameter得到的是string&#xff1b;attribute得到的是object 3.request.getParameter()方法傳遞的數據&#xff0c;會從Web客戶端傳到Web服務器…

java int字母,從Java中獲取int,也包含字母

How can I get the int value from a string such as 423e - i.e. a string that contains a number but also maybe a letter?Integer.parseInt() fails since the string must be entirely a number.解決方案Unless youre talking about base 16 numbers (for which theres …