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