亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

隔行掃描視頻的高級雙向預(yù)測編碼的制作方法

文檔序號:6602193閱讀:513來源:國知局
專利名稱:隔行掃描視頻的高級雙向預(yù)測編碼的制作方法
技術(shù)領(lǐng)域
描述了用于隔行掃描視頻編碼和解碼的技術(shù)和工具。例如,視頻編碼器對隔行掃 描視頻中的雙向預(yù)測宏塊進(jìn)行編碼。
背景技術(shù)
數(shù)字視頻消耗大量的存儲和傳輸容量。典型的原始數(shù)字視頻序列包括每秒15或 30個圖片。每個圖片可包括數(shù)萬或數(shù)十萬個像素(也稱為pel)。每個像素表示圖片的小 元素。在原始形式中,計算機(jī)通常用24個比特或以上來表示像素。因而,典型的原始數(shù)字 視頻序列的每秒比特數(shù)或比特率可以是5百萬比特/秒或以上。大多數(shù)計算機(jī)和計算機(jī)網(wǎng)絡(luò)缺乏處理原始數(shù)字視頻的資源。為此,工程師們使用 壓縮(也稱為譯碼或編碼)來降低數(shù)字視頻的比特率。壓縮可以是無損的,其中視頻的質(zhì) 量未受損,但比特率的降低受視頻復(fù)雜性的限制?;蛘?,壓縮可以是有損的,其中視頻的質(zhì) 量受損,但可獲得的比特率降幅更大。解壓縮是壓縮的反向過程。一般而言,視頻壓縮技術(shù)包括“幀內(nèi)”壓縮和“幀間”或預(yù)測壓縮。幀內(nèi)壓縮技術(shù) 壓縮通常稱為I-幀或關(guān)鍵幀的各個圖片。幀間壓縮技術(shù)參考前面和/或后續(xù)的各幀來壓 縮各個幀,而經(jīng)幀間壓縮的幀通常稱為預(yù)測幀、P-幀、或B-幀。I. Windows Media Video版本8和9中的幀間壓縮微軟公司的Windows Media Video版本8 [ “WMV8” ]包括視頻編碼器和視頻解碼器。WMV8編碼器使用幀內(nèi)壓縮和幀間壓縮,且WMV8解碼器使用幀內(nèi)解壓縮和幀間解壓縮。 Windows Media Video版本9[ “WMV9”]則將類似的體系結(jié)構(gòu)用于許多操作。WMV8編碼器中的幀內(nèi)壓縮使用基于塊的運動補償預(yù)測編碼,然后使用殘差的變換 編碼。圖1和2示出WMV8編碼器中預(yù)測幀的基于塊的幀間壓縮。特別地,圖1示出對預(yù)測 幀110的運動估計,而圖2示出對預(yù)測幀的運動補償塊的預(yù)測殘差壓縮。例如,在圖1中,WMV8編碼器計算用于預(yù)測幀110中的宏塊115的運動向量。為 了計算該運動向量,編碼器在參考幀130的搜索區(qū)域135中進(jìn)行搜索。在搜索區(qū)域135內(nèi), 編碼器對來自預(yù)測幀110的宏塊115和各個候選宏塊作比較,以便于尋找是好匹配的候選 宏塊。編碼器輸出指定匹配宏塊的(經(jīng)熵編碼的)運動向量。因為運動向量值常常相關(guān)于空間上位于四周的運動向量的值,所以用來傳送運動 向量信息的數(shù)據(jù)的壓縮可通過從相鄰宏塊中選擇運動向量預(yù)測值,并使用該預(yù)測值來預(yù)測 當(dāng)前宏塊的運動向量來獲得。編碼器可編碼運動向量和預(yù)測值之前的差值。在通過將差值 添加到預(yù)測值中重構(gòu)運動向量之后,解碼器使用該運動向量來用來自參考幀130的信息計 算用于宏塊115的預(yù)測宏塊,該參考幀是在編碼器和解碼器上可用的先前重構(gòu)幀。預(yù)測很 少是完美的,所以編碼器常常編碼預(yù)測宏塊和宏塊115本身之間的像素差異(也稱為誤差 或殘差塊)的各個塊。圖2示出WMV8編碼器中誤差塊235的計算和編碼的一個示例。該誤差塊235是 預(yù)測塊215和原始當(dāng)前塊225之間的差異。編碼器將離散余弦變換[“DCT”]240應(yīng)用于誤 差塊235,得到系數(shù)的8X8塊245。然后編碼器量化(250)DCT系數(shù),得到經(jīng)量化的DCT系 數(shù)的8X8塊255。編碼器將8X8塊255掃描(260)成一維數(shù)組265,從而系數(shù)通常從最低 頻率到最高頻率進(jìn)行排序。編碼器使用運行長度編碼270的變體來熵編碼經(jīng)掃描的系數(shù)。 編碼器從一個或多個run/level/last表格275中選擇熵碼,并輸出該熵碼。圖3示出對經(jīng)幀間編碼塊的相應(yīng)解碼過程300的一個示例。從圖3總地看來,解 碼器使用具有一個或多個run/level/last表格315的可變長度解碼310和運行長度解碼 320來解碼(310、320)表示預(yù)測殘差的經(jīng)熵編碼的信息。解碼器將存儲了經(jīng)熵編碼信息的 一維數(shù)組325逆掃描(330)成二維塊335。解碼器逆量化并逆離散余弦變換(一起編號為 340)該數(shù)據(jù),產(chǎn)生經(jīng)重構(gòu)的誤差塊345。在獨立的運動補償路徑中,解碼器使用運動向量信 息355來計算預(yù)測塊365,用于相對參考幀的位移。解碼器將預(yù)測塊365與經(jīng)重構(gòu)的誤差塊 345組合(370)在一起,以形成重構(gòu)塊375。原始和重構(gòu)幀之間的改變量是失真,且編碼該幀所需的比特數(shù)表示該幀的速率。 失真量大致與速率成反比。II.隔行掃描視頻和逐行掃描視頻視頻幀包含視頻信號的各行空間信息。對于逐行掃描視頻,這些行包含從一時刻 開始并繼續(xù)后續(xù)行直到幀的底部的樣本。逐行掃描I幀是幀內(nèi)編碼的逐行掃描視頻幀。逐 行掃描P幀是使用正向預(yù)測編碼的逐行掃描視頻幀,而逐行掃描B幀是使用雙向預(yù)測編碼 的逐行掃描視頻幀。典型的隔行掃描視頻幀由在不同時間開始掃描的兩個半幀組成。例如,參照圖4, 隔行掃描的視頻幀400包括上半幀410和下半幀420。通常,偶數(shù)編號行(上半幀)在一時 間(例如時間t)開始掃描而奇數(shù)編號行(下半幀)在不同(通常為后續(xù))時間(例如時間t+Ι)開始掃描。該定時可在隔行掃描視頻幀的區(qū)域中創(chuàng)建鋸齒狀特征,其中因為兩個半 幀在不同時間開始掃描而呈現(xiàn)運動。因此,各個隔行掃描的視頻幀可根據(jù)半幀結(jié)構(gòu)來重新 排列,其中奇數(shù)行組合在一個半幀中而偶數(shù)行組合在另一個半幀中。稱為半幀編碼的該排 列對在高運動圖片中減少這種鋸齒邊緣人工效應(yīng)是有用的。另一方面,在靜態(tài)區(qū)域中,隔行 掃描視頻幀中的圖像細(xì)節(jié)無需這種重新排列就可更為有效地保留。因此,幀編碼常用于靜 態(tài)或低運動的隔行掃描視頻幀,其中原始的交替半幀行排列得以保留。典型的逐行掃描視頻幀由具有非交替行的一內(nèi)容幀組成。與隔行掃描視頻相比, 逐行掃描視頻不將視頻幀分成各個半幀,并且整個幀從某個時間開始進(jìn)行從左到右、從上 到下的掃描。III.先前WMV編碼器和解碼器中的P-幀編碼和解碼先前的WMV編碼器和解碼器使用P-幀中的逐行掃描及隔行掃描的編碼和解碼。在 隔行掃描和逐行掃描的P-幀中,運動向量通過計算運動向量和運動向量預(yù)測值之間的差 值來在編碼器中編碼,其中運動向量預(yù)測值基于相鄰的運動向量進(jìn)行計算。并且,在解碼器 中,運動向量通過將運動向量差值添加到運動向量預(yù)測值來重新構(gòu)建,其中運動向量預(yù)測 值再次基于相鄰的運動向量進(jìn)行計算(這次是在解碼器中)。當(dāng)前宏塊的預(yù)測值或當(dāng)前宏 塊的半幀基于候選預(yù)測值來選擇,而運動向量差值基于該預(yù)測值來計算。通過將運動向量 差值添加到編碼器側(cè)或解碼器側(cè)的選定運動向量預(yù)測值,可重構(gòu)運動向量。通常,亮度運動 向量從經(jīng)編碼的運動信息中重構(gòu),而色度運動向量從經(jīng)重構(gòu)的亮度運動向量中導(dǎo)出。A.逐行掃描P-幀的編碼和解碼例如,在先前的WMV編碼器和解碼器中,逐行掃描P-幀可包含以一運動向量(IMV) 模式或四運動向量(4MV)模式編碼的宏塊,或被跳過的宏塊,其中決定通常在逐個宏塊的 基礎(chǔ)上作出。僅具有IMV宏塊(以及可能被跳過的宏塊)的P-幀被稱為IMV P-幀,而都 具有IMV和4MV宏塊(以及可能被跳過的宏塊)的P-幀被稱為混合MV的P-幀。一個運 動向量與每個IMV宏塊相關(guān)聯(lián),而四個運動向量與每個4MV宏塊相關(guān)聯(lián)(每個塊一個)。圖5A和5B是示出被視作用于IMV逐行掃描P-幀中宏塊的候選運動向量預(yù)測值 的宏塊的位置的示圖。候選預(yù)測值從左邊、上方和右上方宏塊中取得,除了宏塊是行中最后 一個宏塊的情形。在該情形中,Predicator (預(yù)測值)B從左上方宏塊而不是從右上方中取 得。對于幀為一個宏塊寬的特定情形,預(yù)測值總是預(yù)測值A(chǔ)(頂部預(yù)測值)。當(dāng)因為宏塊在 首行中從而預(yù)測值A(chǔ)在界限之外時,預(yù)測值為預(yù)測值C。各種其它規(guī)則解決其它特定情形, 諸如幀內(nèi)編碼的預(yù)測值。圖6A-10示出被視作用于混合MV幀中的IMV或4MV宏塊的運動向量的至多3個 候選運動向量的塊或宏塊的位置。在以下附圖中,較大的正方形是宏塊邊界而較小的正方 形是塊邊界。對于幀為一個宏塊寬的特定情形,預(yù)測值總是PredictorA(頂部預(yù)測值)。各 種其它規(guī)則解決其它特定情形,諸如用于首行4MV宏塊的首行塊、首行IMV宏塊、以及幀內(nèi) 編碼預(yù)測值。圖6A和6B是示出被視作用于混合MV幀中的IMV當(dāng)前宏塊的候選運動向量預(yù)測 值的塊的位置的示圖。相鄰的各個宏塊可以是IMV或4MV宏塊。圖6A和6B示出假設(shè)鄰居 都是4MV的候選運動向量的位置(即預(yù)測值A(chǔ)是當(dāng)前宏塊上面的宏塊中塊2的運動向量, 而預(yù)測值C是當(dāng)前宏塊左側(cè)緊鄰的宏塊中塊1的運動向量)。如果鄰居的任一個是IMV宏塊,則圖5A和5B中示出的運動向量預(yù)測值被視為整個宏塊的運動向量預(yù)測值。如圖6B所 示,如果宏塊是該行中的最后一個宏塊,則預(yù)測值B來自左上方宏塊的塊3而不像其它情形 一樣來自右上方宏塊的塊2。圖7A-10示出被視作用于4MV宏塊中4個亮度塊的每一個的候選運動向量預(yù)測值 的塊的位置。圖7A和7B是示出被視作用于位置0上一個塊的候選運動向量預(yù)測值的塊的 位置的示圖;圖8A和8B是示出被視作用于位置1上一個塊的候選運動向量預(yù)測值的塊的 位置的示圖;圖9是示出被視作用于位置2上一個塊的候選運動向量預(yù)測值的塊的位置的 示圖;而圖10是示出被視作用于位置3上一個塊的候選運動向量預(yù)測值的塊的位置的示 圖。再一次,如果鄰居是IMV宏塊,則該宏塊的運動向量預(yù)測值用于該宏塊的各個塊。對于宏塊是行中第一宏塊的情形,塊0的預(yù)測值B與該行中剩余宏塊的塊0進(jìn)行 不同的處理(參見圖7A和7B)。在該情形中,預(yù)測值B從當(dāng)前宏塊上面緊鄰宏塊的塊3中 取得,而不像其它情形一樣從當(dāng)前宏塊左上方的宏塊的塊3中取得。類似地,對于宏塊是行 中最后一個宏塊的情形,對塊1的預(yù)測值B進(jìn)行不同的處理(參見圖8A和8B)。在該情形 中,預(yù)測值從當(dāng)前宏塊上面緊鄰宏塊的塊2中取得,而不像其它情形一樣從當(dāng)前宏塊右上 方的宏塊的塊2中取得。一般而言,如果該宏塊在第一宏塊列中,則塊0和2的預(yù)測值C被 設(shè)置為等于0。B.先前WMV編碼器和解碼器中隔行掃描P-幀的編碼和解碼先前WMV編碼器和解碼器將4:1 1宏塊格式用于隔行掃描的P-幀,該宏塊格式可 包含用半幀模式或幀模式編碼的宏塊,或被跳過的宏塊,其中決定通常在逐個宏塊的基礎(chǔ) 上作出。兩個運動向量關(guān)聯(lián)于每個半幀編碼的宏塊(每個半幀一個運動向量),而一個運動 向量關(guān)聯(lián)于每個幀編碼的宏塊。編碼器聯(lián)合編碼運動信息,包括水平和垂直運動向量差值 分量,以及可能的其它信令信息。圖11和12A-B示出分別用于先前WMV編碼器和解碼器的隔行掃描P-幀中的幀編 碼4:1:1宏塊和半幀編碼4:1:1宏塊的運動向量預(yù)測的候選預(yù)測值的示例。圖11示出用 于隔行掃描P-幀的內(nèi)部位置中當(dāng)前幀編碼4:1 1宏塊的候選預(yù)測值A(chǔ)、B和C(不是宏塊行 中第一或最后一個宏塊、也不是首行)。預(yù)測值可從不同于那些標(biāo)有A、B和C的不同候選方 向中獲得(例如在諸如當(dāng)前宏塊是行中第一宏塊或最后一個宏塊或在首行中的特定情形, 因為對于這些情形得不到某些預(yù)測值)。對于當(dāng)前的幀編碼宏塊,候選預(yù)測值取決于相鄰宏 塊是半幀編碼還是幀編碼的來進(jìn)行不同的計算。對于相鄰的幀編碼宏塊,運動向量簡便地 取作候選預(yù)測值。對于相鄰的半幀編碼宏塊,候選運動向量通過平均上半幀和下半幀運動 向量來確定。圖12A-B示出用于半幀內(nèi)部位置中半幀編碼的4:1:1宏塊內(nèi)的當(dāng)前半幀的候選預(yù) 測值A(chǔ)、B和C。在圖12A中,當(dāng)前半幀是下半幀,且相鄰宏塊中的下半幀運動向量被用作候 選預(yù)測值。在圖12B中,當(dāng)前半幀是上半幀,且相鄰宏塊中的上半幀運動向量被用作候選預(yù) 測值。因而,對于當(dāng)前半幀編碼宏塊中的每個半幀,每個半幀的候選運動向量預(yù)測值的數(shù)量 最多為3,其中每個候選值來自與當(dāng)前半幀相同的同一半幀類型(例如上半幀或下半幀)。 再一次,各種特定情形(未示出)在當(dāng)前宏塊是行中第一宏塊或最后一個宏塊,或在首行中 時應(yīng)用,因為對于這些情形得不到某些預(yù)測值。為了從候選預(yù)測值集中選擇一預(yù)測值,討論中的先前WMV編碼器和解碼器使用不同的選擇算法,諸如三者中值算法或四者中值算法。三者中值預(yù)測的過程在圖13的偽碼 1300中說明。四者中值預(yù)測的過程在圖14的偽碼1400中說明。IV.雙向預(yù)測雙向預(yù)測幀(或B-幀)使用來自源視頻的兩個幀作為參考(或錨)幀,而不是在 P-幀中使用的一個錨。在典型B-幀的錨幀中,一個錨幀來自時間上的過去而另一個錨幀來 自時間上的將來。參照圖15,視頻序列中的B-幀1510具有時間上在先的參考幀1520和時 間上將來的參考幀1530。使用B-幀提供了根據(jù)更大的比特率節(jié)約(例如出現(xiàn)某些類型的 移動,諸如閉塞)而有效壓縮的優(yōu)點。具有B-幀的經(jīng)編碼比特流通常比沒有B-幀的經(jīng)編 碼比特流使用較少的比特,同時提供相似的視覺質(zhì)量。B-幀還提供在較小設(shè)備空間中使用 時的更多選項和靈活性。例如,解碼器可通過選擇不解碼或顯示B-幀來容許空間和時間限 制,因為B-幀通常不被用作參考幀。對視頻序列中使用B-幀來使速率-失真改進(jìn)的估計 的范圍為從0到50%。V.先前WMV編碼器和解碼器中B-幀的編碼和解碼先前的WMV編碼器和解碼器使用B-幀。盡管正向預(yù)測幀(例如P-幀)中的宏塊 僅具有一個方向模式的預(yù)測(正向,從先前的I-或P-幀),但B-幀中的宏塊可使用五種 不同預(yù)測模式來預(yù)測正向、反向、直接、插值和幀內(nèi)。編碼器選擇并用信號表示比特流中不 同的預(yù)測模式。例如,討論中的先前WMV編碼器在幀級別上發(fā)送經(jīng)壓縮的位平面,表示用于 B-幀的每個宏塊的直接/非直接模式?jīng)Q定,而非直接模式(諸如正向、反向和插值模式)在 宏塊級別中示出。正向模式類似于常規(guī)的P-幀預(yù)測。在正向模式中,宏塊從時間上在先的錨中導(dǎo) 出。在反向模式中,宏塊從時間上后續(xù)的錨中導(dǎo)出。以直接或插值模式預(yù)測的宏塊在預(yù)測 中使用正向和反向錨。直接和插值模式使用將兩個參考的像素值組合到一個宏塊像素集中 的舍入平均,如以下公式所示平均像素值=(正向插值+反向插值+1) >> 1A.共處(co-located)運動向量的分?jǐn)?shù)編碼(Fraction Coding)和縮放在討論中的先前WMV編碼器和解碼器中,編碼器通過縮放正向錨的共處運動向量 來隱式地導(dǎo)出直接模式的運動向量。該縮放運算依賴于當(dāng)前B-幀相對于其錨的時間位置。 為了編碼參考圖片的時間位置,編碼器使用分?jǐn)?shù)編碼。在分?jǐn)?shù)編碼中,編碼器顯式地將當(dāng)前B-幀的時間位置編碼為其兩個錨之間距離 的一分?jǐn)?shù)。變量BFRACTI0N用來表示不同的各個分?jǐn)?shù),并在幀級別上發(fā)送。該分?jǐn)?shù)在0和1 之間離散值的有限集上取值。對于直接模式的運動向量,編碼器和解碼器使用該分?jǐn)?shù)來縮 放參考幀中的共處運動向量(MV),從而通過實現(xiàn)以下縮放運算來導(dǎo)出當(dāng)前B-幀的隱式的 直接模式運動向量(MVjP MVb)MVf=分?jǐn)?shù) *MVMVf =(分?jǐn)?shù)-1)*MV圖16示出分?jǐn)?shù)編碼如何使編碼器能任意縮放周圍參考幀之間的運動。為了導(dǎo)出 在B-幀1620中編碼的當(dāng)前宏塊的MVf和MVb,編碼器和解碼器使用分?jǐn)?shù)編碼來縮放將來參 考幀1630中相應(yīng)宏塊的運動向量(MV)。在圖16所示的示例中,對于分?jǐn)?shù)ρ和q,p+q = 1。 該編碼器和解碼器使用兩個隱式的運動向量來處理在先參考幀1640和將來參考幀1630中的宏塊,并使用這些的平均來預(yù)測當(dāng)前宏塊1610。例如,在圖16中,MVf = (dx*p,dy*p)而 MVb = (_dx氺q,_dy氺q)。圖17中的表格1700是用于比特流元素BFRACTI0N的可變長度代碼(VLC)表格。 在表格1700所示示例中,3-比特代碼字是“短”代碼字而7-比特代碼字是“長”代碼字。該 解碼器根據(jù)圖18中所示偽碼1800基于分?jǐn)?shù)的分子和分母來尋找縮放系數(shù)。一旦縮放系數(shù)已被確定,解碼器就用它來縮放用于共處宏塊的運動向量的χ-和 y-元素。給定后續(xù)的錨幀是P-幀(對于I-幀,所有的運動向量被假定為(0,0))且共處宏 塊包含運動向量(MV_X,MV_Y),則解碼器導(dǎo)出兩個運動向量,其中一個(MV_XF,MV_Yf)參考 正向(在先)錨幀,而另一個(MV_Xb,MV_Yb)參考反向(后續(xù))錨幀。解碼器根據(jù)圖19中所示偽碼1900來執(zhí)行縮放。在偽碼1900的函數(shù)Scale_ Direct_MV中,輸入MV_X和MV_Y是來自將來參考圖片的共處宏塊的運動向量的χ-和y_元 素,而輸出MV_Xf、MV_Yf、MV_Xb和MV_Yb是用于被解碼宏塊的正向和反向指示運動向量的 χ-禾口 y_元素。B. B/1 幀討論中的先前WMV編碼器和解碼器還在逐行掃描編碼和解碼中使用幀內(nèi)B-幀 (“B/I-幀”)。B/I幀像I-幀一樣編碼,因為它們不依賴于參考幀。但與I-幀不一樣的 是,B/I幀不是關(guān)鍵幀;不允許其它幀將B/I幀用作錨。C.隔行掃描的B-幀討論中的先前WMV編碼器和解碼器還使用隔行掃描的B-幀。隔行掃描B-幀中的 宏塊可進(jìn)行半幀編碼或幀編碼。經(jīng)幀編碼的宏塊可具有一個、兩個(例如插值模式的正向 和反向運動向量,直接模式的導(dǎo)出正向和反向運動向量)、或沒有運動向量,而半幀編碼的 宏塊可取決于預(yù)測模式具有多達(dá)四個運動向量。例如,在直接模式的半幀編碼宏塊中,導(dǎo)出 四個隱式運動向量上半幀的正向和反向運動向量,以及下半幀的正向和反向運動向量。盡管討論中的先前WMV編碼器和解碼器使用隔行掃描的B-幀,但它們在若干重要 方面受限。例如,每個宏塊只允許一種宏塊預(yù)測模式(例如直接模式、正向模式等),不使用 4MV編碼(即,對宏塊中的每個塊使用一個運動向量),且沒有任何B-幀部分可以是任何幀 的運動補償?shù)膮⒖?。作為另一示例,討論中的先前WMV編碼器和解碼器的隔行掃描編碼和 解碼(包括隔行掃描的B-幀)僅使用4:1:1宏塊格式執(zhí)行。VI.用于視頻壓縮和解壓縮的標(biāo)準(zhǔn)除了先前的WMV編碼器和解碼器之外,若干種國際標(biāo)準(zhǔn)涉及視頻壓縮和解壓縮。 這些標(biāo)準(zhǔn)包括來自國際電信同盟[“ITU”]的運動圖象專家組[“MPEG”]1、2和4標(biāo)準(zhǔn)以 及H. 261、H. 262、H. 263和H. 264標(biāo)準(zhǔn)。在國際標(biāo)準(zhǔn)中用來獲得數(shù)字視頻序列的數(shù)據(jù)壓縮的 主要方法之一是減少圖片之間的時間冗余。這些流行壓縮方案(MPEG-l、MPEG-2、MPEG-4、 H. 261、H. 263等)使用運動估計和補償。例如,當(dāng)前幀被分成均勻的正方形區(qū)域(例如各個 塊和/或宏塊)。每個當(dāng)前區(qū)域的匹配區(qū)域通過發(fā)送該區(qū)域的運動向量信息來指定。該運 動向量指示在先前編碼(和重構(gòu))幀中要用作當(dāng)前區(qū)域的預(yù)測值的區(qū)域的位置。當(dāng)前區(qū)域 和參考幀中區(qū)域之間稱為誤差信號逐個像素差值被導(dǎo)出。該誤差信號通常具有比原始信號 更低的熵。因此,信息可以較低速率進(jìn)行編碼。因為在先前的WMV編碼器和解碼器中,運動 向量值常常相關(guān)于空間上位于四周的運動向量,所以用來表示運動向量信息的數(shù)據(jù)的壓縮可通過編碼當(dāng)前運動向量與基于先前編碼的、相鄰運動向量的預(yù)測值之間的差異來獲得?!﹪H標(biāo)準(zhǔn)描述隔行掃描視頻幀的運動估計和補償。H. 262標(biāo)準(zhǔn)使隔行掃描 的視頻幀被編碼為單個幀或兩個半幀,其中幀編碼或半幀編碼可自適應(yīng)地在逐幀基礎(chǔ)上選 擇。H. 262標(biāo)準(zhǔn)描述基于半幀的預(yù)測,這是一種僅使用參考幀的一個半幀的預(yù)測模式。H. 262 標(biāo)準(zhǔn)還描述雙基預(yù)測,這是兩個正向的基于半幀預(yù)測值對隔行掃描P-圖片中的16 X 16塊 平均的預(yù)測模式。H. 262標(biāo)準(zhǔn)的7. 6節(jié)描述“半幀預(yù)測”,包括在兩個參考半幀中進(jìn)行選擇, 以用作隔行掃描視頻幀的當(dāng)前半幀的宏塊的運動補償。小節(jié)7. 6. 3描述運動向量預(yù)測和重 構(gòu),其中給定宏塊的重構(gòu)運動向量變成經(jīng)后續(xù)編碼/解碼宏塊的運動向量預(yù)測值。這種運 動向量預(yù)測在許多情形中未能充分預(yù)測用于隔行掃描視頻幀的半幀的宏塊的運動向量。此外,H.262標(biāo)準(zhǔn)的7.6節(jié)描述B-圖片的“半幀預(yù)測”和“幀預(yù)測”。在“半幀預(yù) 測”和“幀預(yù)測”中,對B-圖片的預(yù)測使用兩個最新重構(gòu)的參考幀(略去其它介入的B-圖 片)執(zhí)行,這些參考幀可被編碼為兩個半幀或單個幀。知道了視頻壓縮和解壓縮對數(shù)字視頻的關(guān)鍵重要性,視頻壓縮和解壓縮是得以豐 富開發(fā)的領(lǐng)域就不足為奇了。然而,不管先前的視頻壓縮和解壓縮技術(shù)的優(yōu)點是什么,它們 并不具有以下技術(shù)和工具的優(yōu)點。

發(fā)明內(nèi)容
總而言之,詳細(xì)描述涉及用于編碼和解碼雙向預(yù)測的隔行掃描視頻幀(例如隔行 掃描的B-半幀、隔行掃描的B-幀)的各種技術(shù)和工具。所述技術(shù)和工具改進(jìn)了速率/失 真性能,并便于更好地支持具有較低CPU資源的設(shè)備(例如具有較小形狀系數(shù)的設(shè)備)。所述各實施例實現(xiàn)一種或多種用于編碼和/或解碼隔行掃描B-圖片的所述技術(shù) 和工具,如下包括但不限于在一方面中,對于隔行掃描B-幀,編碼器/解碼器在隔行掃描B-幀的半幀編碼宏 塊中的半幀之間切換預(yù)測模式。例如,編碼器/解碼器在半幀編碼宏塊中的上半幀的正向 預(yù)測模式和下半幀的反向模式之間切換。同一半幀編碼宏塊內(nèi)正向和反向預(yù)測之間的切換 使發(fā)現(xiàn)對隔行掃描B-幀的不同部分的有效預(yù)測模式更為靈活。在另一方面中,對于隔行掃描B-幀,編碼器/解碼器通過為先前解碼的時間后續(xù) 錨的共處宏塊的上半幀和下半幀的每一個選擇至多一個代表性運動向量,計算當(dāng)前宏塊的 直接模式運動向量。例如,至少部分地基于編碼當(dāng)前隔行掃描B-幀的宏塊的模式(例如 IMV模式、2半幀MV模式等)執(zhí)行選擇。在又一方面中,對于隔行掃描B-半幀或隔行掃描B-幀,編碼器/解碼器使用4MV 編碼。例如,4MV被用于單向預(yù)測模式(正向或反向模式),但不用于其它可用預(yù)測模式(例 如直接、插值)。使用4MV允許對隔行掃描B-半幀和隔行掃描B-幀進(jìn)行更準(zhǔn)確的運動補 償;將4MV限制在正向和反向模式減少了編碼開銷,并避免了關(guān)聯(lián)于組合4MV與諸如直接和 插值的模式的解碼復(fù)雜性。在另一方面中,對于隔行掃描B-半幀或隔行掃描B-巾貞,正向運動向量使用來自正 向運動向量緩沖區(qū)的先前重構(gòu)(或估計)的正向運動向量由編碼器/解碼器進(jìn)行預(yù)測,而 反向運動向量使用來自反向運動向量緩沖區(qū)的先前重構(gòu)(或估計)的反向運動向量進(jìn)行預(yù) 測。結(jié)果的運動向量被添加到相應(yīng)的緩沖區(qū)中。運動向量緩沖區(qū)中的空穴可用估計的運動向量值來填充。例如,對于隔行掃描B-幀,當(dāng)正向預(yù)測用來預(yù)測運動向量且運動向量被添 加到正向運動向量緩沖區(qū)中時,反向運動向量緩沖區(qū)中的相應(yīng)位置以僅將反向運動向量用 作預(yù)測值的預(yù)測運動向量來填充(“空穴填充”)。作為另一示例,對于隔行掃描B-半幀,要 為空穴填充在不同極性的運動向量(例如“相同極性”或“相反極性”)之間選擇,編碼器/ 解碼器選擇主極性半幀運動向量。錨和當(dāng)前幀之間的距離使用各種語法元素計算,且計算 出的距離被用于縮放參考半幀運動向量。各個運動向量緩沖區(qū)和各個運動向量緩沖區(qū)中的 空穴填充使得對隔行掃描B-半幀和隔行掃描B-幀的運動向量預(yù)測更為準(zhǔn)確。在又一方面中,對于隔行掃描的B-半巾貞,編碼器/解碼器使用“自參考”巾貞。例如, 當(dāng)前幀中的第二個B-半幀在運動補償預(yù)測中參考來自當(dāng)前幀的第一 B-半幀。使幀中第一 個B-半幀用作該幀中第二個B-半幀的參考使得第二個半幀的預(yù)測更加準(zhǔn)確,同時還保留 在當(dāng)前幀中具有B-半幀的時間可縮放性優(yōu)點。在另一方面中,對于隔行掃描的B-半巾貞,編碼器發(fā)送指示用于隔行掃描B-半幀中 的一個或多個宏塊的預(yù)測模式是正向還是非正向的二進(jìn)制信息。例如,編碼器在經(jīng)壓縮位 平面的B-半幀級別上發(fā)送正向/非正向決定信息。在經(jīng)壓縮位平面的B-半幀級別上發(fā)送 正向/非正向預(yù)測模式?jīng)Q定信息可減少預(yù)測模式編碼的編碼開銷。解碼器執(zhí)行相應(yīng)的解 碼。在又一方面中,對于隔行掃描的B-半幀,如果下一錨圖片的相應(yīng)半幀中的相應(yīng)宏 塊使用四個運動向量編碼,則編碼器/解碼器使用利于主極性的邏輯來選擇直接模式的運 動向量。例如,如果相應(yīng)宏塊的相同極性運動向量數(shù)量上超過其相反極性的運動向量,則編 碼器/解碼器計算相同極性運動向量的中值,以獲得用于導(dǎo)出直接模式運動向量的運動向 量。該選擇過程允許導(dǎo)出準(zhǔn)確的用于具有4MV宏塊錨的隔行掃描B-半幀的直接模式運動 向量。各種技術(shù)和工具可組合或單獨使用。從以下參照附圖進(jìn)行的不同實施例的詳細(xì)描述中,本發(fā)明的其它特征和優(yōu)點將變 得顯而易見。


圖1是示出根據(jù)現(xiàn)有技術(shù)的視頻編碼器的運動估計的示圖。圖2是示出根據(jù)現(xiàn)有技術(shù)的視頻編碼器中預(yù)測殘差的8X8塊的基于塊的壓縮。圖3是示出根據(jù)現(xiàn)有技術(shù)的視頻編碼器中預(yù)測殘差的8X8塊的基于塊的解壓縮。圖4是示出根據(jù)現(xiàn)有技術(shù)的隔行掃描幀的示圖。圖5A和5B是示出用于根據(jù)現(xiàn)有技術(shù)的逐行掃描P-幀中IMV宏塊的候選運動向 量預(yù)測值的宏塊的位置的示圖。圖6A和6B是示出用于根據(jù)現(xiàn)有技術(shù)的混合1MV/4MV逐行掃描P-幀中的IMV宏 塊的候選運動向量預(yù)測值的塊的位置的示圖。圖7A、7B、8A、8B、9和10是示出用于根據(jù)現(xiàn)有技術(shù)的混合1MV/4MV逐行掃描P-幀 中的4MV宏塊中各位置上塊的候選運動向量預(yù)測值的塊的位置的示圖。圖11是示出用于根據(jù)現(xiàn)有技術(shù)的隔行掃描P-幀中當(dāng)前幀編碼宏塊的候選運動向 量預(yù)測值的示圖。
圖12A-12B是示出用于根據(jù)現(xiàn)有技術(shù)的隔行掃描P-幀中當(dāng)前半幀編碼宏塊的候 選運動向量預(yù)測值的示圖。圖13和14是示出根據(jù)現(xiàn)有技術(shù)的用于分別執(zhí)行三者中值和四者中值計算的偽碼 的代碼示圖。圖15是示出根據(jù)現(xiàn)有技術(shù)的具有過去和將來參考幀的B-幀的示圖。圖16是示出根據(jù)現(xiàn)有技術(shù)的使用分?jǐn)?shù)編碼的直接模式預(yù)測的示圖。圖17示出根據(jù)現(xiàn)有技術(shù)的比特流元素BFRACTI0N的VLC表格。圖18是示出根據(jù)現(xiàn)有技術(shù)的用于尋找縮放直接模式預(yù)測中共處宏塊的運動向量 的縮放系數(shù)的偽碼的代碼清單。圖19是示出根據(jù)現(xiàn)有技術(shù)的用于根據(jù)縮放系數(shù)縮放共處宏塊中運動向量的χ-和 y-元素的偽碼的代碼清單。圖20是適當(dāng)計算環(huán)境的框圖,結(jié)合該環(huán)境可實現(xiàn)若干所述實施例。圖21是通用視頻編碼器系統(tǒng)的框圖,結(jié)合該系統(tǒng)可實現(xiàn)若干所述實施例。圖22是通用視頻解碼器系統(tǒng)的框圖,結(jié)合該系統(tǒng)可實現(xiàn)若干所述實施例。圖23是在若干所述實施例中使用的宏塊格式的示圖。圖24A是一部分隔行掃描視頻幀的示圖,其中示出上半幀和下半幀的交替行。圖 24B是為編碼/解碼組織成幀的隔行掃描視頻幀的示圖,而圖24C是為編碼/解碼組織成半 幀的隔行掃描視頻幀的示圖。圖25和26是示出具有兩個參考半幀的隔行掃描P-半幀的示圖。圖27和28是示出使用所允許的最新參考半幀的隔行掃描P-半幀的示圖。圖29和30是示出使用所允許的第二最新參考半幀的隔行掃描P-半幀的示圖。圖31是示出運動向量的各垂直分量與當(dāng)前和參考半幀極性的不同組合的相應(yīng)空 間位置之間的關(guān)系的示圖。圖32是示出當(dāng)前宏塊的兩組三個候選運動向量預(yù)測值的示圖。圖33A-33F是示出用于計算兩個參考半幀的隔行掃描P-或B-半幀中的運動向量 預(yù)測值的偽碼的代碼清單。圖34A-34B是示出用于縮放來自一個半幀的預(yù)測值以導(dǎo)出來自另一個半幀的預(yù) 測值的偽碼的代碼清單。圖35和36是示出關(guān)聯(lián)于不同參考幀距離的縮放運算值的表格。圖37是示出隔行掃描P-幀的2半幀MV宏塊中亮度塊的運動向量和色度塊的導(dǎo) 出運動向量的示圖。圖38是示出隔行掃描P-幀的4幀MV宏塊中4個亮度塊的每一個的不同運動向 量和4個色度子塊的每一個的導(dǎo)出運動向量的示圖。圖39是示出隔行掃描P-幀的4半幀MV宏塊中亮度塊的運動向量和色度塊的導(dǎo) 出運動向量的示圖。圖40A-40B是示出隔行掃描P-幀的當(dāng)前宏塊的候選預(yù)測值的示圖。圖41是示出使用不同預(yù)測模式預(yù)測隔行掃描B-幀的半幀編碼宏塊中的各個半幀 的運動向量的技術(shù)的流程圖。圖42是示出計算隔行掃描B-幀的宏塊的直接模式運動向量的技術(shù)的流程圖。
圖43是先前已解碼的時間上后續(xù)錨幀的共處宏塊的各個塊的緩存運動向量的示 圖,這些緩存運動向量用于計算隔行掃描B-幀的宏塊的直接模式運動向量。圖44是示出使用正向和/或反向運動向量緩沖區(qū)預(yù)測隔行掃描B-幀的當(dāng)前宏塊 的運動向量的技術(shù)的流程圖。圖45是示出用于預(yù)測宏塊運動向量的正向運動向量緩沖區(qū)和反向運動向量緩沖 區(qū)中的運動向量的示圖。圖46是示出正向運動向量緩沖區(qū)和反向運動向量緩沖區(qū)中重構(gòu)宏塊的上半幀和 下半幀運動向量的示圖。圖47是示出描述用于隔行掃描B-半幀運動向量預(yù)測中的實值緩存和空穴填充的 極性選擇過程的偽碼的代碼清單。圖48A-48B是示出縮放來自一個半幀的預(yù)測值以導(dǎo)出來自另一半幀的預(yù)測值用 于經(jīng)反向預(yù)測的隔行掃描B-半幀的偽碼的代碼清單。圖49是示出關(guān)聯(lián)于第一隔行掃描B-半幀的不同參考幀距離的縮放運算值的表 格。圖50A和50B是示出隔行掃描B-半幀的參考半幀的示圖。圖51是示出用于在具有一個或多個位平面編碼模式的視頻編碼器中編碼隔行掃 描B-半幀的宏塊的正向/非正向預(yù)測模式?jīng)Q定信息的技術(shù)的流程圖。圖52是示出用于解碼隔行掃描B-半幀的宏塊的正向/非正向預(yù)測模式?jīng)Q定信息 的技術(shù)的流程圖,其中該決定信息由具有一個或多個位平面編碼模式的視頻編碼器編碼。圖53是顯示描述對用作隔行掃描B-半幀中直接模式運動向量的基礎(chǔ)的運動向量 的選擇過程的偽碼的代碼清單。圖54是示出用于組合實現(xiàn)中隔行掃描B-半幀或BI-半幀的幀_層比特流語法的 示圖。圖55是示出用于組合實現(xiàn)中隔行掃描B-半幀的半幀-層比特流語法的示圖。圖56是示出用于組合實現(xiàn)中隔行掃描BI-半幀的半幀-層比特流語法的示圖。圖57是用于組合實現(xiàn)中隔行掃描B-半幀的宏塊的宏塊-層比特流語法的示圖。圖58是用于組合實現(xiàn)中隔行掃描BI-半幀的宏塊的宏塊-層比特流語法的示圖。圖59是用于組合實現(xiàn)中隔行掃描B-幀的幀-層比特流語法的示圖。圖60是用于組合實現(xiàn)中隔行掃描B-幀的宏塊的宏塊-層比特流語法的示圖。圖61A-61B是示出用于組合實現(xiàn)中解碼運動向量差值和主/非主預(yù)測值信息的偽 碼的代碼清單。圖62A-62F是示出用于組合實現(xiàn)中計算雙參考隔行掃描P-半幀中的運動向量預(yù) 測值的偽碼的代碼清單。圖63是示出用于組合實現(xiàn)中確定隔行掃描B-半幀的參考半幀的偽碼的代碼清圖64是示出用于組合實現(xiàn)中收集隔行掃描P-幀的IMV宏塊的候選運動向量的偽 碼的代碼清單。圖65、66、67和68是示出用于組合實現(xiàn)中收集隔行掃描P-幀的4幀MV宏塊的候 選運動向量的偽碼的代碼清單。
圖69和70是示出用于組合實現(xiàn)中收集隔行掃描P-幀的2半幀MV宏塊的候選運 動向量的偽碼的代碼清單。圖71、72、73和74是示出用于組合實現(xiàn)中收集隔行掃描P-幀的4半幀MV宏塊的 候選運動向量的偽碼的代碼清單。圖75是示出用于組合實現(xiàn)中計算隔行掃描P-幀的幀運動向量的運動向量預(yù)測值 的偽碼的代碼清單。圖76是示出用于組合實現(xiàn)中計算隔行掃描P-幀的半幀運動向量的運動向量預(yù)測 值的偽碼的代碼清單。圖77A和77B是示出用于組合實現(xiàn)中解碼隔行掃描P-幀和B-幀的運動向量差值 的偽碼的代碼清單。圖78是示出用于組合實現(xiàn)中導(dǎo)出隔行掃描P-幀的色度運動向量的偽碼的代碼清單。圖79A-79C是示出用于隔行掃描B-半幀的宏塊的正向/非正向預(yù)測模式?jīng)Q定信 息的Norm-6和Diff-6位平面編碼模式的平鋪顯示的示圖。
具體實施例方式本申請涉及用于隔行掃描視頻的有效壓縮和解壓縮的技術(shù)和工具。在各個所述實 施例中,視頻編碼器和解碼器結(jié)合用于編碼和解碼雙向預(yù)測的隔行掃描視頻幀的技術(shù),和 以包括各種層或級別(例如序列級別、幀級別、半幀級別、宏塊級別、和/或塊級別)的比特 流格式或語法使用的相應(yīng)信號表示技術(shù)。對所述實現(xiàn)的各種可選方案是可能的。例如,參照流程圖描述的方法可通過改變 各流程圖中所示的各階段的順序、或重復(fù)或略去某些階段等來變更。作為另一示例,盡管某 些實現(xiàn)參照特定宏塊格式進(jìn)行了描述,但是也可使用其它格式。此外,參照雙向預(yù)測描述的 技術(shù)和工具也可應(yīng)用于其它類型的預(yù)測。各種技術(shù)和工具可組合或獨立地使用。不同實施例實現(xiàn)所述技術(shù)和工具的一種或 多種。在此所述的一些技術(shù)和工具可用于視頻編碼器或解碼器,或者在一些其它系統(tǒng)中并 非具體受限于視頻編碼或解碼。I.計算環(huán)境圖20示出可實現(xiàn)若干所述實施例的適當(dāng)計算環(huán)境2000的通用示例。計算環(huán)境 2000并非旨在提出對本發(fā)明使用范圍或功能的任何限制,因為本發(fā)明的技術(shù)和工具可在不 同的通用或?qū)S糜嬎悱h(huán)境中實現(xiàn)。參照圖20,計算環(huán)境2000包括至少一個處理單元2010和存儲2020。在圖20中, 該最基本配置2030包括在虛線內(nèi)。處理單元2010執(zhí)行計算機(jī)可執(zhí)行指令,且可以是實際或 虛擬處理器。在多處理系統(tǒng)中,多個處理單元執(zhí)行計算機(jī)可執(zhí)行指令以增加處理能力。存 儲器2020可以是易失性存儲器(例如寄存器、高速緩存、RAM)、非易失性存儲器(例如ROM、 EEPR0M、閃存等)或兩者的組合。存儲器2020存儲實現(xiàn)進(jìn)行隔行掃描視頻幀的雙向預(yù)測的 視頻編碼器或解碼器的軟件2080。計算環(huán)境可具有附加特征。例如,計算環(huán)境2000包括存儲2040、一個或多個輸入 設(shè)備2050、一個或多個輸出設(shè)備2060、以及一個或多個通信連接2070。諸如總線、控制器或網(wǎng)絡(luò)的互連機(jī)制(未示出)使計算環(huán)境2000的各個組件互相連接。通常,操作系統(tǒng)軟件 (未示出)向在計算環(huán)境2000中執(zhí)行的其它軟件提供一個操作環(huán)境,并協(xié)調(diào)計算環(huán)境2000 的各個組件的動作。存儲2040可以是可移動或不可移動的,并包括磁盤、磁帶或盒式磁帶、⑶-ROM、 CD-RW、DVD、或任何其它可用于存儲信息并可在計算環(huán)境2000內(nèi)訪問的媒體。存儲2040為 軟件2080存儲實現(xiàn)視頻編碼器或解碼器的指令。輸入設(shè)備2050可以是諸如鍵盤、鼠標(biāo)、電子筆、或跟蹤球、語音輸入設(shè)備、掃描設(shè) 備、或向計算環(huán)境2000提供輸入的另一設(shè)備。對于音頻或視頻編碼,輸入設(shè)備2050可以是 接受模擬或數(shù)字形式的音頻或視頻輸入的聲卡、視頻卡、TV調(diào)諧器卡或相似設(shè)備、或?qū)⒁纛l 或視頻樣本讀入計算環(huán)境2000中的⑶-ROM或⑶-RW。輸出設(shè)備2060可以是顯示器、打印 機(jī)、揚聲器、CD刻錄機(jī)、或從計算環(huán)境2000提供輸出的另一設(shè)備。通信連接2070允許經(jīng)通信媒體與另一計算實體的通信。通信媒體在已調(diào)制數(shù)據(jù) 信號中傳送諸如計算機(jī)可執(zhí)行指令、音頻或視頻輸入或輸出、或其它數(shù)據(jù)等信息。已調(diào)制數(shù) 據(jù)信號是使其特征的一個或多個以在信號中編碼信息的方式進(jìn)行設(shè)置或改變的信號。作為 示例且非限制,通信媒體包括用電子、光學(xué)、RF、紅外線、聲學(xué)或其它載體實現(xiàn)的有線或無線 技術(shù)。這些技術(shù)和工具可在計算機(jī)可讀媒體的一般上下文中描述。計算機(jī)可讀媒體是可 在計算環(huán)境內(nèi)訪問的任何可用媒體。作為示例,但非限制,對于計算環(huán)境2000,計算機(jī)可讀 媒體包括存儲器2020、存儲2040、通信媒體、以及以上任一個的組合。這些技術(shù)和工具可在計算機(jī)可執(zhí)行指令的一般上下文中描述,諸如在目標(biāo)實際或 虛擬處理器上的計算環(huán)境中執(zhí)行的程序模塊所包括的計算機(jī)可執(zhí)行指令。通常,程序模塊 包括執(zhí)行具體任務(wù)或?qū)崿F(xiàn)具體抽象數(shù)據(jù)類型的例程、程序、庫、對象、類、組件、數(shù)據(jù)結(jié)構(gòu)等。 程序模塊的功能可在各個實施例中按需在程序模塊之間組合或劃分。程序模塊的計算機(jī)可 執(zhí)行指令可在本地或分布式的計算環(huán)境內(nèi)執(zhí)行。為說明起見,詳細(xì)描述使用像“估計”、“補償”、“預(yù)測”和“應(yīng)用”的術(shù)語來描述計 算環(huán)境中的計算機(jī)操作。這些術(shù)語是由計算機(jī)執(zhí)行的操作的高層抽象,且不應(yīng)與人執(zhí)行的 動作相混淆。對應(yīng)于這些術(shù)語的實際計算機(jī)操作取決于實現(xiàn)而變化。II.通用視頻編碼器和解碼器圖21是通用視頻編碼器2100的框圖,結(jié)合該系統(tǒng)可實現(xiàn)若干所述實施例。圖22 是通用視頻解碼器2200的框圖,結(jié)合該系統(tǒng)可實現(xiàn)若干所述實施例。編碼器2100和解碼器2200內(nèi)各模塊之間的所示關(guān)系表示編碼器和解碼器中的一 般信息流;其它關(guān)系為簡化起見并未示出。特別地,圖21和22通常并未示出表示用于視頻 序列、圖片、宏塊、塊等的編碼器設(shè)置、模式、表格等的輔助信息。這些輔助信息通常在輔助 信息的熵編碼之后在輸出比特流中發(fā)送。輸出比特流的格式可以是Windows Media Video 版本9格式或其它格式。編碼器2100和解碼器2200處理視頻圖片,它們可以是視頻幀、視頻半幀、或幀和 半幀的組合。圖片和宏塊級別上的比特流語法和語義可依賴于是使用幀還是半幀。也可 以有對宏塊組織和整體定時的改變。編碼器2100和解碼器2200是基于塊的,并對幀使用 4:2:0的宏塊格式,其中每個宏塊包括4個8X8亮度塊(常被視為一個16X 16宏塊)和2個8X8色度塊。對于半幀,可使用相同或不同的宏塊組織和格式。這些8X8塊可在不同 階段上作進(jìn)一步的細(xì)分,例如在頻率變換和熵編碼階段。示例視頻幀組織如下進(jìn)行更詳細(xì) 的描述?;蛘撸幋a器2100和解碼器2200是基于對象的、使用不同的宏塊或塊格式、或?qū)?不同于8X8塊和16X 16宏塊的大小或配置的像素集執(zhí)行操作。取決于所需的壓縮實現(xiàn)和類型,編碼器或解碼器的模塊可添加、略去、劃分成多個 模塊、與其它模塊相組合、和/或用類似模塊替換。在替換實施例中,具有不同模塊和/或 模塊其它配置的編碼器或解碼器執(zhí)行一種或多種所述技術(shù)。A.視頻幀組織在一些實現(xiàn)中,編碼器2100和解碼器2200處理如下組織的視頻幀。幀包含視頻 信號的各行空間信息。對于逐行掃描視頻,這些行包含從一時刻開始并繼續(xù)后續(xù)行直到幀 的底部的樣本。逐行掃描視頻幀被分成諸如圖23中所示宏塊2300的宏塊。宏塊2300包 括4個8 X 8亮度塊(Yl到Y(jié)4)和與4個亮度塊共處的2個8 X 8色度塊,這些色度塊符合 常規(guī)的4:2:0宏塊格式但在水平和垂直方向分辨率減半。這些8X8塊可在不同階段上作 進(jìn)一步的細(xì)分,例如在頻率變換(例如8X4、4X8或4X4DCT)和熵編碼階段。逐行掃描 I-幀是幀內(nèi)編碼的逐行掃描視頻幀。逐行掃描P-幀是使用正向預(yù)測編碼的逐行掃描視頻 幀,而逐行掃描B-幀是使用雙向預(yù)測編碼的逐行掃描視頻幀。逐行掃描P-和B-幀可包括 幀內(nèi)編碼宏塊以及不同類型的經(jīng)預(yù)測宏塊。隔行掃描視頻幀由一個幀的兩次掃描組成_ 一次包括該幀的偶數(shù)行(上半幀)而 另一次包括該幀的奇數(shù)行(下半幀)。這兩個半幀可表示兩個不同時段,或者它們可來自同 一時段。圖24A示出隔行掃描視頻幀2400的一部分,包括隔行掃描視頻幀2400中左上方 的上半幀和下半幀的交替行。圖24B示出為編碼/解碼而組織為幀2430的圖24A的隔行掃描視頻幀2400。隔 行掃描視頻幀2400已被分成諸如宏塊2431和2432的宏塊,它們使用如圖23所示的4:2:0 格式。在亮度平面中,每個宏塊2431、2432包括來自上半幀的8行、與之交替的來自下半幀 的8行(一共為16行),且每一行為16像素長。(宏塊2431、2432內(nèi)亮度塊和色度塊的實 際組織和放置并未示出,且實際上對于不同的編碼決定可變化。)在給定宏塊內(nèi),上半幀信 息和下半幀信息在各個階段的任一個上可聯(lián)合或獨立地編碼。隔行掃描的I-幀是隔行掃 描視頻幀的兩個幀內(nèi)編碼半幀,其中宏塊包括兩個半幀的信息。隔行掃描P-幀是使用正向 預(yù)測編碼的隔行掃描視頻幀的兩個半幀,而隔行掃描B-幀是使用雙向預(yù)測編碼的隔行掃 描視頻幀的兩個半幀,其中宏塊包括兩個半幀的信息。隔行掃描P-和B-幀可包括幀內(nèi)編 碼宏塊以及不同類型的預(yù)測宏塊。圖24C示出為編碼/解碼而組織為半幀2460的圖24A的隔行掃描視頻幀2400。 隔行掃描視頻幀2400的兩個半幀的每一個被分成各個宏塊。上半幀被分成諸如宏塊2461 的宏塊,而下半幀被分成諸如宏塊2462的宏塊。(再一次,各宏塊使用如圖23所示的4 2 0 格式,且各宏塊內(nèi)亮度塊和色度塊的組織和放置并未示出。)在亮度平面中,宏塊2461包括 來自上半幀的16行、宏塊2462包括來自下半幀的16行,且每一行為16像素長。隔行掃描 的ι-半幀是隔行掃描視頻幀的單個獨立表示半幀。隔行掃描P-半幀是使用正向預(yù)測編碼 的隔行掃描視頻幀的單個獨立表示半幀,而隔行掃描B-半幀是使用雙向預(yù)測編碼的隔行 掃描視頻幀的單個獨立表示半幀。隔行掃描P-和B-半幀可包括幀內(nèi)編碼宏塊以及不同類型的預(yù)測宏塊。術(shù)語圖片通常指源、經(jīng)編碼或重構(gòu)的圖像數(shù)據(jù)。對于逐行掃描視頻,圖片是逐行掃 描視頻幀。對于隔行掃描視頻,取決于上下文,圖片可指隔行掃描視頻幀、幀的上半幀、或幀 的下半幀。或者,編碼器2100或解碼器2200是基于對象的、使用不同的宏塊或塊格式、或?qū)?不同于8X8塊和16X 16宏塊的大小或配置的像素集執(zhí)行操作。B.視頻編碼器圖21是通用視頻編碼器系統(tǒng)2100的框圖。編碼器系統(tǒng)2100接收包括當(dāng)前圖片 2105的一個視頻圖片序列(例如,逐行掃描視頻幀、隔行掃描視頻幀、或隔行掃描視頻幀的 半幀),并產(chǎn)生壓縮后視頻信息2195作為輸出。視頻編碼器的特定實施例通常使用通用編 碼器2100的變體或補充版本。編碼器系統(tǒng)2100壓縮預(yù)測圖片和關(guān)鍵圖片。為演示起見,圖21示出關(guān)鍵圖片通 過編碼器系統(tǒng)2100的路徑,以及預(yù)測圖片的路徑。編碼器系統(tǒng)2100的許多組件用于壓縮 關(guān)鍵圖片和預(yù)測圖片。由那些組件執(zhí)行的確切操作可取決于所壓縮的信息類型而變化。預(yù)測圖片(例如逐行掃描ρ-幀或b_幀、隔行掃描ρ-半幀或b_半幀、或隔行掃描 P-幀或b_幀)根據(jù)來自一個或多個其它圖片(通常稱為參考圖片或錨)的預(yù)測(或差值) 來表示。預(yù)測殘差是所預(yù)測圖片和原始圖片之間的差值。相反,關(guān)鍵圖片(例如逐行掃描 I-幀、隔行掃描I-半幀、或隔行掃描I-幀)不參照其它圖片進(jìn)行壓縮。如果當(dāng)前圖片2105是正向預(yù)測圖片,則運動估計器2110參照一個或多個參考圖 片估計當(dāng)前圖片2105的宏塊或其它像素集的運動,其中參考圖片是例如緩存在圖片存儲 2120中的重構(gòu)的先前圖片2125。如果當(dāng)前圖片2105是雙向預(yù)測圖片,則運動估計器2110 參照(例如隔行掃描B-半幀的)多達(dá)4個重構(gòu)參考圖片來估計當(dāng)前圖片2105中的運動。通 常,運動估計器參照一個或多個時間上在先的參考圖片和一個或多個時間上將來的參考圖 片來估計B-圖片中的運動。因此,編碼器系統(tǒng)2100可將分別的存儲2120和2122用于多個 參考圖片。對于有關(guān)逐行掃描B-幀的更多信息,參見序列號為10/622,378題為“Advanced Bi-Directional PredictiveCoding of Video Frames”(視頻幀的高級雙向預(yù)測編碼)并 于2003年7月18日提交的美國專利申請。運動估計器2110可按像素、1/2像素、1/4像素或其它增量進(jìn)行估計,并可在逐個 圖片基礎(chǔ)或其它基礎(chǔ)上切換運動估計的分辨率。運動估計器2110 (和補償器2130)還可在 每幀或其它基礎(chǔ)上在參考圖片像素插值類型之間(例如雙三次和雙線性)切換。運動估計 的分辨率可水平地或垂直地相同或不同。運動估計器2110輸出諸如差值運動向量信息的 輔助信息運動信息2115。編碼器2100通過例如計算運動向量的一個或多個預(yù)測值、計算運 動向量和預(yù)測值之間的差值、并熵編碼這些差值,來編碼運動信息。為了重構(gòu)運動向量,運 動補償器2130組合預(yù)測值與差值運動向量信息。用于計算運動向量預(yù)測值、計算差值運動 向量、并重構(gòu)隔行掃描B-半幀和隔行掃描B-幀的運動向量的各種技術(shù)如下所述。運動補償器2130將重構(gòu)運動向量應(yīng)用于重構(gòu)圖片2125,以形成經(jīng)運動補償?shù)漠?dāng) 前圖片2135。然而,預(yù)測很少是完美的,且經(jīng)運動補償?shù)漠?dāng)前圖片2135和原始的當(dāng)前圖片 2105之間的差值為預(yù)測殘差2145。在圖片的隨后重構(gòu)中,預(yù)測殘差2145被添加到經(jīng)運動 補償?shù)漠?dāng)前圖片2135中,以獲得更接近于原始當(dāng)前圖片2105的重構(gòu)圖片。然而,在有損壓縮中,仍有一些信息從原始當(dāng)前圖片2105中丟失。或者,運動估計器和運動補償器應(yīng)用另 一類型的運動估計/補償。頻率變換器2160將空間域視頻信息轉(zhuǎn)換成頻域(即頻譜)數(shù)據(jù)。對于基于塊的 視頻圖片,頻率變換器2160將DCT、DCT的變體、或其它塊變換應(yīng)用于像素數(shù)據(jù)或預(yù)測殘差 數(shù)據(jù)的塊,從而產(chǎn)生頻率變換系數(shù)的塊?;蛘撸l率變換器2160應(yīng)用諸如傅立葉變換的另 一種常規(guī)頻率變換、或使用小波或子頻帶分析。頻率變換器2160可應(yīng)用8X8、8X4、4X8、 4X4或其它大小的頻率變換。然后量化器2170量化頻譜數(shù)據(jù)系數(shù)的各個塊。該量化器將均勻的標(biāo)量量化應(yīng)用 于頻譜數(shù)據(jù),其中步長在逐個圖片或其它基礎(chǔ)上變化。或者,量化器將另一種類型的量化應(yīng) 用于頻譜數(shù)據(jù)系數(shù),例如不均勻的向量或非自適應(yīng)量化,或者直接在不使用頻率變換的編 碼器系統(tǒng)中量化空間域數(shù)據(jù)。除了自適應(yīng)量化之外,編碼器2100可將幀丟棄、自適應(yīng)濾波 或其它技術(shù)用于速率控制。編碼器2100可將特定的信號表示用于被跳過的宏塊,該宏塊是沒有特定類型信 息的宏塊(例如沒有該宏塊的運動信息和沒有殘差信息)。當(dāng)需要重構(gòu)后的當(dāng)前幀用于隨后的運動估計/補償時,逆量化器2176對量化后的 頻譜數(shù)據(jù)系數(shù)執(zhí)行逆量化。然后反向頻率變換器2166執(zhí)行頻率變換器2160的反向操作,產(chǎn) 生重構(gòu)后預(yù)測殘差(用于預(yù)測圖片)或重構(gòu)后的關(guān)鍵圖片。如果當(dāng)前圖片2105是關(guān)鍵圖 片,則重構(gòu)后的關(guān)鍵圖片被取作重構(gòu)后的當(dāng)前圖片(未示出)。如果當(dāng)前圖片2105是預(yù)測 圖片,則重構(gòu)后的預(yù)測殘差被添加到經(jīng)運動補償?shù)漠?dāng)前圖片2135中以形成重構(gòu)后的當(dāng)前 圖片。一個或多個圖片存儲2120、2122緩存重構(gòu)后的當(dāng)前圖片,以用于運動補償預(yù)測。在 某些實施例中,編碼器將解塊濾波器應(yīng)用于重構(gòu)后的幀以自適應(yīng)地使圖片中的間斷點和其 它人工效應(yīng)平滑。熵編碼器2180壓縮量化器2170的輸出以及某些輔助信息(例如運動信息2115、 量化步長)。典型的熵編碼技術(shù)包括算術(shù)編碼、差分編碼、哈夫曼編碼、運行長度編碼、LZ編 碼、字典編碼以及以上的組合。熵編碼器2180通常使用用于不同類型信息(例如DC系數(shù)、 AC系數(shù)、不同類型的輔助信息)的不同編碼技術(shù),并可從特定編碼技術(shù)內(nèi)的多個代碼表中 選擇。熵編碼器2180向多路復(fù)用器[“MUX”]2190提供壓縮后的視頻信息2195。MUX 2190可包括緩沖區(qū),且緩沖區(qū)級別指示符被反饋給比特率自適應(yīng)模塊作速率控制。在MUX 2190之前或之后,壓縮后的視頻信息2195可被信道編碼用于在網(wǎng)絡(luò)上傳輸。信道編碼可將 差錯檢測和糾正數(shù)據(jù)應(yīng)用于壓縮后的視頻信息2195。C.視頻解碼器圖22是一般視頻解碼器系統(tǒng)2200的框圖。解碼器系統(tǒng)2200接收用于視頻圖片 的經(jīng)壓縮序列的信息2295,并產(chǎn)生包括重構(gòu)圖片2205的輸出(例如,逐行掃描視頻幀、隔行 掃描視頻幀、或隔行掃描視頻幀的半幀)。視頻解碼器的特定實施例通常使用通用解碼器 2200的變體或補充版本。解碼器系統(tǒng)2200解壓縮預(yù)測圖片和關(guān)鍵圖片。為演示起見,圖22示出關(guān)鍵圖片 通過解碼器系統(tǒng)2200的路徑,以及正向預(yù)測圖片的路徑。解碼器系統(tǒng)2200的許多組件用 于解壓縮關(guān)鍵圖片和預(yù)測圖片。由那些組件執(zhí)行的確切操作取決于所解壓縮的信息類型而變化。DEMUX (多路分解器)2290接收壓縮后視頻序列的信息2295,并使接收到的信息可 用于熵解碼器2280。DEMUX 2290可包括一抖動緩沖區(qū)和其它緩沖區(qū)。在DEMUX 2290之前 或之后,經(jīng)壓縮的視頻信息可進(jìn)行信道解碼和用于差錯檢測和糾正處理。熵解碼器2280通常應(yīng)用編碼器中執(zhí)行的熵編碼的逆,對熵編碼后的量化數(shù)據(jù)以 及熵編碼后的輔助信息(例如運動信息2215、量化步長)進(jìn)行熵解碼。熵解碼技術(shù)包括算 術(shù)解碼、差分解碼、哈夫曼解碼、運行長度解碼、LZ解碼、字典解碼以及以上的組合。熵解碼 器2280經(jīng)常使用用于不同類型信息(例如DC系數(shù)、AC系數(shù)、不同類型的輔助信息)的不 同解碼技術(shù),并可從特定解碼技術(shù)內(nèi)的多個代碼表中選擇。解碼器2200通過例如計算運動向量的一個或多個預(yù)測值、熵解碼差值運動向量、 并組合解碼后的差值運動向量和用于重構(gòu)運動向量的預(yù)測值,來解碼運動2215。用于計算 運動向量預(yù)測值、計算差值運動向量、并重構(gòu)隔行掃描B-半幀和隔行掃描B-幀的各種技術(shù) 如下所述。運動補償器2230將運動信息2215應(yīng)用于一個或多個參考圖片2225,以形成被重 構(gòu)的圖片2205的預(yù)測值2235。例如,運動補償器2230使用一個或多個宏塊運動向量來尋 找參考圖片2225中的宏塊。一個或多個圖片存儲(例如圖片存儲2220、2222)存儲先前重 構(gòu)后的圖片,以用作參考圖片。通常,B-圖片具有一個以上的參考圖片(例如至少一個時 間上在先的參考圖片和至少一個時間上將來的參考圖片)。因此,解碼器系統(tǒng)2200可將分 別的圖片存儲2220和2222用于多個參考圖片。運動補償器2230可按像素、1/2像素、1/4 像素或其它增量補償運動,并可在逐個圖片基礎(chǔ)或其它基礎(chǔ)上切換運動補償?shù)姆直媛?。運 動補償器2230還可在每幀或其它基礎(chǔ)上在參考圖片像素插值類型之間(例如雙三次和雙 線性)切換。運動補償?shù)姆直媛士伤降鼗虼怪钡叵嗤虿煌?。或者,運動補償器應(yīng)用另 一類型的運動補償。由運動補償器進(jìn)行的預(yù)測很少是完美的,因此解碼器2200還重構(gòu)預(yù)測 殘差。逆量化器2270對熵解碼后的數(shù)據(jù)執(zhí)行逆量化。一般而言,該逆量化器將均勻的標(biāo) 量逆量化應(yīng)用于熵解碼后的數(shù)據(jù),其中步長在逐幀或其它基礎(chǔ)上變化?;蛘?,該逆量化器將 另一種類型的逆量化應(yīng)用于數(shù)據(jù),例如在不均勻的向量或非自適應(yīng)量化后重構(gòu),或者在不 使用逆頻率變換的解碼器系統(tǒng)中直接逆量化空間域數(shù)據(jù)。逆頻率變換器2260將量化后的頻域數(shù)據(jù)轉(zhuǎn)換成空間域視頻信息。對于基于塊的 視頻圖片,逆頻率變換器2260將逆DCT[ “IDCT"] ,IDCT的變體、或其它逆向塊變換應(yīng)用于 頻率變換系數(shù)的塊,從而分別產(chǎn)生關(guān)鍵圖片或預(yù)測圖片的像素數(shù)據(jù)或預(yù)測殘差數(shù)據(jù)?;蛘?, 反向頻率變換器2260應(yīng)用諸如傅立葉逆變換的另一種常規(guī)反向頻率變換、或使用小波或 子頻帶分析。反向頻率變換器2260可應(yīng)用8X8、8X4、4X8、4X4或其它大小的反向頻率 變換。對于預(yù)測圖片,解碼器2200組合重構(gòu)后的預(yù)測殘差2245和經(jīng)運動補償?shù)念A(yù)測 2235來形成重構(gòu)后的圖片2205。當(dāng)解碼器需要用于隨后運動補償?shù)闹貥?gòu)后圖片2205時, 一個或兩個圖片存儲(例如圖片存儲2220)緩存重構(gòu)后圖片2205,以用于預(yù)測下一圖片。 在一些實施例中,解碼器2200將解塊濾波器應(yīng)用于重構(gòu)后圖片以自適應(yīng)地使圖片中的間 斷點和其它人工效應(yīng)平滑。
III.隔行掃描P-半幀和隔行掃描P-幀典型的隔行掃描視頻幀由在不同時間掃描的兩個半幀(例如上半幀和下半幀)組 成。一般而言,通過一起編碼半幀來編碼隔行掃描視頻幀的靜態(tài)區(qū)域是更為有效的(“幀模 式”編碼)。另一方面,通過分開編碼半幀來編碼隔行掃描視頻幀的移動區(qū)域通常更為有效 (“半幀模式”編碼),因為這兩個半幀傾向于具有不同的運動。正向預(yù)測的隔行掃描視頻 幀可被編碼為兩個獨立的正向預(yù)測半幀-隔行掃描P-半幀。例如,當(dāng)在隔行掃描視頻幀上 有較高運動從而在各半幀之間有很大差異時,分開編碼正向預(yù)測的隔行掃描視頻幀的半幀 會比較有效。或者,正向預(yù)測的隔行掃描視頻幀可使用半幀編碼和幀編碼的混合來編碼為隔行 掃描P-幀。對于隔行掃描P-幀的宏塊,該宏塊包括上半幀和下半幀的像素行,且各行可用 幀編碼模式一起編碼,或用半幀編碼模式分開編碼。A.隔行掃描P-半幀隔行掃描P-半幀參考一個或多個先前解碼的半幀。例如,在一些實現(xiàn)中,隔行掃 描P-半幀參考一個或兩個先前解碼的半幀,而隔行掃描B-半幀參考多達(dá)兩個先前的和兩 個將來的參考半幀(即多達(dá)總共四個參考半幀)。(用于隔行掃描B-半幀的編碼和解碼技 術(shù)在下面詳細(xì)描述。)圖25和26示出具有兩個參考半幀的隔行掃描P-半幀的示例。在圖25中,當(dāng)前 半幀2510參考時間上在先的隔行掃描視頻幀中的上半幀2520和下半幀2530。因為半幀 2540和2550是隔行掃描的B-半幀,所以它們不用作參考半幀。在圖26中,當(dāng)前半幀2610 參考在包含當(dāng)前半幀2610的隔行掃描視頻幀前面緊鄰的隔行掃描視頻幀中的上半幀2620 和下半幀2630。對于有關(guān)雙參考的隔行掃描P-半幀的更多信息,參見序列號為xx/yyy,ZZZ 題為"Predicting Motion Vectors for Fields of Forward-predicted Interlaced Video Frames"(預(yù)測正向預(yù)測的隔行掃描視頻幀的半幀的運動向量)并于2004年5月27日提 交的美國專利申請。圖27和28示出具有一個參考半幀-所允許的時間上最新參考半幀的隔行掃描 P-半幀的示例。在圖27中,當(dāng)前半幀2710參考時間上在先的隔行掃描視頻幀的下半幀 2730,但不參考該隔行掃描視頻幀上不那么新的上半幀2720。在圖27所示示例中,半幀 2740和2750是隔行掃描B-半幀,且不是所允許的參考半幀。在圖28中,當(dāng)前半幀2810參 考在包含當(dāng)前半幀2810的隔行掃描視頻幀前面緊鄰的隔行掃描視頻幀中的下半幀2830, 而不參考不那么新的上半幀2820。圖29和30示出使用所允許的第二最新參考半幀的隔行掃描P-半幀的示例。在 圖29中,當(dāng)前半幀2910參考時間上在先的隔行掃描視頻幀的上半幀2920,但不參考更新的 下半幀2920。在圖29所示示例中,半幀2940和2950是隔行掃描B-半幀,且不是所允許的 參考半幀。在圖30中,當(dāng)前半幀3010參考上半幀3020,而不參考更新的下半幀3030。在一實現(xiàn)中,圖25-30中示出的全部情形在隔行掃描P-半幀語法中都是許可的。 其它實現(xiàn)也是可能的。例如,圖片可將來自不同類型或時間位置的其它圖片的半幀用作參 考半幀。1.半幀圖片坐標(biāo)系統(tǒng)和半幀極性運動向量表示以1/4像素為單位的水平和垂直位移。例如,如果運動向量的垂直分量表示6個1/4像素單位的位移,則這表示參考塊是當(dāng)前塊位置下方1. 5個半幀行處 (6*1/4 = 1 1/2)。圖31示出在一實現(xiàn)中運動向量的垂直分量和空間位置之間的關(guān)系。圖31所示示 例示出當(dāng)前和參考半幀類型(例如上和下)的三種不同組合的三種不同情形3110、3120和 3130。如果半幀類型對當(dāng)前和參考半幀不同,則極性“相反”。如果半幀類型相同,則極性 “相同”。對于每種情形,圖31示出當(dāng)前半幀中一個垂直像素列和參考半幀中的第二垂直像 素列。實際上,該兩列是水平對齊的。圓圈表示實際整數(shù)像素位置,而X表示插值的1/2或 1/4像素位置。水平分量值(未示出)無需說明因為隔行掃描的任何偏移量,因為各個半幀 都是水平對齊的。負(fù)值表示在相反方向上比所示正值垂直偏移量更偏上的偏移量。在情形3110中,極性“相反”。當(dāng)前半幀為上半幀,而參考半幀為下半幀。相對于當(dāng) 前半幀,參考半幀的位置因為隔行掃描而在向下方向上偏移1/2像素。垂直運動向量分量 值為0是“無垂直運動”偏移,并表示參考半幀中與當(dāng)前半幀中位置在同一垂直水平上(絕 對值)的位置;垂直運動向量分量值為+2表示參考半幀中偏移到當(dāng)前半幀中位置下方1/2 像素(絕對值)的位置,該位置是參考半幀中的實際值;而垂直分量值為+4表示參考半幀 中偏移到當(dāng)前半幀中位置下方1整個像素(絕對值)的位置,該位置是參考半幀中的插值。在情形3120中,極性也“相反”。當(dāng)前半幀是下半幀,而參考半幀是上半幀。相對 于當(dāng)前半幀,參考半幀的位置因為隔行掃描而在向上方向上偏移1/2像素。垂直運動向量 分量值為-2表示參考半幀中偏移到當(dāng)前半幀中位置上方1/2像素(絕對值)的位置;垂直 分量值為0表示參考半幀中與當(dāng)前半幀中位置在同一水平上(絕對值)的位置;而垂直分 量值為+2表示參考半幀中偏移到當(dāng)前半幀中位置下方1/2像素(絕對值)的位置。在情形3130中,極性“相同”。相對于當(dāng)前半幀,參考半幀的位置在垂直方向上相 同。垂直運動向量分量值為0是“無垂直運動”偏移,并表示參考半幀中與當(dāng)前半幀中位置 在同一垂直水平上(絕對值)的位置;垂直運動向量分量值為+2表示參考半幀中偏移到當(dāng) 前半幀中位置下方1/2像素(絕對值)的位置,該位置是參考半幀中的插值;而垂直分量值 為+4表示參考半幀中偏移到當(dāng)前半幀中位置下方1整個像素(絕對值)的位置,該位置是 參考半幀中的實際值?;蛘?,運動向量的位移 據(jù)不同慣例來表達(dá)。2.雙參考半幀的隔行掃描P-半幀中的運動向量預(yù)測雙參考半幀的隔行掃描P-半幀參考相同時間方向上的兩個半幀(例如兩個最近 的先前參考半幀)。對每個宏塊計算兩個運動向量預(yù)測值。在一些實現(xiàn)中,一個預(yù)測值來自 相同極性的參考半幀,而另一個預(yù)測值來自相反極性的參考半幀。極性的其它組合也是可 能的。(以下描述每個方向上使用雙參考半幀的隔行掃描B-半幀。在一些實現(xiàn)中,這些隔 行掃描B-半幀將與隔行掃描P-半幀相同的技術(shù)用于計算運動向量預(yù)測值。)在一些實現(xiàn)中,編碼器/解碼器通過尋找奇半幀預(yù)測值和偶半幀預(yù)測值、并選擇 處理預(yù)測值之一用于處理宏塊,來計算當(dāng)前塊或宏塊的運動向量預(yù)測值。例如,編碼器/解 碼器確定奇半幀運動向量預(yù)測值和偶半幀運動向量預(yù)測值。運動向量預(yù)測值之一因而具有 與當(dāng)前半幀相同的極性,而另一運動向量預(yù)測值具有相反極性。編碼器/解碼器從奇半幀 運動向量預(yù)測值和偶半幀運動向量預(yù)測值中選擇一運動向量預(yù)測值。例如,編碼器基于哪 個給出較佳預(yù)測在各運動向量預(yù)測值之間選擇。編碼器使用簡單的選擇信號或使用較復(fù)雜的結(jié)合改進(jìn)編碼效率的上下文信息的信號表示來用信號表示要使用哪個運動向量預(yù)測值。 該上下文信息可表示奇半幀或偶半幀的哪一個、或相同極性半幀或相反極性半幀的哪一個 已主要用于塊或宏塊周圍的鄰域中。解碼器基于選擇信號和/或上下文信息選擇要使用哪 個運動向量預(yù)測值。然后,編碼器/解碼器使用選定的運動向量預(yù)測值處理該運動向量。例 如,編碼器編碼運動向量和運動向量預(yù)測值之間的差值。或者,解碼器通過組合運動向量差 值和運動向量預(yù)測值來解碼運動向量?;蛘撸幋a器和/或解碼器可跳過確定奇半幀運動向量預(yù)測值、或跳過確定偶半 幀運動向量預(yù)測值。例如,如果編碼器確定奇半幀將用于特定塊或宏塊的運動補償,則編碼 器只確定奇半幀運動向量預(yù)測值?;蛘撸绻獯a器從上下文和/或信號表示信息中確定 奇半幀將用于運動補償,則解碼器只確定奇半幀運動向量預(yù)測值。這樣,編碼器和解碼器可 避免不必要的運算。解碼器可采用以下技術(shù)來確定當(dāng)前隔行掃描P-半幀的運動向量預(yù)測值。對于隔行掃描P-半幀中具有運動向量的每個塊或宏塊,可獲得兩組三個候選運 動向量預(yù)測值。從中獲得這些候選運動向量預(yù)測值的相鄰宏塊相對于當(dāng)前宏塊3200的位 置如圖32所示。這些候選值的三個來自偶參考半幀,而另三個來自奇參考半幀。因為每個 候選方向中的相鄰宏塊(A、B和C)是幀內(nèi)編碼的或具有參考偶半幀或奇半幀的實際運動向 量,所以需要導(dǎo)出其它半幀的運動向量(或?qū)С鰩瑑?nèi)編碼宏塊的奇半幀和偶半幀運動向量 候選值)。例如,對于給定宏塊,假設(shè)預(yù)測值A(chǔ)具有參考奇半幀的運動向量。在該情形中, “偶半幀”候選預(yù)測值A(chǔ)從“奇半幀”候選預(yù)測值A(chǔ)的運動向量中導(dǎo)出。該導(dǎo)出使用縮放運 算來完成。(參見例如以下圖34A和34B的解釋。)或者,導(dǎo)出用另一種方式完成。一旦已得到三個奇半幀候選運動向量預(yù)測值,就使用中值運算來從三個奇半幀候 選值中導(dǎo)出奇半幀運動向量預(yù)測值。類似地,一旦已得到三個偶半幀候選運動向量預(yù)測值, 就使用中值運算來從三個偶半幀候選值中導(dǎo)出偶半幀運動向量預(yù)測值。或者,使用另一種 機(jī)制來基于候選半幀運動向量預(yù)測值選擇半幀運動向量預(yù)測值。解碼器判定是將偶半幀還 是奇半幀用作運動向量預(yù)測值(例如通過選擇主預(yù)測值),及偶還是奇運動向量預(yù)測值被 用來重構(gòu)運動向量。圖33A-33F中的偽碼3300示出用來從如圖32所示排列的預(yù)測值A(chǔ)、B和C中產(chǎn) 生運動向量預(yù)測值的過程。盡管圖32示出當(dāng)前隔行掃描P-半幀中典型宏塊的鄰域,但圖 33A-33F的偽碼3300解決了宏塊位置的各個特定情形。此外,偽碼3300可用來計算各個位 置上塊的運動向量的運動向量預(yù)測值。在偽碼3300中,術(shù)語“相同半幀”和“相反半幀”被理解成與當(dāng)前編碼或解碼的半 幀相關(guān)。例如,如果當(dāng)前半幀是偶半幀,則“相同半幀”是偶參考半幀而“相反半幀”是奇參考 半幀。偽碼3300中的變量samefieldpred_x和samefieldpred_y表示來自相同半幀的運動 向量預(yù)測值的水平和垂直分量,而變量oppositefieldpred_x和oppositefieldpred_y表 示來自相反半幀的運動向量預(yù)測值的水平和垂直分量。變量samecount和oppositecount 分別跟蹤當(dāng)前塊或宏塊的鄰域的多少運動向量參考當(dāng)前半幀的“相同”極性參考半幀,及多 少參考“相反”極性參考半幀。變量samecount和oppositecount在偽碼開始時初始化為 O0偽碼3300中所提及的縮放運算scaleforsameO和scaleforopposite ()被用來從鄰居的實際運動向量值中導(dǎo)出“另一”半幀的候選運動向量預(yù)測值。縮放運算是實現(xiàn)無 關(guān)的。示例縮放運算在以下參照圖34A、34B、35和36進(jìn)行描述。或者,其它縮放運算可用 來例如補償諸如圖31中所示的垂直位移。(具體用于隔行掃描B-半幀的縮放運算如下進(jìn) 行詳細(xì)描述。)圖33A和33B示出用于計算幀內(nèi)的內(nèi)部位置中典型塊或宏塊的運動向量預(yù)測值的 偽碼?!皫瑑?nèi)”鄰居的運動向量被設(shè)置為0。對于每個鄰居,都設(shè)置相同半幀運動向量預(yù)測值 和相反半幀運動向量預(yù)測值,在其中一個通過鄰居運動向量的實際值設(shè)置時,另一個從中 導(dǎo)出。對相同半幀運動向量預(yù)測值和相反半幀運動向量預(yù)測值計算候選值的中值,而“主” 預(yù)測值從samecount禾口 oppositecount中確定。變量dominantpredictor表示明個半中貞包 含主運動向量預(yù)測值。如果運動向量預(yù)測值具有與三個候選預(yù)測值的大部分相同的極性, 則它是主要預(yù)測值。(用運動向量差值數(shù)據(jù)解碼的表示信號的值predictoi^flag表示使用 主還是非主預(yù)測值。)圖33C中的偽碼解決每行只有一個宏塊(它沒有鄰居B或C)的隔行掃描P-半幀 的宏塊的情形。圖33D或33E中的偽碼解決塊或宏塊在隔行掃描P-半幀的左邊緣(沒有 鄰居C)的情形。在此,如果運動向量預(yù)測值具有與兩個以上候選預(yù)測值相同的極性,則它 是主預(yù)測值;而在不分上下的情形中,相反半幀運動向量預(yù)測值為主預(yù)測值。最后,圖33F 中的偽碼解決例如宏塊在隔行掃描P-半幀的首行中的情形。3. 一個半幀運動向量預(yù)測值從另一個半幀運動向量預(yù)測值導(dǎo)出的縮放在一實現(xiàn)中,編碼器/解碼器使用圖34A和34B的偽碼3400中示出的縮放運算, 將一個半幀運動向量預(yù)測值從另一個半幀運動向量預(yù)測值導(dǎo)出。SCALE0PP、SCALESAME1、 SCALESAME2、SCALEZ0NE1_X、SCALEZ0NE1_Y、Z0NE10FFSET_X 和 Z0NE10FFSET_Y 的值是實現(xiàn) 相關(guān)的。示出兩個可能的值集,其中當(dāng)前半幀是隔行掃描視頻幀中的第一半幀的情形在圖 35的表格3500中示出,而當(dāng)前半幀是隔行掃描視頻幀中的第二半幀的情形在圖36的表格 3600中示出。對于P-幀,參考幀距離被第一為當(dāng)前P-幀及其參考幀之間的B-幀(即包含 兩個B-半幀的視頻幀)數(shù)量。如果不出現(xiàn)B-幀,則參考距離為0。例如,編碼器使用可變 大小的語法元素(例如在以下XIV節(jié)詳細(xì)描述的REFDIST語法元素)來編碼參考幀距離。在表格3500和3600中示出的各個示例中,N的值(用作表格中SCALEZ0NE1_X、 SCALEZONE 1_Y>ZONE 10FFSET_X和Z0NE10FFSET_Y值的乘數(shù))取決于運動向量范圍。例如, 經(jīng)擴(kuò)展的運動向量范圍可通過語法元素EXTENDED_MV = 1來用信號表示。如果EXTENDED_ MV=I,則MVRANGE語法元素在圖片頭中出現(xiàn),并用信號表示運動向量范圍。如果EXTENDED_ MV = 0,則使用缺省運動向量范圍。以下的表格1示出N和MVRANGE之間的關(guān)系。表格1 圖35和36中N的導(dǎo)出 表格3500和3600中示出的各個值可依賴于實現(xiàn)而更改?;蛘?,N被假設(shè)為1(即縮放不依賴于N),或者縮放可用一些其它方式來執(zhí)行。B.隔行掃描P-幀在一些實現(xiàn)中,隔行掃描P-幀中的宏塊可以是5種類型之一 1MV、2半幀MV、4幀 MV,4半幀MV和幀內(nèi)。在IMV宏塊中,宏塊中4個亮度塊的位移通過單個運動向量表示。相應(yīng)的色度運動 向量可從亮度運動向量導(dǎo)出,以表示運動向量的2個8X8色度塊的每一個的位移。例如, 再參看圖23中示出的宏塊排列,IMV宏塊2300包括4個8X8亮度塊和2個8X8色度塊。 亮度塊(Yl到Y(jié)4)的位移通過單個運動向量表示,且相應(yīng)的色度運動向量可從亮度運動向 量導(dǎo)出,以表示2個色度塊(U和V)的每一個的位移。在2半幀MV宏塊中,宏塊中4個亮度塊的每個半幀的位移通過不同運動向量描 述。例如,圖37示出,上半幀運動向量描述全部4個亮度塊的偶數(shù)行的位移,下半幀運動向 量描述全部4個亮度塊的奇數(shù)行的位移。使用上半幀運動向量,編碼器可導(dǎo)出相應(yīng)的上半 幀色度運動向量,它描述色度塊偶數(shù)行的位移。類似地,編碼器可導(dǎo)出下半幀色度運動向 量,它描述色度塊奇數(shù)行的位移。參照圖38,在4幀MV宏塊中,4個亮度塊的每一個的位移通過不同運動向量(MV1、 MV2、MV3和MV4)描述。每個色度塊可通過使用4個導(dǎo)出色度運動向量(MV1’、MV2’、MV3’ 和MV4’ )來進(jìn)行運動補償,這些色度運動向量描述4個4X4色度子塊的位移。每個4X4 色度子塊的運動向量可從空間上相應(yīng)的亮度塊的運動向量中導(dǎo)出。參照圖39,在4半幀MV宏塊中,亮度塊的每一個半幀的位移通過兩個不同運動向 量來描述。亮度塊的偶數(shù)行被垂直細(xì)分以形成2個8X8區(qū)域。對于偶數(shù)行,左邊區(qū)域的位 移通過左上方半幀塊的運動向量描述,而右邊區(qū)域的位移通過右上方半幀塊的運動向量描 述。亮度塊的奇數(shù)行也被垂直細(xì)分以形成2個8X8區(qū)域。左邊區(qū)域的位移通過左下方半 幀塊的運動向量描述,而右邊區(qū)域的位移通過右下方半幀塊的運動向量描述。每個色度塊 也可用與亮度塊相同的方式分成4個區(qū)域,且每個色度塊區(qū)域可使用導(dǎo)出運動向量進(jìn)行運 動補償。對于幀內(nèi)宏塊,運動假設(shè)為0。一般而言,計算隔行掃描P-幀中當(dāng)前宏塊的運動向量預(yù)測值的過程包括兩個步 驟。首先,從其相鄰宏塊收集當(dāng)前宏塊的三個候選運動向量。例如,在一實現(xiàn)中,候選運動 向量基于圖40A-40B中示出的排列(和首行宏塊等的各種特定情形)來收集?;蛘?,候選 運動向量可在一些其它順序或排列中收集。其次,當(dāng)前宏塊的運動向量預(yù)測值從候選運動 向量集中計算。例如,預(yù)測值可使用3個預(yù)測值的中值、或通過其它方法來計算。對于有關(guān)隔行掃描P-幀的宏塊的預(yù)測值計算和色度運動向量導(dǎo)出的其它細(xì)節(jié),參 見申請?zhí)枮?60/501,081 題為"Video Encoding and Decoding Tools andTechniques”(視 頻編碼和解碼工具及技術(shù))并于2003年9月7日提交的美國臨時專利申請,如以下XIV節(jié) 所述。
IV.逐行掃描視頻幀的雙向預(yù)測如上所述,逐行掃描B-幀中的宏塊可使用5種不同預(yù)測模式來預(yù)測正向、反向、 直接、插值和幀內(nèi)。編碼器選擇并用信號表示在宏塊級別或一些其它級別上比特流中的不 同預(yù)測模式。在正向模式中,當(dāng)前逐行掃描B-幀中的宏塊從時間上在先的錨中導(dǎo)出。在反 向模式中,當(dāng)前逐行掃描B-幀中的宏塊從時間上后續(xù)的錨中導(dǎo)出。用直接或插值模式預(yù)測 的宏塊將正向和反向錨用于預(yù)測。因為有直接和插值模式的兩個參考幀,所以對于每個宏 塊通常都有至少兩個運動向量(顯式編碼或?qū)С龅?。(用于逐行掃描B-幀的編碼、信號 表示和解碼的各個方面也可用于隔行掃描B-幀,如下所述。)在一些實現(xiàn)中,編碼器通過使用分?jǐn)?shù)值縮放正向錨的共處運動向量,隱式地用直 接模式導(dǎo)出運動向量。該分?jǐn)?shù)可反映當(dāng)前逐行掃描B-幀在通過其錨形成的間隔內(nèi)的相對 時間位置,但不需要反映真實的幀間距離。因而,編碼器無需采取固定速度。這使得編碼器 有附加的自由度,來通過改變來自“實際”時間位置的分?jǐn)?shù)準(zhǔn)確并容易地描述錨和當(dāng)前逐行 掃描B-幀之間的真實運動,以便于改進(jìn)運動補償預(yù)測。變量BFRACTI0N表示可在比特流中 發(fā)送(例如在圖片級別或一些其它級別上)以表示該相對時間位置的不同分?jǐn)?shù)。不同分?jǐn)?shù) 是0和1之間的有限離散值集。再參看圖17,表格1700是用于比特流元素BFRACTI0N的可變長度代碼(VLC)表 格。在相同兩個錨之間的逐行掃描B-幀中對BFRACTI0N的唯一性沒有限制;具有相同錨 的不同逐行掃描B-幀可具有相同的BFRACTI0N值。表格1700中的代碼可改變或重新安 排,以用不同代碼表示不同分?jǐn)?shù)。未在表格1700中示出的其它可能代碼(例如,1111110或 1111111)可被認(rèn)為是無效代碼,或可用于其它目的。例如,條目1111110可用來顯式地編碼 定點格式的BFRACTI0N。作為另一示例,條目1111111可用于用信號表示特定幀類型(例 如,幀內(nèi)編碼的逐行掃描B-幀)。再參看圖18,解碼器根據(jù)偽碼1800尋找縮放系數(shù)。再參看圖19,解碼器使用該 縮放系數(shù)來縮放后續(xù)參考圖片中共處宏塊的運動向量的X和y元素。偽碼1900中的函數(shù) Scale_Direct_MV取輸入MV_X和MV_Y,并用直接模式來導(dǎo)出兩個運動向量,其中一個運動 向量參考正向(先前)錨圖片(MV_XF、MV_YF),而另一個運動向量參考反向(后續(xù))錨圖片 (MV_Xb, MV_Yb) ο逐行掃描B-幀中的“跳過”宏塊信號表示對給定宏塊未出現(xiàn)運動向量預(yù)測誤差。 所預(yù)測的運動向量將精確地等同于編碼器/解碼器在重構(gòu)宏塊時使用的運動向量(即不應(yīng) 用運動向量預(yù)測誤差)。編碼器仍然用信號表示宏塊的預(yù)測模式,因為該宏塊可使用直接、 正向、反向或插值預(yù)測來跳過。V.對隔行掃描B-圖片的預(yù)測編碼/解碼的創(chuàng)新的縱覽各所述實施例包括用于編碼和解碼隔行掃描B-圖片(例如隔行掃描B-半幀、隔 行掃描B-幀)的技術(shù)和工具。各所述實施例實現(xiàn)所述用于編碼和/或解碼雙向預(yù)測的隔 行掃描圖片的技術(shù)和工具的一種或多種,如下包括但不限于1.對于隔行掃描B-幀,編碼器/解碼器在隔行掃描B-幀的宏塊中的上半幀和下 半幀之間切換預(yù)測模式。2.對于隔行掃描B-幀,編碼器/解碼器通過為先前解碼的時間后續(xù)錨的共處宏塊 的上和下半幀的每一個選擇一個代表性運動向量,計算當(dāng)前宏塊的直接模式運動向量。該選擇至少可部分地基于編碼當(dāng)前隔行掃描B-幀的宏塊的模式(例如IMV模式、2半幀MV模 式等)執(zhí)行。3.對于隔行掃描B-半幀或隔行掃描B-巾貞,編碼器/解碼器使用4MV編碼。例如, 4MV可用于單向預(yù)測模式(正向或反向模式),但不用于其它可用預(yù)測模式(例如直接、插 值)。4.對于隔行掃描B-半幀或隔行掃描B-幀,正向運動向量使用來自正向運動向量 緩沖區(qū)的先前重構(gòu)(或估計)的正向運動向量進(jìn)行預(yù)測,而反向運動向量使用來自反向運 動向量緩沖區(qū)的先前重構(gòu)(或估計)的反向運動向量進(jìn)行預(yù)測。結(jié)果的運動向量被添加到 相應(yīng)的緩沖區(qū)中,且運動向量緩沖區(qū)中的空穴可用估計的運動向量值來填充。a.對于隔行掃描B-幀,當(dāng)正向預(yù)測用來預(yù)測運動向量且運動向量被添加到正向 緩沖區(qū)中時,反向緩沖區(qū)中的相應(yīng)位置以僅將反向運動向量用作預(yù)測值的預(yù)測運動向量來 填充(“空穴填充”)。類似地,當(dāng)反向預(yù)測用來預(yù)測運動向量且運動向量被添加到反向緩 沖區(qū)中時,正向運動向量緩沖區(qū)中的相應(yīng)位置以僅將正向運動向量用作預(yù)測值的預(yù)測運動 向量來填充。b.對于隔行掃描B-半幀,要為空穴填充在不同極性的運動向量(例如“相同極性” 或“相反極性”)之間選擇,編碼器/解碼器選擇主極性半幀運動向量。錨和當(dāng)前幀之間的 距離使用各種語法元素計算,且計算出的距離被用于縮放參考半幀運動向量。5.對于隔行掃描的B-半幀,編碼器/解碼器使用“自參考”巾貞。例如,當(dāng)前幀中的 第二個B-半幀在運動補償預(yù)測中參考來自當(dāng)前幀的第一 B-半幀。6.對于隔行掃描的B-半幀,編碼器發(fā)送指示用于隔行掃描B-半幀中的一個或多 個宏塊的預(yù)測模式是正向還是非正向的二進(jìn)制信息(例如,在經(jīng)壓縮位平面的B-半幀級別 上)。解碼器執(zhí)行相應(yīng)的解碼。7.對于隔行掃描的B-半幀,如果下一錨圖片的相應(yīng)半幀中的相應(yīng)宏塊使用四個 運動向量編碼,則編碼器/解碼器使用利于主極性的邏輯來選擇直接模式的運動向量。8.幀內(nèi)編碼半幀當(dāng)沒有好的運動補償對B半幀可能時,它可被編碼為幀內(nèi)(即 非預(yù)測的)B-半幀(“Bi-半幀”)。各種所述技術(shù)和工具可彼此組合、或與其它技術(shù)組合、或可單獨使用。VI.切換隔行掃描B-幀中半幀編碼宏塊內(nèi)的預(yù)測模式在一些實現(xiàn)中,編碼器在隔行掃描B-幀的宏塊內(nèi)執(zhí)行預(yù)測模式切換。例如,編碼 器允許在隔行掃描B-幀的宏塊中從上半幀去到下半幀時,預(yù)測模式可從正向切換成反向, 或從反向切換成正向。與用一種預(yù)測方向模式編碼整個宏塊相反,預(yù)測方向模式的組合被 用來編碼單個宏塊。在宏塊的各個半幀中改變預(yù)測方向模式的能力在許多情形中導(dǎo)致隔行 掃描B-幀的更有效編碼。圖41示出使用不同預(yù)測模式預(yù)測隔行掃描B-幀的半幀編碼宏塊中的各個半幀的 運動向量的一種技術(shù)4100。在4110,在隔行掃描B-幀中,編碼器/解碼器使用第一預(yù)測模 式預(yù)測半幀編碼宏塊中第一半幀的運動向量。在一些實現(xiàn)中,該“第一半幀”可以是上半幀 或下半幀,對其的判定獨立地用信號表示。在4120,編碼器/解碼器使用一不同預(yù)測模式預(yù) 測同一宏塊中第二半幀的運動向量。例如,對于使用兩個運動向量半幀編碼的宏塊,上半幀可以是正向預(yù)測的(即,上半幀運動向量參考先前的錨圖片),而下半幀可以是反向預(yù)測的(即,下半幀參考后續(xù)的錨 圖片)。在一些實現(xiàn)中,隔行掃描B-幀中的半幀編碼宏塊不使用4個運動向量編碼。或者, 如果該宏塊使用4個運動向量進(jìn)行半幀編碼(例如每個半幀兩個運動向量),則上半幀的這 兩個運動向量將參考一個錨(正向或反向),而下半幀運動向量將參考另一個錨。這種預(yù)測模式的切換在該宏塊類型不是以直接或插值開始的情形中僅需一個附 加比特,如在以下隔行掃描B-幀的偽碼中進(jìn)一步示出IfMB是半幀編碼的AND MB類型是正向或反向thenIfMVSwitch = 1 then預(yù)測模式在上半幀和下半幀之間切換(從正向到反向或反 之)因此,將預(yù)測模式切換限于正向和反向模式避免對用信號表示第二模式的更多比 特的需要,因為該第二模式從第一模式(在先前用信號表示的)和切換值中隱含。如果在由隔行掃描B-幀的宏塊覆蓋的區(qū)域中有較高運動,則宏塊有可能用半幀 模式編碼。在這些情形中,正向或反向預(yù)測更可能比直接或插值模式(包括像素平均)給出 準(zhǔn)確的運動補償結(jié)果。因為在平滑中平均了各個結(jié)果(例如損失了伴隨高運動的高頻率元 素),所以直接和插值模式并非是編碼這些宏塊的最佳方法。試驗結(jié)果表明,因為在半幀編 碼宏塊內(nèi)的半幀級別上將全部四種預(yù)測模式用信號表示為切換選項的增加開銷使其低效?;蛘?,編碼器可在隔行掃描B-幀的半幀編碼宏塊內(nèi)切換兩種以上的預(yù)測模式,或 可在不同預(yù)測模式之間切換。VII.計算隔行掃描B-幀中的直接模式運動向量在一些實現(xiàn)中,編碼器/解碼器緩存來自經(jīng)先前解碼錨的I-幀或P-幀(它是時 間上正向的參考幀,用作反向預(yù)測參考幀)的運動向量,并選擇一個或多個緩存運動向量, 以用于計算隔行掃描B-幀中當(dāng)前宏塊的直接模式運動向量。例如,編碼器/解碼器緩存來 自錨幀的每個宏塊的上半幀和下半幀的每一個的代表性運動向量,并使用一個或多個所緩 存的運動向量來計算當(dāng)前直接模式宏塊的運動向量。該選擇至少部分地基于當(dāng)前宏塊的編 碼模式執(zhí)行(例如IMV模式、2半幀MV模式等)。圖42示出用于在一實現(xiàn)中計算隔行掃描B-幀中宏塊的直接模式運動向量的一種 技術(shù)4200。在4210,編碼器/解碼器緩存在先前重構(gòu)的時間上將來的錨幀中共處宏塊的每 個宏塊的多個運動向量。如果該共處宏塊僅具有一個運動向量,則如果需要,該運動向量將 被緩存為共處宏塊的各個塊的運動向量值。在4220,編碼器/解碼器部分地依賴于當(dāng)前宏 塊所需運動向量的數(shù)量,選擇共處宏塊的一個或多個緩存運動向量,用于隔行掃描B-幀中 當(dāng)前宏塊的直接模式預(yù)測。在一實現(xiàn)中,解碼器緩存共處宏塊中的兩個運動向量,或緩存來自將來錨幀的最 大可能數(shù)量的經(jīng)解碼亮度運動向量的一半。錨幀中的各宏塊可用不同方法編碼,其中每個 宏塊最多達(dá)4個運動向量,但只能緩存最多達(dá)兩個運動向量,如下所述。而且,為當(dāng)前宏塊 產(chǎn)生的正向/反向運動向量對的數(shù)量取決于當(dāng)前宏塊的編碼模式,而不是僅僅取決于經(jīng)先 前解碼的將來錨幀的共處宏塊的編碼模式。例如,如果當(dāng)前直接模式宏塊是IMV編碼的,則解碼器從錨幀的共處宏塊的上半 幀中取得被緩存的運動向量,并產(chǎn)生一對直接運動向量-一個正向另一個反向。如果當(dāng)前 直接模式宏塊是半幀編碼的,則解碼器從錨幀的共處宏塊中取得被緩存的上半幀和下半幀運動向量,并產(chǎn)生兩對運動向量,一共有當(dāng)前直接模式宏塊的4個運動向量-對每個半幀都 有一個正向另一個反向的運動向量。圖43示出經(jīng)先前解碼的時間上將來的錨幀的共處宏塊4300的各個塊的運動向量 MV1、MV2、MV3和MV4。如果該共處宏塊是IMV宏塊,則MV1、MV2、MV3和MV4都相等。如果 該共處宏塊是2半幀MV宏塊,則MVl和MV2等于一個值,而MV3和MV4等于另一個值。如 果該錨幀的共處宏塊是4半幀MV或4幀MV宏塊,則MV1、MV2、MV3和MV4可能都是不同的 值。然而,即使MV1、MV2、MV3和MV4都可用,解碼器仍然僅緩存MVl和MV3。在圖43所示示例中,解碼器緩存MVl和MV3。如果當(dāng)前宏塊使用IMV模式,則解碼 器選擇MVl來計算當(dāng)前宏塊的正向和反向直接模式運動向量,并略去MV3。如果當(dāng)前宏塊使 用2半幀MV模式,則解碼器使用MVl和MV3來計算4個直接模式運動向量。該運算產(chǎn)生當(dāng) 前宏塊的上下半幀的運動的良好表示。在已選擇來自錨幀中共處宏塊的運動向量時,解碼器應(yīng)用縮放邏輯來導(dǎo)出相應(yīng)的 正向和反向指示運動向量,用于B幀宏塊的直接模式預(yù)測。例如,解碼器可應(yīng)用圖19中的 函數(shù)Scale_Direct_MV?;蛘?,解碼器應(yīng)用不同的縮放函數(shù)?;蛘撸幋a器/解碼器可緩存每個錨幀宏塊的4個運動向量。例如,如果當(dāng)前宏塊 是IMV編碼的,則編碼器/解碼器可取錨幀中共處宏塊的左上運動向量,并產(chǎn)生一對直接運 動向量,或者可取錨幀宏塊的4個運動向量的均值。如果當(dāng)前宏塊是半幀編碼的,則編碼器 /解碼器可取左上和左下運動向量,并產(chǎn)生兩對(一個半幀一對),或者可取錨幀宏塊的上 運動向量的均值和下運動向量的均值。當(dāng)錨幀中的共處宏塊為幀內(nèi)、或當(dāng)錨幀為I-幀時,直接模式運動向量被視為(0, 0)。VIII.隔行掃描B-半幀和隔行掃描B-幀中的4MV編碼在一些實現(xiàn)中,編碼器使用4運動向量(4MV)編碼模式編碼隔行掃描的B-半幀和 隔行掃描的B-幀。4MV編碼可允許復(fù)雜運動軌跡的表示比1運動向量(IMV)編碼更準(zhǔn)確 (例如,通過允許宏塊中的4個亮度塊獨立地進(jìn)行預(yù)測和運動補償)。使用4MV可受限于某 些預(yù)測模式。例如,在一些實現(xiàn)中,編碼器將4MV用于正向和反向模式(包括半幀和幀變化 兩者),而不用于直接或插值模式。當(dāng)4MV不用于逐行掃描B-幀時,這不同于逐行掃描編碼 模式。直接和插值模式涉及計算經(jīng)運動補償預(yù)測時的像素平均,它用于平滑細(xì)微細(xì)節(jié)。 如果這種平滑是可接受的,則可能可使用IMV模式而不是4MV模式,因為編碼IMV較容易, 且IMV可用來準(zhǔn)確地描述平滑運動軌跡。實驗已顯示,在隔行掃描B-半幀和隔行掃描B-幀 的宏塊中使用4MV模式,而將4MV模式限于正向和反向預(yù)測宏塊中是有利的。有利于將4MV 限于正向和反向模式中的另一個因素是組合4MV與直接或插值模式將導(dǎo)致每種情形中一 共有8個運動向量。信號表示開銷(用于插值模式)和實現(xiàn)以及關(guān)聯(lián)于8個運動向量的解 碼復(fù)雜性通常抵銷了準(zhǔn)確性優(yōu)點。此外,當(dāng)通常在較高質(zhì)量設(shè)置上編碼的(即較不強烈量 化的)P_圖片通??蓛H將一個或四個運動向量用于運動補償時,用8個運動向量來編碼隔 行掃描B-圖片通常是不實用的。將4MV限于某些預(yù)測模式還具有其它優(yōu)點。例如,如果4MV僅限于正向和反向預(yù) 測模式,并且如果正向/非正向模式?jīng)Q定已用信號表示(例如用諸如在以下XI節(jié)所述的位平面編碼技術(shù)),編碼器無需發(fā)送任何附加比特來用信號表示4MV宏塊的預(yù)測模式。
以下偽碼可應(yīng)用于隔行掃描B-半幀的宏塊,其中正向/非正向決定是位平面編碼 的,并在任何宏塊級別信息之前發(fā)送(例如在圖片級別上發(fā)送)
IfMB是4MV編碼的AND預(yù)測模式是非正向的then預(yù)測模式=反向(不發(fā)送任何更多比特來用信號表示模式)在一些實現(xiàn)中,直接/非直接預(yù)測模式?jīng)Q定在任何宏塊級別信息之前發(fā)送(例如 在圖片級別上的經(jīng)壓縮位平面中)。(對于有關(guān)編碼直接/非直接信息的更多信息,參見 序列號為 10/622,378 的題為"Advanced Bi-Directional Predictive Coding ofVideo Frames”(視頻幀的高級雙向預(yù)測編碼)并于2003年7月18日提交的美國專利申請。)以 下偽碼可應(yīng)用于隔行掃描B-幀的宏塊,其中4MV在這些實現(xiàn)中受限于正向和反向模式IfMB是4MV編碼的AND預(yù)測模式是非正向的then發(fā)送一附加比特來用信號表示預(yù)測模式(正向或反向)或者,4MV用于不同于或除正向或反向模式之外的預(yù)測模式、不用于正向模式、不 用于反向模式、或不用于任何預(yù)測模式。例如,在一些實現(xiàn)中,4MV用于隔行掃描B-半中貞, 但不用于隔行掃描B-幀。在其它可選實現(xiàn)中,其它代碼或代碼長度可用于用信號表示結(jié)合 4MV編碼的預(yù)測模式。IX.使用分開的正向和反向運動向量緩沖區(qū)來預(yù)測隔行掃描B-圖片中的運動向
量隔行掃描B-圖片的運動向量使用分開的正向和反向運動向量上下文來預(yù)測。一 般而言,正向運動向量使用存儲在正向運動向量緩沖區(qū)中的運動向量來預(yù)測,而反向運動 向量使用存儲在反向運動向量緩沖區(qū)中的運動向量來預(yù)測。然后當(dāng)前宏塊的結(jié)果運動向量 存儲在適當(dāng)?shù)木彌_區(qū)中,并可用于其它宏塊的后續(xù)運動向量預(yù)測值中。通常,正向和反向運 動向量緩沖區(qū)中的相應(yīng)空間都為每個宏塊填充,即使給定宏塊僅用正向運動向量(在正向 預(yù)測宏塊的情形中)或僅用反向運動向量(在反向預(yù)測宏塊的情形中)預(yù)測。以下各節(jié)描 述用于預(yù)測隔行掃描B-圖片(如,隔行掃描B-半巾貞,隔行掃描B-幀)中的運動向量,以及 用于為“遺漏”的正向或反向運動向量“填充”運動向量緩沖區(qū)中的相應(yīng)空間的技術(shù)。A.正向和反向緩沖區(qū)當(dāng)預(yù)測隔行掃描B-圖片的運動向量時,編碼器/解碼器使用正向運動向量緩沖區(qū) 和/或反向運動向量緩沖區(qū)中的先前重構(gòu)的運動向量。在正向模式中,編碼器/解碼器使 用來自正向運動向量緩沖區(qū)的經(jīng)重構(gòu)正向運動向量,來預(yù)測用于正向運動補償?shù)漠?dāng)前運動 向量。在反向模式中,編碼器/解碼器使用來自反向運動向量緩沖區(qū)的經(jīng)重構(gòu)反向運動向 量,來預(yù)測用于反向運動補償?shù)漠?dāng)前運動向量。對于直接模式或插值模式宏塊,編碼器/解 碼器使用正向運動向量緩沖區(qū)來預(yù)測正向運動向量分量(或可能多個正向運動分量),并 使用反向運動向量緩沖區(qū)來預(yù)測反向運動向量分量(或可能多個反向運動分量)。在重構(gòu)隔行掃描B-圖片的運動向量之后,編碼器/解碼器將重構(gòu)后的正向運動向 量緩存在正向運動向量緩沖區(qū)中,并將重構(gòu)后的反向運動向量緩存在反向運動向量緩沖區(qū) 中。在正向模式中,編碼器/解碼器將重構(gòu)后的正向運動向量存儲在正向運動向量緩沖區(qū) 中。在反向模式中,編碼器/解碼器將重構(gòu)后的反向運動向量存儲在反向運動向量緩沖區(qū) 中。對于使用直接或插值預(yù)測模式的宏塊,編碼器/解碼器將(各)正向運動向量分量存儲在正向運動向量緩沖區(qū)中,并將(各)反向運動向量分量存儲在反向運動向量緩沖區(qū)中。例如,如果編碼器在隔行掃描B-圖片中的宏塊坐標(biāo)位置(12,13)上編碼正向預(yù)測 宏塊時,則編碼器計算正向運動向量預(yù)測值并在比特流中發(fā)送該正向運動向量的殘差(假 設(shè)該宏塊未被“跳過”)。解碼器解碼該殘差(即差值),并重構(gòu)運動向量。編碼器/解碼器 將重構(gòu)后的運動向量插入正向運動向量緩沖區(qū)。然后編碼器/解碼器使用運動向量預(yù)測邏 輯來計算要填充反向運動向量的反向運動向量預(yù)測值,并將反向運動向量置于反向運動向 量緩沖區(qū)中的位置(12,13)上。例如,在三者中值的預(yù)測情形中,編碼器/解碼器可取位置 (11,13)、(12,12)和(13,12)上的緩存反向運動向量的中值(當(dāng)前正向預(yù)測宏塊的左、上、 右上鄰居),來填充(12,13)的反向運動向量。圖44示出使用正向和/或反向運動向量緩沖區(qū)來預(yù)測隔行掃描B-圖片中當(dāng)前宏 塊的運動向量的一種技術(shù)4400。在4410,取決于要預(yù)測的運動向量是正向還是反向運動向 量,編碼器/解碼器選擇使用正向還是反向運動向量緩沖區(qū)。如果當(dāng)前運動向量是正向運 動向量,則編碼器/解碼器在4420從正向運動向量緩沖區(qū)選擇一個候選運動向量預(yù)測值 集。如果當(dāng)前運動向量是反向運動向量,則編碼器/解碼器在4430從反向運動向量緩沖區(qū) 選擇一個候選運動向量預(yù)測值集。在4440,編碼器/解碼器基于候選運動向量預(yù)測值集計 算運動向量預(yù)測值。例如,編碼器/解碼器計算候選運動向量預(yù)測值集的中值。在簡單情形 中,編碼器/解碼器基于都是IMV宏塊的預(yù)測值計算IMV當(dāng)前宏塊的運動向量預(yù)測值。更 復(fù)雜的變化描述如下,其中當(dāng)前宏塊和/或鄰居宏塊具有不同模式。圖45示出正向運動向量緩沖區(qū)4510和反向運動向量緩沖區(qū)4520中的運動向量。 在圖45所示示例中,對于重構(gòu)宏塊4530-4570,編碼器/解碼器將正向運動向量存儲在正向 運動向量緩沖區(qū)4510中,并將反向運動向量存儲在反向運動向量緩沖區(qū)4520中。為了預(yù) 測當(dāng)前宏塊4580的運動向量,編碼器/解碼器使用來自相鄰宏塊的候選預(yù)測值。例如,如 果當(dāng)前宏塊4580用正向模式預(yù)測,則編碼器使用正向運動向量緩沖區(qū)中的相鄰正向運動 向量來預(yù)測正向運動向量(例如使用三者中值預(yù)測),隨后用重構(gòu)后的運動向量值填充正 向運動向量緩沖區(qū)中的當(dāng)前宏塊位置。為了填充反向運動向量緩沖區(qū)4520中的相應(yīng)當(dāng)前 宏塊位置,編碼器/解碼器可使用反向運動向量緩沖區(qū)中的相鄰反向運動向量來預(yù)測反向 運動向量,并將該預(yù)測值置于反向運動向量緩沖區(qū)的當(dāng)前宏塊的位置中。B.隔行掃描B-幀中的運動向量預(yù)測在一些實現(xiàn)中,編碼器/解碼器采用以下方案來預(yù)測隔行掃描B-幀中宏塊(包括 其不同半幀)的運動向量,它使用分開的正向和反向運動向量上下文。圖40A-40B示出從 中收集候選運動向量的相鄰宏塊。如果IMV宏塊是正向預(yù)測的,則編碼器/解碼器從正向運動向量緩沖區(qū)的候選運 動向量中預(yù)測其正向運動向量(例如使用諸如圖40A和40B中或別處示出的三者中值預(yù)測 和預(yù)測模式)。編碼器/解碼器(在添加運動向量預(yù)測誤差后)將該正向運動向量存儲在 正向運動向量緩沖區(qū)中。編碼器/解碼器通過從反向運動向量緩沖區(qū)的候選運動向量中預(yù) 測反向運動向量來填充“空穴”(例如與正向預(yù)測情形中一樣),并將該反向運動向量(在 此為預(yù)測值)存儲在反向運動向量緩沖區(qū)中。如果IMV宏塊是反向預(yù)測的,則編碼器/解碼器從反向運動向量緩沖區(qū)的候選運 動向量中預(yù)測其反向運動向量(例如與正向預(yù)測情形中一樣)。編碼器/解碼器(在添加
32預(yù)測誤差后)將該反向運動向量存儲在反向運動向量緩沖區(qū)中。編碼器/解碼器通過從正 向運動向量緩沖區(qū)的候選運動向量中預(yù)測正向運動向量來填充“空穴”,并將該正向運動向 量(在此為預(yù)測值)存儲在正向運動向量緩沖區(qū)中。在正向和反向運動向量緩沖區(qū)中略去作為幀內(nèi)編碼宏塊的鄰居。各種特定情形確定隔行掃描B-幀中IMV和半幀編碼2MV宏塊的組合。如果當(dāng)前 IMV宏塊的位置A、B或C中的相鄰宏塊是半幀編碼的2MV宏塊,則編碼器/解碼器取2MV宏 塊的半幀運動向量的均值作為該位置的運動向量預(yù)測值。對于正向預(yù)測的當(dāng)前2半幀MV宏塊,例如對于兩個正向預(yù)測半幀運動向量的每一 個,來自鄰居的候選運動向量從正向運動向量緩沖區(qū)中收集。編碼器/解碼器基于相鄰宏 塊的編碼模式(例如幀內(nèi)、1MV、2半幀MV)選擇一個候選運動向量集,這些相鄰宏塊存儲在 正向運動向量緩沖區(qū)中。如果相鄰宏塊存在且不是幀內(nèi)編碼的,則編碼器/解碼器注意該 宏塊的運動向量以添加到候選集中去。在一些實施例中,編碼器/解碼器繼續(xù)如下動作。對 于上半幀正向運動向量,如果位置A、B或C中的相鄰宏塊是IMV宏塊,則編碼器將來自正向 運動向量緩沖區(qū)的相應(yīng)位置的宏塊的運動向量添加到候選集中。對于是2半幀MV宏塊的 位置A、B或C中的相鄰宏塊,編碼器/解碼器將來自正向運動向量緩沖區(qū)的相應(yīng)位置的上 半幀MV添加到該集中。對于下半幀正向運動向量,如果位置A、B或C中的相鄰宏塊是IMV宏塊,則編碼器 將來自正向運動向量緩沖區(qū)的相應(yīng)位置的宏塊的運動向量添加到候選集中。對于是2半幀 MV宏塊的位置A、B或C中的相鄰宏塊,編碼器/解碼器將來自正向運動向量緩沖區(qū)的相應(yīng) 位置的下半幀MV添加到該集中。為了計算2半幀MV宏塊的半幀運動向量的預(yù)測值,編碼器/解碼器然后計算候選 集的中值。為了計算2半幀MV宏塊的反向預(yù)測運動向量,邏輯與正向預(yù)測情形相同,但來自 鄰居的候選運動向量是從反向運動向量緩沖區(qū)中收集的。再一次,對于運動向量預(yù)測,略去位置A、B或C中幀內(nèi)編碼的鄰居。在重構(gòu)2半幀MV宏塊的運動向量之后(例如通過添加運動向量差值信息),重構(gòu) 后的實際運動向量按適合重構(gòu)后運動向量的預(yù)測方向,被置入正向運動向量緩沖區(qū)或反向 運動向量緩沖區(qū)。運動向量緩沖區(qū)的用于缺少方向的相應(yīng)空槽通過計算缺少方向的運動向 量預(yù)測值并將該運動向量預(yù)測值存儲在空槽中來填充。如果使用預(yù)測模式切換(參見以上VI節(jié)),一例外牽涉到隔行掃描B-幀內(nèi)半幀編 碼宏塊的空穴填充。在該情形中,給定半幀編碼的2MV宏塊具有一個正向運動向量和一個 反向運動向量。在重構(gòu)隔行掃描B-幀的半幀編碼宏塊之后,在半幀編碼宏塊在上半幀和下 半幀之間切換預(yù)測方向時,編碼器/解碼器用正向運動向量填充正向運動向量緩沖區(qū)的上 下運動向量“槽”,并用反向運動向量填充反向緩沖區(qū)的上下運動向量槽。盡管正向運動向 量僅對一個半幀(例如上半幀)發(fā)送,編碼器將同一運動向量置入正向運動向量緩沖區(qū)的 上下半幀運動向量槽。類似地,盡管反向運動向量僅對下半幀發(fā)送,編碼器將它置入反向運 動向量緩沖區(qū)的上下半幀槽。例如,圖46示出正向運動向量緩沖區(qū)4610和反向運動向量緩沖區(qū)4620中重構(gòu) 宏塊4680的上下半幀的運動向量。在圖46所示示例中,對于重構(gòu)宏塊4630-4670,編碼器
33/解碼器將正向運動向量存儲在正向運動向量緩沖區(qū)4610中,并將反向運動向量存儲在反 向緩沖區(qū)4620中。重構(gòu)宏塊4680是用預(yù)測切換進(jìn)行半幀編碼的,且其上半幀運動向量被 存儲在正向或反向運動向量緩沖區(qū)中(取決于上半幀運動向量的預(yù)測方向)的上下位置。 宏塊4680的下半幀運動向量被存儲在其它運動向量緩沖區(qū)的上下位置中。在該示例中,重 構(gòu)宏塊4680使用預(yù)測模式切換。盡管正向運動向量和方向運動向量都僅對一個半幀發(fā)送, 但編碼器將同一運動向量置入相應(yīng)正向和反向運動向量緩沖區(qū)的上下半幀運動向量槽中。如果當(dāng)前宏塊被插值,則編碼器/解碼器使用正向運動向量緩沖區(qū)來預(yù)測正向運 動向量(或2半幀MV宏塊的正向運動向量),使用反向運動向量緩沖區(qū)來預(yù)測反向運動向 量(或2半幀MV宏塊的反向運動向量),并(在添加了 一計算好就添加的預(yù)測誤差之后) 將該正向和反向運動向量分別存儲在正向和反向運動向量緩沖區(qū)中。如果宏塊是在隔行掃描B-幀中直接預(yù)測的,則編碼器/解碼器可使用以上VII節(jié) 描述的技術(shù)。在一些實現(xiàn)中,IMV宏塊、2半幀MV宏塊和幀內(nèi)宏塊被允許用于隔行掃描B-幀(但 不是其它MV宏塊類型),因為只需要確定較少的當(dāng)前/鄰居模式組合而簡化了用于預(yù)測運 動向量的邏輯?;蛘撸试S其它和/或附加MV模式,諸如4幀MV宏塊和4半幀MV宏塊。例 如,圖64、69和70中示出的偽碼的一部分可用來確定隔行掃描B-幀的這種其它組合。C.隔行掃描B-半幀的運動向量預(yù)測一般而言,對于隔行掃描B-半幀,先前重構(gòu)(或?qū)С?的正向半幀運動向量被用 作當(dāng)前正向半幀運動向量的預(yù)測值,且先前重構(gòu)(或?qū)С?的反向半幀運動向量被用作當(dāng) 前反向半幀運動向量的預(yù)測值。在正向或反向模式中,當(dāng)前正向或反向半幀的運動向量被 添加到適當(dāng)?shù)倪\動向量緩沖區(qū)中,且另一(缺少)方向的運動向量(例如正向模式中的反 向方向,或反向模式中的正向方向)被導(dǎo)出用作將來使用的預(yù)測值。在一些實現(xiàn)中,半幀運動向量預(yù)測選擇根據(jù)以上III. A. 2節(jié)的詳細(xì)描述和以下 XIV. B. 3節(jié)描述的雙參考半幀運動向量預(yù)測邏輯進(jìn)行。例如,圖33A-33F中示出的偽碼用 來計算隔行掃描B-半幀的宏塊的兩個半幀的正向運動向量預(yù)測值,且一個運動向量預(yù)測 值被選擇用于重構(gòu)正向半幀的運動向量。然后將重構(gòu)的運動向量置于正向運動向量緩沖區(qū) 中。該偽碼也用來計算該宏塊的兩個半幀的反向運動向量預(yù)測值,且一個預(yù)測值被選擇用 作反向運動向量緩沖區(qū)的填充值。對于隔行掃描B-半幀,為了填充缺少方向的運動向量緩 沖區(qū)中的“空穴”,編碼器/解碼器在相同極性和相反極性的運動向量預(yù)測值之間選擇。這 種極性之間的選擇因為兩個預(yù)測值在給定缺少方向中產(chǎn)生_ 一個與當(dāng)前半幀極性相同,另 一個與當(dāng)前半幀極性相反。因此,在一些實現(xiàn)中,編碼器/解碼器選擇用于缺少方向運動向 量的主要或“主”極性預(yù)測值。這樣,正向和方向運動向量的完整集就被提供用于運動向量 預(yù)測?;蛘撸_定主極性、首先進(jìn)行預(yù)測值選擇、并只計算選定運動向量預(yù)測值。在一實現(xiàn)中通過從不同極性的半幀運動向量預(yù)測值中選擇來進(jìn)行實際值緩存和 空穴填充的過程如圖47中的偽碼4700所示。偽碼4700示出,在空穴填充預(yù)測期間,沒有 實際運動向量被提供為缺少方向,因此具有主極性的經(jīng)預(yù)測的缺少方向運動向量由編碼器 /解碼器來選擇。在一些實現(xiàn)中,隔行掃描B-半幀的運動向量預(yù)測的整個方案如下所述。如果宏塊是正向預(yù)測的,則編碼器/解碼器從正向運動向量緩沖區(qū)的候選相同和/或相反極性運動向量(例如大多數(shù)情形中使用來自左、上和右上鄰居的三者中值預(yù)測)或 從緩存運動向量中導(dǎo)出的運動向量中預(yù)測其正向運動向量。編碼器/解碼器將重構(gòu)后的正 向運動向量存儲在正向運動向量緩沖區(qū)中,計算主反向運動向量預(yù)測值(類似于用來自反 向運動向量緩沖區(qū)的空間鄰域的三者中值預(yù)測的),并將其存儲在反向運動向量緩沖區(qū)中 的相應(yīng)位置。如果宏塊是反向預(yù)測的,則編碼器/解碼器從反向運動向量緩沖區(qū)的候選相同和 /或相反極性運動向量(例如大多數(shù)情形中使用來自左、上和右上鄰居的三者中值預(yù)測)或 從緩存運動向量中導(dǎo)出的運動向量中預(yù)測其反向運動向量。編碼器/解碼器將重構(gòu)后的反 向運動向量存儲在反向運動向量緩沖區(qū)中,計算主正向運動向量預(yù)測值(類似于用來自正 向運動向量緩沖區(qū)的空間鄰域的三者中值預(yù)測的),并將其存儲在正向運動向量緩沖區(qū)中 的相應(yīng)位置。如果該宏塊是插值的,則編碼器/解碼器使用正向運動向量緩沖區(qū)來預(yù)測正向運 動向量分量,使用反向運動向量緩沖區(qū)來預(yù)測反向運動向量分量,并(在添加了一計算好 就添加的預(yù)測誤差之后)將重構(gòu)后的正向和反向運動向量分別存儲在正向和反向運動向 量緩沖區(qū)中。如果宏塊是直接預(yù)測的,則編碼器/解碼器計算當(dāng)前半幀的直接模式運動向量, 并將正向和反向運動向量分量存儲在相應(yīng)的運動向量緩沖區(qū)中。在運動向量預(yù)測中,略去位置A、B或C中幀內(nèi)編碼的鄰居。各種特定情形確定隔行掃描B-半幀中IMV和4MV宏塊的組合。圖6A-10示出用 于逐行掃描P-幀的運動向量預(yù)測的預(yù)測值模式。這些相同模式示出被視為用于混合MV的 隔行掃描B-半幀的IMV或4MV宏塊的運動向量的運動向量預(yù)測的候選運動向量的塊或宏 塊的位置。對于幀是一個宏塊寬的特定情形,預(yù)測值總是Predicator A(頂部預(yù)測值)。各 種其它規(guī)則解決其它特定情形,諸如首行4MV宏塊、首行IMV宏塊、和幀內(nèi)編碼預(yù)測值。圖6A-10中所示的預(yù)測值模式用來使用來自正向運動向量緩沖區(qū)中各位置的候 選值進(jìn)行正向預(yù)測,并使用來自反向運動向量緩沖區(qū)中位置的候選值進(jìn)行反向預(yù)測。此外, 圖6A-10中所示的預(yù)測值模式結(jié)合以上所述的對隔行掃描B-半幀的雙參考半幀運動向量 預(yù)測邏輯來使用。圖6A和6B示出被視作用于混合MV的隔行掃描B-半幀中的IMV當(dāng)前宏塊的候選 運動向量預(yù)測值的塊的位置。相鄰的各個宏塊可以是IMV或4MV宏塊。圖6A和6B示出假 設(shè)鄰居是4MV的候選運動向量的位置(即預(yù)測值A(chǔ)是當(dāng)前宏塊上面的宏塊中塊2的運動向 量,而預(yù)測值C是當(dāng)前宏塊左側(cè)緊鄰的宏塊中塊1的運動向量)。如果鄰居的任一個是IMV 宏塊,則圖5A和5B中示出的運動向量預(yù)測值被視為整個宏塊的運動向量預(yù)測值。如圖6B 所示,如果宏塊是該行中的最后一個宏塊,則預(yù)測值B來自左上方宏塊的塊3而不像其它情 形一樣來自右上方宏塊的塊2。圖7A-10示出被視作用于混合MV的隔行掃描B-半幀的4MV宏塊中4個亮度塊的 每一個的候選運動向量預(yù)測值的塊的位置。圖7A和7B是示出被視作用于位置0上一個塊 的候選運動向量預(yù)測值的塊的位置的示圖;圖8A和8B是示出被視作用于位置1上一個塊 的候選運動向量預(yù)測值的塊的位置的示圖;圖9是示出被視作用于位置2上一個塊的候選 運動向量預(yù)測值的塊的位置的示圖;而圖10是示出被視作用于位置3上一個塊的候選運動向量預(yù)測值的塊的位置的示圖。再一次,如果鄰居是IMV宏塊,則該宏塊的運動向量預(yù)測值 用于該宏塊的各個塊。對于宏塊是行中第一宏塊的情形,塊0的預(yù)測值B與該行中剩余宏塊的塊0進(jìn)行 不同的處理(參見圖7A和7B)。在該情形中,預(yù)測值B從當(dāng)前宏塊上面緊鄰宏塊的塊3中 取得,而不像其它情形一樣從當(dāng)前宏塊左上方的宏塊的塊3中取得。類似地,對于宏塊是行 中最后一個宏塊的情形,塊1的預(yù)測值B進(jìn)行不同的處理(參見圖8A和8B)。在該情形中, 預(yù)測值從當(dāng)前宏塊上面緊鄰宏塊的塊2中取得,而不像其它情形一樣從當(dāng)前宏塊右上方的 宏塊的塊2中取得。一般而言,如果該宏塊在第一宏塊列中,則塊0和2的預(yù)測值C被設(shè)置 為等于0。再一次,對于運動向量預(yù)測,略去位置A、B或C中幀內(nèi)編碼的鄰居。在重構(gòu)4MV宏塊的運動向量之后(例如通過添加運動向量差值信息),重構(gòu)后的實 際運動向量按適合重構(gòu)后運動向量的預(yù)測方向,被置入正向運動向量緩沖區(qū)或反向運動向 量緩沖區(qū)。運動向量緩沖區(qū)的用于缺少方向的相應(yīng)空槽通過計算缺少方向的相同和相反極 性的運動向量預(yù)測值、在不同極性運動向量預(yù)測值之間選擇、并將該運動向量預(yù)測值存儲 在空槽中來填充。再參看圖34A和34B,對于運動向量預(yù)測,編碼器/解碼器使用偽碼3400中所示 的縮放運算,將一個半幀運動向量預(yù)測值從另一個半幀運動向量預(yù)測值導(dǎo)出。示出兩個可 能的值集,其中當(dāng)前半幀是隔行掃描視頻幀中的第一半幀的情形在圖35的表格3500中示 出,而當(dāng)前半幀是隔行掃描視頻幀中的第二半幀的情形在圖36的表格3600中示出。在表 格 3500 和 3600 中,SCALEOPP、SCALESAME1、SCALESAME2、SCALEZ0NE1_X、SCALEZ0NE1_Y、 Z0NE10FFSET_X和Z0NE10FFSET_Y取決于參考幀距離。在一些實現(xiàn)中,使用分?jǐn)?shù)編碼來計算用于隔行掃描B-半幀中的正向和反向參考 的參考幀距離。BFRACTI0N語法元素(它用信號表示隔行掃描B-半幀的正向或反向預(yù)測模 式宏塊,而不只是隔行掃描B-幀的直接模式宏塊)用來導(dǎo)出正向和反向參考圖片距離,如 以下偽碼所示正向參考幀距離(FRFD)=NINT ((BFRACTI0N 分子)/ (BFRACTI0N 分母)* 參考幀距離If (FRFD < 0) then FRFD = 0反向參考幀距離(BRFD)=參考幀距離-FRFD-I (其中NINT是最近整數(shù)操作符)BFRACTI0N分子和分母從BFRACTI0N語法元素中解碼。元素BFRACTION可用來表 示可在比特流中發(fā)送的不同分?jǐn)?shù)(例如在隔行掃描B-半幀的幀級別上)。該分?jǐn)?shù)在0和1 之間的有限離散值集中取值,并在通過其錨形成的間隔內(nèi)標(biāo)示B-圖片的相對時間位置。對于具有隔行掃描B-半幀的幀中的第二半幀的正向預(yù)測和反向預(yù)測,編碼器/ 解碼器根據(jù)圖34A和34B中的偽碼3400執(zhí)行運動向量縮放。然而,在一些實現(xiàn)中,執(zhí)行第 一半幀的反向運動向量預(yù)測的編碼器/解碼器使用如在圖48中所示偽碼4800中定義的 函數(shù) scaleforopposite_x、scaleforopposite_y> scaleforsame_x> scaleforsame_y。在 一實現(xiàn)中用于第一隔行掃描 B-半幀的 SCALESAME、SCALEOPPU SCALE0PP2、SCALEZ0NE1_X、 SCALEZ0NE1_Y> Z0NE10FFSET_X 和 ZONEl 0FFSET_Y 在圖 49 的表格 4900 中示出。在表格4900中,變量N和運動向量范圍之間的關(guān)系與以上參考圖35和36和表格1所述的關(guān)系相 同?;蛘撸瑓⒖紟嚯x用另一種方法計算,或者縮放根據(jù)不同算法執(zhí)行。例如,縮放與 N的值無關(guān)地執(zhí)行(即N取為1)。X.具有隔行掃描B-半幀的“自參考”幀具有隔行掃描B-半幀的幀被編碼為兩個獨立(且某種程度上獨立編碼的)的半 幀。上半幀由幀的偶光柵行(從行0開始)組成,而下半幀由幀的奇光柵行組成。因為“半 幀圖片”中的半幀可獨立解碼,所以它們不需要以任何預(yù)先設(shè)置順序發(fā)送。例如,編碼器可 先發(fā)送下半幀再發(fā)送上半幀,或反之。在有些實現(xiàn)中,兩個半幀的順序由“先上半幀”的語 法元素表示,該語法元素取決于解碼幀的兩個半幀的準(zhǔn)確時間順序而為真或假?,F(xiàn)有的編碼器和解碼器已將前后錨幀(例如I-或P-幀)或前后錨幀中的半幀用 作“參考”圖片,以執(zhí)行對當(dāng)前B-圖片的運動補償。現(xiàn)有的編碼器和解碼器還限制B-圖片 或其任何部分用作任何圖片的運動補償參考。然而,在所述技術(shù)和工具的一些實現(xiàn)中,一種 或多種這些“規(guī)則”被放松。例如,在一些實現(xiàn)中,第一隔行掃描B-半幀參考來自前后錨圖片的第一和第二半 幀。第二隔行掃描B-半幀參考作為“相反極性”半幀的來自當(dāng)前圖片的第一隔行掃描B-半 幀和作為“相同極性”半幀的前一錨幀的相同極性半幀,以及來自下一錨圖片的第一和第二 半幀。圖50B是示出隔行掃描視頻幀B2中兩個隔行掃描B-半幀的每一個的參考半幀的 示圖。在圖50B所示示例中,要解碼的第一 B-半幀(在此為上半幀)被允許參考正向(時 間上過去)錨Pl中的兩個參考半幀和來自反向(時間上將來)錨P3中的兩個參考半幀, 總共為4個參考半幀。B2的要解碼的第二隔行掃描B-半幀被允許參考來自同一隔行掃描 視頻幀(因而打破了不允許B-圖片的各部分用作參考的慣例)的第一半幀和來自前一錨 Pl的一個參考半幀,以及來自將來錨P3的兩個半幀。為作比較,圖50A示出隔行掃描視頻 幀的隔行掃描P-半幀遵守的慣例。實現(xiàn)這些隔行掃描B-半幀參考規(guī)則的技術(shù)和工具可提供更好的壓縮。隔行掃描 視頻的半幀編碼對于編碼高運動是最為有效的,高運動即為在上半幀和下半幀之間有相當(dāng) 運動時。例如,在該情形中,幀的上(且首先編碼的)半幀對于同一幀下半幀中的像素將是 比從前一幀中(來自較遠(yuǎn)的時間距離)取得的上半幀好得多的預(yù)測值。由于它們之間較大 的時間距離,當(dāng)運動較高時這些時間上將來的預(yù)測值提供弱得多的預(yù)測。此外,對于時間上 更遠(yuǎn)的預(yù)測值來說閉塞的可能性放大,這導(dǎo)致更多編碼昂貴的幀內(nèi)編碼宏塊。特別地,實驗 證實允許幀的第二個時間隔行掃描B-半幀參考同一幀的第一時間隔行掃描B-半幀可產(chǎn)生 顯著的壓縮增益。XI.隔行掃描B-半幀中正向模式的位平面編碼如以上X節(jié)所述,在一些實現(xiàn)中,當(dāng)前幀的第二已編碼隔行掃描B-半幀可參考當(dāng) 前幀的第一已編碼隔行掃描B-半幀。該“自參考”技術(shù)在具有高運動的幀的隔行掃描B-半 幀中是有效的,因為當(dāng)前幀的時間上較近的B-半幀常常是比時間上較遠(yuǎn)的錨半幀更好的 預(yù)測值。當(dāng)具有隔行掃描B-半幀的幀具有較高運動,且時間上第二隔行掃描B-半幀首選 時間上第一隔行掃描B-半幀作為預(yù)測參考時,第二隔行掃描B-半幀中宏塊的更有效預(yù)測模式將常常是“正向”模式。因為隔行掃描B-半幀中的正向模式預(yù)測是用于降低比特率的有效工具,所以特 別是在低比特率情形中,減少信號表示開銷以降低用信號表示正向模式預(yù)測的整體成本是 有利的。因此,在一些實施例中,編碼器使用統(tǒng)一的位平面編碼技術(shù)來編碼正向模式預(yù)測信 息。例如,編碼器編碼壓縮位平面中的正向模式預(yù)測信息,其中位平面中的每個比特關(guān)聯(lián)于 一宏塊,且每個比特的值用信號表示該宏塊是用正向模式還是用非正向預(yù)測模式編碼。經(jīng)壓縮位平面可在幀級別、半幀級別或在一些其它級別上發(fā)送。與用于隔行掃描 B-半幀的其它預(yù)測模式相比,位平面編碼技術(shù)偏向于利用正向模式。例如,如果隔行掃描 B-半幀上的大多數(shù)宏塊使用正向預(yù)測,則編碼器通過位平面編碼正向/非正向決定,可將 信號表示開銷降為每個宏塊小于一個比特。圖51示出在具有一個或多個位平面編碼模式的視頻編碼器中用于編碼隔行掃描 B-半幀的宏塊的正向/非正向預(yù)測模式?jīng)Q定信息的一種技術(shù)5100。圖52示出用于解碼由 具有一個或多個位平面編碼模式的視頻編碼器編碼的正向/非正向預(yù)測模式?jīng)Q定信息的 相應(yīng)技術(shù)5200。。參照圖51,編碼器選擇用于編碼正向/非正向預(yù)測模式?jīng)Q定信息的位平面編碼模 式(5110)。在選擇編碼模式之后,編碼器用所選模式來編碼正向/非正向預(yù)測模式?jīng)Q定信 息(5120)。該編碼器在逐個半幀基礎(chǔ)上選擇位平面編碼模式?;蛘?,編碼器在一些其它基 礎(chǔ)上(例如在序列級別)選擇位平面編碼模式?;蛘?,如果只使用一種位平面編碼模式, 則不進(jìn)行位平面編碼模式的選擇。當(dāng)編碼器完成編碼正向/非正向預(yù)測模式?jīng)Q定信息時 (5130),正向/非正向預(yù)測模式?jīng)Q定信息的編碼結(jié)束。參照圖52,解碼器確定編碼器使用(并用信號表示)的編碼正向/非正向預(yù)測模 式?jīng)Q定信息的位平面編碼模式(5210)。然后該解碼器用選定模式解碼正向/非正向預(yù)測模 式?jīng)Q定信息。該解碼器在逐個半幀基礎(chǔ)上確定位平面編碼模式。或者,解碼器在一些其它 基礎(chǔ)上(例如在序列級別)確定位平面編碼模式?;蛘?,如果只有一種位平面編碼模式可 用,則不進(jìn)行位平面編碼模式的選擇。當(dāng)解碼器完成解碼正向/非正向預(yù)測模式?jīng)Q定信息 時(5230),正向/非正向預(yù)測模式?jīng)Q定信息的解碼結(jié)束。對于有關(guān)根據(jù)若干組合實現(xiàn)來用信號表示和解碼各種位平面編碼模式的其它細(xì) 節(jié),參見以下XIV節(jié)。對于有關(guān)一般位平面編碼的更多細(xì)節(jié),參見序列號為10/321,415題 為“Skip Macroblock Coding” (跳過宏塊編碼)并于2002年12月16日提交的美國專利 申請,其公開內(nèi)容通過引用結(jié)合在此?;蛘撸硎菊?非正向模式信息的比特可未經(jīng)壓縮 地和/或在一些其它級別(例如宏塊級別)上發(fā)送。如果指示的是非正向預(yù)測,則編碼器指定該宏塊的非正向預(yù)測模式(例如反向模 式、直接模式、插值模式、或幀內(nèi)模式)。在一些實現(xiàn)中,編碼器在宏塊級別參照VLC表格編 碼非正向預(yù)測模式,如以下表格2所示。
表格2.運動預(yù)測模式VLC表格在表格2所示示例中,反向模式是較佳的非正向預(yù)測模式。編碼器用1-比特信號 表示反向模式,并用2-比特信號表示直接和插值模式?;蛘?,編碼器使用不同代碼來表示 不同的預(yù)測模式和/或首選一種不同的非正向預(yù)測模式。在一些實現(xiàn)中,幀內(nèi)模式由特定運動向量差值來作信號表示,該值用預(yù)測模式是 幀內(nèi)模式的編碼方式來表示。運動向量差值因此用來推斷該宏塊是幀內(nèi)編碼的,但是按照 慣例編碼器將預(yù)測類型設(shè)置為反向,以便于不會具有任何未定義預(yù)測類型。XII.在隔行掃描B-半幀中選擇用于直接模式的共處運動向量在一些實現(xiàn)中,半幀編碼B-圖片中宏塊的直接模式運動向量使用特殊邏輯來選 擇。對于隔行掃描B-半幀中的當(dāng)前宏塊,如果下一錨圖片的相應(yīng)半幀的共處宏塊使用4 個運動向量進(jìn)行編碼,則該邏輯在該共處宏塊的最多達(dá)四個運動向量中偏向更主要的極性 (例如相同或相反)。一旦選擇了用于當(dāng)前宏塊的運動向量,編碼器/解碼器就可應(yīng)用縮放 運算以給出直接模式運動向量。在一些實現(xiàn)中,對于隔行掃描B-半幀的直接模式IMV宏塊,編碼器/解碼器基于 具有相同極性的參考半幀(例如時間上的下一 P-半幀)內(nèi)共處宏塊的一個或多個運動向 量,計算用于直接模式縮放的運動向量。如果參考半幀中的共處宏塊是IMV宏塊,則編碼 器/解碼器使用單個運動向量來導(dǎo)出隔行掃描B-半幀中宏塊的直接模式運動向量。另一 方面,如果參考半幀中的共處宏塊是4MV宏塊,則編碼器/解碼器在選擇用于導(dǎo)出隔行掃描 B-半幀中宏塊的直接模式運動向量的運動向量時考慮該4個運動向量的極性(偏向主要極 性)。在解碼隔行掃描B-半幀期間編碼器/解碼器在需要時可將該選擇邏輯應(yīng)用于參考半 幀中的4MV宏塊?;蛘?,編碼器/解碼器可在解碼參考半幀之后應(yīng)用該選擇邏輯,然后僅緩 存要在后來隔行掃描B-半幀解碼中使用的值。例如,對于參考半幀中的共處4MV宏塊,如果(4者中)來自相同極性半幀的運動 向量數(shù)量超過來自相反極性半幀的運動向量數(shù)量,則如果相同極性運動向量的數(shù)量分別為 4、3、2或1,編碼器/解碼器可使用四者中值、三者中值、二者中值或相同極性半幀運動向量 的值來計算在直接模式隔行掃描B-半幀解碼中使用的運動向量。否則,如果來自相反極 性半幀的運動向量數(shù)量超過來自相同極性半幀的運動向量,則編碼器/解碼器可使用類似 運算來從相反極性半幀的運動向量中得到代表性的運動向量,以用于直接模式的隔行掃描 B-半幀解碼。如果共處宏塊的四個運動向量的原始集中(不管極性)兩個以上運動向量是 幀內(nèi)編碼的,則編碼器/解碼器可將共處代表性運動向量簡單地視為是幀內(nèi)編碼的(即(0, 0))。然而,在一些實現(xiàn)中,隔行掃描B-半幀中的所有幀內(nèi)MB都被編碼為1MV,所以原始的 4個運動向量中的兩個以上為幀內(nèi)編碼的情形導(dǎo)致共處代表性運動向量被視為是幀內(nèi)編碼 在實際上不可能。圖53中的偽碼5300示出對用作隔行掃描B-半幀中直接模式運動向量的基礎(chǔ)的 運動向量的選擇過程。在一些實現(xiàn)中,該選擇過程是產(chǎn)生正向和反向指示直接模式運動向量的縮放運算的前身。XIII.隔行掃描視頻幀中的幀內(nèi)編碼B-半幀隔行掃描BI-半幀(或“幀內(nèi)B-半幀”)是與其參考圖片獨立編碼的半幀。在隔 行掃描BI-半幀不可用作預(yù)測其它圖片的錨的意義上,它們不同于其它幀內(nèi)半幀(例如隔 行掃描I-半幀)。沒有對隔行掃描BI-半幀的圖片間依賴性,且它在比特流中的出現(xiàn)不 表示可獨立解碼分段或圖片組的開始。然而,隔行掃描視頻幀中的第一半幀如果被編碼為 BI-半幀,則可用來預(yù)測該幀中可被編碼為隔行掃描B-半幀的第二個半幀。這種革新還通 過在許多情形中僅對幀的一半(第一編碼半幀)使用幀內(nèi)編碼而不將整個幀編碼為內(nèi)幀或 將兩個半幀編碼為幀內(nèi)半幀,來改進(jìn)整體壓縮。在一些實現(xiàn)中,幀可包括兩個B-半幀、兩個 BI-半幀、或一個B-或一個BI-半幀。使用隔行掃描BI-半幀而不使用隔行掃描I-半幀是有理由的。一個理由是避免 犧牲時間可縮放性。例如,當(dāng)解碼器提交數(shù)字視頻且需要立即丟棄一些圖片以跟上處理需 求時,它可尋找它可能丟棄的半幀序列。如果序列中的幀內(nèi)半幀變成關(guān)鍵半幀,則解碼器將 被迫解碼它們以用作其它半幀的參考,并且不能丟棄它們。然而,如果序列中的幀內(nèi)半幀被 編碼為BI-半幀,則解碼器將仍然有丟棄它們的選擇,而不損害后續(xù)運動補償。在隔行掃描BI-半幀更有效地用信號表示用于幀內(nèi)編碼和解碼的語法元素的意 義上,隔行掃描BI-半幀不同于具有幀內(nèi)宏塊的隔行掃描B-半幀,因為BI-半幀內(nèi)運動補 償相關(guān)元素(或信號表示其缺失的元素)可被消除。換言之,當(dāng)在視頻序列中的幀間半幀 預(yù)測中斷點上(例如因為場景變化或復(fù)雜運動)編碼隔行掃描B-半幀時,使用隔行掃描 BI-半幀(而不是常規(guī)B-半幀)的理由產(chǎn)生。常常這種半幀中的大多數(shù)宏塊將需要編碼為 幀內(nèi)宏塊。在該情形中,根據(jù)比特率來看,要將整個B-半幀編碼為一個BI-半幀常常比發(fā) 送該半幀中每個宏塊的預(yù)測模式信息要容易。當(dāng)對隔行掃描B-半幀的較好預(yù)測或運動補 償不可能時,它可被編碼為BI-半幀。在一些實現(xiàn)中,編碼器可用信號表示比特流中作為圖片類型的可能值之一的 BI-半幀的出現(xiàn)?;蛘?,BI-半幀的出現(xiàn)可用一些其它方法來指示。XIV.組合實現(xiàn)現(xiàn)在描述對比特流語法、語義和解碼器的詳細(xì)組合實現(xiàn),以及與主要組合實現(xiàn)有 細(xì)微差異的另一組合實現(xiàn)。A.比特流語法在各種組合實現(xiàn)中,用于隔行掃描B-圖片的數(shù)據(jù)以具有多個層(例如,序列、幀、 半幀、宏塊、塊和/或子塊層)的比特流形式呈現(xiàn)。對于具有隔行掃描B-半幀和/或BI-半幀的隔行掃描視頻幀,幀級別比特流元 素如圖54所示。每個幀的數(shù)據(jù)包括幀頭,隨后是半幀層的數(shù)據(jù)(示為每個半幀的重復(fù) “FieldPicLayer”元素)。組成隔行掃描B-半幀和BI-半幀的半幀頭的比特流元素分別如 圖55和56所示。組成隔行掃描B-半幀(幀內(nèi)、1MV、或4MV宏塊)和BI-半幀的宏塊層的 比特流元素分別如圖57和58所示。對于隔行掃描B-幀,幀級別比特流元素如圖59所示。每個幀的數(shù)據(jù)包括幀頭,隨 后是宏塊層的數(shù)據(jù)。組成隔行掃描B-幀的宏塊層的比特流元素(幀內(nèi)或各種幀間類型宏 塊)如圖60所示。
40
以下小節(jié)描述幀、半幀和宏塊層中的選定比特流元素,它們與相關(guān)于雙向預(yù)測隔 行掃描圖片的信號表示相關(guān)。盡管選定比特流元素在特定層的上下文中描述,但一些比特 流元素可在一個以上層中使用。1.選定幀層元素圖54是示出包含隔行掃描B-半幀或BI-半幀(或可能其它類隔行掃描半幀)的 幀的幀級別比特流語法的示圖。圖59是示出隔行掃描B-幀的幀級別比特流語法的示圖。 特定的比特流元素如下所述。幀編碼模式(FCM)(可變大小)FCM是用來表示圖片編碼類型的可變長度代碼字[“VLC”]。FCM具有如以下表格 3所示的幀編碼模式的值。表格3.幀編碼模式VLC 半幀圖片類型(FPTYPE) (3個比特)FPTYPE是包括隔行掃描P-半幀、隔行掃描1_半幀、隔行掃描B-半幀和/或隔行 掃描BI半幀的幀的幀頭中提供的3-比特語法元素。FPTYPE具有隔行掃描視頻幀中半幀類 型的不同組合的值,如下表4所示。表格4.半幀圖片類型FLC 參考距離(REFDIST)(可變大小)REFDIST是可變大小的語法元素。該元素表示當(dāng)前幀和參考幀之間幀的數(shù)量。表 格5示出用來編碼REFDIST值的VLC。表格5. REFDISTVLC 表格 表格5中的最后一行表示用來表示大于2的參考幀距離的代碼字。這些被編碼為 (二進(jìn)制)11,隨后是N-31S,其中N是參考幀距離。代碼字中最后一個比特為0。例如N = 3, VLC 代碼字=110,VLC 大小=3N = 4,VLC 代碼字=1110,VLC 大小=4N = 5, VLC 代碼字=11110, VLC 大小=5圖片類型(PTYPE)(可變大小)PTYPE是隔行掃描B-幀(或其它類型的隔行掃描幀,諸如隔行掃描1_幀、或隔行 掃描P-幀)的幀頭中提供的可變大小的語法元素。PTYPE具有不同幀類型的值,如以下表 格6所示。表格6.圖片類型VLC
如果PTYPE指示該幀被跳過,則該幀被視為與其參考幀等同的P幀。被跳過幀的 重構(gòu)在概念上等同于復(fù)制該參考幀。被跳過幀意思是沒有該幀的其它數(shù)據(jù)被傳送。B-幀直接模式MB比特語法元素(DIRECTMB)(可變大小)DIRECTMB語法元素使用位平面編碼來表示B圖片(在此為隔行掃描B-幀)中以 直接模式編碼的宏塊。DIRECTMB語法元素還可用信號表示該直接模式是用原始模式來作 信號表示的,在該情形中直接模式在隔行掃描B-幀的宏塊的宏塊級別上作信號表示。經(jīng)擴(kuò)展的MV范圍標(biāo)記(MVRANGE)(可變大小)MVRANGE是在序列層EXTENDED_MV比特被設(shè)置為1時提供的可變大小的語法元素。 MVRANGE VLC表示運動向量范圍。經(jīng)擴(kuò)展的差值MV范圍標(biāo)記(DMVRANGE)(可變大小)DMVRANGE是如果序列層語法元素EXTENDED_DMV = 1時提供的可變大小的語法元 素,該DMVRANGE VLC表示運動向量差值范圍。宏塊模式表格(MBM0DETAB) (2或3個比特)MBM0DETAB語法元素是固定長度的字段。對于隔行掃描P_半幀,MBM0DETAB是3 比特值,表示8個哈夫曼表格的哪一個用來解碼宏塊層中的宏塊模式語法元素(MBMODE)。運動向量表格(MVTAB) (2或3個比特)MVTAB語法元素是2或3個比特的值。對于NUMREF = 1的隔行掃描P-半幀,MVTAB 是表示8個隔行掃描哈夫曼表格的哪一個用來解碼運動向量的數(shù)據(jù)的3比特語法元素。2MV塊模式表格(2MVBPTAB) (2個比特)2MVBPTAB語法元素是2個比特的值,它表示4個哈夫曼表格的哪一個用來解碼 2MV半幀宏塊中2MV塊模式(2MVBP)語法元素。4MV塊模式表格(4MVBPTAB) (2個比特)4MVBPTAB語法元素是2個比特的值,它表示4個哈夫曼表格的哪一個用來解碼 4MV半幀宏塊中4MV塊模式(4MVBP)語法元素。在另一組合實現(xiàn)中,圖片類型信息在隔行掃描B-半幀的半幀級別的開始處,而不 是在包括隔行掃描B-半幀的隔行掃描視頻幀的幀級別上用信號表示,并可略去參考距離。2.選定半幀層元素圖55是示出組合實現(xiàn)中隔行掃描B-半幀的半幀級別比特流語法的示圖。特定比 特流元素如下所述。運動向量模式(MVMODE)(可變大小或1比特)MVMODE語法元素用信號表示4種運動向量編碼模式之一,或一種亮度補償模式 (還有某些圖片類型的較少可能)。若干后續(xù)元素提供附加運動向量模式和/或亮度補償 fn息οB-半幀正向模式MB比特語法元素(F0RWARDMB)(可變大小)FORffARDMB語法元素將位平面編碼用來表示用正向模式編碼的B-半幀中宏塊。 F0RWARDMB語法元素還用信號表示,正向模式用原始模式來作信號表示,在該情形中正向/ 非正向模式?jīng)Q定在宏塊級別上作信號表示。圖56是示出組合實現(xiàn)中隔行掃描B-半幀的半幀級別比特流語法的示圖。在該組 合實現(xiàn)中,隔行掃描BI-半幀的半幀級別比特流語法使用與隔行掃描I-半幀一樣的語法元ο3.選定宏塊層元素圖57是示出組合實現(xiàn)中隔行掃描B-半幀的宏塊的宏塊級別比特流語法的示圖。 圖60是示出組合實現(xiàn)中隔行掃描B-幀的宏塊的宏塊級別比特流語法的示圖。特定比特流 元素如下所述。宏塊的數(shù)據(jù)包括宏塊頭,隨后是塊層數(shù)據(jù)。宏塊模式(MBMODE)(可變大小)MBMODE語法元素指示宏塊類型(例如隔行掃描B-半幀的1MV、4MV或幀內(nèi)),以及 CBP標(biāo)記和運動向量數(shù)據(jù)的出現(xiàn)。正向B半幀編碼模式(F0RWARDBIT) (1比特)FORffARDBIT是如果半幀級別語法元素F0RWARDMB表示使用了原始模式時在隔行 掃描B-半幀宏塊中提供的1-比特語法元素。如果F0RWARDBIT = 1,則宏塊使用正向模式編碼。B宏塊運動預(yù)測類型(BMVTYPE)(可變大小)BMVTYPE是隔行掃描B-幀宏塊和隔行掃描B-半幀宏塊中提供的可變大小語法元 素,它表示該宏塊使用正向、反向還是插值預(yù)測。如表格7所示,對于隔行掃描B-幀的宏塊, BFRACTION以及BMVTYPE的值確定使用哪一種類型。表格7. BMVTYPE VLC
BMVTYPE運動預(yù)測類型BFRACTION< 1/2 | BFRACTION>l/20反向正向10正向反向11插值插值在隔行掃描B-半幀中,如果宏塊模式不是正向(由F0RWARDMB或F0RWARDBIT語 法元素所示)且不使用4MV,則發(fā)送BMVTYPE。在該情形中,BMVTYPE用于用信號表示該B宏 塊是反向、直接、還是插值的。這是簡單的VLC,其中反向=0,直接=10,插值=11。在宏 塊模式不是正向且使用4MV的情形中,BMVTYPE是反向的,因為只有正向和反向模式被允許 用于4MV。插值MV 提供(INTERPMVP) (1 比特)INTERPMVP是如果半幀級別語法元素BMVTYPE表示該宏塊類型為插值時在B-半幀 中提供的1-比特語法元素。如果INTERPMVP = 1,則插值MV出現(xiàn),否則它不出現(xiàn)。B宏塊運動向量1 (BMVl)(可變大小)BMVl是差分編碼宏塊的第一運動向量的可變大小的語法元素。B宏塊運動向量2 (BMV2)(可變大小)BMV2是如果使用插值模式時隔行掃描B-幀宏塊和隔行掃描B-半幀宏塊中提供的 可變大小的語法元素。該語法元素差分地編碼宏塊的第二運動向量。4MV 塊模式(4MVBP) (4 個比特)該4MVBP語法元素指示4個亮度塊的哪一個包含非零運動向量差值,它的使用在 下面詳細(xì)描述。 塊級別運動向量數(shù)據(jù)(BLKMVDATA)(可變大小)
BLKMVDATA是包含該塊的運動信息并在4MV宏塊中提供的可變大小的語法元素。半幀變換標(biāo)記(FIELDTX) (1比特)FIELDTX是在隔行掃描B-幀的幀內(nèi)編碼宏塊中提供的1比特語法。該語法元素指 示宏塊是幀編碼還是半幀編碼(基本上是宏塊的內(nèi)部組織)。FIELDTX = 1指示該宏塊是 半幀編碼的。否則,宏塊是幀編碼的。在幀間編碼宏塊中,該語法元素可從MBMODE推斷。直接B幀編碼模式(DIRECTBBIT) (1比特)DIRECTBBIT是如果幀級別語法元素DIRECTMB表示使用原始模式時在隔行掃描 B-幀宏塊中提供的1-比特語法元素。如果DIRECTBBIT = 1,則宏塊使用直接模式編碼。B 幀 MV 切換(MVSff) (1 比特)MVSff是如果MB為半幀模式以及如果BMVTYPE為正向或反向時在隔行掃描B-幀宏 塊中提供的1-比特語法元素。如果MVSW = 1,則MV類型和預(yù)測類型在從上半幀去到下半 幀時從正向變成反向(或者從反向變成正向)。兩運動向量塊模式(2MVBP)(可變大小)2MVBP是在隔行掃描B-幀宏塊中提供的可變大小語法元素。如果MBMODE語法元 素指示該宏塊包含一個運動向量,并且如果該宏塊是插值宏塊,則提供該語法元素。在該情 形中,2MVBP指示提供兩個運動向量(正向和反向運動向量)的哪一個。 運動向量數(shù)據(jù)(MVDATA)(可變大小)MVDATA是編碼宏塊的運動向量差值的可變大小語法元素,它的解碼在下面詳細(xì)描 述。圖58是示出組合實現(xiàn)中隔行掃描BI-半幀的宏塊級別比特流語法的示圖。在組 合實現(xiàn)中,隔行掃描BI-半幀的宏塊級別比特流語法使用與隔行掃描I-半幀的相同語法元
οB.解碼隔行掃描的B-半幀以下各節(jié)描述用于解碼組合實現(xiàn)中隔行掃描B-半幀的過程。1.幀/半幀層解碼隔行掃描B-半幀可以是兩種類型之一 IMV或混合MV。在IMV隔行掃描B-半幀中,取決于宏塊的預(yù)測類型(BMVTYPE),用0、1或2個運動 向量來表示各預(yù)測塊的位移。當(dāng)BMVTYPE等于DIRECT(直接)時,推斷出正向和反向運動 向量,并且不顯式地用信號表示其它的運動向量。當(dāng)BMVTYPE是INTERPOLATED (插值)時, 解碼兩個運動向量正向和反向。在正向和反向情形中,只解碼一個運動向量。IMV模式通 過MVMODE圖片層語法元素來用信號表示。在混合MV隔行掃描B-半幀中,每個宏塊可被編碼為IMV或4MV宏塊。在4MV宏 塊中,4個亮度塊的每一個都具有與之相關(guān)聯(lián)的運動向量。此外,4MV宏塊只可關(guān)聯(lián)于隔行 掃描B-半幀中的正向或反向預(yù)測類型(BMVTYPE)。每個宏塊的IMV或4MV模式通過每個宏 塊上的MBMODE語法元素來指示?;旌螹V模式通過MVMODE圖片層語法元素來用信號表示。2.宏塊層解碼隔行掃描B-半幀中的宏塊可以是三種可能類型之一 1MV、4MV和幀內(nèi)。此外,宏塊 可以是四種預(yù)測類型(BMVTYPE)之一正向、反向、直接或插值。宏塊類型通過宏塊層中的 MBMODE語法元素用信號表示。預(yù)測類型通過幀級別位平面F0RWARDMB和宏塊級別BMVTYPE語法元素的組合用信號表示,其中幀級別位平面F0RWARDMB用信號表示每個宏塊的正向/ 非正向,而宏塊級別BMVTYPE語法元素則在預(yù)測類型為非正向的情形中用信號表示。以下各節(jié)描述IMV和4MV類型、以及如何用信號表示它們。隔行掃描B-半幀中的IMV宏塊IMV宏塊可出現(xiàn)在IMV和混合MV隔行掃描B-半幀中。在IMV宏塊中,單個運動向 量表示宏塊中全部6個塊的當(dāng)前和參考圖片之間的位移。對于IMV宏塊,宏塊層中的MBMODE 語法元素表示三點1)該宏塊類型為IMV2)是否出現(xiàn)CBPCY語法元素3)是否出現(xiàn)BMVl語法元素如果MBMODE語法元素表示BMVl語法元素出現(xiàn),則BMVl語法元素出現(xiàn)在相應(yīng)位置 的宏塊層中。BMVl語法元素編碼運動向量差值。運動向量差值與運動向量預(yù)測值相組合, 以重構(gòu)運動向量。如果MBMODE語法元素表示BMVl語法元素未出現(xiàn),則運動向量差值被取 為0且因此運動向量等于運動向量預(yù)測值。如果MBMODE語法元素表示CBCPY語法元素出現(xiàn),則CBCPY語法元素出現(xiàn)在相應(yīng)位 置的宏塊層中。CBCPY語法元素表示6個塊的哪一個在塊層上編碼。如果MBMODE語法元素 表示CBCPY語法元素未出現(xiàn),則CBCPY被取為等于0且對宏塊中6個塊的任一個都不出現(xiàn) 塊數(shù)據(jù)。此外,如果宏塊類型為IMV且宏塊的預(yù)測類型是插值,則編碼器使用INTERPMVP語 法元素來用信號表示是否出現(xiàn)第二個運動向量差值BMV2。如果出現(xiàn),則解碼器在BMVl之后 立即解碼BMV2。否則,BMV2的運動向量差值被取為0,而第二個運動向量等于運動向量預(yù) 測值。當(dāng)預(yù)測類型是插值時,BMVl對應(yīng)于正向運動向量而BMV2對應(yīng)于反向運動向量。隔行掃描B-半幀中的4MV宏塊4MV宏塊僅可出現(xiàn)在混合MVB-半幀圖片中,且限于正向和反向預(yù)測類型。在4MV 宏塊中,4個亮度塊的每一個都具有關(guān)聯(lián)運動向量。色度塊的位移從4個亮度運動向量中導(dǎo) 出。在混合MV隔行掃描B-半幀中,4MV宏塊僅可關(guān)聯(lián)于正向和反向預(yù)測類型。對于4MV宏塊,宏塊層中的MBMODE語法元素表示三點1)該宏塊類型為4MV2)是否出現(xiàn)CBPCY語法元素3)是否出現(xiàn)4MVBP語法元素4MVBP語法元素表示4個亮度塊的哪一個包含非零運動向量差值。該4MVBP語法元 素解碼到0到15的值。對于4MVBP中4個比特位置的每一個,值0表示未出現(xiàn)該塊的運動 向量差值(BLKMVDATA)且運動向量差值取為0。值1表示該塊的運動向量差值(BLKMVDATA) 出現(xiàn)在相應(yīng)位置中。例如,如果4MVBP解碼為值100 ( 二進(jìn)制),則比特流包含塊0和1的 BLKMVDATA并且未出現(xiàn)塊2和3的BLKMVDATA。如果MBMODE語法元素表示4MVBP語法元素未出現(xiàn),則假設(shè)出現(xiàn)全部4個亮度塊的 運動向量差值數(shù)據(jù)(BLKMVDATA)。取決于MVMODE語法元素是表示混合MV還是全_1MV,MBMODE如下用信號表示信
46息。以下表格8示出MBMODE元素如何用信號表示有關(guān)全-IMV圖片中宏塊的信息。表格8.全-IMV圖片中的宏塊模式 以下表格9示出MBMODE元素如何用信號表示有關(guān)混合MV圖片中宏塊的信息。表格9.混合IMV圖片中的宏塊模式 8個編碼表格之一用于用信號表示MBM0DE。所用特定表格通過MBM0DETAB語法元
素用信號表示。以下各節(jié)描述預(yù)測類型解碼和直接模式運動向量的解碼。隔行掃描B-半幀中的預(yù)測類型解碼(BMVTYPE)預(yù)測類型根據(jù)以下規(guī)則進(jìn)行解碼。如果圖片級別位平面F0RWARDMB表示宏塊是正向類型,則該宏塊的預(yù)測類型被設(shè)置為正向。如果F0RWARDMB元素被編碼為原始,則編碼器 /解碼器在宏塊級別上使用一附加比特F0RWARDBIT,來判定預(yù)測類型是否為正向。如果預(yù)測類型為非正向,且如MBMODE語法元素用信號表示的該宏塊使用4MV (僅 在混合MV B圖片中可能),則解碼器可直接推斷預(yù)測類型為反向,因為只有正向和反向類 型可與4MV模式相關(guān)聯(lián)。否則,解碼器顯式地解碼BMVTYPE語法元素。解碼隔行掃描B-半幀中的直接模式運動向量為了解碼隔行掃描B-半幀中的直接模式運動向量,解碼器首先緩存來自先前解 碼(即時間上在將來)的錨(I或P)圖片的運動向量。這樣,解碼器將所緩存的對應(yīng)于上 半幀的運動向量用作預(yù)測值,以便于計算上部B-半幀的直接模式運動向量,并使用對應(yīng)于 下半幀的運動向量計算下部B-半幀的運動向量。例如,半幀z(z =上/下)中的宏塊(X, y)將參考從先前解碼I或P半幀ζ (即與當(dāng)前半幀相同極性的錨半幀中的共處宏塊)的宏 塊(x,y)中緩存的運動向量。如果所緩存的來自錨圖片的運動向量為幀內(nèi)運動向量(諸如當(dāng)先前解碼半幀ζ是 I-半幀時),或者如果錨圖片是P-半幀但宏塊(X,y)是幀內(nèi)編碼的,則解碼器將經(jīng)緩存的 運動向量視為(0,0)。如果共處宏塊為1MV,則解碼器使用該運動向量。如果共處宏塊為 4MV,則解碼器將圖53中偽碼5300所述的邏輯用來計算運動向量預(yù)測值。在偽碼5300 中,SelectDirectModeMVFromColocatedMB 導(dǎo)出在直接模式計算中 使用的運動向量預(yù)測值。解碼器可緩存來自先前解碼的錨圖片的所有運動向量,并在解碼 B-半幀期間應(yīng)用以上直接模式,或者解碼器在解碼錨半幀的同時可應(yīng)用以上直接模式規(guī) 則,并緩存用于B-半幀的結(jié)果運動向量。使用以上獲得的運動向量,解碼器應(yīng)用縮放邏輯(圖19中的SCale_DireCt_MV)。 Scale_Direct_MV獲得正向和反向指示運動向量。Scale_Direct_MV可導(dǎo)致指向上下半幀 的正向和反向運動向量。這是有效的,因為直接運動向量由編碼器評估并僅在它們給出好 預(yù)測時選擇,還因為隔行掃描B-半幀在正向和反向方向上都使用兩個參考半幀。在另一實現(xiàn)中,可使用產(chǎn)生以直接模式縮放的運動向量的任何其它過程,包括不 涉及任何緩存的過程,它在存儲器受限設(shè)備中會有用(例如使用隨機(jī)數(shù)發(fā)生器來模擬偏零 拉普拉斯分布)。這種過程仍將起作用,因為好的編碼器將丟棄對直接模式運動向量的較差 推測,而在比特流中保留更為準(zhǔn)確的推測。3.運動向量解碼過程以下各節(jié)描述組合實現(xiàn)中隔行掃描B-半幀的塊和宏塊的運動向量解碼過程。填充正向和反向預(yù)測上下文正向和反向運動向量被分開緩存,并分別用來預(yù)測正向和反向運動向量。例如在 以上X節(jié)描述了單獨緩沖區(qū)在正向和反向上下文中的使用。用于選擇運動向量預(yù)測值的技 術(shù)在III節(jié)背景技術(shù)、III節(jié)詳細(xì)說明、以及說明書的其它部分中描述。在解碼正向運動向量期間用預(yù)測運動向量填充反向緩沖區(qū)(“缺少方向”緩沖區(qū)) 時(或在解碼反向運動向量期間填充正向緩沖區(qū)時),要添加另外兩個細(xì)節(jié)。通常,編碼器 /解碼器可使用運動向量類型信息(例如IMV等)、以及先前解碼的運動向量的極性來形成 預(yù)測。然而,在“空穴填充”情形中,因為編碼器/解碼器實際上并不解碼缺少方向類型的 運動向量,編碼器/解碼器并不具有運動向量類型信息或極性信息(例如相同極性或相反極性)。在該組合實現(xiàn)中,編碼器/解碼器將運動向量類型設(shè)置為1MV,并將主半幀運動向 量選為預(yù)測值。圖47中的偽碼4700描述該組合實現(xiàn)中的極性選擇過程。對于幀內(nèi)編碼宏塊,“幀內(nèi)運動向量”用來填充正向和反向運動預(yù)測平面?!皫瑑?nèi)運 動向量”的任何一致表示可由解碼器實現(xiàn)來選擇。例如,如果運動向量被存儲在2-字節(jié)短 數(shù)組中,則“幀內(nèi)運動向量”可被表示為唯一的大常數(shù),它被填充到運動向量數(shù)組中來表示 該宏塊被編碼為幀內(nèi)宏塊。B-半幀中的正向運動向量預(yù)測正向參考幀距離從BFRACTI0N語法元素和REFDIST語法元素中計算。正向運動向 量預(yù)測如以上χ節(jié)所述地進(jìn)行。B-半幀中的反向運動向量預(yù)測正向參考幀距離從BFRACTI0N語法元素和REFDIST語法元素中計算。正向運動向 量預(yù)測如以上χ節(jié)所述地進(jìn)行。解碼運動向量差值BMVl、BMV2或BLKMVDATA語法元素編碼宏塊或宏塊中各塊的運動信息。IMV宏塊 具有BMVl和BMV2語法元素,且4MV宏塊可具有0到4個之間的BLKMVDATA元素。當(dāng)預(yù)測類型(BMVTYPE)為插值時,BMVl對應(yīng)于正向而BMV2對應(yīng)于反向運動向量殘差。以下各節(jié)描述對于應(yīng)用于B-圖片的雙參考情形如何計算運動向量差值。雙參考半幀圖片中的運動向量差值雙參考半幀圖片在使用半幀圖片對隔行掃描幀的編碼中出現(xiàn)。序列的每個幀都被 分成兩個半幀,且每個半幀使用實際上逐行掃描代碼路徑來編碼。在具有兩個參考半幀的半幀圖片中(諸如具有隔行掃描B-半幀的圖片),宏塊層 中的每個MVDATA或BLKMVDATA語法元素聯(lián)合編碼三種信息1)水平運動向量差值分量,2) 垂直運動向量差值分量,3)使用主還是非主預(yù)測值,即兩個半幀的哪一個被運動向量參考。MVDATA或BLKMVDATA語法元素是可變長度的哈夫曼代碼字,然后是一固定長度代 碼字。哈夫曼代碼字的值確定固定長度代碼字的大小。圖片層中的MVTAB語法元素指定用 來解碼可變大小代碼字的哈夫曼表格。圖61A中的偽碼6100示出如何解碼運動向量差值 和主/非主預(yù)測值信息。值predictor_flag、dmv_x 和 dmv_y 在圖 61A 中的偽碼 6100 中計算。偽碼 6100 中的各個值定義如下dmv_x 運動向量水平差值分量,dmv_y 運動向量垂直差值分量,k_x, k_y 長運動向量的固定長度,k_x和k_y取決于由MVRANGE符號定義的運動向量范圍。
表格 10.由 MVRANGE 指定的 k_x 和 k_y
MVRANGEk_xk_yrange—χrange_y
49 extend_x 水平運動向量差值的擴(kuò)展范圍,extend_y 垂直運動向量差值的擴(kuò)展范圍,extend_x和extend_y從DMVRANGE圖片半幀語法元素中導(dǎo)出。如果DMVRANGE表示 使用水平分量的擴(kuò)展范圍,則extend_x = 1。否則,extend_x = 0。類似地,如果DMVRANGE 表示使用垂直分量的擴(kuò)展范圍,則eXtend_y = 1。否則,extend_y = 0。變量prediCt0r_flag是表示使用主還是非主運動向量預(yù)測值的二進(jìn)制標(biāo)記(0 = 使用主預(yù)測值,1 =使用非主預(yù)測值)。Offsetjable和Sizejable數(shù)組被定義為如圖61A 所示。圖61B中的偽碼6110示出在另一組合實現(xiàn)中如何解碼雙參考半幀的運動向量差 值。偽碼6110用不同方法解碼運動向量差值。例如,偽碼6110略去經(jīng)擴(kuò)展運動向量差值 范圍的處理。運動向量預(yù)測值運動向量通過將前面部分中計算的運動向量差值添加到運動向量預(yù)測值中來計 算。以下各節(jié)描述在該組合實現(xiàn)中如何計算IMV-和混合MV隔行掃描B-半幀中宏塊的運 動向量預(yù)測值。IMV隔行掃描B-半幀中的運動向量預(yù)測值圖5A和5B是示出被視作用于IMV宏塊的候選運動向量預(yù)測值的宏塊的位置的示 圖。候選預(yù)測值從左邊、上方和右上方宏塊中取得,除了宏塊是行中最后一個宏塊的情形。 在該情形中,預(yù)測值B從左上方宏塊而不是從右上方中取得。對于幀為一個宏塊寬的特定 情形,預(yù)測值總是預(yù)測值A(chǔ) (頂部預(yù)測值)。當(dāng)前宏塊在首行中的特定情形(沒有A或B預(yù) 測值、或者根本沒有預(yù)測值)在以上參照圖33A-33F以及在以下參照圖62A-62F解決?;旌螹V隔行掃描B-半幀中的運動向量預(yù)測值圖6A-10示出被視作用于混合MV隔行掃描B-半幀中的IMV或4MV宏塊的運動向 量的候選運動向量的塊或宏塊的位置。隔行掃描B-半幀中的主和非主MV預(yù)測值對于每個幀間編碼的宏塊,導(dǎo)出兩個運動向量預(yù)測值。一個來自主半幀而另一個 來自非主半幀。主半幀被視為包含鄰域中候選運動向量預(yù)測值的大部分實際值的半幀。在 不分上下的情形中,相反半幀的運動向量預(yù)測值被視為是主預(yù)測值(因為它在時間上較為 接近)。幀內(nèi)編碼宏塊在主/非主預(yù)測值的計算中不作考慮。如果全部候選預(yù)測值宏塊都是 幀內(nèi)編碼的,則主和非主運動向量預(yù)測值都被設(shè)置為0且主預(yù)測值被視為來自相反半幀。計算隔行掃描B-半幀中的運動向量預(yù)測值對塊或宏塊的每個運動向量計算兩個運動向量預(yù)測值-每個參考一個。圖62A-62F中的偽碼6200描述在組合實現(xiàn)中如何對雙參考情形計算運動向量預(yù)測值。(圖 33A-33F中的偽碼3300描述在另一實現(xiàn)中如何對雙參考情形計算運動向量預(yù)測值。)在雙 參考圖片中,當(dāng)前半幀可參考兩個最新半幀。一個預(yù)測值用于相同極性的參考半幀,而另一 個用于相反極性的參考半幀。重構(gòu)隔行掃描B-半幀中的運動向量以下各節(jié)描述如何重構(gòu)IMV和4MV宏塊的亮度和色度運動向量。在重構(gòu)運動向量 之后,它隨后可用作鄰域運動向量以預(yù)測相鄰宏塊的運動向量。該運動向量將具有“相同” 或“相反”的關(guān)聯(lián)極性,并可用來導(dǎo)出另一半幀極性的運動向量預(yù)測值,用于運動向量預(yù)測。隔行掃描B-半幀中的亮度運動向量重構(gòu)在所有情形(1MV和4MV宏塊)中,亮度運動向量通過如下將差值添加到預(yù)測值來 重構(gòu)mv_x = (dmv_x+predictor_x)smod range_xmv_y = (dmv_y+predictor_y)smod range_y模運算“smod”是定義如下的有符號模A smod b = ((A+b) % (2*b)) _b這確保重構(gòu)向量是有效的。(A smod b)位于_b和b_l之間。range_x和range_ y取決于MVRANGE。因為隔行掃描B-半幀圖片使用兩個參考圖片,在解碼運動向量差值之后導(dǎo)出的 predictor_flag與從運動向量預(yù)測導(dǎo)出的dominantpredictor值相組合,以確定哪個半幀 被用作參考。圖63中的偽碼6300描述如何確定參考半幀。在IMV宏塊中,對于組成宏塊的亮度分量的4個塊將有單個運動向量。如果MBMODE 語法元素表示沒有MV數(shù)據(jù)在宏塊層中出現(xiàn),則dmv_x = 0且dmv_y = 0 (mv_x = predictor, χ 和 mv_y = predictor_y)。在4MV宏塊中,宏塊中每個幀間編碼亮度塊將具有它自己的運動向量。因此在每 個4MV宏塊中將有0到4個亮度運動向量。如果4MVBP語法元素表示未出現(xiàn)塊的運動向量 信息,貝1Ji亥塊的 dmv_x = 0 且 dmv_y = 0 (mv_x = predictor_x 和 mv_y = predictor_y)。色度運動向量重構(gòu)色度運動向量從亮度運動向量中導(dǎo)出。此外,對于4MV宏塊,對要將色度塊編碼為 幀間塊還是幀內(nèi)塊的決定是基于亮度塊或半幀的狀態(tài)作出的。C.解碼隔行掃描P-幀在描述組合實現(xiàn)中用于解碼隔行掃描B-幀的過程之前,描述用于解碼隔行掃描 P"幀的過程。描述用于解碼隔行掃描B-幀的過程的小節(jié)將參照本節(jié)中討論的各個概念進(jìn) 行。1.隔行掃描P-幀的宏塊層解碼在隔行掃描P-幀中,每個宏塊可用使用一個或四個運動向量的幀模式、或使用兩 個或四個運動向量的半幀模式作運動補償。幀間編碼的宏塊不包含任何幀內(nèi)塊。此外,運 動補償之后的殘差可用幀變換模式或半幀變換模式來編碼。更具體地,如果用半幀變換模 式編碼殘差,則殘差的亮度分量根據(jù)各個半幀來重新排列,而在幀變換模式中當(dāng)色度分量 保持不變時殘差保持不變。宏塊也可被編碼為幀內(nèi)宏塊。
運動補償可被限制為不包括四個運動向量(半幀/幀),并且它通過4MVSWITCH用 信號表示。每個宏塊的運動補償和殘差編碼的類型通過MBMODE和SKIPMB聯(lián)合表示。MBMODE 根據(jù)4MVSWITCH采用不同的表格集。隔行掃描P-幀中的各個宏塊被分成5種類型1MV、2半幀MV、4幀MV、4半幀MV和 幀內(nèi)。前四類宏塊是幀間編碼的,而最后一類表示該宏塊是幀內(nèi)編碼的。宏塊類型由宏塊 層中的MBMODE語法元素以及跳過比特用信號表示。MBMODE對不同類型的宏塊共同編碼宏 塊類型以及有關(guān)該宏塊的各條信息。用信號表示跳過的宏塊SKIPMB字段表示宏塊的跳過條件。如果SKIPMB字段為1,則表示要跳過當(dāng)前宏 塊,并且在SKIPMB字段之后沒有發(fā)送其它信息。該跳過條件暗示當(dāng)前宏塊是具有0差值運 動向量的1MV(即,該宏塊是使用其IMV運動預(yù)測值做運動補償?shù)?,并且沒有經(jīng)編碼的塊 (CBP = 0)。另一方面,如果SKIPMB字段不是1,則MBMODE半幀被解碼為表示宏塊的類型和有 關(guān)當(dāng)前宏塊的其它信息,諸如以下小節(jié)中描述的信息。用信號表示宏塊模式有15種通過MBMODE表示的可能事件;MBMODE共同指定宏塊的類型(1MV、4幀MV、 2半幀MV、4半幀MV、或幀內(nèi))、幀間編碼宏塊的變換類型(即半幀或幀或未編碼的塊)、以 及是否有IMV宏塊的運動向量差值。設(shè)<MVP>表示用信號表示是否有非零IMV運動向量差值的二進(jìn)制事件。設(shè)〈Field/ Frame transform〉(〈半幀/幀變換 >)表示用信號表示宏塊的殘差是幀變換編碼、半幀變換 編碼、還是零編碼塊(即CBP = 0)的三元事件。MBMODE共同用信號表示以下事件集MBMODE = {<1MV,MVP,半幀/幀變換>,<2半幀MV,半幀/幀變換>,<4中貞MV,半 幀/幀變換>,<4半幀MV,半幀/幀變換 >,〈幀內(nèi)>} ;<1MV,MVP = 0,CBP = 0>的事件除 外,它通過跳過條件用信號表示。對于幀間編碼宏塊,當(dāng)MBMODE中的半幀/幀變換事件表示無編碼塊時,不解碼 CBPCY語法元素。另一方面,如果MBMODE中的半幀/幀變換事件表示半幀或幀變換時,則解 碼CBPCY。所解碼事件〈半幀/幀變換〉被用來設(shè)置標(biāo)記FIELDTX。如果該事件表示宏塊是 半幀變換編碼的,則FIELDTX被設(shè)置為1。如果該事件表示宏塊是幀變換編碼的,則FIELDTX 被設(shè)置為0。如果該事件表示0編碼塊,則FIELDTX被設(shè)置為與運動向量相同的類型,即如 果它是FIELDMV則FIELDTX被設(shè)置為1,且如果它是FRAMEMV則被設(shè)置為0。對于非IMV的幀間編碼宏塊,發(fā)送表示零差值運動向量事件的另一字段。在2半 幀MV宏塊的情形中,發(fā)送表示兩個運動向量的哪一個包含非零運動向量差值的2MVBP字 段。類似地,發(fā)送表示四個運動向量的哪一個包含非零運動向量差值的4MVBP字段。對于幀內(nèi)編碼宏塊,半幀/幀變換和零編碼塊在各個字段中編碼。2.對隔行掃描P-幀的運動向量解碼隔行掃描P-幀的運動向量預(yù)測值計算當(dāng)前宏塊的運動向量預(yù)測值的過程包括兩個步驟。首先,當(dāng)前宏塊的三個候 選運動向量從其相鄰宏塊中收集。其次,當(dāng)前宏塊的運動向量預(yù)測值從候選運動向量集中 計算。圖40A-40B示出從中收集候選運動向量的相鄰宏塊。候選運動向量的收集順序是重要的。在該組合實現(xiàn)中,收集順序總是從A開始、繼續(xù)到B、并在C結(jié)束。注意,如果相應(yīng)塊 在幀邊界之外或者相應(yīng)塊是不同片的一部分,則候選預(yù)測值被視為不存在。因而,不跨片邊 界執(zhí)行運動向量預(yù)測。以下各節(jié)描述是否收集不同類型宏塊的候選運動向量,以及如何計算運動向量預(yù) 測值。IMV候選運動向量在該組合實現(xiàn)中,圖64中的偽碼6400被用來收集該運動向量的最多三個候選運
動向量。4幀MV候選運動向量對于4幀MV宏塊,對于當(dāng)前宏塊中四個幀塊運動向量的每一個,收集來自相鄰塊 的候選運動向量。在該組合實現(xiàn)中,圖65中的偽碼6500用來收集左上幀塊運動向量的最 多三個候選運動向量。圖66中的偽碼6600用來收集右上幀塊運動向量的最多三個候選運 動向量。圖67中的偽碼6700用來收集左下幀塊運動向量的最多三個候選運動向量。圖68 中的偽碼6800用來收集右下幀塊運動向量的最多三個運動向量。2半幀MV候選運動向量的導(dǎo)出對于2半幀MV宏塊,對于當(dāng)前宏塊中兩個幀運動向量的每一個,收集來自相鄰塊 的候選運動向量。圖69中的偽碼6900用來收集上半幀運動向量的最多三個候選運動向量。 圖70中的偽碼7000用來收集下半幀運動向量的最多三個候選運動向量。4半幀MV候選運動向量的導(dǎo)出對于4半幀MV宏塊,對于當(dāng)前宏塊中四個半幀塊的每一個,收集來自相鄰塊的候 選運動向量。圖71中的偽碼7100用來收集左上半幀塊運動向量的最多三個候選運動向量。 圖72中的偽碼7200用來收集右上半幀塊運動向量的最多三個候選運動向量。圖73中的 偽碼7300用來收集左下半幀塊運動向量的最多三個候選運動向量。圖74中的偽碼7400 用來收集右下半幀塊運動向量的最多三個候選運動向量。平均半幀運動向量給定兩個半幀運動向量(MVX1, MVY1)和(MVX2,MVY2),用來形成候選運動向量 (MVXa, MVYa)的平均運算是MVXa = (MVX^MVX2+!) >> 1 ;MVXa = (MVY^MVY2+!) >> 1 ;從候選運動向量中計算幀的MV預(yù)測值本節(jié)描述給定一個候選運動向量集如何計算幀運動向量的運動向量預(yù)測值。在 該組合實現(xiàn)中,運算對計算4幀MV宏塊中4幀塊運動向量的每一個的預(yù)測值相同。圖75中的偽碼7500描述如何計算幀運動向量的運動向量預(yù)測值(PMVx,PMVy)。在 偽碼7500中,TotalValidMV表示候選運動向量集中運動向量的總數(shù)(TotalValidMV = 0, 1,2或3),且ValidMV數(shù)組表示候選運動向量集中的運動向量。從候選運動向量中計算半幀的MV預(yù)測值本節(jié)描述給定一個候選運動向量集如何計算半幀運動向量的運動向量預(yù)測值。 運算對計算2半幀MV宏塊中2個半幀運動向量的每一個、或4半幀MV宏塊中4個半幀塊 運動向量的每一個的預(yù)測值相同。
首先,候選運動向量被分成兩個集,其中一個集只包含指向與當(dāng)前半幀相同的半 幀的候選運動向量,而另一個集包含指向相反半幀的候選運動向量。假設(shè)候選運動向量在 1/4像素單元中表示,編碼器或解碼器可通過對其y_分量的以下檢查,來檢查候選運動向 量是否指向相同半幀if (ValidMVyM) {ValidMV指向相反半幀。}else{ValidMV指向相同半幀。}圖76中的偽碼7600描述如何計算半幀運動向量的運動向量預(yù)測值(PMVx,PMVy)。 在偽碼7600中,SameFieldMV和OppFieldMV表示兩個候選運動向量集,而NumSameFieldMV 和NumOppFieldMV表示屬于每個集的候選運動向量的數(shù)量。每個集中的候選運動向量的順 序從候選A (如果它存在)開始,然后是候選B (如果它存在),再后是候選C (如果它存在)。 例如,如果SameFieldMV候選運動向量集只包含候選B和候選C,則SameFieldMV
是候選 B0解碼運動向量差值MVDATA語法元素包含宏塊的運動向量差值信息。取決于運動補償?shù)念愋秃兔總€宏 塊上用信號表示的運動向量塊模式,每個宏塊最多可有四個MVDATA語法元素。更具體地,·對于IMV宏塊,取決于MBMODE中的MVP字段可出現(xiàn)0或1個MVDATA語法元素?!τ?半幀MV宏塊,取決于2MVBP可出現(xiàn)0、1、或2個MVDATA語法元素。 對于4幀/半幀MV宏塊,取決于4MVBP可出現(xiàn)0、1、2、3或4個MVDATA語法元
ο在該組合實現(xiàn)中,運動向量差值用與隔行掃描P-半幀的單參考半幀運動向量差 值相同的方法來解碼。(圖77A中的偽碼7700示出如何解碼單參考半幀的運動向量差值。 圖77B中的偽碼7710示出在另一組合實現(xiàn)中如何解碼單參考半幀的運動向量差值。偽碼 7710用一種不同方法解碼運動向量差值。例如,偽碼7710略去對經(jīng)擴(kuò)展的運動向量差值范 圍的處理。)重構(gòu)運動向量給出運動向量差值dmv,亮度運動向量通過如以上XV. B. 3節(jié)中所述的將差值添加 到預(yù)測值中來重構(gòu)。給定亮度幀或半幀運動向量,導(dǎo)出相應(yīng)的色度幀或半幀運動向量來補 償Cb/Cr塊的一部分或全部。圖78中的偽碼7800描述色度運動向量CMV如何從隔行掃描 P-幀中的亮度運動向量LMV中導(dǎo)出。D.解碼隔行掃描B-幀本節(jié)參照前一節(jié)中討論的概念描述組合實現(xiàn)中用于解碼隔行掃描B-幀的過程。1.隔行掃描B-幀的宏塊級別解碼在宏塊級別上,隔行掃描B-幀語法類似于上述隔行掃描P-幀。隔行掃描B-幀中 的宏塊被分成三種類型1MV、2半幀MV、和幀內(nèi)。在本組合實現(xiàn)中4幀MV和4半幀MV模式 不被允許用于隔行掃描B-幀。這三種模式像在隔行掃描P-幀中一樣,與MBMODE語法元素 共同編碼。每個宏塊也被預(yù)測為正向、反向、直接或插值(使用DIRECTMB和BMVTYPE語法元素)如果IMV宏塊是正向或反向,則它使用單個運動向量。如果它是IMV但是直接或插 值的,則它使用兩個運動向量。如果它是2半幀MV類型并是正向或反向預(yù)測的,則它使用 兩個運動向量。如果它是2半幀MV類型并是直接或插值的,則它使用四個運動向量。以下各節(jié)描述隔行掃描B-幀中不同幀間編碼的宏塊類型的特征。隔行掃描B-幀中的IMV宏塊在隔行掃描B-幀中的IMV宏塊中,亮度塊的位移在預(yù)測類型是正向或反向時由單 個運動向量表示,而在類型是直接或插值時由兩個運動向量表示。在每一情形中導(dǎo)出相應(yīng) 的色度向量。在插值和直接預(yù)測的情形中,平均來自正向和反向參考圖片的運動補償像素 以形成最終預(yù)測。 隔行掃描B-幀中的2半幀MV宏塊在隔行掃描B-幀中的2半幀MV宏塊中,亮度塊的每個半幀的位移由一不同運動 向量描述,如圖37所示。此外,在從上半幀去到下半幀時該預(yù)測類型被允許從正向切換到 反向,或反之,從而使上半幀從一參考圖片中得到運動補償,而下半幀從另一參考圖片中得 到運動補償,如在以上VII節(jié)中所述的。隔行掃描B-幀中的2MVBP、4MVBP的解釋和運動向量順序在IMV宏塊中,編碼器用插值模式使用2MVBP語法元素,以表示出現(xiàn)兩個運動向量 的哪一個。比特1對應(yīng)于正向運動向量,而比特0對應(yīng)于反向運動向量。在2半幀MV宏塊中,編碼器用正向和反向模式使用2MVBP語法元素,來表示出現(xiàn) 兩個半幀的運動向量的哪一個。比特1對應(yīng)于上半幀運動向量而比特0對應(yīng)于下半幀運動 向量。當(dāng)MVSW語法元素用來從用于上半幀的正向預(yù)測切換到用于下半幀的反向預(yù)測或反 之時,編碼器使用相同的上/下信號表示。編碼器用插值模式使用4MVBP語法元素,來表示 出現(xiàn)四個運動向量的哪一個。比特3對應(yīng)于上半幀正向運動向量,比特2對應(yīng)于上半幀反 向運動向量,比特1對應(yīng)于下半幀正向運動向量,而比特0對應(yīng)于下半幀反向運動向量。設(shè)置為‘1’的2MVBP和4MVBP的比特表示出現(xiàn)相應(yīng)運動向量差值,同時設(shè)置為‘0’ 的比特表示相應(yīng)運動向量等于所預(yù)測的運動向量,即未出現(xiàn)相應(yīng)的運動向量差值。經(jīng)實際 解碼的運動向量用與2MVBP或4MVBP中各比特相同的順序發(fā)送。例如,在使用差值模式的2 半幀MV宏塊中,要由解碼器接收的第一運動向量是上半幀正向運動向量,而要接收的最后 (即第四)運動向量是下半幀反向運動向量。用信號表示跳過的宏塊被跳過的宏塊以與P幀相同的方式用信號表示。然而,隔行掃描B-幀中的被跳過 宏塊限于IMV幀類型,即不允許半幀類型。運動向量用零差值運動向量編碼(即宏塊是使 用其IMV運動補償值進(jìn)行運動補償?shù)?且沒有已編碼塊(CBP = 0)。如果宏塊被跳過,則 編碼器僅發(fā)送該宏塊的BMVTYPE信息,從而運動向量可被準(zhǔn)確預(yù)測為正向、反向、直接或插值。用信號表示宏塊模式用信號表示宏塊模式用與隔行掃描P-幀相同的方法執(zhí)行,如以上XV. C.節(jié)中所 述。 預(yù)測類型解碼(BMVTYPE和MVSW) 隔行掃描B-幀的預(yù)測類型根據(jù)以下規(guī)則解碼。如果圖片層位平面DIRECTMB表示宏塊是直接類型,則該宏塊的預(yù)測類型被設(shè)置成直接。如果直接/非直接決定用原始模式 編碼,則編碼器使用宏塊級別上的附加比特DIRECTBBIT,來表示預(yù)測類型是否是直接。如果預(yù)測類型是非直接的,則解碼器解碼BMVTYPE語法元素。如果宏塊模式是 “ 2MV半幀編碼”,且如果BMVTYPE是正向或反向的,則解碼器還解碼MVSW比特來判定從該宏 塊的上半幀去到下半幀時預(yù)測類型是否將改變(即,從正向變?yōu)榉聪?,或反?。解碼直接模式運動向量為了解碼直接模式運動向量,解碼器首先緩存來自先前解碼錨幀的運動向量。具 體地,對于先前解碼的將來P-幀,解碼器緩存來自將來P-幀的經(jīng)解碼亮度運動向量的最大 可能數(shù)量的一半(即(2*Number0fMB)個運動向量)。選擇要緩存的來自錨幀的這些運動向 量的方法在以上XIII節(jié)中描述。使用以上所獲得的運動向量,解碼器應(yīng)用圖19中偽碼1900示出的SCale_DireCt_ MV中的縮放邏輯,來獲得正向和反向指示運動向量,而無需回拉運動向量。在本組合實現(xiàn)中,不計算其中不使用諸如正向和反向預(yù)測宏塊的直接模式預(yù)測的 宏塊的直接模式運動向量。相反,非直接宏塊的運動向量基于正向或反向運動向量緩沖區(qū) 來預(yù)測。2.對隔行掃描B-幀的運動向量解碼隔行掃描B-幀的運動向量預(yù)測值與隔行掃描P-幀一樣,計算隔行掃描B-幀的當(dāng)前宏塊的運動向量預(yù)測值的過程 包括,從當(dāng)前宏塊的相鄰宏塊中收集其候選運動向量,并且從候選運動向量集中計算當(dāng)前 宏塊的運動向量預(yù)測值。圖40A-40B示出從中收集候選運動向量的相鄰宏塊。在該組合實 現(xiàn)中,隔行掃描B-幀的運動向量預(yù)測值根據(jù)以上XV. C.節(jié)所述的用于隔行掃描P-幀的規(guī) 則來從候選集中選擇。不同的預(yù)測上下文被用于正向和反向模式運動向量。解碼器使用正向預(yù)測上下文 來預(yù)測正向運動向量,并使用反向預(yù)測上下文來預(yù)測反向運動向量。填充隔行掃描B-幀中的正向和反向預(yù)測上下文解碼器分開緩存正向和反向運動向量,并分別用它們來預(yù)測正向和反向運動向 量。對于插值宏塊,解碼器使用正向預(yù)測緩沖區(qū)來預(yù)測正向運動向量(第一個經(jīng)解碼的 MVDATA元素),并使用反向緩沖區(qū)來預(yù)測反向運動向量(第二個經(jīng)解碼的MVDATA元素)。 當(dāng)宏塊是直接或插值,則解碼器將正向MV分量緩存在正向緩沖區(qū)中,并將反向MV分量緩存 在反向緩沖區(qū)中。每種情形中(例如IMV宏塊、2半幀MV宏塊等)用于從一個候選集中選 擇運動向量預(yù)測值的實際預(yù)測邏輯如以上XV. C.節(jié)中所述。用于填充正向和反向運動向量緩沖區(qū)、并從這些緩沖區(qū)的運動向量中預(yù)測運動向 量的方案如以上X. C.節(jié)中所述。解碼隔行掃描B-幀中的運動向量差值隔行掃描B-幀中的運動向量差值根據(jù)圖77A和77B中的偽碼7700和7710解碼, 如以上XV. C. 2節(jié)中所述。重構(gòu)隔行掃描B-幀中的運動向量隔行掃描B-幀中的運動向量根據(jù)圖78中的偽碼7800并如以上XV. B. 3和XV. C. 2 節(jié)中所述地解碼。
E.位平面編碼宏塊特定的二進(jìn)制信息可用每個宏塊一個二進(jìn)制符號來編碼,這些二進(jìn)制信息諸 如(1)隔行掃描B-半幀的宏塊的正向/非正向決定(即F0RWARDMB標(biāo)記),以及⑵隔行 掃描B-半幀的宏塊的直接/非直接決定(即DIRECTMB標(biāo)記)。例如,隔行掃描B-半幀的 宏塊是否用正向模式(與諸如反向、直接或插值的另一模式相對)作運動補償可用1個比 特作信號表示。在這些情形中,半幀或幀中全部宏塊的狀態(tài)可被編碼為位平面并在半幀或 幀頭中傳送。該規(guī)則的一個例外是如果位平面編碼模式被設(shè)置成原始模式時,在該情形中 每個宏塊的狀態(tài)被編碼為每個符號1個比特,并在宏塊級別上與其它宏塊級別語法元素一 起傳送。半幀/幀級別位平面編碼被用來編碼兩維二進(jìn)制數(shù)組。每個數(shù)組的大小是rowMB χ colMB,其中rowMB和colMB分別是討論中半幀或幀中宏塊行和列的數(shù)量。在比特流內(nèi), 每個數(shù)組被編碼為一個連續(xù)比特集。七種模式之一被用來編碼每個數(shù)組。該七種模式是1.原始模式-編碼為每個符號1個比特并作為MB級別語法的一部分傳送的信息;2.正常-2 (Norm-2)模式-共同編碼的兩個符號;3.差值-2(Diff_2)模式-位平面的差值編碼,隨后是共同編碼兩個殘差符號;4.正常-6 (Norm-6)模式-共同編碼的六個符號;5.差值-6(Diff_6)模式-位平面的差值編碼,隨后是共同編碼六個殘差符號;6. rowskip (跳行)模式-用信號表示跳過沒有設(shè)置比特的行的一個比特;以及7. columnskip (跳列)模式-用信號表示跳過沒有設(shè)置比特的列的一個比特。半幀或幀級別上位平面的語法元素順序如下INVERT、IMODE和DATABITS。逆轉(zhuǎn)標(biāo)記(INVERT)INVERT語法元素是1-比特值,如果設(shè)置則表示該位平面具有比0比特更多的設(shè) 置比特。取決于INVERT和模式,解碼器將逆轉(zhuǎn)所解釋的位平面以重新創(chuàng)建原始位平面。注 意,當(dāng)使用原始模式時,將忽略該比特的值。以下提供對解碼位平面時如何使用INVERT值 的描述。編碼模式(IMODE)IMODE語法元素是指示用來編碼位平面的編碼模式的可變長度值。表格11示出用 來編碼IMODE語法元素的代碼表。以下提供對解碼位平面時如何使用IMODE值的描述。表格11. IMODE VLC 代碼表
IMODE VLC編碼模式10Norm-211Norm-6010跳行011跳列
57 位平面編碼比特(DATABITS)DATABITS語法元素是編碼位平面的符號流的可變大小語法元素。用來編碼位平面 的方法根據(jù)IMODE的值來確定。七種編碼模式在以下各節(jié)中描述。原始模式在該模式中,位平面被編碼為每個以宏塊的光柵掃描順序掃描的符號1個比特, 并作為宏塊層的一部分發(fā)送?;蛘?,該信息在半幀或幀級別上以原始模式編碼,且DATABITS 在長度上為rowMB χ co 1MB比特。Norm-2 模式如果rowMB χ colMB為奇數(shù),則第一個符號被編碼為原始。后續(xù)符號成對地用自 然掃描順序編碼。表格12中的二進(jìn)制VLC表格被用來編碼符號對。表格1. Norm-2/Diff-2 代碼表 Diff-2 模式Norm-2模式用來如上所述地產(chǎn)生位平面,然后Diff1運算如下所述地應(yīng)用于位平面。Norm-6 模式在Norm-6和Diff_6模式中,位平面分6個像素的組進(jìn)行編碼。這些像素被分成 2X3或3X2的塊。位平面使用一系列規(guī)則來最大程度地平鋪,且剩余像素使用跳行和跳 列模式的變體進(jìn)行編碼。如果且僅當(dāng)rowMB是3的倍數(shù)而colMB不是,則使用2X3“豎直” 塊。否貝I」,使用3X2 “水平”塊。圖79A示出2X3 “豎直”塊的簡化示例。圖79B和79C 示出3X2 “水平”塊,對這些塊細(xì)長的黑色矩形為1個像素寬并使用跳行和跳列編碼進(jìn)行 編碼。對于如圖79C所示平鋪的平面,在圖片的上邊緣和左邊緣使用線性塊,這些塊的編碼 順序符合以下模式。先編碼6-元素塊,然后是跳列和跳行編碼的線性塊。如果數(shù)組大小是 2X3或3X2的倍數(shù),則后面的線性塊不存在,且位平面被完美平鋪。該6-元素矩形塊使用不完整的哈夫曼代碼編碼,即不將所有端點用于編碼的哈 夫曼代碼。設(shè)N是塊中設(shè)置比特的數(shù)量,即O彡N彡6。對于N <3,使用VLC來編碼該塊。對于N = 3,固定長度的轉(zhuǎn)義碼之后為5比特固定長度代碼,對于N > 3,固定長度轉(zhuǎn)義碼之 后為該塊的補碼。該矩形塊包含6個比特的信息。設(shè)k為關(guān)聯(lián)于塊的代碼,其中k = b^Sb,為該塊 內(nèi)自然掃描順序中第i個比特的二進(jìn)制值。因此,0彡k < 64。VLC、轉(zhuǎn)義碼、加上固定長度 代碼被用來用信號表示k。Diff-6 模式Norm-6模式用來如上所述地產(chǎn)生位平面,然后DifT1運算如下所述地應(yīng)用于位平面。跳行模式在跳行編碼模式中,用1個比特的開銷跳過所有零行。語法如下對于每一行,單 個R0WSKIP比特表示是否跳過該行;如果跳過該行,則接著是下一行的R0WSKIP比特;否則 (未跳過該行),則接著是R0WBITS比特(該行中每個宏塊的比特)。因而,如果整行為零, 則零比特被發(fā)送為R0WSKIP符號,并跳過R0WBITS。如果在該行中有一設(shè)置比特,ROffSKIP 被設(shè)置為1,且整個行被發(fā)送為原始(R0WBITS)。各行從半幀或幀的頂部掃描到底部。跳列模式跳列是跳行的轉(zhuǎn)置。各列從半幀或幀的頂部掃描到底部。Difr1 逆向差值解碼在使用任一差值模式(Diff-2或Diff-6)時,“差值比特”的位平面首先使用相應(yīng) 的正常模式(Norm-2或Norm-6)解碼。差值比特被用來重新產(chǎn)生原始位平面。重新產(chǎn)生過 程是二進(jìn)制字母表上的2-D DPCM。為了在位置(i,j)上重新產(chǎn)生比特,預(yù)測值bp(i,j)如 下產(chǎn)生(從位置(i,j)上的比特b(i,j))
‘Ai = j = 0^b{i,j-\)^b{i-\,j) bp(i,j) = <b(0,j-\) i==0 .岣-!J)否則對于差值編碼模式,不執(zhí)行基于INVERT的逐個比特逆轉(zhuǎn)過程。然而,INVERT標(biāo)記 以不同容量用來表示符號A的值,用于導(dǎo)出所示預(yù)測值。更具體地,如果INVERT等于0則A 等于0,且如果INVERT等于1則A等于1。位平面的實際值通過異或預(yù)測值和經(jīng)解碼的差 值比特值來獲取。在以上公式中,b(i,j)是在最終解碼之后(即進(jìn)行Norm-2或Norm-6,然 后是與其預(yù)測值的差值異或之后)第(i,j)位置上的比特。已經(jīng)參照各個實施例描述和示出了本發(fā)明的各個原理,可以理解各個實施例可在 排列和細(xì)節(jié)中進(jìn)行更改而不背離這些原理。應(yīng)當(dāng)理解,在此所述的程序、過程或方法并不相 關(guān)于或限于任何特定類型的計算環(huán)境,除非另有所示。各種類型的通用或?qū)S糜嬎悱h(huán)境可 根據(jù)在此所述的教授內(nèi)容使用或執(zhí)行操作。在軟件中示出的各個實施例的元素可用硬件實 現(xiàn),反之亦然。根據(jù)本發(fā)明各原理可應(yīng)用其中的許多可能實施例,我們將本發(fā)明解釋為可在以下 權(quán)利要求及其等效方案的范圍和精神內(nèi)的所有這些實施例。
權(quán)利要求
一種在實現(xiàn)視頻解碼器的計算設(shè)備中解碼視頻的方法,所述計算設(shè)備包括處理器和存儲器,所述方法包括用所述實現(xiàn)視頻解碼器的計算設(shè)備,對當(dāng)前隔行掃描的雙向預(yù)測半幀中的當(dāng)前直接模式宏塊進(jìn)行解碼,包括確定時間上在將來的隔行掃描預(yù)測半幀中的共處宏塊是使用四運動向量來編碼的;確定所述共處宏塊的一個或多個運動向量;以及計算要在對所述當(dāng)前直接模式宏塊的直接模式縮放操作中使用的運動向量,包括通過以下步驟,在計算所述運動向量時偏愛所述共處宏塊的一個或多個運動向量的主極性確定所述共處宏塊的一個或多個運動向量中的更多運動向量是引用第一參考半幀還是第二參考半幀;如果所述共處宏塊的一個或多個運動向量中的更多運動向量引用所述第二參考半幀,使用所述共處宏塊的一個或多個運動向量中引用所述第二參考半幀的那些運動向量來計算要在直接模式縮放操作中使用的運動向量;以及否則,使用所述共處宏塊的一個或多個運動向量中引用所述第一參考半幀的那些運動向量來計算要在直接模式縮放操作中使用的運動向量;以及用所述實現(xiàn)視頻解碼器的計算設(shè)備,使用所解碼的當(dāng)前直接模式宏塊來重構(gòu)所述當(dāng)前隔行掃描的雙向預(yù)測半幀。
2.如權(quán)利要求1所述的方法,所述將來的隔行掃描預(yù)測半幀具有與帶有所述當(dāng)前直接 模式宏塊的當(dāng)前隔行掃描雙向預(yù)測半幀相同的極性。
3.一種在實現(xiàn)視頻編碼器的計算設(shè)備中編碼視頻的方法,所述計算設(shè)備包括處理器和 存儲器,所述方法包括用所述實現(xiàn)視頻編碼器的計算設(shè)備,對當(dāng)前隔行掃描B-半幀進(jìn)行編碼以產(chǎn)生已編碼 視頻信息,其中所述編碼包括計算要在對所述當(dāng)前隔行掃描B-半幀中的當(dāng)前宏塊的直接 模式縮放中使用的運動向量,包括確定時間上在將來的隔行掃描P-半幀的共處宏塊是具有最多達(dá)四個運動向量的4MV 宏塊;以及從所述共處宏塊的最多達(dá)四個運動向量中計算主極性運動向量,作為在所述直接模式 中縮放的運動向量確定所述共處宏塊的最多達(dá)四個運動向量中的更多運動向量是引用第一參考半幀還 是第二參考半幀;如果所述共處宏塊的最多達(dá)四個運動向量中的更多運動向量引用所述第二參考半幀, 使用所述共處宏塊的最多達(dá)個運動向量中引用所述第二參考半幀的那些運動向量來計算 所述主極性運動向量;以及否則,使用所述共處宏塊的最多達(dá)四個運動向量中引用所述第一參考半幀的那些運動 向量來計算所述主極性運動向量;以及用所述實現(xiàn)視頻編碼器的計算設(shè)備,在比特流中輸出所述已編碼視頻信息。
4.如權(quán)利要求3所述的方法,其特征在于,所述計算主極性運動向量包括對所述最多達(dá)四個運動向量中的相同極性運動向量計數(shù),以及對相反極性運動向量計
5.如權(quán)利要求3所述的方法,其特征在于,所述計算主極性運動向量包括對兩個運動 向量求平均。
6.如權(quán)利要求3所述的方法,其特征在于,所述計算主極性運動向量包括計算三個或 四個運動向量的中值。
7.如權(quán)利要求3所述的方法,其特征在于,所述計算主極性運動向量包括在所述最多 達(dá)四個運動向量中選擇單個可用運動向量。
8.如權(quán)利要求3所述的方法,其特征在于,包括在所述當(dāng)前隔行掃描B-半幀的當(dāng)前宏 塊的處理期間執(zhí)行對所述主極性運動向量的計算。
9.如權(quán)利要求3所述的方法,其特征在于,包括在所述當(dāng)前隔行掃描B-半幀的當(dāng)前宏 塊的處理開始之前在所述共處宏塊的處理期間執(zhí)行對所述主極性運動向量的計算。
10.如權(quán)利要求3所述的方法,其特征在于,所述將來的隔行掃描P-半幀具有與所述當(dāng) 前隔行掃描B-半幀相同的極性。
11.一種在實現(xiàn)視頻解碼器的計算設(shè)備中解碼視頻的方法,所述計算設(shè)備包括處理器 和存儲器,所述方法包括用所述實現(xiàn)視頻解碼器的計算設(shè)備,緩存用于時間上在將來的隔行掃描P-幀中的多 個宏塊的多個運動向量,包括對所述多個宏塊中的每一個,通過以下步驟緩存上半幀運動 向量和下半幀運動向量確定所述將來隔行掃描P-幀的宏塊是IMV幀宏塊、2MV幀宏塊、4MV幀宏塊還是4MV半 幀宏塊;如果所述宏塊是IMV幀宏塊,則緩存所述宏塊的單個運動向量作為所述上半幀運動向 量并作為所述下半幀運動向量;如果所述宏塊是2MV半幀宏塊,則緩存所述宏塊的兩個運動向量分別作為所述上半幀 運動向量和所述下半幀運動向量;以及如果所述宏塊是4MV幀宏塊,則緩存所述宏塊的左上塊運動向量作為所述上半幀運動 向量,并緩存所述宏塊的左下塊運動向量作為所述下半幀運動向量;以及用所述實現(xiàn)視頻解碼器的計算設(shè)備,對當(dāng)前隔行掃描B-幀進(jìn)行解碼,包括對所述當(dāng)前 隔行掃描B-幀中的直接模式宏塊,在所述將來的隔行掃描P-幀的多個宏塊中選擇對應(yīng)于共處宏塊的一個或多個緩存的 運動向量;以及至少部分地基于所選的一個或多個運動向量來計算用于所述直接模式宏塊的多個直 接模式運動向量。
12.如權(quán)利要求11所述的方法,其特征在于,所述選擇一個或多個緩存的運動向量至 少部分地基于用于所述直接模式宏塊的運動補償預(yù)測模式。
13.如權(quán)利要求12所述的方法,其特征在于,用于所述直接模式宏塊的運動補償預(yù)測 模式是1MV。
14.如權(quán)利要求13所述的方法,其特征在于,所選一個或多個運動向量包括一個所選運動向量。
15.如權(quán)利要求13所述的方法,其特征在于,所述共處宏塊是半幀編碼的2MV半幀宏 塊,并且其中所選一個或多個運動向量包括從所述共處宏塊的上半幀中選擇的一個運動向量。
16.如權(quán)利要求12所述的方法,其特征在于,用于所述直接模式的運動補償預(yù)測模式 是2半幀MV。
17.如權(quán)利要求16所述的方法,其特征在于,所選一個或多個運動向量包括兩個所選運動向量。
18.如權(quán)利要求16所述的方法,其特征在于,所述共處宏塊是半幀編碼的2MV半幀宏 塊,并且其中所述兩個所選運動向量包括用于所述共處宏塊的上半幀運動向量和下半幀運動向量。
19.如權(quán)利要求11所述的方法,其特征在于,所述多個直接模式運動向量包括一對正 向和反向直接模式運動向量,并且其中所述直接模式宏塊是IMV幀宏塊。
20.如權(quán)利要求11所述的方法,其特征在于,所述多個直接模式運動向量包括兩對正 向和反向直接模式運動向量,并且其中所述直接模式宏塊是2MV半幀宏塊。
21.如權(quán)利要求20所述的方法,其特征在于,所述兩對正向和反向直接模式運動向量 中的每一個用于所述直接模式宏塊中的一不同半幀。
22.—種在實現(xiàn)視頻解碼器的計算設(shè)備中的視頻解碼方法,所述計算設(shè)備包括處理器 和存儲器,所述方法包括用所述實現(xiàn)視頻解碼器的計算設(shè)備,計算要在對當(dāng)前隔行掃描B-幀的當(dāng)前宏塊的直 接模式縮放中使用的一個或多個運動向量,其中所述計算至少部分地取決于所述當(dāng)前宏塊 的運動補償模式和時間上在將來的隔行掃描P-幀的共處宏塊的運動補償模式而變化,包 括確定所述當(dāng)前宏塊是IMV幀宏塊還是2MV半幀宏塊;確定所述將來隔行掃描P-幀的共處宏塊是IMV幀宏塊、2MV半幀宏塊、4MV幀宏塊還是 4MV半幀宏塊;以及當(dāng)所述共處宏塊是4MV幀宏塊或4MV半幀宏塊時當(dāng)所述當(dāng)前宏塊是IMV幀宏塊時,選擇所述共處宏塊的左上塊運動向量在對所述當(dāng)前 宏塊的直接模式縮放中使用;以及當(dāng)所述當(dāng)前宏塊是具有上和下半幀的2MV半幀宏塊時,選擇所述共處宏塊的左上塊運 動向量在對所述當(dāng)前宏塊的上半幀的直接模式縮放中使用,并選擇所述共處宏塊的左下塊 運動向量在用于所述當(dāng)前宏塊的下半幀的直接模式縮放中使用;用所述實現(xiàn)視頻解碼器的計算設(shè)備,用所述一個或多個運動矢量來執(zhí)行所述直接模式 縮放;用所述實現(xiàn)視頻解碼器的計算設(shè)備,使用所述直接模式縮放的結(jié)果來對所述當(dāng)前宏塊 進(jìn)行運動補償;以及用所述實現(xiàn)視頻解碼器的計算設(shè)備,至少部分地基于對所述當(dāng)前宏塊的運動補償?shù)慕Y(jié) 果,重構(gòu)所述當(dāng)前隔行掃描B-幀。
23.如權(quán)利要求22所述的方法,其特征在于,所述計算包括 當(dāng)所述共處宏塊是具有單個運動向量的IMV幀宏塊時當(dāng)所述當(dāng)前宏塊是IMV幀宏塊時,選擇所述共處宏塊的單個運動向量在對所述當(dāng)前宏 塊的直接模式縮放中使用;以當(dāng)所述當(dāng)前宏塊是具有上和下半幀的2MV半幀宏塊時,選擇所述共處宏塊的單個運動 向量在對所述當(dāng)前宏塊的上和下半幀的每一個的直接模式縮放中使用。
24.如權(quán)利要求22所述的方法,其特征在于,所述計算包括當(dāng)所述共處宏塊是具有上半幀運動向量和下半幀運動向量的2MV半幀宏塊時 當(dāng)所述當(dāng)前宏塊是IMV幀宏塊時,選擇所述共處宏塊的上半幀運動向量在對所述當(dāng)前 宏塊的直接模式縮放中使用;以及當(dāng)所述當(dāng)前宏塊是具有上和下半幀的2MV半幀宏塊時,選擇所述共處宏塊的上半幀運 動向量在對所述當(dāng)前宏塊的上半幀的直接模式縮放中使用,并選擇所述共處宏塊的下半幀 運動向量在對所述當(dāng)前宏塊的下半幀的直接模式縮放中使用。
25.如權(quán)利要求1所述的方法,其特征在于,所述第一參考半幀與所述將來的隔行掃描 預(yù)測半幀具有相同的極性,而所述第二參考半幀具有與所述將來的隔行掃描預(yù)測半幀相反 的極性。
26.如權(quán)利要求1所述的方法,其特征在于,所述計算在直接模式縮放操作中使用的運 動向量還包括對所述共處宏塊的一個或多個運動向量中的相同極性運動向量計數(shù),并對相反極性運 動向量計數(shù)。
27.如權(quán)利要求1所述的方法,其特征在于,所述對當(dāng)前直接模式宏塊進(jìn)行解碼還包括使用所計算的運動向量來導(dǎo)出正向運動向量和反向運動向量以在對所述當(dāng)前直接模 式宏塊的運動補償中使用;以及使用所述正向運動向量和所述反向運動向量來對所述當(dāng)前直接模式宏塊進(jìn)行運動補mte ο
28.如權(quán)利要求3所述的方法,其特征在于,所述第一參考半幀具有與所述將來的隔行 掃描P-半幀相同的極性,而所述第二參考半幀具有與所述將來的隔行掃描P-半幀相反的 極性。
29.如權(quán)利要求3所述的方法,其特征在于,所述編碼還包括使用所述主極性運動向量來計算正向運動向量和反向運動向量以在對所述當(dāng)前宏塊 的運動補償中使用;以及使用所述正向運動向量和所述反向運動向量來對所述當(dāng)前宏塊進(jìn)行運動補償。
全文摘要
對于隔行掃描B-半幀或隔行掃描B-幀,正向運動向量使用來自正向運動向量緩沖區(qū)的正向運動向量來預(yù)測,而反向運動向量使用來自反向運動向量緩沖區(qū)的反向運動向量來預(yù)測。結(jié)果的運動向量被添加到相應(yīng)的緩沖區(qū)中。運動向量緩沖區(qū)中的空穴可用所估計的運動向量值填充。在隔行掃描B-幀的半幀編碼宏塊中的半幀之間切換預(yù)測模式。對于隔行掃描B-半幀或隔行掃描B-幀,計算直接模式運動向量。對于隔行掃描B-半幀或隔行掃描B-幀,使用4MV編碼。編碼器/解碼器使用“自參考”B-幀。編碼器發(fā)送二進(jìn)制信息,表示對隔行掃描B-半幀的一個或多個宏塊的預(yù)測模式是正向還是非正向的。編碼器/解碼器使用幀內(nèi)編碼的B-半幀[“BI-半幀”]。
文檔編號G06K9/36GK101924934SQ20101016998
公開日2010年12月22日 申請日期2004年9月3日 優(yōu)先權(quán)日2003年9月7日
發(fā)明者K·慕克吉, T·W·赫爾科比 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1