本發(fā)明涉及視頻編碼及解碼,更具體地,涉及使用環(huán)形緩沖區(qū)的視頻編碼和解碼。
背景技術(shù):
數(shù)字視頻位流可被編碼后有效地把視頻壓縮成數(shù)字位流,所述數(shù)字位流可存儲(chǔ)于非瞬時(shí)數(shù)字媒介或通過有限帶寬的通信信道進(jìn)行流傳輸。然而,在視頻位流的傳輸或存儲(chǔ)過程中,可能會(huì)發(fā)生丟包或其他錯(cuò)誤,從而導(dǎo)致所述位流解碼的錯(cuò)誤??捎玫男诺缼挷粫r(shí)改變的情況也屬常見,導(dǎo)致實(shí)時(shí)視頻傳輸?shù)膯栴}。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明公開了用計(jì)算設(shè)備解碼視頻位流的系統(tǒng)、方法和設(shè)備的各個(gè)方面,包括:
在一個(gè)環(huán)形緩沖區(qū)中,接收所述視頻位流所包含的數(shù)個(gè)幀所關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)包;
判斷所述數(shù)個(gè)幀中是否有一個(gè)或多個(gè)幀與所述一個(gè)或多個(gè)數(shù)據(jù)包有關(guān)聯(lián);
如果所述一個(gè)或多個(gè)幀與所述一個(gè)或多個(gè)數(shù)據(jù)包有關(guān)聯(lián),基于所述一個(gè)或多個(gè)數(shù)據(jù)包,判斷是否從所述環(huán)形緩沖區(qū)將所述一個(gè)或多個(gè)幀輸出至一個(gè)前向糾錯(cuò)解碼器;
決定將所述一個(gè)或多個(gè)幀輸出至所述前向糾錯(cuò)解碼器之后,
對(duì)所述一個(gè)或多個(gè)幀執(zhí)行前向糾錯(cuò),
將所述一個(gè)或多個(gè)幀從所述前向糾錯(cuò)解碼器輸出至一個(gè)解碼器,
解碼所述一個(gè)或多個(gè)幀,
將所述一個(gè)或多個(gè)幀從所述解碼器輸出到一個(gè)渲染器,并
渲染所述一個(gè)或多個(gè)幀用于顯示。
另一方面,本發(fā)明實(shí)施例提出一種用于解碼視頻位流的裝置,包括:
一個(gè)存儲(chǔ)器;
一個(gè)處理器,用于執(zhí)行所述存儲(chǔ)器所存儲(chǔ)的指令以:
在一個(gè)環(huán)形緩沖區(qū)中,接收所述視頻位流所包含的數(shù)個(gè)幀所關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)包;
判斷所述數(shù)個(gè)幀中是否有一個(gè)或多個(gè)幀與所述一個(gè)或多個(gè)數(shù)據(jù)包有關(guān)聯(lián);
如果所述一個(gè)或多個(gè)幀與所述一個(gè)或多個(gè)數(shù)據(jù)包有關(guān)聯(lián),基于所述一個(gè)或多個(gè)數(shù)據(jù)包,判斷是否從所述環(huán)形緩沖區(qū)將所述一個(gè)或多個(gè)幀輸出至一個(gè)前向糾錯(cuò)解碼器;
決定將所述一個(gè)或多個(gè)幀輸出至所述前向糾錯(cuò)解碼器之后,
對(duì)所述一個(gè)或多個(gè)幀執(zhí)行前向糾錯(cuò),
將所述一個(gè)或多個(gè)幀從所述前向糾錯(cuò)解碼器輸出至一個(gè)解碼器,
解碼所述一個(gè)或多個(gè)幀,
將所述一個(gè)或多個(gè)幀從所述解碼器輸出到一個(gè)渲染器,并
渲染所述一個(gè)或多個(gè)幀用于顯示。
另一方面,本發(fā)明實(shí)施例提出一種用計(jì)算設(shè)備解碼視頻位流的系統(tǒng),包括:
一個(gè)環(huán)形緩沖區(qū),用于接收所述視頻位流所包含的數(shù)個(gè)幀所關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)包、將所述一個(gè)或多個(gè)數(shù)據(jù)包關(guān)聯(lián)至所述數(shù)個(gè)幀中的一個(gè)或多個(gè)幀、并基于所述一個(gè)或多個(gè)數(shù)據(jù)包判斷是否輸出所述一個(gè)或多個(gè)幀;
一個(gè)前向糾錯(cuò)解碼器,用于接收所述環(huán)形緩沖區(qū)輸出的一個(gè)或多個(gè)幀、對(duì)所述一個(gè)或多個(gè)幀執(zhí)行前向糾錯(cuò)、并輸出所述一個(gè)或多個(gè)幀;
一個(gè)解碼器,用于接收所述前向糾錯(cuò)解碼器輸出的一個(gè)或多個(gè)幀、解碼所述一個(gè)或多個(gè)幀、并輸出所述一個(gè)或多個(gè)幀;
一個(gè)渲染器,用于接收所述解碼器輸出的一個(gè)或多個(gè)幀、并渲染所述一個(gè)或多個(gè)幀用于顯示。
本發(fā)明的上述及其他方面,將通過對(duì)以下實(shí)施例、所附權(quán)利要求書和附圖的詳細(xì)描述。
附圖說明
本發(fā)明在結(jié)合附圖閱讀時(shí),可以從以下的詳細(xì)描述中得到最好的理解。需要強(qiáng)調(diào)的是,根據(jù)通常的做法,附圖的各種特征不是按比例的。相反,為解釋清楚,所述各種特征的尺寸被任意地放大或縮小。本發(fā)明的公開材料提到所附附圖時(shí),類似的參照數(shù)字在所有視圖中指代類似的部分。在附圖中:
圖1是依本發(fā)明公開的實(shí)施例提供的一個(gè)視頻編碼及解碼系統(tǒng)的示意圖;
圖2是依本發(fā)明公開的實(shí)施例提供的一個(gè)視頻位流的結(jié)構(gòu)示意圖;
圖3是依本發(fā)明公開的實(shí)施例提供的一個(gè)視頻壓縮系統(tǒng)的結(jié)構(gòu)示意圖;
圖4是依本發(fā)明公開的實(shí)施例提供的一個(gè)視頻解壓系統(tǒng)的結(jié)構(gòu)示意圖;
圖5是依本發(fā)明公開的實(shí)施例提供的展示視頻解碼流程的流程圖;
圖6是依本發(fā)明公開的實(shí)施例提供的展示使用環(huán)形緩沖區(qū)的視頻解碼流程的流程圖;
圖7是依本發(fā)明公開的實(shí)施例提供的展示使用環(huán)形緩沖區(qū)的視頻解碼流程的流程圖;
圖8是依本發(fā)明公開的實(shí)施例提供的一個(gè)使用環(huán)形緩沖區(qū)的用于視頻解碼處理的系統(tǒng)的結(jié)構(gòu)示意圖;
圖9是依本發(fā)明公開的實(shí)施例提供的一個(gè)環(huán)形緩沖區(qū)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
數(shù)字視頻可以被用于娛樂、視頻會(huì)議、廣告和通常的信息共享。用戶對(duì)數(shù)字視頻質(zhì)量的期望會(huì)很高,因?yàn)橛脩粝M趲捰邢薜墓蚕砘ヂ?lián)網(wǎng)傳播的視頻與在專用有線頻道傳播的視頻具有同樣高的空間和時(shí)間質(zhì)量。例如,數(shù)字視頻編碼可以壓縮數(shù)字視頻的位流,以允許高質(zhì)量的數(shù)字視頻在具有有限帶寬的網(wǎng)絡(luò)進(jìn)行傳輸。例如,數(shù)字視頻質(zhì)量可以定義為輸出的解壓及解碼的數(shù)字視頻在何種程度上與輸入的數(shù)字視頻匹配。
視頻編碼和解碼統(tǒng)合各種技術(shù)用以壓縮和解壓數(shù)字視頻流,得以在有限帶寬能力的網(wǎng)絡(luò)中傳輸高質(zhì)量的數(shù)字視頻流。這些技術(shù)可以將數(shù)字視頻流處理為一系列的數(shù)字?jǐn)?shù)據(jù)塊,并處理這些數(shù)據(jù)塊以壓縮用于傳輸或存儲(chǔ),并且在收到數(shù)據(jù)塊后,解壓縮所述數(shù)據(jù)塊以重建原始數(shù)字視頻流。本發(fā)明公開的實(shí)施例的各方面,可以通過對(duì)視頻位流的數(shù)據(jù)包執(zhí)行前向糾錯(cuò)(Forward Error Correction,FEC),以允許經(jīng)壓縮的視頻位流在“嘈雜”或易發(fā)潛在錯(cuò)誤的網(wǎng)絡(luò)中傳輸。所述各方面可以將FEC包添加到視頻位流,以允許檢測(cè)和校正丟失或損壞的數(shù)據(jù)包。通過用環(huán)形緩沖區(qū)接收經(jīng)FEC保護(hù)的視頻位流的數(shù)據(jù)包,所述各方面可以有效地聚合屬于該視頻位流的某個(gè)幀的所有數(shù)據(jù)包,并將待FEC解碼的幀發(fā)出。
在某些情況下,F(xiàn)EC可以用一個(gè)幀的其他數(shù)據(jù)包重建該幀丟失或損壞的數(shù)據(jù)包而無需重傳數(shù)據(jù)包,從而減少往返延遲。在其他情況下,丟失或損壞的數(shù)據(jù)包不能被FEC重建。在這些情況下,丟失或亂序的數(shù)據(jù)包可以由環(huán)形緩沖區(qū)檢測(cè)到——環(huán)形緩沖區(qū)在其中具有最先幀編號(hào)的幀尚未完整時(shí),收到了一個(gè)數(shù)據(jù)包,其來自的幀所具的幀編號(hào)卻先于所述最先幀的幀編號(hào)。這意味著,要么數(shù)據(jù)包在傳輸中丟失了,要么數(shù)據(jù)包被亂序發(fā)出。當(dāng)這種情況發(fā)生時(shí),所公開實(shí)施例的各方面可以暫停所述幀從環(huán)形緩沖區(qū)到FEC解碼器的傳輸。幀傳輸可以暫停至所述最先幀編號(hào)所關(guān)聯(lián)的丟失數(shù)據(jù)包接收到或者后續(xù)幀完成為止。如果在后續(xù)幀完成前接收到所述最先幀編號(hào)所關(guān)聯(lián)的丟失數(shù)據(jù)包,則可將所述最先幀發(fā)送到FEC解碼器。如果在后續(xù)幀所關(guān)聯(lián)的所有數(shù)據(jù)包都收到后,環(huán)形緩沖區(qū)仍未收到丟失的數(shù)據(jù)包,則其幀編號(hào)先于所述完整后續(xù)幀的不完整的幀可被刪除,而完整的后續(xù)幀可被發(fā)送到FEC解碼器。
丟棄具有不完全或損壞的數(shù)據(jù)包的幀,可以通過消除視頻數(shù)據(jù)重傳的需求來提高視頻編碼和解碼的性能。在需要重傳時(shí),可從解碼器通過網(wǎng)絡(luò)傳遞一條消息給編碼器,然后編碼器可以重發(fā)所丟失的幀。這種消息傳訊和數(shù)據(jù)重傳可能導(dǎo)致解碼視頻流中的——例如——中斷和延遲。所公開實(shí)施例的各方面丟棄不完整的幀而無需重發(fā)數(shù)據(jù),從而避免了往返延遲。
有個(gè)問題是,解碼器在后來執(zhí)行幀間預(yù)測(cè)時(shí)可能需要被丟棄的幀。所公開實(shí)施例的各方面可以避免這種情況,例如,通過在編碼器端僅使用解碼器緩沖區(qū)內(nèi)的良參考幀,使得所丟棄的幀不會(huì)被幀間預(yù)測(cè)使用。解碼器緩沖區(qū)內(nèi)的幀是否被成功重建可由——例如——環(huán)形緩沖區(qū)和解碼器來確定,并可由反向信道消息通告編碼器。
圖1是視頻編碼和解碼系統(tǒng)10的示意圖,圖中本發(fā)明的一些方面可以實(shí)施。在一個(gè)示例中,計(jì)算設(shè)備12可以包括硬件的內(nèi)部配置,包括一個(gè)處理器如中央處理單元(CPU)18和一個(gè)數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)器如存儲(chǔ)器20。例如,CPU 18可以是用于控制計(jì)算設(shè)備12的控制器,也可以是微處理器、數(shù)字信號(hào)處理器、場(chǎng)效可編程邏輯門陣列(FPGA)、布置于定制的專用集成電路(ASIC)上的離散電路元件或者任意其他數(shù)字?jǐn)?shù)據(jù)處理器。例如,CPU 18可以通過存儲(chǔ)器總線、電線、電纜、無線連接或任意其他連接連接到存儲(chǔ)器20。存儲(chǔ)器20可以作為或包含只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、光存儲(chǔ)器、磁存儲(chǔ)器諸如磁盤或磁帶、非易失性存儲(chǔ)卡、云存儲(chǔ),或者任意其他合適的數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)設(shè)備或設(shè)備的方式或組合。存儲(chǔ)器20可存儲(chǔ)CPU 18使用的數(shù)據(jù)和程序指令。計(jì)算設(shè)備12也有其他合適的可能的實(shí)現(xiàn)方式。例如,計(jì)算設(shè)備12的處理可以分布在以多個(gè)網(wǎng)絡(luò)16通信的多個(gè)設(shè)備上進(jìn)行。
在一個(gè)實(shí)例中,網(wǎng)絡(luò)16可以連接計(jì)算設(shè)備12和計(jì)算設(shè)備14,用于編碼和解碼視頻流。例如,所述視頻流可以在計(jì)算設(shè)備12上進(jìn)行編碼,經(jīng)編碼的視頻流可以在計(jì)算設(shè)備14上解碼。網(wǎng)絡(luò)16可以包括任意一個(gè)或多個(gè)適于即時(shí)應(yīng)用的網(wǎng)絡(luò),諸如有線或無線的局域或廣域網(wǎng)、虛擬專用網(wǎng)、蜂窩電話數(shù)據(jù)網(wǎng)絡(luò),或任意其他有線或無線的,對(duì)硬件、軟件、通信協(xié)議的配置,以適用于圖例中的從計(jì)算設(shè)備12向計(jì)算設(shè)備14傳送視頻位流,并從計(jì)算設(shè)備14傳送關(guān)于所述網(wǎng)絡(luò)的參數(shù)至計(jì)算設(shè)備12。
計(jì)算設(shè)備14可以包括CPU 22和存儲(chǔ)器24,類似于以上討論的系統(tǒng)10的組件。例如,計(jì)算設(shè)備14可配置用于顯示視頻流。連接到計(jì)算設(shè)備14的顯示器可以有各種實(shí)現(xiàn)方式,包括液晶顯示器(LCD)、陰極射線管(CRT)、有機(jī)或非有機(jī)發(fā)光二極管顯示器(LED)、等離子體顯示器、或任意其他用以向用戶顯示機(jī)器可讀的視頻信號(hào)的機(jī)制。例如,計(jì)算設(shè)備14可配置用于顯示由計(jì)算設(shè)備14的解碼器解碼的所述視頻位流的渲染。
編碼器和解碼器系統(tǒng)10有其他可能的實(shí)施方式。除了計(jì)算設(shè)備12和計(jì)算設(shè)備14,圖1還展示了額外的計(jì)算設(shè)備26、28,其分別具有一個(gè)或多個(gè)CPU30、34及存儲(chǔ)器32、36。這些計(jì)算設(shè)備可包括服務(wù)器,以及移動(dòng)電話,移動(dòng)電話也可以諸如創(chuàng)建、編碼、解碼、存儲(chǔ)、轉(zhuǎn)發(fā)或顯示數(shù)字視頻流。這些計(jì)算設(shè)備在處理能力和存儲(chǔ)器可用性方面可具有不同的能力,包括用于創(chuàng)建視頻的設(shè)備,如視頻攝像機(jī),和用于顯示視頻的設(shè)備。
圖2是待編碼及隨后解碼的視頻流200的示意圖。視頻流200可以包括視頻序列202。視頻序列202是視頻流在時(shí)間上連續(xù)的子集,也稱為圖像組(GOP)。視頻序列202可以包括多個(gè)相鄰的視頻幀204。盡管圖中數(shù)幀204只描繪了四個(gè)幀,視頻序列202可包括任意數(shù)目的數(shù)個(gè)幀。數(shù)幀204的單個(gè)實(shí)例表示為單幀206。進(jìn)一步劃分單幀206可以產(chǎn)生一系列的區(qū)塊208。在本例中,區(qū)塊208可以包含對(duì)應(yīng)于單幀206內(nèi)的一個(gè)N×M像素域的數(shù)據(jù),比如對(duì)應(yīng)像素的亮度和色度數(shù)據(jù)。區(qū)塊208可以是任意合適的尺寸,例如128×128像素組或所述像素組中的任意矩形子集。
圖3是依照公開的實(shí)施方式展示的編碼器300的框圖。編碼器300可在計(jì)算設(shè)備中實(shí)現(xiàn),諸如計(jì)算設(shè)備12。編碼器300可以編碼輸入視頻流200。編碼器300包括數(shù)個(gè)級(jí)來執(zhí)行前向路徑的各個(gè)功能,以產(chǎn)生經(jīng)編碼和/或壓縮的位流322:幀內(nèi)預(yù)測(cè)級(jí)302、模式?jīng)Q定級(jí)304、幀間預(yù)測(cè)級(jí)306、變換及量化級(jí)308、濾波級(jí)314和熵編碼級(jí)310。編碼器300還可以包括一個(gè)重建路徑,以重建用于預(yù)測(cè)和編碼未來區(qū)塊的幀。在圖3中,編碼器300包括逆量化及逆變換級(jí)312和用以存儲(chǔ)視頻數(shù)據(jù)多個(gè)幀的多幀存儲(chǔ)器316,以重建用于預(yù)測(cè)的區(qū)塊。編碼器300的其他變體結(jié)構(gòu)也可用于編碼視頻流200。
視頻流200用于編碼時(shí),其中每個(gè)幀(例如圖2中的單幀206)以區(qū)塊為單位進(jìn)行處理。每個(gè)區(qū)塊可以從左上方的區(qū)塊開始,以光柵掃描的順序單獨(dú)進(jìn)行處理。在幀內(nèi)預(yù)測(cè)級(jí)302,針對(duì)視頻流200的區(qū)塊,幀內(nèi)預(yù)測(cè)的殘差區(qū)塊可被確定。通過檢查先前處理的相鄰區(qū)塊以確定所述相鄰區(qū)塊的像素值是否類似于當(dāng)前區(qū)塊,幀內(nèi)預(yù)測(cè)可以預(yù)測(cè)區(qū)塊的內(nèi)容。因?yàn)橐曨l流200以光柵掃描順序進(jìn)行處理,光柵掃描順序中領(lǐng)先于當(dāng)前區(qū)塊出現(xiàn)的區(qū)塊可用于處理所述當(dāng)前區(qū)塊。光柵掃描順序中出現(xiàn)于給定區(qū)塊之前的區(qū)塊之所以可用于幀內(nèi)預(yù)測(cè),是因?yàn)樗鼈円部稍诮獯a器中使用,鑒于它們也將首先被重建。如果相鄰區(qū)塊與當(dāng)前區(qū)塊足夠相似,所述相鄰區(qū)塊可被用作預(yù)測(cè)區(qū)塊,并在步驟318中從當(dāng)前區(qū)塊中減去,以形成殘差區(qū)塊,并且表示當(dāng)前區(qū)塊是幀內(nèi)預(yù)測(cè)的信息可以包含在所述視頻位流里。
視頻流200也可以在幀間預(yù)測(cè)級(jí)306進(jìn)行幀間預(yù)測(cè)。幀間預(yù)測(cè)包含形成殘差區(qū)塊,其通過從時(shí)間數(shù)個(gè)幀轉(zhuǎn)換像素以形成可從當(dāng)前區(qū)塊中減去(步驟318)的預(yù)測(cè)區(qū)塊。時(shí)間數(shù)個(gè)幀可存儲(chǔ)于幀存儲(chǔ)器316并在幀間預(yù)測(cè)級(jí)306被訪問,以形成可以傳遞給模式?jīng)Q定級(jí)304的殘差區(qū)塊——在級(jí)304中,幀內(nèi)預(yù)測(cè)產(chǎn)生的殘差區(qū)塊可以和幀間預(yù)測(cè)產(chǎn)生的殘差區(qū)塊進(jìn)行比較。模式?jīng)Q定級(jí)304可確定用何種預(yù)測(cè)模式——幀間或幀內(nèi)——來預(yù)測(cè)當(dāng)前區(qū)塊。例如,在某些實(shí)施方式中,可以使用率失真值(rate distortionvalue)來確定使用何種預(yù)測(cè)模式。
率失真值的確定,可以通過計(jì)算用特定編碼參數(shù)(例如預(yù)測(cè)模式)編碼的視頻位流中每單位時(shí)間的位元的數(shù)目,即位率,并結(jié)合計(jì)算輸入視頻流的區(qū)塊和解碼視頻流的時(shí)間上和空間上相同的區(qū)塊之間的差異。因?yàn)榫幋a器300是“有損”的,所述解碼視頻流區(qū)塊的像素值可以不同于所述輸入視頻流區(qū)塊的像素值。例如,為了確定最佳的參數(shù)值,可以變化編碼參數(shù)以比較相應(yīng)的率失真值。
在相減步驟318中,由模式?jīng)Q定級(jí)304確定的殘差區(qū)塊可從當(dāng)前區(qū)塊中減去,并傳遞到變換及量化級(jí)308。由于殘差區(qū)塊的值可以小于當(dāng)前區(qū)塊的值,變換及量化后的殘差區(qū)塊具有的值可以比變換及量化后的當(dāng)前區(qū)塊少,因而可以在視頻位流中通過較少的變換系數(shù)來表示。基于區(qū)塊的變換的實(shí)例包括Karhunen-Loève變換(“KLT”),離散余弦變換(“DCT”)和奇異值分解變換(“SVD”),僅舉幾例。在一個(gè)實(shí)施例中,DCT將區(qū)塊變換到頻域。在DCT變換的例子中,變換系數(shù)的值是基于空間頻率,直流系數(shù)(DC系數(shù))或其他最低頻率的系數(shù)在矩陣的左上角,最高頻率的系數(shù)在矩陣的右下角。
變換和量化級(jí)308轉(zhuǎn)換所述變換系數(shù)為離散量子值,它可被稱為量化變換系數(shù)。量化可以減少以變換系數(shù)代表的離散狀態(tài)的數(shù)目,同時(shí)少量降低圖像質(zhì)量,如果量化是在空間域而不是變換域中進(jìn)行的話。量化后的變換系數(shù)可以通過熵編碼級(jí)310進(jìn)行熵編碼。熵編碼是一種可逆的、無損的算術(shù)編碼方案,它可以減少視頻位流中位元的數(shù)目,并在解碼時(shí)不會(huì)在所述位流中引起變化。熵編碼后的系數(shù)與其他用于解碼所述區(qū)塊的信息一起,諸如使用的預(yù)測(cè)類型、運(yùn)動(dòng)矢量、量化器的值和濾波強(qiáng)度等,被輸出為壓縮的位流322。
圖3虛線所示的重建路徑,可用于幫助確保編碼器300和解碼器400(參照下文圖4)都使用相同的基準(zhǔn)幀來形成幀內(nèi)預(yù)測(cè)區(qū)塊。重建路徑執(zhí)行的功能類似于下文詳述的解碼過程所執(zhí)行的功能,包括:在逆量化及逆變換級(jí)312進(jìn)行去量化和逆變換所述量化的變換系數(shù),并在加法步驟320中與模式?jīng)Q定級(jí)304產(chǎn)生的殘差區(qū)塊一起,創(chuàng)建重建區(qū)塊。環(huán)路濾波級(jí)314可應(yīng)用于重建的區(qū)塊以減少失真,例如區(qū)塊效應(yīng),因?yàn)榻獯a器400可以在過濾所述重建的視頻流之前對(duì)其采樣以形成基準(zhǔn)幀。例如,圖3展示,環(huán)路濾波級(jí)314發(fā)送環(huán)路濾波參數(shù)至熵編碼器310,與輸出的視頻位流322進(jìn)行組合,以允許解碼器400使用和編碼器300相同的環(huán)路濾波參數(shù)。
編碼器300的其他變體可用于編碼壓縮的位流322。編碼器300的各級(jí)可以以不同的順序進(jìn)行處理,或者可以無需改變其目的而組合成更少的級(jí)或分拆為更多的級(jí)。例如,不基于變換的編碼器300可以無需變換級(jí)而直接量化殘差區(qū)塊信號(hào)。在另一實(shí)施例中,編碼器300可以將變換和量化級(jí)308拆分為單一的步驟。
圖4是依公開實(shí)施方式的各方面描述的解碼器400的框圖。在一個(gè)實(shí)施例中,解碼器400可以在計(jì)算設(shè)備14上實(shí)現(xiàn)。解碼器400包括以下級(jí)來執(zhí)行各種功能,以從壓縮位流322產(chǎn)生輸出視頻流418:熵解碼級(jí)402,逆量化及逆變換級(jí)404,幀內(nèi)預(yù)測(cè)級(jí)408,幀間預(yù)測(cè)級(jí)412,加法器410,模式?jīng)Q定級(jí)406和一個(gè)幀存儲(chǔ)器414。解碼器400的其他結(jié)構(gòu)變體也可以用于解碼壓縮位流322。例如,逆量化及逆變換級(jí)404可以被表示為兩個(gè)獨(dú)立的級(jí)。
接收的視頻位流322可以通過熵解碼器402進(jìn)行熵解碼。熵解碼器402執(zhí)行編碼器300在級(jí)310執(zhí)行的熵編碼的逆過程,以還原所述視頻位流到熵編碼前的原始狀態(tài)。所述還原的視頻位流可以進(jìn)行逆量化和逆變換,類似于逆量化及逆變換級(jí)312的方式。逆量化及逆變換級(jí)404可以還原視頻位流的殘差區(qū)塊322。注意,由于編碼器300和解碼器400能表示有損編碼,所述還原的殘差區(qū)塊的像素值可不同于輸入視頻流200中相同的時(shí)間和空間位置的殘差區(qū)塊。
在逆量化及逆變換級(jí)404還原殘差區(qū)塊之后,通過在加法器410中加入所述殘差區(qū)塊的預(yù)測(cè)區(qū)塊,所述視頻位流的殘差區(qū)塊可被大致還原到其預(yù)測(cè)前的狀態(tài)。加法器410從模式?jīng)Q定級(jí)406處接收用于加到殘差區(qū)塊的所述預(yù)測(cè)區(qū)塊。模式?jīng)Q定級(jí)406可經(jīng)由編碼器300解釋所述輸入視頻位流322包含的參數(shù),例如,確定是使用幀內(nèi)還是幀間預(yù)測(cè)以還原視頻位流322的區(qū)塊。模式?jīng)Q定級(jí)406對(duì)輸入視頻位流322也可以執(zhí)行計(jì)算來確定對(duì)特定的區(qū)塊使用何種預(yù)測(cè)。作為解碼器,通過對(duì)相同的數(shù)據(jù)執(zhí)行相同的計(jì)算,模式?jīng)Q定級(jí)406可以針對(duì)預(yù)測(cè)模式做出與編碼器300相同的決定,從而減少了為指示要用的預(yù)測(cè)模式而在視頻位流中傳輸位元的需要。
模式?jīng)Q定級(jí)406可以同時(shí)從幀內(nèi)預(yù)測(cè)級(jí)408和幀間預(yù)測(cè)級(jí)412接收預(yù)測(cè)區(qū)塊。因?yàn)閹瑑?nèi)預(yù)測(cè)區(qū)塊以光柵掃描順序處理,幀內(nèi)預(yù)測(cè)級(jí)408可以從加法器410輸出的所述還原視頻流接收區(qū)塊以用作預(yù)測(cè)區(qū)塊;并且由于幀內(nèi)預(yù)測(cè)使用的區(qū)塊是編碼器300在還原殘差區(qū)塊之前以光柵掃描順序選擇的,幀內(nèi)預(yù)測(cè)級(jí)408可以按需提供預(yù)測(cè)區(qū)塊。如上面關(guān)于編碼器300的討論,幀間預(yù)測(cè)級(jí)412從儲(chǔ)存在幀存儲(chǔ)器414的幀中創(chuàng)建預(yù)測(cè)區(qū)塊。幀存儲(chǔ)器414從環(huán)路濾波器416接收經(jīng)其濾波的還原區(qū)塊。環(huán)路濾波可以去除基于區(qū)塊的預(yù)測(cè)技術(shù)所引入的區(qū)塊效應(yīng),如本文所述的編碼器300和解碼器400所用。
幀間預(yù)測(cè)級(jí)412可以使用幀存儲(chǔ)器414里經(jīng)環(huán)路濾波器416濾波的幀,以使用編碼器300用過的相同數(shù)據(jù)形成預(yù)測(cè)區(qū)塊。盡管使用有損壓縮,對(duì)預(yù)測(cè)使用相同的數(shù)據(jù)可使解碼器400重建的區(qū)塊具有接近對(duì)應(yīng)輸入?yún)^(qū)塊的像素值。模式?jīng)Q定級(jí)406從幀間預(yù)測(cè)級(jí)412接收的預(yù)測(cè)區(qū)塊可以傳遞到加法器410,以還原視頻位流322的區(qū)塊。經(jīng)環(huán)路濾波器416濾波后,還原的視頻流418可以從解碼器400輸出。解碼器400的其他變體可用于解碼壓縮位流322。例如,解碼器400可以不經(jīng)環(huán)路濾波級(jí)416產(chǎn)生輸出視頻流418。
根據(jù)所公開實(shí)施方式,圖5所示的是用于解碼一個(gè)視頻位流的流程500的流程圖。例如,流程500可以由一個(gè)解碼計(jì)算設(shè)備14執(zhí)行。圖5中的流程圖展示了包括在流程500里的若干步驟。實(shí)現(xiàn)流程500的步驟,可以包括在本文,或者多于或少于本文所述。例如,步驟可以組合或劃分而改變執(zhí)行的步驟的數(shù)目。流程500的所述步驟可以按本文包括的順序或不同的順序來執(zhí)行,且仍然實(shí)現(xiàn)流程500的意圖。
流程500可以由圖8所示的處理級(jí)來執(zhí)行。圖8是解碼器800的示意圖,其包括環(huán)形緩沖區(qū)802,F(xiàn)EC解碼器804,視頻解碼器806和渲染器808。環(huán)形緩沖區(qū)802可以接收并暫存編碼視頻位流322的數(shù)幀204的數(shù)據(jù)包。環(huán)形緩沖區(qū)802可將編碼視頻位流數(shù)據(jù)的數(shù)幀204發(fā)送到FEC解碼器804。所述FEC解碼器可以檢測(cè)并更正編碼視頻位流322丟失或損壞的數(shù)據(jù)包,并將編碼視頻位流數(shù)據(jù)的數(shù)幀204發(fā)送到視頻解碼器806。例如,視頻解碼器806可以是如圖4所示的視頻解碼器。視頻解碼器806將解碼的視頻數(shù)據(jù)的幀發(fā)送到視頻渲染器808,用以渲染并顯示在一個(gè)——例如——操作時(shí)連接到計(jì)算設(shè)備14的顯示器上。
回到圖5,在步驟502中,環(huán)形緩沖區(qū)802在——例如——計(jì)算設(shè)備14中接收經(jīng)編碼的視頻位流322中的數(shù)幀204所關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)包。所謂“接收”,我們可指輸入、獲取、讀取、訪問或以任何方式接收一個(gè)編碼視頻位流的行為。例如,所述已編碼的視頻位流可以由計(jì)算設(shè)備12用編碼器300進(jìn)行編碼,并經(jīng)由網(wǎng)絡(luò)16發(fā)送。在步驟504中,流程500可以判斷一個(gè)或多個(gè)幀204是否關(guān)聯(lián)于所述一個(gè)或多個(gè)數(shù)據(jù)包。圖6是一個(gè)用于將一個(gè)或多個(gè)幀204關(guān)聯(lián)到所述一個(gè)或多個(gè)數(shù)據(jù)包的流程600的流程圖。
圖6開始于步驟602,通過檢查所述收到的一個(gè)或多個(gè)數(shù)據(jù)包并將一個(gè)幀編號(hào)與所述收到的一個(gè)或多個(gè)數(shù)據(jù)包相關(guān)聯(lián)。在數(shù)據(jù)包被編碼器300構(gòu)造時(shí),它們被標(biāo)記用以識(shí)別與之關(guān)聯(lián)的幀。收到所述一個(gè)或多個(gè)數(shù)據(jù)包后,可以檢查所述數(shù)據(jù)包,并確定與之關(guān)聯(lián)的的幀的幀編號(hào)。在步驟602中,所述相關(guān)聯(lián)的幀編號(hào)被檢查并與當(dāng)前存儲(chǔ)在環(huán)形緩沖區(qū)802的幀的幀編號(hào)互相核對(duì)。如果所述相關(guān)聯(lián)的幀編號(hào)小于或等于環(huán)形緩沖區(qū)所輸出的末幀的幀編號(hào),所述一個(gè)或多個(gè)數(shù)據(jù)包將在步驟604被丟棄,而流程600返回到流程500的步驟504。
如果所述相關(guān)聯(lián)的幀編號(hào)大于環(huán)形緩沖區(qū)802所輸出的末幀的幀編號(hào),在步驟606中,環(huán)形緩沖區(qū)802可以檢查網(wǎng)絡(luò)并確定是否發(fā)生了網(wǎng)絡(luò)錯(cuò)誤。網(wǎng)絡(luò)錯(cuò)誤可包括丟包,而丟包可通過——例如——每一個(gè)包相關(guān)的包序列號(hào)被亂序接收來確定。網(wǎng)絡(luò)錯(cuò)誤也可以由網(wǎng)絡(luò)16或計(jì)算設(shè)備12或14檢測(cè)到并傳遞錯(cuò)誤信息至環(huán)形緩沖區(qū)802。在任一情況下,在步驟608中,環(huán)形緩沖區(qū)802都可以設(shè)置一個(gè)幀內(nèi)請(qǐng)求標(biāo)記,通過向編碼器300發(fā)送帶外消息的方式來請(qǐng)求重發(fā)丟失或損壞的數(shù)據(jù)。在此之后,流程600可以返回到流程500的步驟504。
在步驟610中,流程600可以檢查相關(guān)的幀編號(hào),以確定與所述一個(gè)或多個(gè)數(shù)據(jù)包相關(guān)聯(lián)的幀當(dāng)前是否存儲(chǔ)于環(huán)形緩沖區(qū)802。圖9是環(huán)形緩沖區(qū)900的圖。環(huán)形緩沖區(qū)900包括多個(gè)幀,存儲(chǔ)于數(shù)個(gè)環(huán)或幀緩沖區(qū)902中。環(huán)形緩沖區(qū)900包括從1到N的環(huán)或幀緩沖區(qū)902,其中每個(gè)環(huán)或幀緩沖區(qū)用于存儲(chǔ)一個(gè)以幀編號(hào)標(biāo)記的幀。每個(gè)環(huán)902包括多個(gè)數(shù)據(jù)包904,標(biāo)記為P1到PM。環(huán)形緩沖區(qū)900可在數(shù)個(gè)環(huán)或幀緩沖區(qū)902中存儲(chǔ)多個(gè)幀,并將收到的數(shù)據(jù)包904添加到相應(yīng)的幀緩沖區(qū)902中。
回到圖6,在步驟612中,由環(huán)形緩沖區(qū)802接收的、與當(dāng)前存儲(chǔ)在環(huán)形緩沖區(qū)802的幀編號(hào)相關(guān)聯(lián)的所述一個(gè)或多個(gè)數(shù)據(jù)包,被存儲(chǔ)于相應(yīng)的環(huán)或幀緩沖區(qū)902。在步驟614中,所述環(huán)形緩沖區(qū)的相關(guān)標(biāo)記被更新,以反映相關(guān)幀的狀態(tài)。更新標(biāo)記可包括“all_data_packets”標(biāo)記和“this_frame_is_ready”標(biāo)記,其表明每個(gè)幀在環(huán)形緩沖區(qū)802中的狀態(tài)。環(huán)形緩沖區(qū)802可判斷是否輸出幀,至少部分地取決于所述標(biāo)記的狀態(tài)。更新標(biāo)記后,流程600可以跳到步驟620來輸出幀。
在步驟610中,如果確定相關(guān)的幀編號(hào)不在環(huán)形緩沖區(qū)802內(nèi),相關(guān)的幀編號(hào)將在步驟616被進(jìn)一步檢查,看它是否比環(huán)形緩沖區(qū)802內(nèi)最先的幀編號(hào)還要先。這種情況可以是是因?yàn)椤纭獢?shù)據(jù)包被亂序接收,或正在被重傳。如果以上屬實(shí),說明與所述數(shù)據(jù)包相關(guān)聯(lián)的幀已輸出到FEC解碼器,則在所述一個(gè)或多個(gè)數(shù)據(jù)包在步驟618中被丟棄。然后流程600可以返回到流程500的步驟504。
在步驟616中,如果確定所述數(shù)據(jù)包并非比環(huán)形緩沖區(qū)802內(nèi)最先的幀編號(hào)還要先,則在步驟620中,環(huán)形緩沖區(qū)802內(nèi)最先的幀緩沖區(qū)902被替換為新的、標(biāo)有所述一個(gè)或多個(gè)數(shù)據(jù)包的相關(guān)幀編號(hào)的幀緩沖區(qū)902。在步驟622中,所述一個(gè)或多個(gè)數(shù)據(jù)包904被存儲(chǔ)于新的幀緩沖區(qū)902,并且在步驟624中,“all_data_packets”和“this_frame_is_ready”標(biāo)記被更新。然后流程600可以返回到流程500的步驟504。
回到圖5,在步驟506中,流程500可以將幀從環(huán)形緩沖區(qū)802向FEC解碼器804輸出。圖7是流程700的流程圖,其用于根據(jù)所述一個(gè)或多個(gè)數(shù)據(jù)包的幀來判斷是否將所述一個(gè)或多個(gè)幀從環(huán)形緩沖區(qū)802向FEC解碼器輸出。在步驟702中,在步驟614和/或624中更新的標(biāo)記被檢查,以確定當(dāng)前幀是否已準(zhǔn)備好輸出。如果當(dāng)前幀已準(zhǔn)備就緒,且如果之前或之后的更先的幀已被輸出,則在步驟704中,所述幀被輸出到FEC解碼器804。輸出該幀之后,流程700返回到流程500的步驟506。
在步驟706中,流程700檢查標(biāo)記,以確定幀編號(hào)+1的或后一個(gè)新的幀是否已準(zhǔn)備好輸出。如果后一個(gè)新幀準(zhǔn)備就緒,則輸出該幀,且流程700返回到流程500的步驟506。如果后一個(gè)新幀沒有輸出就緒,在步驟710中,流程進(jìn)行檢查,以判斷預(yù)設(shè)的時(shí)間期限是否已到期。如果預(yù)設(shè)的時(shí)間期限已到,則計(jì)時(shí)器復(fù)位、流程700結(jié)束等待,且在步驟712中,對(duì)幀緩沖區(qū)內(nèi)的幀按從先到后的順序進(jìn)行檢查,以確定它們是否輸出就緒。如果步驟714找到了準(zhǔn)備就緒的幀,則其中最先的幀被輸出到FEC解碼器804,而流程700返回到流程500的步驟506。如果預(yù)設(shè)的時(shí)間期限未到,則流程700返回到流程500的步驟506。
回到圖5,在步驟508中,對(duì)從環(huán)緩沖區(qū)802輸出的視頻位流數(shù)據(jù)的幀,F(xiàn)EC解碼器804可以執(zhí)行FEC解碼。在步驟510中,視頻解碼器806可以解碼經(jīng)FEC解碼的視頻位流,以形成一個(gè)解碼的視頻流。解碼的視頻流可以在步驟512中由視頻渲染器808渲染,用以顯示。在步驟514中,流程500可以檢查所述視頻位流是否還有更多數(shù)據(jù)包可用;如果是,則返回到步驟512以接收更多的數(shù)據(jù)包。如果沒有更多的數(shù)據(jù)包可用,則流程500可以退出。
上述編碼和解碼的實(shí)施例說明了一些示例性的編碼和解碼技術(shù)。然而,對(duì)用于權(quán)利要求中的這些術(shù)語,編碼和解碼可以意指壓縮、解壓、變換,或者任意其他對(duì)數(shù)據(jù)的處理或改變。
在本文中,用語“示例”或“示例性”用于表示充當(dāng)實(shí)例、例子或說明。本文中描述為“示范性”的任何方面或設(shè)計(jì),并不必然意味著優(yōu)選或優(yōu)于其他方面或設(shè)計(jì)。相反,用語“示例”或“示例性”的目的在于用具體的方式呈現(xiàn)一個(gè)概念。在本申請(qǐng)中使用的術(shù)語“或”,旨在表示包含性的“或”而不是排他性的“或”。即,除非另有指定,或從上下文清楚推斷,“X包括A或B”旨在表示任何自然的包含性排列。也就是說,如果“X包含A;X包含B;或X包含A和B”,則“X包含A或B”在任何上述實(shí)例中都得以滿足。此外,在本申請(qǐng)和所附的權(quán)利要求中使用的“一”和“一個(gè)”應(yīng)被一般性地解釋為表示“一個(gè)或多個(gè)”,除非另有所指,或從上下文中明確得知其針對(duì)于單一數(shù)目。此外,全文用語“一個(gè)實(shí)施例”或“一實(shí)施例”并非意指相同的實(shí)施例,除非如是描述。
計(jì)算設(shè)備12、14、26和/或28的實(shí)現(xiàn)方式,以及存儲(chǔ)其上和/或由其執(zhí)行的算法、方法、指令等,可以實(shí)現(xiàn)為硬件、軟件或兩者的任意組合。例如,所述硬件可以包括計(jì)算機(jī)、知識(shí)產(chǎn)權(quán)(IP)核心、專用集成電路(ASIC)、可編程邏輯陣列、光學(xué)處理器、可編程邏輯控制器、微代碼、微控制器、服務(wù)器、微處理器、數(shù)字信號(hào)處理器或任意其他適合的電路。在權(quán)利要求中,術(shù)語“處理器”或單獨(dú)或組合地包括任意上述硬件。術(shù)語“信號(hào)”和“數(shù)據(jù)”可互換使用。此外,計(jì)算設(shè)備12、14、26和/或28的各部分無須以相同的方式實(shí)現(xiàn)。
此外,例如,在一個(gè)實(shí)施例中,計(jì)算設(shè)備12、14、26和/或28可用通用計(jì)算機(jī)/處理器及計(jì)算機(jī)程序?qū)崿F(xiàn);且在執(zhí)行時(shí),所述計(jì)算機(jī)程序執(zhí)行任意上述相應(yīng)的方法、算法和/或指令。此外,例如,也可以另外使用專用計(jì)算機(jī)/處理器,而其可以包含專用硬件用于執(zhí)行本文所述的任意所述方法、算法、或指令。
計(jì)算設(shè)備12、14、26和/或28可以,例如,在一個(gè)屏幕錄制(screencasting)系統(tǒng)的計(jì)算機(jī)上實(shí)現(xiàn)。另外,計(jì)算設(shè)備12可以在服務(wù)器上實(shí)現(xiàn),而計(jì)算設(shè)備14、26和/或28可以在獨(dú)立于服務(wù)器的設(shè)備上實(shí)現(xiàn),諸如手機(jī)或其他手持式通信裝置。在這個(gè)例子中,計(jì)算設(shè)備12可以使用編碼器300將內(nèi)容編碼為一個(gè)編碼的視頻信號(hào),并發(fā)送所述編碼的視頻信號(hào)到通信設(shè)備。反過來,所述通信設(shè)備可以使用解碼器400解碼所述編碼的視頻信號(hào)。另外,通信設(shè)備也可以解碼本地存儲(chǔ)在所述通信設(shè)備上的內(nèi)容,例如非由計(jì)算設(shè)備12傳送的內(nèi)容。計(jì)算設(shè)備12、14、26和/或28也可以有其他合適的實(shí)施方案。例如,計(jì)算設(shè)備14可以是大致固定的個(gè)人計(jì)算機(jī)而非便攜通信設(shè)備,和/或包括編碼器300的設(shè)備還可以包括解碼器400。
此外,本發(fā)明的實(shí)施方式全部或部分可以以——例如,可從計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)訪問的——計(jì)算機(jī)程序產(chǎn)品的形式存在。計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任意設(shè)備,例如,其有形地包含、存儲(chǔ)、通信或傳輸所述程序以供任意處理器使用或與任意處理器連接。例如,所述介質(zhì)可以是電子、磁性、光學(xué)、電磁、或半導(dǎo)體器件,也可以是其他合適的介質(zhì)。
上述實(shí)施方式已經(jīng)依序描述,以便容易理解、且不限制本發(fā)明。相反,本發(fā)明旨在覆蓋包含在所附權(quán)利要求書的范圍內(nèi)的各種修改和等同布置,所附權(quán)利要求書的范圍在法律范圍內(nèi)應(yīng)被賦予最寬泛的解釋,以包含所有上述修改和等同結(jié)構(gòu)。