本發(fā)明涉及用于在視頻編碼中的高級(jí)幀內(nèi)預(yù)測(cè)的遞歸塊分區(qū)中的智能重排。
背景技術(shù):
數(shù)字視頻可以用于各種應(yīng)用,包括例如視頻會(huì)議、高清晰度視頻娛樂(lè)、視頻廣告或用戶生成的視頻的共享。數(shù)字視頻流可以使用幀或靜止圖像的序列來(lái)表示視頻。每個(gè)幀可以包括多個(gè)塊,其又可以包含描述像素的顏色、亮度或像素的其它屬性的值的信息。數(shù)字視頻流可以包含大量數(shù)據(jù),并且消耗計(jì)算設(shè)備的大量計(jì)算或通信資源以用于處理、傳輸或存儲(chǔ)視頻數(shù)據(jù)。已經(jīng)提出了各種方法來(lái)減少視頻流中的數(shù)據(jù)量,包括壓縮和其它編碼技術(shù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明大體上涉及對(duì)視頻數(shù)據(jù)進(jìn)行編碼和解碼。本文所描述的用于對(duì)視頻流進(jìn)行編碼的方法的實(shí)施方式包括:在所述視頻流的幀中識(shí)別多個(gè)塊,在所述幀中從所述多個(gè)塊中識(shí)別將要使用幀間預(yù)測(cè)編碼的第一組塊;在所述幀中,從所述多個(gè)塊中識(shí)別包括塊的第二組塊,其中每一塊包括具有至少一個(gè)要使用幀間預(yù)測(cè)來(lái)編碼的子塊以及至少一個(gè)要使用幀內(nèi)預(yù)測(cè)來(lái)編碼的子塊的多個(gè)子塊;以及在所述幀中從所述多個(gè)塊識(shí)別要使用幀內(nèi)預(yù)測(cè)進(jìn)行編碼的第三組塊。該方法還包括使用幀間預(yù)測(cè)至少部分地編碼第一組塊以形成第一組編碼塊;使用處理器至少部分地解碼第一組編碼塊以形成第一組解碼塊;使用幀間預(yù)測(cè)至少部分地編碼來(lái)自所述第二組塊的至少一個(gè)塊以形成第二組幀間預(yù)測(cè)的編碼塊,其中來(lái)自所述第二組塊的所述至少一個(gè)塊將使用幀間預(yù)測(cè)來(lái)編碼;使用所述處理器至少部分地解碼所述第二組幀間預(yù)測(cè)的編碼塊以形成第二組幀間預(yù)測(cè)的解碼塊;使用幀內(nèi)預(yù)測(cè),使用所述第一組解碼塊的至少一個(gè)塊或來(lái)自第二組幀間預(yù)測(cè)解碼塊的至少一個(gè)塊來(lái)對(duì)來(lái)自所述第二組塊的至少一個(gè)塊進(jìn)行編碼,以形成第二組幀內(nèi)預(yù)測(cè)編碼塊,其中來(lái)自第二組塊的至少一個(gè)塊要使用幀內(nèi)預(yù)測(cè)進(jìn)行編碼;使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊中的至少一個(gè)塊或來(lái)自所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊來(lái)編碼第三組塊,以形成第三組編碼塊;以及向編碼的比特流插入所述第一組編碼塊、所述第二組幀間預(yù)測(cè)的編碼塊、所述第二組幀內(nèi)預(yù)測(cè)的編碼塊和所述第三組編碼的塊。
本文所描述的用于解碼視頻比特流的方法的實(shí)施方式包括:在視頻流中的幀中識(shí)別使用幀間預(yù)測(cè)來(lái)編碼的第一組的編碼塊;在所述幀中識(shí)別包括塊的第二組的編碼塊,其中,每個(gè)塊包括具有至少一個(gè)使用幀間預(yù)測(cè)編碼的子塊和至少一個(gè)使用幀內(nèi)預(yù)測(cè)編碼的子塊的多個(gè)子塊;以及在幀中識(shí)別使用幀內(nèi)預(yù)測(cè)編碼的第三組編碼塊。該方法還包括:使用進(jìn)行幀間預(yù)測(cè)的處理器解碼第一組編碼塊以形成第一組解碼塊;使用進(jìn)行幀間預(yù)測(cè)的處理器解碼來(lái)自所述第二組編碼塊中的至少一個(gè)塊以形成第二組幀間預(yù)測(cè)的解碼塊,其中,來(lái)自所述第二組編碼塊的至少一個(gè)塊使用幀間預(yù)測(cè)進(jìn)行編碼;使用幀內(nèi)預(yù)測(cè),使用至少一個(gè)來(lái)自第一組解碼塊的塊或至少一個(gè)來(lái)自第二組幀間預(yù)測(cè)解碼塊中的塊解碼來(lái)自第二組的編碼塊中的至少一個(gè)塊,以形成第二組幀內(nèi)預(yù)測(cè)解碼的塊,其中使用幀內(nèi)預(yù)測(cè)編碼來(lái)自所述第二組編碼塊的至少一個(gè)塊;以及使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊中的至少一個(gè)塊或來(lái)自所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊來(lái)解碼所述第三組編碼塊,以形成第三組解碼塊。
本文的教導(dǎo)的另一實(shí)施方式是一種用于對(duì)視頻流進(jìn)行編碼的裝置,其包括存儲(chǔ)器和處理器。所述處理器被配置執(zhí)行在存儲(chǔ)器中的指令,以在視頻流的幀中識(shí)別多個(gè)塊,在幀中從所述多個(gè)塊識(shí)別要利用幀間預(yù)測(cè)進(jìn)行編碼的第一組塊;在所述幀中從所述多個(gè)塊識(shí)別包括塊的第二組塊,其中每一塊包括多個(gè)子塊,所述多個(gè)子塊具有至少一個(gè)將使用幀間預(yù)測(cè)來(lái)編碼的子塊和至少一個(gè)將使用幀內(nèi)預(yù)測(cè)來(lái)編碼的子塊;并且在所述幀中從所述多個(gè)塊識(shí)別將使用幀內(nèi)預(yù)測(cè)來(lái)編碼的第三組塊。所述處理器還被配置成以使用幀間預(yù)測(cè)至少部分地對(duì)所述第一組塊進(jìn)行編碼以形成第一組的編碼塊;至少部分地解碼所述第一組的編碼塊以形成第一組解碼塊;使用幀間預(yù)測(cè)至少部分地對(duì)來(lái)自所述第二組塊的至少一個(gè)塊進(jìn)行編碼以形成第二組幀間預(yù)測(cè)的編碼塊,其中來(lái)自所述第二組塊的所述至少一個(gè)塊是使用幀間預(yù)測(cè)來(lái)編碼的;至少部分地解碼所述第二組幀間預(yù)測(cè)的編碼塊以形成第二組幀間預(yù)測(cè)的解碼塊;使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊中的至少一個(gè)塊或者來(lái)自第二組幀間預(yù)測(cè)解碼塊的至少一個(gè)塊來(lái)從所述第二組塊中編碼至少一個(gè)塊,以形成第二組幀內(nèi)預(yù)測(cè)編碼塊,其中來(lái)自第二組塊的至少一個(gè)塊要使用幀內(nèi)預(yù)測(cè)編碼;使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊中的至少一個(gè)塊或來(lái)自所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊編碼所述第三組塊,以形成第三組編碼塊;以及向編碼比特流插入所述第一組編碼塊、第二組幀間預(yù)測(cè)的編碼塊、第二組幀內(nèi)預(yù)測(cè)的編碼塊和第三組編碼塊。
本發(fā)明還提供了一種用于解碼視頻流的對(duì)應(yīng)裝置以及一個(gè)或多個(gè)攜帶計(jì)算機(jī)程序代碼的計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)程序代碼被布置為當(dāng)在合適的計(jì)算機(jī)裝置上執(zhí)行時(shí)執(zhí)行所描述的方法或?qū)崿F(xiàn)所描述的裝置。
在下文中將更詳細(xì)地描述這些和其它方面和實(shí)施方式中的變型。
附圖說(shuō)明
本文的描述參考附圖,其中除非另有說(shuō)明,否則相似的附圖標(biāo)記在幾個(gè)視圖中指代相似的部件。
圖1是視頻編碼和解碼系統(tǒng)的示意圖。
圖2是可以實(shí)現(xiàn)發(fā)送站或接收站的計(jì)算設(shè)備的框圖。
圖3是要編碼和隨后解碼的視頻流的圖。
圖4是根據(jù)本公開的方面的編碼器的框圖。
圖5是根據(jù)本公開的另一方面的解碼器的框圖。
圖6是根據(jù)本公開的方面的用于對(duì)視頻流進(jìn)行編碼的過(guò)程的流程圖。
圖7是根據(jù)本公開的另一方面的用于對(duì)視頻流進(jìn)行解碼的過(guò)程的流程圖。
圖8是根據(jù)本公開的方面的要編碼或解碼的遞歸分區(qū)塊的圖。
具體實(shí)施方式
數(shù)字視頻用于各種目的,包括例如通過(guò)視頻會(huì)議的遠(yuǎn)程商務(wù)會(huì)議、高清晰度視頻娛樂(lè)、視頻廣告和用戶生成的視頻的共享。圖像和視頻壓縮可以提高數(shù)據(jù)傳輸和存儲(chǔ)數(shù)字視頻的效率。壓縮技術(shù)可以用于減少要傳輸或存儲(chǔ)的信息量?;诨ヂ?lián)網(wǎng)的多媒體服務(wù)(諸如流視頻網(wǎng)站)可以依靠良好的壓縮技術(shù)來(lái)提高服務(wù)質(zhì)量并且同時(shí)控制帶寬和內(nèi)容傳送的成本。
與編碼視頻流相關(guān)的壓縮方案可以包括將每個(gè)圖像分成塊,并且使用一種或多種技術(shù)生成數(shù)字視頻輸出比特流以限制輸出中包括的信息??梢詫?duì)接收的比特流進(jìn)行解碼以從有限信息重新創(chuàng)建塊和源圖像。對(duì)視頻流或其一部分(例如幀或塊)進(jìn)行編碼可以包括使用視頻流中的時(shí)間和空間相似性來(lái)提高編碼效率。例如,可以基于視頻流中的先前編碼的幀中的先前編碼的塊,通過(guò)基于先前編碼的塊預(yù)測(cè)當(dāng)前塊的運(yùn)動(dòng)和顏色信息并且識(shí)別在預(yù)測(cè)值和當(dāng)前塊之間的差(殘差)來(lái)編碼視頻流的當(dāng)前塊。以此方式,僅需要將用于產(chǎn)生其的殘差和參數(shù)添加到比特流,而不是包括當(dāng)前塊的整體。該技術(shù)可以被稱為幀間預(yù)測(cè)。
在視頻壓縮中,基于塊的編碼器-解碼器系統(tǒng)(編解碼器)可以首先將圖像幀劃分為塊。編碼器可以掃描(例如,以光柵掃描次序)幀中的塊,并且基于先前處理的塊為每個(gè)塊選擇最優(yōu)預(yù)測(cè)模式。編碼器可從塊中減去預(yù)測(cè)塊并對(duì)預(yù)測(cè)殘差進(jìn)行編碼。本發(fā)明的方面描述一種新的編碼方案,其在預(yù)測(cè)編碼之前執(zhí)行塊的額外通過(guò),以便基于所使用的預(yù)測(cè)模式重新排序塊的編碼和解碼。通過(guò)這種重新排序,編碼器有效地改變編碼和解碼過(guò)程中的塊的數(shù)據(jù)依賴性,允許幀中稍后編碼的塊使用來(lái)自先前編碼塊的所有重構(gòu)像素信息,提高幀內(nèi)預(yù)測(cè)的質(zhì)量和總體編碼效率。解碼器可執(zhí)行用于解碼的塊的相同重新排序,其依賴于包含于編碼視頻比特流中的比特以指示哪些塊可使用幀間預(yù)測(cè)來(lái)解碼且哪些塊可使用幀內(nèi)預(yù)測(cè)來(lái)解碼。
將塊分組為三個(gè)組以用于編碼或解碼可允許使用幀內(nèi)預(yù)測(cè)模式,其中來(lái)自塊的多于兩個(gè)邊的像素?cái)?shù)據(jù)可用于形成預(yù)測(cè)塊。在一些幀內(nèi)預(yù)測(cè)模式中,例如在以光柵掃描次序處理幀的塊的情況下,幀內(nèi)預(yù)測(cè)模式限于使用來(lái)自在以光柵掃描次序預(yù)測(cè)的塊之前出現(xiàn)的塊的像素?cái)?shù)據(jù)的模式。使用幀間預(yù)測(cè)來(lái)編碼或解碼的塊以及至少部分地首先對(duì)這些塊進(jìn)行編碼允許在一些情況下使用來(lái)自塊的所有四個(gè)邊上的塊的像素?cái)?shù)據(jù)來(lái)用于預(yù)測(cè),從而提高編碼或解碼過(guò)程的性能。
下面首先討論的是可以實(shí)現(xiàn)本公開的各方面的環(huán)境。
圖1是其中可以實(shí)現(xiàn)本公開的各方面的視頻編碼和解碼系統(tǒng)100的示意圖。發(fā)送站102可以是例如具有諸如圖1中所描述的硬件的內(nèi)部配置的計(jì)算機(jī)。然而,發(fā)送站102的其它合適的實(shí)現(xiàn)是可能的。例如,發(fā)送站102的處理可以分布在多個(gè)設(shè)備中。
網(wǎng)絡(luò)104可以連接發(fā)送站102和接收站106,用于視頻流的編碼和解碼。具體地,可以在發(fā)送站102中對(duì)視頻流進(jìn)行編碼,并且可以在接收站106中對(duì)編碼的視頻流進(jìn)行解碼。網(wǎng)絡(luò)104可以是例如互聯(lián)網(wǎng)。網(wǎng)絡(luò)104還可以是局域網(wǎng)(lan)、廣域網(wǎng)(wan)、虛擬專用網(wǎng)絡(luò)(vpn)、蜂窩電話網(wǎng)絡(luò)或?qū)⒁曨l流從發(fā)送站102傳送到在此示例中的接收站106的任何其它裝置。
在一個(gè)示例中,接收站106可以是具有諸如圖2中所描述者的硬件的內(nèi)部配置的計(jì)算機(jī)。然而,接收站106的其它合適的實(shí)施方式是可能的。例如,接收站106的處理可以分布在多個(gè)設(shè)備中。
視頻編碼和解碼系統(tǒng)100的其它實(shí)施方式是可能的。例如,實(shí)施方式可以省略網(wǎng)絡(luò)104。在一個(gè)實(shí)施方式中,視頻流可以被編碼,然后被存儲(chǔ)用于在稍后的時(shí)間傳輸?shù)浇邮照?06或具有存儲(chǔ)器的任何其它設(shè)備。接收站106接收(例如,經(jīng)由網(wǎng)絡(luò)104、計(jì)算機(jī)總線和/或一些通信路徑)編碼的視頻流,并且存儲(chǔ)視頻流以供稍后解碼。實(shí)時(shí)傳輸協(xié)議(rtp)可以用于通過(guò)網(wǎng)絡(luò)104傳輸編碼視頻。在另一實(shí)施方式中,可以使用除rtp之外的傳輸協(xié)議,例如基于http的視頻流傳輸協(xié)議??梢韵蚓幋a器和解碼器系統(tǒng)100添加額外的組件。例如,顯示器或視頻攝像機(jī)可以附接到發(fā)送站102以捕獲要編碼的視頻流。
圖2是可以實(shí)現(xiàn)發(fā)送站或接收站的計(jì)算設(shè)備200的框圖。例如,計(jì)算設(shè)備200可以實(shí)現(xiàn)圖1的發(fā)送站102和接收站106中的一個(gè)或兩個(gè)。計(jì)算設(shè)備200可以是包括多個(gè)計(jì)算設(shè)備的計(jì)算系統(tǒng)的形式,或者可以是單個(gè)計(jì)算設(shè)備的形式,例如移動(dòng)電話、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)、筆記本計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等。
計(jì)算設(shè)備200中的cpu202可以是中央處理單元。替選地,cpu202可以是能夠操縱或處理信息的現(xiàn)在存在或?qū)?lái)開發(fā)的任何其它類型的設(shè)備或多個(gè)設(shè)備。盡管所公開的實(shí)施方式可以用所示的單個(gè)處理器(例如cpu202)來(lái)實(shí)現(xiàn),但是可以使用多個(gè)處理器來(lái)實(shí)現(xiàn)在速度和效率方面的優(yōu)點(diǎn)。
在實(shí)施方式中,計(jì)算設(shè)備200中的存儲(chǔ)器204可以是只讀存儲(chǔ)器(rom)設(shè)備或隨機(jī)存取存儲(chǔ)器(ram)設(shè)備。任何其它合適類型的非暫時(shí)性存儲(chǔ)設(shè)備可以用作存儲(chǔ)器204。存儲(chǔ)器204可以包括由cpu202使用總線212訪問(wèn)的代碼和數(shù)據(jù)206。存儲(chǔ)器204還可以包括操作系統(tǒng)208和應(yīng)用程序210,應(yīng)用程序210包括允許cpu202執(zhí)行這里描述的方法的至少一個(gè)程序。如所示,例如,應(yīng)用程序210可以包括應(yīng)用1至n,其還包括執(zhí)行這里描述的方法的視頻流解碼應(yīng)用。計(jì)算設(shè)備200還可以包括輔助存儲(chǔ)器214,輔助存儲(chǔ)器214例如可以是與移動(dòng)計(jì)算設(shè)備一起使用的存儲(chǔ)器卡。因?yàn)橐曨l通信會(huì)話可以包含大量的信息,所以它們可以全部或部分地存儲(chǔ)在輔助存儲(chǔ)器214中,并且根據(jù)處理需要被加載到存儲(chǔ)器204中。
計(jì)算設(shè)備200還可以包括一個(gè)或多個(gè)輸出設(shè)備,諸如顯示器218。在一個(gè)示例中,顯示器218可以是將顯示器與可操作以感測(cè)觸摸輸入的觸敏元件組合的觸敏顯示器。顯示器218可以經(jīng)由總線212耦合到cpu202,并且可以被配置為顯示在接收站106中解碼的視頻流的渲染。附加于顯示器218或作為替選,可以提供允許用戶編程或以其它方式使用計(jì)算設(shè)備200的其它輸出設(shè)備。當(dāng)輸出設(shè)備是或包括顯示器時(shí),顯示器可以以各種方式實(shí)現(xiàn),包括通過(guò)液晶顯示器(lcd)、陰極射線管(crt)或發(fā)光二極管(led)顯示器(例如,有機(jī)led(oled)顯示器)。
計(jì)算設(shè)備200還可以包括圖像感測(cè)設(shè)備220或者與圖像感測(cè)設(shè)備220進(jìn)行通信,圖像感測(cè)設(shè)備220例如是相機(jī),或者現(xiàn)在存在或者將來(lái)開發(fā)的可以感測(cè)諸如操作計(jì)算設(shè)備200的用戶的圖像的圖像的圖像感測(cè)設(shè)備220。圖像感測(cè)設(shè)備220可以被定位成使得其指向操作計(jì)算設(shè)備200的用戶。在示例中,圖像感測(cè)設(shè)備220的位置和光軸可以被配置使得視場(chǎng)包括與顯示器218直接相鄰并且從其可見顯示器218的區(qū)域。
計(jì)算設(shè)備200還可以包括聲音感測(cè)設(shè)備222(例如麥克風(fēng))或者現(xiàn)在存在的或今后開發(fā)的可以感測(cè)計(jì)算設(shè)備200附近的聲音的任何其它聲音感測(cè)設(shè)備,或者與之通信。聲音感測(cè)裝置222可以被定位成使得它指向操作計(jì)算裝置200的用戶,并且可以被配置為在用戶操作計(jì)算裝置200時(shí)接收由用戶發(fā)出的聲音,例如語(yǔ)音或其它話語(yǔ)。
盡管圖2將計(jì)算設(shè)備200的cpu202和存儲(chǔ)器204描述為集成到單個(gè)單元中,但是可以利用其它配置。cpu202的操作可以分布在可以直接耦合或跨越局域或其它網(wǎng)絡(luò)耦合的多個(gè)機(jī)器(每個(gè)機(jī)器具有一個(gè)或多個(gè)處理器)上。存儲(chǔ)器204可以分布在多個(gè)機(jī)器上,例如基于網(wǎng)絡(luò)的存儲(chǔ)器或在執(zhí)行計(jì)算設(shè)備200的操作的多個(gè)機(jī)器中的存儲(chǔ)器。盡管這里被描繪為單條總線,但是計(jì)算設(shè)備200的總線212可以由多條總線構(gòu)成。此外,輔助存儲(chǔ)器214可以直接耦合到計(jì)算設(shè)備200的其它組件,或者可以經(jīng)由網(wǎng)絡(luò)訪問(wèn),并且可以包括諸如存儲(chǔ)器卡的單個(gè)集成單元或諸如多個(gè)存儲(chǔ)器卡的多個(gè)單元。計(jì)算設(shè)備200因此可以以各種各樣的配置來(lái)實(shí)現(xiàn)。
圖3是要編碼和解碼的視頻流300的示例的圖。視頻流300(這里也稱為視頻數(shù)據(jù))包括視頻序列302。在下一級(jí),視頻序列302包括多個(gè)相鄰幀304。雖然三個(gè)幀被描繪為相鄰幀304,但是視頻序列302可以包括任何數(shù)量的相鄰幀。然后,可以將相鄰幀304進(jìn)一步細(xì)分為單獨(dú)的幀,例如單個(gè)幀306。每個(gè)幀306可以捕獲具有一個(gè)或多個(gè)對(duì)象(諸如人、背景元素、圖形、文本、黑色墻壁或任何其它信息)的場(chǎng)景。
幀306可以被劃分為段308。無(wú)論幀306是否被劃分成段308,幀306可以被劃分為塊310的集合,其可以包含對(duì)應(yīng)于在一些示例中的數(shù)據(jù)幀310中的8×8像素組。塊310還可以是任何其它合適的尺寸,例如16×8像素組、8×16像素組、16×16像素組、4×4像素或任何其它尺寸,并且根據(jù)應(yīng)用可以進(jìn)一步細(xì)分為更小的塊。除非另有說(shuō)明,以其它方式術(shù)語(yǔ)“塊”可以包括宏塊、子塊(即,宏塊或塊的細(xì)分)、段、片、殘差塊或幀的任何其它部分。幀、塊、像素或其組合可包括顯示信息,例如亮度信息、色度信息或可用于存儲(chǔ)、修改、傳送或顯示視頻流或其一部分的任何其它信息。塊310也可以布置在數(shù)據(jù)平面中。例如,每個(gè)平面中的對(duì)應(yīng)塊310可以分別包含用于塊310的像素的亮度和色度數(shù)據(jù)。
圖4是根據(jù)本公開的實(shí)施方式的編碼器400的框圖。如上所述,可以在發(fā)送站102中諸如通過(guò)提供存儲(chǔ)在存儲(chǔ)器204中的計(jì)算機(jī)軟件程序來(lái)實(shí)現(xiàn)編碼器400。計(jì)算機(jī)軟件程序可以包括機(jī)器指令,其當(dāng)由諸如cpu202的處理器執(zhí)行時(shí),使發(fā)送站102以圖4所述的方式對(duì)視頻數(shù)據(jù)進(jìn)行編碼。編碼器400還可以被實(shí)現(xiàn)為包括在例如發(fā)送站102中的專用硬件。編碼器400具有以下級(jí)以在前向路徑(由實(shí)連接線示出)中執(zhí)行各種功能,以使用視頻流300作為輸入來(lái)產(chǎn)生編碼或壓縮比特流420:幀內(nèi)/幀間預(yù)測(cè)階段402、變換階段404、量化階段406和熵編碼階段408。編碼器400還可以包括重構(gòu)路徑(由虛連接線所示)以重構(gòu)用于未來(lái)塊的編碼的幀。在圖4中,編碼器400具有以下級(jí)來(lái)執(zhí)行重構(gòu)路徑中的各種功能:去量化階段410、逆變換階段412、重構(gòu)階段414和環(huán)路濾波階段416。編碼器400的其它結(jié)構(gòu)變型可以用于對(duì)視頻流300進(jìn)行編碼。
當(dāng)視頻流300被呈現(xiàn)用于編碼時(shí),視頻流300內(nèi)的每個(gè)幀306可以以塊310為單位被處理。在幀內(nèi)/幀間預(yù)測(cè)階段402,塊可以使用幀內(nèi)預(yù)測(cè)(例如,即在單個(gè)幀內(nèi))或幀間預(yù)測(cè)(即,從幀到幀)來(lái)編碼。在任一情況下,可形成預(yù)測(cè)塊。然后從塊中減去預(yù)測(cè)塊以產(chǎn)生殘差塊(本文中也稱為殘差)。
幀內(nèi)(intra-fram)預(yù)測(cè)(本文中也稱為幀內(nèi)(intra)預(yù)測(cè))或幀間(inter-frame)預(yù)測(cè)(本文中也稱為幀間(inter)預(yù)測(cè))是在現(xiàn)代圖像/視頻壓縮方案中使用的技術(shù)。在幀內(nèi)預(yù)測(cè)的情況下,可以從當(dāng)前幀中先前已編碼和重構(gòu)的的空間附近塊形成預(yù)測(cè)塊。在幀間預(yù)測(cè)的情況下,預(yù)測(cè)塊可以從先前構(gòu)造的參考幀的一個(gè)或多個(gè)塊形成,該參考幀例如是最后一幀(即,緊接當(dāng)前幀之前的相鄰幀)、金色幀或構(gòu)造的或替選的參考幀。
然后從當(dāng)前塊中減去預(yù)測(cè)塊。然后,差值或殘差被編碼并傳送到解碼器。圖像或視頻編解碼器可支持許多不同的幀內(nèi)和幀間預(yù)測(cè)模式;塊可使用預(yù)測(cè)模式中的一個(gè)以獲得與塊最相似的預(yù)測(cè)塊,以最小化要在殘差中編碼的信息,以便重新創(chuàng)建塊。還可以對(duì)變換系數(shù)塊的預(yù)測(cè)模式進(jìn)行編碼和傳輸,使得解碼器可以使用相同的預(yù)測(cè)模式在解碼和重構(gòu)過(guò)程中形成預(yù)測(cè)塊。
接下來(lái),仍參考圖4,可以在幀內(nèi)/幀間預(yù)測(cè)階段402從當(dāng)前塊減去預(yù)測(cè)塊,以產(chǎn)生殘差塊(也稱為殘差)。變換階段404將殘差變換為例如在頻域中的變換系數(shù)塊?;趬K的變換的示例包括karhunen-loeve變換(klt)、離散余弦變換(dct)、沃爾什-哈達(dá)瑪變換(wht)、奇異值分解變換(svd)和非對(duì)稱離散正弦變換(adst)。在一個(gè)示例中,dct將塊變換到頻域。在dct的情況下,變換系數(shù)值基于空間頻率,其中在矩陣的左上角具有最低頻率(例如,dc)系數(shù),并且在矩陣的右下角具有最高頻率系數(shù)。
量化階段406使用量化器值或量化等級(jí)將變換系數(shù)轉(zhuǎn)換為離散量子值,其稱為量化變換系數(shù)。然后,量化的變換系數(shù)由熵編碼階段408進(jìn)行熵編碼。熵編碼的系數(shù)與用于對(duì)塊進(jìn)行解碼的其它信息(其可以包括例如所使用的預(yù)測(cè)類型、運(yùn)動(dòng)矢量和量化值)一起然后被輸出到壓縮比特流420。可以使用各種技術(shù)(例如可變長(zhǎng)度編碼(vlc)或算術(shù)編碼)來(lái)格式化壓縮比特流420。壓縮比特流420也可以稱為編碼視頻流,并且這些術(shù)語(yǔ)在本文中可互換使用。
圖4中的重構(gòu)路徑(由虛連接線示出)可以用于向編碼器400和解碼器500(下面描述)兩者提供相同的參考幀以解碼壓縮比特流420。重構(gòu)路徑執(zhí)行類似于發(fā)生在下面更詳細(xì)地討論的解碼過(guò)程期間的功能的功能,包括在去量化階段410對(duì)量化的變換系數(shù)進(jìn)行去量化以產(chǎn)生去量化的變換系數(shù),并且在逆變換階段412對(duì)去量化的變換系數(shù)進(jìn)行逆變換,以產(chǎn)生導(dǎo)數(shù)殘差塊(即,導(dǎo)數(shù)殘差)。在重構(gòu)階段414,可以將在幀內(nèi)/幀間預(yù)測(cè)階段402處預(yù)測(cè)的預(yù)測(cè)塊添加到導(dǎo)數(shù)殘差以創(chuàng)建重構(gòu)塊。在一些實(shí)施方式中,環(huán)路濾波階段416可應(yīng)用于重構(gòu)塊以減少例如塊偽影的失真。
編碼器400的其它變型可以用于編碼壓縮比特流420。例如,基于非變換的編碼器400可以在沒(méi)有變換階段404的情況下直接量化殘差塊。編碼器400可以具有組合成單個(gè)階段的量化階段406和去量化階段410。
圖5是根據(jù)本發(fā)明的實(shí)施方式的解碼器500的框圖。解碼器500可以例如通過(guò)提供存儲(chǔ)在存儲(chǔ)器204中的計(jì)算機(jī)軟件程序例如在接收站106中實(shí)現(xiàn)。計(jì)算機(jī)軟件程序可以包括機(jī)器指令,當(dāng)由cpu202執(zhí)行時(shí),使得接收站106以圖5中描述的方式解碼視頻數(shù)據(jù)。解碼器500還可以在包括在例如發(fā)送站102或接收站106中的硬件或固件中實(shí)現(xiàn)。
類似于上文所論述的編碼器400的重構(gòu)路徑,解碼器500在一個(gè)示例中包括以下階段以執(zhí)行各種功能以從壓縮比特流420產(chǎn)生輸出視頻流516:熵解碼階段502、去量化階段504、逆變換階段506、幀內(nèi)/幀間預(yù)測(cè)階段508、重構(gòu)階段510、環(huán)路濾波階段512和解塊濾波階段514。解碼器500的其它結(jié)構(gòu)變體可用于對(duì)壓縮比特流420進(jìn)行解碼。
當(dāng)呈現(xiàn)用于解碼的壓縮比特流420時(shí),壓縮比特流420內(nèi)的數(shù)據(jù)元素可以由熵解碼階段502(使用例如算術(shù)編碼)解碼以產(chǎn)生一組量化變換系數(shù)。去量化階段504對(duì)量化的變換系數(shù)進(jìn)行去量化,并且逆變換階段506對(duì)去量化的變換系數(shù)進(jìn)行逆變換,以產(chǎn)生可以與編碼器400中的逆變換階段412創(chuàng)建的導(dǎo)數(shù)殘差相同的導(dǎo)數(shù)殘差。使用從壓縮比特流420解碼的報(bào)頭信息,解碼器500可以使用幀內(nèi)/幀間預(yù)測(cè)階段508來(lái)創(chuàng)建與例如在幀內(nèi)/幀間預(yù)測(cè)階段402中在編碼器400中創(chuàng)建的相同的預(yù)測(cè)塊。在幀間預(yù)測(cè)的情況下,參考幀(從其生成預(yù)測(cè)塊)可以在比特流中傳送,或者由解碼器500使用包含在比特流內(nèi)的信息來(lái)構(gòu)造。
在重構(gòu)階段510,可將預(yù)測(cè)塊添加到導(dǎo)數(shù)殘差以創(chuàng)建可與編碼器400中的重構(gòu)階段414創(chuàng)建的塊相同的重構(gòu)塊。在一些實(shí)施方式中,環(huán)路濾波階段512可以應(yīng)用于重構(gòu)塊以減少塊偽影。后處理級(jí)可以應(yīng)用于重構(gòu)塊以進(jìn)一步細(xì)化圖像。在此示例中,解塊濾波階段514可應(yīng)用于重構(gòu)塊以減少塊失真,且所述結(jié)果被輸出為輸出視頻流516。輸出視頻流516還可被稱為解碼視頻流,且術(shù)語(yǔ)在本文中可互換使用。
解碼器500的其它變型可以用于對(duì)壓縮比特流420進(jìn)行解碼。例如,解碼器500可以在沒(méi)有諸如解塊濾波階段514的后處理的情況下產(chǎn)生輸出視頻流516。
圖6是根據(jù)本公開的方面的用于對(duì)視頻流進(jìn)行編碼的過(guò)程600的流程圖。在該示例中,視頻流首先使用幀間預(yù)測(cè)對(duì)塊進(jìn)行編碼,然后其次對(duì)具有至少一個(gè)使用幀間預(yù)測(cè)編碼的子塊和至少一個(gè)使用幀內(nèi)預(yù)測(cè)編碼的子塊的塊進(jìn)行編碼,最后使用幀內(nèi)預(yù)測(cè)。過(guò)程600可在編碼器(例如編碼器400)中實(shí)現(xiàn)以實(shí)現(xiàn)預(yù)測(cè)模式塊排序以編碼視頻流。過(guò)程600可以被實(shí)現(xiàn)為例如由諸如發(fā)送站102或接收站106的計(jì)算設(shè)備執(zhí)行的軟件程序。軟件程序可以包括存儲(chǔ)在諸如存儲(chǔ)器204的存儲(chǔ)器中的機(jī)器可讀指令,其在由諸如cpu202的處理器執(zhí)行時(shí)使得計(jì)算設(shè)備執(zhí)行過(guò)程600。
過(guò)程600可以使用專用硬件或固件來(lái)實(shí)現(xiàn)。一些計(jì)算設(shè)備可以具有多個(gè)存儲(chǔ)器、多個(gè)處理器或兩者。過(guò)程600的操作可以使用不同的處理器、存儲(chǔ)器或兩者來(lái)分布。本文中單數(shù)形式的術(shù)語(yǔ)“處理器”和“存儲(chǔ)器”的使用包括僅具有一個(gè)處理器或一個(gè)存儲(chǔ)器的計(jì)算設(shè)備以及具有可用于執(zhí)行所述操作中的一些或全部的多個(gè)處理器或存儲(chǔ)器的設(shè)備。然而,根據(jù)本公開的操作可以以各種次序和/或同時(shí)發(fā)生。另外,根據(jù)本公開的操作可以與本文中未呈現(xiàn)和描述的其它操作一起發(fā)生。此外,并非所有示出的操作都可能需要用于實(shí)施方式根據(jù)所公開的主題的方法。
過(guò)程600假定具有多個(gè)幀(每個(gè)幀具有多個(gè)塊)的視頻數(shù)據(jù)流正使用例如在例如發(fā)送站102的計(jì)算裝置上執(zhí)行的編碼器400的視頻編碼器來(lái)編碼。視頻數(shù)據(jù)或流可以由計(jì)算設(shè)備以任何數(shù)量的方式接收,諸如通過(guò)在網(wǎng)絡(luò)上、通過(guò)電纜接收視頻數(shù)據(jù),或者通過(guò)從主存儲(chǔ)器或其它存儲(chǔ)設(shè)備(包括磁盤驅(qū)動(dòng)器或可移動(dòng)介質(zhì),諸如壓縮閃存(cf)卡、安全數(shù)字(sd)卡或能夠傳送視頻數(shù)據(jù)的任何其它設(shè)備)讀取視頻數(shù)據(jù)??梢詮倪B接到操作編碼器的計(jì)算設(shè)備的視頻相機(jī)接收視頻數(shù)據(jù)。
在操作602,在視頻流的幀中識(shí)別多個(gè)塊,例如大的64×64像素塊。識(shí)別可以指以任何方式選擇、挑選、確定或以其它方式識(shí)別。多個(gè)塊中的任何塊可以被進(jìn)一步分區(qū)并遞歸地分區(qū)成更小的子塊。當(dāng)塊被分區(qū)成較小的組的塊時(shí),處理次序首先基于深度,使得較小的較低級(jí)塊在處理較大的較高級(jí)塊之前被處理和完成。基于從最低級(jí)到最高級(jí)的深度,以掃描次序處理每個(gè)級(jí)的塊,在下一級(jí)的大塊之前處理大塊內(nèi)的較小子塊。在幀級(jí),大塊仍然可以使用光柵掃描次序,其中每個(gè)級(jí)的塊被布置成行和列的矩形陣列,并且陣列的塊從從左上角開始一次訪問(wèn)一個(gè),并且從頂行開始并向下移動(dòng)按行次序訪問(wèn),以獲得更好的緩存效率。
在操作604,使用幀間預(yù)測(cè)來(lái)從多個(gè)塊中識(shí)別要編碼的第一組塊。如上所述,參考圖4和圖5,幀間預(yù)測(cè)包括使用來(lái)自另一幀的像素?cái)?shù)據(jù)來(lái)預(yù)測(cè)塊中的像素?cái)?shù)據(jù)。在一些實(shí)施方式中,通過(guò)基于幀的掃描次序中從最低級(jí)到最高級(jí)的深度檢查幀中的塊來(lái)識(shí)別第一組塊。使用幀間預(yù)測(cè)編碼的每個(gè)塊和包括多個(gè)子塊的每個(gè)塊(其中每個(gè)子塊將使用幀間預(yù)測(cè)來(lái)編碼)被添加到第一組塊。
在操作606,從多個(gè)塊中識(shí)別第二組塊??梢曰诘谝唤M中的塊的相同掃描次序中從最低級(jí)到最高級(jí)的深度在幀中識(shí)別第二組塊。也就是說(shuō),當(dāng)以幀的掃描次序檢查幀中的塊時(shí),包括具有至少一個(gè)要使用幀間預(yù)測(cè)編碼的子塊和至少一個(gè)要使用幀內(nèi)預(yù)測(cè)編碼的子塊的多個(gè)子塊的每個(gè)塊可以被添加到第二組塊。
在操作608,從多個(gè)塊中識(shí)別要使用幀內(nèi)預(yù)測(cè)來(lái)編碼的第三組塊??梢曰谂c第一組相同的塊的掃描次序中從最低級(jí)到最高級(jí)的深度,在幀中識(shí)別第三組塊。也就是說(shuō),當(dāng)以幀的掃描次序檢查幀中的塊時(shí),使用幀內(nèi)預(yù)測(cè)來(lái)編碼的每個(gè)塊和包括多個(gè)子塊的每個(gè)塊(其中每個(gè)子塊將使用幀內(nèi)預(yù)測(cè)來(lái)編碼)被添加到第三組塊。因此,可以在對(duì)幀的塊的單次掃描期間,通過(guò)分析用于最優(yōu)預(yù)測(cè)模式的掃描次序的塊并且一旦選擇了最優(yōu)預(yù)測(cè)模式則將塊分類成組來(lái)執(zhí)行操作604、606和608。
可以通過(guò)嘗試不同的預(yù)測(cè)模式并比較結(jié)果來(lái)確定哪個(gè)預(yù)測(cè)模式要用于塊。例如,可以比較用于各種預(yù)測(cè)模式的所得殘差塊的絕對(duì)差的和??梢詾榻o定塊選擇具有最小速率失真成本的預(yù)測(cè)模式。注意,雖然一般將幀間預(yù)測(cè)描述為使用另一幀的塊來(lái)預(yù)測(cè)當(dāng)前幀的塊,但本發(fā)明考慮可通過(guò)使用運(yùn)動(dòng)向量和當(dāng)前幀內(nèi)的另一塊來(lái)使用當(dāng)前幀內(nèi)的幀間預(yù)測(cè)來(lái)編碼當(dāng)前塊。當(dāng)塊未被進(jìn)一步分區(qū)時(shí)或者當(dāng)塊包括多個(gè)子塊時(shí),這樣的塊將被包括在第一組塊內(nèi),其中每個(gè)子塊將使用幀間預(yù)測(cè)來(lái)編碼。作為識(shí)別操作604、606和608的一部分而被測(cè)試的幀內(nèi)預(yù)測(cè)模式可以被限制為通常用于幀的掃描次序的幀內(nèi)預(yù)測(cè)模式。
在下一操作610,第一組塊至少部分地被編碼。通常,這種部分編碼是有損的,意味著反轉(zhuǎn)編碼操作將不會(huì)導(dǎo)致與輸入完全相同的像素值。如圖所示,參考圖4,例如,對(duì)視頻數(shù)據(jù)塊進(jìn)行編碼可以包括:形成預(yù)測(cè)塊,在這種情況下使用運(yùn)動(dòng)矢量從另一幀或當(dāng)前幀開始;從要編碼的塊中減去預(yù)測(cè)塊;使用變換來(lái)變換塊;然后量化變換數(shù)據(jù)。第一組塊的編碼可以基于從最低級(jí)到最高級(jí)的深度以掃描次序發(fā)生,跳過(guò)屬于第二組塊和第三組塊的那些塊。來(lái)自第一組塊的部分編碼塊也可以稱為編碼塊。
在操作612,通過(guò)反轉(zhuǎn)編碼的有損操作來(lái)部分地解碼由第一組塊產(chǎn)生的編碼塊。在該示例中,這涉及對(duì)參考圖4的重構(gòu)環(huán)路描述的使用幀間預(yù)測(cè)生成的預(yù)測(cè)塊進(jìn)行去量化、逆變換和將逆變換塊相加。這產(chǎn)生等于當(dāng)稍后在解碼器處對(duì)塊進(jìn)行解碼時(shí)形成的像素?cái)?shù)據(jù)的像素?cái)?shù)據(jù)。例如,編碼器可以在完成要包括在輸出視頻比特流中的塊的編碼之前在執(zhí)行過(guò)程600中的剩余操作的同時(shí),維持存儲(chǔ)器中的部分編碼塊的副本。
在下一操作614處,在對(duì)第一組塊進(jìn)行編碼之后,至少部分地對(duì)使用來(lái)自第二組塊的幀間預(yù)測(cè)進(jìn)行編碼的至少一個(gè)子塊進(jìn)行編碼。類似地,如上關(guān)于第一組塊所描述的,第二組塊的編碼可以基于從最低級(jí)到最高級(jí)的深度以掃描次序發(fā)生,跳過(guò)屬于使用幀內(nèi)預(yù)測(cè)來(lái)編碼的第二組塊的子塊和屬于第三組塊的塊。來(lái)自第二組塊的部分編碼塊也可以稱為編碼塊。
在操作616,通過(guò)反轉(zhuǎn)編碼的有損操作來(lái)部分地解碼由第二組塊產(chǎn)生的幀間預(yù)測(cè)的編碼塊。類似地,如上關(guān)于第一組塊所描述的,這產(chǎn)生等于當(dāng)隨后在解碼器處對(duì)塊進(jìn)行解碼時(shí)形成的像素?cái)?shù)據(jù)的像素?cái)?shù)據(jù)。例如,編碼器可以在完成要包括在輸出視頻比特流中的塊的編碼之前在執(zhí)行過(guò)程600中的剩余操作的同時(shí),維持存儲(chǔ)器中的部分編碼塊的副本。
在操作618,在對(duì)第一組塊進(jìn)行編碼之后,使用幀內(nèi)預(yù)測(cè)和部分編碼和解碼的第一組塊的至少一個(gè)或來(lái)自第二組塊的使用幀間預(yù)測(cè)的部分編碼和解碼的子塊的至少一個(gè)來(lái)對(duì)來(lái)自第二組塊的至少一個(gè)塊進(jìn)行編碼。幀內(nèi)預(yù)測(cè)使用來(lái)自塊周圍的塊的像素來(lái)預(yù)測(cè)當(dāng)前塊內(nèi)的像素值。在對(duì)要使用幀間預(yù)測(cè)編碼的第一組塊或第二組塊中的一些或所有塊進(jìn)行編碼和解碼之后,可以基于從最低級(jí)到最高級(jí)的深度的掃描次序來(lái)執(zhí)行該處理。如上所述,具有來(lái)自幀間預(yù)測(cè)塊的編碼和解碼結(jié)果可以通過(guò)允許在編碼過(guò)程中包括附加預(yù)測(cè)模式來(lái)提高幀內(nèi)預(yù)測(cè)編碼塊的性能。因此,操作618可以包括使用幀內(nèi)預(yù)測(cè)對(duì)要編碼的每個(gè)塊重新計(jì)算最優(yōu)幀內(nèi)預(yù)測(cè)模式選擇。如果以基于從最低級(jí)到最高級(jí)的深度的掃描次序或者在替選實(shí)施方式中以預(yù)定義編碼次序?qū)λ袎K進(jìn)行編碼,這些幀內(nèi)預(yù)測(cè)模式中的一些可以使用來(lái)自在當(dāng)前塊之后已經(jīng)被編碼的幀間編碼塊的信息。結(jié)果,由于幀間編碼塊已經(jīng)被處理,當(dāng)前塊的幀內(nèi)編碼可利用來(lái)自在當(dāng)前塊之后已經(jīng)被先前編碼的幀間編碼塊的經(jīng)重構(gòu)的像素值。這些重構(gòu)的像素值的可用性可有助于在使用幀內(nèi)預(yù)測(cè)模式時(shí)改進(jìn)預(yù)測(cè)質(zhì)量,因此提高視頻幀的整體編碼效率。
在操作620,在編碼第一組塊和第二組塊之后,使用幀內(nèi)預(yù)測(cè)和部分編碼和解碼的第一組塊中的至少一個(gè)或來(lái)自第二組塊的使用幀間預(yù)測(cè)的部分編碼和解碼的子塊的至少一個(gè)對(duì)第三組塊進(jìn)行編碼。如上所述,在第一組塊或第二組塊中的一些或所有塊被編碼和解碼之后,可以以基于從最低級(jí)到最高級(jí)的深度的掃描次序來(lái)執(zhí)行該處理。
通過(guò)將要編碼的當(dāng)前幀的塊劃分為三組塊,第一組包括要使用幀間預(yù)測(cè)編碼的塊和以及具有其中每個(gè)子塊將使用幀間預(yù)測(cè)編碼的子塊的塊,第二組包括具有至少一個(gè)要使用幀間預(yù)測(cè)編碼的子塊和至少一個(gè)要使用幀內(nèi)預(yù)測(cè)編碼的子塊的塊,第三組包括要使用幀內(nèi)預(yù)測(cè)編碼的塊和具有其中每個(gè)子塊將使用幀內(nèi)預(yù)測(cè)來(lái)編碼的子塊的塊,可以操縱對(duì)塊進(jìn)行編碼的次序,以對(duì)幀內(nèi)編碼塊提供更好的預(yù)測(cè),并且因此提高編碼效率。編碼塊的次序由過(guò)程600操縱以在第二組塊之前對(duì)第一組塊進(jìn)行編碼,并且在第三組塊之前對(duì)第二組塊進(jìn)行編碼。
更具體地,并且如上面關(guān)于圖4和5所述,幀內(nèi)預(yù)測(cè)包括使用來(lái)自要編碼的塊的周邊塊的像素?cái)?shù)據(jù)來(lái)預(yù)測(cè)塊中的像素值。用于形成預(yù)測(cè)塊的塊在用于預(yù)測(cè)之前經(jīng)常被編碼和解碼。也就是說(shuō),因?yàn)榫幋a和解碼可以是有損操作,所以編碼和解碼塊中的像素值將不會(huì)精確地等于原始?jí)K的像素值。通過(guò)在將塊用作預(yù)測(cè)塊以預(yù)測(cè)另一塊之前對(duì)塊進(jìn)行編碼和解碼,編碼器可使用解碼器將用于幀內(nèi)預(yù)測(cè)相同塊的相同像素值。在以光柵掃描次序進(jìn)行編碼的情況下,例如,幀內(nèi)預(yù)測(cè)通常僅使用來(lái)自當(dāng)前塊的上方和左側(cè)的像素來(lái)形成預(yù)測(cè)塊。這種布置保證了在要被預(yù)測(cè)的塊之前出現(xiàn)的塊的像素?cái)?shù)據(jù)在被用于預(yù)測(cè)之前已經(jīng)被至少部分地編碼和解碼。
根據(jù)本文的教導(dǎo),編碼器可以首先對(duì)第一組塊進(jìn)行編碼。來(lái)自第一組塊的這些幀間預(yù)測(cè)塊然后可以被解碼以形成重構(gòu)的或解碼的塊,其可以用于使用第二組塊中的幀內(nèi)預(yù)測(cè)進(jìn)行編碼的塊的幀內(nèi)預(yù)測(cè)以及用于第三組塊的幀內(nèi)預(yù)測(cè)。類似地,編碼器可其次使用來(lái)自第二組塊的幀間預(yù)測(cè)來(lái)對(duì)塊進(jìn)行編碼。來(lái)自第二組塊的這些幀間預(yù)測(cè)塊然后可以被解碼以形成重構(gòu)的或解碼的塊,其可以用于使用第二組塊中的幀內(nèi)預(yù)測(cè)來(lái)編碼的塊的幀內(nèi)預(yù)測(cè)以及用于第三組塊的幀內(nèi)預(yù)測(cè)。以此方式,可使用相對(duì)于當(dāng)前塊的任何位置中的塊來(lái)擴(kuò)展第二組塊和第三組塊中的那些塊的幀內(nèi)預(yù)測(cè)模式以包括幀內(nèi)預(yù)測(cè)模式,其中當(dāng)前塊的至少一些塊(即,以掃描次序中較早的幀內(nèi)編碼塊和幀間編碼塊)已經(jīng)被編碼和解碼用于預(yù)測(cè)。
圖8可以用來(lái)解釋這個(gè)過(guò)程。圖8是根據(jù)本發(fā)明的方面的要編碼或解碼的幀800中的塊的圖。在該示例中,幀800表示被分區(qū)為四個(gè)32×32像素塊a、b、c和d的64×64像素塊。塊a被進(jìn)一步分區(qū)為四個(gè)16×16像素塊a0、a1、a2和a3。塊a3進(jìn)一步分區(qū)為四個(gè)4×4像素塊a30、a31、a32和a33。編碼器400處理每個(gè)塊以為每個(gè)塊選擇預(yù)測(cè)模式。每個(gè)大塊或小塊可以在編碼過(guò)程中使用幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)。編碼器400基于按照掃描次序從最低級(jí)到最高級(jí)的塊的分區(qū)的深度來(lái)處理每個(gè)塊,使得首先處理塊a30、a31、a32和a33,接著是塊a0、a1、a2和a3,其次是塊a、b、c和d。
編碼器400基于在編碼和解碼塊中使用的預(yù)測(cè)模式來(lái)排序每個(gè)塊,在處理較大塊之前在大塊內(nèi)的每個(gè)級(jí)處理較小的子塊。編碼器400將塊分類為三個(gè)組。第一組塊包括要使用幀間預(yù)測(cè)編碼的塊和遞歸地分割為子塊的塊,其中每個(gè)子塊將使用幀間預(yù)測(cè)來(lái)編碼。第二組塊包括被遞歸地分割為子塊的塊,其中該塊的至少一個(gè)子塊將使用幀間預(yù)測(cè)來(lái)編碼,并且該塊的至少一個(gè)子塊要使用幀內(nèi)預(yù)測(cè)來(lái)編碼。第三組塊包括要使用幀內(nèi)預(yù)測(cè)編碼的塊和遞歸地分割為子塊的塊,其中每個(gè)子塊將使用幀內(nèi)預(yù)測(cè)進(jìn)行編碼。
為了用于解釋圖6的過(guò)程的說(shuō)明的目的,圖8的塊a0、a32和c被確定為使用幀內(nèi)預(yù)測(cè)編碼,而剩余的塊被確定為使用幀間預(yù)測(cè)編碼。在該示例中,在4×4像素級(jí),第一組塊包括塊a30、a31和a33,第二組塊包括塊a32。在16×16像素級(jí),第一組塊包括塊a1和a2,第二組塊包括塊a3,第三組塊包括塊a0。在32×32像素級(jí)、第一組塊包括塊b和d,第二組塊包括塊a,第三組塊包括塊c。
使用為每個(gè)塊確定的預(yù)測(cè)模式,根據(jù)每個(gè)級(jí)的組分類來(lái)處理和編碼塊,其中首先處理第一組塊,第二處理第二組塊,并且最后處理第三組塊,根據(jù)從最低級(jí)到最高級(jí)減小的深度處理級(jí)。幀內(nèi)預(yù)測(cè)塊可使用來(lái)自幀間預(yù)測(cè)塊的重構(gòu)像素值。在圖8所示的示例中,以塊a30、a31、a33和a32的次序處理和編碼4×4像素級(jí)塊,以a1、a2、a3和a0的次序處理和編碼16×16像素級(jí)塊,并且以b、d、a和c的次序處理和編碼32×32像素級(jí)塊。然后,熵編碼的、量化的殘差塊可以被打包成視頻比特流以用于傳輸或存儲(chǔ)和隨后的解碼。預(yù)測(cè)模式也可以被熵編碼并且作為壓縮數(shù)據(jù)的一部分被包括。無(wú)需對(duì)排序定義進(jìn)行編碼或傳輸。
圖7是根據(jù)本發(fā)明的另一方面的用于對(duì)視頻比特流進(jìn)行解碼的過(guò)程700的流程圖。廣泛地,在過(guò)程700中,使用幀間預(yù)測(cè)對(duì)視頻比特流的第一組塊進(jìn)行解碼,使用幀間預(yù)測(cè)或幀內(nèi)預(yù)測(cè)對(duì)視頻比特流的第二組塊進(jìn)行解碼,然后使用幀內(nèi)預(yù)測(cè)對(duì)第三組塊解碼。根據(jù)所公開的實(shí)施方式的方面,過(guò)程700可以在諸如解碼器500的解碼器中實(shí)現(xiàn)。過(guò)程700可以被實(shí)現(xiàn)為例如由諸如發(fā)送站102或接收站106的計(jì)算設(shè)備執(zhí)行的軟件程序。軟件程序可以包括存儲(chǔ)在諸如存儲(chǔ)器204存儲(chǔ)器中的機(jī)器可讀指令,其在由諸如cpu202的處理器執(zhí)行時(shí)使得計(jì)算設(shè)備執(zhí)行過(guò)程700。過(guò)程700還可以使用硬件來(lái)實(shí)現(xiàn)。如上所述,一些計(jì)算設(shè)備可以具有多個(gè)存儲(chǔ)器和多個(gè)處理器,并且在這種情況下,過(guò)程700的操作可以使用不同的處理器和存儲(chǔ)器來(lái)分布。
為了簡(jiǎn)化說(shuō)明,將過(guò)程700描繪和描述為一系列操作。然而,根據(jù)本公開的操作可以以各種次序和/或同時(shí)發(fā)生。另外,根據(jù)本公開的操作可以與本文未呈現(xiàn)和描述的其它操作一起發(fā)生。此外,并非所有示出的操作都可能被需要用于實(shí)現(xiàn)根據(jù)所公開的主題的方法。
在操作702,過(guò)程700識(shí)別可以使用幀間預(yù)測(cè)解碼的第一組編碼塊,第一組編碼塊包括使用幀間預(yù)測(cè)編碼的塊或包括多個(gè)子塊的塊,其中每個(gè)子塊使用幀間預(yù)測(cè)來(lái)編碼。在操作704,過(guò)程700識(shí)別可使用幀間預(yù)測(cè)或幀內(nèi)預(yù)測(cè)來(lái)解碼的第二組編碼塊,第二組編碼塊包括具有多個(gè)子塊的塊,其中至少一個(gè)子塊使用幀間預(yù)測(cè)來(lái)編碼,并且至少一個(gè)子塊使用幀內(nèi)預(yù)測(cè)來(lái)編碼。在操作706,過(guò)程700識(shí)別可使用幀內(nèi)預(yù)測(cè)來(lái)解碼的第三組編碼塊,第三組編碼塊包括使用幀內(nèi)預(yù)測(cè)編碼的塊或包括多個(gè)子塊的塊,其中每個(gè)子塊使用幀內(nèi)預(yù)測(cè)編碼。如上面關(guān)于圖6所討論的,可以以基于從最低級(jí)到最高級(jí)的深度的掃描次序識(shí)別幀的塊,掃描次序例如可以是光柵掃描次序或另一掃描次序。在該示例中,解碼器可以執(zhí)行報(bào)頭信息的熵解碼以產(chǎn)生每個(gè)塊的預(yù)測(cè)模式。然后根據(jù)所使用的預(yù)測(cè)模式將所有塊分組成三個(gè)組。因此,操作702、704和706可以作為一個(gè)操作執(zhí)行。
例如,在對(duì)塊進(jìn)行編碼時(shí),可以由編碼器使用在視頻比特流中包括的比特來(lái)識(shí)別可以使用每種預(yù)測(cè)方法解碼的塊。這些比特由編碼器包括在編碼視頻比特流中以指導(dǎo)解碼器關(guān)于使用哪一預(yù)測(cè)模式。結(jié)果,塊可以被分類成用于解碼的組,而不需要視頻比特流中除了通常包括以識(shí)別預(yù)測(cè)模式的比特之外的的附加比特。
在操作708,使用幀間預(yù)測(cè)對(duì)第一組塊進(jìn)行解碼。例如,每個(gè)熵解碼的殘差塊被逆變換和去量化以形成殘差塊。解碼器使用幀間預(yù)測(cè)產(chǎn)生用于當(dāng)前塊的預(yù)測(cè)塊,且通過(guò)將預(yù)測(cè)塊添加到殘差塊來(lái)重構(gòu)當(dāng)前塊,如關(guān)于圖5所描述??梢砸曰趶淖畹图?jí)到最高級(jí)的深度的幀的掃描次序?qū)Φ谝唤M塊進(jìn)行解碼。掃描次序可以是光柵掃描次序或其它掃描次序(z字形等)。
在操作710,使用幀間預(yù)測(cè)對(duì)來(lái)自第二組編碼塊中的至少一個(gè)塊進(jìn)行解碼,其中使用幀間預(yù)測(cè)對(duì)來(lái)自第二組編碼塊中的至少一個(gè)塊進(jìn)行編碼。如關(guān)于操作708所描述,每一熵解碼的殘差塊被逆變換和去量化以形成殘差塊。解碼器使用幀間預(yù)測(cè)產(chǎn)生用于當(dāng)前塊的預(yù)測(cè)塊,且通過(guò)將預(yù)測(cè)塊添加到殘差塊來(lái)重構(gòu)當(dāng)前塊,如關(guān)于圖5所描述。在操作710中來(lái)自第二組編碼塊的至少一個(gè)塊可以基于以從最低級(jí)到最高級(jí)的深度的幀的掃描次序被解碼。
在操作712,使用幀內(nèi)預(yù)測(cè)來(lái)解碼來(lái)自第二組編碼塊中的至少一個(gè)塊,其中使用幀內(nèi)預(yù)測(cè)對(duì)來(lái)自第二組編碼塊中的至少一個(gè)塊進(jìn)行編碼,并且根據(jù)幀內(nèi)預(yù)測(cè)模式,使用幀間預(yù)測(cè)來(lái)解碼來(lái)自第一組塊和第二組塊的塊。例如,每個(gè)熵解碼的殘差塊被逆變換和去量化以形成殘差塊。解碼器使用幀內(nèi)預(yù)測(cè)產(chǎn)生用于當(dāng)前塊的預(yù)測(cè)塊,且通過(guò)如關(guān)于圖5所描述,將預(yù)測(cè)塊添加到殘差塊來(lái)重構(gòu)當(dāng)前塊。在操作712中來(lái)自第二組編碼塊的至少一個(gè)塊可以以基于從最低級(jí)到最高級(jí)的深度的幀的掃描次序(例如,光柵掃描次序)來(lái)解碼。
在操作714,使用幀內(nèi)預(yù)測(cè)來(lái)解碼第三組編碼塊,且取決于幀內(nèi)預(yù)測(cè)模式,使用幀間預(yù)測(cè)來(lái)解碼來(lái)自第一組塊和第二組的塊。例如,每個(gè)熵解碼的殘差塊被逆變換和去量化以形成殘差塊。解碼器使用幀內(nèi)預(yù)測(cè)產(chǎn)生用于當(dāng)前塊的預(yù)測(cè)塊,且通過(guò)將預(yù)測(cè)塊添加到殘差塊來(lái)重構(gòu)當(dāng)前塊,如關(guān)于圖5所描述??梢砸曰趶淖畹图?jí)到最高級(jí)的深度的幀的掃描次序?qū)Φ谌M編碼塊進(jìn)行解碼。
在該示例中,根據(jù)從最低級(jí)到最高級(jí)的塊的深度(其中,在下一級(jí)的較大塊之前處理每個(gè)級(jí)處的較小子塊)以及關(guān)于所述編碼器所描述的所述次序分類來(lái)執(zhí)行塊的處理,首先處理包含使用幀間預(yù)測(cè)而編碼的塊及具有使用幀間預(yù)測(cè)編碼的塊的每一子塊的遞歸地分割的塊的所述第一組塊,然后處理包括遞歸分區(qū)塊(其具有使用幀間預(yù)測(cè)編碼的塊的至少一個(gè)子塊和使用幀內(nèi)預(yù)測(cè)編碼的塊的至少一個(gè)子塊)的第二組塊,然后處理包括使用幀內(nèi)預(yù)測(cè)編碼的塊和遞歸分區(qū)的塊(具有最后使用幀內(nèi)預(yù)測(cè)編碼的塊的每個(gè)子塊)的第三組塊。在其它情況下,塊的處理可以根據(jù)另一個(gè)預(yù)定義的掃描次序,并且這種次序的選擇可以被編碼,使得解碼器可以以相同的次序處理塊。除了預(yù)定義的掃描次序之外,不需要編碼或傳輸排序定義。
根據(jù)本文的教導(dǎo),幀內(nèi)預(yù)測(cè)塊可使用來(lái)自幀間預(yù)測(cè)塊的重構(gòu)像素值,即使那些幀間預(yù)測(cè)塊以正常掃描次序在其之后被編碼/解碼。通過(guò)基于塊的預(yù)測(cè)模式對(duì)塊的編碼和解碼重新排序,編碼器可以有效地改變編碼/解碼過(guò)程中的塊的數(shù)據(jù)依賴性。以此方式,幀中稍后編碼的塊可以使用來(lái)自先前編碼塊的所有重構(gòu)像素信息,以提高預(yù)測(cè)的質(zhì)量,因此提高編碼效率。
上文所描述的編碼和解碼的方面圖解說(shuō)明編碼和一些解碼技術(shù)。然而,應(yīng)當(dāng)理解,作為權(quán)利要求中使用的那些術(shù)語(yǔ)的編碼和解碼可以意味著數(shù)據(jù)的壓縮、解壓縮、變換或任何其它處理或變化。
詞語(yǔ)“示例”在本文中用于表示用作示例、實(shí)例或說(shuō)明。在本文中被描述為“示例”的任何方面或設(shè)計(jì)不一定被解釋為相對(duì)于其它方面或設(shè)計(jì)是優(yōu)選的或有利的。相反,使用詞語(yǔ)“示例”旨在以具體的方式呈現(xiàn)概念。如本申請(qǐng)中所使用的,術(shù)語(yǔ)“或”旨在表示包括性的“或”而不是排他性的“或”。也就是說(shuō),除非另有規(guī)定或從上下文中清楚,以其它方式“x包括a或b”意在表示任何自然的包括性排列。也就是說(shuō),如果x包括a;x包括b;或x包括a和b兩者,則在任何前述情況下滿足“x包括a或b”。此外,除非另有說(shuō)明或從上下文中清楚地指示單數(shù)形式,否則本申請(qǐng)和所附權(quán)利要求中使用的冠詞“a”和“an”通常應(yīng)被解釋為意指“一個(gè)或多個(gè)”。此外,貫穿全文使用術(shù)語(yǔ)“實(shí)施方式”或“方面”并不旨在表示相同的實(shí)施例或?qū)嵤┓绞剑沁@樣描述。
發(fā)送站102和/或接收站106(以及其上存儲(chǔ)的和/或由其執(zhí)行的算法、方法、指令等等,包括由編碼器400和解碼器500)的實(shí)施方式可以以在硬件、軟件或其任何組合實(shí)現(xiàn)。硬件可以包括例如計(jì)算機(jī)、知識(shí)產(chǎn)權(quán)(ip)核、專用集成電路(asic)、可編程邏輯陣列、光學(xué)處理器、可編程邏輯控制器、微代碼、微控制器、服務(wù)器、微處理器、數(shù)字信號(hào)處理器或任何其它合適的電路。在權(quán)利要求中,術(shù)語(yǔ)“處理器”應(yīng)當(dāng)被理解為單獨(dú)地或組合地包括任何前述硬件。術(shù)語(yǔ)“信號(hào)”和“數(shù)據(jù)”可互換使用。此外,發(fā)送站102和接收站106的部分不一定必須以相同的方式實(shí)現(xiàn)。
此外,在一個(gè)方面,例如,發(fā)送站102或接收站106可以使用具有計(jì)算機(jī)程序的通用計(jì)算機(jī)或通用處理器來(lái)實(shí)現(xiàn),所述計(jì)算機(jī)程序在被執(zhí)行時(shí)執(zhí)行任何相應(yīng)的方法、算法和/或指令。附加地或替選地,例如,可以使用可以包含用于執(zhí)行本文所述的任何方法、算法或指令的其它硬件的專用計(jì)算機(jī)/處理器。
發(fā)送站102和接收站106可以例如在視頻會(huì)議系統(tǒng)中的計(jì)算機(jī)上實(shí)現(xiàn)。替選地,發(fā)送站102可以在服務(wù)器上實(shí)現(xiàn),并且接收站106可以在與服務(wù)器分離的設(shè)備上實(shí)現(xiàn),諸如手持通信設(shè)備。在這種情況下,發(fā)送站102可以使用編碼器400將內(nèi)容編碼為編碼視頻信號(hào),并將編碼視頻信號(hào)發(fā)送到通信設(shè)備。繼而,通信設(shè)備然后可以使用解碼器500對(duì)編碼的視頻信號(hào)進(jìn)行解碼。替選地,通信設(shè)備可以解碼在通信設(shè)備上本地存儲(chǔ)的內(nèi)容,例如,未由發(fā)送站102發(fā)送的內(nèi)容。其它合適的發(fā)送站102和接收站106實(shí)施方式是可用的。例如,接收站106可以是通常固定的個(gè)人計(jì)算機(jī)而不是便攜式通信設(shè)備,和/或,包括編碼器400的設(shè)備還可以包括解碼器500。
此外,本公開的實(shí)施方式的全部或一部分可以采用可從例如有形計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)訪問(wèn)的計(jì)算機(jī)程序產(chǎn)品的形式。計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是能夠例如有形地包含、存儲(chǔ)、傳送或傳輸由任何處理器使用或與任何處理器結(jié)合使用的程序的任何設(shè)備。介質(zhì)可以是例如電子、磁性、光學(xué)、電磁或半導(dǎo)體器件。也可使用其它合適的介質(zhì)。
已經(jīng)描述了上述實(shí)施例、實(shí)施方式和方面以便于容易理解本公開,并且不限制本公開。相反,本公開旨在覆蓋包括在所附權(quán)利要求的范圍內(nèi)的各種修改和等同布置,其范圍符合最寬泛的解釋,以包括法律允許的所有這樣的修改和等同結(jié)構(gòu)。
在以下編號(hào)的條款中提供本發(fā)明的實(shí)施例:
條款1.一種對(duì)視頻流進(jìn)行編碼的方法,包括:
使用執(zhí)行幀間預(yù)測(cè)的處理器至少部分地編碼第一組塊以形成第一組編碼塊,所述第一組塊位于所述視頻流的當(dāng)前幀內(nèi);
使用所述處理器至少部分地解碼所述第一組編碼塊以形成第一組解碼塊;
在對(duì)所述第一組塊進(jìn)行部分編碼之后,使用執(zhí)行幀間預(yù)測(cè)的所述處理器至少部分地編碼第二組塊,以形成第二組幀間預(yù)測(cè)編碼塊;
使用所述處理器至少部分地解碼所述第二組幀間預(yù)測(cè)編碼塊以形成第二組幀間預(yù)測(cè)解碼塊;
在所述第二組塊包括至少一個(gè)塊的條件下,在部分地編碼所述第一組塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊或所述第二組幀間預(yù)測(cè)解碼塊的至少一個(gè)的至少一個(gè)塊來(lái)編碼來(lái)自所述第二組塊的至少一個(gè)塊,以形成第二組幀內(nèi)預(yù)測(cè)編碼塊;和
將所述第一組編碼塊、所述第二組幀間預(yù)測(cè)編碼塊和所述第二組幀內(nèi)預(yù)測(cè)編碼塊插入到編碼比特流中。
條款2.根據(jù)條款1所述的方法,還包括:
在第三組塊包括至少一個(gè)塊的條件下,在部分地編碼所述第一組塊且編碼所述第二組塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)的至少一個(gè)塊來(lái)編碼所述第三組塊,以形成第三組編碼塊;和
將所述第三組編碼塊插入到所述編碼比特流中。
條款3.根據(jù)條款2所述的方法,還包括:
以掃描次序處理所述幀的多個(gè)塊,以確定每個(gè)塊的預(yù)測(cè)模式;和
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀內(nèi)預(yù)測(cè)或所述塊包括多個(gè)子塊且其中每個(gè)子塊使用幀內(nèi)預(yù)測(cè)的條件下,將所述塊分配給所述第三組塊。
條款4.根據(jù)條款3所述的方法,還包括:
通過(guò)以下步驟確定每個(gè)塊的預(yù)測(cè)模式:
對(duì)多個(gè)預(yù)測(cè)模式中的每一個(gè),對(duì)當(dāng)前塊計(jì)算殘差塊;和
基于所述多個(gè)預(yù)測(cè)模式來(lái)選擇導(dǎo)致最小速率失真成本的所述當(dāng)前塊的預(yù)測(cè)模式。
條款5.根據(jù)條款3或4所述的方法,還包括:
通過(guò)以下步驟確定每個(gè)子塊的預(yù)測(cè)模式:
對(duì)多個(gè)預(yù)測(cè)模式中的每一個(gè),對(duì)當(dāng)前塊計(jì)算殘差塊;和
基于所述多個(gè)預(yù)測(cè)模式來(lái)選擇導(dǎo)致最小速率失真成本的所述當(dāng)前塊的預(yù)測(cè)模式。
條款6.根據(jù)條款3至5中任一項(xiàng)所述的方法,其中掃描次序首先基于每個(gè)塊的像素的深度或每個(gè)子塊的像素的深度中的至少一個(gè)。
條款7.根據(jù)條款3至5中任一項(xiàng)所述的方法,其中所述掃描次序是光柵掃描次序。
條款8.根據(jù)條款2至7中任一項(xiàng)所述的方法,其中對(duì)所述第三組塊進(jìn)行編碼包括:
從多個(gè)幀內(nèi)預(yù)測(cè)模式中確定所述第三組塊中的當(dāng)前塊的最優(yōu)幀內(nèi)預(yù)測(cè)模式,其中所述多個(gè)幀內(nèi)預(yù)測(cè)模式中的至少一個(gè)包括所述第一組解碼塊中的所述至少一個(gè)塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊的像素;和
使用所述最優(yōu)幀內(nèi)預(yù)測(cè)模式對(duì)所述第三組塊的所述當(dāng)前塊進(jìn)行編碼。
條款9.根據(jù)條款2至8中任一項(xiàng)所述的方法,其中在所述第二組塊被至少部分地編碼之前至少部分地對(duì)所述第一組塊進(jìn)行編碼,并且在對(duì)所述第三組塊進(jìn)行編碼之前至少部分地對(duì)第二組塊進(jìn)行編碼。
條款10.根據(jù)任一前述條款所述的方法,還包括:
以掃描次序處理所述幀的多個(gè)塊,以確定每個(gè)塊的預(yù)測(cè)模式;
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀間預(yù)測(cè)或所述塊包括多個(gè)子塊且其中每個(gè)子塊使用幀間預(yù)測(cè)的條件下,將所述塊分配給所述第一組塊;和
在來(lái)自所述多個(gè)塊的塊包括多個(gè)子塊且其中至少一個(gè)子塊使用幀間預(yù)測(cè)、并且至少一個(gè)子塊使用幀內(nèi)預(yù)測(cè)的條件下,將所述塊分配給所述第二組塊。
條款11.根據(jù)條款10所述的方法,還包括:
通過(guò)以下步驟確定每個(gè)塊的預(yù)測(cè)模式:
對(duì)多個(gè)預(yù)測(cè)模式中的每一個(gè),對(duì)當(dāng)前塊計(jì)算殘差塊;和
基于所述多個(gè)預(yù)測(cè)模式來(lái)選擇導(dǎo)致最小速率失真成本的所述當(dāng)前塊的預(yù)測(cè)模式。
條款12.根據(jù)條款10或11所述的方法,還包括:
通過(guò)以下步驟確定每個(gè)子塊的預(yù)測(cè)模式:
對(duì)多個(gè)預(yù)測(cè)模式中的每一個(gè),對(duì)當(dāng)前塊計(jì)算殘差塊;和
基于所述多個(gè)預(yù)測(cè)模式來(lái)選擇導(dǎo)致最小速率失真成本的所述當(dāng)前塊的預(yù)測(cè)模式。
條款13.根據(jù)條款10至13中任一項(xiàng)所述的方法,其中掃描次序首先基于每個(gè)塊的像素的深度或每個(gè)子塊的像素的深度中的至少一個(gè)。
條款14.根據(jù)條款10至13中任一項(xiàng)所述的方法,其中所述掃描次序是光柵掃描次序。
條款15.根據(jù)任一前述條款所述的方法,其中編碼要使用幀內(nèi)預(yù)測(cè)來(lái)編碼的所述第二組塊包括:
為所述第二組塊的要使用幀內(nèi)預(yù)測(cè)編碼的當(dāng)前塊從多個(gè)幀內(nèi)預(yù)測(cè)模式中確定最優(yōu)幀內(nèi)預(yù)測(cè)模式,其中所述多個(gè)幀內(nèi)預(yù)測(cè)模式中的至少一個(gè)包括所述第一組解碼塊的至少一個(gè)塊或第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊的像素;和
使用所述最優(yōu)幀內(nèi)預(yù)測(cè)模式對(duì)所述第二組塊的所述當(dāng)前塊進(jìn)行編碼。
條款16.一種對(duì)視頻流進(jìn)行解碼的方法,包括:
在第一組編碼塊包括至少一個(gè)塊的條件下,使用執(zhí)行幀間預(yù)測(cè)的處理器來(lái)解碼所述第一組編碼塊以形成第一組解碼塊;
在第二組編碼塊包括至少一個(gè)塊的條件下,在對(duì)所述第一組編碼塊進(jìn)行解碼之后,使用執(zhí)行幀間預(yù)測(cè)的所述處理器,解碼所述第二組編碼塊以形成第二組幀間預(yù)測(cè)解碼塊;和
在所述第二組編碼塊包括至少一個(gè)塊的條件下,在解碼所述第一組編碼塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)的至少一個(gè)塊來(lái)解碼所述第二組解碼塊,以形成第二組幀內(nèi)預(yù)測(cè)解碼塊。
條款17.根據(jù)條款16所述的方法,還包括:
在第三組編碼塊包括至少一個(gè)塊的條件下,在解碼所述第一組編碼塊和所述第二組編碼塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊中的至少一個(gè)或者來(lái)自所述第二組幀間預(yù)測(cè)解碼塊的至少一個(gè)的至少一個(gè)塊來(lái)解碼所述第三組編碼塊,以形成第三組解碼塊。
條款18.根據(jù)條款17所述的方法,還包括:
熵解碼所述視頻比特流以獲得所述幀的多個(gè)塊中的每個(gè)塊的預(yù)測(cè)模式;和
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀內(nèi)預(yù)測(cè)進(jìn)行編碼或者所述塊包括多個(gè)子塊且其中使用幀內(nèi)預(yù)測(cè)對(duì)每個(gè)子塊進(jìn)行編碼的條件下,將所述塊分配給所述第三組編碼塊。
條款19.根據(jù)條款17或18所述的方法,其中在對(duì)所述第二組編碼塊進(jìn)行解碼之前對(duì)所述第一組編碼塊進(jìn)行解碼,并且在對(duì)所述第三組編碼塊進(jìn)行解碼之前對(duì)所述第二組編碼塊進(jìn)行解碼。
條款20.根據(jù)條款16所述的方法,還包括:
熵解碼所述視頻比特流以獲得所述幀的多個(gè)塊中的每個(gè)塊的預(yù)測(cè)模式;
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀間預(yù)測(cè)被編碼或者所述塊包括多個(gè)子塊且其中每個(gè)子塊使用幀間預(yù)測(cè)被編碼的條件下,將所述塊分配給所述第一組編碼塊;和
在來(lái)自所述多個(gè)塊的塊包括多個(gè)子塊且其中至少一個(gè)子塊使用幀間預(yù)測(cè)來(lái)進(jìn)行編碼、并且至少一個(gè)子塊使用幀內(nèi)預(yù)測(cè)來(lái)進(jìn)行編碼的條件下,將所述塊分配給所述第二組編碼塊。
條款21.一種用于對(duì)視頻流進(jìn)行編碼的裝置,包括:
存儲(chǔ)器;和
處理器,所述處理器被配置成執(zhí)行存儲(chǔ)器中的指令以:
在第一組塊包括至少一個(gè)塊的條件下,使用執(zhí)行幀間預(yù)測(cè)的處理器至少部分地編碼所述第一組塊以形成第一組編碼塊;
在所述第一組塊包括至少一個(gè)塊的條件下,至少部分地解碼所述第一組編碼塊以形成第一組解碼塊;
在第二組塊包括至少一個(gè)塊的條件下,在對(duì)所述第一組塊進(jìn)行部分編碼之后,使用幀間預(yù)測(cè)至少部分地編碼所述第二組塊,以形成第二組幀間預(yù)測(cè)編碼塊;
在所述第二組塊包括至少一個(gè)塊的條件下,至少部分地解碼所述第二組幀間預(yù)測(cè)編碼塊以形成第二組幀間預(yù)測(cè)解碼塊;
在所述第二組塊包括至少一個(gè)塊的條件下,在部分地編碼所述第一組塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組的解碼塊或所述第二組的幀間預(yù)測(cè)解碼塊的至少一個(gè)的至少一個(gè)塊來(lái)編碼來(lái)自所述第二組塊中的至少一個(gè)塊,以形成第二組幀內(nèi)預(yù)測(cè)編碼塊;和
將所述第一組編碼塊、所述第二組幀間預(yù)測(cè)編碼塊和所述第二組幀內(nèi)預(yù)測(cè)編碼塊插入到編碼比特流中。
條款22.根據(jù)條款21所述的裝置,其中所述處理器被配置成:
在第三組塊包括至少一個(gè)塊的條件下,在部分地編碼所述第一組塊且編碼所述第二組塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)的至少一個(gè)塊來(lái)編碼第三組塊,以形成第三組編碼塊;和
將所述第三組編碼塊插入到所述編碼比特流中。
條款23.根據(jù)條款22所述的裝置,其中所述處理器被配置成:
計(jì)算所述幀的多個(gè)塊的一個(gè)或多個(gè)預(yù)測(cè)模式的殘差值;和
當(dāng)預(yù)測(cè)模式是幀內(nèi)預(yù)測(cè)模式時(shí),將來(lái)自所述多個(gè)塊的塊分配給所述第三組塊作為具有小速率失真成本的幀的塊。
條款24.根據(jù)條款22或23所述的裝置,其中所述處理器被配置成:
以掃描次序處理所述幀的多個(gè)塊,以確定每個(gè)塊的預(yù)測(cè)模式;和
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀內(nèi)預(yù)測(cè)或所述塊包括多個(gè)子塊且其中每個(gè)子塊使用幀內(nèi)預(yù)測(cè)的條件下,將所述塊分配給所述第三組塊。
條款25.根據(jù)條款22至24中任一項(xiàng)所述的裝置,其中所述處理器被配置成在所述第二組塊之前至少部分地編碼所述第一組塊,并且在編碼所述第三組塊之前至少部分地編碼所述第二組塊。
條款26.根據(jù)條款22至25中任一項(xiàng)所述的裝置,其中所述處理器被配置成通過(guò)以下操作對(duì)所述第三組塊進(jìn)行編碼:
從多個(gè)幀內(nèi)預(yù)測(cè)模式中確定所述第三組塊中的當(dāng)前塊的最優(yōu)幀內(nèi)預(yù)測(cè)模式,其中所述多個(gè)幀內(nèi)預(yù)測(cè)模式中的至少一個(gè)包括所述第一組解碼塊中的所述至少一個(gè)塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊的像素;和
使用所述最優(yōu)幀內(nèi)預(yù)測(cè)模式對(duì)所述第三組塊的所述當(dāng)前塊進(jìn)行編碼。
條款27.根據(jù)條款21至26中任一項(xiàng)所述的裝置,其中所述處理器被配置成:
計(jì)算所述幀的多個(gè)塊的一個(gè)或多個(gè)預(yù)測(cè)模式的殘差值;
當(dāng)預(yù)測(cè)模式是幀間預(yù)測(cè)模式時(shí),將來(lái)自所述多個(gè)塊的塊分配給所述第一組塊作為具有小速率失真成本的塊;和
將來(lái)自所述多個(gè)塊的塊分配給所述第二組塊作為包括多個(gè)子塊的塊,其中當(dāng)預(yù)測(cè)模式是幀間預(yù)測(cè)模式時(shí),每個(gè)塊的所述多個(gè)子塊中的至少一個(gè)子塊具有小的速率失真成本,并且當(dāng)預(yù)測(cè)模式是幀內(nèi)預(yù)測(cè)模式時(shí),每個(gè)塊的所述多個(gè)子塊中的至少一個(gè)子塊具有小的速率失真成本。
條款28.根據(jù)條款21至27中任一項(xiàng)所述的裝置,其中所述處理器被配置成:
以掃描次序處理所述幀的多個(gè)塊,以確定每個(gè)塊的預(yù)測(cè)模式;
在來(lái)自所述多個(gè)塊的塊中的至少一個(gè)使用幀間預(yù)測(cè)或所述塊包括多個(gè)子塊且其中每個(gè)子塊使用幀間預(yù)測(cè)的條件下,將所述塊分配給所述第一組塊;和
在來(lái)自所述多個(gè)塊的塊包括多個(gè)子塊且其中至少一個(gè)子塊使用幀間預(yù)測(cè)、并且至少一個(gè)子塊使用幀內(nèi)預(yù)測(cè)的條件下,將所述塊分配給所述第二組塊。
條款29.根據(jù)條款21至28中任一項(xiàng)所述的裝置,其中所述處理器被配置成通過(guò)以下步驟對(duì)要使用幀內(nèi)預(yù)測(cè)編碼的所述第二組塊進(jìn)行編碼:
從多個(gè)幀內(nèi)預(yù)測(cè)模式來(lái)確定所述第二組塊的要使用幀內(nèi)預(yù)測(cè)編碼的當(dāng)前塊的最優(yōu)幀內(nèi)預(yù)測(cè)模式,其中所述多個(gè)幀內(nèi)預(yù)測(cè)模式中的至少一個(gè)包括所述第一組解碼塊的所述至少一個(gè)塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)塊的像素;和
使用所述最優(yōu)幀內(nèi)預(yù)測(cè)模式對(duì)所述第二組塊的所述當(dāng)前塊進(jìn)行編碼。
條款30.一種用于對(duì)視頻流進(jìn)行解碼的裝置,所述裝置被布置為:
在第一組編碼塊包括至少一個(gè)塊的條件下,使用執(zhí)行幀間預(yù)測(cè)的處理器來(lái)解碼所述第一組編碼塊以形成第一組解碼塊;
在第二組編碼塊包括至少一個(gè)塊的條件下,在解碼所述第一組編碼塊之后,使用執(zhí)行幀間預(yù)測(cè)的所述處理器,解碼所述第二組編碼塊,以形成第二組幀間預(yù)測(cè)解碼塊;和
在所述第二組編碼塊包括至少一個(gè)塊的條件下,在解碼所述第一組編碼塊之后,使用幀內(nèi)預(yù)測(cè),使用來(lái)自所述第一組解碼塊或所述第二組幀間預(yù)測(cè)解碼塊中的至少一個(gè)的至少一個(gè)塊來(lái)解碼所述第二組編碼塊,以形成第二組幀內(nèi)預(yù)測(cè)編碼塊。