AVS軟件解碼器的優化

AVS軟件解碼器的優化
董斌 , 姜昱明
(西安 電子科技大學計算機學院,陜西 西安,710071))
摘 要: 主要研究了AVS標準的視頻壓縮部分,指出了影響解碼速度的瓶頸并提出了一種優化方案.使
用從程序結構入手結合使用SIMD指令集的方案來優化AVS軟件解碼器.實驗結果表明優化方案可行并且
解碼器的運算速度得到了很大的提高.
關鍵詞: AVS;視頻壓縮;SIMD;優化
Optimization of AVS software decoder
DONG Bin , JIANG Yu-ming
(School of Computer Science and Engineering, XIDIAN university, xi'an, 710071)
Abstract: The video compression part of AVS(Audio Video Coding Standard) was mainly studied, the bottleneck
affecting the decoding speed of AVS decoder was pointed out and an optimization scheme was given. The software decoder
was optimized starting from program structure and in combination of SIMD instructions. The results of experiment shows the
scheme is available and the speed of the decoder is highly improved.
key words: AVS;video compression;SIMD;optimization
1 引言
近年來,視頻壓縮技術發展迅速,國際上出現了多種視頻壓縮標準和建議,如MPEG1,MPEG2,
MPEG4,H.261,H.263以及最近制定的H.264/AVC.我國在參與國際標準制訂的基礎上,提出了自主
的數字音視頻編解碼技術標準AVS,達到了當前的國際先進水平.
AVS標準包括系統,視頻,音頻和數字版權管理等四個主要技術標準和一致性測試等支撐標準.
視頻部分是最復雜的部分,主要針對高分辨率視頻(SDTV, HDTV等).從MPEG1開始國內外已有很多
個人和公司進行了大量編解碼器的優化工作,例如芬蘭Nokia研究中心的Ville Lappalainen[1][2],和
Tampere University of Technology 的Timo D.H m l inen [1][2]等人一直致力于H263,H26L和H264的
優化,美國的Vsoft公司在P4 3.0G的機器上實現了標清視頻的實時編解碼[3],這些優化工作對已有音
視頻標準的推廣和應用起到了極大的作用.
董斌,1979年生,男,河北滄州人,在讀碩士生; 共5頁第1頁
在優化過程中,SIMD擴展指令集被大量采用,大家熟知的MMX,SSE,SSE2,3DNow!等都是
這類擴展指令集,SIMD指令可以在一個CPU指令執行周期內用一道指令完成處理多個數據的并行操
作.為了便于優化代碼,一般使用指令集的Intrinsics函數,它是外表類似普通函數,需要使用Intel
的編譯器提供支持,可以被編譯器直接編譯成SIMD指令的函數集合,有關指令集和Intrinsics的使用
可以參考文獻[4][5]中的相關內容.
本文首先介紹了AVS標準的主要特點,接著介紹了解碼器的測試環境并對瓶頸部分進行簡要分
析,最后從程序結構和利用SSE2的Intrinsics兩個方面出發對瓶頸部分進行的優化,同時給出相應
實驗結果和本文的結論.
2 AVS視頻標準
AVS作為基于國際開放技術和我國自主研發的專利技術而制定出來的一套音視頻編碼標準,有
以下幾個特點[6]:
第一:幀內預測對亮度和色度均使用8x8塊大小,分別有5種和4種預測模式;幀間預測的運
動向量精確到1/4象素并且支持四種塊大小的運動補償預測, B幀中的宏塊可以采用5種編碼模式之
一進行編碼,最多只用兩個運動矢量,兩個參考幀進行幀間預測,提高了運功補償(MC)的精度;
第二:采用類似于DCT的8x8整數變換,整數變化后可以完全避免反變換中產生誤差,并將殘
差塊的變換和量化作為一個過程,;
第三:對量化后的變換系數使用基于上下文的變長編碼(CAVLC)方法進行熵編碼,為了提高編
碼的效率而定義了19個查找表,對于其他待編碼參數使用零階通用哥倫布編碼;
3 測試環境和瓶頸分析
測試在一臺P4 3.2GHz,1G內存,L1 Cache為20KB, L2 Cache為512KB的機器上進行,操作
系統使用Windows XP professional ,優化分析軟件使用Intel Vtune7.1, 編譯器使用Intel Complier 8.0,
優化選項使用Maximize Speed.
測試所使用的序列及壓制測試碼流的條件參照文獻[7]選定.為了減少其他運行中程序和解碼過
程中I/O操作的影響,實驗過程中不將重構好的圖像寫入硬盤并在計算機重新啟動后進行測試,最后
所得的數據取15次解碼的平均時間.
表1 優化前各個解碼模塊的性能數據 表2 優化后各個解碼模塊的性能數據

解碼每個宏塊過程主要包括熵解碼(VLD),反量化(IQ),反變換(IT),運動補償(MC),重構(MR)
和循環濾波(DeBlock)等6個模塊以及初始化等相關操作,試驗中以解碼QP為32的city序列(碼率為
3.7Mbit/s @ 30.00 Hz)為例使用Intell Vtune7.1工具進行性能分析,得出解碼器優化前后每個解碼模塊
的性能數據,詳見表1和表2.其中的前3項數據采用基于事件的采樣(EBS[8]),就是對程序執行中各
種事件發生的次數進行采樣,由表1中的數據Clockticks[8]和Instructions Retired[8]表明MC模塊中指令
執行的頻率最高,MR和IQ+IT個模塊次之;L2 Cache Read Misses [8]表示從L2 Cache讀入數據時的失
效率,MC模塊是42.8%為最高,MR模塊次之.表1中最后兩項數據采用基于時間的采樣(TBS[8]),
在每個函數的入口和出口處設置標記計算每個函數的實際運行時間,占用解碼時間最多的模塊依次
共5頁第2頁
為MC,MR和IQ+IT,VLD和DeBlock模塊占用的解碼時間較少.根據以上這些解碼模塊的數據,
在優化時著重優化MC,MR和IQ+IT 三個模塊.
4 AVS軟件解碼器的優化
4.1 程序流程的優化
首先,將宏塊的運動向量,預測模式,參考幀索引等初始化操作集中到幀解碼一級,使用memset
函數進行批量處理;
其次,對函數結構進行調整,將解碼宏塊的過程分為解碼亮度和色度宏塊,而不是統一的使用
一個函數進行解碼,這種處理可以減少了跳轉的次數和分支預測失敗的可能性;并且將語句較少的
函數直接用展開到調用它的函數中(函數提升),減少了函數調用過程中壓棧出棧所消耗的時間.
最后,對重構部分的函數結構進行調整,這個模塊占用較多的解碼時間主要是因為不必要的數
據拷貝導致訪存的增加,并且函數內部還要進行色度重構和亮度重構的判斷.優化中減少了程序中
冗余的數據拷貝過程,直接在運動補償后進行圖像重構,并且分別進行亮度和色度的重構操作來減
少分支預測失敗引起的延遲.
4.2 動補償過程的優化
由表1可知MC占用大部分解碼時間,因為這一部分既是計算密集又是訪存密集.計算密集是
因為如上所述的插值過程要通過濾波器精確計算每個分象素預測點的值,而且為了保證預測值在
[0,255] 范圍內,要對計算出來的預測值進行飽和操作;訪存密集是因為參考幀不能全部裝入L2
Cache中,例如存儲標清序列(720*576)每個亮度參考幀至少要占用607.5KB存儲空間,而Pentium4
處理器的L2 Cache容量為512KB,CPU要頻繁的訪問內存來取得操作數,由表1可知L2的讀失效
率為67.7%,可知程序執行時的訪存時間開銷巨大.
運動補償中使用運動矢量在參考圖像中找到預測參考樣本,當運動矢量指向的參考樣本在參考
圖像外面時,使用圖像內距離參考樣本最近的整數樣本(邊緣或角樣本)代替,參考軟件中通過對數組
下標取min和max函數實現,這種處理方法增加了判斷過程,使CPU的流水線經常處于斷流狀態,
消耗了很多處理時間.優化中采用padding方法將參考圖像向四周進行擴展來減少判斷,擴展出來
的樣本點取參考圖像中最近的邊界點,并且將原來數組的水平和垂直下標分別加上padding的寬度
來能保證能正確訪問擴展后的圖像.運動矢量的有效范圍很大(AVS的基準檔次6.2級別規定最大垂
直運動矢量范圍(幀編碼)[-512, +511.75],但是如果運動補償所需的參考樣本全在參考圖像外面時,
不論運動向量延伸多大,所得到的預測塊象素值都是相同的,所以將padding的寬度定為16.文獻
[1]中提及使用padding的方法由于增加了訪存需求而不會得到較好的效果,我們認為這是由于該文
獻中的優化主要針對QCIF這種較小格式進行優化,所以對padding的寬度比較敏感所致,而本文中
的優化針對較大格式720P的圖像進行.實驗中,padding操作不會超過解碼時間的0.1%,因此可以
忽略.
亮度插值中得到一個1/4象素點最多使用13*8或者8*13個參考樣本, 可以通過MV找到參考幀
中的參考塊,并且將此參考塊讀入新開一塊13*13大小的buffer,這樣在取得參考幀象素時可以減少
L2 Cache的讀失效率.為了保證預測值在[0,255]內,原來程序中使用逗號表達式操作來保證預測值
在[0,255]范圍內,SSE2指令的飽和操作指令可以方便的將預測值限定在此范圍內,通過以上優化,
MC部分的數據見表2可得Clockticks,L2 Cache Read Misses 和Self time[8] 三項數據都比優化前有明
顯的減少,這個模塊解碼時間是原來的18.9%.
4.3 反變換和反量化部分的優化
AVS中采用基于8x8塊大小的類DCT變換,其變換系數采用整數后可以完全避免反變換中產
生誤差,保證不會損失數據的精度,使得編解碼端的數據匹配,其核心變換矩陣和具體變換過程見文
獻[9].反變換采用蝶型快速算法,中間數據 控制在16位二進制數以內.每次變換過程中所需進行變
共5頁第3頁
換的64個數據可以一次裝入CPU的L1 Data Cache,由表1可知L2 Cache Read Misses 只有0.3%,
所以這個模塊是計算密集型的.在不改動蝶型算法的前提下對反變換使用SSE2的Intrinsics函數進
行優化,充分發揮SIMD指令集的優勢.優化后的各項數據見表2,Clockticks和Self time兩項數據
均比優化前減少,解碼時間比優化前快了4.4倍.
5 結論
本文提出了一種AVS視頻解碼器的優化方案,該方案主要從修改程序結構和針對瓶頸模塊優化
兩個方面入手.修改程序結構方面主要是使得程序的模塊化更加清晰并且優化了內存數據的讀取;
優化時間瓶頸時主要采用Intrinsics函數重寫瓶頸模塊.
表 4 解碼參考序列的測試結果
在優化工作中為保證不降低解碼后圖像的質量而沒有涉及到算法級的優化,驗證實驗采用選取
了4個典型的測試序列并分別對每個序列使用4個不同的QP值來進行編碼,所得的壓縮碼流的碼
率范圍在0.3~11.4Mbps之內.用未優化和優化過的解碼器分別對16個碼流進行解碼測試,所得解
碼速度因為各個碼流的碼率不同而相差較大,測試的詳細結果見表3(NOPT和OPT表示解碼器優化
前后的解碼速度,f/s表示幀/秒),優化后解碼器速度最慢的是25.4f/s,最快為39.5f/s,分別是未優
化解碼器速度的4.2和5倍,解碼速度大為提高.
參考文獻:
[1]V.Lappalainen,A.Hallapuro, and T.D..H m l inen. .Complexity of optimized H.26L video decoder implementation
.IEEE Trans, Circuits Syst. Video Technol, VOL13, pp. 717-725, JUL 2003.
[2]V Lappalainen, T D. H m l inen, and P Liuha. Overview of research efforts on media ISA extensions and their usage
in video coding. IEEE Trans, Circuits Syst. Video Technol, VOL 12,pp.660-6701, AUG 2002.
[3]J.Yoshida. H.264 video coding surges into view
http://www.eetimes.com/article/ showArticle.jhtml articleId=18309407&sub_taxonomyID=6257
[4]Intel Corp. The IA-32 Intel Architecture Software Developer's Manual Volume 2 Instruction Set Reference . USA: Intel
Corp, 2003.
[5]Intel Corp. Intel C++ Class Libraries for SIMD Operations User's Guide. USA: Intel Corp, 2002.
[6]Fan..Liang, Siwei Ma, Feng Wu. Overview of AVS Video Standard . ICME2004;
[7].AVS視頻專題組. 視頻編碼技術測試通用條件 . AVS N1055, 2003.7;
[8] Intel Corp. Help for VTune(TM) Performance Analyzer. USA: Intel Corp, 2003.
[9]AVS工作組. 音視頻編碼 第二部分:視頻(草案).北京:AVS工作組, 2003.11;
共5頁第4頁
本人聯系方式:
通信地址:董斌 西安電子科技大學176#信箱
郵政編碼:710071,聯系電話:13700287560,E-mail:bdong@126.com
碩士導師:姜昱明,入學年月:2002年9月,主要研究方向:計算機圖形學與圖像處理
共5頁第5頁

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

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

相關文章

IOS7.1.1真的像網上流傳的那么好?沒有任何問題么??

IOS7.1.1推送更新之后到處看到網上說711好的~~ 那么IOS7.1.1真的像網上現在流傳的那么好么? 其實不然,IOS7.1.1目前眾多網友反映說升級ios7.1.1之后APPstore連接不上了,提示無法連接到APPstore。 這個問題也不難解決~還是之前的老辦法~ 那么今…

三校生計算機對口本科有哪些學校,寶山三校生五月對口高考報名

多次復習生活不可能像你想象得那么好,但也不會像你想象得那么糟。我覺得人的脆弱和堅強都超乎自己的想象。多種方式結合起來復習單一的復習方法,易產生消極情緒和疲勞,如果采用交談復習法、討論復習法、自我檢查復習法多樣化的復習方法&#…

localhost 已拒絕連接_【Python】MongoDB數據庫的連接和操作

安裝Python 要連接 MongoDB 需要 MongoDB 驅動。pip安裝:python3 -m pip3 install pymongo創建數據庫import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已設置為checked--true-但不勾選問題解決方法(只第一次勾選有效)

一、出現的問題及解決方法: 今天在寫一個table相關插件的時候無意中發現了這樣一個問題,記得以前在寫這種控制checkbox選中與非選中的代碼時并沒有這種bug,當時也是用的checked屬性,而現在卻行不通了。 于是乎做了以下測試&#x…

Python 錯誤和異常小結[轉]

原文鏈接 http://blog.csdn.net/sinchb/article/details/8392827 事先說明哦,這不是一篇關于Python異常的全面介紹的文章,這只是在學習Python異常后的一篇筆記式的記錄和小結性質的文章。什么?你還不知道什么是異常,額... 1.Py…

Django REST framework 認證、權限和頻率組件

認證與權限頻率組件 身份驗證是將傳入請求與一組標識憑據(例如請求來自的用戶或其簽名的令牌)相關聯的機制。然后 權限 和 限制 組件決定是否拒絕這個請求。 簡單來說就是: 認證確定了你是誰權限確定你能不能訪問某個接口限制確定你訪問某…

高速率AVS整數變換的匯編實現與優化

1 引言 AVS標準Ⅲ采用的8x8整數變換在獲得較H.264更高的壓縮率和主觀圖像質量的同時,增加了算法的實現復雜性和時間開銷。本文重點研究AVS編解碼器的整數變換模塊,針對不同的算法實現模式,在原有Visual C6.0整數變換模…

計算機與廣播電視論文,淺談廣播電視中計算機技術的作用論文.pdf

1、計算機技術在廣播電視的媒體內容中有重要應用在以往的廣播電視中, 媒體內容主要分為音頻和視頻兩種信號, 在傳輸的過程中使用的是模擬信號, 但模擬信號受到的外界干擾因素較為明顯, 因此廣播電視傳播的媒體內容受到影響&#x…

opencv安裝教程python3.7_Mac下安裝使用Python-OpenCV,解決opencv3安裝完成無法使用的問題 - pytorch中文網...

OpenCV是一個跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。 Mac安裝OpenCV 在我們的深度學習的過程中,對于圖像&#…

NodeJS在CentOs7下安裝

node下載地址:https://nodejs.org/en/download/ 1.安裝gcc $ yum install gcc-c 2.解壓最新版本 $ mkdir /usr/local/node$ tar zxvf node-v6.11.4.tar.gz $ cd node-v6.11.4$ ./configure --prefix/usr/local/node# 在當前目錄下編譯安裝Node$ make$ make install 3.驗證安裝 …

Python功能之反射

有如下文件: index.py 1<span style"font-family:宋體, SimSun;">#!/usr/bin/env python<br data-filtered"filtered"># -*- coding:utf-8 -*-<br data-filtered"filtered">__author__ ryan<br data-filtered"filter…

Django REST framework 分頁

分頁模式 rest framework中提供了三種分頁模式&#xff1a; from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination 全局配置 REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.LimitOffsetPaginat…

解析H.264視頻編解碼DSP實現與優化

引言 基于互聯網的數字視頻產業前景看好&#xff0c;而3G的規模部署&#xff0c;也會推動移動視頻通信成為現實。但數字化后的視頻圖像具有數據海量性&#xff0c;給圖像的存儲和傳輸造成較大的困難。數字視頻產業&#xff0c;是指數字內容中以數字視頻形態為主的文化創意和傳播…

ap計算機科學a買什么書,準備AP*計算機科學A考試-第1部分

你將學到什么Identify the use and proper use of Variables, Conditionals, Objects and primitives, control structures, booleans, lists and arrays, and Exceptions.Implement problem descriptions in well designed code.Identify and begin to design algorithms to s…

python 打包exe_python如何封裝為exe

1、首先進入python安裝路徑D:\Python27\Scripts下&#xff0c;查看pip或easy_install是否安裝。2、確保安裝了pip或者easy_install&#xff0c;在cmd命令行下輸入“easy_install”&#xff0c;沒有提示“xxx不是內部或外部命令……”&#xff0c;就說明easy install工具安裝成功…

CentOS7安裝Hadoop2.7完整步驟

總體思路&#xff0c;準備主從服務器&#xff0c;配置主服務器可以無密碼SSH登錄從服務器&#xff0c;解壓安裝JDK&#xff0c;解壓安裝Hadoop&#xff0c;配置hdfs、mapreduce等主從關系。 1、環境&#xff0c;3臺CentOS7&#xff0c;64位&#xff0c;Hadoop2.7需要64位Linux&…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服務端接收客戶端傳過來的數據&#xff0c;把數據解析成自己可以處理的數據。本質就是對請求體中的數據進行解析。 在了解解析器之前&#xff0c;我們要先知道Accept以及ContentType請求頭。 Accept是告訴對方我能解析什么樣的數據&#xff0c…

MyBatis的學習之路(二)

上篇文章介紹了MyBatis的配置文件&#xff0c;現在來介紹實體映射文件Mapper.xml。 說道實體映射文件&#xff0c;就不得不說一下實體與表之間的映射關系&#xff1a;單表映射和多表映射。 a. 單表映射 1 public class Admin{ 2 private String id; 3 private String n…

計算機一級實驗素材題目,計算機一級EXCEL操作題整理素材(12頁)-原創力文檔...

素材摘錄&#xff0c;文檔可編輯分享PAGE 頁碼頁碼/NUMPAGES 總頁數總頁數單元格合并首先選中你要合并的單元格&#xff0c;然后找到EXCEL上的開始分區里的這種圖標或者是含有“合并”兩字的位置如圖1-1&#xff0c;如果題目要求的是要你合并單元格并讓內容居中&#xff0c;你就…

python爬取toefl_spark學習進度6-Python爬取數據的四個簡單實例

今天本來想把昨天安裝的intellij配置好&#xff0c;但是一直顯示沒有網絡&#xff0c;網上查了相關資料也沒有查出來解決辦法。然后暫停了intellij的配置&#xff0c;開始做了幾個Python爬取簡單數據的實例&#xff0c;先做了幾個最簡單的&#xff0c;以后再加大難度&#xff0…