專利名稱:用于視頻編碼的可配置性能運動估計的制作方法
技術(shù)領(lǐng)域:
本公開整體涉及信號處理,更具體地涉及數(shù)字視頻編碼技術(shù),但不排 除涉及其它技術(shù)。
背景技術(shù):
圖像信息(比如,數(shù)字視頻信息)經(jīng)常從一個電子設(shè)備傳送到另一個。 通常對這種信息進行編碼和/或壓縮,以降低用于傳輸所需的帶寬和/或減少 用于傳輸必需的時間。在一些配置中,可以發(fā)送關(guān)于當前圖片和先前圖片 之間的差異的信息,并且隨后接收圖像信息的設(shè)備可以,例如,對信息進 行解碼和/或解壓縮(例如,通過使用先前圖片和所述差異來生成當前圖片) 并將圖像提供到觀看設(shè)備。
許多視頻編碼/壓縮方案中的一個關(guān)鍵要素是運動估計。視頻序列由一 系列幀組成。運動估計技術(shù)利用相鄰幀之間的時間冗余,通過選擇一幀作 為參考并根據(jù)該參考預測后續(xù)幀來實現(xiàn)壓縮?;谶\動估計的視頻壓縮處 理也公知為幀間編碼。在假設(shè)場景中的對象僅具有平移運動的情況下使用 運動估計。只要不存在攝像機晃動、縮放、亮度變化或旋轉(zhuǎn)運動,該假設(shè) 即成立。然而,對于場景變化,幀間編碼效果不佳,因為來自不同場景的 幀之間的時間相關(guān)性較低。在這種情況中,使用了第二壓縮技術(shù)——幀內(nèi) 編碼。
使用運動估計技術(shù),根據(jù)至少一個參考幀來預測幀序列中的當前幀。
將當前幀分割為NxN像素的宏塊,典型地,大小為16xl6像素。使用某 種誤差度量將每個宏塊與參考幀中相同大小的區(qū)域進行比較,并選擇最佳 匹配區(qū)域。該搜索在預定搜索范圍內(nèi)進行。確定運動矢量,其表示參考幀 中區(qū)域相對于當前幀中宏塊的位移。當使用先前幀作為參考時,則將預測 稱為前向預測。如果參考幀是未來幀時,則將預測稱為后向預測。當使用 了后向預測和前向預測兩者時,則將預測稱為雙向預測。
6為了降低宏塊搜索的計算開銷,參考幀內(nèi)的搜索窗通常是相同的,并 將宏塊與搜索窗內(nèi)的不同位置進行比較。目前最有效的將宏塊與搜索窗口 進行比較的計算強化方式是在搜索窗內(nèi)宏塊可以移動到的每個位置處將宏 塊的像素與搜索窗的像素進行比較。這被稱為"完全"或"窮盡"搜索。 對于搜索窗內(nèi)被測塊的每個位置,將該塊的每個像素與搜索窗中相應(yīng)像素 進行比較。這種比較包括計算被比較像素的值之間的偏差。
通常利用絕對差的算術(shù)和(SAD)、均方差(MSE)、平均絕對誤差 (MSE)、或平均絕對差(MAD)函數(shù),來定量地比較這些像素。然后, 累積每個宏塊位置的偏差,并且選擇搜索窗內(nèi)產(chǎn)生最小偏差的位置作為在 先前幀中該塊最可能的位置。然后,利用該塊的當前位置和先前位置的差 異來導出運動矢量,以估計在參考幀和當前幀之間與該塊相關(guān)聯(lián)的運動。 然后,例如,可以將運動矢量作為圖像信息(例如,取代完整圖像幀)進 行發(fā)送,使得解碼器可以通過簡單地將運動矢量信息應(yīng)用到參考幀,來生 成、重建或構(gòu)造當前幀。
存在有多種視頻編碼標準。最普遍的標準是由國際標準化組織(ISO) 和國際電工委員會(IEC)公布的運動圖像專家組(MPEG)版本2(MPEG-2) 標準、由ISO/IEC公布的MPEG-4部分10標準(也公知為先進視頻編碼 (AVC)標準)、以及電影和電視工程師組織或SMPTE 421M視頻編解碼 標準(也公知為VC-1標準)。盡管不同的標準共用相似的算法思想并需要 相似的運動估計機制,但是實際的具體細節(jié)通常大相徑庭。運動估計通常 需要大量計算,并需要由硬件來執(zhí)行。因為不同視頻編碼標準所使用的運 動估計具有其自身的區(qū)別特征,所以運動估計的每種硬件實現(xiàn)都需要是對 標準專用的,從而導致硬件使用效率低下。因此,需要有一種統(tǒng)一的運動 估計硬件設(shè)備,其覆蓋不同視頻標準的具體約束。
通過下面對該主題的具體描述,本公開主題的特征和優(yōu)點將變得更加
顯而易見,其中
圖1示出了一種示例計算系統(tǒng),其可以包括用于使用運動估計引擎壓
縮視頻信息的視頻編碼器;圖2示出了視頻編碼器的方框圖,該視頻編碼器使用運動估計引擎來 壓縮視頻信息;
圖3示出了由視頻編碼器用于針對多種視頻編碼標準壓縮視頻信息的 運動估計引擎的方框圖4是用于針對多種視頻編碼標準執(zhí)行運動估計的運動估計引擎的一 個示例過程的流程圖5A和5B示出了用于在運動估計期間分割宏塊的方式;
圖6示出了用于在運動估計期間計算宏塊搜索失真(distortion)的示 例方法;
圖7示出了用于在運動估計期間計算宏塊搜索失真的另一種示例方法; 圖S是用于在運動估計期間細調(diào)(refme)預測方向的示例過程的流程 圖;以及圖9A和9B示出了分數(shù)級運動估計插值方案。
具體實施例方式
根據(jù)在本申請中公開的主題的實施例,運動估計引擎可以實現(xiàn)為包括 跳過檢查模塊、整數(shù)搜索模塊、宏塊分割模塊、分數(shù)級搜索模塊、雙向運 動估計細調(diào)模塊以及內(nèi)部搜索模塊。運動估計引擎可以支持單個參考幀或 者支持雙重或兩個參考幀。運動估計引擎可以并行執(zhí)行分數(shù)級搜索/雙向運 動估計細調(diào)和內(nèi)部搜索。另外,運動估計引擎中的模塊可以部分或全部打 開或關(guān)閉,以兼容不同運動估計需求。此外,運動估計引擎可以實現(xiàn)早退
出(early exit)策略,以便進一步節(jié)省計算。
在本說明書中提及所公開主題的"一個實施例"或"實施例"意味著 結(jié)合該實施例所描述的具體特征、結(jié)構(gòu)或特性包括在所公開主題的至少一 個實施例中。因此,在整篇說明書中不同地方出現(xiàn)的語句"在一個實施例 中"不一定全部指代相同的實施例。
圖1示出了一種示例計算系統(tǒng)ioo,其可以包括用于使用運動估計引擎
壓縮視頻信息的視頻編碼器。計算系統(tǒng)100可以包括耦合到系統(tǒng)互連115 的一個或多個處理器110。處理器110可以具有多處理內(nèi)核(multiple processing core)或眾處理內(nèi)核(many processing core)(為便于描述,術(shù)語"內(nèi)核"和"處理器"此后可以互換使用,并且此后術(shù)語"多內(nèi)核/處理器"
可以用于包括多處理內(nèi)核和眾處理內(nèi)核)。計算系統(tǒng)100還可以包括耦合到 系統(tǒng)互連115的芯片組120。芯片組120可以包括一個或多個集成電路封裝 或芯片。
另外,芯片組120可以包括存儲器控制中心(MCH) 130,其經(jīng)過存 儲器總線155耦合到主存儲器150。主存儲器150可以存儲數(shù)據(jù)和指令序列, 其中這些指令由處理器110的多個內(nèi)核或包括在該系統(tǒng)中的任何其它設(shè)備 來執(zhí)行。MCH 130包括存儲器控制器135,用于根據(jù)與處理器1I0的多個 內(nèi)核以及計算系統(tǒng)100中其它設(shè)備相關(guān)聯(lián)的存儲器事務(wù)(transaction)來訪 問主存儲器150。在一個實施例中,存儲器控制器135可以位于處理器110 或一些其它電路中。主存儲器150可以包括提供可尋址存儲位置的多種存 儲器器件,其中存儲器控制器125可以從存儲位置讀取數(shù)據(jù)和./或向存儲位 置寫入數(shù)據(jù)。主存儲器150可以包括一個或多個不同的存儲器器件類型, 比如動態(tài)隨機存取存儲器(DRAM)器件、同步DRAM (SDRAM)器件、 雙倍數(shù)據(jù)速率(DDR) SDRAM器件,或其它存儲器器件。
芯片組120可以包括輸入/輸出控制中心(ICH) 140,用于支持到和/ 或來自計算系統(tǒng)100的其它組件的數(shù)據(jù)傳輸,這些其它組件比如鍵盤、 鼠標、網(wǎng)絡(luò)接口等。ICH40可以經(jīng)過諸如總線165的總線來與其它組件耦 合。該總線可以是外設(shè)組件互連(PCI)、加速圖形端口 (AGP)、通用串行 互連(USB)、少針腳(LPC)互連、或任何其它I/O互連類型。ICH 140 (或MCH 130)可以耦合到圖形設(shè)備160,其生成并向顯示器輸出圖像。 圖形設(shè)備也可以在ICH140 (或MCH130)與其它圖形/視頻設(shè)備之間提供 接口。圖形設(shè)備包括圖形處理單元(GPU) 170,其是專用圖形渲染設(shè)備, 用于高效地操作并顯示計算機圖形。GPU 170可以實現(xiàn)許多圖形圖元操作, 以處理并渲染圖形。
另外,圖形設(shè)備160可以包括視頻編解碼器180,以便能夠?qū)?shù)字視頻 進行視頻編碼/壓縮和/或解碼/解壓縮。視頻編解碼器180還可以包括運動 估計引擎(在圖中未示出),用于基于諸如MPEG-2、 VC-1和AVC標準的
多種視頻編碼標準為視頻壓縮/編碼進行運動估計。運動估計引擎可以是視 頻編解碼器180的一部分,或者可以是GPU170的一部分,或者可以是圖形設(shè)備160中的獨立引擎,或者可以在不同設(shè)備中。在一個實施例中,圖 形設(shè)備160可以位于MCH130中。在另一實施例中,圖形設(shè)備160可以位 于處理器110或一些其它電路中。
圖2示出了根據(jù)本申請中所公開主題的實施例的視頻編碼器的方框圖, 該視頻編碼器使用運動估計引擎來基于多種視頻編碼標準對數(shù)字視頻進行 壓縮??梢择詈蠄D像數(shù)據(jù)幀源210,以向編碼器220提供圖像數(shù)據(jù)幀。根據(jù) 一些配置,編碼器220可以根據(jù)諸如MPEG-2、 VC-1或AVC標準的視頻 編碼標準來應(yīng)用編碼和/或壓縮算法。編碼器220可以包括用于獲得運動矢 量的運動估計引擎225,使得在解碼/解壓縮過程中可以基于運動矢量和用 于獲得該運動矢量的參考幀來重建圖像幀。
運動估計引擎225可以設(shè)計為針對多種視頻編碼標準執(zhí)行運動估計。
典型地,在用于視頻編碼/壓縮的大多數(shù)視頻標準中通常允許有三種圖片類 型幀類型、場類型以及場-幀混合類型。幀類型用于對逐行掃描內(nèi)容進行 編碼,并將全部宏塊和參考圖片視為連續(xù)的視頻圖片塊。場類型多數(shù)用于 對隔行掃描內(nèi)容進行編碼,并且編碼器基本上將圖片作為兩個分離的場圖 片進行處理。運動估計中使用的全部宏塊和參考圖片在場類型或幀類型的 情況之下都是相同的。因此,假設(shè)數(shù)字視頻中的每個圖片以幀格式存儲在 存儲器緩沖器中,對于場類型需要進行用于讀取圖片的專門設(shè)計(例如, 邊界填充)。 一旦將圖片加載到運動估計引擎中,運動估計引擎對于場類型 或幀類型以相同方式進行工作。當在幀中對隔行掃描內(nèi)容進行編碼時使用 場-幀類型。依據(jù)視頻標準,對于場-幀類型有兩種子類型。 一個子類型是幀 類型宏塊,其允許如基于MPEG-2和VC-1標準進行場類型分割。另一個 子類型是16x32大宏塊對,其能夠如基于AVC標準被分成兩個幀宏塊或分 成兩個場宏塊。
根據(jù)要基于不同視頻標準進行編碼/壓縮的數(shù)字視頻的圖片類型,運動 估計引擎225可以應(yīng)用相應(yīng)的失真計算模式。例如,對于幀類型數(shù)字視頻 信號(例如,使用AVC標準的視頻信號),可以在4x4子塊單元的基礎(chǔ)上 對總共41個宏塊分割部分(macroblock partition)計算宏塊搜索的失真度 量;并且對于場類型和場-幀類型數(shù)字視頻信號(例如,使用VC-l或MPEG-2 標準的視頻信號),可以對總共15個宏塊分割部分計算宏塊搜索的失真度量。另外,運動估計引擎225可以為使用不同視頻標準獲得的視頻信號提 供混合單向選項(前向/后向)和混合雙向選項。此外,運動估計引擎225 可以在運動估計期間使用統(tǒng)一的4抽頭插值濾波器用于分數(shù)級宏塊搜索。
運動估計引擎225可以針對相應(yīng)的參考幀生成運動矢量。編碼器220 可以使用運動矢量和其相應(yīng)的參考幀來進一步壓縮視頻信號。來自編碼器 220的已編碼/已壓縮視頻信號可以存儲在存儲設(shè)備中和/或可以經(jīng)過信道 230發(fā)送到接收設(shè)備250。信道230可以是有線或無線信道。接收設(shè)備250 可以對所接收的已編碼/已壓縮視頻信號進行解碼/解壓縮,并基于參考幀和 運動矢量來重建原始視頻信號。
圖3示出了根據(jù)本申請中公開主題的實施例的運動估計引擎300的方 框圖,其中視頻編碼器使用該運動估計引擎300來基于多種視頻編碼標準 對視頻信號進行編碼/壓縮。運動估計引擎300包括跳過(skip)檢查模塊 310、整數(shù)搜索模塊320、宏塊(MB)分割模塊330、分數(shù)級搜索模塊340、 雙向檢查模塊350以及內(nèi)部搜索模塊360。運動估計引擎300可以與控制器 390 —起工作,其中控制器390控制/協(xié)調(diào)運動估計引擎300中不同模塊的 操作。在一個實施例中,可以沒有獨立的控制器,但是可以使用圖形設(shè)備 中的GPU (例如,圖1中的GPU170)控制運動估計引擎300中每個模塊 的操作和域協(xié)調(diào)運動估計引擎300中模塊之間的操作。在另一個實施例中, 控制器390可以與運動估計引擎300集成在一起并成為運動估計引擎300 的一部分。在一個實施例中,運動估計引擎300可以具有與其相關(guān)聯(lián)的緩 沖器(在圖中未示出),以暫時存儲從存儲設(shè)備中讀取的宏塊,其中該存儲 設(shè)備存儲將要進行編碼/壓縮的數(shù)字視頻幀。控制器390可以向運動估計引 擎一次提供一個宏塊。
對于大多數(shù)視頻編解碼標準,所有宏塊都具有默認的預測編碼 一些 運動矢量是根據(jù)其已編碼的鄰域宏塊編碼(例如,左、上、左上、右上以 及先前已編碼幀中的同一位置)來導出的。遵循相同的原則,具體描述隨 標準而變化。只要編碼器和解碼器達成一致,除用于指示該選擇的已編碼 標志位之外在數(shù)據(jù)流中沒有攜帶實際編碼。這種已編碼宏塊稱為跳過類型。 因為跳過類型是用于對宏塊進行編碼的最有效的類型,所以跳過檢測模塊 310經(jīng)常將使用跳過類型的失真作為第一個被檢查類型來進行檢查。如果失真較小,則可以選擇該跳過編碼,而不需要經(jīng)過其余的運動估計以嘗試其 它編碼類型。
如果所接收的宏塊需要經(jīng)過運動估計過程,則可以將該宏塊傳送到整
數(shù)搜索模塊320。整數(shù)搜索模塊320可以在具有整數(shù)索引的像素處針對所接 收的宏塊搜索參考幀。整數(shù)搜索模塊320可以基于4x4子塊單元計算搜索 失真。例如,如果所接收的宏塊是16x16像素,則整數(shù)搜索模塊320可以 將該宏塊分割為四個4x4子塊,并針對每個4x4子塊計算失真。通過將四 個4x4子塊的失真加在一起可以得到該16x16宏塊的失真。使用4x4子塊 作為失真計算單元為分割宏塊的多種方式提供了靈活性,這是因為通過組 合一個或多個4x4子塊可以得到許多宏塊分割部分。這也為具有不同尺寸 的宏塊提供了靈活性(例如,8x8、 8x16和16x8宏塊均可以被分割為多個 4x4子塊)。整數(shù)搜索模塊320可以在與運動估計引擎300相關(guān)聯(lián)的緩沖器 中存儲所有4x4子塊以及整個宏塊的失真。
MB分割模塊330可以支持幀類型或場類型或場-幀類型數(shù)字視頻信號 的宏塊分割的多種方式。如果沒有子塊小于8x8則宏塊分割可以稱為大分 割,并且如果沒有子塊大于8x8則宏塊分割可以稱為小分割。事實上,當 前很少有標準支持將大于8x8 (比如,16x8或8x16)的塊與小于8x8 (比 如,8x4、 4x8和4x4)的塊混合的宏塊分割。如圖5A所示,對于16x16 宏塊,有8種可能的大宏塊幀類型分割(分割510、 515、 520、 525、 530、 535、 540和545)??赡艿男》指畹臄?shù)目會非常大(例如,對于16x16宏塊 有數(shù)千種)。本申請中公開的主題的實施例可以支持這種大分割中的一部分 或全部以及支持小分割的一部分。例如,AVC標準允許小分割,但是僅限 于將每個8x8子區(qū)域劃分為相同形狀(即, 一個8x8、兩個8x4、兩個4x8 或四個4x4)的小分割。在一個實施例中,可以支持AVC標準允許的所有 這種小分割和/或其它小分割。另外,可以支持兩個場分割(即,如圖5B 中所示的分割560和分割570)。分割560包括兩個16x8子塊,其中一個子 塊具有全部偶數(shù)行而另一個子塊具有全部奇數(shù)行。分割570包括四個8x8 塊,這是通過以下實現(xiàn)的將16x16塊分割為兩個8x16子塊572和574, 并進一步將每個子塊572和574分割為兩個8x8子塊,其中一個8x8子塊 具有全部偶數(shù)行而另一個8x8子塊具有全部奇數(shù)行。
12在一個實施例中,在用于幀類型視頻信號或者用于當可以將兩個場作 為獨立的圖片或宏塊進行編碼時的場類型視頻信號的第一模式中,可以支
持41個子塊(即,1個16x16、 2個16x8、 2個8x16、 4個8x8、 8個8x4、 8個4x8和16個4x4)(例如,基于AVC標準的視頻信號允許將子塊最精 細地分為4x4的塊大小);并且在用于混合場-幀類型視頻信號的第二模式 中,可以支持15個子塊(即,1個16x16、 2個16x8、 2個8x16、 4個8x8、 2場16x8和4場8x8)(例如,允許分別基于VC-1禾n/或MPEG-2標準以幀 類型或場類型對宏塊的視頻信號進行編碼)。在第一模式中,計算全部基本 4x4子塊的失真,并根據(jù)基本4x4子塊的失真得到所有其它子塊的失真,如 圖所示,不對每個子塊進行計算,而是對共用的4x4子塊進行計算,并隨 后如圖6所示并通過下列偽代碼將所有其它子塊的失真相加
b4[16] = { {0,0},{4,0},{0, 4},{4, 4}, {8,0},{12,0},{8, 4},{12,化
{0,8},{4,8},{0,12},{4,12}, {8,8},{12,8},{8,12},{12,12} };
Dist4x4[i]=在像素?=&廳》4[1]^,4卩]丄]處開始的塊p[O][O], p[O][l],
p
[2],p
[3],p[l]
,…,p[3][3]的失真;其中i=0,l,...,15。
Dist8x4[j]=Dist4x4[f2 ]+Dist4x4[j*2+l];其中j = 0,1,2,3,4,5,6,7.
Dist4x8[j]=Dist4x4[i*2 ]+Dist4x4[j*2+2];其中j = 0,2,4,6.
Dist4x8[i]=Dist4x4[j*2-l]+Dist4x4[j*2+l];其中j = 1,3,5,7.
Dist8x8[k]=Dist8x4[k*2 ]+Dist8x4[k*2+l];其中k = 0,1,2,3.
Dist8x 16
=Dist8x8
+Dist8x8 [2];
Dist8x 16 [ 1 ]=Dist8x8 [ 1 ]+Dist8x8 [3];
Dist 16x8
=Dist8x8
+Dist8x8 [ 1 ];
Dist 16x8 [ 1 ]=Dist8x8 [2]+Dist8x8 [3];
Distl6xl6
=Distl6x8
+Distl6x8[l].
在第二模式中,可以采取相似的策略用于獲得所有15個子塊的失真。在該模式中,基本子塊可以是4x4場子塊,并且可以計算所有這種基本子 塊的失真,并且如圖7所示并通過下列偽代碼可以根據(jù)那些基本子塊的失
真導出所有其它子塊的失真
b4[16] = { {0,0},{4,0},{0,8},{4,8}, {8,0},{12,0},{8,8},{12,8},
{0,1},{4,1},{0,9},{4,9}, {8,1},{12,1},{8,9},{12,9} }; Dist4x4F[i^在像素的p二&Mb[b4[i].y][b4[i].x]處開始的塊p[O][O], p[O][l], p
[2], p剛,p,,…,p[6][3]的失真;其中i=0,l,...,15。 Dist8x8
=Dist4x4F
+Dist4x4F[l]+Dist4x4F[ 8]+Dist4x4F[ 9]; Dist8x8[ 1 ]=Dist4x4F[4]+Dist4x4F[5]+Dist4x4F[ 12]+Dist4x4F[ 13]; Dist8x8[2]=Dist4x4F[2]+Dist4x4F[3]+Dist4x4F[10]+Dist4x4F[ll]; Dist8x8[3]=Dist4x4F[6]+Dist4x4F[7]+Dist4x4F[14]+Dist4x4F[15]; Dist8x8F
=Dist4x4F[ 0]+Dist4x4F[ 1]+Dist4x4F[ 2]+Dist4x4F[ 3]; Dist8x8F[l]=Dist4x4F[ 4]+Dist4x4F[ 5]+Dist4x4F[ 6]+Dist4x4F[ 7]; Dist8x8F[2]=Dist4x4F[ 8]+Dist4x4F[ 9]+Dist4x4F[10]+Dist4x4F[l l];
Dist8x 16
=Dist8x8
+Dist8x8 [2]; Dist8x 16[ 1 ]=Dist8x8 [ 1 ]+Dist8x8 [3]; Dist 16x8 [0〗=Dist8x8
+Dist8x8 [ 1 ]; Dist 16x8 [ 1 ]=Dist8x8 [2]+Dist8x8 [3 ]; Distl6x8F[0〗=Dist8x8F
+Dist8x8F[l]; Distl6x8F[l]=Dist8x8F[2]+Dist8x8F[3]; Dist 16x 16
=Dist 16x8
+Dist 16x8 [ 1 ]. 利用在第一模式中支持的41個子塊,可以支持很多宏塊分割。相似地,
14利用第二模式中支持的15個子塊,可以支持許多宏塊分割。運動估計引擎
300可以根據(jù)不同的標準規(guī)范在所有所支持的分割之間切換。通常,如果任 何場形狀是打開的,則將運動估計引擎設(shè)置到第二模式;否則,運動估計 引擎處于第一模式。
在整數(shù)搜索模塊320的整數(shù)搜索期間,可以計算第一模式或第二模式 中所有具體子塊的失真。對于每個子塊,進行比較并記錄最佳結(jié)果(具有 最小失真)。
MB分割模塊330還基于如上所述所得到的所記錄的最佳子塊失真, 獲得視頻標準所允許的每種可能宏塊分割的失真,其中基于該視頻標準獲 得要進行編碼/壓縮的視頻信號。然后,MB分割330可以比較所有可用宏 塊分割的失真,并選擇具有最小的宏塊分割部分總失真的宏塊分割。
分數(shù)級搜索模塊340可以在分數(shù)級像素位置處搜索宏塊。通常,使用 二分之一像素和四分之一像素值用于分數(shù)級宏塊搜索。使用內(nèi)插公式來獲 得二分之一像素值和四分之一像素值。例如,AVC標準使用下列6抽頭公
式
對于^像素(l,-5,20,20,-5,l)/32; (1)
對于乂-像素(l,-5,52,20,-5,1)/64. (2)
VC-1標準使用如下定義的4抽頭濾波器
對于'/2-像素(-l,9,9,-l)/16; (3)
對于1/4-像素(-4,53,18,-3)/64. (4)
通常,也可以接受雙線性插值(如MPEG2標準所使用的) 對于^-像素(0,l,l,0)/2; (5)
對于%-像素(0,3,1,0)/4. (6)
在一個實施例中,分數(shù)級搜索模塊可以根據(jù)不同視頻標準使用不同公 式。在另一個實施例中,對于所有不同視頻標準,可以使用統(tǒng)一的4抽頭 插值,如下所示
對于^-像素:(-l,5,5,-l)/8; (7)對于^-像素(-l,13,5,-l)/16. (8)
如圖9A (針對二分之一像素)和圖9B (針對四分之一像素)所示, 在方程式(7)和(8)中所示的4抽頭插值公式是各種視頻標準所使用的 公式的良好近似。
雙向運動估計細調(diào)模塊350可以在子塊級別或宏塊級別上細調(diào)預測方 向。在給定宏塊分割模式的情況下, 一些標準允許不同子塊具有其自己的 關(guān)于預測應(yīng)當是單向還是雙向以及預測應(yīng)當是前向還是后向的決策;而在 其它情況下,在宏塊級別中作為整體做出這種決策。典型地,有三種場景
1 )每個子塊具有其自己的關(guān)于預測應(yīng)當是單向還是雙向以及預測應(yīng)當 是前向還是后向的決策(例如,AVC標準)。在這種情況中,針對每個子塊 選擇方向,并在每個子塊的方向細調(diào)之后可以對宏塊分割進行更新。
2) 所有子塊共享相同的方向,不論是單向還是雙向以及是前向還是后 向(例如,MPEG-2標準)。在這種情況中,首先針對每個單獨的方向進行 分割,并隨后選擇更好的一個方向。
3) 所有子塊必須全部是單向的或雙向的。如果是單向的,每個子塊能 夠決定是前向還是后向(例如,VC-1標準)。在這種情況中,首先對每個 子塊進行前向和后向的決策,然后執(zhí)行用于單向的分割。針對單向最佳來 檢查雙向,并且只有雙向更好時才選擇雙向。
在一個實施例中,雙向運動估計細調(diào)模塊350可以被設(shè)計為適應(yīng)所有 上述情況。圖8是示例過程800的流程圖,其中雙向運動估計細調(diào)模塊可 以用于細調(diào)運動估計。過程800在方框805處開始于最佳子塊運動矢量, 即,雙向運動估計細調(diào)模塊350在最佳宏塊分割的基礎(chǔ)上工作,其中最佳 宏塊分割是在雙向細調(diào)開始之前確定的。在方框810處,雙向運動估計細 調(diào)模塊350確定獲得視頻信號所基于的視頻標準是否允許每個子塊具有其 自己的關(guān)于預測應(yīng)當是前向還是后向的決策。如果結(jié)果是"否",則在方框 815處可以針對每個方向找到最佳宏塊分割;并且在方框820處,在兩個宏 塊分割之間(每方向一個)選擇具有更小失真的一個方向。如果結(jié)果是"是", 則在方框825處,可以在方框825處合并所有子塊的前向和后向運動矢量; 并且在方框830處,可以基于合并的運動矢量得到總的最佳宏塊分割。在 方框835處,可以在所選擇的分割上執(zhí)行分數(shù)級細調(diào)(分數(shù)級搜索)。在方框840處,可以在所選擇的分割上執(zhí)行雙向細調(diào)。在方框845處,雙向運 動估計細調(diào)模塊350可以確定視頻標準是否允許每個子塊具有其自己的關(guān) 于預測是應(yīng)當單向還是雙向的決策。如果結(jié)果是"否",則在方框850處, 可以通過在所有子塊是單向的和雙向的情況下比較在方框840處選擇的分 割的雙向總結(jié)果來選擇最終的方向模式。如果結(jié)果是"是",則可以通過比 較在方框840處選擇的分割的每個子塊的雙向結(jié)果來選擇最終的方向模式。 在方框860處,過程800可以針對另一個宏塊繼續(xù)進行。
內(nèi)部搜索模塊360可以對所接收的宏塊執(zhí)行幀內(nèi)搜索。當場景隨幀而 變化或者當沒有找到具有足夠小失真的運動矢量集時,幀內(nèi)搜索可以更好 地工作。在一個實施例中,內(nèi)部搜索模塊360可以與幀間搜索并行地執(zhí)行 幀內(nèi)搜索。
另夕卜,運動估計引擎300可以支持已有方案。在編碼的任何階段中, 如果在參考幀中找到了某個"足夠好"的宏塊模式,則該運動估計引擎可 以終止估計過程。參考幀中的"足夠好"的模式是一個塊,其中該塊與宏 塊的總的已校正失真誤差低于由用戶作為運動估計命令的一部分所提供的 閾值常量。
此外,運動估計引擎300可以支持細調(diào)跳過。如果整數(shù)搜索之后的最 佳結(jié)果"仍較差",則運動估計引擎300可以跳過分數(shù)級搜索和雙向搜索并 直接跳到幀內(nèi)搜索以節(jié)省時間和計算。"仍較差"結(jié)果是參考幀中的一個塊, 其中該塊與宏塊的總的己校正失真誤差高于由用戶作為運動估計命令的一 部分所提供的閾值常量。
此外,運動估計引擎300可以支持一種工作模式,在該工作模式下, 除所有大分割的最佳結(jié)果之外該引擎還可以輸出所有失真值,以允許用戶 能夠?qū)Ψ蔷幋a應(yīng)用使用運動估計以及進一步細調(diào)編碼解決方案。
圖4是根據(jù)本申請中公開主題的實施例的用于運動估計引擎對多種視 頻編碼標準執(zhí)行運動估計的一個示例過程400的流程圖。過程400在方框 405處開始。在方框410處,運動估計引擎(例如,圖3中的300)可以從 當前幀中接收宏塊,并檢査對于該宏塊是否能夠"P—跳過"。如果能夠, 則在方框415處運動估計引擎可以執(zhí)行跳過檢査。如果在方框420處確定 確實可以從運動估計中跳過該宏塊,則過程400可以直接跳到方框480。如果在方框410處發(fā)現(xiàn)不能夠"P—跳過"或者如果在方框420處確定不可以 從運動估計中跳過該宏塊,則在方框425處運動估計引擎可以檢查是否需 要對該宏塊進行幀間搜索。可以設(shè)置宏塊和/或當前幀的信息比特矢量中的 一個比特,以指示需要幀間搜索。如果需要幀間搜索,則在方框430處運 動估計引擎可以執(zhí)行整數(shù)搜索(上面針對整數(shù)搜索模塊320進行了描述)。 如果不需要幀間搜索,則在方框435處可以進一步確定是否需要對該宏塊 進行幀內(nèi)搜索。如果結(jié)果為"是",則過程400將直接進行到方框475。
在方框430處的整數(shù)搜索期間,運動估計引擎將確定搜索結(jié)果是否足 夠好,使得可以退出搜索以進行到方框440。如果搜索結(jié)果與宏塊之間的失 真低于預定閾值,則搜索結(jié)果足夠好。該閾值可以由用戶來預定,并經(jīng)由 命令提供到運動估計引擎。如上文針對圖3所述,在幀間搜索期間,可以 計算并保留宏塊的所有4x4基本塊的失真。根據(jù)各個4x4基本塊的失真可 以得到其它形狀子塊的失真?;谌绱藢С龅乃惺д?,在方框440處可 以確定最優(yōu)宏塊分割。
在方框445處,可以確定所確定的最優(yōu)宏塊分割的總失真是否高于"太 差"閾值或者低于"太好"閾值。"太差"閾值用于指示整數(shù)搜索結(jié)果是不 可接收的并且因此必須進行內(nèi)部搜索。"太好"閾值用于指示整數(shù)搜索結(jié)果 足夠好并且不必要對該搜索結(jié)果進一步進行細調(diào)。這兩個閾值均由用戶預 定,并經(jīng)由命令提供到運動估計引擎。如果整數(shù)搜索的結(jié)果太差,則過程 400可以直接進行到用于幀內(nèi)搜索的方框475。另一方面,如果結(jié)果太好, 則過程400可以早早退出并直接進行到方框480。如果搜索結(jié)果在"太差" 閾值和"太好"閾值之間,則過程400可以進行到方框450,以確定是否需 要分數(shù)級搜索細調(diào)。
在方框450處,可以檢查信息比特矢量中用于指示是否需要對該宏塊 進行分數(shù)級搜索的比特。如果設(shè)置了分數(shù)級搜索比特,則在方框455處可 以執(zhí)行分數(shù)級搜索(如上文針對圖3中的分數(shù)級搜索模塊340所描述的)。 如果在分數(shù)級搜索之后在方框460處確定該宏塊與其在參考幀中的相應(yīng)搜 索結(jié)果之間的總失真低于"早退出"閾值,則過程400可以直接進行到方 框480,而不需對該搜索結(jié)果進行任何進一步細調(diào)??梢詫?早退出"閾值 設(shè)置為與"太好"閾值相同,或者可以預定為不同值。可以經(jīng)由命令將"早退出"閾值提供到運動估計引擎。
如果在方框460處確定不許可早退出,則過程400可以進行到方框465, 用于對來自方框455的搜索結(jié)果進一步進行處理。在方框465處,通過檢 查信息比特矢量中的雙向比特,可以確定是否需要雙向細調(diào)。如果設(shè)置了 雙向比特,則在方框470處可以執(zhí)行雙向細調(diào)(如上文針對圖3中的雙向 運動估計細調(diào)模塊350所描述的);否則,過程400可以進行到方框480。 在方框475處可以執(zhí)行幀內(nèi)搜索。通過方框480可以接收來自不同方框的 結(jié)果,其中方框480確定最終結(jié)果并以視頻編碼處理的下一階段所需的格 式輸出該結(jié)果。
盡管參照圖1-9中的方框和流程圖來描述所公開主題的示例性實施例, 但是本領(lǐng)域技術(shù)人員應(yīng)當理解,可以替換地使用實現(xiàn)所公幵主題的很多其 它方法。例如,可以改變流程圖中方框的執(zhí)行順序,和/或可以改變、刪除 或組合所述方框/流程圖中的一些方框。
在前面的描述中,已經(jīng)描述了所公開主題的各個方面。為了說明的目 的,給出了具體數(shù)字、系統(tǒng)和配置,以便提供對本主題的全面理解。然而, 顯而易見地,對受益于本公開內(nèi)容的本領(lǐng)域技術(shù)人員而言,本主題可以在 沒有這些具體細節(jié)的情況下實現(xiàn)。在其它例子中,省略、簡化、組合或分 解了公知特征、組件或模塊,以避免混淆所公開的主題。
所公開主題的各種實施例可以在硬件、固件、軟件或其組合中實現(xiàn), 并且可以通過參照或結(jié)合程序代碼來進行描述,其中,程序代碼比如指 令、函數(shù)、程序、數(shù)據(jù)結(jié)構(gòu)、邏輯、應(yīng)用程序、設(shè)計表示或用于設(shè)計模擬、 仿真和制造的形式,當機器訪問這些程序代碼時導致該機器執(zhí)行任務(wù)、定 義抽象數(shù)據(jù)類型或低級硬件環(huán)境、或生成結(jié)果。
對于模擬,程序代碼可以使用硬件描述語言或其它功能描述語言來表 示硬件,其中這些語言實質(zhì)上提供了期望所設(shè)計硬件如何執(zhí)行的模型。程 序代碼可以是匯編或機器語言,或者是可以被編譯和/或解釋的數(shù)據(jù)。此外, 在本領(lǐng)域中提到軟件,通常是按照采取一種動作或造成一個結(jié)果的一種或 其它形式。這種表達方式僅是闡明處理系統(tǒng)開始執(zhí)行程序代碼的一種簡要 方式,其中該程序代碼的執(zhí)行會造成處理器執(zhí)行一種動作或產(chǎn)生一個結(jié)果。
例如,程序代碼可以存儲在易失性和/或非易失性存儲器中,比如存儲設(shè)備和/或關(guān)聯(lián)的機器可讀或機器可訪問介質(zhì),包括固態(tài)存儲器、硬盤驅(qū)動 器、軟盤、光存儲器、磁帶、閃存存儲器、記憶棒、數(shù)字視頻盤、數(shù)字多
功能光盤(DVD)等,以及更加特殊的介質(zhì),比如機器可訪問生物狀態(tài)保 存存儲。機器可讀介質(zhì)可以包括用于以機器可讀的形式存儲、發(fā)送或接收 信息的任何機制,并且介質(zhì)可以包括有形介質(zhì),電、光、聲或其它形式的 對程序代碼進行編碼的傳播信號或載波可以通過該有形介質(zhì),比如,天線、 光纖、通信接口等。程序代碼可以以分組、串行數(shù)據(jù)、并行數(shù)據(jù)、傳播信 號等形式進行發(fā)送,并且可以以壓縮或加密形式使用。
程序代碼可以在可編程機器上執(zhí)行的程序中實現(xiàn),其中可編程機器比
如移動或靜止計算機、個人數(shù)字助理、機頂盒、蜂窩電話和尋呼機和其 它電子設(shè)備,其分別包括處理器、處理器可讀的易失性和/或非易失性存儲 器、至少一個輸入設(shè)備和/或一個或多個輸出設(shè)備。可以將程序代碼應(yīng)用到 使用輸入設(shè)備輸入的數(shù)據(jù),以執(zhí)行所描述的實施例以及生成輸出信息。輸 出信息可以應(yīng)用于一個或多個輸出設(shè)備。本領(lǐng)域技術(shù)人員應(yīng)當注意,可以 利用各種計算機系統(tǒng)配置來實施所公開主題的實施例,其中這些計算機系 統(tǒng)配置包括多處理器或多核處理器系統(tǒng)、小型計算機、大型計算機、以 及可以嵌入到基本上任何設(shè)備的普及型或微型計算機或處理器。所公開主 題的實施例也能夠在分布式計算環(huán)境中實施,在分布式計算環(huán)境中,可以 由通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備來執(zhí)行任務(wù)。
盡管可以按照順序過程來描述操作,但是事實上一些操作可以并行、 同時和/或在分布式環(huán)境中執(zhí)行,并且其中本地和/或遠程存儲程序代碼,用 于由單處理器或多處理器機器進行訪問。此外,在一些實施例中,在不偏 離所公開主題的精神的情況下,可以重新設(shè)置操作的順序。程序代碼可以 由嵌入式控制器或者結(jié)合嵌入式控制器使用。
盡管參照示例性實施例對所公幵主題進行了描述,但是本說明不旨在 被視為限制性的。本公開主題所涉及的對示例性實施例的各種修改,以及 對本領(lǐng)域技術(shù)人員而言顯而易見的本主題的其它實施例,應(yīng)當落入所公開 主題的范圍內(nèi)。
20
權(quán)利要求
1、一種用于執(zhí)行視頻編碼的運動估計的裝置,包括跳過檢查模塊,用于確定是否可以從運動估計中跳過當前圖片幀中的宏塊;整數(shù)搜索模塊,用于如果沒有從運動估計中跳過所述宏塊,則在整數(shù)像素位置處針對所述宏塊搜索參考幀(“整數(shù)搜索”);以及宏塊分割模塊,用于基于來自所述整數(shù)搜索模塊的結(jié)果確定宏塊分割。
2、 如權(quán)利要求1所述的裝置,還包括分數(shù)級搜索模塊,用于如果需要 精細調(diào)整來自所述整數(shù)搜索模塊的所述結(jié)果,則通過在分數(shù)級像素位置處 在所述參考幀中搜索所述宏塊,來精細調(diào)整來自所述整數(shù)搜索模塊的所述 結(jié)果。
3、 如權(quán)利要求l所述的裝置,還包括雙向運動估計細調(diào)模塊,用于基 于所述宏塊分割來細調(diào)所述宏塊的預測方向。
4、 如權(quán)利要求l所述的裝置,還包括內(nèi)部搜索模塊,用于對所述宏塊 進行幀內(nèi)搜索。
5、 如權(quán)利要求1所述的裝置,還包括控制器,用于控制所述裝置中模 塊的操作、在所述裝置的所述模塊之間進行協(xié)調(diào)、以及將運動估計結(jié)果輸 出到視頻編碼器。
6、 如權(quán)利要求5所述的裝置,其中,所述控制器確定是否跳過某個模 塊的操作。
7、 如權(quán)利要求l所述的裝置,其中,當所述整數(shù)搜索模塊確定所述參 考幀中的一個塊與所述宏塊之間的失真低于預定閾值時,所述整數(shù)搜索模 塊退出搜索整數(shù)搜索。
8、 如權(quán)利要求l所述的裝置,其中,如果基于所確定宏塊分割的在所 述宏塊與其在所述參考幀中的相應(yīng)塊之間的失真大于第一閾值或小于第二閾值,則使用來自所述宏塊分割模塊的結(jié)果來形成對所述宏塊的運動估計 的最終結(jié)果,其中所述第一閾值對應(yīng)較高失真,所述第二閾值對應(yīng)較低失 真。
9、 一種計算系統(tǒng),包括存儲器,用于存儲與參考幀相關(guān)聯(lián)的信息;以及運動估計引擎,用于對當前幀執(zhí)行運動估計,并且基于所述參考幀為所述當前幀生成運動矢量,所述運動估計引擎包括跳過檢查模塊,用于確定是否可以從運動估計中跳過所述當前幀 中的宏塊;整數(shù)搜索模塊,用于如果沒有從運動估計中跳過所述宏塊,則在整數(shù)像素位置處針對所述宏塊搜索所述參考幀("整數(shù)搜索");以及宏塊分割模塊,用于基于來自所述整數(shù)搜索模塊的結(jié)果確定宏塊 分割。
10、 如權(quán)利要求9所述的計算系統(tǒng),其中所述運動估計引擎還包括分 數(shù)級搜索模塊,用于如果需要精細調(diào)整來自所述整數(shù)搜索模塊的所述結(jié)果, 則通過在分數(shù)級像素位置處在所述參考幀中搜索所述宏塊,來精細調(diào)整來 自所述整數(shù)搜索模塊的所述結(jié)果。
11、 如權(quán)利要求9所述的計算系統(tǒng),其中所述運動估計引擎還包括雙 向運動估計細調(diào)模塊,用于基于所述宏塊分割來細調(diào)所述宏塊的預測方向。
12、 如權(quán)利要求9所述的計算系統(tǒng),其中所述運動估計引擎還包括內(nèi) 部搜索模塊,用于對所述宏塊進行幀內(nèi)搜索。
13、 如權(quán)利要求9所述的計算系統(tǒng),其中所述運動估計引擎還包括控制器,用于控制所述裝置中模塊的操作、在所述裝置的所述模塊之間進行 協(xié)調(diào)、以及將運動估計結(jié)果輸出到視頻編碼器。
14、 如權(quán)利要求13所述的計算系統(tǒng),其中,所述控制器確定是否跳過 某個模塊的操作。
15、 如權(quán)利要求13所述的計算系統(tǒng),其中,所述控制器的功能由圖形 處理單元("GPU")來執(zhí)行。
16、 如權(quán)利要求9所述的計算系統(tǒng),其中,當所述整數(shù)搜索模塊確定 所述參考幀中的一個塊與所述宏塊之間的失真低于預定閾值時,所述整數(shù) 搜索模塊退出整數(shù)搜索。
17、 如權(quán)利要求9所述的計算系統(tǒng),其中,如果基于所確定宏塊分割 的在所述宏塊與其在所述參考幀中的相應(yīng)塊之間的失真大于第一閾值或小 于第二閾值,則使用來自所述宏塊分割模塊的結(jié)果來形成對所述宏塊的運 動估計的最終結(jié)果,其中所述第一閾值對應(yīng)較高失真,所述第二閾值對應(yīng) 較低失真。
18、 如權(quán)利要求9所述的計算系統(tǒng),其中,所述運動估計引擎位于所 述計算系統(tǒng)中的圖形設(shè)備上。
19、 一種用于執(zhí)行視頻編碼的運動估計的方法,包括 從當前幀中接收宏塊; 檢查是否指示從運動估計中跳過所述宏塊;如果指示跳過所述宏塊,則確定是否確實可以從運動估計中跳過所述 宏塊("跳過檢查");如果可以從運動估計中跳過所述宏塊,則檢查整數(shù)搜索是否被設(shè)置為 要執(zhí)行;如果所述整數(shù)搜索被設(shè)置為要執(zhí)行,則在整數(shù)像素位置處在參考幀中對所述宏塊執(zhí)行搜索("整數(shù)搜索");如果所述整數(shù)搜索沒有被設(shè)置為要執(zhí)行,則檢查是否內(nèi)部搜索被設(shè)置 為要執(zhí)行;如果所述內(nèi)部搜索被設(shè)置為要執(zhí)行,則對所述宏塊執(zhí)行幀內(nèi)搜索。
20、 如權(quán)利要求19所述的方法,還包括如果在所述整數(shù)搜索和所述跳 過檢査中的至少一個的過程期間在所述參考幀中的一個塊與所述宏塊之間 的失真度量低于預定閾值,則退出運動估計并將所述宏塊的最終結(jié)果輸出 到視頻編碼器。
21、 如權(quán)利要求19所述的方法,還包括在所述整數(shù)搜索期間,計算所述宏塊中所有4x4像素子塊的失真; 導出所述宏塊中其它尺寸子塊的失真;以及確定宏塊分割,所述宏塊分割造成了所述宏塊與其在所述參考幀中相 應(yīng)塊之間的最小失真。
22、 如權(quán)利要求19所述的方法,還包括如果分數(shù)級搜索被設(shè)置為要執(zhí) 行,則通過在分數(shù)級像素位置處在所述參考幀中搜索所述宏塊,來精細調(diào) 整來自所述整數(shù)搜索的結(jié)果。
23、 如權(quán)利要求19所述的方法,還包括如果雙向細調(diào)被設(shè)置為將要執(zhí) 行,則基于所述宏塊分割來細調(diào)所述宏塊的預測方向。
全文摘要
一種運動估計引擎可以實現(xiàn)為包括跳過檢查模塊、整數(shù)搜索模塊、宏塊分割模塊、分數(shù)級搜索模塊、雙向運動估計細調(diào)模塊和內(nèi)部搜索模塊。該運動估計引擎可以并行地執(zhí)行分數(shù)級搜索/雙向運動估計細調(diào)和內(nèi)部搜索。此外,該運動估計引擎中的模塊可以部分或全部打開或關(guān)閉,以適應(yīng)不同的運動估計需求。此外,該運動估計引擎可以實現(xiàn)早退出策略,以進一步節(jié)省計算。
文檔編號H04N7/26GK101472181SQ20081018472
公開日2009年7月1日 申請日期2008年12月29日 優(yōu)先權(quán)日2007年12月30日
發(fā)明者N·路, 洪 江 申請人:英特爾公司