專利名稱:在視頻數(shù)據(jù)流的編碼和解碼中存儲設(shè)備的有效使用的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在視頻數(shù)據(jù)流的編碼和解碼中的存儲設(shè)備的有效使用。
背景技術(shù):
視頻編解碼器(壓縮器-解壓縮器)是一些壓縮算法式,其被設(shè)計成對視頻數(shù)據(jù)流進行編碼/壓縮和解碼/解壓縮,以此來減少流的大小,從而傳輸更快并且存儲空間更小。然而由于存在損耗,視頻編解碼器在壓縮視頻流的二進制數(shù)據(jù)時盡力保持視頻質(zhì)量。通常使用的視頻編解碼器的實例有MPEG-4、AVI、WMV、RM、RV、H.261、H.263以及H.264。
視頻流由幀序列組成,其中每一幀由多個宏塊組成。視頻編解碼器通過將幀分成一個或多個片段(slice)或子部分,對該序列中的每一幀進行編碼,其中每一個片段包含整數(shù)個宏塊。宏塊典型的是16×16像素陣列(盡管其它尺寸的宏塊也是可以的),并且可以將宏塊分成用于編碼和解碼的分區(qū)。例如,圖1表示可以在H.264標準中對宏塊進行分區(qū)的不同的方式。如圖1所示,宏塊可以以259種可能的方式中的一種被分區(qū)1.一個分區(qū)2.兩個垂直分區(qū)3.兩個水平分區(qū)以及4.四個較小的正方形分區(qū)。
在最后一種情況中,每個最后所得到的的正方形分區(qū)可以以相同的方式被分區(qū)(通過另外256種方式對宏塊進行分區(qū)),直到將一個單獨的宏塊分成最大16個分區(qū)。
宏塊的容量可以是自備的,或從一個或兩個不同的幀中預測得到。在接收到的比特流(在編碼過程中生成)中,后面的預測信息可以從每個分區(qū)得到運動向量(由x和y分量組成)以及該運動向量所依據(jù)的幀(在幀序列中)的相關(guān)指示器。該指示器可以是例如基準幀索引,其被用于連同相關(guān)的基準幀列表一起來指示該運動向量所依據(jù)的特定幀。
圖2表示基準幀索引和基準幀列表的概念。對于幀的每個片段,存儲了用于識別運動向量的特定幀的一個或多個基準幀列表。在圖2的實例中,第一和第二基準幀列表用于識別運動向量的特定幀。典型地,當接收到一個片段時,該片段的頭部含有得到幀基準列表的信息。
與運動向量相關(guān)的基準幀索引在基準幀列表中指定條目(含有幀號),其指示幀序列中運動向量所依據(jù)的幀。在圖2的實例中,有七個活動幀(即,目前在存儲設(shè)備中保持的幀),其從0至6編號。編號為“3”的幀目前正在被處理。如果基準幀索引給相關(guān)的第一運動向量指定值0,那么這表示在該第一基準幀列表的第一條目中的幀號是該運動向量所依據(jù)的幀。由此,如圖2的實例所示,編號為“2”的幀是該第一運動向量所依據(jù)的幀。在進一步的實例中,如果基準幀索引給相關(guān)的第二運動向量指定值2,那么這表示在第二基準幀列表(用于第二運動向量)的第三條目中的幀號是該第二運動向量所依據(jù)的幀。由此,如圖2的實例所示,編號為“6”的幀是該第二運動向量所依據(jù)的幀。
圖3表示含有幀的片段的分區(qū)數(shù)據(jù)的傳統(tǒng)的存儲設(shè)備結(jié)構(gòu)305的原理圖。在圖3的實例中,該片段由三個宏塊所組成,其中第一宏塊(宏塊0)由1個分區(qū)組成,第二宏塊(宏塊1)由16個分區(qū)組成,第三宏塊(宏塊2)由2個分區(qū)組成。
典型地,在解碼過程中,基于假定該片段的每個宏塊被分成最大數(shù)量的分區(qū)(例如在H.264標準情況下的16個分區(qū))的“最壞情況設(shè)想”,存儲設(shè)備被分配給片段。由此,在H.264標準下,對于該片段的每個宏塊,分配有足夠的存儲空間來存儲頭部和16個分區(qū)條目(entry)。數(shù)據(jù)結(jié)構(gòu)中的分區(qū)條目在幀的解碼過程中存儲分區(qū)數(shù)據(jù)。每個分區(qū)條目含有單個分區(qū)的數(shù)據(jù)(例如,運動向量和基準幀索引數(shù)據(jù))。
圖3的圖表表示已經(jīng)分配給片段的該存儲設(shè)備結(jié)構(gòu)的分配部分310。由于沒有將片段的每個宏塊典型地分成16個分區(qū),因此宏塊將經(jīng)常分配到比該宏塊中所含有的分區(qū)更多的分區(qū)條目的存儲量。由此,宏塊的該存儲設(shè)備結(jié)構(gòu)的分配部分將典型地含有一個或多個使用的分區(qū)條目(含有該宏塊的實際分區(qū)數(shù)據(jù)的條目)以及一個或多個不使用的分區(qū)條目(不含有該宏塊的分區(qū)數(shù)據(jù)的條目)。使用的分區(qū)條目含有有意義的/有用的數(shù)據(jù)(例如運動向量和分區(qū)的基準幀索引數(shù)據(jù)),反之,不使用分區(qū)條目不含有有意義的/有用的數(shù)據(jù)。
如圖3所示,對于該片段的每個宏塊,該存儲設(shè)備結(jié)構(gòu)含有頭部區(qū)段和分區(qū)條目區(qū)段。典型地,在解碼過程中,基于假定該宏塊被分成16個分區(qū)的“最壞情況設(shè)想”,給頭部分配存儲量。由此,對于每個宏塊頭部,分配了足夠的存儲空間用于16個頭部分區(qū)條目。宏塊的傳統(tǒng)頭部含有描述該宏塊怎樣被分區(qū)的數(shù)據(jù)。這種描述性的數(shù)據(jù)包括例如每個分區(qū)的位置和維數(shù)數(shù)據(jù)。圖4表示存儲在宏塊2的存儲設(shè)備結(jié)構(gòu)中的傳統(tǒng)頭部405的原理圖。宏塊2被分成2個分區(qū)。由此,頭部將包括2個使用的頭部分區(qū)條目,每個條目含有特定分區(qū)的描述性數(shù)據(jù)。剩余的14個頭部分區(qū)條目將為空(不使用)。此外,每個頭部典型地含有指示該宏塊中的分區(qū)數(shù)量的數(shù)據(jù)。
如圖3所示,存儲設(shè)備結(jié)構(gòu)305的第一部分315含有宏塊0的數(shù)據(jù)。由于宏塊0由1個分區(qū)組成,因此該存儲設(shè)備結(jié)構(gòu)含有僅用于宏塊0的第一分區(qū)的使用的分區(qū)條目(分區(qū)條目0),同時分配給宏塊0的剩余15個分區(qū)條目(分區(qū)條目1-15)為不使用條目。存儲設(shè)備結(jié)構(gòu)305的第二部分320含有用于宏塊1的數(shù)據(jù)。由于宏塊1由16個分區(qū)組成,因此該存儲設(shè)備結(jié)構(gòu)含有用于宏塊1的第一至第十六個分區(qū)的使用的分區(qū)條目(分區(qū)條目0-15),使得分配給宏塊1的所有條目都被使用。存儲設(shè)備結(jié)構(gòu)305的第三部分325含有宏塊2的數(shù)據(jù)。由于宏塊2由2個分區(qū)組成,因此該存儲設(shè)備結(jié)構(gòu)含有用于宏塊2的第一和第二分區(qū)的使用的分區(qū)條目,同時分配給宏塊2的剩余14個分區(qū)條目不被使用。
由此,該片段的分區(qū)數(shù)據(jù)典型地以隨意的模式存儲在存儲設(shè)備結(jié)構(gòu)中,其中不使用的分區(qū)條目散布在使用的分區(qū)條目中。存儲設(shè)備結(jié)構(gòu)中的數(shù)據(jù)存儲的這種隨意模式引起該片段的效率低的解碼。這是由于當CPU在解碼過程中從存儲設(shè)備中加載分區(qū)數(shù)據(jù)時,CPU從存儲設(shè)備結(jié)構(gòu)檢索存儲器的數(shù)據(jù)塊(如相鄰的分區(qū)數(shù)據(jù)),而不是僅檢索該CPU那時所需要的精確的數(shù)據(jù)。這些檢索到的數(shù)據(jù)塊可能含有使用和不使用的分區(qū)條目。這些檢索到的數(shù)據(jù)塊存儲在該CPU可以快速(典型地以比該CPU可以訪問該存儲設(shè)備結(jié)構(gòu)明顯更短的時間)訪問的高速緩沖存儲器(例如,CPU高速緩沖存儲器)中。
如果該CPU在處理該片段的過程中后來需要特定的分區(qū)數(shù)據(jù),那么該CPU首先確定特定分區(qū)數(shù)據(jù)是否存在于該高速緩沖存儲器中,這是由于該特定分區(qū)數(shù)據(jù)可能已經(jīng)包括在之前檢索到的數(shù)據(jù)塊中,并且訪問高速緩沖存儲器的時間比訪問該存儲設(shè)備結(jié)構(gòu)的時間短。如果特定分區(qū)數(shù)據(jù)存在于高速緩沖存儲器中,那么這被稱為“高速緩沖存儲器命中(hit)”,其中從高速緩沖存儲器檢索特定分區(qū)數(shù)據(jù)是快速的。如果該特定分區(qū)數(shù)據(jù)沒有存在于該高速緩沖存儲器中,那么這被稱為“高速緩沖存儲器失誤”,則該CPU必須隨后從較慢的該存儲設(shè)備結(jié)構(gòu)中檢索特定分區(qū)數(shù)據(jù)。
當特定數(shù)據(jù)以隨意的方式存儲在存儲設(shè)備結(jié)構(gòu)中時,其中不使用的分區(qū)條目散布在使用的分區(qū)條目中,那么由于檢索到的數(shù)據(jù)塊將還含有與使用的分區(qū)條目散布的不使用的分區(qū)條目,其中不使用的分區(qū)條目含有非有用數(shù)據(jù),因此在該片段的處理過程中,典型地存在較高比率的“高速緩沖存儲器失誤”。
由此,需要一種在存儲設(shè)備結(jié)構(gòu)中組織分區(qū)數(shù)據(jù)從而可以更有效地處理分區(qū)數(shù)據(jù)的方法。
發(fā)明內(nèi)容
本發(fā)明的一些實施方式通過以新穎的方式組織存儲設(shè)備結(jié)構(gòu)中的幀數(shù)據(jù)而簡化了幀的編碼/解碼。具體地,在給幀片段已經(jīng)分配的部分存儲設(shè)備結(jié)構(gòu)中,使用的分區(qū)條目(含有有用數(shù)據(jù)的條目)存儲在該分配部分的第一區(qū)段,不使用的分區(qū)條目(不含有有用數(shù)據(jù)的條目)存儲在該分配部分的第二區(qū)段,第一和第二區(qū)段包括在該存儲設(shè)備結(jié)構(gòu)中的連續(xù)和相鄰的區(qū)域。在一些實施方式中,使用的分區(qū)條目“打包”到該存儲設(shè)備結(jié)構(gòu)的分配部分的第一區(qū)段,同時不使用的分區(qū)條目占用該分配部分的剩余部分。
在一些實施方式中,確定/識別在視頻數(shù)據(jù)的編碼或解碼中有用的其它數(shù)據(jù),并將其存儲在使用的分區(qū)條目的未使用字節(jié)中。在一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在該宏塊的特定條目中(例如,該宏塊的第一分區(qū)的第一分區(qū)條目)。在這些實施方式中,頭部數(shù)據(jù)與分區(qū)條目的分區(qū)數(shù)據(jù)結(jié)合為一體。在這些實施方式中,對標準基準幀索引數(shù)據(jù)進行計算,并將其存儲在使用的分區(qū)條目的未使用字節(jié)中。在一些實施方式中,對宏塊的分區(qū)進行比較,以確定該宏塊的任何分區(qū)是否相同,由此將相同的分區(qū)合并成宏塊的單個分區(qū)。
圖1表示可以對宏塊在H.264壓縮標準下進行分區(qū)的不同方式。
圖2表示基準幀索引和基準幀列表的概念。
圖3表示含有幀的片段的分區(qū)數(shù)據(jù)的傳統(tǒng)存儲設(shè)備結(jié)構(gòu)的概念圖。
圖4表示存儲在存儲設(shè)備結(jié)構(gòu)中的傳統(tǒng)頭部的概念圖。
圖5表示在數(shù)據(jù)結(jié)構(gòu)中在幀解碼過程中存儲分區(qū)數(shù)據(jù)的分區(qū)條目的組成。
圖6表示含有用于幀片段的分區(qū)數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)的概念圖,根據(jù)本發(fā)明該分區(qū)數(shù)據(jù)在該存儲設(shè)備結(jié)構(gòu)中被組織。
圖7表示與圖6所示的存儲設(shè)備結(jié)構(gòu)的分配部分相關(guān)的定位器列表的概念圖。
圖8是用于存儲視頻幀片段的數(shù)據(jù)的方法流程圖。
圖9表示含有在該條目的6個不使用字節(jié)中的有用數(shù)據(jù)的分區(qū)條目的組成。
圖10表示H.264標準的查找表。
圖11表示含有幀片段的分區(qū)數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)的概念圖,其中頭部數(shù)據(jù)已經(jīng)結(jié)合在分區(qū)條目中。
圖12表示使用結(jié)合的頭部來存儲視頻幀片段的數(shù)據(jù)的方法流程圖。
圖13表示標準基準幀列表的實例。
圖14是使用標準基準幀索引來存儲幀序列中的一組幀片段的數(shù)據(jù)的方法流程圖。
圖15A-B表示合并分區(qū)的實例。
圖16是用于合并宏塊分區(qū)的方法流程圖。
圖17示出了實現(xiàn)本發(fā)明某些實施方式的計算機系統(tǒng)。
具體實施例方式
于2004年6月27日提出的序列號為60/583,447,題目為“對圖像進行編碼和解碼”的美國臨時專利申請的公開內(nèi)容在此通過引用清楚地結(jié)合。
在以下對本發(fā)明的詳細描述中,將對本發(fā)明的多處細節(jié)、實例以及實施方式進行闡述和說明。然而,對本領(lǐng)域技術(shù)人員顯而易見的是,本發(fā)明并不限于闡述的實施方式,并且本發(fā)明在沒有對某些具體細節(jié)以及實例進行討論的情況下仍可以實現(xiàn)。
分區(qū)條目在一些實施方式中,調(diào)整分區(qū)的分區(qū)條目,使其具有預定長度,以加快分區(qū)的解碼。由于調(diào)整上的考慮,因此數(shù)據(jù)典型地被分成多個特定數(shù)量的字節(jié)。在這些實施方式中,每個分區(qū)條目被調(diào)整為相同數(shù)量的預定字節(jié)。
圖5表示在幀的解碼過程中存儲分區(qū)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)中分區(qū)條目500的組成。每個分區(qū)條目含有單個分區(qū)數(shù)據(jù)(即,運動向量以及基準幀索引數(shù)據(jù))。在圖5所示的實例中,分區(qū)條目有16字節(jié)的長度。如圖所示,在分區(qū)條目(兩個字節(jié)用于運動向量的每個x或y分量)中,第一運動向量505的數(shù)據(jù)包括四個字節(jié)數(shù)據(jù),第二運動向量510的數(shù)據(jù)也包括四個字節(jié)的數(shù)據(jù)。在該分區(qū)條目中,第一基準幀索引515的數(shù)據(jù)包括一個字節(jié),第二基準幀索引520的數(shù)據(jù)也包括一個字節(jié)數(shù)據(jù)。如圖5的實例所示,其中分區(qū)條目具有16個字節(jié),分區(qū)條目含有十個使用的字節(jié),其中該條目的六個字節(jié)525典型地為空并且不被使用(即,不含有有意義的或有用的數(shù)據(jù))。
在編碼/解碼過程中存儲設(shè)備的有效使用在一些實施方式中,為了簡化幀片段的編碼/解碼,在該存儲設(shè)備結(jié)構(gòu)中組織該片段數(shù)據(jù),使得使用的分區(qū)條目不會散布在不使用的分區(qū)條目中。具體地,在已經(jīng)給該片段分配的一部分存儲設(shè)備結(jié)構(gòu)中,使用的分區(qū)條目存儲在該分配部分的第一區(qū)段,不使用的分區(qū)條目存儲在該分配部分的第二區(qū)段,在該存儲設(shè)備結(jié)構(gòu)中第一和第二區(qū)段的每個包括連續(xù)并且相鄰的存儲區(qū)域。在一些實施方式中,使用的分區(qū)條目“打包”到該存儲設(shè)備結(jié)構(gòu)的分配部分的第一預定區(qū)段,同時不使用的分區(qū)條目占用該分配部分的剩余部分。
與該存儲設(shè)備結(jié)構(gòu)的分配部分相聯(lián)系的是定位器列表,其是包含在該分配部分中的分區(qū)條目的索引的列表。具體地,該定位器列表包括索引列表(例如,指針),這些索引包含分配部分中的分區(qū)條目的位置信息(例如,地址信息)。該定位器列表和該分配部分一起對該分配部分中的特定宏塊的特定分區(qū)條目進行定位。
在一些實施方式中,每個宏塊的頭部數(shù)據(jù)存儲在存儲該使用的分區(qū)條目的該分配部分的第一區(qū)段中。在一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在第一區(qū)段中,但是與該宏塊的任何分區(qū)條目分開存儲。在另一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在宏塊的特定分區(qū)條目中(例如,該宏塊的第一分區(qū)的第一分區(qū)條目)。在這些實施方式中,該頭部數(shù)據(jù)與分區(qū)條目的分區(qū)數(shù)據(jù)相結(jié)合。
圖6表示含有幀片段的分區(qū)數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)605的原理圖,根據(jù)本發(fā)明在存儲設(shè)備結(jié)構(gòu)中組織該分區(qū)數(shù)據(jù)。在圖6的實例中,該片段由和圖3實例相同的三個宏塊組成,由此第一宏塊(宏塊0)由1個分區(qū)組成,第二宏塊(宏塊1)由16個分區(qū)組成,第三宏塊(宏塊2)由2個分區(qū)組成。
給該片段分配的存儲部分610的尺寸基于“最壞情況設(shè)想”而確定,使得對于該片段的每個宏塊分配有足夠的存儲空間來存儲頭部和16個分區(qū)條目(其中每個分區(qū)條目包括16字節(jié)數(shù)據(jù))。由此,對于宏塊0,有一個使用的分區(qū)條目(分區(qū)條目0)和15個不使用的分區(qū)條目(分區(qū)條目1-15);對于宏塊1,有16個使用的分區(qū)條目;對于宏塊2,有兩個使用的分區(qū)條目和14個不使用的分區(qū)條目。
如圖6所示,該片段的所有宏塊的使用的分區(qū)條目存儲(“打包”)到該存儲設(shè)備結(jié)構(gòu)的分配部分的第一區(qū)段630中,同時不使用的分區(qū)條目存儲在該分配部分的第二區(qū)段635中(該分配部分的剩余部分)。對于宏塊0,頭部數(shù)據(jù)和使用的分區(qū)條目0在宏塊0的第一“使用的”區(qū)段630的子分段615中。宏塊0的不使用的分區(qū)條目1-15在該分配部分的第二“不使用”區(qū)段635中。對于宏塊1,頭部數(shù)據(jù)和使用的分區(qū)條目0-15在宏塊1的第一“使用的”區(qū)段630的子分段620中。對于宏塊2,頭部數(shù)據(jù)和使用分區(qū)條目0-1在宏塊2的第一“使用的”區(qū)段630的子分段625中。宏塊2的不使用的分區(qū)條目2-15在該分配部分的第二“不使用”區(qū)段635中。與圖3形成對比,圖3中使用和不使用的分區(qū)條目散布在該存儲設(shè)備結(jié)構(gòu)305的整個分配部分310中。
由于將會遇到較少的高速緩沖存儲器失誤,因此以這種方式組織分區(qū)數(shù)據(jù)使得對片段進行解碼更加有效。當CPU從該分配部分的第一區(qū)段中檢索分區(qū)數(shù)據(jù)塊時,分區(qū)數(shù)據(jù)的每個塊將完全或大部分地由使用的分區(qū)條目組成,這是由于使用的分區(qū)條目已經(jīng)打包在第一區(qū)段中,不使用的分區(qū)條目打包在第二獨立區(qū)段中。由于該高速緩沖存儲器由此含有從該使用的分區(qū)條目中得到的大比例的有意義的/有用的數(shù)據(jù),因此這引起較少的高速緩沖存儲器失誤。
圖7表示與圖6所示的存儲設(shè)備結(jié)構(gòu)605的分配部分610相聯(lián)系的定位器列表705的原理圖。該定位器列表包括索引列表(例如,指針),其包含用于幫助在分配部分中定位分區(qū)條目的位置信息(例如,地址信息)。該定位器列表和該分配部分一起幫助對該分配部分中的特定宏塊的特定分區(qū)條目進行定位。
在一些實施方式中,僅有一個宏塊的索引存儲在該定位器列表705中。在一些實施方式中,在該定位器列表705中僅存儲宏塊第一分區(qū)的第一分區(qū)條目的索引。在這些實施方式中,該列表中的索引識別在該存儲設(shè)備結(jié)構(gòu)605的分配部分610中的該片段中的宏塊號以及該宏塊的第一分區(qū)條目的位置信息。例如,如圖7所示,宏塊0的索引含有在分配部分610中宏塊0的第一分區(qū)條目的位置信息。
圖8是用于存儲視頻幀片段的數(shù)據(jù)的方法800的流程圖。該方法800可以例如通過構(gòu)造使用數(shù)據(jù)存儲設(shè)備結(jié)構(gòu)來編碼或解碼數(shù)據(jù)流的應用而實施。
該方法800通過接收(在805)視頻幀片段的數(shù)據(jù)而開始,該片段含有兩個或更多宏塊,其中每個宏塊包含一個或多個分區(qū)。該片段的數(shù)據(jù)包括與該片段的宏塊分區(qū)相關(guān)的分區(qū)數(shù)據(jù)(例如,運動向量和基準幀索引數(shù)據(jù)),和每個宏塊的頭部數(shù)據(jù)。作為可選擇的步驟,對于每個宏塊,該方法比較(在807)該宏塊的分區(qū),并合并(在807)任何相同分區(qū)(以下將要討論)。
該方法然后分配(在810)用于存儲片段數(shù)據(jù)的部分存儲設(shè)備結(jié)構(gòu),該分配的存儲部分包括為分區(qū)條目和宏塊頭部分配的存儲設(shè)備。在一些實施方式中,該分配的存儲部分的尺寸根據(jù)分配給該片段的每個宏塊的分區(qū)條目的預定個數(shù)而確定。在一些實施方式中,該分配的存儲部分的尺寸根據(jù)“最壞情況設(shè)想”而確定,使得該片段的每個宏塊分配有足夠的存儲空間來存儲宏塊頭部和16個分區(qū)條目。
然后該方法將與該片段的分區(qū)相聯(lián)系的分區(qū)數(shù)據(jù)存儲(在812)在分配的分區(qū)條目中(稱作使用的分區(qū)條目)。作為可選擇的步驟,該方法確定(在813)另外的有用的/有意義的數(shù)據(jù),并將其存儲(在813)在使用的分區(qū)條目的不使用的字節(jié)中(以下將要討論)。在一些實施方式中,該方法對結(jié)合在一起的頭部數(shù)據(jù)或標準基準幀索引數(shù)據(jù)進行計算(在813),并將其存儲(在813)在使用的分區(qū)條目中。在一些實施方式中,該方法計算/識別并存儲在分區(qū)編碼或解碼中有用的任何其它數(shù)據(jù)。
該方法800然后將每個宏塊的頭部數(shù)據(jù)存儲(在815)在該分配的存儲部分的第一區(qū)段中。該方法800還將使用的分區(qū)條目存儲/放置(在817)在該分配的存儲部分的第一區(qū)段中,其中使用的分區(qū)條目含有該片段的宏塊的分區(qū)數(shù)據(jù)。該方法800還將不使用的分區(qū)條目(不含有分區(qū)數(shù)據(jù)的條目)存儲/放置(在820)在分配的存儲部分的第二區(qū)段中。在一些實施方式中,該第一和第二區(qū)段的每個包括在分配的存儲部分中的存儲設(shè)備的連續(xù)區(qū)域,由此使用的分區(qū)條目沒有散布在該分配的存儲部分中的不使用的分區(qū)條目中。
該方法800然后生成(在825)與該分配的存儲部分相聯(lián)系的定位器列表,該定位器列表包括索引列表(例如,指針),其包含分配部分中的分區(qū)條目的位置信息(例如,地址信息)。該定位器列表用于幫助在分配部分中定位特定宏塊的特定分區(qū)條目。在一些實施方式中,在該定位器列表中僅存儲宏塊第一分區(qū)的第一分區(qū)條目的索引。然后該方法結(jié)束。
分區(qū)條目中的不使用的字節(jié)的使用被結(jié)合的頭部如圖6所示,對于每個宏塊,存在也在該分配部分的第一區(qū)段中存儲的宏塊頭部數(shù)據(jù),其中該第一區(qū)段存儲了使用的分區(qū)條目。在一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在第一區(qū)段,但是與該宏塊的任意分區(qū)條目分開存儲。在另一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在該宏塊的特定分區(qū)條目中。在這些實施方式中,該頭部數(shù)據(jù)和分區(qū)條目的分區(qū)數(shù)據(jù)結(jié)合在一起。
如圖5的實例所示,分區(qū)條目可以是16字節(jié)長度。如圖5所示,分區(qū)數(shù)據(jù)(運動向量和基準幀索引數(shù)據(jù))包括10字節(jié)505-520的分區(qū)條目,留下六字節(jié)525的分區(qū)條目未使用。圖9表示根據(jù)本發(fā)明的分區(qū)條目900的組成,其中,分區(qū)條目900在6個未使用的字節(jié)525的條目中含有有用數(shù)據(jù)。
在一些實施方式中,宏塊的頭部數(shù)據(jù)存儲在宏塊的特定分區(qū)條目的不使用的字節(jié)中。在一些實施方式中,該宏塊的頭部數(shù)據(jù)僅結(jié)合在該宏塊的第一分區(qū)的第一分區(qū)條目中。在一些實施方式中,被結(jié)合的頭部數(shù)據(jù)930包括分區(qū)條目900的2字節(jié)的不使用字節(jié)525。
該被結(jié)合的頭部數(shù)據(jù)930和分區(qū)配置查找表一起用來識別宏塊的唯一分區(qū)配置。如以上所討論的,在H.264標準下,宏塊可以被分區(qū)成259個不同的可能的分區(qū)配置。在這些實施方式中,生成查找表,該查找表含有259種不同的可能的分區(qū)配置中的每一個以及與每個分區(qū)配置(例如,范圍從0-258)相聯(lián)系的唯一標識符。在圖10中示出了H.264標準的查找表1005的實例。在這些實施方式中,對于每個宏塊,該被結(jié)合的頭部數(shù)據(jù)識別查找表中的特定分區(qū)配置,其指示該宏塊的分區(qū)配置(其中該被結(jié)合的頭部數(shù)據(jù)的值與該特定分區(qū)配置所相關(guān)的唯一標識符相匹配)。
回顧宏塊的傳統(tǒng)頭部含有有關(guān)該宏塊怎樣被分區(qū)的說明性數(shù)據(jù),并且包括例如在該宏塊中的每個分區(qū)相對于該宏塊的位置和大小的數(shù)據(jù)。該傳統(tǒng)的說明性數(shù)據(jù)可以從宏塊的唯一分區(qū)配置中得到,這是由于該分區(qū)配置將指示該宏塊中的每個分區(qū)相對于該宏塊的位置和大小的數(shù)據(jù)。由此,一旦確定了該宏塊的唯一分區(qū)配置,那么也可以確定在頭部中典型地包含的該說明性數(shù)據(jù)。
由于被結(jié)合的頭部數(shù)據(jù)存儲在分區(qū)條目的不使用的部分中,并且將不需要傳統(tǒng)頭部的單獨的存儲空間,因此使用被結(jié)合的頭部數(shù)據(jù)將減少存儲設(shè)備的消耗。圖11表示含有幀片段的分區(qū)數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)的概念圖,其中頭部數(shù)據(jù)已經(jīng)結(jié)合在分區(qū)條目中。注意,和圖3和6相對比,不再需要用于每個宏塊的單獨的頭部區(qū)段。
圖12是使用被結(jié)合的頭部存儲視頻幀片段的數(shù)據(jù)的方法1200的流程圖。該方法1200可以通過使用數(shù)據(jù)存儲設(shè)備結(jié)構(gòu)配置來編碼或解碼視頻數(shù)據(jù)流的應用而實施。
該方法1200通過接收(在1205)視頻幀片段的數(shù)據(jù)而開始,該片段含有兩個或更多個宏塊,其中每個宏塊包含一個或多個分區(qū)。該片段的數(shù)據(jù)包括與該片段的宏塊分區(qū)相關(guān)的分區(qū)數(shù)據(jù)(例如,運動向量和基準幀索引數(shù)據(jù)),以及含有描述該宏塊怎樣被分區(qū)的數(shù)據(jù)的每個宏塊的頭部數(shù)據(jù)(例如,該宏塊的每個分區(qū)的位置和尺寸數(shù)據(jù))。
然后該方法1200生成或接收(在1206)分區(qū)配置查找表,其含有宏塊的每個可能的分區(qū)配置,每個可能的分區(qū)配置具有相聯(lián)系的唯一標識符(例如,用數(shù)字表示的標識符)。對于該片段的每個宏塊,該方法1200隨后在該查找表中識別(在1207)與該宏塊的分區(qū)配置相匹配的特定分區(qū)配置。然后該方法1200從該查找表中確定(在1208)與該識別的分區(qū)配置相關(guān)的唯一標識符。該相關(guān)的唯一標識符在此稱為宏塊的被結(jié)合的頭部數(shù)據(jù)。該方法可以使用宏塊的接收到的頭部數(shù)據(jù)來識別(在1207)該宏塊的特定分區(qū)配置,其中接收到的頭部數(shù)據(jù)含有描述宏塊怎樣被分區(qū)的數(shù)據(jù)。由此,宏塊的被結(jié)合的頭部數(shù)據(jù)從該宏塊的最初接收到的頭部數(shù)據(jù)中得到(在步驟1207和1208)。
然后該方法分配(在1210)部分用于存儲該片段的數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)。在一些實施方式中,不用考慮該片段的宏塊的頭部數(shù)據(jù)的單獨存儲區(qū)段,就可以確定分配的存儲部分的大小。在這些實施方式中,預定個數(shù)的分區(qū)條目被分配給該片段的每個宏塊,同時沒有給每個宏塊的頭部數(shù)據(jù)分配單獨的存儲區(qū)段(如圖11所示)。
然后該方法將與片段的分區(qū)相關(guān)的分區(qū)數(shù)據(jù)存儲(在1212)在分配的分區(qū)條目中(稱作使用的分區(qū)條目)。然后該方法1200將每個宏塊的被結(jié)合的頭部數(shù)據(jù)(在步驟1208中確定)存儲(在1215)在該宏塊的分區(qū)的使用的分區(qū)條目中。該方法可以通過將該被結(jié)合的頭部數(shù)據(jù)存儲在該宏塊的分區(qū)條目的任何不使用的字節(jié)中來實現(xiàn)這點。在一些實施方式中,宏塊的被結(jié)合的頭部數(shù)據(jù)僅存儲在該宏塊的第一分區(qū)的第一使用的分區(qū)條目中。在一些實施方式中,被結(jié)合的頭部數(shù)據(jù)包括使用的分區(qū)條目中的2字節(jié)不使用的字節(jié)。
在一些實施方式中,該方法1200隨后將使用的分區(qū)條目存儲/放置(在1217)在該分配的存儲部分的第一區(qū)段中。在一些實施方式中,該方法1200還將不使用的分區(qū)條目(不含有分區(qū)數(shù)據(jù)的條目)存儲/放置(在1220)在該分配的存儲部分的第二區(qū)段中。在一些實施方式中,該方法1200隨后生成(在1225)與該分配的存儲部分相關(guān)的定位器列表,該定位器列表包括索引列表,其含有在該分配的部分中的分區(qū)條目的位置信息。然后該方法結(jié)束。
標準基準幀索引在一些實施方式中,對標準基準幀索引進行計算并將其存儲在每個分區(qū)條目的不使用的字節(jié)中。在這些實施方式中,分區(qū)條目的第一和第二基準幀索引分別與標準基準幀索引形成映射。
正如以上聯(lián)系圖2所討論的那樣,與運動向量相聯(lián)系的基準幀索引在基準幀列表中指定條目(含有幀號),其指示該運動向量所依據(jù)的幀。由于第一和第二基準幀列表可以對于幀的每個片段而改變,因此不可能有保證地確定在不同宏塊的不同分區(qū)條目中具有相同值的基準幀索引是否指示同一幀。例如,在兩個不同宏塊中的兩個分區(qū)條目可能每個具有與其第一運動向量相關(guān)的基準幀索引“2”。可是這并不表示這兩個第一運動向量都基于同一幀。
這導致例如在解碼過程的去塊效應濾波器(deblocking filter)階段中的低效率。在去塊效應濾波器階段中,對于兩個時間相鄰的宏塊,確定這些分區(qū)的第一和第二運動向量的值是否相同(或者在預定偏差之內(nèi)),并且確定第一和第二運動向量是否基于同一幀。如果是這樣,這表示這些分區(qū)的運動是相同的(或幾乎相同),由此隨后應用不同的去塊效應濾波過程(例如,較弱的濾波過程)。
典型地,一個效率低的過程用于確定兩個分區(qū)的第一和第二運動向量是否基于同一幀。這個過程要求每個分區(qū)檢索與該運動向量相關(guān)的基準幀索引、檢索基準幀列表、確定由基準幀索引所指定的基準幀列表中的幀號。然后,這個過程需要對這些幀號進行比較,來確定這些幀是否是相同的。
在一些實施方式中,產(chǎn)生標準基準幀列表,并將其存儲并用于幀的所有片段或一個序列的所有幀。在一些實施方式中,在解碼過程中沒有修改該標準基準幀列表。圖13表示標準基準幀列表的實例。
在一些實施方式中,分區(qū)條目中的基準幀索引與標準基準幀索引形成映射。在這些實施方式中,基準幀索引和相聯(lián)系的基準幀列表一起確定由基準幀索引所指示的幀號。然后使匹配的幀號在標準基準幀列表中定位,以在含有該匹配幀號的標準基準幀列表中確定條目號(標準基準幀索引)。該確定的標準基準幀索引然后存儲在分區(qū)條目的不使用的字節(jié)中。在圖9所示的實例中,標準基準幀索引935的數(shù)據(jù)包括兩個字節(jié)的不使用的字節(jié)525。
下面是使用圖13所示的標準基準幀列表和圖2所示的第一和第二基準幀列表進行映射過程的實例。假定第一基準幀索引“2”和第二基準幀索引“0”包含在分區(qū)條目中。與基準幀索引“2”相聯(lián)系的第一基準幀列表在條目號0、1和2處分別含有幀號2、1和0。這樣,基準幀索引“2”指示幀號0。在標準基準幀列表中,該幀號0與條目0中的幀號相匹配。這樣,基準幀索引2與標準基準幀索引0形成映射。相似地,與第二基準幀索引“0”相聯(lián)系的第二基準幀列表在條目號0、1和2處分別含有幀號4、5和6。這樣,第二基準幀索引“0”指示幀號4。在該標準基準幀列表中,幀號4與條目3中的幀號相匹配。這樣,第二基準幀索引0與標準基準幀索引3形成映射。
在一些實施方式中,單個標準基準幀列表被產(chǎn)生并存儲。在另一些實施方式中,分別產(chǎn)生并存儲用于識別第一運動向量的特定幀的第一標準基準幀列表和用于識別第二運動向量的特定幀的第二標準基準幀列表。
在這些實施方式中,生成標準基準幀列表以及將基準幀索引映射到標準基準幀索引會增加開銷。然而,一旦實施這些操作,就及時減少了用于確定兩個分區(qū)的運動向量是否基于同一幀的過程。在這些實施方式中,為了執(zhí)行該確定,僅需要檢索和比較該分區(qū)的標準基準幀索引。此外,由于不需要該幀號的實際值,因此不需要確定由該標準基準幀索引所指示的幀號。由于標準基準幀索引對同一標準基準幀列表進行索引,因此具有相同值的標準基準幀索引由此指定相同的幀號。
圖14是使用標準基準幀索引存儲幀序列中的一組幀片段的數(shù)據(jù)的方法1400流程圖。該方法1400可以例如通過配置來使用數(shù)據(jù)存儲設(shè)備結(jié)構(gòu)對視頻數(shù)據(jù)流進行編碼或解碼的應用而實施。
該方法1400開始于接收(在1405)視頻幀的一組的一個或多個片段,每個片段含有兩個或更多個宏塊,其中每個宏塊包括一個或多個分區(qū)。該組片段的數(shù)據(jù)包括每個片段的頭部數(shù)據(jù)(含有一個或多個初始基準幀列表的數(shù)據(jù))、與這些宏塊的分區(qū)相聯(lián)系的分區(qū)數(shù)據(jù)(運動向量以及初始基準幀索引數(shù)據(jù)),以及每個宏塊的頭部數(shù)據(jù)。在一些實施方式中,分區(qū)的運動向量和初始基準幀索引數(shù)據(jù)包括用于第一和第二運動向量以及相聯(lián)系的第一和第二初始基準幀索引的數(shù)據(jù)。第一初始基準幀索引在相聯(lián)系的第一初始基準幀列表(其可以從包括的該分區(qū)的片段的頭部數(shù)據(jù)中得到)中指定一個條目(含有幀號),該條目指示該第一運動向量所基于的該幀序列中的特定幀。同樣,第二初始基準幀索引在相聯(lián)系的第二初始基準幀列表(其可以從包括該分區(qū)的片段的頭部數(shù)據(jù)中得到)中指定一個條目,該條目指示該第二運動向量所基于的該幀序列中的特定幀。
然后該方法生成或接收(在1406)標準基準幀列表,該標準基準幀列表用于該組片段中的所有片段。該標準基準幀列表包括一列標準基準幀索引(條目號)以及一列幀號,每個幀號對應特定標準基準幀索引。在一些實施方式中,生成用于映射第一和第二初始基準幀索引(下面將要討論)的單個標準基準幀列表。在另一些實施方式中,分別生成用于映射第一和第二初始基準幀索引的第一和第二標準基準幀列表。
對于接收到的一組片段中宏塊的每個分區(qū),該方法1400使用初始基準幀列表和標準基準幀列表,將與該分區(qū)相聯(lián)系的第一和第二初始基準幀索引分別映射(在1407)到第一和第二標準基準幀索引。該方法可以通過確定與分區(qū)相聯(lián)系的初始基準幀列表中的初始基準幀索引所指示的幀號,在該標準基準幀列表中匹配該幀號,并且對應于該匹配的幀號來確定標準基準幀索引來實現(xiàn)。這樣,第一和第二標準基準幀索引分別指示與該分區(qū)相聯(lián)系的第一和第二運動向量所基于的那些幀。
注意,同一標準基準幀列表用于使分區(qū)的初始基準幀索引與標準基準幀索引形成映射。即使該初始基準幀索引可以根據(jù)不同的初始基準幀列表(例如,當與該初始基準幀索引相聯(lián)系的分區(qū)處于接收的一組片段中的不同片段中時),這也是不變的。結(jié)果,即使這些分區(qū)包括在不同的片段中,在具有同一相聯(lián)系的標準基準幀索引的組中的任一片段中的任何分區(qū)都涉及并且指示該幀序列中的同一幀。如上所述,該標準基準幀索引的這個特點可以在該分區(qū)隨后的處理過程中提供便利。
對于該組片段中的每個片段,然后該方法1400分配(在1410)用于存儲該片段數(shù)據(jù)的存儲設(shè)備結(jié)構(gòu)的特定部分。在這些實施方式中,給每個片段的每個宏塊分配預定個數(shù)的分區(qū)條目。然后該方法將與該片段的分區(qū)相聯(lián)系的分區(qū)數(shù)據(jù)存儲(在1412)在該分配的分區(qū)條目中(稱為使用的分區(qū)條目)。
對于在接收到的該組片段中的每個分區(qū),該方法1400然后將與該分區(qū)相聯(lián)系的第一和第二標準基準幀索引存儲(在1415)在該分區(qū)的使用的分區(qū)條目中。該方法可以通過將第一和第二標準基準幀索引數(shù)據(jù)存儲在該分區(qū)的分區(qū)條目的任何不使用的字節(jié)中來實現(xiàn)。在一些實施方式中,第一和第二標準基準幀索引數(shù)據(jù)包括使用的分區(qū)條目中2個字節(jié)的不使用的字節(jié)。
在一些實施方式中,對于每個片段(包括多個分區(qū)),該方法1400還將使用的分區(qū)條目(含該片段中的分區(qū)的數(shù)據(jù))存儲/放置(在1417)在該片段分配得到的存儲部分的第一區(qū)段中。在一些實施方式中,對于每個片段,該方法1400還將不使用的分區(qū)條目(不含有分區(qū)數(shù)據(jù)的條目)存儲/放置(在1420)在該片段分配得到的存儲部分的第二區(qū)段中。在一些實施方式中,對于每個片段,該方法1400產(chǎn)生(在1425)與該片段分配的存儲部分相聯(lián)系的定位器列表,該定位器列表包括索引列表,其含有在該分配的部分中的分區(qū)條目的位置信息。然后該方法結(jié)束。
在分區(qū)條目中的不使用的字節(jié)的其它用途如上所述,分區(qū)條目含有6個不使用的字節(jié)。在一些實施方式中,被結(jié)合的頭部數(shù)據(jù)930存儲在宏塊的第一分區(qū)的不使用的字節(jié)中。在一些實施方式中,計算標準基準幀索引935,并將其存儲在每個分區(qū)條目的不使用的字節(jié)中。
在另一些實施方式中,使用該分區(qū)條目的不使用的字節(jié)使分區(qū)的編碼和解碼更有效。在一些實施方式中,分區(qū)條目的不使用字節(jié)用于存儲方便該分區(qū)的編碼或解碼的被識別或計算的數(shù)據(jù)。例如,可以計算該宏塊的多個分區(qū),或?qū)⑵浯鎯υ谠摵陦K的第一分區(qū)的不使用字節(jié)中。這就不需要在解碼過程中之后進行的多個分區(qū)的計算。在圖9所示的實例中,多個分區(qū)940的數(shù)據(jù)包括一個字節(jié)的不使用字節(jié)。
在圖9所示的實例中,使用的字節(jié)525中的數(shù)據(jù)(諸如被結(jié)合的頭部數(shù)據(jù)930以及標準基準幀索引的數(shù)據(jù)935)以特定的順序表示在分區(qū)條目900中。不過,本領(lǐng)域普通技術(shù)人員將理解也可以使用其它數(shù)據(jù)順序。
分區(qū)的合并在一些實施方式中,當相同宏塊的一些或所有分區(qū)具有相同的運動向量和相同的基準幀索引(稱為同一分區(qū))時,為了解碼的目的,相同分區(qū)聚集(合并)成單個分區(qū)。在這種情況下,對于該宏塊只需保存一個分區(qū)條目,而不是保存多個分區(qū)條目,由此減少了存儲設(shè)備的開銷。
圖15A表示當該相同宏塊的所有四個分區(qū)都具有相同運動向量和基準幀索引時,這四個分區(qū)為了解碼合并成單個分區(qū)的實例。這樣,對于該宏塊只需保存一個分區(qū)條目,而不是四個分區(qū)條目。圖15B表示當該相同宏塊的五個分區(qū)中的兩個具有相同的運動向量和基準幀索引時的實例,這兩個相同的分區(qū)位于該宏塊的左上側(cè)。如圖15B所示,這兩個相同的分區(qū)合并成單個分區(qū),使得對于該宏塊只需保存四個分區(qū)條目,而不是五個分區(qū)條目。
在一些實施方式中,該合并方法結(jié)合本發(fā)明的分區(qū)條目打包方法(關(guān)于圖6已在以上討論)一起使用。在這些實施方式中,在將宏塊的使用分區(qū)條目打包在存儲設(shè)備結(jié)構(gòu)分配部分的第一區(qū)段中之前,檢查該宏塊分區(qū),以確定在該宏塊中是否有任何相同的分區(qū)。如果有,則該宏塊的相同分區(qū)聚合成單個分區(qū),并且這些相同分區(qū)的單個分區(qū)條目存儲在該分配部分的第一區(qū)段中。
當相同宏塊分區(qū)具有相同的第一和第二運動向量以及相同的第一和第二基準幀索引時,就可以更有效地將同樣的分區(qū)處理成單個分區(qū)。盡管進行運動向量和基準幀索引比較會有初始時間的開銷,但是一旦同樣的分區(qū)合并成單個分區(qū),那么可以比以前更快地執(zhí)行每個解碼階段,為了執(zhí)行任何解碼功能,僅需要在一個較大的合并過的分區(qū)上執(zhí)行一個操作,而不需要在幾個較小的分區(qū)上執(zhí)行幾個操作。對每個將要在該合并的分區(qū)上執(zhí)行的每個解碼功能在時間上將比之前更有效率,僅需要一個加載操作和一個解碼功能的請求,而不需要多個加載操作和多個解碼功能請求。
注意,相同宏塊的分區(qū)使用相同的基準幀列表,這是由于相同的基準幀列表用于相同片段的所有宏塊。這樣,由于基準幀索引結(jié)合相同的基準幀列表一起使用,不需要確定和比較由基準幀索引所指定的實際幀號。
圖16是合并視頻片段的宏塊分區(qū)的方法1600流程圖。在一些實施方式中,該方法1600包括關(guān)于圖8描述的方法800的步驟807。在圖8的方法800中,方法800接收(在805)視頻幀的片段數(shù)據(jù),該片段含有兩個或更多個宏塊,其中每個宏塊包含一個或多個分區(qū)。該片段的數(shù)據(jù)包括分區(qū)數(shù)據(jù)(例如,運動向量和基準幀索引數(shù)據(jù)),其與該片段的宏塊的分區(qū)以及每個宏塊的頭部數(shù)據(jù)相聯(lián)系。
該方法1600開始于將接收到的片段設(shè)定(在1605)成當前宏塊。該方法1600然后通過比較與分區(qū)相聯(lián)系的分區(qū)數(shù)據(jù)(運動向量和基準幀索引數(shù)據(jù))對當前宏塊的所有分區(qū)進行比較(在1610)。該方法然后確定(在1615)當前宏塊的任何分區(qū)是否是相同的(即,與任何分區(qū)相聯(lián)系的該運動向量和基準幀索引數(shù)據(jù)是否是相同的)。如果相同,則該方法將當前宏塊的相同分區(qū)合并(在1620)成一個分區(qū),并繼續(xù)步驟1625。如果不同,那么該方法直接進行到步驟1625。
在步驟1625,該方法確定當前宏塊是否是該片段的最后一個宏塊。如果不是,該方法將下一個宏塊設(shè)定(在1630)成當前宏塊,并繼續(xù)步驟1610。如果是最后一個宏塊,那么該方法結(jié)束。
圖17代表計算機系統(tǒng)1700,本發(fā)明的一些實施方式通過該計算機系統(tǒng)1700而實現(xiàn)。計算機系統(tǒng)1700包括總線1705、處理器1710、系統(tǒng)存儲器1715、只讀存儲器1720、永久存儲設(shè)備1725、輸入設(shè)備1730以及輸出設(shè)備1735。
總線1705集中代表所有系統(tǒng)、外圍設(shè)備以及芯片組總線,這些總線可通信地連接計算機系統(tǒng)1700的多個內(nèi)部設(shè)備。例如,總線1705通過只讀存儲器1720、系統(tǒng)存儲器1715以及永久存儲設(shè)備1725可通信地連接處理器1710。
只讀存儲器(ROM)1720存儲處理器1710和該計算機系統(tǒng)的其它模塊所必須的靜態(tài)數(shù)據(jù)和指令。另一方面,該永久存儲設(shè)備1725是讀寫存儲設(shè)備。該設(shè)備是非易失性存儲器單元,即使當該計算機系統(tǒng)1700關(guān)閉時,其也存儲指令和數(shù)據(jù)。本發(fā)明的一些實施方式使用海量存貯設(shè)備(諸如磁盤或光盤以及其相應的磁盤驅(qū)動)作為永久存儲設(shè)備1725。另一些實施方式使用可移動存儲設(shè)備(諸如軟盤或zip盤,及其相應的磁盤驅(qū)動器)作為永久存儲設(shè)備。
和永久存儲設(shè)備1725類似,系統(tǒng)存儲器1715是讀寫存儲器設(shè)備。然而與存儲設(shè)備1725不同的是,系統(tǒng)存儲器是易失性讀寫存儲器,諸如隨機存取存儲器(RAM)。該系統(tǒng)存儲器存儲處理器在運行期間所需的一些指令和數(shù)據(jù)。
在一些實施方式中,實現(xiàn)本發(fā)明的方法所必需的指令和/或數(shù)據(jù)存儲在系統(tǒng)存儲器1715、永久存儲設(shè)備1725、只讀存儲器1720或者三者的任意組合中。例如,不同的存儲器單元可以包括用于根據(jù)本發(fā)明的方法編碼或解碼視頻數(shù)據(jù)流的指令,和/或包括視頻數(shù)據(jù)。為了執(zhí)行本發(fā)明的過程,處理器1710從這些不同的存儲單元檢索執(zhí)行的指令和處理的數(shù)據(jù)。
總線1705也連接到輸入和輸出設(shè)備1730和1735。輸入設(shè)備1730可以使得用戶傳遞信息并選擇給計算機系統(tǒng)1700的命令。輸入設(shè)備1730包括字母數(shù)字鍵盤和光標控制器。輸出設(shè)備1735顯示由計算機系統(tǒng)1700生成的圖像。輸出設(shè)備包括打印機和顯示設(shè)備,諸如陰極射線管(CRT)和液晶顯示器(LCD)。
最后,如圖17所示,例如通過網(wǎng)絡適配器(未示出),總線1705也將計算機系統(tǒng)1700連接到網(wǎng)絡1765。以這種方式,計算機系統(tǒng)1700可以是計算機網(wǎng)絡(諸如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或者企業(yè)內(nèi)部互聯(lián)網(wǎng))或者網(wǎng)絡(諸如因特網(wǎng))的一部分。計算機系統(tǒng)1700的任何或所有組件可以結(jié)合本發(fā)明一起使用。然而,本領(lǐng)域的普通技術(shù)人員將理解任何其它的系統(tǒng)配置也可以用在本發(fā)明中。
雖然根據(jù)本發(fā)明參考多個具體細節(jié)進行了描述,但是本領(lǐng)域的普通技術(shù)人員將認識到在不背離本發(fā)明的精神的情況下,可以以其它具體的形式來體現(xiàn)本發(fā)明。例如,本發(fā)明的多個實施方式通過參照宏塊進行了上述描述。本領(lǐng)域的普通技術(shù)人員將認識到這些實施方式可以結(jié)合其它像素值陣列一起使用。
權(quán)利要求
1.一種用于將視頻幀片段的數(shù)據(jù)存儲在給該片段分配的存儲設(shè)備中的方法,該片段包括兩個或多個宏塊,每個宏塊包括一個或多個分區(qū),并具有多個分區(qū)條目,該多個分區(qū)條目分配給所述分配的存儲設(shè)備中的所述宏塊,所述片段數(shù)據(jù)包括所述宏塊分區(qū)的分區(qū)數(shù)據(jù),所述方法包括將所述宏塊的使用的分區(qū)條目存儲在所述分配的存儲設(shè)備的第一區(qū)段中,其中使用的分區(qū)條目含有宏塊分區(qū)數(shù)據(jù);以及將所述宏塊的不使用的分區(qū)條目存儲在所述分配的存儲設(shè)備的第二區(qū)段中,其中不使用的分區(qū)條目不含有宏塊分區(qū)的數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其中所述第一和第二區(qū)段的每個包括在所述分配的存儲設(shè)備中的連續(xù)存儲區(qū)域,由此使用的分區(qū)條目不會散布在所述分配的存儲設(shè)備中的不使用的分區(qū)條目中。
3.如權(quán)利要求1所述的方法,進一步包括產(chǎn)生與所述分配的存儲設(shè)備相聯(lián)系的索引列表,在該索引列表中的索引識別所述片段中的宏塊和僅用于所述分配的存儲設(shè)備中的所述宏塊的第一分區(qū)條目的位置信息。
4.如權(quán)利要求1所述的方法,其中所述片段數(shù)據(jù)進一步包括每個宏塊的初始頭部數(shù)據(jù),所述方法進一步包括使用所述宏塊的初始頭部數(shù)據(jù)得到宏塊的被結(jié)合的頭部數(shù)據(jù);以及將得到的用于所述宏塊的所述被結(jié)合的頭部數(shù)據(jù)存儲在所述宏塊的使用的分區(qū)條目中。
5.如權(quán)利要求4所述的方法,其中所述得到步驟包括識別與所述宏塊的分區(qū)配置相匹配的分區(qū)配置;以及確定與所述宏塊所識別的分區(qū)配置相關(guān)的唯一標識符,該唯一標識符包括所述宏塊的被結(jié)合的頭部數(shù)據(jù)。
6.如權(quán)利要求5所述的方法,其中使用包括所述宏塊的可能的分區(qū)配置的分區(qū)配置查找表進行所述識別和確定,其中每個可能的分區(qū)配置具有相關(guān)的唯一標識符。
7.如權(quán)利要求1所述的方法,其中所述片段包括在幀序列中的幀中,所述幀的數(shù)據(jù)進一步包括第一初始幀基準列表,并且分區(qū)具有相聯(lián)系的運動向量以及指示在所述第一初始幀基準列表中的幀號的初始幀索引,所述幀號指示所述運動向量所根據(jù)的幀序列中的特定幀,該方法進一步包括對于該片段中的一個或多個分區(qū),使用所述第一初始幀基準列表和標準幀基準列表使相關(guān)的初始基準幀索引映射到標準基準幀索引;以及將所述標準基準幀索引的數(shù)據(jù)存儲在所述分區(qū)的使用的分區(qū)條目中。
8.如權(quán)利要求7所述的方法,其中所述標準基準幀索引指示在所述標準幀基準列表中的幀號,該幀號指示與所述分區(qū)相聯(lián)系的運動向量所依據(jù)的所述幀序列中的特定幀。
9.如權(quán)利要求7所述的方法,進一步包括接收附加的視頻幀片段的數(shù)據(jù),其中在所述幀序列中的幀中包括該附加的片段,所述附加的片段數(shù)據(jù)包括不同于所述第一初始幀基準列表的第二初始幀基準列表,并且所述附加的片段中的分區(qū)具有相關(guān)的運動向量以及指示所述第二初始幀基準列表中幀號的初始基準幀索引,該幀號指示所述運動向量所根據(jù)的該幀序列中的特定幀;以及對于所述附加的片段中的一個或多個分區(qū),使用所述第二初始幀基準列表和標準幀基準列表,使相關(guān)的初始基準幀索引映射到標準基準幀索引。
10.如權(quán)利要求9所述的方法,其中對于具有相同值的任何一個片段中的任一分區(qū)而映射的任何標準基準幀索引指示所述幀序列中的相同的特定幀。
11.如權(quán)利要求1所述的方法,其中使用的分區(qū)條目包括使用的字節(jié)和不使用的字節(jié),使用的字節(jié)包括運動向量和基準幀索引數(shù)據(jù),該方法進一步包括確定在所述片段的編碼或解碼中有用的其它數(shù)據(jù);以及將該確定的數(shù)據(jù)存儲在使用的分區(qū)條目的不使用的字節(jié)中。
12.如權(quán)利要求1所述的方法,進一步包括確定特定宏塊的兩個或更多個分區(qū)是否相同;以及基于該確定將這兩個或更多個分區(qū)合并成特定宏塊的單個分區(qū)。
13.如權(quán)利要求12所述的方法,其中分區(qū)的分區(qū)數(shù)據(jù)包括運動向量和基準幀索引數(shù)據(jù);以及確定兩個或更多個分區(qū)是否相同的過程包括確定這兩個或更多個分區(qū)的運動向量以及基準幀索引數(shù)據(jù)是否相同。
14.一種計算機程序產(chǎn)品,包括具有在其上存儲指令的計算機可讀介質(zhì),當執(zhí)行時,其將視頻幀片段數(shù)據(jù)存儲在為該片段分配的存儲設(shè)備中,所述片段包括兩個或多個宏塊,每個宏塊包括一個或多個分區(qū),并具有為所述分配的存儲設(shè)備中的宏塊分配的多個分區(qū)條目,該片段的數(shù)據(jù)包括為所述宏塊分區(qū)的分區(qū)數(shù)據(jù),所述計算機程序產(chǎn)品包括的指令組用于將所述宏塊的使用的分區(qū)條目存儲在所述分配的存儲設(shè)備的第一區(qū)段中,其中使用的分區(qū)條目含有用于宏塊分區(qū)的數(shù)據(jù);以及將所述宏塊的不使用的分區(qū)條目存儲在所述分配的存儲設(shè)備的第二區(qū)段中,其中不使用的分區(qū)條目不含有用于宏塊分區(qū)的數(shù)據(jù)。
15.如權(quán)利要求14所述的計算機程序產(chǎn)品,其中所述第一和第二區(qū)段的每個包括在所述分配的存儲設(shè)備中的連續(xù)存儲區(qū)域,由此使用的分區(qū)條目不會散布在所述分配的存儲設(shè)備中的不使用的分區(qū)條目中。
16.如權(quán)利要求14所述的計算機程序產(chǎn)品,其中所述片段的數(shù)據(jù)進一步包括每個宏塊的初始頭部數(shù)據(jù),所述計算機程序產(chǎn)品進一步包括的指令組用于使用所述宏塊的初始頭部數(shù)據(jù)得到被結(jié)合的宏塊的頭部數(shù)據(jù);以及將為所述宏塊得到的被結(jié)合的頭部數(shù)據(jù)存儲在所述宏塊的使用的分區(qū)條目中。
17.如權(quán)利要求14所述的計算機程序產(chǎn)品,其中所述片段包括在幀序列的幀中,所述片段的數(shù)據(jù)進一步包括第一初始幀基準列表的數(shù)據(jù),分區(qū)具有相關(guān)的運動向量以及指示所述第一初始幀基準列表中的幀號的初始基準幀索引,所述幀號指示運動向量所依據(jù)的所述幀序列中的特定幀,所述計算機程序產(chǎn)品進一步包括的指令組用于對于所述片段中的一個或多個分區(qū),使用所述第一初始幀基準列表和標準幀基準列表,使相關(guān)的初始基準幀索引映射到標準基準幀索引;以及將所述標準基準幀索引數(shù)據(jù)存儲在所述分區(qū)的使用的分區(qū)條目中。
18.如權(quán)利要求17所述的計算機程序產(chǎn)品,進一步包括的指令組用于接收附加的視頻幀片段數(shù)據(jù),其中,該附加的片段包括在所述幀序列的幀中,所述附加的片段數(shù)據(jù)包括不同于第一初始幀基準列表的第二初始幀基準列表的數(shù)據(jù),并且所述附加的片段中的分區(qū)具有相關(guān)的運動向量以及指示所述第二初始幀基準列表中幀號的初始基準幀索引,該幀號指示該運動向量所依據(jù)的該幀序列中的特定幀;以及對于所述附加的片段中的一個或多個分區(qū),使用所述第二初始幀基準列表和標準幀基準列表,使相關(guān)的初始基準幀索引映射到標準基準幀索引,其中,具有相同值的任何一個片段中的任一分區(qū)所映射的任何標準基準幀索引指示所述幀序列中的相同的特定幀。
19.如權(quán)利要求14所述的計算機程序產(chǎn)品,其中使用的分區(qū)條目包括使用的字節(jié)和不使用的字節(jié),使用的字節(jié)包括運動向量和基準幀索引數(shù)據(jù),該計算機程序產(chǎn)品進一步包括的指令組用于確定在所述片段的編碼和解碼中有用的其它數(shù)據(jù);以及將所述確定的數(shù)據(jù)存儲在使用的分區(qū)條目的不使用的字節(jié)中。
20.如權(quán)利要求14所述的計算機程序產(chǎn)品,進一步包括的指令組用于確定特定宏塊的兩個或更多個分區(qū)是否相同;以及基于該確定將這兩個或更多個分區(qū)合并成特定宏塊的單個分區(qū)。
全文摘要
本發(fā)明公開了通過以新穎的方式組織存儲設(shè)備結(jié)構(gòu)中的幀數(shù)據(jù)來簡化幀的編碼/解碼的實施方式。具體地,在分配給幀片段的存儲設(shè)備結(jié)構(gòu)中,使用的分區(qū)條目存儲在該分配部分的第一區(qū)段中,不使用的分區(qū)條目存儲在該分配部分的第二區(qū)段中,第一和第二區(qū)段的每個包括在該存儲設(shè)備結(jié)構(gòu)中的連續(xù)區(qū)域,使得使用的分區(qū)條目不會散布在不使用的分區(qū)條目中。在一些實施方式中,確定在視頻數(shù)據(jù)的編碼或解碼中有用的附加數(shù)據(jù),并將其存儲在使用的分區(qū)條目的不使用的字節(jié)中(諸如宏塊頭部數(shù)據(jù)或標準基準幀索引數(shù)據(jù))。在一些實施方式中,宏塊的兩個或更多個相同分區(qū)合并成單個分區(qū)。
文檔編號H04N7/26GK1812579SQ20051007999
公開日2006年8月2日 申請日期2005年6月27日 優(yōu)先權(quán)日2004年6月27日
發(fā)明者C·L·杜維維耶 申請人:蘋果電腦有限公司