利用多內(nèi)核處理器的并行編程功能實(shí)現(xiàn)視頻代碼轉(zhuǎn)換
支持高清視頻點(diǎn)播要求高性能的代碼轉(zhuǎn)換。RapidMind公司開發(fā)的軟件開發(fā)平臺(tái)利用統(tǒng)一的并行編程模型充分發(fā)揮各種多內(nèi)核處理器的性能。通過(guò)在RapidMind平臺(tái)上建立代碼轉(zhuǎn)換器,應(yīng)用程序如今能運(yùn)行在多種處理器上,包括CPU、GPU和Cell BE,并且還能通過(guò)擴(kuò)展適應(yīng)未來(lái)多內(nèi)核(和眾內(nèi)核)處理器環(huán)境。
本文引用地址:http://m.butianyuan.cn/article/152623.htm代碼轉(zhuǎn)換器自然需要支持各種視頻壓縮格式。然而,許多格式在實(shí)現(xiàn)它們所需的運(yùn)算類型方面有很多相似性。另外,編碼器通常要比解碼器貴得多。一般一種視頻標(biāo)準(zhǔn)僅規(guī)定了壓縮數(shù)據(jù)流中存儲(chǔ)什么類型的數(shù)據(jù)以及解碼器該怎樣譯碼,并不規(guī)定編碼器如何從原始輸入數(shù)據(jù)流中提取需要的信息。
通常一種壓縮視頻格式不僅要求實(shí)現(xiàn)對(duì)單幀的壓縮,而且要求使用視頻序列中的相鄰幀實(shí)現(xiàn)對(duì)中間幀的預(yù)測(cè)。為了能從傳輸產(chǎn)生的任何錯(cuò)誤中恢復(fù)數(shù)據(jù),并允許用戶從視頻序列中間位置開始解壓縮,有些幀是在不參考其它幀的情況下進(jìn)行壓縮的。
單幀壓縮
單幀壓縮有點(diǎn)類似于普通的圖像壓縮,通常包含了到不同基礎(chǔ)幀的轉(zhuǎn)換,如使用不同頻率和方向的余弦變換(離散余弦變換或DCT),或小波變換。這種轉(zhuǎn)換通常作用于塊,并且從數(shù)學(xué)上可精簡(jiǎn)到塊中像素上的一組點(diǎn)積(雖然一些基本函數(shù)允許理論上更快的因數(shù)分解)。轉(zhuǎn)換后的系數(shù)再經(jīng)過(guò)量化刪除那些對(duì)圖像可視無(wú)用的信息,形成一幅近似的圖像,最后使用編碼器編碼去除數(shù)據(jù)中任何殘留的冗余性。
上述轉(zhuǎn)換的目的不僅是通過(guò)將圖像中的能量集中為更小的一組數(shù)字而使代碼器變得更有效率,而且允許量化器顯著地去除感知上不那么重要的信息。例如,DCT就會(huì)對(duì)圖像的高頻和低頻成分進(jìn)行分析。由于人眼對(duì)高頻時(shí)的量化誤差不甚敏感,因此這些頻率的量化可以粗放一些。另外,在上述壓縮步驟之前通常先要從亮度中分離出色度(顏色)和將色度欠采樣到較低分辨率,因?yàn)槿搜蹖?duì)亮度邊緣較敏感,但對(duì)色度邊緣不太敏感。
一些較復(fù)雜的壓縮格式還支持根據(jù)空間相鄰的塊對(duì)一些圖像塊作出預(yù)測(cè)。選擇哪個(gè)塊用于預(yù)測(cè)極具挑戰(zhàn)性,而且支持解碼器中的必要排序在并行系統(tǒng)中也相當(dāng)復(fù)雜。然而,如果塊的內(nèi)容能夠被準(zhǔn)確預(yù)測(cè),那么對(duì)該塊壓縮時(shí)只需編碼預(yù)測(cè)值和實(shí)際值之間的(少量)差異。
如此詳細(xì)地介紹單幀圖像壓縮的原因是,實(shí)際上作為編碼過(guò)程的一部分,無(wú)論是塊還是單幀壓縮/解壓縮都有必要。特別是中間幀(數(shù)據(jù)流中的大部分幀)估計(jì),它是通過(guò)融合和混合數(shù)據(jù)流前后發(fā)生的幀、然后從輸入數(shù)據(jù)中減去這個(gè)融合后的幀、最后壓縮差異圖像(一般使用類似于單幀編碼器的編碼器)實(shí)現(xiàn)的。對(duì)這種融合的估計(jì)被稱為運(yùn)動(dòng)估計(jì),是編碼過(guò)程中運(yùn)算量最大的步驟之一。
然而在解碼器中,原始的源數(shù)據(jù)幀是沒(méi)有的,只有解壓縮后的幀。因此,這種融合要求圖像能在解碼器之前還原。因此它們不僅必須在編碼器中壓縮,而且需要被解壓縮。這種對(duì)前面壓縮的數(shù)據(jù)進(jìn)行解壓縮的需求將導(dǎo)致數(shù)據(jù)的依賴性,并影響到在具有不同存儲(chǔ)器系統(tǒng)的處理器之間如何并行使用和分配編碼器。
視頻序列中的圖像組(GOP)中的一些幀(I,幀內(nèi)編碼幀)使用單幀壓縮算法進(jìn)行編碼,但基于運(yùn)動(dòng)估計(jì)的幀間預(yù)測(cè)被用來(lái)改進(jìn)幀內(nèi)幀間(雙向預(yù)測(cè)編碼幀B,前向預(yù)測(cè)編碼幀P)的壓縮。只有預(yù)測(cè)幀和實(shí)際幀之間的差異值需要被壓縮。由于B幀和P幀是根據(jù)I幀的解壓縮版本預(yù)測(cè)出來(lái)的,因此有必要作為編碼過(guò)程的一部分對(duì)I幀進(jìn)行壓縮和解壓縮。
圖1:RapidMind是一個(gè)開發(fā)和運(yùn)行時(shí)間平臺(tái),它支持能充分利用多內(nèi)核處理器的單線程可管理應(yīng)用程序。開發(fā)人員可以用標(biāo)準(zhǔn)的C++語(yǔ)言編寫代碼,RapidMind平臺(tái)則可以將這些代碼在多個(gè)內(nèi)核間“并行利用”。
評(píng)論